Browse Source

Merge remote-tracking branch 'origin/master'

Guo1B0 10 months ago
parent
commit
5b332e6a2f
75 changed files with 3301 additions and 1500 deletions
  1. 33 3
      fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/analysis/index.vue
  2. 1 1
      fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/order/api.ts
  3. 5 5
      fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/order/component/information.vue
  4. 1 1
      fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/order/index.vue
  5. 1 1
      fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/product/index.vue
  6. 44 9
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/SalesOrderController.java
  7. 2 2
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/SalesOrderService.java
  8. 2 6
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/SalesOrderServiceImpl.java
  9. 10 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  10. 6 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  11. 5 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserWithBeisenController.java
  12. 10 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java
  13. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/DepartmentMapper.java
  14. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java
  15. 5 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  16. 72 79
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java
  17. 76 11
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  18. 85 12
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  19. 22 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/DepartmentMapper.xml
  20. 24 24
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  21. 9 5
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/WxCorpInfoController.java
  22. 5 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/PlanMapper.java
  23. 4 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/ReportMapper.java
  24. 10 5
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanServiceImpl.java
  25. 6 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProdProcedureServiceImpl.java
  26. 48 23
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  27. 9 5
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/task/TimingTask.java
  28. 63 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ReportMapper.xml
  29. BIN
      fhKeeper/formulahousekeeper/management-workshop/workshop_print.2024-06-24.log.gz
  30. 3 3
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/todayPlan/distribution.vue
  31. 53 9
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/statistic/index.vue
  32. 11 10
      fhKeeper/formulahousekeeper/timesheet/.vscode/settings.json
  33. 18 18
      fhKeeper/formulahousekeeper/timesheet/src/components/taskComponent.vue
  34. 649 6
      fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json
  35. 644 5
      fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json
  36. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/404.vue
  37. 6 7
      fhKeeper/formulahousekeeper/timesheet/src/views/Expire.vue
  38. 9 9
      fhKeeper/formulahousekeeper/timesheet/src/views/Login.vue
  39. 23 23
      fhKeeper/formulahousekeeper/timesheet/src/views/Register.vue
  40. 17 17
      fhKeeper/formulahousekeeper/timesheet/src/views/awayOffice/awayOffice.vue
  41. 3 22
      fhKeeper/formulahousekeeper/timesheet/src/views/centerManage/centerManage.vue
  42. 25 25
      fhKeeper/formulahousekeeper/timesheet/src/views/contract/index.vue
  43. 167 167
      fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue
  44. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/customer/list.vue
  45. 32 32
      fhKeeper/formulahousekeeper/timesheet/src/views/desktop/detail.vue
  46. 17 17
      fhKeeper/formulahousekeeper/timesheet/src/views/desktop/index.vue
  47. 17 17
      fhKeeper/formulahousekeeper/timesheet/src/views/desktop/unusual.vue
  48. 83 83
      fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue
  49. 20 20
      fhKeeper/formulahousekeeper/timesheet/src/views/financeAudit/financeAudit.vue
  50. 21 21
      fhKeeper/formulahousekeeper/timesheet/src/views/leave/list.vue
  51. 17 17
      fhKeeper/formulahousekeeper/timesheet/src/views/market/list.vue
  52. 7 7
      fhKeeper/formulahousekeeper/timesheet/src/views/message.vue
  53. 18 18
      fhKeeper/formulahousekeeper/timesheet/src/views/profession/list.vue
  54. 6 6
      fhKeeper/formulahousekeeper/timesheet/src/views/project/CostBaseline.vue
  55. 31 31
      fhKeeper/formulahousekeeper/timesheet/src/views/project/budgetReview.vue
  56. 57 35
      fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue
  57. 5 5
      fhKeeper/formulahousekeeper/timesheet/src/views/project/custom_data.vue
  58. 10 10
      fhKeeper/formulahousekeeper/timesheet/src/views/project/detailDep.vue
  59. 25 25
      fhKeeper/formulahousekeeper/timesheet/src/views/project/fileCenter.vue
  60. 12 12
      fhKeeper/formulahousekeeper/timesheet/src/views/project/finance.vue
  61. 36 36
      fhKeeper/formulahousekeeper/timesheet/src/views/project/gantt.vue
  62. 23 9
      fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue
  63. 234 145
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  64. 24 24
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectForm.vue
  65. 29 27
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue
  66. 7 7
      fhKeeper/formulahousekeeper/timesheet/src/views/project/vueGantt.vue
  67. 18 18
      fhKeeper/formulahousekeeper/timesheet/src/views/projectApproval/projectApproval.vue
  68. 58 58
      fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue
  69. 26 26
      fhKeeper/formulahousekeeper/timesheet/src/views/task/list.vue
  70. 73 73
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue
  71. 155 155
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  72. 16 13
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue
  73. 23 23
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/weeklyCustomization.vue
  74. 5 5
      fhKeeper/formulahousekeeper/timesheet/src/views/workflow/report.vue
  75. 2 2
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

+ 33 - 3
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/analysis/index.vue

@@ -199,7 +199,17 @@ watchEffect(() => {
                   start-placeholder="开始日期"
                   start-placeholder="开始日期"
                   end-placeholder="结束日期"
                   end-placeholder="结束日期"
                 />
                 />
-                <el-button size="small" type="primary" @click="select1?.blur">确认</el-button>
+                <el-button
+                  size="small"
+                  type="primary"
+                  @click="
+                    () => {
+                      select1?.blur();
+                      bulletinPrompt.date = 'ignore';
+                    }
+                  "
+                  >确认</el-button
+                >
               </div>
               </div>
             </el-option>
             </el-option>
           </el-select>
           </el-select>
@@ -294,7 +304,17 @@ watchEffect(() => {
                       start-placeholder="开始日期"
                       start-placeholder="开始日期"
                       end-placeholder="结束日期"
                       end-placeholder="结束日期"
                     />
                     />
-                    <el-button size="small" type="primary" @click="select2?.blur">确认</el-button>
+                    <el-button
+                      size="small"
+                      type="primary"
+                      @click="
+                        () => {
+                          select2?.blur();
+                          summaryPrompt.date = 'ignore';
+                        }
+                      "
+                      >确认</el-button
+                    >
                   </div>
                   </div>
                 </el-option>
                 </el-option>
               </el-select>
               </el-select>
@@ -387,7 +407,17 @@ watchEffect(() => {
                       start-placeholder="开始日期"
                       start-placeholder="开始日期"
                       end-placeholder="结束日期"
                       end-placeholder="结束日期"
                     />
                     />
-                    <el-button size="small" type="primary" @click="select3?.blur">确认</el-button>
+                    <el-button
+                      size="small"
+                      type="primary"
+                      @click="
+                        () => {
+                          select3?.blur();
+                          stagePrompt.date = 'ignore';
+                        }
+                      "
+                      >确认</el-button
+                    >
                   </div>
                   </div>
                 </el-option>
                 </el-option>
               </el-select>
               </el-select>

+ 1 - 1
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/order/api.ts

@@ -45,5 +45,5 @@ export const tableColumns: TableColumn[] = [
 export const paymentStatus = [
 export const paymentStatus = [
     { value: 0, label: '未回款' },
     { value: 0, label: '未回款' },
     { value: 1, label: '已回款' },
     { value: 1, label: '已回款' },
-    { value: 2, label: '完全回款' },
+    { value: 2, label: '完全回款' },
 ]
 ]

+ 5 - 5
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/order/component/information.vue

@@ -190,7 +190,7 @@ const formItems = reactive([
     { label: '客户名称', key: 'customName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '客户名称', key: 'customName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '商机名称', key: 'businessOpportunityName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '商机名称', key: 'businessOpportunityName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '订单金额', key: 'price', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '订单金额', key: 'price', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
-    { label: '回款状态', key: 'statusValue', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
+    { label: '回款状态', key: 'receivedStatus', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '已回款金额', key: 'receivedPayment', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '已回款金额', key: 'receivedPayment', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '未回款', key: 'unReceivedPayment', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '未回款', key: 'unReceivedPayment', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '订单类型', key: 'type', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '订单类型', key: 'type', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
@@ -200,8 +200,8 @@ const formItems = reactive([
     { label: '负责人', key: 'inchargerName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '负责人', key: 'inchargerName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '创建人', key: 'creatorName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '创建人', key: 'creatorName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '创建时间', key: 'createTime', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '创建时间', key: 'createTime', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
-    { label: '客户签约人', key: 'customSigner', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
-    { label: '公司签约人', key: 'companySigner', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
+    { label: '客户签约人', key: 'customSignerName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
+    { label: '公司签约人', key: 'companySignerName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '备注', key: 'remark', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '100%' },
     { label: '备注', key: 'remark', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '100%' },
 ])
 ])
 
 
@@ -209,8 +209,8 @@ watchEffect(() => {
     const { data } = props
     const { data } = props
     info.value = data
     info.value = data
     formItems.forEach(item => {
     formItems.forEach(item => {
-        if (item.key === 'statusValue') {
-            const status = info.value['status'];
+        if (item.key === 'receivedStatus') {
+            const status = info.value['receivedStatus'];
             item.value = status !== '' && status !== null ? (paymentStatus.find(p => p.value === status)?.label || '') : '';
             item.value = status !== '' && status !== null ? (paymentStatus.find(p => p.value === status)?.label || '') : '';
         } else {
         } else {
             item.value = info.value[item.key] || '';
             item.value = info.value[item.key] || '';

+ 1 - 1
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/order/index.vue

@@ -166,7 +166,7 @@ const selectData = reactive({ // 下拉数据
   Personnel: [] as personnelInterface[],
   Personnel: [] as personnelInterface[],
   Customer: [] as any[], // 客户名称
   Customer: [] as any[], // 客户名称
   OrderType: [] as any[], // 订单类型
   OrderType: [] as any[], // 订单类型
-  RemittanceStatus: [{ id: 0, name: '已回款' }, { id: 1, name: '未回款' }, { id: 2, name: '已完全回款' }] as any[], // 回款状态
+  RemittanceStatus: [{ id: 0, name: '未回款' }, { id: 1, name: '已回款' }, { id: 2, name: '已完全回款' }] as any[], // 回款状态
   AllProduct: [] as any[] // 所有产品
   AllProduct: [] as any[] // 所有产品
 })
 })
 const formTablePaging = reactive({ // 分页条件
 const formTablePaging = reactive({ // 分页条件

+ 1 - 1
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/product/index.vue

@@ -247,7 +247,7 @@ function editProduct(item: any) {
   dialogVisible.editProductVisible = true
   dialogVisible.editProductVisible = true
   allLoading.generateFormLading = true
   allLoading.generateFormLading = true
   if (item) {
   if (item) {
-    genereditForm.value = item
+    genereditForm.value = { ...item, status: String(item.status) }
     allText.editClueText = '编辑产品'
     allText.editClueText = '编辑产品'
   }
   }
   if (!item) {
   if (!item) {

+ 44 - 9
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/SalesOrderController.java

@@ -100,6 +100,9 @@ public class SalesOrderController {
             order.setUnReceivedPayment(price.subtract(order.getReceivedPayment()));
             order.setUnReceivedPayment(price.subtract(order.getReceivedPayment()));
         }else {
         }else {
             order.setUnReceivedPayment(order.getPrice());
             order.setUnReceivedPayment(order.getPrice());
+            order.setReceivedStatus(0);
+            //修改已退回金额为0 是否要删除所有回款数据
+            salesOrderPaymentService.remove(new LambdaQueryWrapper<SalesOrderPayment>().eq(SalesOrderPayment::getOrderId,order.getId()));
         }
         }
         int countCode;
         int countCode;
         int countName;
         int countName;
@@ -387,8 +390,8 @@ public class SalesOrderController {
     * @Date: 2024/5/16
     * @Date: 2024/5/16
     */
     */
     @RequestMapping("/dataSummary")
     @RequestMapping("/dataSummary")
-    public HttpRespMsg dataSummary(Integer queryType,Integer dateType){
-        return salesOrderService.dataSummary(queryType,dateType);
+    public HttpRespMsg dataSummary(Integer queryType,Integer dateType,String startDate,String endDate){
+        return salesOrderService.dataSummary(queryType,dateType,startDate,endDate);
     }
     }
 
 
     /**
     /**
@@ -406,8 +409,12 @@ public class SalesOrderController {
         SalesOrderPayment salesOrderPayment=new SalesOrderPayment();
         SalesOrderPayment salesOrderPayment=new SalesOrderPayment();
         salesOrderPayment.setMoney(new BigDecimal(money));
         salesOrderPayment.setMoney(new BigDecimal(money));
         salesOrderPayment.setOrderId(orderId);
         salesOrderPayment.setOrderId(orderId);
-        if(money>salesOrder.getUnReceivedPayment().doubleValue()){
-            msg.setError("回款金额不能大于当前未回款金额");
+        if(salesOrder.getReceivedStatus()==2){
+            msg.setError("当前订单已完全回款");
+            return msg;
+        }
+        if(money>salesOrder.getPrice().doubleValue()){
+            msg.setError("回款金额不能大于订单金额");
             return msg;
             return msg;
         }
         }
         List<SalesOrderPayment> list = salesOrderPaymentService.list(new LambdaQueryWrapper<SalesOrderPayment>().eq(SalesOrderPayment::getOrderId, orderId));
         List<SalesOrderPayment> list = salesOrderPaymentService.list(new LambdaQueryWrapper<SalesOrderPayment>().eq(SalesOrderPayment::getOrderId, orderId));
@@ -449,8 +456,8 @@ public class SalesOrderController {
     * @Date: 2024/5/21
     * @Date: 2024/5/21
     */
     */
     @RequestMapping("/businessOpportunityStage")
     @RequestMapping("/businessOpportunityStage")
-    public HttpRespMsg businessOpportunityStage(Integer queryType,Integer dateType){
-        return salesOrderService.businessOpportunityStage(queryType,dateType);
+    public HttpRespMsg businessOpportunityStage(Integer queryType,Integer dateType,String startDate,String endDate){
+        return salesOrderService.businessOpportunityStage(queryType,dateType,startDate,endDate);
     }
     }
 
 
     /**
     /**
@@ -489,22 +496,44 @@ public class SalesOrderController {
         HttpRespMsg msg=new HttpRespMsg();
         HttpRespMsg msg=new HttpRespMsg();
         SalesOrderPayment payment = salesOrderPaymentService.getById(paymentId);
         SalesOrderPayment payment = salesOrderPaymentService.getById(paymentId);
         SalesOrder salesOrder = salesOrderService.getById(payment.getOrderId());
         SalesOrder salesOrder = salesOrderService.getById(payment.getOrderId());
-        List<SalesOrderPayment> list = salesOrderPaymentService.list(new LambdaQueryWrapper<SalesOrderPayment>().eq(SalesOrderPayment::getOrderId, salesOrder.getId()).orderByDesc(SalesOrderPayment::getCreateTime));
+        List<SalesOrderPayment> list = salesOrderPaymentService.list(new LambdaQueryWrapper<SalesOrderPayment>().eq(SalesOrderPayment::getOrderId, salesOrder.getId()).orderByAsc(SalesOrderPayment::getCreateTime));
         int i = list.indexOf(payment);
         int i = list.indexOf(payment);
         if(money!=null){
         if(money!=null){
+            if(salesOrder.getReceivedStatus()==2){
+                msg.setError("当前订单已完全回款");
+                return msg;
+            }
+            if(money>salesOrder.getPrice().doubleValue()){
+                msg.setError("回款金额不能大于订单金额");
+                return msg;
+            }
+            double sum = list.stream().mapToDouble(s -> s.getMoney().doubleValue()).sum();
+            if((sum)>salesOrder.getPrice().doubleValue()){
+                msg.setError("总回款金额不能大于订单金额");
+                return msg;
+            }
             //找到原回款数据
             //找到原回款数据
             BigDecimal nowMoney = new BigDecimal(money);
             BigDecimal nowMoney = new BigDecimal(money);
             BigDecimal oldMoney = payment.getMoney();
             BigDecimal oldMoney = payment.getMoney();
             //离当前回款数据最近一次回款的未回款数据作为依据
             //离当前回款数据最近一次回款的未回款数据作为依据
-            SalesOrderPayment salesOrderPayment =list.size()>1?list.get(i+1):list.get(i);
+            SalesOrderPayment salesOrderPayment =list.size()>1?list.get(i-1):list.get(i);
             BigDecimal unReceivedPayment = salesOrderPayment.getUnReceivedPayment();
             BigDecimal unReceivedPayment = salesOrderPayment.getUnReceivedPayment();
-            unReceivedPayment=unReceivedPayment.subtract(nowMoney);
+            unReceivedPayment=unReceivedPayment.add(oldMoney).subtract(nowMoney);
             payment.setMoney(new BigDecimal(money));
             payment.setMoney(new BigDecimal(money));
             payment.setUnReceivedPayment(unReceivedPayment);
             payment.setUnReceivedPayment(unReceivedPayment);
             if(!salesOrderPaymentService.updateById(payment)){
             if(!salesOrderPaymentService.updateById(payment)){
                 msg.setError("验证失败");
                 msg.setError("验证失败");
                 return msg;
                 return msg;
             }
             }
+            if(money>0){
+                //回款金额大于0的情况下才能算一次回款
+                if(unReceivedPayment.doubleValue()<=0){
+                    //未回款金额小于等于0 说明完全回款修改状态
+                    salesOrder.setReceivedStatus(2);
+                }else {
+                    salesOrder.setReceivedStatus(1);
+                }
+            }
             //订单上的已回款金额
             //订单上的已回款金额
             BigDecimal receivedPayment = salesOrder.getReceivedPayment();
             BigDecimal receivedPayment = salesOrder.getReceivedPayment();
             receivedPayment=receivedPayment.subtract(oldMoney).add(nowMoney);
             receivedPayment=receivedPayment.subtract(oldMoney).add(nowMoney);
@@ -538,6 +567,12 @@ public class SalesOrderController {
         unReceivedPayment=unReceivedPayment.add(oldMoney);
         unReceivedPayment=unReceivedPayment.add(oldMoney);
         salesOrder.setReceivedPayment(receivedPayment);
         salesOrder.setReceivedPayment(receivedPayment);
         salesOrder.setUnReceivedPayment(unReceivedPayment);
         salesOrder.setUnReceivedPayment(unReceivedPayment);
+        if(unReceivedPayment.doubleValue()>0){
+            salesOrder.setReceivedStatus(1);
+        }
+        if(receivedPayment.intValue()==0){
+            salesOrder.setReceivedStatus(0);
+        }
         if(!salesOrderService.updateById(salesOrder)){
         if(!salesOrderService.updateById(salesOrder)){
             msg.setError("验证失败");
             msg.setError("验证失败");
             return msg;
             return msg;

+ 2 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/SalesOrderService.java

@@ -25,9 +25,9 @@ public interface SalesOrderService extends IService<SalesOrder> {
 
 
     HttpRespMsg salesKit(Integer queryType,Integer dateType, String startDate, String endDate);
     HttpRespMsg salesKit(Integer queryType,Integer dateType, String startDate, String endDate);
 
 
-    HttpRespMsg dataSummary(Integer queryType, Integer dateType);
+    HttpRespMsg dataSummary(Integer queryType, Integer dateType,String startDate,String endDate);
 
 
-    HttpRespMsg businessOpportunityStage(Integer queryType, Integer dateType);
+    HttpRespMsg businessOpportunityStage(Integer queryType, Integer dateType,String startDate,String endDate);
 
 
     HttpRespMsg productWithOrder(Integer id);
     HttpRespMsg productWithOrder(Integer id);
 
 

+ 2 - 6
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/SalesOrderServiceImpl.java

@@ -891,7 +891,7 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
     }
     }
 
 
     @Override
     @Override
-    public HttpRespMsg dataSummary(Integer queryType, Integer dateType) {
+    public HttpRespMsg dataSummary(Integer queryType, Integer dateType,String startDate,String endDate) {
         HttpRespMsg msg=new HttpRespMsg();
         HttpRespMsg msg=new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
         User user = userMapper.selectById(request.getHeader("token"));
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
@@ -899,8 +899,6 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
         List<Department> allDeptList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, companyId));
         List<Department> allDeptList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, companyId));
         String userId=null;
         String userId=null;
         List<String> targetUserIds=new ArrayList<>();
         List<String> targetUserIds=new ArrayList<>();
-        String startDate=null;
-        String endDate=null;
         if(dateType!=null){
         if(dateType!=null){
             switch (dateType){
             switch (dateType){
                 case 0:
                 case 0:
@@ -1008,7 +1006,7 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
     }
     }
 
 
     @Override
     @Override
-    public HttpRespMsg businessOpportunityStage(Integer queryType, Integer dateType) {
+    public HttpRespMsg businessOpportunityStage(Integer queryType, Integer dateType,String startDate,String endDate) {
         HttpRespMsg msg=new HttpRespMsg();
         HttpRespMsg msg=new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
         User user = userMapper.selectById(request.getHeader("token"));
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
@@ -1016,8 +1014,6 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
         List<Department> allDeptList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, companyId));
         List<Department> allDeptList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, companyId));
         String userId=null;
         String userId=null;
         List<String> targetUserIds=new ArrayList<>();
         List<String> targetUserIds=new ArrayList<>();
-        String startDate=null;
-        String endDate=null;
         if(dateType!=null){
         if(dateType!=null){
             switch (dateType){
             switch (dateType){
                 case 0:
                 case 0:

+ 10 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -172,7 +172,9 @@ public class ProjectController {
                                    Double outputValue,
                                    Double outputValue,
                                    Integer deptId,
                                    Integer deptId,
                                    @RequestParam(defaultValue = "false") boolean onlyChangeParticipate,
                                    @RequestParam(defaultValue = "false") boolean onlyChangeParticipate,
-                                   String buId,Double manDay,String  manDayStartDate,String plate1,
+                                   String buId,Double manDay,String  manDayStartDate,
+                                   String reviwerId,
+                                   String plate1,
                                    String plate2,
                                    String plate2,
                                    String plate3,
                                    String plate3,
                                    String plate4,
                                    String plate4,
@@ -185,7 +187,7 @@ public class ProjectController {
         return projectService.editProject(id, name, code, userId, inchargerId, isPublic, planStartDate, planEndDate, level, contractAmount,changeContractReason,
         return projectService.editProject(id, name, code, userId, inchargerId, isPublic, planStartDate, planEndDate, level, contractAmount,changeContractReason,
                 projectBaseCostData,projectKeyNodesData,
                 projectBaseCostData,projectKeyNodesData,
                  budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames,
                  budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames,
-                taskGpIncharge,auditUserIds, ccUserIds, category, projectDesc,projectMainId, providerIds, providerNames, request,projectSeparate,outputValue,deptId,onlyChangeParticipate,buId,manDay,manDayStartDate,plate1,plate2,plate3,plate4,plate5,plate6,plate7,plate8,plate9,plate10);
+                taskGpIncharge,auditUserIds, ccUserIds, category, projectDesc,projectMainId, providerIds, providerNames, request,projectSeparate,outputValue,deptId,onlyChangeParticipate,buId,manDay,manDayStartDate,reviwerId, plate1,plate2,plate3,plate4,plate5,plate6,plate7,plate8,plate9,plate10);
     }
     }
 
 
     @RequestMapping("/adjustBase")
     @RequestMapping("/adjustBase")
@@ -1512,5 +1514,11 @@ public class ProjectController {
         msg.data = projectService.list(new QueryWrapper<Project>().select("id","project_code", "project_name").eq("company_id", companyId));
         msg.data = projectService.list(new QueryWrapper<Project>().select("id","project_code", "project_name").eq("company_id", companyId));
         return msg;
         return msg;
     }
     }
+
+    @RequestMapping("/batchChangeStage")
+    public HttpRespMsg batchChangeStage(@RequestParam String projectIdArray, @RequestParam Integer stageId,
+                                        @RequestParam String stageName,HttpServletRequest request) {
+        return projectService.batchChangeStage(projectIdArray, stageId, stageName, request);
+    }
 }
 }
 
 

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

@@ -623,7 +623,7 @@ public class ReportController {
         } else {
         } else {
             //自动填充项目审核人
             //自动填充项目审核人
             for (int i=0;i<projectAuditorId.length; i++) {
             for (int i=0;i<projectAuditorId.length; i++) {
-                if (projectAuditorId[i] == null) {
+                if (projectAuditorId[i] == null || comTimeType.getReportAuditType() == 8) {
                     final int index = i;
                     final int index = i;
                     projectAuditorId[i] = projectList.stream().filter(p->p.getId().equals(projectId[index])).findFirst().get().getInchargerId();
                     projectAuditorId[i] = projectList.stream().filter(p->p.getId().equals(projectId[index])).findFirst().get().getInchargerId();
                 }
                 }
@@ -1507,6 +1507,11 @@ public class ReportController {
                     }
                     }
                 }
                 }
             }
             }
+        } else if (comTimeType.getReportAuditType() == 8) {
+            //默认是第一步审核
+            for (Report report : reportList) {
+                report.setIsFinalAudit(0);
+            }
         }
         }
 
 
 
 

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

@@ -573,6 +573,11 @@ public class UserWithBeisenController {
                     return false;
                     return false;
                 }).collect(Collectors.toList());
                 }).collect(Collectors.toList());
                 if(lastVacationList.size()>0){
                 if(lastVacationList.size()>0){
+                    for (int i = 0; i < lastVacationList.size(); i++) {
+                        JSONObject vacation = lastVacationList.get(i);
+                        String vacationStartDateTime = vacation.getString("VacationStartDateTime");
+                        String VacationStopDateTime = vacation.getString("VacationStopDateTime");
+                    }
                     double vacationDuration = lastVacationList.stream().mapToDouble(i -> i.getDouble("VacationDuration")).sum();
                     double vacationDuration = lastVacationList.stream().mapToDouble(i -> i.getDouble("VacationDuration")).sum();
                     BigDecimal decimal = new BigDecimal(vacationDuration);
                     BigDecimal decimal = new BigDecimal(vacationDuration);
                     decimal=decimal.divide(new BigDecimal(60),1,RoundingMode.HALF_DOWN);
                     decimal=decimal.divide(new BigDecimal(60),1,RoundingMode.HALF_DOWN);

+ 10 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java

@@ -26,7 +26,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  * </p>
  *
  *
  * @author Seyason
  * @author Seyason
- * @since 2023-11-19
+ * @since 2024-07-11
  */
  */
 @Data
 @Data
 @EqualsAndHashCode(callSuper = false)
 @EqualsAndHashCode(callSuper = false)
@@ -477,6 +477,15 @@ public class Project extends Model<Project> {
 
 
     @TableField(exist = false)
     @TableField(exist = false)
     private String groupName;
     private String groupName;
+    /**
+     * 项目复审人
+     */
+    @TableField("reviwer_id")
+    private String reviwerId;
+
+    @TableField(exist = false)
+    private String reviwerName;
+
 
 
     @Override
     @Override
     protected Serializable pkVal() {
     protected Serializable pkVal() {

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/DepartmentMapper.java

@@ -21,6 +21,8 @@ public interface DepartmentMapper extends BaseMapper<Department> {
 
 
     List<Map<String, Object>> getCostByUser(@Param("departmentIds") List departmentIds, String startDate, String endDate, Integer companyId, List<String> userIds);
     List<Map<String, Object>> getCostByUser(@Param("departmentIds") List departmentIds, String startDate, String endDate, Integer companyId, List<String> userIds);
 
 
+    List<Map<String, Object>> getCostByUserSum(@Param("departmentIds") List departmentIds, String startDate, String endDate, Integer companyId);
+
     List<Map<String, Object>> getCustomDataByUser(@Param("departmentIds") List departmentIds, String startDate, String endDate, Integer companyId, List<String> userIds);
     List<Map<String, Object>> getCustomDataByUser(@Param("departmentIds") List departmentIds, String startDate, String endDate, Integer companyId, List<String> userIds);
     @Update("update department set manager_id = null where department_id = #{departmentId}")
     @Update("update department set manager_id = null where department_id = #{departmentId}")
     void updateNullManager(Integer departmentId);
     void updateNullManager(Integer departmentId);

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java

@@ -182,4 +182,6 @@ public interface ProjectMapper extends BaseMapper<Project> {
     List<Map<String, Object>> userTaskProcessList(Integer deptId, String userId, Integer projectId, Integer companyId, @Param("list") List<Integer> deptIds,String startDate,String endDate,@Param("listSecond") List<Integer> regularDeptIds, Integer start, Integer size);
     List<Map<String, Object>> userTaskProcessList(Integer deptId, String userId, Integer projectId, Integer companyId, @Param("list") List<Integer> deptIds,String startDate,String endDate,@Param("listSecond") List<Integer> regularDeptIds, Integer start, Integer size);
 
 
     Long userTaskProcessListCount(Integer deptId, String userId, Integer projectId, Integer companyId, @Param("list") List<Integer> deptIds,String startDate,String endDate,@Param("listSecond") List<Integer> regularDeptIds);
     Long userTaskProcessListCount(Integer deptId, String userId, Integer projectId, Integer companyId, @Param("list") List<Integer> deptIds,String startDate,String endDate,@Param("listSecond") List<Integer> regularDeptIds);
+    @Update("update project set reviwer_id=null where id=#{id}")
+    void removeReviwer(Integer id);
 }
 }

+ 5 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java

@@ -49,7 +49,9 @@ public interface ProjectService extends IService<Project> {
                             String providerIds,
                             String providerIds,
                             String providerNames,
                             String providerNames,
                             HttpServletRequest request,
                             HttpServletRequest request,
-                            ProjectSeparate projectSeparate,Double outputValue,Integer deptId,boolean onlyChangeParticipate,String buId,Double manDay,String manDayStartDate,String plate1,
+                            ProjectSeparate projectSeparate,Double outputValue,Integer deptId,boolean onlyChangeParticipate,String buId,Double manDay,String manDayStartDate,
+                            String reviwerId,
+                            String plate1,
                             String plate2,
                             String plate2,
                             String plate3,
                             String plate3,
                             String plate4,
                             String plate4,
@@ -292,4 +294,6 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg exportUserTaskProcessList(Integer deptId, String userId, Integer projectId,String startDate,String endDate);
     HttpRespMsg exportUserTaskProcessList(Integer deptId, String userId, Integer projectId,String startDate,String endDate);
 
 
     HttpRespMsg exportEffectiveLaborHourRate(String startDate, String endDate);
     HttpRespMsg exportEffectiveLaborHourRate(String startDate, String endDate);
+
+    HttpRespMsg batchChangeStage(String projectIdArray, Integer stageId, String stageName, HttpServletRequest request);
 }
 }

+ 72 - 79
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java

@@ -452,90 +452,83 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
     @Override
     @Override
     public HttpRespMsg getDepartmentStatistics(Integer parentDeptId, String startDate, String endDate, HttpServletRequest request) {
     public HttpRespMsg getDepartmentStatistics(Integer parentDeptId, String startDate, String endDate, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         HttpRespMsg httpRespMsg = new HttpRespMsg();
-        try {
-            User targetUser = userMapper.selectById(request.getHeader("Token"));
-            Integer companyId =targetUser.getCompanyId();
-            //当前用户管理部门
-            List<Integer> deptIds=null;
-            List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
-            List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
-            List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全公司");
-            List<SysRichFunction> functionDpartList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看负责部门");
-            List<SysRichFunction> functionTimeList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看工时统计");
-            List<SysRichFunction> functionCostList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看成本统计");
-            //判断查看权限
-            if(functionAllList.size()==0){
-                deptIds=new ArrayList<>();
-                //是不是要加
-                deptIds.add(-1);
-                if(functionDpartList.size()>0){
-                    if(functionTimeList.size()>0||functionCostList.size()>0){
-                        List<Integer> collect = departmentList.stream().map(dp -> dp.getDepartmentId()).distinct().collect(Collectors.toList());
-                        List<Integer> otherCollect = departmentOtherManagerList.stream().map(dom -> dom.getDepartmentId()).distinct().collect(Collectors.toList());
-                        collect.addAll(otherCollect);
-                        deptIds.addAll(collect);
-                    }
-                }
-            }
-            QueryWrapper<Department> queryWrapper = new QueryWrapper<Department>()
-                    .eq("company_id", companyId);
-            if (parentDeptId == null) {
-                if (deptIds == null) {
-                    //查看全公司的
-                    queryWrapper.isNull("superior_id");
-                }else {
-                    queryWrapper.in("department_id",deptIds);
-                }
-            } else {
-                queryWrapper.eq("superior_id", parentDeptId);
-            }
-            //获取第一级部门
-            System.out.println(deptIds);
-            List<Department> masterList = departmentMapper.selectList(queryWrapper);
-            System.out.println(masterList);
-            Map<String, Object> resultMap = new HashMap<>();
-            List<DepartmentMasterVO> list = new ArrayList<>();
-            BigDecimal totalCostMoney = new BigDecimal(0);
-            List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-
-            for (Department department : masterList) {
-                DepartmentMasterVO departmentMasterVO = new DepartmentMasterVO();
-                BeanUtils.copyProperties(department, departmentMasterVO);
-                Map<String, Object> map = departmentMapper.getCostByDepartment(
-                        getBranchDepartment(department.getDepartmentId(), allDeptList), startDate, endDate);
-                Double time = map == null ? new Double(0) : (Double) map.get("time");
-                BigDecimal money = map == null ? new BigDecimal(0) : (BigDecimal) map.get("money");
-                totalCostMoney = totalCostMoney.add(money);
-                departmentMasterVO.setCostTime(time);
-                departmentMasterVO.setCostMoney(money);
-                departmentMasterVO.setType("departmentName");
-                //检查是否有子部门
-                if (allDeptList.stream().anyMatch(dept->department.getDepartmentId().equals(dept.getSuperiorId()))) {
-                    departmentMasterVO.setHasSubDept(true);
+        User targetUser = userMapper.selectById(request.getHeader("Token"));
+        Integer companyId =targetUser.getCompanyId();
+        //当前用户管理部门
+        List<Integer> deptIds=null;
+        List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
+        List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
+        List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全公司");
+        List<SysRichFunction> functionDpartList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看负责部门");
+        List<SysRichFunction> functionTimeList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看工时统计");
+        List<SysRichFunction> functionCostList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看成本统计");
+        //判断查看权限
+        if(functionAllList.size()==0){
+            deptIds=new ArrayList<>();
+            //是不是要加
+            deptIds.add(-1);
+            if(functionDpartList.size()>0){
+                if(functionTimeList.size()>0||functionCostList.size()>0){
+                    List<Integer> collect = departmentList.stream().map(dp -> dp.getDepartmentId()).distinct().collect(Collectors.toList());
+                    List<Integer> otherCollect = departmentOtherManagerList.stream().map(dom -> dom.getDepartmentId()).distinct().collect(Collectors.toList());
+                    collect.addAll(otherCollect);
+                    deptIds.addAll(collect);
                 }
                 }
-                list.add(departmentMasterVO);
             }
             }
-            //对部门排序
-            list.sort(Comparator.comparing(l->l.getSeq()));
-            resultMap.put("totalCostMoney", totalCostMoney);
-            resultMap.put("costList", list);
-            if(functionCostList.size()==0){
-                resultMap.put("totalCostMoney",new BigDecimal(0));
-                list.forEach(li->{
-                    li.setCostMoney(new BigDecimal(0));
-                });
+        }
+        QueryWrapper<Department> queryWrapper = new QueryWrapper<Department>()
+                .eq("company_id", companyId);
+        if (parentDeptId == null) {
+            if (deptIds == null) {
+                //查看全公司的
+                queryWrapper.isNull("superior_id");
+            }else {
+                queryWrapper.in("department_id",deptIds);
             }
             }
-            if(functionTimeList.size()==0){
-                list.forEach(li->{
-                    li.setCostTime(0.0);
-                });
+        } else {
+            queryWrapper.eq("superior_id", parentDeptId);
+        }
+        //获取第一级部门
+        System.out.println(deptIds);
+        List<Department> masterList = departmentMapper.selectList(queryWrapper);
+        Map<String, Object> resultMap = new HashMap<>();
+        List<DepartmentMasterVO> list = new ArrayList<>();
+        BigDecimal totalCostMoney = new BigDecimal(0);
+        List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+
+        for (Department department : masterList) {
+            DepartmentMasterVO departmentMasterVO = new DepartmentMasterVO();
+            BeanUtils.copyProperties(department, departmentMasterVO);
+            Map<String, Object> map = departmentMapper.getCostByDepartment(
+                    getBranchDepartment(department.getDepartmentId(), allDeptList), startDate, endDate);
+            Double time = map == null ? new Double(0) : (Double) map.get("time");
+            BigDecimal money = map == null ? new BigDecimal(0) : (BigDecimal) map.get("money");
+            totalCostMoney = totalCostMoney.add(money);
+            departmentMasterVO.setCostTime(time);
+            departmentMasterVO.setCostMoney(money);
+            departmentMasterVO.setType("departmentName");
+            //检查是否有子部门
+            if (allDeptList.stream().anyMatch(dept->department.getDepartmentId().equals(dept.getSuperiorId()))) {
+                departmentMasterVO.setHasSubDept(true);
             }
             }
-            httpRespMsg.data = resultMap;
-        } catch (NullPointerException e) {
-            //httpRespMsg.setError("验证失败");
-            httpRespMsg.setError(MessageUtils.message("access.verificationError"));
-            return httpRespMsg;
+            list.add(departmentMasterVO);
+        }
+        //对部门排序
+        list.sort(Comparator.comparing(l->l.getSeq()));
+        resultMap.put("totalCostMoney", totalCostMoney);
+        resultMap.put("costList", list);
+        if(functionCostList.size()==0){
+            resultMap.put("totalCostMoney",new BigDecimal(0));
+            list.forEach(li->{
+                li.setCostMoney(new BigDecimal(0));
+            });
+        }
+        if(functionTimeList.size()==0){
+            list.forEach(li->{
+                li.setCostTime(0.0);
+            });
         }
         }
+        httpRespMsg.data = resultMap;
         return httpRespMsg;
         return httpRespMsg;
     }
     }
 
 

+ 76 - 11
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -704,7 +704,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                    String providerIds,
                                    String providerIds,
                                    String providerNames,
                                    String providerNames,
                                    HttpServletRequest request,
                                    HttpServletRequest request,
-                                   ProjectSeparate projectSeparate,Double outputValue,Integer deptId,boolean onlyChangeParticipate,String buId,Double manDay,String  manDayStartDate,String plate1,
+                                   ProjectSeparate projectSeparate,Double outputValue,Integer deptId,boolean onlyChangeParticipate,String buId,Double manDay,String  manDayStartDate,
+                                   String reviwerId,
+                                   String plate1,
                                    String plate2,
                                    String plate2,
                                    String plate3,
                                    String plate3,
                                    String plate4,
                                    String plate4,
@@ -745,6 +747,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         }
         }
         boolean inchargerChanged = false;
         boolean inchargerChanged = false;
         String oldInchargerId = null;
         String oldInchargerId = null;
+        Project oldProject = null;
         if (id == null) {
         if (id == null) {
             //新增项目
             //新增项目
             if (name == null) {
             if (name == null) {
@@ -780,6 +783,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                     convertDepartmentIdToCascade(0) :
                                     convertDepartmentIdToCascade(0) :
                                     convertDepartmentIdToCascade(deptId))
                                     convertDepartmentIdToCascade(deptId))
                             .setProviderNames(providerNames)
                             .setProviderNames(providerNames)
+                            .setReviwerId(reviwerId)
                             .setPlate1(plate1)
                             .setPlate1(plate1)
                             .setPlate2(plate2)
                             .setPlate2(plate2)
                             .setPlate3(plate3)
                             .setPlate3(plate3)
@@ -885,7 +889,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 }
                 }
             }
             }
         } else {
         } else {
-            Project oldProject = projectMapper.selectById(id);
+            oldProject = projectMapper.selectById(id);
             isNew = false;
             isNew = false;
             //修改项目
             //修改项目
             //检查项目编号不能重复
             //检查项目编号不能重复
@@ -897,10 +901,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 //httpRespMsg.setError("提交失败:项目编号已存在");
                 //httpRespMsg.setError("提交失败:项目编号已存在");
                 httpRespMsg.setError(MessageUtils.message("project.submitFailByNoRepeat"));
                 httpRespMsg.setError(MessageUtils.message("project.submitFailByNoRepeat"));
             } else {
             } else {
-                Project project = projectMapper.selectById(id);
-                if (inchargerId != null && !inchargerId.equals(project.getInchargerId())) {
+                if (inchargerId != null && !inchargerId.equals(oldProject.getInchargerId())) {
                     inchargerChanged = true;
                     inchargerChanged = true;
-                    oldInchargerId = project.getInchargerId();
+                    oldInchargerId = oldProject.getInchargerId();
                 }
                 }
                 Project p = new Project();
                 Project p = new Project();
                 p.setProjectName(name).setId(id).setCompanyId(companyId).setProjectCode(code != null?code.trim():null).setInchargerId(inchargerId)
                 p.setProjectName(name).setId(id).setCompanyId(companyId).setProjectCode(code != null?code.trim():null).setInchargerId(inchargerId)
@@ -920,6 +923,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                 convertDepartmentIdToCascade(0) :
                                 convertDepartmentIdToCascade(0) :
                                 convertDepartmentIdToCascade(deptId))
                                 convertDepartmentIdToCascade(deptId))
                         .setProviderNames(providerNames)
                         .setProviderNames(providerNames)
+                        .setReviwerId(reviwerId)
                         .setPlate1(plate1)
                         .setPlate1(plate1)
                         .setPlate2(plate2)
                         .setPlate2(plate2)
                         .setPlate3(plate3)
                         .setPlate3(plate3)
@@ -996,10 +1000,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                     }
                 }
                 }
                 //编辑项目合同修改 添加记录
                 //编辑项目合同修改 添加记录
-                if(contractAmount!=null&&project.getContractAmount().doubleValue()!=contractAmount){
+                if(contractAmount!=null&&oldProject.getContractAmount().doubleValue()!=contractAmount){
                     ContractModifyRecord contractModifyRecord=new ContractModifyRecord();
                     ContractModifyRecord contractModifyRecord=new ContractModifyRecord();
                     contractModifyRecord.setEditUserId(user.getId());
                     contractModifyRecord.setEditUserId(user.getId());
-                    contractModifyRecord.setOldContractAmount(project.getContractAmount());
+                    contractModifyRecord.setOldContractAmount(oldProject.getContractAmount());
                     contractModifyRecord.setNewContractAmount(contractAmount);
                     contractModifyRecord.setNewContractAmount(contractAmount);
                     contractModifyRecord.setProjectId(id);
                     contractModifyRecord.setProjectId(id);
                     contractModifyRecord.setReason(changeContractReason);
                     contractModifyRecord.setReason(changeContractReason);
@@ -1049,6 +1053,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         //去掉客户
                         //去掉客户
                         projectMapper.removeProjectCustomer(id);
                         projectMapper.removeProjectCustomer(id);
                     }
                     }
+                    if (timeType.getReportAuditType() == 8 && oldProject.getReviwerId() != null && reviwerId == null) {
+                        //清空复核人
+                        projectMapper.removeReviwer(id);
+                    }
                     //修改项目相关表
                     //修改项目相关表
                     ProjectTimer timer = new ProjectTimer();
                     ProjectTimer timer = new ProjectTimer();
                     timer.setProjectName(name);
                     timer.setProjectName(name);
@@ -1276,6 +1284,19 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         }
                         }
                     }
                     }
 
 
+                    //有项目复核人的情况
+                    if (timeType.getReportAuditType() == 8) {
+                        if (oldProject.getReviwerId() != null && reviwerId != null && !oldProject.getReviwerId().equals(reviwerId)) {
+                            //发生变化,查找日报中待审核状态下的
+                            QueryWrapper<Report> queryWrapper = new QueryWrapper<Report>().eq("company_id", companyId).eq("project_id", id).eq("state",0).eq("project_auditor_id", oldProject.getReviwerId());
+                            int count = reportMapper.selectCount(queryWrapper);
+                            if (count > 0) {
+                                //更新日报的审核人
+                                Report upR = new Report().setProjectAuditorId(reviwerId);
+                                reportMapper.update(upR, queryWrapper);
+                            }
+                        }
+                    }
                 }
                 }
             }
             }
             //针对启用了简单非项目模式的情况,确保项目经理,级别,合同金额,开始日期,截止日期,预估工时都是null
             //针对启用了简单非项目模式的情况,确保项目经理,级别,合同金额,开始日期,截止日期,预估工时都是null
@@ -2284,6 +2305,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 project.setInchargerName(incharger.getName());
                 project.setInchargerName(incharger.getName());
             }
             }
         }
         }
+        if (project.getReviwerId() != null) {
+            User reviewer = userMapper.selectById(project.getReviwerId());
+            if (reviewer != null) {
+                project.setReviwerName(reviewer.getName());
+            }
+        }
         Optional<Department> first = departmentList.stream().filter(dt -> dt.getDepartmentId().equals(project.getDeptId())).findFirst();
         Optional<Department> first = departmentList.stream().filter(dt -> dt.getDepartmentId().equals(project.getDeptId())).findFirst();
         if(first.isPresent()){
         if(first.isPresent()){
             project.setDepartmentName(first.get().getDepartmentName());
             project.setDepartmentName(first.get().getDepartmentName());
@@ -5284,6 +5311,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                     }
                     if(timeType.getMainProjectState()==1){
                     if(timeType.getMainProjectState()==1){
                         participatorCell = row.getCell(5+c);
                         participatorCell = row.getCell(5+c);
+                        System.out.println(c);
                         inchargerCell = row.getCell(6+c);
                         inchargerCell = row.getCell(6+c);
                         if(timeType.getReportAuditType()==0||timeType.getReportAuditType()==4||timeType.getReportAuditType()==6){
                         if(timeType.getReportAuditType()==0||timeType.getReportAuditType()==4||timeType.getReportAuditType()==6){
                             i++;
                             i++;
@@ -5309,10 +5337,27 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     if (inchargerCell != null)inchargerCell.setCellType(CellType.STRING);
                     if (inchargerCell != null)inchargerCell.setCellType(CellType.STRING);
                     if (reportAuditorsCell != null)reportAuditorsCell.setCellType(CellType.STRING);
                     if (reportAuditorsCell != null)reportAuditorsCell.setCellType(CellType.STRING);
                     if (reportCcCell != null)reportCcCell.setCellType(CellType.STRING);
                     if (reportCcCell != null)reportCcCell.setCellType(CellType.STRING);
-                    String part = participatorCell.getStringCellValue().trim();
-                    String inchargerName = inchargerCell.getStringCellValue().trim();
-                    String reportAuditors = reportAuditorsCell.getStringCellValue().trim();
-                    String reportCc = reportCcCell.getStringCellValue().trim();
+                    String part = "";
+                    String inchargerName = "";
+                    String reportAuditors = "";
+                    String reportCc = "";
+                    if (participatorCell!=null) {
+                        participatorCell.setCellType(CellType.STRING);
+                        part = participatorCell.getStringCellValue().trim();
+                    }
+                    if (inchargerCell != null) {
+                        inchargerCell.setCellType(CellType.STRING);
+                        inchargerName = inchargerCell.getStringCellValue().trim();
+                    }
+                    if (reportAuditorsCell!=null) {
+                        reportAuditorsCell.setCellType(CellType.STRING);
+                        reportAuditors = reportAuditorsCell.getStringCellValue().trim();
+                    }
+                    if (reportCcCell!=null) {
+                        participatorCell.setCellType(CellType.STRING);
+                        reportCc = participatorCell.getStringCellValue().trim();
+                    }
+                    //兼容繁体
                     if(part.equals("参与人") || part.equals("參與人")){
                     if(part.equals("参与人") || part.equals("參與人")){
                         continue;
                         continue;
                     }
                     }
@@ -12790,6 +12835,26 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return null;
         return null;
     }
     }
 
 
+    @Override
+    public HttpRespMsg batchChangeStage(String projectIdArray, Integer stageId, String stageName, HttpServletRequest request) {
+        HttpRespMsg msg = new HttpRespMsg();
+        List<Integer> ids = JSONArray.parseArray(projectIdArray, Integer.class);
+        List<Project> projectList = new ArrayList<>();
+        for (Integer id : ids) {
+            Project p = new Project();
+            p.setId(id);
+            p.setCurrentStageId(stageId);
+            p.setCurrentStageName(stageName);
+            projectList.add(p);
+        }
+        if (projectList.size() > 0) {
+            updateBatchById(projectList);
+        } else {
+            msg.setError("请选择项目");
+        }
+        return msg;
+    }
+
     @Override
     @Override
     public HttpRespMsg getProjectFillTime(HttpServletRequest request, Integer projectId) {
     public HttpRespMsg getProjectFillTime(HttpServletRequest request, Integer projectId) {
         //待审核和已通过的总工时
         //待审核和已通过的总工时

+ 85 - 12
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -1894,15 +1894,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                     item.put("key","审核人");
                                     item.put("key","审核人");
                                     item.put("value",wxCorpInfo.getSaasSyncContact() == 1?("$userName="+user.getName()+"$"): user.getName());
                                     item.put("value",wxCorpInfo.getSaasSyncContact() == 1?("$userName="+user.getName()+"$"): user.getName());
                                     dataJson.add(item);
                                     dataJson.add(item);
-//                                    if(timeType.getNeedEvaluate()==1){
-//                                        JSONObject item1=new JSONObject();
-//                                        item1.put("key","评价");
-//                                        item1.put("value",StringUtils.isEmpty(report.getEvaluate())?"":report.getEvaluate());
-//                                        dataJson.add(item1);
-//                                        json.put("template_id","tty9TkCAAAWoUyhGnXRCZuhkgCqw_Uow");
-//                                    }else {
-//                                        json.put("template_id","tty9TkCAAANpvEtLrkPUGeOEd1-U7W2w");
-//                                    }
                                     json.put("template_id","tty9TkCAAANpvEtLrkPUGeOEd1-U7W2w");
                                     json.put("template_id","tty9TkCAAANpvEtLrkPUGeOEd1-U7W2w");
                                     JSONObject item2=new JSONObject();
                                     JSONObject item2=new JSONObject();
                                     item2.put("key","日期");
                                     item2.put("key","日期");
@@ -1929,7 +1920,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             ReportAuditLog log = new ReportAuditLog();
             ReportAuditLog log = new ReportAuditLog();
             log.setAuditChannel(channel);
             log.setAuditChannel(channel);
             log.setCompanyId(company.getId());
             log.setCompanyId(company.getId());
-            //log.setResult("通过");
             log.setResult(MessageUtils.message("profession.approved"));
             log.setResult(MessageUtils.message("profession.approved"));
             log.setUserId(user.getId());
             log.setUserId(user.getId());
             log.setUserName(user.getName());
             log.setUserName(user.getName());
@@ -2243,7 +2233,48 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 if (updateReportList.size() > 0) {
                 if (updateReportList.size() > 0) {
                     updateBatchById(updateReportList);
                     updateBatchById(updateReportList);
                 }
                 }
-            }else {
+            } else if (timeType.getReportAuditType() == 8) {
+                //项目经理先审核,复核人后审核
+                boolean hasAuditAllPri = sysFunctionService.hasPriviledge(user.getRoleId(), "审核全员日报");
+                List<Report> updateReportList = new ArrayList<>();
+                List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("id, state, creator_id, create_date, project_id, project_auditor_id, is_final_audit").in("id", ids));
+                for (Report r : reportList) {
+                    //直属领导审核或者部门负责人审核
+                    Report newReport = new Report();
+                    newReport.setId(r.getId());
+                    if (hasAuditAllPri) {
+                        newReport.setState(1);
+                        newReport.setProjectAuditState(1);
+                        newReport.setProjectAuditTime(LocalDateTime.now());
+                    } else {
+                        if (r.getProjectAuditorId().equals(user.getId())) {
+                            if (r.getIsFinalAudit() == 0) {
+                                //当前是项目经理审核,判断是否有复核人
+
+                                String reviwerId = projectMapper.selectById(r.getProjectId()).getReviwerId();
+                                if (reviwerId == null) {
+                                    r.setIsFinalAudit(1);
+                                    newReport.setIsFinalAudit(1);
+                                } else {
+                                    newReport.setProjectAuditorId(reviwerId);
+                                }
+                            }
+                            //上面可能处理为最终审核了
+                            if (r.getIsFinalAudit() == 1) {
+                                newReport.setProjectAuditState(1);
+                                newReport.setState(1);
+                            } else {
+                                newReport.setIsFinalAudit(1);
+                            }
+                            newReport.setProjectAuditTime(LocalDateTime.now());
+                        }
+                    }
+                    updateReportList.add(newReport);
+                }
+                if (updateReportList.size() > 0) {
+                    updateBatchById(updateReportList);
+                }
+            } else {
                 //之前的流程逻辑,综合了一层项目审核,或者一层任务分组审核。 可叠加部门审批流(部门审批时,本部门的负责人是否由上级部门负责人审核,可配置)
                 //之前的流程逻辑,综合了一层项目审核,或者一层任务分组审核。 可叠加部门审批流(部门审批时,本部门的负责人是否由上级部门负责人审核,可配置)
                 List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                 List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                         new QueryWrapper<AuditWorkflowTimeSetting>().eq("dept_id", auditTargetUser.getDepartmentId())
                         new QueryWrapper<AuditWorkflowTimeSetting>().eq("dept_id", auditTargetUser.getDepartmentId())
@@ -3513,6 +3544,48 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 if (updateReportList.size() > 0) {
                 if (updateReportList.size() > 0) {
                     updateBatchById(updateReportList);
                     updateBatchById(updateReportList);
                 }
                 }
+            } else if (timeType.getReportAuditType() == 8) {
+                //项目经理先审核,复核人后审核
+                boolean hasAuditAllPri = sysFunctionService.hasPriviledge(user.getRoleId(), "审核全员日报");
+                List<Report> updateReportList = new ArrayList<>();
+                List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("id, state, group_audit_state, creator_id, create_date, project_id,audit_dept_managerid,department_audit_state,project_audit_state, project_auditor_id, is_dept_audit, is_final_audit").in("id", ids));
+                allUsers = userMapper.selectList(new QueryWrapper<User>().select("id, name, department_id").eq("company_id", company.getId()));
+                allReports = reportList;
+                for (Report r : reportList) {
+                    //直属领导审核或者部门负责人审核
+                    Report newReport = new Report();
+                    newReport.setId(r.getId());
+                    if (hasAuditAllPri) {
+                        newReport.setState(1);
+                        newReport.setProjectAuditState(1);
+                        newReport.setProjectAuditTime(LocalDateTime.now());
+                    } else {
+                        if (r.getProjectAuditorId().equals(user.getId())) {
+                            if (r.getIsFinalAudit() == 0) {
+                                //当前是项目经理审核,判断是否有复核人
+                                String reviwerId = projectMapper.selectById(r.getProjectId()).getReviwerId();
+                                if (reviwerId == null) {
+                                    newReport.setIsFinalAudit(1);
+                                    r.setIsFinalAudit(1);
+                                } else {
+                                    newReport.setProjectAuditorId(reviwerId);
+                                }
+                            }
+                            //上面可能处理为最终审核了
+                            if (r.getIsFinalAudit() == 1) {
+                                newReport.setProjectAuditState(1);
+                                newReport.setState(1);
+                            } else {
+                                newReport.setIsFinalAudit(1);
+                            }
+                            newReport.setProjectAuditTime(LocalDateTime.now());
+                        }
+                    }
+                    updateReportList.add(newReport);
+                }
+                if (updateReportList.size() > 0) {
+                    updateBatchById(updateReportList);
+                }
             } else {
             } else {
                 List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                 List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                         new QueryWrapper<AuditWorkflowTimeSetting>().eq("company_id", company.getId())
                         new QueryWrapper<AuditWorkflowTimeSetting>().eq("company_id", company.getId())
@@ -4441,7 +4514,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<UserMonthWork> userMonthWorks = new ArrayList<UserMonthWork>();
         List<UserMonthWork> userMonthWorks = new ArrayList<UserMonthWork>();
         //获取所有同步的企业微信数据
         //获取所有同步的企业微信数据
 //        List<Map> userCorpwxTimeMapList = userCorpwxTimeMapper.selectByAsk(companyId,startDate,endDate);
 //        List<Map> userCorpwxTimeMapList = userCorpwxTimeMapper.selectByAsk(companyId,startDate,endDate);
-        List<UserCorpwxTime> userCorpwxTimeList = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().between("create_date", LocalDate.parse(startDate, df), LocalDate.parse(endDate, df)).eq("corpwx_userid", user.getCorpwxUserid()));
+        List<UserCorpwxTime> userCorpwxTimeList = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().between("create_date", LocalDate.parse(startDate, df), LocalDate.parse(endDate, df)).eq("company_id", user.getCompanyId()));
         String lastUserId = null;
         String lastUserId = null;
         UserMonthWork lastUserData = null;
         UserMonthWork lastUserData = null;
         for (Map<String, Object> data : list) {
         for (Map<String, Object> data : list) {

+ 22 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/DepartmentMapper.xml

@@ -68,6 +68,28 @@
         GROUP BY b.project_id, a.id order by a.department_id
         GROUP BY b.project_id, a.id order by a.department_id
     </select>
     </select>
 
 
+    <!--根据人员获取成本-->
+    <select id="getCostByUserSum" resultType="java.util.Map">
+        SELECT a.id as id, a.name AS user,a.corpwx_userid as corpwxUserId, a.job_number as jobNumber, ifnull(SUM(b.working_time),0) AS time, ifnull(SUM(b.cost),0) AS
+        money
+        FROM user AS a
+        LEFT JOIN report AS b ON a.id = b.creator_id
+        WHERE b.state = 1
+        <if test="departmentIds != null and departmentIds.size()>0">
+            AND b.dept_id IN
+            <foreach collection="departmentIds" item="departmentId" index="index" open="(" close=")" separator=",">
+                #{departmentId}
+            </foreach>
+        </if>
+        <if test="companyId != null">
+            AND a.company_id = #{companyId}
+        </if>
+        <if test="startDate != null and endDate != null">
+            AND b.create_date between #{startDate} and #{endDate}
+        </if>
+        GROUP BY a.id order by a.department_id
+    </select>
+
     <!-- 根据人员获取自定义的日报数值 -->
     <!-- 根据人员获取自定义的日报数值 -->
     <select id="getCustomDataByUser" resultType="java.util.Map">
     <select id="getCustomDataByUser" resultType="java.util.Map">
         SELECT a.id as id, a.name AS user,a.corpwx_userid as corpwxUserid, a.job_number as jobNumber,c.project_name AS project, IFNULL(SUM(b.custom_data),0) AS cost
         SELECT a.id as id, a.name AS user,a.corpwx_userid as corpwxUserid, a.job_number as jobNumber,c.project_name AS project, IFNULL(SUM(b.custom_data),0) AS cost

File diff suppressed because it is too large
+ 24 - 24
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml


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

@@ -366,16 +366,20 @@ public class WxCorpInfoController {
                     }
                     }
                     if(title.getJSONObject(0).getString("text").contains("单价")){
                     if(title.getJSONObject(0).getString("text").contains("单价")){
                         if(control.equals("Number")){
                         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("结算总额")){
                     if(title.getJSONObject(0).getString("text").contains("结算总额")){
                         if(control.equals("Formula")){
                         if(control.equals("Formula")){
                             JSONObject formula = value.getJSONObject("formula");
                             JSONObject formula = value.getJSONObject("formula");
-                            double formulaDoubleValue = formula.getDoubleValue("value");
-                            plan.setMoneyOfJob(new BigDecimal(formulaDoubleValue));
+                            if(!formula.getString("value").equals("")){
+                                double formulaDoubleValue = formula.getDoubleValue("value");
+                                plan.setMoneyOfJob(new BigDecimal(formulaDoubleValue));
+                            }
                         }
                         }
                     }
                     }
                     if(title.getJSONObject(0).getString("text").equals("备注")){
                     if(title.getJSONObject(0).getString("text").equals("备注")){

+ 5 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/PlanMapper.java

@@ -1,7 +1,10 @@
 package com.management.platform.mapper;
 package com.management.platform.mapper;
 
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.management.platform.entity.Plan;
 import com.management.platform.entity.Plan;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.test.context.jdbc.Sql;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -13,4 +16,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
  */
 public interface PlanMapper extends BaseMapper<Plan> {
 public interface PlanMapper extends BaseMapper<Plan> {
 
 
+    @Update("update plan set real_end_date = null,hide_state=0 where id = #{id}")
+    void setToNormalState(Integer id);
 }
 }

+ 4 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/ReportMapper.java

@@ -223,4 +223,8 @@ public interface ReportMapper extends BaseMapper<Report> {
     List<Map<String, Object>> findFinishNumErrorData();
     List<Map<String, Object>> findFinishNumErrorData();
 
 
     List<Map<String, Object>> getPersonWorkHoursWagesDetailForTemp(String date, String userId, Integer companyId, String startDate, String endDate);
     List<Map<String, Object>> getPersonWorkHoursWagesDetailForTemp(String date, String userId, Integer companyId, String startDate, String endDate);
+
+    List<Map<String, Object>> getPersonWorkHoursWagesWithNotReport(String date, String userId, Integer companyId, String startDate, String endDate,Integer checkStatus,Integer detailStatus);
+
+    List<Map<String, Object>> getPersonWorkHoursWagesWithHasReport(String date, String userId, Integer companyId, String startDate, String endDate,Integer checkStatus,Integer detailStatus);
 }
 }

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

@@ -628,7 +628,7 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                     if (describtionCell != null) describtionCell.setCellType(CellType.STRING);
                     if (describtionCell != null) describtionCell.setCellType(CellType.STRING);
                     plan.setStartDate(planType==0?LocalDate.now():LocalDate.now().plusDays(1));
                     plan.setStartDate(planType==0?LocalDate.now():LocalDate.now().plusDays(1));
                     if(productSchedulingNumCell!=null){
                     if(productSchedulingNumCell!=null){
-                        Plan one = getOne(new QueryWrapper<Plan>().eq("product_scheduling_num", productSchedulingNumCell.getStringCellValue()));
+                        Plan one = getOne(new QueryWrapper<Plan>().eq("product_scheduling_num", productSchedulingNumCell.getStringCellValue()).eq("product_name",productOrderNumCell.getStringCellValue()));
                         if(one!=null){
                         if(one!=null){
                             plan.setId(one.getId());
                             plan.setId(one.getId());
                         }
                         }
@@ -1127,7 +1127,12 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
             return msg;
             return msg;
         }
         }
         List<String> idList=new ArrayList<>(Arrays.asList(ids.split(",")));
         List<String> idList=new ArrayList<>(Arrays.asList(ids.split(",")));
-        List<ProdProcedureTeam> prodProcedureTeams = prodProcedureTeamService.list(new QueryWrapper<ProdProcedureTeam>().in("plan_procedure_id", idList));
+        List<ProdProcedureTeam> prodProcedureTeams = prodProcedureTeamService.list(new QueryWrapper<ProdProcedureTeam>().in("id", idList));
+        List<Report> reports = reportMapper.selectList(new LambdaQueryWrapper<Report>().in(Report::getUserProcedureTeamId, idList));
+        if(reports.size()>0){
+            msg.setError("存在以报工计划,请重新选择");
+            return msg;
+        }
         if(prodProcedureTeams.size()>0){
         if(prodProcedureTeams.size()>0){
             List<ProdProcedureTeam> procedureTeams = prodProcedureTeams.stream().filter(ps -> ps.getUserId().equals(userId)).collect(Collectors.toList());
             List<ProdProcedureTeam> procedureTeams = prodProcedureTeams.stream().filter(ps -> ps.getUserId().equals(userId)).collect(Collectors.toList());
             if(procedureTeams.size()>0){
             if(procedureTeams.size()>0){
@@ -1146,7 +1151,7 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
     public HttpRespMsg cancellationReceive(Integer id) {
     public HttpRespMsg cancellationReceive(Integer id) {
         HttpRespMsg msg=new HttpRespMsg();
         HttpRespMsg msg=new HttpRespMsg();
         String userId = request.getHeader("token");
         String userId = request.getHeader("token");
-        List<ProdProcedureTeam> prodProcedureTeams = prodProcedureTeamService.list(new QueryWrapper<ProdProcedureTeam>().eq("plan_procedure_id", id));
+        List<ProdProcedureTeam> prodProcedureTeams = prodProcedureTeamService.list(new QueryWrapper<ProdProcedureTeam>().eq("id", id));
         if(prodProcedureTeams.size()>0){
         if(prodProcedureTeams.size()>0){
             Optional<ProdProcedureTeam> first = prodProcedureTeams.stream().filter(ps -> ps.getUserId().equals(userId)).findFirst();
             Optional<ProdProcedureTeam> first = prodProcedureTeams.stream().filter(ps -> ps.getUserId().equals(userId)).findFirst();
             if(first.isPresent()){
             if(first.isPresent()){
@@ -1385,7 +1390,7 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                                 }
                                 }
                             });
                             });
                             ps.setProdProcedureTeamList(procedureTeamList);
                             ps.setProdProcedureTeamList(procedureTeamList);
-                            if(procedureTeamList.stream().anyMatch(pl->pl.getStatus()==0&&pl.getUserId().equals(userId))){
+                            if(procedureTeamList.stream().anyMatch(pl->pl.getUserId()!=null&&pl.getStatus()==0&&pl.getUserId().equals(userId))){
                                 ps.setCanReceive(true);
                                 ps.setCanReceive(true);
                             }
                             }
                             if(!StringUtils.isEmpty(ps.getTeamIds())){
                             if(!StringUtils.isEmpty(ps.getTeamIds())){
@@ -1402,7 +1407,7 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                             if(procedureTeamList.stream().anyMatch(pl->pl.getProgress()>0&&pl.getStatus()==4)){
                             if(procedureTeamList.stream().anyMatch(pl->pl.getProgress()>0&&pl.getStatus()==4)){
                                 ps.setNeedAddCircle(true);
                                 ps.setNeedAddCircle(true);
                             }
                             }
-                            if(procedureTeamList.stream().anyMatch(pl->pl.getUserId().equals(userId)&&pl.getStatus()==1)){
+                            if(procedureTeamList.stream().anyMatch(pl->pl.getUserId()!=null&&pl.getUserId().equals(userId)&&pl.getStatus()==1)){
                                 ps.setCancellationReceive(true);
                                 ps.setCancellationReceive(true);
                             }
                             }
                         }
                         }

+ 6 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProdProcedureServiceImpl.java

@@ -137,6 +137,12 @@ public class ProdProcedureServiceImpl extends ServiceImpl<ProdProcedureMapper, P
                                     BigDecimal totalWorkingHours=new BigDecimal(String.valueOf(first.get().getWorkingTime()));
                                     BigDecimal totalWorkingHours=new BigDecimal(String.valueOf(first.get().getWorkingTime()));
                                     totalWorkingHours=totalWorkingHours.multiply(new BigDecimal(plan.get().getNum()));
                                     totalWorkingHours=totalWorkingHours.multiply(new BigDecimal(plan.get().getNum()));
                                     planProcedureTotal.setTotalWorkingHours(totalWorkingHours.doubleValue());
                                     planProcedureTotal.setTotalWorkingHours(totalWorkingHours.doubleValue());
+                                    if(planProcedureTotal.getTotalProgress()!=0){
+                                        BigDecimal decimal = new BigDecimal(planProcedureTotal.getTotalProgress());
+                                        decimal = decimal.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
+                                        BigDecimal multiply = decimal.multiply(new BigDecimal(planProcedureTotal.getTotalWorkingHours()));
+                                        planProcedureTotal.setTotalFillTime(multiply.doubleValue());
+                                    }
                                     //todo:找到用到当前工序的prod_procedure_team (计划分配表) 更新 单价相关数据
                                     //todo:找到用到当前工序的prod_procedure_team (计划分配表) 更新 单价相关数据
                                     List<ProdProcedureTeam> prodProcedureTeams =allProdProcedureTeams.stream().filter(a->a.getPlanProcedureId().equals(planProcedureTotal.getId())).collect(Collectors.toList());
                                     List<ProdProcedureTeam> prodProcedureTeams =allProdProcedureTeams.stream().filter(a->a.getPlanProcedureId().equals(planProcedureTotal.getId())).collect(Collectors.toList());
                                     prodProcedureTeams = prodProcedureTeams.stream().sorted(Comparator.comparing(ProdProcedureTeam::getId)).collect(Collectors.toList());
                                     prodProcedureTeams = prodProcedureTeams.stream().sorted(Comparator.comparing(ProdProcedureTeam::getId)).collect(Collectors.toList());

+ 48 - 23
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -4297,10 +4297,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             double tempWorkTime = mapList.stream().filter(mt -> mt.get("tempWorkTime") != null).mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("tempWorkTime")))).sum();
             double tempWorkTime = mapList.stream().filter(mt -> mt.get("tempWorkTime") != null).mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("tempWorkTime")))).sum();
             BigDecimal tempBigDecimal = new BigDecimal(tempWorkTime);
             BigDecimal tempBigDecimal = new BigDecimal(tempWorkTime);
             double tempCost = mapList.stream().filter(mt -> mt.get("tempCost") != null).mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("tempCost")))).sum();
             double tempCost = mapList.stream().filter(mt -> mt.get("tempCost") != null).mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("tempCost")))).sum();
-            u.setTotalResult(String.valueOf(bigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", cost) + "元");
-            u.setTotalPlanResult(String.valueOf(planBigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", planCost) + "元");
-            u.setTotalSurplusResult(String.valueOf(surplusBigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", surplusCost) + "元");
-            u.setTotalTempResult(String.valueOf(tempBigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", tempCost) + "元");
+            u.setTotalResult(String.format("%.2f",bigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", cost) + "元");
+            u.setTotalPlanResult(String.format("%.2f",planBigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", planCost) + "元");
+            u.setTotalSurplusResult(String.format("%.2f",surplusBigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", surplusCost) + "元");
+            u.setTotalTempResult(String.format("%.2f",tempBigDecimal.doubleValue()) + "小时 " + String.format("%.2f", tempCost) + "元");
         }
         }
         resultMap.put("total",userIPage.getTotal());
         resultMap.put("total",userIPage.getTotal());
         resultMap.put("records",userList);
         resultMap.put("records",userList);
@@ -4352,12 +4352,28 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         deptIds.addAll(otherDeptIds);
         deptIds.addAll(otherDeptIds);
         //日期范围内所有请假数据
         //日期范围内所有请假数据
         List<LeaveSheet> leaveSheetList = leaveSheetService.list(new LambdaQueryWrapper<LeaveSheet>().le(LeaveSheet::getStartDate, endDate).ge(LeaveSheet::getEndDate, startDate).eq(LeaveSheet::getOwnerId,userId));
         List<LeaveSheet> leaveSheetList = leaveSheetService.list(new LambdaQueryWrapper<LeaveSheet>().le(LeaveSheet::getStartDate, endDate).ge(LeaveSheet::getEndDate, startDate).eq(LeaveSheet::getOwnerId,userId));
-        List<Map<String,Object>> mapList=reportMapper.getPersonWorkHoursWagesDetail(date,userId,user.getCompanyId(),startDate,endDate,null,null);
+        //获取未填报的分配数据
+        List<Map<String,Object>> mapListNoReport=reportMapper.getPersonWorkHoursWagesWithNotReport(date,userId,user.getCompanyId(),startDate,endDate,null,null);
+        mapListNoReport.forEach(m->{
+            m.put("colorType","black");
+        });
+        //获取已填报的分配数据
+        List<Map<String,Object>> mapListHasReport=reportMapper.getPersonWorkHoursWagesWithHasReport(date,userId,user.getCompanyId(),startDate,endDate,null,null);
+        mapListHasReport.forEach(m->{
+            m.put("colorType","blue");
+        });
+        //获取临时报工数据
+        List<Map<String,Object>> mapListTempReport=reportMapper.getPersonWorkHoursWagesDetailForTemp(date,userId,user.getCompanyId(),startDate,endDate);
+        mapListTempReport.forEach(m->{
+            m.put("colorType","green");
+        });
+        mapListHasReport.addAll(mapListTempReport);
+        mapListHasReport.addAll(mapListNoReport);
         HttpRespMsg httpRespMsg=new HttpRespMsg();
         HttpRespMsg httpRespMsg=new HttpRespMsg();
         HashMap map=new HashMap();
         HashMap map=new HashMap();
-        map.put("record",mapList);
-        map.put("totalWorkingTime",mapList.stream().filter(i->i.get("working_time")!=null).mapToDouble(mt->Double.valueOf(String.valueOf(mt.get("working_time")))).sum());
-        map.put("totalCost",mapList.stream().filter(i->i.get("cost")!=null).mapToDouble(mt->Double.valueOf(String.valueOf(mt.get("cost")))).sum());
+        map.put("record",mapListHasReport);
+//        map.put("totalWorkingTime",mapList.stream().filter(i->i.get("working_time")!=null).mapToDouble(mt->Double.valueOf(String.valueOf(mt.get("working_time")))).sum());
+//        map.put("totalCost",mapList.stream().filter(i->i.get("cost")!=null).mapToDouble(mt->Double.valueOf(String.valueOf(mt.get("cost")))).sum());
         httpRespMsg.setData(map);
         httpRespMsg.setData(map);
         return httpRespMsg;
         return httpRespMsg;
     }
     }
@@ -5004,13 +5020,16 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             item.add(map.get("productOrderNum")==null?"":String.valueOf(map.get("productOrderNum")));
             item.add(map.get("productOrderNum")==null?"":String.valueOf(map.get("productOrderNum")));
             item.add(String.valueOf(map.get("procedureName")));
             item.add(String.valueOf(map.get("procedureName")));
             item.add(map.get("steelNumArray")==null?"":String.valueOf(map.get("steelNumArray")));
             item.add(map.get("steelNumArray")==null?"":String.valueOf(map.get("steelNumArray")));
-            item.add("");
+            item.add(String.valueOf(map.get("productName")));
             item.add("");
             item.add("");
 //            item.add(String.valueOf(map.get("progress"))+"%");
 //            item.add(String.valueOf(map.get("progress"))+"%");
             item.add(String.valueOf(map.get("finishNum")));
             item.add(String.valueOf(map.get("finishNum")));
             item.add(String.valueOf(map.get("workingTime")));
             item.add(String.valueOf(map.get("workingTime")));
             item.add(String.valueOf(map.get("unitPrice")));
             item.add(String.valueOf(map.get("unitPrice")));
             String cost = String.valueOf(map.get("cost"));
             String cost = String.valueOf(map.get("cost"));
+            BigDecimal finishNum = new BigDecimal(map.get("finishNum")==null?String.valueOf(0):String.valueOf(map.get("finishNum")));
+            finishNum=finishNum.multiply(new BigDecimal(map.get("unitPrice")==null?String.valueOf(0):String.valueOf(map.get("unitPrice")))).setScale(2,RoundingMode.HALF_UP);
+            item.add(String.valueOf(finishNum.doubleValue()));
 //            item.add(cost);
 //            item.add(cost);
             item.add(String.valueOf(map.get("userName")));
             item.add(String.valueOf(map.get("userName")));
             item.add(String.valueOf(map.get("createDate")));
             item.add(String.valueOf(map.get("createDate")));
@@ -5018,20 +5037,20 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 //            item.add(String.valueOf(map.get("checkType")));
 //            item.add(String.valueOf(map.get("checkType")));
 //            item.add(map.get("checkerName")==null?"":String.valueOf(map.get("checkerName")));
 //            item.add(map.get("checkerName")==null?"":String.valueOf(map.get("checkerName")));
             dataList.add(item);
             dataList.add(item);
-            if (lastJobNum == null || !lastJobNum.equals(curJobBNum)) {
-                //换新的人了
-                sumLine = item;
-                sumLine.add(sumCostIndex, cost);
-                lastJobNum = curJobBNum;
-            } else {
-                //当前这行的该列设置为空
-                item.add(sumCostIndex, "");
-                //更新第一行的数据
-                BigDecimal sumCost = new BigDecimal(sumLine.get(sumCostIndex));
-                sumCost = sumCost.add(new BigDecimal(cost));
-                sumLine.remove(sumCostIndex);
-                sumLine.add(sumCostIndex, sumCost.toString());
-            }
+//            if (lastJobNum == null || !lastJobNum.equals(curJobBNum)) {
+//                //换新的人了
+//                sumLine = item;
+//                sumLine.add(sumCostIndex, cost);
+//                lastJobNum = curJobBNum;
+//            } else {
+//                //当前这行的该列设置为空
+//                item.add(sumCostIndex, "");
+//                //更新第一行的数据
+//                BigDecimal sumCost = new BigDecimal(sumLine.get(sumCostIndex));
+//                sumCost = sumCost.add(new BigDecimal(cost));
+//                sumLine.remove(sumCostIndex);
+//                sumLine.add(sumCostIndex, sumCost.toString());
+//            }
         }
         }
         Company company = companyMapper.selectById(companyId);
         Company company = companyMapper.selectById(companyId);
         String fileName=("日报统计导出_")+company.getCompanyName()+System.currentTimeMillis();
         String fileName=("日报统计导出_")+company.getCompanyName()+System.currentTimeMillis();
@@ -5078,6 +5097,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 //            planProcedureTotal.setTotalProgress((int)((workingTime / planProcedureTotal.getTotalWorkingHours()) * 100));
 //            planProcedureTotal.setTotalProgress((int)((workingTime / planProcedureTotal.getTotalWorkingHours()) * 100));
             System.out.println("planProcedureTotal.getId()=="+planProcedureTotal.getId()+"--进度 2 workingTime:"+workingTime+" totalWorkingHours:"+planProcedureTotal.getTotalWorkingHours()+" totalProgress:"+planProcedureTotal.getTotalProgress());
             System.out.println("planProcedureTotal.getId()=="+planProcedureTotal.getId()+"--进度 2 workingTime:"+workingTime+" totalWorkingHours:"+planProcedureTotal.getTotalWorkingHours()+" totalProgress:"+planProcedureTotal.getTotalProgress());
             planProcedureTotalMapper.updateById(planProcedureTotal);
             planProcedureTotalMapper.updateById(planProcedureTotal);
+
+            //如果之前是完成状态,要撤销完成状态
+            Plan plan = planMapper.selectById(report.getPlanId());
+            if (plan.getHideState() == 1) {
+                planMapper.setToNormalState(report.getPlanId());
+            }
             return new HttpRespMsg();
             return new HttpRespMsg();
         }
         }
     }
     }

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

@@ -507,16 +507,20 @@ public class TimingTask {
                     }
                     }
                     if(title.getJSONObject(0).getString("text").contains("单价")){
                     if(title.getJSONObject(0).getString("text").contains("单价")){
                         if(control.equals("Number")){
                         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("结算总额")){
                     if(title.getJSONObject(0).getString("text").contains("结算总额")){
                         if(control.equals("Formula")){
                         if(control.equals("Formula")){
                             JSONObject formula = value.getJSONObject("formula");
                             JSONObject formula = value.getJSONObject("formula");
-                            double formulaDoubleValue = formula.getDoubleValue("value");
-                            plan.setMoneyOfJob(new BigDecimal(formulaDoubleValue));
+                            if(!formula.getString("value").equals("")){
+                                double formulaDoubleValue = formula.getDoubleValue("value");
+                                plan.setMoneyOfJob(new BigDecimal(formulaDoubleValue));
+                            }
                         }
                         }
                     }
                     }
                     if(title.getJSONObject(0).getString("text").equals("备注")){
                     if(title.getJSONObject(0).getString("text").equals("备注")){

+ 63 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ReportMapper.xml

@@ -193,7 +193,7 @@
     <select id="getPersonWorkHoursWagesDetailForTemp" resultType="java.util.Map">
     <select id="getPersonWorkHoursWagesDetailForTemp" resultType="java.util.Map">
         select r.cost,r.working_time,r.finish_num, r.creator_id,DATE_FORMAT(r.create_date,'%Y%m%d') as createDate,
         select r.cost,r.working_time,r.finish_num, r.creator_id,DATE_FORMAT(r.create_date,'%Y%m%d') as createDate,
         p.name as productName,DATE_FORMAT(plan.start_date,'%Y%m%d') as planStartDate,DATE_FORMAT(plan.end_date,'%Y%m%d') as planEndDate ,
         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 taskChangeNoticeNum,plan.plan_type as planType,u.name as checkerName,u2.name as creatorName,plan.task_name as taskName
+        plan.task_change_notice_num as taskChangeNoticeNum,plan.plan_type as planType,u.name as checkerName,u2.name as creatorName,plan.task_name as taskName,plan.task_type_name
         from report r
         from report r
         left join product p on p.id=r.product_id
         left join product p on p.id=r.product_id
         left join plan on plan.id=r.plan_id
         left join plan on plan.id=r.plan_id
@@ -243,6 +243,68 @@
         </if>
         </if>
     </select>
     </select>
 
 
+    <select id="getPersonWorkHoursWagesWithNotReport" resultType="java.util.Map">
+        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 (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.sumReport &lt; ppt2.work_time
+        <if test="date!=null and date!=''">
+            and ppt2.distribute_date=#{date}
+        </if>
+        <if test="userId!=null and userId!=''">
+            <choose>
+                <when test="checkStatus!=null and checkStatus==1 and detailStatus==null">
+                    and plan.foreman_id=#{userId}
+                </when>
+                <otherwise>
+                    and ppt2.user_id=#{userId}
+                </otherwise>
+            </choose>
+        </if>
+        <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">
+        select r.cost,r.working_time,r.finish_num AS finish_num, r.creator_id,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,
+        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,u.name AS checkerName,u2.name AS creatorName,plan.product_scheduling_num,r.finish_num AS finishNum
+        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 AND r.finish_num>0
+        LEFT JOIN prod_procedure pp ON ppt.prod_procedure_id=pp.id
+        LEFT JOIN product p ON p.id=plan.product_id
+        LEFT JOIN `user` u ON r.checker_id=u.id
+        LEFT JOIN `user` u2 ON r.creator_id=u2.id
+        WHERE ppt2.company_id=#{companyId}
+        <if test="date!=null and date!=''">
+            and r.create_date=#{date}
+        </if>
+        <if test="userId!=null and userId!=''">
+            <choose>
+                <when test="checkStatus!=null and checkStatus==1 and detailStatus==null">
+                    and plan.foreman_id=#{userId}
+                </when>
+                <otherwise>
+                    and ppt2.user_id=#{userId}
+                </otherwise>
+            </choose>
+        </if>
+        <if test="startDate!=null and endDate!=null">
+            and r.create_date between #{startDate} and #{endDate}
+        </if>
+    </select>
+
     <select id="getProcedureRealTimeProgressList" resultType="java.util.Map">
     <select id="getProcedureRealTimeProgressList" resultType="java.util.Map">
         select a.id as pptId,b.id as planId,b.plan_type as planType,(Case when b.plan_type=0 then b.product_scheduling_num else b.task_change_notice_num end) as taskName,
         select a.id as pptId,b.id as planId,b.plan_type as planType,(Case when b.plan_type=0 then b.product_scheduling_num else b.task_change_notice_num end) as taskName,
         c.name as procedureName,a.total_working_hours as planWorkTime,a.total_fill_time as nowWorkTime,a.total_progress as progress
         c.name as procedureName,a.total_working_hours as planWorkTime,a.total_fill_time as nowWorkTime,a.total_progress as progress

BIN
fhKeeper/formulahousekeeper/management-workshop/workshop_print.2024-06-24.log.gz


+ 3 - 3
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/todayPlan/distribution.vue

@@ -14,7 +14,7 @@
     <div class="distribution_con contentRoll">
     <div class="distribution_con contentRoll">
       <div class="distribution_box" v-for="item,index in distributionList" :key="index">
       <div class="distribution_box" v-for="item,index in distributionList" :key="index">
         <div class="distribution_ItemBom">
         <div class="distribution_ItemBom">
-          <van-checkbox v-if="todayAndTomorrow" :disabled="item.checkboxDisabled  || item.teamNames.indexOf(user.name) == -1"  v-model="item.prodProcedure.isSelected"  @click="itemChecked" shape="square">
+          <van-checkbox v-if="todayAndTomorrow" :disabled="item.checkboxDisabled  || (item.teamNames&&item.teamNames.indexOf(user.name) == -1)"  v-model="item.prodProcedure.isSelected"  @click="itemChecked" shape="square">
           </van-checkbox>
           </van-checkbox>
           <div class="PlanItem">
           <div class="PlanItem">
             <span>{{item.prodProcedure.seq}}. {{ item.prodProcedure.name }}</span>
             <span>{{item.prodProcedure.seq}}. {{ item.prodProcedure.name }}</span>
@@ -153,7 +153,7 @@ export default {
         let resArr=  this.distributionList.map(item=>{
         let resArr=  this.distributionList.map(item=>{
           if(item.prodProcedure.isSelected){
           if(item.prodProcedure.isSelected){
             if(item.prodProcedureTeamList.filter(i=>i.userId==this.user.id).length>0){
             if(item.prodProcedureTeamList.filter(i=>i.userId==this.user.id).length>0){
-               return item.prodProcedureTeamList.filter(i=>i.userId==this.user.id)[0].planProcedureId
+               return item.prodProcedureTeamList.filter(i=>i.userId==this.user.id)[0].id
             }else{
             }else{
               return "-1"
               return "-1"
             }
             }
@@ -357,7 +357,7 @@ export default {
           for(var i in arr) {
           for(var i in arr) {
             arr[i].checkboxDisabled = true
             arr[i].checkboxDisabled = true
             if(arr[i].prodProcedureTeamList&&arr[i].prodProcedureTeamList.length > 0) {
             if(arr[i].prodProcedureTeamList&&arr[i].prodProcedureTeamList.length > 0) {
-              let arrList = arr[i].prodProcedureTeamList.filter(item => item.status == 0 && item.userId==this.user.id)
+              let arrList = arr[i].prodProcedureTeamList.filter(item => (item.status == 0||item.status == 1) && item.userId==this.user.id)
               console.log(arrList, 'arrList')
               console.log(arrList, 'arrList')
               if(arrList.length > 0) {
               if(arrList.length > 0) {
                 arr[i].checkboxDisabled = false
                 arr[i].checkboxDisabled = false

+ 53 - 9
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/statistic/index.vue

@@ -89,10 +89,12 @@
                 <el-table-column v-for="(item, index) in personWorkHoursWagesHead" :key="index" :label="item" align="center" min-width="150">
                 <el-table-column v-for="(item, index) in personWorkHoursWagesHead" :key="index" :label="item" align="center" min-width="150">
                     <template slot-scope="scope">
                     <template slot-scope="scope">
                         <div v-for="(items, indexs) in scope.row.personWorkHoursWages" :key="indexs" :class="`${scope.row.departmentCascade== '小计' ? '' : 'colorText'}`">
                         <div v-for="(items, indexs) in scope.row.personWorkHoursWages" :key="indexs" :class="`${scope.row.departmentCascade== '小计' ? '' : 'colorText'}`">
-                            <div v-if="items.crateDate == item">
+                            <div v-if="items.crateDate == item" @click.stop="showReportDetail(scope.row,item,0)">
                               <div  style="color: black;" v-if="items.planWorkTime">平均 {{items.planWorkTime}}分钟  {{items.planCost}}元</div>
                               <div  style="color: black;" v-if="items.planWorkTime">平均 {{items.planWorkTime}}分钟  {{items.planCost}}元</div>
-                              <div @click.stop="showReportDetail(scope.row,item,0)" v-if="items.workTime>0">已填 {{items.workTime}}分钟  {{items.cost}}元 </div>{{items.leave}}
-                              <div style="color: green;" @click.stop="showTempReportDetail(scope.row,item,0)" v-if="items.tempWorkTime>0||items.tempCost>0">临时报工 {{items.tempWorkTime}}分钟  {{items.tempCost}}元</div>
+                              <!-- <div @click.stop="showReportDetail(scope.row,item,0)" v-if="items.workTime>0">已填 {{items.workTime}}分钟  {{items.cost}}元 </div>{{items.leave}}
+                              <div style="color: green;" @click.stop="showTempReportDetail(scope.row,item,0)" v-if="items.tempWorkTime>0||items.tempCost>0">临时报工 {{items.tempWorkTime}}分钟  {{items.tempCost}}元</div> -->
+                              <div  v-if="items.workTime>0">已填 {{items.workTime}}分钟  {{items.cost}}元 </div>{{items.leave}}
+                              <div style="color: green;" v-if="items.tempWorkTime>0||items.tempCost>0">临时报工 {{items.tempWorkTime}}小时  {{items.tempCost}}元</div>
                               <div style="color: red;" v-if="items.surplusTime">剩余 {{items.surplusTime}}分钟  {{items.surplusCost}}元</div>
                               <div style="color: red;" v-if="items.surplusTime">剩余 {{items.surplusTime}}分钟  {{items.surplusCost}}元</div>
                             </div>
                             </div>
                         </div>
                         </div>
@@ -100,10 +102,14 @@
                 </el-table-column>
                 </el-table-column>
                 <el-table-column align="center" prop="totalResult" label="合计" min-width="180">
                 <el-table-column align="center" prop="totalResult" label="合计" min-width="180">
                    <template slot-scope="scope" >
                    <template slot-scope="scope" >
-                    <div style="color: black;">平均 {{scope.row.totalPlanResult}}</div>
-                      <div style="color: #02a7f0;"  @click="showReportDetail(scope.row,item,1)">已填 {{scope.row.totalResult}}</div> 
-                      <div style="color: green;"  @click="showTempReportDetail(scope.row,item,1)">临时报工 {{scope.row.totalTempResult}}</div> 
-                      <div style="color: red;">剩余 {{scope.row.totalSurplusResult}}</div>
+                    <div @click="showReportDetail(scope.row,item,1)">
+                      <div style="color: black;">{{scope.row.totalPlanResult | formatStr('平均') }}</div>
+                      <!-- <div style="color: #02a7f0;"  @click="showReportDetail(scope.row,item,1)"> {{scope.row.totalResult | formatStr('已填')}}</div> 
+                      <div style="color: green;"  @click="showTempReportDetail(scope.row,item,1)">{{scope.row.totalTempResult | formatStr('临时报工')}}</div>  -->
+                      <div style="color: #02a7f0;" > {{scope.row.totalResult | formatStr('已填')}}</div> 
+                      <div style="color: green;" >{{scope.row.totalTempResult | formatStr('临时报工')}}</div> 
+                      <div style="color: red;">{{scope.row.totalSurplusResult | formatStr('剩余') }}</div>
+                    </div>
                   </template>
                   </template>
                 </el-table-column>
                 </el-table-column>
             </el-table>
             </el-table>
@@ -360,7 +366,10 @@
           <div>
           <div>
             <el-table
             <el-table
               :data="personWorkHoursWagesDetail"
               :data="personWorkHoursWagesDetail"
-              style="width: 100%">
+              style="width: 100%"
+              :row-class-name="tableRowClassName"
+              height="500"
+              >
               <el-table-column
               <el-table-column
                 prop="date"
                 prop="date"
                 label="计划(开始-结束日期)"
                 label="计划(开始-结束日期)"
@@ -372,6 +381,8 @@
               <el-table-column prop="productName" label="产品名称" width="180"></el-table-column>
               <el-table-column prop="productName" label="产品名称" width="180"></el-table-column>
               <el-table-column prop="product_scheduling_num" label="排产工单号" width="180"></el-table-column>
               <el-table-column prop="product_scheduling_num" label="排产工单号" width="180"></el-table-column>
               <el-table-column prop="procedureName" label="工序名称" width="180"></el-table-column>
               <el-table-column prop="procedureName" label="工序名称" width="180"></el-table-column>
+              <el-table-column prop="taskName" label="任务名称" width="250"></el-table-column>
+              <el-table-column prop="task_type_name" label="任务类型" width="180"></el-table-column>
               <el-table-column prop="finishNum" label="完成件数" width="80">
               <el-table-column prop="finishNum" label="完成件数" width="80">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   {{scope.row.finishNum?scope.row.finishNum:''}}
                   {{scope.row.finishNum?scope.row.finishNum:''}}
@@ -382,7 +393,7 @@
               <el-table-column prop="checkerName" label="质检人" width="180"></el-table-column>
               <el-table-column prop="checkerName" label="质检人" width="180"></el-table-column>
               <el-table-column prop="working_time" label="工作时长" width="180">
               <el-table-column prop="working_time" label="工作时长" width="180">
                 <template slot-scope="scope" v-if="scope.row.working_time">
                 <template slot-scope="scope" v-if="scope.row.working_time">
-                  {{scope.row.working_time}}分钟
+                  {{scope.row.working_time}}{{scope.row.planType==0?'分钟':'小时'}}
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
             </el-table>
             </el-table>
@@ -742,6 +753,13 @@ export default {
       personWorkHoursWorkTime(value) {
       personWorkHoursWorkTime(value) {
         let val = +((value ? value : 0) * 60).toFixed(2) + 0
         let val = +((value ? value : 0) * 60).toFixed(2) + 0
         return val
         return val
+      },
+      formatStr(val, str) {
+        if(!val) {
+          return ''
+        }
+        let relut = val.replace(/\b0\.\d+\S*\s*/g, '')
+        return`${relut ? str : ''} ${relut}`
       }
       }
   },
   },
   methods: {
   methods: {
@@ -834,6 +852,17 @@ export default {
           });
           });
       });
       });
     },
     },
+    //处理列类别
+    tableRowClassName({row}) {
+      if (row.colorType == "blue") {
+        return 'blue-row';
+      } else if (row.colorType == "black") {
+        return 'black-row';
+      }else if(row.colorType == "green"){
+        return 'green-row';
+      }
+      return '';
+    },
     getUserList(e) {
     getUserList(e) {
       let param={}
       let param={}
       if(e){
       if(e){
@@ -1583,6 +1612,8 @@ export default {
     }else{
     }else{
       this.getUserList()
       this.getUserList()
     }
     }
+    this.page=1
+    this.size=20
     console.log(this.userId,'==============')
     console.log(this.userId,'==============')
     this.getList(true)
     this.getList(true)
     },
     },
@@ -1847,3 +1878,16 @@ export default {
 }
 }
 
 
 </style>
 </style>
+<style>
+.el-table .blue-row {
+  color: #02a7f0;
+}
+
+.el-table .black-row {
+  color: black;
+}
+
+.el-table .green-row {
+  color: green;
+}
+</style>

+ 11 - 10
fhKeeper/formulahousekeeper/timesheet/.vscode/settings.json

@@ -1,11 +1,12 @@
 {
 {
-    // Vue: i18n-ally 插件如下须要本身配置
-    "i18n-ally.localesPaths": ["src/i18n"], // 翻译的语言路径
-    "i18n-ally.enabledParsers": ["json", "js"], // 翻译支持的语言文件格式
-    "i18n-ally.encoding": "utf-8", // 翻译文件的编码
-    "i18n-ally.sourceLanguage": "zh", // 根据此 cn 语言文件翻译其他语言文件的 变量和内容
-    "i18n-ally.displayLanguage": "zh", // 组件中显示的语言
-    "i18n-ally.keystyle": "flat",
-    "vue-i18n.i18nPaths": "src\\i18n", // 翻译后变量的格式, flat(扁平式即对象属性路径变成一个长字符串), nested(嵌套式即对象属性变量可以进行相互之间的嵌套)
-    // 注意: 如果 i18n-ally 检测不出来框架, 或 提示错误, 可能是版本太高的缘故
-}
+  // Vue: i18n-ally 插件如下须要本身配置
+  "i18n-ally.localesPaths": ["src/i18n"], // 翻译的语言路径
+  "i18n-ally.enabledParsers": ["json", "js"], // 翻译支持的语言文件格式
+  "i18n-ally.encoding": "utf-8", // 翻译文件的编码
+  "i18n-ally.sourceLanguage": "zh", // 根据此 cn 语言文件翻译其他语言文件的 变量和内容
+  "i18n-ally.displayLanguage": "zh", // 组件中显示的语言
+  "i18n-ally.keystyle": "flat",
+  "i18n-ally.enabledFrameworks": ["vue"],
+  "vue-i18n.i18nPaths": "src\\i18n" // 翻译后变量的格式, flat(扁平式即对象属性路径变成一个长字符串), nested(嵌套式即对象属性变量可以进行相互之间的嵌套)
+  // 注意: 如果 i18n-ally 检测不出来框架, 或 提示错误, 可能是版本太高的缘故
+}

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

@@ -2,7 +2,7 @@
   <div>
   <div>
     <div style="height: 72vh;overflow: auto;">
     <div style="height: 72vh;overflow: auto;">
         <el-form ref="form1" :model="addForm" :rules="taskRules" label-width="120px">
         <el-form ref="form1" :model="addForm" :rules="taskRules" label-width="120px">
-            <el-form-item label="所属项目" v-if="showOrNot" prop="projectId">
+            <el-form-item :label="$t('subordinatetotheproject')" v-if="showOrNot" prop="projectId">
                 <el-select v-model="addForm.projectId" :placeholder="$t('defaultText.pleaseChoose')" @change="agentCreatesEvents(1)" filterable="true" style="width:100%;">
                 <el-select v-model="addForm.projectId" :placeholder="$t('defaultText.pleaseChoose')" @change="agentCreatesEvents(1)" filterable="true" style="width:100%;">
                     <el-option-group v-for="group in integrationProjectList" :key="group.label" :label="group.label">
                     <el-option-group v-for="group in integrationProjectList" :key="group.label" :label="group.label">
                         <el-option v-for="item in group.peojectList" :key="item.id" :label="item.projectName + '\u3000' + item.projectCode" :value="item.id">
                         <el-option v-for="item in group.peojectList" :key="item.id" :label="item.projectName + '\u3000' + item.projectCode" :value="item.id">
@@ -12,12 +12,12 @@
                     </el-option-group>
                     </el-option-group>
                 </el-select>
                 </el-select>
             </el-form-item>
             </el-form-item>
-            <el-form-item label="所属任务分组" v-if="showOrNot" prop="groupId">
+            <el-form-item :label="$t('suoShuRenWuFenZu')" v-if="showOrNot" prop="groupId">
                 <el-select v-model="addForm.groupId" :placeholder="$t('defaultText.pleaseChoose')" @change="agentCreatesEvents(2)" filterable="true" style="width:100%;">
                 <el-select v-model="addForm.groupId" :placeholder="$t('defaultText.pleaseChoose')" @change="agentCreatesEvents(2)" filterable="true" style="width:100%;">
                     <el-option v-for="item in groupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
                     <el-option v-for="item in groupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
                 </el-select>
                 </el-select>
             </el-form-item>
             </el-form-item>
-            <el-form-item label="所属任务列表" v-if="showOrNot" prop="stagesId">
+            <el-form-item :label="$t('suoShuRenWuLieBiao')" v-if="showOrNot" prop="stagesId">
                 <el-select v-model="addForm.stagesId" :placeholder="$t('defaultText.pleaseChoose')" filterable="true" style="width:100%;">
                 <el-select v-model="addForm.stagesId" :placeholder="$t('defaultText.pleaseChoose')" filterable="true" style="width:100%;">
                     <el-option v-for="item in stageList" :key="item.id" :label="item.stagesName" :value="item.id"></el-option>
                     <el-option v-for="item in stageList" :key="item.id" :label="item.stagesName" :value="item.id"></el-option>
                 </el-select>
                 </el-select>
@@ -28,7 +28,7 @@
                     <el-option v-for="item in stageList" :key="item.id" :label="item.stagesName" :value="item.id"></el-option>
                     <el-option v-for="item in stageList" :key="item.id" :label="item.stagesName" :value="item.id"></el-option>
                 </el-select>
                 </el-select>
             </el-form-item>
             </el-form-item>
-            <el-form-item label="前置任务" prop="aheadTidList" >
+            <el-form-item :label="$t('qianZhiRenWu')" prop="aheadTidList" >
                 <el-select v-model="addForm.aheadTidList" style="width:100%;" multiple filterable @change="$forceUpdate()">
                 <el-select v-model="addForm.aheadTidList" style="width:100%;" multiple filterable @change="$forceUpdate()">
                     <el-option v-for="item in relationdata" :key="item.id" :label="item.name" :value="item.id"></el-option>
                     <el-option v-for="item in relationdata" :key="item.id" :label="item.name" :value="item.id"></el-option>
                 </el-select>
                 </el-select>
@@ -81,8 +81,8 @@
                             </div>
                             </div>
                             <!-- 项目服务 -->
                             <!-- 项目服务 -->
                             <div v-if="user.companyId==3092">
                             <div v-if="user.companyId==3092">
-                                <span style="margin-left:30px;margin-right:10px;">{{'项目服务'}}</span>
-                                <el-select  clearable collapse-tags  filterable  v-model="executorItem.serviceId" size="small" placeholder="请选择项目服务" style="width: 300px" @change="serviceIdChange()" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !permissions.editAnyTask && !(groupResponsibleId == user.id)">
+                                <span style="margin-left:30px;margin-right:10px;">{{ $t('xiangMuFuWu') }}</span>
+                                <el-select  clearable collapse-tags  filterable  v-model="executorItem.serviceId" size="small" :placeholder="$t('qingXuanZeXiangMuFuWu')" style="width: 300px" @change="serviceIdChange()" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !permissions.editAnyTask && !(groupResponsibleId == user.id)">
                                     <el-option
                                     <el-option
                                     v-for="item in sapServiceList"
                                     v-for="item in sapServiceList"
                                     :key="item.id"
                                     :key="item.id"
@@ -111,7 +111,7 @@
             <el-link type="primary" v-if="(((addForm.executorListFront == null || addForm.executorListFront.length<100) && 
             <el-link type="primary" v-if="(((addForm.executorListFront == null || addForm.executorListFront.length<100) && 
             (addForm.id == null|| user.id == addForm.createrId || currentProject.inchargerId == user.id || permissions.projectManagement || permissions.editAnyTask)) || 
             (addForm.id == null|| user.id == addForm.createrId || currentProject.inchargerId == user.id || permissions.projectManagement || permissions.editAnyTask)) || 
             groupResponsibleId == user.id)" 
             groupResponsibleId == user.id)" 
-            style="margin:0 0 10px 35px;position: relative;z-index: 999;" @click.stop="addExecutorLine">添加执行人</el-link>
+            style="margin:0 0 10px 35px;position: relative;z-index: 999;" @click.stop="addExecutorLine">{{ $t('addinganexecutor') }}</el-link>
             </div>
             </div>
             <el-form-item :label="$t('priority')">
             <el-form-item :label="$t('priority')">
                 <el-select v-model="addForm.taskLevel" style="width:100%;" >
                 <el-select v-model="addForm.taskLevel" style="width:100%;" >
@@ -408,7 +408,7 @@
     </div>
     </div>
     <div slot="footer" class="dialog-footer foooot">
     <div slot="footer" class="dialog-footer foooot">
         <el-button v-if="(user.id == addForm.createrId || currentProject.inchargerId == user.id || currentProject.creatorId == user.id || permissions.projectManagement) && canAddTask" @click.native="deleteTask()" style="float:left;">{{ $t('btn.delete') }}</el-button>
         <el-button v-if="(user.id == addForm.createrId || currentProject.inchargerId == user.id || currentProject.creatorId == user.id || permissions.projectManagement) && canAddTask" @click.native="deleteTask()" style="float:left;">{{ $t('btn.delete') }}</el-button>
-        <el-button type="primary" v-if="user.userNameNeedTranslate == 1 && !meetingId && !integrationTask.stage && addForm.executorListFront[0].executorId" @click="meetingCli()">发起会议</el-button>
+        <el-button type="primary" v-if="user.userNameNeedTranslate == 1 && !meetingId && !integrationTask.stage && addForm.executorListFront[0].executorId" @click="meetingCli()">{{ $t('faQiHuiYi') }}</el-button>
         <el-button @click.native="closeBounceds()">{{ $t('btn.cancel') }}</el-button>
         <el-button @click.native="closeBounceds()">{{ $t('btn.cancel') }}</el-button>
         <el-button type="primary" @click="submitInsert" :loading="addLoading">{{ $t('btn.submit') }}</el-button>
         <el-button type="primary" @click="submitInsert" :loading="addLoading">{{ $t('btn.submit') }}</el-button>
     </div>
     </div>
@@ -476,8 +476,8 @@
                                     </p>
                                     </p>
                                     <p style="display: inline-block;padding: 0;margin: 0;" v-if="user.userNameNeedTranslate != 1">{{item.content}}</p>
                                     <p style="display: inline-block;padding: 0;margin: 0;" v-if="user.userNameNeedTranslate != 1">{{item.content}}</p>
                                     <!-- 重启原因和责任人 -->
                                     <!-- 重启原因和责任人 -->
-                                    <span class="commentSpan" v-if="user.timeType.restartTaskNeedReason == 1 && item.reason != ''">重启原因:{{item.reason}}</span>
-                                    <span class="commentSpan" v-if="user.timeType.restartTaskNeedReason == 1 && item.taskPersonLiableList.length > 0">责任人: 
+                                    <span class="commentSpan" v-if="user.timeType.restartTaskNeedReason == 1 && item.reason != ''">{{ $t('zhongQiYuanYin') }}:{{item.reason}}</span>
+                                    <span class="commentSpan" v-if="user.timeType.restartTaskNeedReason == 1 && item.taskPersonLiableList.length > 0">{{ $t('zeRenRen') }}
                                         <span v-for="responsibility, responsibilityIndex in item.taskPersonLiableList" :key="responsibilityIndex">
                                         <span v-for="responsibility, responsibilityIndex in item.taskPersonLiableList" :key="responsibilityIndex">
                                             <span v-if="user.userNameNeedTranslate == 1">
                                             <span v-if="user.userNameNeedTranslate == 1">
                                                 <TranslationOpenDataText type='userName' :openid='responsibility.userName'></TranslationOpenDataText>
                                                 <TranslationOpenDataText type='userName' :openid='responsibility.userName'></TranslationOpenDataText>
@@ -756,10 +756,10 @@ export default {
         },
         },
         taskRules : {
         taskRules : {
             name: [{ required: true, message: this.$t('enterthetaskcontent'), trigger: "blur" }],
             name: [{ required: true, message: this.$t('enterthetaskcontent'), trigger: "blur" }],
-            serviceId: [{ required: true, message: '请选择服务', trigger: "blur" }],
-            projectId: [{ required: true, message: '请选择所属项目', trigger: "blur" }],
-            groupId: [{ required: true, message: '请选择所属任务分组', trigger: "blur" }],
-            stagesId: [{ required: true, message: '请选择所属任务列表', trigger: "blur" }],
+            serviceId: [{ required: true, message: this.$t('qingXuanZeFuWu'), trigger: "blur" }],
+            projectId: [{ required: true, message: this.$t('qingXuanZeSuoShuXiangMu'), trigger: "blur" }],
+            groupId: [{ required: true, message: this.$t('qingXuanZeSuoShuRenWuFenZu'), trigger: "blur" }],
+            stagesId: [{ required: true, message: this.$t('qingXuanZeSuoShuRenWuLieBiao'), trigger: "blur" }],
         },
         },
         formGrouping: {
         formGrouping: {
             name: [{ required: true, message: this.$t('pleaseenteragroupname'), trigger: "blur" }],
             name: [{ required: true, message: this.$t('pleaseenteragroupname'), trigger: "blur" }],
@@ -1015,11 +1015,11 @@ export default {
         this.http.post('/project/nearProject',{},res => {
         this.http.post('/project/nearProject',{},res => {
             if(res.code == 'ok'){
             if(res.code == 'ok'){
                 let topObj = {
                 let topObj = {
-                    label: '最近选择项目',
+                    label: this.$t('zuiJinXuanZeXiangMu'),
                     peojectList: res.data 
                     peojectList: res.data 
                 }
                 }
                 let botomObj = {
                 let botomObj = {
-                    label: '全部项目',
+                    label: this.$t('other.allProject'),
                     peojectList: this.projectList
                     peojectList: this.projectList
                 }
                 }
                 this.integrationProjectList = [topObj, botomObj]
                 this.integrationProjectList = [topObj, botomObj]
@@ -1486,7 +1486,7 @@ export default {
                 if (findSameUser) {
                 if (findSameUser) {
                     return this.$message({
                     return this.$message({
                         showClose: true,
                         showClose: true,
-                        message: '同一个执行人,服务不能相同',
+                        message: this.$t('tongYiGeZhiHangRenFuWuBuNengXiangTong'),
                         type: 'error'
                         type: 'error'
                     });
                     });
                 }
                 }
@@ -1923,7 +1923,7 @@ export default {
     },
     },
     // 列表的删除按钮
     // 列表的删除按钮
     taskFileDelete(eid){
     taskFileDelete(eid){
-        this.$confirm('是否移除此文件?', this.$t('other.prompts'), {
+        this.$confirm(this.$t('shiFouYiChuCiWenJian'), this.$t('other.prompts'), {
             confirmButtonText: this.$t('btn.determine'),
             confirmButtonText: this.$t('btn.determine'),
             cancelButtonText: this.$t('btn.cancel'),
             cancelButtonText: this.$t('btn.cancel'),
             type: 'warning'
             type: 'warning'

+ 649 - 6
fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json

@@ -23,11 +23,13 @@
     "supplierManagement": "Supplier Management",
     "supplierManagement": "Supplier Management",
     "organizationalStructure": "Organizational structure",
     "organizationalStructure": "Organizational structure",
     "approvalFlowSettings": "Approval flow Settings",
     "approvalFlowSettings": "Approval flow Settings",
-    "basicDataManagemen": "Basic Data Managemen",
     "basicSystemSettings": "Basic System Settings",
     "basicSystemSettings": "Basic System Settings",
     "roleRightsManagement": "Role Rights Management",
     "roleRightsManagement": "Role Rights Management",
-    "gongshitongji":"工时统计表",
-    "caiwushenhe":"财务审核"
+    "gongshitongji": "Work hour statistics table",
+    "caiwushenhe": "Financial review",
+    "basicDataManagement": "Basic data management",
+    "budgetReview": "Estimated working hours review",
+    "projectFormSettings": "Project Form Settings"
   },
   },
   "role": {
   "role": {
     "ordinaryEmployees": "Ordinary employees",
     "ordinaryEmployees": "Ordinary employees",
@@ -205,6 +207,7 @@
     "waitForTheProjectReviewer": "Waiting for project reviewers",
     "waitForTheProjectReviewer": "Waiting for project reviewers",
     "audit": "review",
     "audit": "review",
     "projectAuditor": "project reviewer",
     "projectAuditor": "project reviewer",
+    "projectReviwer": "secondary reviewer",
     "reviewer": "Reviewer",
     "reviewer": "Reviewer",
     "await": "await",
     "await": "await",
     "importWaitingForReview": "Import waiting for review",
     "importWaitingForReview": "Import waiting for review",
@@ -525,7 +528,7 @@
   "todaytask": "today's task",
   "todaytask": "today's task",
   "jin-ji": "urgent",
   "jin-ji": "urgent",
   "yi-ban": "generally",
   "yi-ban": "generally",
-  "AuditProcess":"AuditProcessSet",
+  "AuditProcess": "AuditProcessSet",
   "zhong-yao": "important",
   "zhong-yao": "important",
   "makesuretodeletethesubproject": "Are you sure you want to delete the subproject",
   "makesuretodeletethesubproject": "Are you sure you want to delete the subproject",
   "ma": "?",
   "ma": "?",
@@ -1092,7 +1095,6 @@
   "pleaseenterthedepartmentname": "Please enter department name",
   "pleaseenterthedepartmentname": "Please enter department name",
   "pleaseinputcost": "Please enter cost",
   "pleaseinputcost": "Please enter cost",
   "pleaseselectroles": "Please select a role",
   "pleaseselectroles": "Please select a role",
-  "areyousuretosynchronize ": "Are you sure to sync address book from Dingding? \n(It may take some time to load, please be patient)",
   "booksecret": "Please enter address book secret",
   "booksecret": "Please enter address book secret",
   "synchronizingtheassociation": "Syncing associations, please wait...",
   "synchronizingtheassociation": "Syncing associations, please wait...",
   "synchronoussuccesss": "Sync complete",
   "synchronoussuccesss": "Sync complete",
@@ -1521,5 +1523,646 @@
   "que-ding-yao-shan-chu-gai-he-tong-ma": "Are you sure you want to delete this contract ?",
   "que-ding-yao-shan-chu-gai-he-tong-ma": "Are you sure you want to delete this contract ?",
   "que-ding-yao-shan-chu-gai-wen-jian-ma": "Are you sure you want to delete this file ?",
   "que-ding-yao-shan-chu-gai-wen-jian-ma": "Are you sure you want to delete this file ?",
   "he-tong-guan-li-dao-ru-mo-ban": "Contract Management Template",
   "he-tong-guan-li-dao-ru-mo-ban": "Contract Management Template",
-  "minMaxCheck": "report time min value should not be greater than the max value"
+  "minMaxCheck": "report time min value should not be greater than the max value",
+  "budget": "general budget",
+  "areyousuretosynchronize": "Are you sure to synchronize your contacts from DingTalk? (It may take some loading time, please be patient.)",
+  "expenses": "Expense reporting",
+  "chu-cha-shen-he": "Business trip review",
+  "bo-hui-le-qing-jia-shen-qing": "Rejected leave application",
+  "que-ding-yao-che-hui-gai-chu-cha-shen-qing-ma": "Are you sure you want to withdraw this business trip application",
+  "yi-cun-zai-zhong-fu-bu-men": "Duplicate department already exists",
+  "yi-cun-zai-zhong-fu-ren-yuan": "There are already duplicate personnel present",
+  "zhi-shao-xuan-ze-yi-ge-bu-men-huo-zhe-ren-yuan-zuo-wei-shen-he-ren": "Select at least one department or personnel as the reviewer",
+  "zhong-xin-ti-jiao": "Resubmit",
+  "zhu-yao-fu-ze-ren": "(Main person in charge)",
+  "qing-shu-ru-guan-jian-ming-cheng": "Please enter the key name",
+  "sou-suo": "search",
+  "he-tong-lei-xing-zui-duo-zhi-neng-chuang-jian-20-ge": "A maximum of 20 contract types can be created",
+  "hui-kuan-ji-hua": "Collection plan",
+  "hui-kuan-jin-e": "Collection amount",
+  "hui-kuan-jinebu-neng-wei-0": "The payment amount cannot be 0",
+  "hui-kuan-ri-qi": "Payment date",
+  "hui-kuan-ri-qi-bu-neng-wei-kong": "The payment date cannot be empty",
+  "que-ren-shen-he-tong-guo-ma-tong-guo-hou-he-tong-ji-ben-xin-xi-wu-fa-xiu-gai": "Are you sure the review has been approved? Once approved, the basic information of the contract cannot be modified",
+  "shi-fou-yi-hui-kuan": "Has the payment been received",
+  "wei-hui-kuan": "Unpaid payments",
+  "xia-bi-hui-kuan-jin-e": "Next payment amount",
+  "xia-bi-hui-kuan-ri-qi": "Date of next payment collection",
+  "yi-hui-kuan": "Received payment",
+  "yi-hui-kuan-jin-du": "Progress of payments received",
+  "yi-hui-kuan-jin-e": "Received amount",
+  "zong-hui-kuan-jinebu-de-da-yu-he-tong-jin-e": "The total payment amount shall not exceed the contract amount",
+  "fenLeiGongShiMingXiBiao": "Classification of Work Hours Details",
+  "fenZuHaoYongJinDuBiao": "Group Consumption Schedule",
+  "fteBaoBiao": "FTE report",
+  "renWuZhongQiBiao": "Task restart table",
+  "xiangMuFenLeiGongShiZhanBiBiao": "Table of proportion of project classification working hours",
+  "xiangMuHaoYongJinDuBiao": "Project Consumption Schedule",
+  "xiangMuYuGuGongShiBiao": "Project Estimated Work Hours Table",
+  "youXiaoGongShiShuaiBiao": "Effective working hour rate table",
+  "yuanGongRenWuJinDuBiao": "Employee Task Schedule",
+  "yuanGongRenWuWanChengQingKuangBiao": "Employee Task Completion Status Table",
+  "yuanGongXiangMuJinDuBiao": "Employee Project Schedule",
+  "ziXiangMuGongShiChengBenBiao": "Subproject Labor Cost Table",
+  "anShiWanChengShuLiang": "Complete quantity on time",
+  "anShiWanChengShuai": "On time completion rate",
+  "baoJiaXiangMu": "Quotation project",
+  "buZuGongShi": "Make up for working hours",
+  "canYuYuanGong": "Participating employees",
+  "dangQianZhuangTai": "current state",
+  "diYu": "lower than",
+  "feiYongBaoXiaoMingXiBiaoXlsx": "Expense Reimbursement Details Table. xlsx",
+  "fenPeiGongShiH": "Allocated working hours (h)",
+  "fenZuShiJiGongShiH": "Group actual working hours (h)",
+  "fenZuYuGuGongShiH": "Group estimated working hours (h)",
+  "fteGongShiDangYueGongShiJiShu": "FTE (Hours/Month Work Base)",
+  "fteGongShiGuDingGongShiJiShu_163125": "FTE (Hours/Fixed Hours Base (163.125))",
+  "fuWuXiangMu": "Service Items",
+  "fuXiangMuBianHao": "Parent Project Number",
+  "fuXiangMuMingCheng": "Parent Project Name",
+  "fuZeBuMen": "Responsible department",
+  "fuZeZuChang": "Responsible team leader",
+  "gaoYu": "higher than",
+  "gongShiHaoYongShuai": "Labor consumption rate",
+  "heJiGongShiChengBen": "Total labor cost",
+  "heJiGongShiH": "Total working hours (h)",
+  "heTongLiRun": "Contract profit",
+  "heTongLiRunShuai": "Contract profit margin",
+  "jiDuXlsx": "Quarterly). xlsx",
+  "jiHuaGongShiCaiWu": "Planned working hours (finance)",
+  "jiHuaGongShiH": "Planned working hours (h)",
+  "jiaBanGongShiH": "Overtime working hours (h)",
+  "qingXuanZeTiXingFenLei": "Please select reminder category",
+  "qingXuanZeYuanGongLeiXing": "Please select employee type",
+  "qingXuanZeZiZhuXiangMuLeiBie": "Please select the category of autonomous projects",
+  "quXiao": "Cancel",
+  "quanBuBuZu": "Make up for it all",
+  "queDing": "determine",
+  "renMing": "name",
+  "renWuZongShuLiang": "Total number of tasks",
+  "riBiaoZhunGongShi": "Daily standard working hours",
+  "sheZhiYuJing": "Set up alerts",
+  "sheZhiZhanBi": "Set proportion:",
+  "shengYuGongShiH": "Remaining working hours (h)",
+  "shiBaoGongShiXiaoShi": "Actual reported working hours (hours)",
+  "shiJiChengBen": "actual cost",
+  "shiJiGongShiChengBen": "Actual labor cost",
+  "shouHouBaoJiaXiangMu": "After sales quotation project",
+  "tYihuikuanlirun": "$t('yiHuiKuanLiRun')",
+  "tiXingFenLei": "Reminder classification:",
+  "wanChengRiQi": "Completion date",
+  "weiFenLei": "Unclassified",
+  "weiWanChengShuLiang": "Unfinished quantity",
+  "weiWanChengShuai": "Unfinished rate",
+  "xiangMuHao": "Project number",
+  "xiangMuJieZhiShiJian": "Project deadline",
+  "xiangMuKaiShiShiJian": "Project start time",
+  "xiangMuRenWu": "Project tasks",
+  "xiaoHaoGongShiH": "Consumed working hours (h)",
+  "xuanZeGuanXi": "Select Relationship:",
+  "yanChiWanChengShuLiang": "Delayed completion quantity",
+  "yanFaXiangMu": "R&D projects",
+  "yiHuiKuanLiRun": "Recovered profits",
+  "yiHuiKuanLiRunShuai": "Recovered profit margin",
+  "yiWanChengShuLiang": "Completed quantity",
+  "yiXiaoHaoGongShiChengBen": "Cost of consumed labor hours (¥)",
+  "yiXiaoHaoGongShiH": "Consumed working hours (h)",
+  "yingBaoGongShi": "Reported working hours",
+  "yingBaoGongShiTianShu": "Number of working hours to be reported",
+  "yingGongShiXiaoShi": "Expected working hours (hours)",
+  "youXiaoGongShiShuai": "Effective working hours rate",
+  "yuGuGongShi": "Estimated working hours",
+  "yuanGong": "staff",
+  "yuanGongLeiXing": "Employee type",
+  "yuanGongRenWuShuJu": "Employee task data",
+  "zaiZhiRenShu": "Number of employees",
+  "zeRenRen": "person liable",
+  "zengBuGongShiH": "Additional working hours (h)",
+  "zhengChangGongShiH": "Normal working hours (h)",
+  "zhongQiShiJian": "Restart time",
+  "zhongQiYuanYin": "Reason for restart",
+  "ziXiangMuChengBen": "Sub project cost",
+  "ziXiangMuGongShi": "Sub project working hours",
+  "ziXiangMuMingCheng": "Sub project name",
+  "keHuLieBiaoXlsx": "Customer List. xlsx",
+  "gongZuoShiChangFenPei": "Allocation of working hours",
+  "jinRiGongZuoShiChang": "Today's working hours:",
+  "kanXiaoShuo": "Read novels",
+  "liaoTian": "chat",
+  "meiGong": "art designer",
+  "qiTaGongZuo": "Other work",
+  "shangWang": "surf the internet",
+  "sheJi": "Design",
+  "shiChangDanWeiH": "Duration (in hours)",
+  "tingYinLe": "Listen to the music",
+  "weiZhi": "unknown",
+  "wenDang": "file",
+  "yanFa": "research and development",
+  "yingShiYuLe": "Film and entertainment",
+  "yunYing": "operate",
+  "jinRiZanWuJieTuDianJiChaKanJinQi": "There are currently no screenshots available today. Click to view recent updates",
+  "keHuDuanXiaZai": "Client Download",
+  "suoYouJieTu": "All screenshots",
+  "yuanGongAnZhuangKeHuDuanLingDaoJiKeChaKanGongZuoZhuoMianYuanChengJianGuan": "(Employees can install the client, and leaders can view remote supervision of the work desktop)",
+  "feiGongZuoQingKuangTongJi": "Non work statistics",
+  "hangWei": "behavior",
+  "tuPian": "picture",
+  "benYeJineheJi": "Total amount on this page",
+  "cunZaiDaiShenHeHuoYiBoHuiDeDanJu": "There are pending or rejected documents",
+  "daYin": "Printing",
+  "daiDiErShenHeRenShenHe": "To be reviewed by the second reviewer",
+  "daiDiYiShenHeRenShenHe": "To be reviewed by the first reviewer",
+  "danJuDaoChu": "Document export",
+  "duiYingChengBenXiang": "Corresponding cost items",
+  "faFang": "grant",
+  "faFangFangShi": "Distribution method",
+  "faFangZhuangTai": "Distribution status",
+  "feiYongBaoXiaoDanJuLieBiao": "List of expense reimbursement documents",
+  "feiYongJinE": "Cost amount",
+  "feiYongJineHanShui": "Cost amount (including tax)",
+  "feiYongLeiXing": "Cost type:",
+  "feiYongLeiXingDaLeiGuanLi": "Cost Category Management",
+  "feiYongZhuLeiXing": "Cost main type",
+  "feiYongZhuLeiXingGuanLi": "Cost Main Type Management",
+  "guanBi": "close",
+  "qingTianXieWanZheng": "Please fill it out completely",
+  "qingTianXieWanZhengFeiYongJinE": "Please fill in the complete fee amount",
+  "qingXuanZeDiErShenHeRen": "Please select the second reviewer",
+  "qingXuanZeDiYiShenHeRen": "Please select the first reviewer",
+  "qingXuanZeWeiFaFangDeDanJu": "Please select documents that have not been issued",
+  "qingXuanZeYiFaFangDeDanJu": "Please select the issued documents",
+  "qingXuanZeZhiFuFangShi": "Please select payment method",
+  "quXiaoFaFang": "Cancel distribution",
+  "shenHeWanCheng": "Review completed",
+  "tianBaoShiJian": "Filling time",
+  "weiFaFang": "unissued",
+  "xiangMuShenHeZhuangTai": "Project (Review Status)",
+  "yiFaFang": "Issued",
+  "zhang": "Zhang",
+  "zhiFuFangShi": "Payment method",
+  "caiWuShenHeTiShi": "Financial audit prompt",
+  "nianYue": "years:",
+  "ninQueDingYaoShenHeTongGuo": "Are you sure you want to pass the review",
+  "riBaoNianYue": "Daily Report Year Month",
+  "shenHeChengGong": "Review successful!",
+  "shenHeZhuangTai": "Review status:",
+  "weiShenHe": "Unaudited",
+  "yiShenHe": "Approved",
+  "yueDeGongShiBaoGaoMa": "Is there a monthly work hour report?",
+  "boHuiLeQingJiaShenQing": "Rejected leave application",
+  "chaKanYuanYin": "View reasons",
+  "qingJiaDan": "Leave application form",
+  "qingJiaShenHe": "Leave Review",
+  "queDingYaoCheHuiGaiQingJiaShenQingMa": "Are you sure you want to withdraw the leave application",
+  "shengYuJiaQi": "Remaining vacation",
+  "yiCheHui": "Withdrawn",
+  "fanKuiJieGuo": "Feedback results",
+  "gongSiLieBiao": "Company List",
+  "gongSiMingCheng": "corporate name",
+  "keHuFanKui": "Customer feedback",
+  "lianXiFangShi": "contact information",
+  "qingShuRuKeHuFanKui": "Please enter customer feedback",
+  "shiFouLianXi": "Whether to contact",
+  "tiJiao": "Submit",
+  "tianXieChengGong": "Completed successfully",
+  "tianXieFanKui": "Fill in feedback",
+  "weiLianXi": "Not contacted",
+  "yiLianXi": "Contacted",
+  "zhuCeShiJian": "Registration time",
+  "gongChengZhuanYeLieBiao": "List of Engineering Majors",
+  "qingShuRuZhuanYeMingCheng": "Please enter the professional name",
+  "qingShuRuZhuanYeMingChengGuanJianZi": "Please enter the keyword of professional name",
+  "queDingYaoZhuanYe": "Make sure to be professional",
+  "shanChuZhuanYe": "Delete major",
+  "xinZengZhuanYe": "Newly added majors",
+  "xiuGaiZhuanYe": "Modify major",
+  "bianGengHouYuGuGongShi": "Estimated working hours after change",
+  "bianGengLiYou": "Reason for change",
+  "bianGengQianYuGuGongShi": "Estimated working hours before change",
+  "boHuiLiYou": "Reason for rejection",
+  "qingShuRuBoHuiLiYou": "Please enter the reason for rejection",
+  "qingXuanZeZhuangTai": "Please select a status",
+  "quXiaoBoHui": "Cancel rejection",
+  "renTian": "Human nature",
+  "shenHeRen": "Reviewed by:",
+  "tiJiaoRen": "submitter",
+  "tiJiaoShiJian": "Submission time",
+  "xiangMu": "project",
+  "yuGuGongShiBianGeng": "Estimated working hours change",
+  "chenBenTongJi": "Cost statistics",
+  "daoChuNeiRon": "Export Content",
+  "gongHhiZhanbiXmu": "Including the proportion of project working hours",
+  "gongShiHeChengBen": "Working hours and costs",
+  "hanZhuXiangMu": "Including the main project",
+  "jingChenBen": "Cost only",
+  "jingGongShi": "Only working hours",
+  "liMian": "inside",
+  "waiMian": "outside",
+  "baoXiaoHeJi": "Total reimbursement",
+  "feiYongBaoXiaoChengBen": "Expense reimbursement cost",
+  "gongShiChengBen": "Labor cost",
+  "gongShiHeJi": "Total working hours",
+  "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",
+  "buFenGongShi": "Partial working hours",
+  "caoZuoChengGong": "Operation successful:",
+  "caoZuoShiJian": "Operation time",
+  "cuoWuXinXi": "error message",
+  "dangQianYuanGongYouDaiShenHeRiBaoQueRenTingYongBingBoHuiRiBaoMa": "Is the current employee awaiting review of the daily report, confirming its discontinuation and rejecting it?",
+  "gaiYuanGong": "The employee",
+  "jiangGaiYuanGongDeGongShiShuJuCanYuDeXiangMuYuRenWuZhuanYiZhi": "Transfer the employee's working hours data, projects and tasks they have participated in to",
+  "keJianFanWeiSheZhi": "Visible range setting",
+  "keTianBaoBuMen": "Department that can be filled in",
+  "keZhuanRang": "Transferable",
+  "liZhiRiQi": "Resignation date",
+  "liangCengShenHe": "Two level review",
+  "luJingGuanLiQiYeYingYongGuanLiGongShiGuanJiaKeJianFanWei": "Path: Manage Enterprise - Application Management - Hour Manager - Visible Range",
+  "piLiangQiYongYuanGong": "Batch enable employees",
+  "qiTaCuoWu": "Other errors",
+  "qingXuanZeJieShouRen": "Please select recipient",
+  "quanBuGongShi": "All working hours",
+  "queDingShanChuGaiYuanGongMa": "Are you sure to delete this employee?",
+  "queDingYaoShanChuGaiBuMenMa": "Are you sure you want to delete this department?",
+  "renYuanSuoZaiBuMenYuDingDingTongXunLuBaoChiYiZhi": "The department where the personnel are located should be consistent with the DingTalk contact list",
+  "shenHeCengJi": "Review hierarchy",
+  "shiFouShanChuGaiJiLu": "Do you want to delete this record?",
+  "tiaoYongRenShenFenBuFuHe": "The caller's identity does not match",
+  "tiaoZhengBuMen": "Adjusting departments",
+  "tongBuQianQingLianXiQiYeWeiXinGuanLiYuanJianChaYingYongShouQuanDeKeJianFanWei": "Please contact the enterprise WeChat administrator to check the visible range of application authorization before synchronization",
+  "tongBuRiZhi": "Synchronize logs",
+  "tongBuZhong": "Synchronizing",
+  "tuiSongZhiSap": "Push to SAP",
+  "weiSheZhiShiYouSuoShuBuMenFuZeRenShenHe": "When not set, it shall be reviewed by the department head",
+  "xiuZhengGongShi": "Correction of working hours",
+  "xiuZhengGongShiSuoShuBuMen": "Revise the department to which the working hours belong",
+  "yiCengShenHe": "First level review",
+  "yiQuXiao": "Canceled",
+  "yingYongLeiXingBuFuHeYaoQiu": "The application type does not meet the requirements",
+  "yingYongXinXiHuoQuShiBai": "Application information retrieval failed",
+  "zhuanYiDao": "Transfer to",
+  "caoZuoChengGong-0": "Operation successful!",
+  "dangQianBuMenCunZaiDaiShenHeBaoGao": "There are pending reports in the current department for review",
+  "dangQianBuMenCunZaiDaiShenHeBaoGaoShiFouQuanBuZhuanWeiTongGuo": "Are all pending reports in the current department approved?",
+  "bianGengTiXing": "Change Reminder",
+  "buKeChaoQianTianBao": "Cannot be filled in advance",
+  "chengGongDaoRu": "Successfully imported",
+  "cuiBan": "Urgent processing",
+  "daiShenHeZhuangTaiBuKeXiuGaiQingFanHuiDaoChaKanRiBaoZhongXianCheHui": "Pending review status cannot be modified. Please return to the daily report for review and withdraw first",
+  "daiTian": "Fill in on behalf of others",
+  "dangRiGongShiBuZu": "Insufficient working hours on the day",
+  "daoChuFangShi": "Export method",
+  "daoChuRiBaoShenHeJiLuShuJu": "Export daily audit record data",
+  "daoChuYuanGongTianBaoGongShiZhanBi": "Export the proportion of employee reported working hours",
+  "daoRuKaoQinShiChang": "Import attendance duration",
+  "daoRuKaoQinShiChangChengGong": "Successfully imported attendance duration",
+  "daoRuRiBaoShenHeJiLuXiuGaiShuJu": "Import daily audit records and modify data",
+  "deGongShi": "The working hours?",
+  "fuWu": "service",
+  "gongShiTuiSongRiZhi": "Work hour push log",
+  "gongShiYiChangMingXi": "Details of abnormal working hours",
+  "gongZuoNeiRongBiTianQingJianCha": "Job responsibilities are mandatory, please check",
+  "gongZuoZhiZeBiTianQingJianCha": "Job responsibilities are required, please check",
+  "heJiGongShi": "Total working hours",
+  "huLveBingTiJiao": "Ignore and submit",
+  "jiaZaiGengDuoRiBao": "Load more daily reports",
+  "jiaoSeBiTianQingJianCha": "Role required, please check",
+  "jiaoSeXuanZe": "Role selection",
+  "jingJianDaoChu": "Refine export",
+  "jingJianRiBaoBuHanGongZuoShiXiangHeShenPiXinXiShuJuLiangGengXiaoDaoChuGengKuai": "The streamlined daily report does not include work items and approval information, resulting in smaller data volume and faster export.",
+  "kaiShiRiQiBuNengDaYuJieShuRiQi": "The start date cannot be greater than the end date",
+  "kaiShiShanChu": "Start deleting",
+  "kaoQinGongShi": "Attendance hours",
+  "meiCiJinZhiChiDaiTianYiGeRen": "Only one person is supported to fill in at a time",
+  "meiYouGengDuoShuJuLe": "There's no more data left",
+  "ninQueDingYaoShanChuGaiShiJianDuanNeiDeRiBaoMaShanChuHouJiangBuKeHuiFu": "Are you sure you want to delete the daily report within this time period? Deleting it will be irreversible",
+  "ninQueDingYaoShanChuGaiTiaoJiLuMa": "Are you sure you want to delete this record?",
+  "ninQueDingYaoShenHeTongGuoGaiShiJianDuanNeiQuanBuDeRiBaoMa": "Are you sure you want to approve all daily reports within this time period?",
+  "piLiangShanChuRiBao": "Batch delete daily reports",
+  "piLiangShenHeRiBao": "Batch audit daily report",
+  "qingTianXieRenWuFenZu": "Please fill in the task grouping",
+  "qingXuanZeBuMenHuoRenYuan": "Please select department or personnel",
+  "qingXuanZeDaiTianDeYuanGong": "Please select the employee to fill in on behalf of",
+  "qingXuanZeFuWu": "Please choose a service",
+  "qingXuanZeNianYue": "Please select year and month:",
+  "qingXuanZeRenWuLiChengBei": "Please select task/milestone",
+  "qingXuanZeRiQiFanWei": "Please select a date range",
+  "qingXuanZeYuanGong": "Please select employee",
+  "quXiaoYiChang": "Cancel Exception",
+  "queRen": "confirm",
+  "queRenTuiSong": "Confirm push",
+  "queRenTuiSongDangQianGongShi": "Confirm the current working hours for push notifications?",
+  "renWuFenZuBiTianQingJianCha": "Task grouping is required, please check",
+  "renWuFenZuHeJieDuanBiTianQingJianCha": "Task grouping and stages are required, please check",
+  "renWuLiChengBei": "Tasks/Milestones",
+  "riBaoShenHeXiuGai": "Daily report review and modification",
+  "shenPiTongGuo": "Approved",
+  "shiBai": "fail",
+  "shiFouYiChang": "Is it abnormal",
+  "tTuisongshijian": "$t('tuiSongShiJian')",
+  "tianBaoBuMen": "Reporting department",
+  "tianBaoGongShi": "Fill in working hours",
+  "tuPianShangChuan": "Image upload",
+  "tuiSongChengGong": "Push successful!",
+  "tuiSongFangShi": "Push method",
+  "tuiSongGongShi": "Push working hours",
+  "tuiSongJieGuo": "Push results",
+  "tuiSongMingCheng": "Push name",
+  "tuiSongShiJian": "Push time",
+  "wanZhengDaoChu": "Complete export",
+  "weiTiJiao": "Unsubmitted",
+  "weiTiJiaoRenYuanLieBiao": "List of personnel not submitted",
+  "xiaZaiTianBaoGongShiZhanBiBiao": "Download and fill in the proportion of working hours table",
+  "xiangMuXiaDeRenWuFenZu": "Task grouping under the project",
+  "xiaoShiShiFouQueDingTiJiao": "Hour, are you sure to submit?",
+  "xiuGaiDaoRuJiLu": "Modify import records",
+  "xuanZeDaoRuRenYuan": "Select import personnel:",
+  "yiBoHuiLouTian": "Rejected/Omitted",
+  "yiTongGuoZhuangTaiBuKeXiuGai": "Passed status cannot be modified",
+  "yueDeGongShi": "Monthly working hours?",
+  "zhengZaiDaoRuXiuGaiZhongQingNaiXinDengDai": "Importing modifications, please be patient.",
+  "zhengZaiTuiSongZhongQingNaiXinDengDai": "Pushing, please be patient.",
+  "zhengZaiWei": "*Currently working for",
+  "zhiNengTianBao": "Intelligent filling",
+  "zhongDe": "Middle",
+  "ziXiangMuBiTianQingJianCha": "Subitem is required, please check",
+  "zuiJinXuanZeXiangMu": "Recently selected project",
+  "shenHeLiuCheng": "Review process:",
+  "daiShen": "Pending review",
+  "fenZu": "grouping",
+  "fenZuWeiSheZhiQingLianXiGaiXiangMuGuanLiRenYuan": "Grouping not set, please contact the project management personnel",
+  "fenZuWeiSheZhiShenPiRenQingLianXiGaiXiangMuGuanLiRenYuan": "No approver has been set for the group, please contact the project management personnel",
+  "juJue": "refuse",
+  "qingShuRuZhouZongJie": "Please enter the weekly summary",
+  "shiJianXiaoShi": "Time (hours)",
+  "tiJiaoShiBai": "Submission failed:",
+  "tianXieGongShiHeJiFei": "Fill in the total working hours",
+  "zanCun": "Temporary storage",
+  "zanCunShiBai": "Temporary storage failed:",
+  "banBenGuoDiQingShengJi": "Version too low, please upgrade",
+  "bangZhuZhongXin": "Help Center",
+  "baoYang": "maintain",
+  "changDuWei_120GeZiFu": "The length is 1-20 characters",
+  "dianJiChaKanCaoZuoShouCe": "Click to view the operation manual",
+  "faSongChengGong": "Sending successful",
+  "faSongYanZhengMa": "Send verification code",
+  "fanHuiShouYe": "Return to homepage",
+  "feiChangBaoQianNiFangWenDeYeMianBuCunZai": "Sorry, the page you visited does not exist!!!",
+  "fen": "branch",
+  "gongChengGuanLiZhuanYeBan": "Engineering Management Professional Edition",
+  "gongShiTongJiJiChuBan": "Basic version of working hour statistics",
+  "gongSiMing": "Company name",
+  "huo": "or",
+  "jiChuBan": "Basic version",
+  "jianZhuGongChengBan": "Construction Engineering Edition",
+  "jingGao": "warning",
+  "liangCiShuRuDeMiMaBuYiZhi": "The passwords entered twice are inconsistent",
+  "miMaChangDuBuNengShaoYu_6Wei": "The password length cannot be less than 6 characters",
+  "miao": "second",
+  "muQianZanWuXiaoXi": "There is currently no news available",
+  "ninHaoNinGouMaiDeBanBenYiDaoQi": "Hello, the version you purchased has expired!",
+  "qiJianBan": "Flagship Edition",
+  "qiYeBanGongQiJianBan": "Enterprise Office Flagship Edition",
+  "qiYeWeiXinSaoMaDengLu": "Scan the QR code to log in to Enterprise WeChat",
+  "qingSheZhiMiMaChangDuBuDiYu_6Wei": "Please set a password with a length of no less than 6 characters",
+  "qingShuRuGongHao": "Please enter the job number",
+  "qingShuRuGongSiMing": "Please enter the company name",
+  "qingShuRuGongSiMingCheng": "Please enter the company name",
+  "qingShuRuYanZhengMa": "Please enter the verification code",
+  "qingYongQiYeWeiXinSaoMaTianJiaKeFu": "Please scan the code on Enterprise WeChat to add customer service",
+  "qingZhongFuShuRuMiMa": "Please re-enter the password",
+  "ruoXuJiXuShiYongQingQianWangQiYeWeiXinYingYongShiChangXuFeiGeiGuiGongSiDaiLaiBuBianJingQingLiangJie": "If you need to continue using it, please go to the enterprise WeChat application market to renew. We apologize for any inconvenience caused to your company. Thank you for your understanding!",
+  "saoMaTianJiaQiYeWeiXinKeFu": "Scan the code to add enterprise WeChat customer service",
+  "sheZhiMiMaChangDuBuDiYu_6Wei": "Set a password with a length of no less than 6 characters",
+  "shenPi": "Approval",
+  "shi": "Time",
+  "shouJiHaoMaGeShiBuZhengQue": "Incorrect phone number format",
+  "wanShanGongHao": "Improve job ID",
+  "wanShanXingMing": "Complete Name",
+  "wuQuanFangWenQingLianXiGuanLiYuanWeiNinFenPeiQuanXian": "Unauthorized access, please contact the administrator to assign permissions for you",
+  "xiangMuGuanLiZhuanYeBan": "Project Management Professional Edition",
+  "xiuGaiGongSiMingCheng": "Change company name",
+  "xuanZeBanBen": "Select version:",
+  "yanZhengMa": "Verification Code",
+  "yiDaoQi": "Expired",
+  "zhengZaiJinRuXiTong": "Entering the system",
+  "zhongFuMiMa": "Duplicate password",
+  "zhuCe": "register",
+  "zhuCeChengGong": "registered successfully",
+  "zhuanYeBan": "professional edition",
+  "zunJingDeYongHuNinGouMaiDeBanBen": "Dear user! The version you purchased",
+  "qianZhiRenWu": "Pre task",
+  "qingXuanZeSuoShuRenWuFenZu": "Please select the task group to which you belong",
+  "qingXuanZeSuoShuRenWuLieBiao": "Please select the task list to which you belong",
+  "qingXuanZeSuoShuXiangMu": "Please select the project to which you belong",
+  "qingXuanZeXiangMuFuWu": "Please select project service",
+  "suoShuRenWuFenZu": "Task group to which it belongs",
+  "suoShuRenWuLieBiao": "Task List",
+  "tongYiGeZhiHangRenFuWuBuNengXiangTong": "The same executor cannot provide the same service",
+  "xiangMuFuWu": "Project Services",
+  "buShuYuNingDeQuanXianNei": "Not within your permission",
+  "piLiangXiuGaiXiangMuJieDuan": "Batch modification project phase",
+  "piLiangCaoZuo": "Batch operation"
 }
 }

+ 644 - 5
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json

@@ -27,9 +27,9 @@
     "basicSystemSettings": "系统基础设置",
     "basicSystemSettings": "系统基础设置",
     "roleRightsManagement": "角色权限管理",
     "roleRightsManagement": "角色权限管理",
     "projectFormSettings": "项目表单设置",
     "projectFormSettings": "项目表单设置",
-    "budgetReview":"预估工时审核",
-    "gongshitongji":"工时统计表",
-    "caiwushenhe":"财务审核"
+    "budgetReview": "预估工时审核",
+    "gongshitongji": "工时统计表",
+    "caiwushenhe": "财务审核"
   },
   },
   "role": {
   "role": {
     "ordinaryEmployees": "普通员工",
     "ordinaryEmployees": "普通员工",
@@ -207,6 +207,7 @@
     "waitForTheProjectReviewer": "待项目审核人",
     "waitForTheProjectReviewer": "待项目审核人",
     "audit": "审核",
     "audit": "审核",
     "projectAuditor": "项目审核人",
     "projectAuditor": "项目审核人",
+    "projectReviwer": "项目复审人",
     "reviewer": "审核人",
     "reviewer": "审核人",
     "await": "待",
     "await": "待",
     "importWaitingForReview": "导入待审核",
     "importWaitingForReview": "导入待审核",
@@ -527,7 +528,7 @@
   "taskthatisoverdue": "已超期的任务",
   "taskthatisoverdue": "已超期的任务",
   "yi-ban": "一般",
   "yi-ban": "一般",
   "zhong-yao": "重要",
   "zhong-yao": "重要",
-  "AuditProcess":"审核流程设置",
+  "AuditProcess": "审核流程设置",
   "jin-ji": "紧急",
   "jin-ji": "紧急",
   "makesuretodeletethesubproject": "确定要删除子项目",
   "makesuretodeletethesubproject": "确定要删除子项目",
   "ma": "吗?",
   "ma": "吗?",
@@ -1525,5 +1526,643 @@
   "que-ding-yao-shan-chu-gai-he-tong-ma": "确定要删除该合同吗?",
   "que-ding-yao-shan-chu-gai-he-tong-ma": "确定要删除该合同吗?",
   "que-ding-yao-shan-chu-gai-wen-jian-ma": "确定要删除该文件吗?",
   "que-ding-yao-shan-chu-gai-wen-jian-ma": "确定要删除该文件吗?",
   "he-tong-guan-li-dao-ru-mo-ban": "合同管理导入模板",
   "he-tong-guan-li-dao-ru-mo-ban": "合同管理导入模板",
-  "minMaxCheck": "工时下限不得大于上限"
+  "minMaxCheck": "工时下限不得大于上限",
+  "chu-cha-shen-he": "出差审核",
+  "zhu-yao-fu-ze-ren": "(主要负责人)",
+  "zhong-xin-ti-jiao": "重新提交",
+  "bo-hui-le-qing-jia-shen-qing": "驳回了请假申请",
+  "que-ding-yao-che-hui-gai-chu-cha-shen-qing-ma": "确定要撤回该出差申请吗",
+  "zhi-shao-xuan-ze-yi-ge-bu-men-huo-zhe-ren-yuan-zuo-wei-shen-he-ren": "至少选择一个部门或者人员做为审核人",
+  "yi-cun-zai-zhong-fu-bu-men": "已存在重复部门",
+  "yi-cun-zai-zhong-fu-ren-yuan": "已存在重复人员",
+  "qing-shu-ru-guan-jian-ming-cheng": "请输入关键名称",
+  "sou-suo": "搜索",
+  "xia-bi-hui-kuan-ri-qi": "下笔回款日期",
+  "yi-hui-kuan-jin-e": "已回款金额",
+  "yi-hui-kuan-jin-du": "已回款进度",
+  "xia-bi-hui-kuan-jin-e": "下笔回款金额",
+  "hui-kuan-ji-hua": "回款计划",
+  "yi-hui-kuan": "已回款",
+  "shi-fou-yi-hui-kuan": "是否已回款",
+  "hui-kuan-ri-qi": "回款日期",
+  "hui-kuan-jin-e": "回款金额",
+  "wei-hui-kuan": "未回款",
+  "he-tong-lei-xing-zui-duo-zhi-neng-chuang-jian-20-ge": "合同类型最多只能创建20个",
+  "que-ren-shen-he-tong-guo-ma-tong-guo-hou-he-tong-ji-ben-xin-xi-wu-fa-xiu-gai": "确认审核通过吗,通过后合同基本信息无法修改",
+  "hui-kuan-ri-qi-bu-neng-wei-kong": "回款日期不能为空",
+  "hui-kuan-jinebu-neng-wei-0": "回款金额不能为0",
+  "zong-hui-kuan-jinebu-de-da-yu-he-tong-jin-e": "总回款金额不得大于合同金额",
+  "ziXiangMuGongShiChengBenBiao": "子项目工时成本表",
+  "renWuZhongQiBiao": "任务重启表",
+  "fteBaoBiao": "FTE报表",
+  "youXiaoGongShiShuaiBiao": "有效工时率表",
+  "xiangMuFenLeiGongShiZhanBiBiao": "项目分类工时占比表",
+  "fenLeiGongShiMingXiBiao": "分类工时明细表",
+  "yuanGongXiangMuJinDuBiao": "员工项目进度表",
+  "fenZuHaoYongJinDuBiao": "分组耗用进度表",
+  "xiangMuHaoYongJinDuBiao": "项目耗用进度表",
+  "yuanGongRenWuJinDuBiao": "员工任务进度表",
+  "xiangMuYuGuGongShiBiao": "项目预估工时表",
+  "yuanGongRenWuWanChengQingKuangBiao": "员工任务完成情况表",
+  "qingXuanZeZiZhuXiangMuLeiBie": "请选择自主项目类别",
+  "qingXuanZeYuanGongLeiXing": "请选择员工类型",
+  "quanBuBuZu": "全部补足",
+  "sheZhiYuJing": "设置预警",
+  "shiJiChengBen": "实际成本",
+  "fenZuYuGuGongShiH": "分组预估工时(h)",
+  "fenZuShiJiGongShiH": "分组实际工时(h)",
+  "yiHuiKuanLiRun": "已回款利润",
+  "yiHuiKuanLiRunShuai": "已回款利润率",
+  "tYihuikuanlirun": "$t('yiHuiKuanLiRun')",
+  "heTongLiRun": "合同利润",
+  "heTongLiRunShuai": "合同利润率",
+  "buZuGongShi": "补足工时",
+  "fuXiangMuBianHao": "父项目编号",
+  "fuXiangMuMingCheng": "父项目名称",
+  "ziXiangMuMingCheng": "子项目名称",
+  "ziXiangMuGongShi": "子项目工时",
+  "ziXiangMuChengBen": "子项目成本",
+  "zhongQiYuanYin": "重启原因",
+  "zeRenRen": "责任人",
+  "zhongQiShiJian": "重启时间",
+  "renMing": "人名",
+  "fteGongShiDangYueGongShiJiShu": "FTE(工时/当月工时基数)",
+  "fteGongShiGuDingGongShiJiShu_163125": "FTE(工时/固定工时基数(163.125))",
+  "shiBaoGongShiXiaoShi": "实报工时(小时)",
+  "yingGongShiXiaoShi": "应工时(小时)",
+  "zaiZhiRenShu": "在职人数",
+  "yingBaoGongShiTianShu": "应报工时天数",
+  "riBiaoZhunGongShi": "日标准工时",
+  "yingBaoGongShi": "应报工时",
+  "youXiaoGongShiShuai": "有效工时率",
+  "yuanGongLeiXing": "员工类型",
+  "xiangMuHao": "项目号",
+  "shengYuGongShiH": "剩余工时(h)",
+  "fuZeBuMen": "负责部门",
+  "jiHuaGongShiCaiWu": "计划工时(财务)",
+  "shiJiGongShiChengBen": "实际工时成本",
+  "zengBuGongShiH": "增补工时(h)",
+  "zhengChangGongShiH": "正常工时(h)",
+  "jiaBanGongShiH": "加班工时(h)",
+  "heJiGongShiH": "合计工时(h)",
+  "heJiGongShiChengBen": "合计工时成本",
+  "gongShiHaoYongShuai": "工时耗用率",
+  "fenPeiGongShiH": "分配工时(h)",
+  "yiXiaoHaoGongShiH": "已消耗工时(h)",
+  "yiXiaoHaoGongShiChengBen": "已消耗工时成本(¥)",
+  "fuZeZuChang": "负责组长",
+  "canYuYuanGong": "参与员工",
+  "xiangMuRenWu": "项目任务",
+  "jiHuaGongShiH": "计划工时(h)",
+  "xiaoHaoGongShiH": "消耗工时(h)",
+  "xiangMuKaiShiShiJian": "项目开始时间",
+  "xiangMuJieZhiShiJian": "项目截止时间",
+  "yuGuGongShi": "预估工时",
+  "yuanGong": "员工",
+  "renWuZongShuLiang": "任务总数量",
+  "yiWanChengShuLiang": "已完成数量",
+  "weiWanChengShuLiang": "未完成数量",
+  "weiWanChengShuai": "未完成率",
+  "anShiWanChengShuLiang": "按时完成数量",
+  "yanChiWanChengShuLiang": "延迟完成数量",
+  "anShiWanChengShuai": "按时完成率",
+  "tiXingFenLei": "提醒分类:",
+  "qingXuanZeTiXingFenLei": "请选择提醒分类",
+  "xuanZeGuanXi": "选择关系:",
+  "diYu": "低于",
+  "gaoYu": "高于",
+  "sheZhiZhanBi": "设置占比:",
+  "quXiao": "取 消",
+  "queDing": "确 定",
+  "yuanGongRenWuShuJu": "员工任务数据",
+  "dangQianZhuangTai": "当前状态",
+  "wanChengRiQi": "完成日期",
+  "fuWuXiangMu": "服务项目",
+  "feiYongBaoXiaoMingXiBiaoXlsx": "费用报销明细表.xlsx",
+  "jiDuXlsx": "季度).xlsx",
+  "weiFenLei": "未分类",
+  "baoJiaXiangMu": "报价项目",
+  "shouHouBaoJiaXiangMu": "售后报价项目",
+  "yanFaXiangMu": "研发项目",
+  "keHuLieBiaoXlsx": "客户列表.xlsx",
+  "jinRiGongZuoShiChang": "今日工作时长:",
+  "gongZuoShiChangFenPei": "工作时长分配",
+  "yanFa": "研发",
+  "shangWang": "上网",
+  "wenDang": "文档",
+  "sheJi": "设计",
+  "kanXiaoShuo": "看小说",
+  "yingShiYuLe": "影视娱乐",
+  "liaoTian": "聊天",
+  "qiTaGongZuo": "其他工作",
+  "shiChangDanWeiH": "时长(单位:h)",
+  "meiGong": "美工",
+  "yunYing": "运营",
+  "tingYinLe": "听音乐",
+  "weiZhi": "未知",
+  "yuanGongAnZhuangKeHuDuanLingDaoJiKeChaKanGongZuoZhuoMianYuanChengJianGuan": "(员工安装客户端,领导即可查看工作桌面远程监管)",
+  "keHuDuanXiaZai": "客户端下载",
+  "jinRiZanWuJieTuDianJiChaKanJinQi": "今日暂无截图,点击查看近期",
+  "suoYouJieTu": "所有截图",
+  "feiGongZuoQingKuangTongJi": "非工作情况统计",
+  "hangWei": "行为",
+  "tuPian": "图片",
+  "feiYongZhuLeiXingGuanLi": "费用主类型管理",
+  "feiYongZhuLeiXing": "费用主类型",
+  "faFangZhuangTai": "发放状态",
+  "weiFaFang": "未发放",
+  "yiFaFang": "已发放",
+  "danJuDaoChu": "单据导出",
+  "faFang": "发放",
+  "quXiaoFaFang": "取消发放",
+  "daiDiYiShenHeRenShenHe": "待第一审核人审核",
+  "daiDiErShenHeRenShenHe": "待第二审核人审核",
+  "shenHeWanCheng": "审核完成",
+  "zhiFuFangShi": "支付方式",
+  "feiYongLeiXingDaLeiGuanLi": "费用类型大类管理",
+  "duiYingChengBenXiang": "对应成本项",
+  "tianBaoShiJian": "填报时间",
+  "zhang": "张",
+  "feiYongLeiXing": "费用类型:",
+  "xiangMuShenHeZhuangTai": "项目(审核状态)",
+  "feiYongJineHanShui": "费用金额(含税)",
+  "daYin": "打 印",
+  "guanBi": "关 闭",
+  "faFangFangShi": "发放方式",
+  "qingXuanZeZhiFuFangShi": "请选择支付方式",
+  "qingTianXieWanZhengFeiYongJinE": "请填写完整费用金额",
+  "qingXuanZeDiYiShenHeRen": "请选择第一审核人",
+  "qingXuanZeDiErShenHeRen": "请选择第二审核人",
+  "feiYongJinE": "费用金额",
+  "qingTianXieWanZheng": "请填写完整",
+  "benYeJineheJi": "本页金额合计",
+  "feiYongBaoXiaoDanJuLieBiao": "费用报销单据列表",
+  "cunZaiDaiShenHeHuoYiBoHuiDeDanJu": "存在待审核或已驳回的单据",
+  "qingXuanZeWeiFaFangDeDanJu": "请选择未发放的单据",
+  "qingXuanZeYiFaFangDeDanJu": "请选择已发放的单据",
+  "nianYue": "年月:",
+  "shenHeZhuangTai": "审核状态:",
+  "riBaoNianYue": "日报年月",
+  "weiShenHe": "未审核",
+  "yiShenHe": "已审核",
+  "caiWuShenHeTiShi": "财务审核提示",
+  "ninQueDingYaoShenHeTongGuo": "您确定要审核通过",
+  "yueDeGongShiBaoGaoMa": "月的工时报告吗?",
+  "shenHeChengGong": "审核成功!",
+  "qingJiaShenHe": "请假审核",
+  "chaKanYuanYin": "查看原因",
+  "yiCheHui": "已撤回",
+  "boHuiLeQingJiaShenQing": "驳回了请假申请",
+  "qingJiaDan": "请假单",
+  "shengYuJiaQi": "剩余假期",
+  "queDingYaoCheHuiGaiQingJiaShenQingMa": "确定要撤回该请假申请吗",
+  "gongSiLieBiao": "公司列表",
+  "gongSiMingCheng": "公司名称",
+  "zhuCeShiJian": "注册时间",
+  "lianXiFangShi": "联系方式",
+  "shiFouLianXi": "是否联系",
+  "yiLianXi": "已联系",
+  "weiLianXi": "未联系",
+  "keHuFanKui": "客户反馈",
+  "tianXieFanKui": "填写反馈",
+  "fanKuiJieGuo": "反馈结果",
+  "tiJiao": "提 交",
+  "qingShuRuKeHuFanKui": "请输入客户反馈",
+  "tianXieChengGong": "填写成功",
+  "gongChengZhuanYeLieBiao": "工程专业列表",
+  "qingShuRuZhuanYeMingChengGuanJianZi": "请输入专业名称关键字",
+  "xinZengZhuanYe": "新增专业",
+  "qingShuRuZhuanYeMingCheng": "请输入专业名称",
+  "xiuGaiZhuanYe": "修改专业",
+  "queDingYaoZhuanYe": "确定要专业",
+  "shanChuZhuanYe": "删除专业",
+  "xiangMu": "项目:",
+  "shenHeRen": "审核人:",
+  "qingXuanZeZhuangTai": "请选择状态",
+  "tiJiaoRen": "提交人",
+  "tiJiaoShiJian": "提交时间",
+  "bianGengQianYuGuGongShi": "变更前预估工时",
+  "renTian": "人天",
+  "yuGuGongShiBianGeng": "预估工时变更",
+  "bianGengHouYuGuGongShi": "变更后预估工时",
+  "bianGengLiYou": "变更理由",
+  "boHuiLiYou": "驳回理由",
+  "qingShuRuBoHuiLiYou": "请输入驳回理由",
+  "quXiaoBoHui": "取消驳回",
+  "daoChuNeiRon": "导出内容",
+  "gongShiHeChengBen": "工时和成本",
+  "jingGongShi": "仅工时",
+  "jingChenBen": "仅成本",
+  "gongHhiZhanbiXmu": "含项目工时占比",
+  "hanZhuXiangMu": "含主项目",
+  "chenBenTongJi": "成本统计",
+  "liMian": "里面",
+  "waiMian": "外面",
+  "riQiQuJian": "日期区间:",
+  "gongShiChengBen": "工时成本",
+  "gongShiHeJi": "工时合计",
+  "feiYongBaoXiaoChengBen": "费用报销成本",
+  "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",
+  "tiaoZhengBuMen": "调整部门",
+  "xiuZhengGongShiSuoShuBuMen": "修正工时所属部门",
+  "piLiangQiYongYuanGong": "批量启用员工",
+  "xiuZhengGongShi": "修正工时",
+  "quanBuGongShi": "全部工时",
+  "buFenGongShi": "部分工时",
+  "tuiSongZhiSap": "推送至SAP",
+  "keTianBaoBuMen": "可填报部门",
+  "shenHeCengJi": "审核层级",
+  "liangCengShenHe": "两层审核",
+  "yiCengShenHe": "一层审核",
+  "weiSheZhiShiYouSuoShuBuMenFuZeRenShenHe": "未设置时由所属部门负责人审核",
+  "liZhiRiQi": "离职日期",
+  "queDingShanChuGaiYuanGongMa": "确定删除该员工吗?",
+  "jiangGaiYuanGongDeGongShiShuJuCanYuDeXiangMuYuRenWuZhuanYiZhi": "将该员工的工时数据、参与的项目与任务转移 至",
+  "renYuanSuoZaiBuMenYuDingDingTongXunLuBaoChiYiZhi": "人员所在部门与钉钉通讯录保持一致",
+  "tongBuRiZhi": "同步日志",
+  "caoZuoShiJian": "操作时间",
+  "cuoWuXinXi": "错误信息",
+  "tongBuQianQingLianXiQiYeWeiXinGuanLiYuanJianChaYingYongShouQuanDeKeJianFanWei": "同步前请联系企业微信管理员检查应用授权的可见范围",
+  "luJingGuanLiQiYeYingYongGuanLiGongShiGuanJiaKeJianFanWei": "路径:管理企业-应用管理-工时管家-可见范围",
+  "keJianFanWeiSheZhi": "可见范围设置",
+  "zhuanYiDao": "转移到",
+  "shiFouShanChuGaiJiLu": "是否删除该记录?",
+  "keZhuanRang": "可转让",
+  "qingXuanZeJieShouRen": "请选择接收人",
+  "tongBuZhong": "同步中",
+  "dangQianYuanGongYouDaiShenHeRiBaoQueRenTingYongBingBoHuiRiBaoMa": "当前员工有待审核日报,确认停用并驳回日报吗?",
+  "yiQuXiao": "已取消",
+  "gaiYuanGong": "该员工",
+  "queDingYaoShanChuGaiBuMenMa": "确定要删除该部门吗?",
+  "tiaoYongRenShenFenBuFuHe": "调用人身份不符合",
+  "yingYongXinXiHuoQuShiBai": "应用信息获取失败",
+  "yingYongLeiXingBuFuHeYaoQiu": "应用类型不符合要求",
+  "qiTaCuoWu": "其它错误",
+  "caoZuoChengGong": "操作成功:",
+  "caoZuoChengGong-0": "操作成功!",
+  "dangQianBuMenCunZaiDaiShenHeBaoGao": "当前部门存在待审核报告",
+  "dangQianBuMenCunZaiDaiShenHeBaoGaoShiFouQuanBuZhuanWeiTongGuo": "当前部门存在待审核报告, 是否全部转为通过?",
+  "tuiSongGongShi": "推送工时",
+  "gongShiTuiSongRiZhi": "工时推送日志",
+  "riBaoShenHeXiuGai": "日报审核修改",
+  "fuWu": "服务",
+  "jiaZaiGengDuoRiBao": "加载更多日报",
+  "tuiSongShiJian": "推送时间",
+  "tTuisongshijian": "$t('tuiSongShiJian')",
+  "tuiSongMingCheng": "推送名称",
+  "tuiSongFangShi": "推送方式",
+  "tuiSongJieGuo": "推送结果",
+  "shiBai": "失败",
+  "zhiNengTianBao": "智能填报",
+  "tianBaoBuMen": "填报部门",
+  "jiaoSeXuanZe": "角色选择",
+  "qingXuanZeFuWu": "请选择服务",
+  "tuPianShangChuan": "图片上传",
+  "heJiGongShi": "合计工时",
+  "buKeChaoQianTianBao": "不可超前填报",
+  "zhengZaiWei": "*正在为",
+  "daiTian": "代填",
+  "renWuLiChengBei": "任务 / 里程碑",
+  "daoChuFangShi": "导出方式",
+  "wanZhengDaoChu": "完整导出",
+  "jingJianDaoChu": "精简导出",
+  "jingJianRiBaoBuHanGongZuoShiXiangHeShenPiXinXiShuJuLiangGengXiaoDaoChuGengKuai": "精简日报不含工作事项和审批信息,数据量更小导出更快。",
+  "daoChuRiBaoShenHeJiLuShuJu": "导出日报审核记录数据",
+  "daoRuRiBaoShenHeJiLuXiuGaiShuJu": "导入日报审核记录修改数据",
+  "yiBoHuiLouTian": "已驳回/漏填",
+  "weiTiJiao": "未提交",
+  "weiTiJiaoRenYuanLieBiao": "未提交人员列表",
+  "gongShiYiChangMingXi": "工时异常明细",
+  "shiFouYiChang": "是否异常",
+  "bianGengTiXing": "变更提醒",
+  "tianBaoGongShi": "填报工时",
+  "kaoQinGongShi": "考勤工时",
+  "cuiBan": "催办",
+  "quXiaoYiChang": "取消异常",
+  "xiuGaiDaoRuJiLu": "修改导入记录",
+  "xiaZaiTianBaoGongShiZhanBiBiao": "下载填报工时占比表",
+  "daoRuKaoQinShiChang": "导入考勤时长",
+  "piLiangShanChuRiBao": "批量删除日报",
+  "piLiangShenHeRiBao": "批量审核日报",
+  "qingXuanZeYuanGong": "请选择员工",
+  "kaiShiShanChu": "开始删除",
+  "shenPiTongGuo": "审批通过",
+  "xuanZeDaoRuRenYuan": "选择导入人员:",
+  "queRen": "确认",
+  "daoChuYuanGongTianBaoGongShiZhanBi": "导出员工填报工时占比",
+  "qingXuanZeNianYue": "请选择年月:",
+  "ninQueDingYaoShanChuGaiTiaoJiLuMa": "您确定要删除该条记录吗?",
+  "qingXuanZeRiQiFanWei": "请选择日期范围",
+  "ninQueDingYaoShenHeTongGuoGaiShiJianDuanNeiQuanBuDeRiBaoMa": "您确定要审核通过该时间段内全部的日报吗?",
+  "qingXuanZeBuMenHuoRenYuan": "请选择部门或人员",
+  "ninQueDingYaoShanChuGaiShiJianDuanNeiDeRiBaoMaShanChuHouJiangBuKeHuiFu": "您确定要删除该时间段内的日报吗,删除后将不可恢复",
+  "zuiJinXuanZeXiangMu": "最近选择项目",
+  "daoRuKaoQinShiChangChengGong": "导入考勤时长成功",
+  "chengGongDaoRu": "成功导入",
+  "queRenTuiSongDangQianGongShi": "确认推送当前工时?",
+  "queRenTuiSong": "确认推送",
+  "deGongShi": "的工时?",
+  "zhengZaiTuiSongZhongQingNaiXinDengDai": "正在推送中,请耐心等待。",
+  "yueDeGongShi": "月的工时?",
+  "tuiSongChengGong": "推送成功!",
+  "meiCiJinZhiChiDaiTianYiGeRen": "每次仅支持代填一个人",
+  "qingXuanZeDaiTianDeYuanGong": "请选择代填的员工",
+  "meiYouGengDuoShuJuLe": "没有更多数据了",
+  "zhengZaiDaoRuXiuGaiZhongQingNaiXinDengDai": "正在导入修改中,请耐心等待。",
+  "daiShenHeZhuangTaiBuKeXiuGaiQingFanHuiDaoChaKanRiBaoZhongXianCheHui": "待审核状态不可修改,请返回到查看日报中先撤回",
+  "yiTongGuoZhuangTaiBuKeXiuGai": "已通过状态不可修改",
+  "renWuFenZuHeJieDuanBiTianQingJianCha": "任务分组和阶段必填,请检查",
+  "renWuFenZuBiTianQingJianCha": "任务分组必填,请检查",
+  "ziXiangMuBiTianQingJianCha": "子项目必填,请检查",
+  "huLveBingTiJiao": "忽略并提交",
+  "qingTianXieRenWuFenZu": "请填写任务分组",
+  "kaiShiRiQiBuNengDaYuJieShuRiQi": "开始日期不能大于结束日期",
+  "dangRiGongShiBuZu": "当日工时不足",
+  "xiaoShiShiFouQueDingTiJiao": "小时,是否确定提交?",
+  "jiaoSeBiTianQingJianCha": "角色必填,请检查",
+  "gongZuoZhiZeBiTianQingJianCha": "工作职责必填,请检查",
+  "gongZuoNeiRongBiTianQingJianCha": "工作内容必填,请检查",
+  "qingXuanZeRenWuLiChengBei": "请选择 任务/里程碑",
+  "xiangMuXiaDeRenWuFenZu": "项目下的任务分组",
+  "zhongDe": "中的",
+  "shenHeLiuCheng": "审核流程:",
+  "fenZu": "分组",
+  "shiJianXiaoShi": "时间(小时)",
+  "daiShen": "待审",
+  "juJue": "拒绝",
+  "qingShuRuZhouZongJie": "请输入周总结",
+  "zanCun": "暂 存",
+  "tianXieGongShiHeJiFei": "填写工时合计非",
+  "zanCunShiBai": "暂存失败:",
+  "tiJiaoShiBai": "提交失败:",
+  "fenZuWeiSheZhiShenPiRenQingLianXiGaiXiangMuGuanLiRenYuan": "分组未设置审批人,请联系该项目管理人员",
+  "fenZuWeiSheZhiQingLianXiGaiXiangMuGuanLiRenYuan": "分组未设置,请联系该项目管理人员",
+  "feiChangBaoQianNiFangWenDeYeMianBuCunZai": "非常抱歉你访问的页面不存在!!!",
+  "fanHuiShouYe": "返回首页",
+  "ninHaoNinGouMaiDeBanBenYiDaoQi": "您好,您购买的版本已到期!",
+  "qingYongQiYeWeiXinSaoMaTianJiaKeFu": "请用企业微信扫码添加客服",
+  "jiChuBan": "基础版",
+  "zhuanYeBan": "专业版",
+  "qiJianBan": "旗舰版",
+  "jianZhuGongChengBan": "建筑工程版",
+  "zunJingDeYongHuNinGouMaiDeBanBen": "尊敬的用户! 您购买的版本",
+  "ruoXuJiXuShiYongQingQianWangQiYeWeiXinYingYongShiChangXuFeiGeiGuiGongSiDaiLaiBuBianJingQingLiangJie": "若需继续使用请前往企业微信应用市场续费,给贵公司带来不便,敬请谅解!",
+  "yiDaoQi": "已到期",
+  "bangZhuZhongXin": "帮助中心",
+  "saoMaTianJiaQiYeWeiXinKeFu": "扫码添加企业微信客服",
+  "dianJiChaKanCaoZuoShouCe": "点击查看操作手册",
+  "xiuGaiGongSiMingCheng": "修改公司名称",
+  "wanShanGongHao": "完善工号",
+  "wanShanXingMing": "完善姓名",
+  "qingShuRuGongSiMingCheng": "请输入公司名称",
+  "changDuWei_120GeZiFu": "长度为1-20个字符",
+  "qingShuRuGongHao": "请输入工号",
+  "shi": "时",
+  "fen": "分",
+  "miao": "秒",
+  "banBenGuoDiQingShengJi": "版本过低请升级",
+  "huo": "或",
+  "qiYeWeiXinSaoMaDengLu": "企业微信扫码登陆",
+  "zhengZaiJinRuXiTong": "正在进入系统...",
+  "wuQuanFangWenQingLianXiGuanLiYuanWeiNinFenPeiQuanXian": "无权访问,请联系管理员为您分配权限",
+  "shenPi": "审批",
+  "muQianZanWuXiaoXi": "目前暂无消息",
+  "jingGao": "警告",
+  "baoYang": "保养",
+  "zhuCe": "注册",
+  "gongSiMing": "公司名",
+  "yanZhengMa": "验证码",
+  "faSongYanZhengMa": "发送验证码",
+  "sheZhiMiMaChangDuBuDiYu_6Wei": "设置密码,长度不低于6位",
+  "zhongFuMiMa": "重复密码",
+  "xuanZeBanBen": "选择版本:",
+  "gongShiTongJiJiChuBan": "工时统计基础版",
+  "xiangMuGuanLiZhuanYeBan": "项目管理专业版",
+  "qiYeBanGongQiJianBan": "企业办公旗舰版",
+  "gongChengGuanLiZhuanYeBan": "工程管理专业版",
+  "qingShuRuGongSiMing": "请输入公司名",
+  "qingShuRuYanZhengMa": "请输入验证码",
+  "qingSheZhiMiMaChangDuBuDiYu_6Wei": "请设置密码,长度不低于6位",
+  "qingZhongFuShuRuMiMa": "请重复输入密码",
+  "shouJiHaoMaGeShiBuZhengQue": "手机号码格式不正确",
+  "faSongChengGong": "发送成功",
+  "miMaChangDuBuNengShaoYu_6Wei": "密码长度不能少于6位",
+  "liangCiShuRuDeMiMaBuYiZhi": "两次输入的密码不一致",
+  "zhuCeChengGong": "注册成功",
+  "suoShuRenWuFenZu": "所属任务分组",
+  "suoShuRenWuLieBiao": "所属任务列表",
+  "qianZhiRenWu": "前置任务",
+  "xiangMuFuWu": "项目服务",
+  "qingXuanZeXiangMuFuWu": "请选择项目服务",
+  "qingXuanZeSuoShuXiangMu": "请选择所属项目",
+  "qingXuanZeSuoShuRenWuFenZu": "请选择所属任务分组",
+  "qingXuanZeSuoShuRenWuLieBiao": "请选择所属任务列表",
+  "tongYiGeZhiHangRenFuWuBuNengXiangTong": "同一个执行人,服务不能相同",
+  "piLiangXiuGaiXiangMuJieDuan": "批量修改项目阶段",
+  "buShuYuNingDeQuanXianNei": "不属于您的权限内",
+  "piLiangCaoZuo": "批量操作"
 }
 }

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

@@ -3,8 +3,8 @@
         <div class="page-img">
         <div class="page-img">
             <img src="../assets/image/404.png" />
             <img src="../assets/image/404.png" />
         </div>
         </div>
-        <p class="page-container"><b>Error</b> 非常抱歉你访问的页面不存在!!!</p>        <div class="page-button">
-            <el-button type="primary" round @click="back" icon="el-icon-s-promotion">返回首页</el-button>
+        <p class="page-container"><b>Error</b> {{ $t('feiChangBaoQianNiFangWenDeYeMianBuCunZai') }}</p>        <div class="page-button">
+            <el-button type="primary" round @click="back" icon="el-icon-s-promotion">{{ $t('fanHuiShouYe') }}</el-button>
         </div>
         </div>
     </div>
     </div>
 </template>
 </template>

+ 6 - 7
fhKeeper/formulahousekeeper/timesheet/src/views/Expire.vue

@@ -3,17 +3,16 @@
         <div class="expire_par">
         <div class="expire_par">
             <div class="expire_container">
             <div class="expire_container">
                 <img class="expire_logo" src="../assets/image/login_logo.png" />
                 <img class="expire_logo" src="../assets/image/login_logo.png" />
-                <p class="expire_title">工时管家</p>
-                <p class="expire_tips">您好,您购买的版本已到期!</p>
+                <p class="expire_title">{{ $t('workingHoursHousekeeper') }}</p>
+                <p class="expire_tips">{{ $t('ninHaoNinGouMaiDeBanBenYiDaoQi') }}</p>
                 <p class="expire_text">
                 <p class="expire_text">
-                    尊敬的用户! 您购买的版本[{{versionList[versionId]}}] 已到期(到期日期{{expDate}})
-                    ,若需继续使用请前往企业微信应用市场续费,给贵公司带来不便,敬请谅解!
+                    {{ $t('zunJingDeYongHuNinGouMaiDeBanBen') }} [{{versionList[versionId]}}] {{ $t('yiDaoQi') }}({{ $t('time.dueDate') }}{{expDate}})
+                    ,{{ $t('ruoXuJiXuShiYongQingQianWangQiYeWeiXinYingYongShiChangXuFeiGeiGuiGongSiDaiLaiBuBianJingQingLiangJie') }} 
                 </p>
                 </p>
                 <!-- <p class="expire_kf">联系客服</p> -->
                 <!-- <p class="expire_kf">联系客服</p> -->
                 <div class="expire_service">
                 <div class="expire_service">
                     <p style="color: #333">
                     <p style="color: #333">
-                        请用企业微信扫码添加客服
-                    </p>
+                        {{ $t('qingYongQiYeWeiXinSaoMaTianJiaKeFu') }} </p>
                     <img src="../assets/image/qwcode.png" />
                     <img src="../assets/image/qwcode.png" />
                     <p>
                     <p>
                         <span style="color: #333">QQ:</span
                         <span style="color: #333">QQ:</span
@@ -30,7 +29,7 @@ export default {
     data() {
     data() {
         return {
         return {
           versionId: 0,
           versionId: 0,
-          versionList: ['verson','基础版','专业版','旗舰版','建筑工程版'],
+          versionList: ['verson',this.$t('jiChuBan'),this.$t('zhuanYeBan'),this.$t('qiJianBan'),this.$t('jianZhuGongChengBan')],
           expDate: 'date',
           expDate: 'date',
         };
         };
     },
     },

+ 9 - 9
fhKeeper/formulahousekeeper/timesheet/src/views/Login.vue

@@ -17,7 +17,7 @@
                         <el-button type="primary" style="width:100%;" @click.native.prevent="handleSubmit" :loading="logining">{{ $t('login') }}</el-button>
                         <el-button type="primary" style="width:100%;" @click.native.prevent="handleSubmit" :loading="logining">{{ $t('login') }}</el-button>
                     </el-form-item>
                     </el-form-item>
                     <div class="additional" v-if="wxHrefFlg">
                     <div class="additional" v-if="wxHrefFlg">
-                        <el-divider content-position="center"></el-divider>
+                        <el-divider content-position="center">{{ $t('huo') }}</el-divider>
                     </div>
                     </div>
                     <div class="externalLanding" v-if="wxHrefFlg">
                     <div class="externalLanding" v-if="wxHrefFlg">
                         <div class="externalLanding_img" @click="wxworkCli()">
                         <div class="externalLanding_img" @click="wxworkCli()">
@@ -51,7 +51,7 @@
                             target="_blank">工时管家使用说明_普通员工.docx</a></p> -->
                             target="_blank">工时管家使用说明_普通员工.docx</a></p> -->
                 
                 
             </el-dialog>
             </el-dialog>
-            <el-dialog title="企业微信扫码登陆" :visible.sync="wxworkFlg" width="500px">
+            <el-dialog :title="$t('qiYeWeiXinSaoMaDengLu')" :visible.sync="wxworkFlg" width="500px">
                 <div>
                 <div>
                     <div id="wxcode"></div>
                     <div id="wxcode"></div>
                 </div>
                 </div>
@@ -59,7 +59,7 @@
         </div>
         </div>
         <!-- 绑定企业微信的话显示这个 -->
         <!-- 绑定企业微信的话显示这个 -->
         <div class="qiweix" v-if="bindingqywx">
         <div class="qiweix" v-if="bindingqywx">
-            正在进入系统...
+            {{ $t('zhengZaiJinRuXiTong') }} 
         </div>
         </div>
     </div>
     </div>
 </template>
 </template>
@@ -156,7 +156,7 @@
                                 this.$router.push({ path: user.moduleList[0].path })
                                 this.$router.push({ path: user.moduleList[0].path })
                             } else {
                             } else {
                                 //没有授权任何模块,需要提示用户
                                 //没有授权任何模块,需要提示用户
-                                alert('无权访问,请联系管理员为您分配权限');
+                                alert(this.$t('wuQuanFangWenQingLianXiGuanLiYuanWeiNinFenPeiQuanXian'));
                             }
                             }
                         }
                         }
                     } else if (href.indexOf('errorMsg=') > 0) {
                     } else if (href.indexOf('errorMsg=') > 0) {
@@ -194,7 +194,7 @@
                             this.$router.push({ path: user.moduleList[0].path })
                             this.$router.push({ path: user.moduleList[0].path })
                         } else {
                         } else {
                             //没有授权任何模块,需要提示用户
                             //没有授权任何模块,需要提示用户
-                            alert('无权访问,请联系管理员为您分配权限');
+                            alert(this.$t('wuQuanFangWenQingLianXiGuanLiYuanWeiNinFenPeiQuanXian'));
                         }
                         }
                     }
                     }
                 } else {
                 } else {
@@ -408,7 +408,7 @@
                                     }
                                     }
                                 } else {
                                 } else {
                                     //没有授权任何模块,需要提示用户
                                     //没有授权任何模块,需要提示用户
-                                    alert('无权访问,请联系管理员为您分配权限');
+                                    alert(this.$t('wuQuanFangWenQingLianXiGuanLiYuanWeiNinFenPeiQuanXian'));
                                 }
                                 }
                             } else {
                             } else {
                                 this.$message({
                                 this.$message({
@@ -437,7 +437,7 @@
                                     this.$router.push({ path: user.moduleList[0].path })
                                     this.$router.push({ path: user.moduleList[0].path })
                                 }else {
                                 }else {
                                     //没有授权任何模块,需要提示用户
                                     //没有授权任何模块,需要提示用户
-                                    alert('无权访问,请联系管理员为您分配权限');
+                                    alert(this.$t('wuQuanFangWenQingLianXiGuanLiYuanWeiNinFenPeiQuanXian'));
                                 }
                                 }
                             } else {
                             } else {
                                 this.$message({
                                 this.$message({
@@ -544,7 +544,7 @@
                                 sessionStorage.setItem('autoRoute',user.moduleList[0].path)
                                 sessionStorage.setItem('autoRoute',user.moduleList[0].path)
                             } else {
                             } else {
                                 //没有授权任何模块,需要提示用户
                                 //没有授权任何模块,需要提示用户
-                                alert('无权访问,请联系管理员为您分配权限');
+                                alert(this.$t('wuQuanFangWenQingLianXiGuanLiYuanWeiNinFenPeiQuanXian'));
                             }
                             }
                         }
                         }
                     } else {
                     } else {
@@ -576,7 +576,7 @@
                             this.$router.push({ path: user.moduleList[0].path })
                             this.$router.push({ path: user.moduleList[0].path })
                         } else {
                         } else {
                             //没有授权任何模块,需要提示用户
                             //没有授权任何模块,需要提示用户
-                            alert('无权访问,请联系管理员为您分配权限');
+                            alert(this.$t('wuQuanFangWenQingLianXiGuanLiYuanWeiNinFenPeiQuanXian'));
                         }
                         }
                     } else {
                     } else {
                         this.$message({
                         this.$message({

+ 23 - 23
fhKeeper/formulahousekeeper/timesheet/src/views/Register.vue

@@ -5,40 +5,40 @@
                 <!-- <div class="login-logo">
                 <!-- <div class="login-logo">
                     <img src="../assets/image/login_logo.png" style="width:80px;height:80px;"/>
                     <img src="../assets/image/login_logo.png" style="width:80px;height:80px;"/>
                 </div> -->
                 </div> -->
-                <h3 class="title">注册</h3>
+                <h3 class="title">{{ $t('zhuCe') }}</h3>
                 <el-form-item class="login-input" prop="companyName">
                 <el-form-item class="login-input" prop="companyName">
-                    <el-input type="text" v-model="ruleForm.companyName" autocomplete="off" placeholder="公司名" clearable prefix-icon="el-icon-s-home"></el-input>
+                    <el-input type="text" v-model="ruleForm.companyName" autocomplete="off" :placeholder="$t('gongSiMing')" clearable prefix-icon="el-icon-s-home"></el-input>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item class="login-input" prop="name">
                 <el-form-item class="login-input" prop="name">
-                    <el-input type="text" v-model="ruleForm.name" autocomplete="off" placeholder="姓名" clearable prefix-icon="el-icon-user-solid"></el-input>
+                    <el-input type="text" v-model="ruleForm.name" autocomplete="off" :placeholder="$t('lable.name')" clearable prefix-icon="el-icon-user-solid"></el-input>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item class="login-input" prop="phone">
                 <el-form-item class="login-input" prop="phone">
-                    <el-input type="text" v-model="ruleForm.phone" autocomplete="off" placeholder="手机号" clearable prefix-icon="el-icon-mobile-phone"></el-input>
+                    <el-input type="text" v-model="ruleForm.phone" autocomplete="off" :placeholder="$t('lable.phone')" clearable prefix-icon="el-icon-mobile-phone"></el-input>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item class="login-input" prop="vcode">
                 <el-form-item class="login-input" prop="vcode">
-                    <el-input type="text" v-model="ruleForm.vcode" autocomplete="off" placeholder="验证码" @keyup.enter.native="sendVcode()" clearable prefix-icon="iconfont firerock-iconyanzhengma">
-                        <el-button slot="append" @click="sendVcode" :disabled="ruleForm.phone=='' || showTimer">发送验证码<span v-if="showTimer">({{countNum}})</span></el-button>
+                    <el-input type="text" v-model="ruleForm.vcode" autocomplete="off" :placeholder="$t('yanZhengMa')" @keyup.enter.native="sendVcode()" clearable prefix-icon="iconfont firerock-iconyanzhengma">
+                        <el-button slot="append" @click="sendVcode" :disabled="ruleForm.phone=='' || showTimer">{{ $t('faSongYanZhengMa') }}<span v-if="showTimer">({{countNum}})</span></el-button>
                     </el-input>
                     </el-input>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item class="login-input" prop="password">
                 <el-form-item class="login-input" prop="password">
-                    <el-input type="password" v-model="ruleForm.password" autocomplete="off" placeholder="设置密码,长度不低于6位" clearable prefix-icon="iconfont firerock-iconmima">
+                    <el-input type="password" v-model="ruleForm.password" autocomplete="off" :placeholder="$t('sheZhiMiMaChangDuBuDiYu_6Wei')" clearable prefix-icon="iconfont firerock-iconmima">
                     </el-input>
                     </el-input>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item class="login-input" prop="repwd">
                 <el-form-item class="login-input" prop="repwd">
-                    <el-input type="password" v-model="ruleForm.repwd" autocomplete="off" placeholder="重复密码" clearable prefix-icon="iconfont firerock-iconmima">
+                    <el-input type="password" v-model="ruleForm.repwd" autocomplete="off" :placeholder="$t('zhongFuMiMa')" clearable prefix-icon="iconfont firerock-iconmima">
                     </el-input>
                     </el-input>
                 </el-form-item>
                 </el-form-item>
                 
                 
                 <el-form-item class="login-input" prop="type" style="text-align:center;">
                 <el-form-item class="login-input" prop="type" style="text-align:center;">
                     <el-divider ></el-divider>
                     <el-divider ></el-divider>
                     <div style="margin-top:10px;">
                     <div style="margin-top:10px;">
-                    <span>选择版本: </span><el-select v-model="ruleForm.type" style="width:250px;">
+                    <span>{{ $t('xuanZeBanBen') }} </span><el-select v-model="ruleForm.type" style="width:250px;">
                         <el-option v-for="item in typeList" :value="item.id" :label="item.name" :key="item.id"></el-option>
                         <el-option v-for="item in typeList" :value="item.id" :label="item.name" :key="item.id"></el-option>
                     </el-select>
                     </el-select>
                     </div>
                     </div>
                 </el-form-item>
                 </el-form-item>
                 <div class="login-button" style="width:100%;margin-top:20px;">
                 <div class="login-button" style="width:100%;margin-top:20px;">
-                    <el-button type="primary" style="width:100%;" @click.native.prevent="handleSubmit" :loading="logining">注册</el-button>
+                    <el-button type="primary" style="width:100%;" @click.native.prevent="handleSubmit" :loading="logining">{{ $t('zhuCe') }}</el-button>
                 </div>
                 </div>
             </el-form>
             </el-form>
         </div>
         </div>
@@ -49,8 +49,8 @@
     export default {
     export default {
         data() {
         data() {
             return {
             return {
-                typeList:[{id:1,name:'工时统计基础版'},
-                {id:2,name:'项目管理专业版'},{id:3,name:'企业办公旗舰版'},{id:4,name:'工程管理专业版'}],
+                typeList:[{id:1,name:this.$t('gongShiTongJiJiChuBan')},
+                {id:2,name:this.$t('xiangMuGuanLiZhuanYeBan')},{id:3,name:this.$t('qiYeBanGongQiJianBan')},{id:4,name:this.$t('gongChengGuanLiZhuanYeBan')}],
                 logining: false,
                 logining: false,
                 showTimer: false,
                 showTimer: false,
                 countNum: 60,
                 countNum: 60,
@@ -62,12 +62,12 @@
                     type:2,
                     type:2,
                 },
                 },
                 rules: {
                 rules: {
-                    companyName: [{ required: true, message: '请输入公司名', trigger: 'blur' },],
-                    name: [{ required: true, message: '请输入姓名', trigger: 'blur' },],
-                    phone: [{ required: true, message: '请输入手机号', trigger: 'blur' },],
-                    vcode: [{ required: true, message: '请输入验证码', trigger: 'blur' },],
-                    password: [{ required: true, message: '请设置密码,长度不低于6位', trigger: 'blur' },],
-                    repwd: [{ required: true, message: '请重复输入密码', trigger: 'blur' },]
+                    companyName: [{ required: true, message: this.$t('qingShuRuGongSiMing'), trigger: 'blur' },],
+                    name: [{ required: true, message: this.$t('defaultText.PleaseEnterYourName'), trigger: 'blur' },],
+                    phone: [{ required: true, message: this.$t('defaultText.PleaseEnterYourPhone'), trigger: 'blur' },],
+                    vcode: [{ required: true, message: this.$t('qingShuRuYanZhengMa'), trigger: 'blur' },],
+                    password: [{ required: true, message: this.$t('qingSheZhiMiMaChangDuBuDiYu_6Wei'), trigger: 'blur' },],
+                    repwd: [{ required: true, message: this.$t('qingZhongFuShuRuMiMa'), trigger: 'blur' },]
                 },
                 },
             };
             };
         },
         },
@@ -87,7 +87,7 @@
             sendVcode() {
             sendVcode() {
                 if (this.ruleForm.phone.length != 11) {
                 if (this.ruleForm.phone.length != 11) {
                     this.$message({
                     this.$message({
-                                    message: '手机号码格式不正确',
+                                    message: this.$t('shouJiHaoMaGeShiBuZhengQue'),
                                     type: 'error'
                                     type: 'error'
                                 });
                                 });
                 } else {
                 } else {
@@ -95,7 +95,7 @@
                             this.logining = false;
                             this.logining = false;
                             if (res.code == "ok") {
                             if (res.code == "ok") {
                                 this.$message({
                                 this.$message({
-                                    message: '发送成功',
+                                    message: this.$t('faSongChengGong'),
                                     type: 'success'
                                     type: 'success'
                                 });
                                 });
                                 this.showTimer = true;
                                 this.showTimer = true;
@@ -125,7 +125,7 @@
                     if (valid) {
                     if (valid) {
                         if (this.ruleForm.password.length < 6) {
                         if (this.ruleForm.password.length < 6) {
                             this.$message({
                             this.$message({
-                                    message: '密码长度不能少于6位',
+                                    message: this.$t('miMaChangDuBuNengShaoYu_6Wei'),
                                     type: 'error'
                                     type: 'error'
                                 });
                                 });
                             return;
                             return;
@@ -133,7 +133,7 @@
                         //检查两次密码是否一致
                         //检查两次密码是否一致
                         if (this.ruleForm.password != this.ruleForm.repwd) {
                         if (this.ruleForm.password != this.ruleForm.repwd) {
                             this.$message({
                             this.$message({
-                                    message: '两次输入的密码不一致',
+                                    message: this.$t('liangCiShuRuDeMiMaBuYiZhi'),
                                     type: 'error'
                                     type: 'error'
                                 });
                                 });
                             return;
                             return;
@@ -151,7 +151,7 @@
                             this.logining = false;
                             this.logining = false;
                             if (res.code == "ok") {
                             if (res.code == "ok") {
                                 this.$message({
                                 this.$message({
-                                    message: '注册成功',
+                                    message: this.$t('zhuCeChengGong'),
                                     type: 'success'
                                     type: 'success'
                                 });
                                 });
                                 this.$router.push({ path: '/login' });
                                 this.$router.push({ path: '/login' });

+ 17 - 17
fhKeeper/formulahousekeeper/timesheet/src/views/awayOffice/awayOffice.vue

@@ -11,7 +11,7 @@
                 </el-menu-item>
                 </el-menu-item>
                 <el-menu-item index="2" @select="bills" @click="auditList()" v-if="permissions.awayOfficeAudit">
                 <el-menu-item index="2" @select="bills" @click="auditList()" v-if="permissions.awayOfficeAudit">
                 <i class="iconfont firerock-iconshenhe"></i>
                 <i class="iconfont firerock-iconshenhe"></i>
-                <span slot="title">出差审核</span>
+                <span slot="title">{{ $t('chu-cha-shen-he') }}</span>
                 </el-menu-item>
                 </el-menu-item>
                 <el-menu-item index="3" @select="bills" @click="bills(false, 2)" >
                 <el-menu-item index="3" @select="bills" @click="bills(false, 2)" >
                 <i class="iconfont firerock-iconbaoxiaodan"></i>
                 <i class="iconfont firerock-iconbaoxiaodan"></i>
@@ -141,16 +141,16 @@
                             <el-input type="textarea" v-model="addform.remark" :rows="3" style="width: 100%" maxlength="100" show-word-limit></el-input>
                             <el-input type="textarea" v-model="addform.remark" :rows="3" style="width: 100%" maxlength="100" show-word-limit></el-input>
                         </el-form-item>
                         </el-form-item>
                         <!--流程显示-->
                         <!--流程显示-->
-                        <el-form-item label="审批流程" style="width: 100%;color:#606266" >
+                        <el-form-item :label="$t('other.approvalProcess')" style="width: 100%;color:#606266" >
                         <span v-for="(item, index) in curWorkflowList" :key="item.id" >
                         <span v-for="(item, index) in curWorkflowList" :key="item.id" >
                             <span v-if="index>0"><i class="el-icon-right"></i></span>
                             <span v-if="index>0"><i class="el-icon-right"></i></span>
                             <span><i class="el-icon-s-custom"></i></span>
                             <span><i class="el-icon-s-custom"></i></span>
                             <span v-if="user.userNameNeedTranslate == 1">
                             <span v-if="user.userNameNeedTranslate == 1">
-                            <span v-if="item.auditorType == 1"><TranslationOpenDataText type='departmentName' :openid='item.auditDeptName' ></TranslationOpenDataText>(主要负责人)</span>
+                            <span v-if="item.auditorType == 1"><TranslationOpenDataText type='departmentName' :openid='item.auditDeptName' ></TranslationOpenDataText>{{ $t('zhu-yao-fu-ze-ren') }}</span>
                             <TranslationOpenDataText type='userName' :openid='item.userName' v-if="item.auditorType == 2"></TranslationOpenDataText>
                             <TranslationOpenDataText type='userName' :openid='item.userName' v-if="item.auditorType == 2"></TranslationOpenDataText>
                             </span>
                             </span>
                             <span v-if="user.userNameNeedTranslate == 0">
                             <span v-if="user.userNameNeedTranslate == 0">
-                            {{item.auditorType == 1?(item.auditDeptName+'(主要负责人)'):item.userName}}
+                            {{item.auditorType == 1?(item.auditDeptName+$t('zhu-yao-fu-ze-ren')):item.userName}}
                             </span>
                             </span>
                         </span>
                         </span>
                         </el-form-item>
                         </el-form-item>
@@ -295,9 +295,9 @@
                             <el-button icon="el-icon-close" circle size="mini"  @click.stop.native="deny(scope.row)"></el-button>
                             <el-button icon="el-icon-close" circle size="mini"  @click.stop.native="deny(scope.row)"></el-button>
                         </div>
                         </div>
                         <div v-if="!isAuditList && ((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.awayOfficeAll)">
                         <div v-if="!isAuditList && ((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.awayOfficeAll)">
-                            <el-button size="mini" v-if="scope.row.status == 3 ||scope.row.status == 2" @click.stop.native="deletes(scope.row)" >删除</el-button>
-                            <el-button size="mini" v-if="scope.row.status == 1" @click.stop.native="cancel(scope.row)">撤回</el-button>
-                            <el-button size="mini" v-if="scope.row.status == 3 ||scope.row.status == 2 " type="primary" @click.stop.native="editor(scope.row)">重新提交</el-button>
+                            <el-button size="mini" v-if="scope.row.status == 3 ||scope.row.status == 2" @click.stop.native="deletes(scope.row)" >{{ $t('btn.delete') }}</el-button>
+                            <el-button size="mini" v-if="scope.row.status == 1" @click.stop.native="cancel(scope.row)">{{ $t('btn.withdraw') }}</el-button>
+                            <el-button size="mini" v-if="scope.row.status == 3 ||scope.row.status == 2 " type="primary" @click.stop.native="editor(scope.row)">{{ $t('zhong-xin-ti-jiao') }}</el-button>
                         </div>
                         </div>
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
@@ -735,8 +735,8 @@
                 <el-timeline-item v-for="item in auditLogList" :key="item.id" :timestamp="item.indate">
                 <el-timeline-item v-for="item in auditLogList" :key="item.id" :timestamp="item.indate">
                   <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.auditorName'></TranslationOpenDataText> </span>
                   <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.auditorName'></TranslationOpenDataText> </span>
                   <span v-if="user.userNameNeedTranslate == 0">{{item.auditorName}}</span>
                   <span v-if="user.userNameNeedTranslate == 0">{{item.auditorName}}</span>
-                  <span> {{item.isPass==0?"驳回了请假申请。":"审核通过。"}}</span>
-                  <span v-if="item.isPass == 0">原因:{{item.denyReason}}</span>
+                  <span> {{item.isPass==0?`${$t('bo-hui-le-qing-jia-shen-qing')}`:`${$t('state.approved')}`}}</span>
+                  <span v-if="item.isPass == 0">{{ $t('other.reason') }}:{{item.denyReason}}</span>
                   </el-timeline-item>
                   </el-timeline-item>
             </el-timeline>
             </el-timeline>
         </div>
         </div>
@@ -1503,7 +1503,7 @@ export default {
                 if (res.code == "ok") {
                 if (res.code == "ok") {
                     this.auditList();
                     this.auditList();
                     this.$message({
                     this.$message({
-                        message: '操作成功',
+                        message: this.$t('operationissuccessful'),
                         type: "success"
                         type: "success"
                         });
                         });
                 } else {
                 } else {
@@ -1533,7 +1533,7 @@ export default {
                     this.auditList();
                     this.auditList();
                     this.denyDialogV = false;
                     this.denyDialogV = false;
                     this.$message({
                     this.$message({
-                        message: '操作成功',
+                        message: this.$t('operationissuccessful'),
                         type: "success"
                         type: "success"
                         });
                         });
                 } else {
                 } else {
@@ -1551,7 +1551,7 @@ export default {
             });
             });
         },
         },
         cancel(e) {
         cancel(e) {
-            this.$confirm('确定要撤回该出差申请吗', this.$t('other.prompts'), {
+            this.$confirm(this.$t('que-ding-yao-che-hui-gai-chu-cha-shen-qing-ma'), this.$t('other.prompts'), {
                 //type: 'warning'
                 //type: 'warning'
             }).then(() => {
             }).then(() => {
                 this.http.post('/business-trip/cancel', {id:e.id},
                 this.http.post('/business-trip/cancel', {id:e.id},
@@ -1559,7 +1559,7 @@ export default {
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         this.bills();
                         this.bills();
                         this.$message({
                         this.$message({
-                            message: '操作成功',
+                            message: this.$t('operationissuccessful'),
                             type: "success"
                             type: "success"
                         });
                         });
                     } else {
                     } else {
@@ -1889,7 +1889,7 @@ export default {
                 });
                 });
             } else {
             } else {
                 this.$message({
                 this.$message({
-                    message: '至少选择一个部门或者人员做为审核人',
+                    message: this.$t('zhi-shao-xuan-ze-yi-ge-bu-men-huo-zhe-ren-yuan-zuo-wei-shen-he-ren'),
                     type: "error"
                     type: "error"
                 });
                 });
             }
             }
@@ -1926,12 +1926,12 @@ export default {
               if(!flgUserRadio) {
               if(!flgUserRadio) {
                 if(node.type == 'dep') {
                 if(node.type == 'dep') {
                   this.$message({
                   this.$message({
-                      message: '已存在重复部门',
+                      message: this.$t('yi-cun-zai-zhong-fu-bu-men'),
                       type: "error"
                       type: "error"
                   });
                   });
                 } else {
                 } else {
                   this.$message({
                   this.$message({
-                      message: '已存在重复人员',
+                      message: this.$t('yi-cun-zai-zhong-fu-ren-yuan'),
                       type: "error"
                       type: "error"
                   });
                   });
                 }
                 }
@@ -2018,7 +2018,7 @@ export default {
                 res => {
                 res => {
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         this.projectList = res.data;
                         this.projectList = res.data;
-                        console.log("项目列表",this.projectList);
+                        console.log(this.$t('listofitems'),this.projectList);
                     } else {
                     } else {
                         this.$message({
                         this.$message({
                             message: res.msg,
                             message: res.msg,

+ 3 - 22
fhKeeper/formulahousekeeper/timesheet/src/views/centerManage/centerManage.vue

@@ -1,15 +1,11 @@
 <template>
 <template>
     <section>
     <section>
-        <el-select v-model="value" filterable placeholder="请选择" :filter-method="aabbcc()">
-            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
-            </el-option>
-        </el-select>
         <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
         <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
             <el-form :inline="true">
             <el-form :inline="true">
                 <el-form-item :label="user.timeType.customDegreeName + $t('guan-li')">
                 <el-form-item :label="user.timeType.customDegreeName + $t('guan-li')">
-                    <el-input placeholder="请输入关键名称" v-model.trim="searchNameVal" clearable class="input-with-select"
+                    <el-input :placeholder="$t('qing-shu-ru-guan-jian-ming-cheng')" v-model.trim="searchNameVal" clearable class="input-with-select"
                         style="margin-left: 50px" @keyup.enter.native="searchName()">
                         style="margin-left: 50px" @keyup.enter.native="searchName()">
-                        <el-button slot="append" @click="searchName()">搜索</el-button>
+                        <el-button slot="append" @click="searchName()">{{ $t('sou-suo') }}</el-button>
                     </el-input>
                     </el-input>
                 </el-form-item>
                 </el-form-item>
 
 
@@ -121,22 +117,7 @@ export default {
             subProjectList: [],//子项目列表
             subProjectList: [],//子项目列表
             subProjectListArr: [], // 备用列表
             subProjectListArr: [], // 备用列表
             searchNameVal: '',
             searchNameVal: '',
-            options: [{
-                value: '选项1',
-                label: '黄金糕'
-            }, {
-                value: '选项2',
-                label: '双皮奶'
-            }, {
-                value: '选项3',
-                label: '蚵仔煎'
-            }, {
-                value: '选项4',
-                label: '龙须面'
-            }, {
-                value: '选项5',
-                label: '北京烤鸭'
-            }],
+            options: [],
             value: ''
             value: ''
         };
         };
     },
     },

+ 25 - 25
fhKeeper/formulahousekeeper/timesheet/src/views/contract/index.vue

@@ -46,7 +46,7 @@
           ></el-date-picker>
           ></el-date-picker>
         </el-form-item>
         </el-form-item>
         <el-form-item>
         <el-form-item>
-          <span style="margin-left:5px;margin-right:5px;color:#606266;">下笔回款日期</span>
+          <span style="margin-left:5px;margin-right:5px;color:#606266;">{{ $t('xia-bi-hui-kuan-ri-qi') }}</span>
           <el-date-picker
           <el-date-picker
             style="width:240px;"
             style="width:240px;"
             v-model="paymentDate"
             v-model="paymentDate"
@@ -81,30 +81,30 @@
     <el-table :data="contractList" v-loading="listLoading" :height="tableHeight" border highlight-current-row>
     <el-table :data="contractList" v-loading="listLoading" :height="tableHeight" border highlight-current-row>
       <el-table-column prop="number" :label="$t('contractno')" min-width="190"></el-table-column>
       <el-table-column prop="number" :label="$t('contractno')" min-width="190"></el-table-column>
       <el-table-column prop="name" :label="$t('he-tong-ming-cheng')" min-width="190"></el-table-column>
       <el-table-column prop="name" :label="$t('he-tong-ming-cheng')" min-width="190"></el-table-column>
-      <el-table-column prop="amounts" :label="$t('contractamount')" min-width="130" align="right" header-align="center">
+      <el-table-column prop="amounts" :label="$t('contractamount')" min-width="135" align="right" header-align="center">
         <span slot-scope="scope">¥ {{scope.row.amounts ? scope.row.amounts.toFixed(2) : '0.00'}}</span>
         <span slot-scope="scope">¥ {{scope.row.amounts ? scope.row.amounts.toFixed(2) : '0.00'}}</span>
       </el-table-column>
       </el-table-column>
-      <el-table-column prop="payment" label="已回款金额" min-width="130" align="right" header-align="center">
+      <el-table-column prop="payment" :label="$t('yi-hui-kuan-jin-e')" min-width="140" align="right" header-align="center">
         <span slot-scope="scope">¥ {{scope.row.payment ? scope.row.payment.toFixed(2) : '0.00'}}</span>
         <span slot-scope="scope">¥ {{scope.row.payment ? scope.row.payment.toFixed(2) : '0.00'}}</span>
       </el-table-column>
       </el-table-column>
-      <el-table-column prop="payment" label="已回款进度" min-width="130" align="right" header-align="center">
+      <el-table-column prop="payment" :label="$t('yi-hui-kuan-jin-du')" min-width="170" align="right" header-align="center">
         <span slot-scope="scope">{{scope.row.payment ? (100*scope.row.payment/scope.row.amounts).toFixed(1) + '%': '0%'}}</span>
         <span slot-scope="scope">{{scope.row.payment ? (100*scope.row.payment/scope.row.amounts).toFixed(1) + '%': '0%'}}</span>
       </el-table-column>
       </el-table-column>
-      <el-table-column prop="nextPaymentDate" label="下笔回款日期" min-width="130" align="right" header-align="center">
+      <el-table-column prop="nextPaymentDate" :label="$t('xia-bi-hui-kuan-ri-qi')" min-width="170" align="right" header-align="center">
         <span slot-scope="scope">{{scope.row.nextPaymentDate ? scope.row.nextPaymentDate : '-'}}</span>
         <span slot-scope="scope">{{scope.row.nextPaymentDate ? scope.row.nextPaymentDate : '-'}}</span>
       </el-table-column>
       </el-table-column>
-      <el-table-column prop="nextPaymentAmount" label="下笔回款金额" min-width="130" align="right" header-align="center">
+      <el-table-column prop="nextPaymentAmount" :label="$t('xia-bi-hui-kuan-jin-e')" min-width="120" align="right" header-align="center">
         <span slot-scope="scope">{{scope.row.nextPaymentAmount?'¥'+scope.row.nextPaymentAmount.toFixed(2) : '-'}}</span>
         <span slot-scope="scope">{{scope.row.nextPaymentAmount?'¥'+scope.row.nextPaymentAmount.toFixed(2) : '-'}}</span>
       </el-table-column>
       </el-table-column>
       
       
       <el-table-column prop="typeName" :label="$t('he-tong-lei-xing')" min-width="140" align="center"></el-table-column>
       <el-table-column prop="typeName" :label="$t('he-tong-lei-xing')" min-width="140" align="center"></el-table-column>
-      <el-table-column prop="status" :label="$t('state.states')" min-width="100" align="center">
+      <el-table-column prop="status" :label="$t('state.states')" min-width="120" align="center">
         <template slot-scope="scope">
         <template slot-scope="scope">
           <span :style="statusList[scope.row.status].color">{{statusList[scope.row.status].label}}</span>
           <span :style="statusList[scope.row.status].color">{{statusList[scope.row.status].label}}</span>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
-      <el-table-column prop="indate" :label="$t('creationtime')" min-width="100" align="center"></el-table-column>
-      <el-table-column width="300" :label="$t('operation')" align="left" fixed="right">
+      <el-table-column prop="indate" :label="$t('creationtime')" min-width="130" align="center"></el-table-column>
+      <el-table-column width="340" :label="$t('operation')" align="left" fixed="right">
         <template slot-scope="scope">
         <template slot-scope="scope">
           <el-button v-if="permissions.contractView || permissions.contractManagement" size="mini" @click="lookover(scope.row)">{{$t('cha-kan')}}</el-button>
           <el-button v-if="permissions.contractView || permissions.contractManagement" size="mini" @click="lookover(scope.row)">{{$t('cha-kan')}}</el-button>
           <el-button v-if="permissions.contractManagement" size="mini" @click="editContract(scope.row)" type="primary">{{$t('bian-ji')}}</el-button>
           <el-button v-if="permissions.contractManagement" size="mini" @click="editContract(scope.row)" type="primary">{{$t('bian-ji')}}</el-button>
@@ -131,7 +131,7 @@
         <el-form ref="contractForm" :model="contractForm" :rules="rules" label-width="120px" class="contractForm">
         <el-form ref="contractForm" :model="contractForm" :rules="rules" label-width="120px" class="contractForm">
           <el-form-item :label="$t('contractno')">
           <el-form-item :label="$t('contractno')">
             <el-input v-model="contractForm.number" :disabled="contractForm.status == 0" :maxlength="50" style="width:260px;" show-word-limit :placeholder="$t('peaseenterthe')" clearable @input="searchProject"></el-input>
             <el-input v-model="contractForm.number" :disabled="contractForm.status == 0" :maxlength="50" style="width:260px;" show-word-limit :placeholder="$t('peaseenterthe')" clearable @input="searchProject"></el-input>
-            <span style="margin-left:20px;">关联项目</span>
+            <span style="margin-left:20px;">{{ $t('rselatedprojects') }}</span>
             <el-select v-model="contractForm.projectId" filterable clearable style="width:300px;" :disabled="contractForm.status == 0">
             <el-select v-model="contractForm.projectId" filterable clearable style="width:300px;" :disabled="contractForm.status == 0">
               <el-option v-for="item in projectList" :key="item.id" :label="item.projectName  + '\u3000' + (item.projectCode == null?'':item.projectCode)" :value="item.id" >
               <el-option v-for="item in projectList" :key="item.id" :label="item.projectName  + '\u3000' + (item.projectCode == null?'':item.projectCode)" :value="item.id" >
                     <span style="float: left; color: #8492a6; font-size: 13px;">{{ item.projectCode }}</span>
                     <span style="float: left; color: #8492a6; font-size: 13px;">{{ item.projectCode }}</span>
@@ -176,23 +176,23 @@
           <el-form-item :label="$t('bei-zhu')">
           <el-form-item :label="$t('bei-zhu')">
             <el-input v-model="contractForm.remarks" :disabled="contractForm.status == 0" :placeholder="$t('peaseenterthe')" type="textarea" :rows="3" clearable></el-input>
             <el-input v-model="contractForm.remarks" :disabled="contractForm.status == 0" :placeholder="$t('peaseenterthe')" type="textarea" :rows="3" clearable></el-input>
           </el-form-item>
           </el-form-item>
-          <el-form-item label="回款计划">
+          <el-form-item :label="$t('hui-kuan-ji-hua')">
             <el-table :data="contractPaymentList" size="small" :key="Math.random()" :height="'300px'" show-header="false" style="margin-top:10px;">
             <el-table :data="contractPaymentList" size="small" :key="Math.random()" :height="'300px'" show-header="false" style="margin-top:10px;">
                   <el-table-column prop="isPayed" >
                   <el-table-column prop="isPayed" >
                       <template slot-scope="scope">
                       <template slot-scope="scope">
-                          <el-checkbox v-model="scope.row.isPayed" >已回款</el-checkbox>
+                          <el-checkbox v-model="scope.row.isPayed" >{{ $t('yi-hui-kuan') }}</el-checkbox>
                       </template>
                       </template>
                       <template slot="header" >
                       <template slot="header" >
-                          <span style="font-size:14px;font-weight:normal;">是否已回款</span>
+                          <span style="font-size:14px;font-weight:normal;">{{ $t('shi-fou-yi-hui-kuan') }}</span>
                       </template>
                       </template>
                   </el-table-column>
                   </el-table-column>
-                  <el-table-column prop="payDate"  label="回款日期" width="210">
+                  <el-table-column prop="payDate"  :label="$t('hui-kuan-ri-qi')" width="210">
                       <template slot-scope="scope">
                       <template slot-scope="scope">
                           <div><el-date-picker type="date" v-model="scope.row.payDate" style="width:200px;" :placeholder="$t('optiondate')" value-format="yyyy-MM-dd"></el-date-picker></div>
                           <div><el-date-picker type="date" v-model="scope.row.payDate" style="width:200px;" :placeholder="$t('optiondate')" value-format="yyyy-MM-dd"></el-date-picker></div>
                       </template>
                       </template>
                   </el-table-column>
                   </el-table-column>
                   
                   
-                  <el-table-column prop="amount" label="回款金额">
+                  <el-table-column prop="amount" :label="$t('hui-kuan-jin-e')">
                       <template slot-scope="scope">
                       <template slot-scope="scope">
                         <el-input v-model="scope.row.amount" :id="'payment_amount'+scope.$index" :placeholder="$t('peaseenterthe')" maxlength="10" clearable>
                         <el-input v-model="scope.row.amount" :id="'payment_amount'+scope.$index" :placeholder="$t('peaseenterthe')" maxlength="10" clearable>
                           <span slot="prefix">¥</span>
                           <span slot="prefix">¥</span>
@@ -290,23 +290,23 @@
           <el-form-item style="width:100%" :label="$t('bei-zhu')">
           <el-form-item style="width:100%" :label="$t('bei-zhu')">
             {{contractForm.remarks}}
             {{contractForm.remarks}}
           </el-form-item>
           </el-form-item>
-          <el-form-item style="width:100%" label="回款计划">
+          <el-form-item style="width:100%" :label="$t('hui-kuan-ji-hua')">
             <el-table :data="contractPaymentList" size="small" :key="Math.random()" :height="'300px'" show-header="false" style="margin-top:10px;">
             <el-table :data="contractPaymentList" size="small" :key="Math.random()" :height="'300px'" show-header="false" style="margin-top:10px;">
                   <el-table-column prop="isPayed" >
                   <el-table-column prop="isPayed" >
                       <template slot-scope="scope">
                       <template slot-scope="scope">
-                        {{ scope.row.isPayed?'已回款':'未回款' }}
+                        {{ scope.row.isPayed?$t('yi-hui-kuan'):$t('wei-hui-kuan') }}
                       </template>
                       </template>
                       <template slot="header" >
                       <template slot="header" >
-                          <span style="font-size:14px;font-weight:normal;">是否已回款</span>
+                          <span style="font-size:14px;font-weight:normal;">{{ $t('shi-fou-yi-hui-kuan') }}</span>
                       </template>
                       </template>
                   </el-table-column>
                   </el-table-column>
-                  <el-table-column prop="payDate"  label="回款日期" width="210">
+                  <el-table-column prop="payDate"  :label="$t('hui-kuan-ri-qi')" width="210">
                       <template slot-scope="scope">
                       <template slot-scope="scope">
                           <div>{{ scope.row.payDate }}</div>
                           <div>{{ scope.row.payDate }}</div>
                       </template>
                       </template>
                   </el-table-column>
                   </el-table-column>
                   
                   
-                  <el-table-column prop="amount" label="回款金额">
+                  <el-table-column prop="amount" :label="$t('hui-kuan-jin-e')">
                       <template slot-scope="scope">
                       <template slot-scope="scope">
                         <div>{{ scope.row.amount }}</div>
                         <div>{{ scope.row.amount }}</div>
                       </template>
                       </template>
@@ -650,7 +650,7 @@ export default {
     typeItemAdd(){
     typeItemAdd(){
       if(this.typeList.length == 20){
       if(this.typeList.length == 20){
         this.$message({
         this.$message({
-          message: '合同类型最多只能创建20个',
+          message: this.$t('he-tong-lei-xing-zui-duo-zhi-neng-chuang-jian-20-ge'),
           type: 'error'
           type: 'error'
         })
         })
         return
         return
@@ -823,7 +823,7 @@ export default {
           status: status
           status: status
         }
         }
       }
       }
-      this.$confirm('确认审核通过吗,通过后合同基本信息无法修改', this.$t('other.prompts'), {
+      this.$confirm(this.$t('que-ren-shen-he-tong-guo-ma-tong-guo-hou-he-tong-ji-ben-xin-xi-wu-fa-xiu-gai'), this.$t('other.prompts'), {
         confirmButtonText: this.$t('btn.determine'),
         confirmButtonText: this.$t('btn.determine'),
         cancelButtonText: this.$t('btn.cancel'),
         cancelButtonText: this.$t('btn.cancel'),
         type: 'warning'
         type: 'warning'
@@ -893,14 +893,14 @@ export default {
           for (var i = 0; i < this.contractPaymentList.length; i++) {
           for (var i = 0; i < this.contractPaymentList.length; i++) {
             if (!this.contractPaymentList[i].payDate) {
             if (!this.contractPaymentList[i].payDate) {
               this.$message({
               this.$message({
-                message: '回款日期不能为空',
+                message: this.$t('hui-kuan-ri-qi-bu-neng-wei-kong'),
                 type: 'error'
                 type: 'error'
               })
               })
               return;
               return;
             }
             }
             if (!this.contractPaymentList[i].amount) {
             if (!this.contractPaymentList[i].amount) {
               this.$message({
               this.$message({
-                message: '回款金额不能为0',
+                message: this.$t('hui-kuan-jinebu-neng-wei-0'),
                 type: 'error'
                 type: 'error'
               })
               })
               return;
               return;
@@ -909,7 +909,7 @@ export default {
           }
           }
           if (totalPayment > parseFloat(this.contractForm.amounts)) {
           if (totalPayment > parseFloat(this.contractForm.amounts)) {
             this.$message({
             this.$message({
-                message: '总回款金额不得大于合同金额',
+                message: this.$t('zong-hui-kuan-jinebu-de-da-yu-he-tong-jin-e'),
                 type: 'error'
                 type: 'error'
               })
               })
               return;
               return;

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

@@ -37,18 +37,18 @@
                   <el-menu-item index="1-15" v-if="permissions.reportMonthlyPersonnel || permissions.reportResponsiblePersonnel" @click="ssl(14)"><p>{{ $t('ren-yuan-yue-du-gong-shi-biao') }}</p></el-menu-item>
                   <el-menu-item index="1-15" v-if="permissions.reportMonthlyPersonnel || permissions.reportResponsiblePersonnel" @click="ssl(14)"><p>{{ $t('ren-yuan-yue-du-gong-shi-biao') }}</p></el-menu-item>
                   <el-menu-item index="1-16" v-if="permissions.reportAllDepartmentParticipation || permissions.reportResponsibleDepartmentParticipation" @click="ssl(15)"><p>{{ $t('bumenchanyuqingkuang') }}</p></el-menu-item>
                   <el-menu-item index="1-16" v-if="permissions.reportAllDepartmentParticipation || permissions.reportResponsibleDepartmentParticipation" @click="ssl(15)"><p>{{ $t('bumenchanyuqingkuang') }}</p></el-menu-item>
                   <el-menu-item index="1-17" v-if="permissions.reportPhaseHours || permissions.reportStageWorkingTime" @click="ssl(16)"><p>{{ $t('xiang-mu-ge-fen-zu-yu-jie-duan-gong-shi-biao') }}</p></el-menu-item>
                   <el-menu-item index="1-17" v-if="permissions.reportPhaseHours || permissions.reportStageWorkingTime" @click="ssl(16)"><p>{{ $t('xiang-mu-ge-fen-zu-yu-jie-duan-gong-shi-biao') }}</p></el-menu-item>
-                  <el-menu-item index="1-18" v-if="permissions.reportAllManhourCost || permissions.reportResponsibleManhourCost" @click="ssl(17)"><p>子项目工时成本表</p></el-menu-item>
-                  <el-menu-item index="1-19" v-if="user.timeType.restartTaskNeedReason == 1" @click="ssl(18)"><p>任务重启表</p></el-menu-item>
-                  <el-menu-item index="1-20" v-if="permissions.reportFTEAll || permissions.reportFTEPart" @click="ssl(19)"><p>FTE报表</p></el-menu-item>
-                  <el-menu-item index="1-21" v-if="permissions.reportEfficent"  @click="ssl(20)"><p>有效工时率表</p></el-menu-item>
-                  <el-menu-item index="1-22" v-if="permissions.reportSortScaleTable" @click="ssl(21)"><p>项目分类工时占比表</p></el-menu-item>
-                  <el-menu-item index="1-23" v-if="permissions.reportSortDetailTable || permissions.reportSortSectionDetailTable" @click="ssl(22)"><p>分类工时明细表</p></el-menu-item>
-                  <el-menu-item index="1-24" v-if="permissions.reportStaffProject" @click="ssl(23)"><p>员工项目进度表</p></el-menu-item>
-                  <el-menu-item index="1-25" v-if="permissions.reportProjectConsumptionFirst" @click="ssl(24)"><p>分组耗用进度表</p></el-menu-item>
-                  <el-menu-item index="1-26" v-if="permissions.reportProjectConsumptionTwo" @click="ssl(25)"><p>项目耗用进度表</p></el-menu-item>
-                  <el-menu-item index="1-27" v-if="permissions.reportStaffTaskAccomplished" @click="ssl(26)"><p>员工任务进度表</p></el-menu-item>
-                  <el-menu-item index="1-28" v-if="permissions.reportProjectEstimated" @click="ssl(27)"><p>项目预估工时表</p></el-menu-item>
-                  <el-menu-item index="1-29" v-if="permissions.takCompletedStatus" @click="ssl(28)"><p>员工任务完成情况表</p></el-menu-item>
+                  <el-menu-item index="1-18" v-if="permissions.reportAllManhourCost || permissions.reportResponsibleManhourCost" @click="ssl(17)"><p>{{ $t('ziXiangMuGongShiChengBenBiao') }}</p></el-menu-item>
+                  <el-menu-item index="1-19" v-if="user.timeType.restartTaskNeedReason == 1" @click="ssl(18)"><p>{{ $t('renWuZhongQiBiao') }}</p></el-menu-item>
+                  <el-menu-item index="1-20" v-if="permissions.reportFTEAll || permissions.reportFTEPart" @click="ssl(19)"><p>{{ $t('fteBaoBiao') }}</p></el-menu-item>
+                  <el-menu-item index="1-21" v-if="permissions.reportEfficent"  @click="ssl(20)"><p>{{ $t('youXiaoGongShiShuaiBiao') }}</p></el-menu-item>
+                  <el-menu-item index="1-22" v-if="permissions.reportSortScaleTable" @click="ssl(21)"><p>{{ $t('xiangMuFenLeiGongShiZhanBiBiao') }}</p></el-menu-item>
+                  <el-menu-item index="1-23" v-if="permissions.reportSortDetailTable || permissions.reportSortSectionDetailTable" @click="ssl(22)"><p>{{ $t('fenLeiGongShiMingXiBiao') }}</p></el-menu-item>
+                  <el-menu-item index="1-24" v-if="permissions.reportStaffProject" @click="ssl(23)"><p>{{ $t('yuanGongXiangMuJinDuBiao') }}</p></el-menu-item>
+                  <el-menu-item index="1-25" v-if="permissions.reportProjectConsumptionFirst" @click="ssl(24)"><p>{{ $t('fenZuHaoYongJinDuBiao') }}</p></el-menu-item>
+                  <el-menu-item index="1-26" v-if="permissions.reportProjectConsumptionTwo" @click="ssl(25)"><p>{{ $t('xiangMuHaoYongJinDuBiao') }}</p></el-menu-item>
+                  <el-menu-item index="1-27" v-if="permissions.reportStaffTaskAccomplished" @click="ssl(26)"><p>{{ $t('yuanGongRenWuJinDuBiao') }}</p></el-menu-item>
+                  <el-menu-item index="1-28" v-if="permissions.reportProjectEstimated" @click="ssl(27)"><p>{{ $t('xiangMuYuGuGongShiBiao') }}</p></el-menu-item>
+                  <el-menu-item index="1-29" v-if="permissions.takCompletedStatus" @click="ssl(28)"><p>{{ $t('yuanGongRenWuWanChengQingKuangBiao') }}</p></el-menu-item>
                 </el-submenu>
                 </el-submenu>
               </el-menu>
               </el-menu>
           </el-col>
           </el-col>
@@ -94,9 +94,9 @@
         <template v-if="ins == 22">
         <template v-if="ins == 22">
           <span>
           <span>
             <span class="demonstration" style="color:#999;padding:0 10px">
             <span class="demonstration" style="color:#999;padding:0 10px">
-              项目分类
+              {{ $t('projectclassification') }} 
             </span>
             </span>
-            <el-select v-model="projectSortId" placeholder="请选择" @change="picks()" size="small">
+            <el-select v-model="projectSortId" :placeholder="$t('defaultText.pleaseChoose')" @change="picks()" size="small">
               <el-option v-for="item in projectSortList" :key="item.id" :label="item.name" :value="item.id" ></el-option>
               <el-option v-for="item in projectSortList" :key="item.id" :label="item.name" :value="item.id" ></el-option>
             </el-select>
             </el-select>
           </span>
           </span>
@@ -104,9 +104,9 @@
         <template v-if="ins == 25">
         <template v-if="ins == 25">
           <span>
           <span>
             <span class="demonstration" style="color:#999;padding:0 10px">
             <span class="demonstration" style="color:#999;padding:0 10px">
-              项目分类
+              {{ $t('projectclassification') }} 
             </span>
             </span>
-            <el-select v-model="projectSortIdTwo" placeholder="请选择" @change="picks()" size="small" clearable>
+            <el-select v-model="projectSortIdTwo" :placeholder="$t('defaultText.pleaseChoose')" @change="picks()" size="small" clearable>
               <el-option v-for="item in projectSortListTwo" :key="item.id" :label="item.name" :value="item.id" ></el-option>
               <el-option v-for="item in projectSortListTwo" :key="item.id" :label="item.name" :value="item.id" ></el-option>
             </el-select>
             </el-select>
           </span>
           </span>
@@ -127,15 +127,15 @@
         </el-select>
         </el-select>
 
 
         <!-- 任务分组 -->
         <!-- 任务分组 -->
-        <el-select v-if="ins == 1 && user.companyId == '3092'" v-model="projectGroupId" :placeholder="'请选择任务分组'" clearable filterable size="small" @change="getList(true)" style="margin-left:10px">
+        <el-select v-if="ins == 1 && user.companyId == '3092'" v-model="projectGroupId" :placeholder="$t('defaultText.pleaseSelectaTaskGroup')" clearable filterable size="small" @change="getList(true)" style="margin-left:10px">
           <el-option v-for="(item) in projectTaskgroupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
           <el-option v-for="(item) in projectTaskgroupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
         </el-select>
         </el-select>
 
 
-        <el-select v-if="ins==12 && user.companyId==936" v-model="projectCategorySubId" :placeholder="'请选择自主项目类别'" clearable filterable size="small" @change="selcts()" style="margin-left:10px">
+        <el-select v-if="ins==12 && user.companyId==936" v-model="projectCategorySubId" :placeholder="$t('qingXuanZeZiZhuXiangMuLeiBie')" clearable filterable size="small" @change="selcts()" style="margin-left:10px">
           <el-option v-for="(item) in projectCategorySubList" :key="item.value" :label="item.label" :value="item.value"></el-option>
           <el-option v-for="(item) in projectCategorySubList" :key="item.value" :label="item.label" :value="item.value"></el-option>
         </el-select>
         </el-select>
         <!--项目分组与阶段工时表,需要可选分组-->
         <!--项目分组与阶段工时表,需要可选分组-->
-        <el-select v-if="ins == 16" multiple v-model="groupNames" @change="onGroupSelectChange" clearable size="small" filterable collapse-tags placeholder="请选择任务分组" style="margin-left:10px;">
+        <el-select v-if="ins == 16" multiple v-model="groupNames" @change="onGroupSelectChange" clearable size="small" filterable collapse-tags :placeholder="$t('defaultText.pleaseSelectaTaskGroup')" style="margin-left:10px;">
           <el-option v-for="item in taskgroupList" :key="item.name" :label="item.name" :value="item.name"></el-option>
           <el-option v-for="item in taskgroupList" :key="item.name" :label="item.name" :value="item.name"></el-option>
         </el-select>
         </el-select>
         <!-- 月份选择 v-if="ins == 14 || ins == 15 || ins == 19" -->
         <!-- 月份选择 v-if="ins == 14 || ins == 15 || ins == 19" -->
@@ -180,7 +180,7 @@
             <el-option v-for="(item, index) in selUserList" :key="index" :label="item.name" :value="item.id"></el-option>
             <el-option v-for="(item, index) in selUserList" :key="index" :label="item.name" :value="item.id"></el-option>
           </el-select>
           </el-select>
           <!-- 人员兹自定义配置 员工类型筛选 只针对优立科技 -->
           <!-- 人员兹自定义配置 员工类型筛选 只针对优立科技 -->
-          <el-select v-if="user.companyId==4374&&ins == 21" v-model="subUserCustomName" :placeholder="'请选择员工类型'" clearable filterable size="small" @change="selcts()" style="margin-left:10px">
+          <el-select v-if="user.companyId==4374&&ins == 21" v-model="subUserCustomName" :placeholder="$t('qingXuanZeYuanGongLeiXing')" clearable filterable size="small" @change="selcts()" style="margin-left:10px">
             <el-option v-for="(item) in subUserCustom" :key="item.id" :label="item.name" :value="item.name">
             <el-option v-for="(item) in subUserCustom" :key="item.id" :label="item.name" :value="item.name">
             </el-option>
             </el-option>
           </el-select>
           </el-select>
@@ -201,9 +201,9 @@
       <!-- <p :style="ins == 9 ? 'float: right;margin-right: 25px;width:20%' : 'float: right;margin-right: 25px;width:10%'" > -->
       <!-- <p :style="ins == 9 ? 'float: right;margin-right: 25px;width:20%' : 'float: right;margin-right: 25px;width:10%'" > -->
       <p :style="`${ins == 9 || ins == 14 || ins == 21 ? 'width: 20%' : 'width: 10%'}`" class="tableRightBtn">
       <p :style="`${ins == 9 || ins == 14 || ins == 21 ? 'width: 20%' : 'width: 10%'}`" class="tableRightBtn">
         <el-button type="primary" @click="exportExcel" size="mini">{{ $t('reporderived') }}</el-button>
         <el-button type="primary" @click="exportExcel" size="mini">{{ $t('reporderived') }}</el-button>
-        <el-button type="primary" @click="fillAll" size="mini" v-if="ins == 14">全部补足</el-button>
+        <el-button type="primary" @click="fillAll" size="mini" v-if="ins == 14">{{ $t('quanBuBuZu') }}</el-button>
         <el-button type="primary" @click="exportExcelByQuarter" size="mini" v-if="ins == 9 && user.companyId == 876">{{ $t('an-ji-du-dao-chu') }}</el-button>
         <el-button type="primary" @click="exportExcelByQuarter" size="mini" v-if="ins == 9 && user.companyId == 876">{{ $t('an-ji-du-dao-chu') }}</el-button>
-        <el-button type="primary" @click="setWarning" size="mini" v-if="ins == 21">设置预警</el-button>
+        <el-button type="primary" @click="setWarning" size="mini" v-if="ins == 21">{{ $t('sheZhiYuJing') }}</el-button>
       </p>
       </p>
       
       
     </div>
     </div>
@@ -274,7 +274,7 @@
                     <span v-else>{{scope.row.customName}}</span>
                     <span v-else>{{scope.row.customName}}</span>
                   </template>
                   </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column v-if="user.companyId==3092" prop="groupName" :label="'任务分组'"  width="300">
+                <el-table-column v-if="user.companyId==3092" prop="groupName" :label="$t('other.taskGroup')"  width="300">
                   <template slot-scope="scope" >
                   <template slot-scope="scope" >
                     {{scope.row.groupName}}
                     {{scope.row.groupName}}
                   </template>
                   </template>
@@ -307,7 +307,7 @@
                         <font :style="'color:'+(scope.row.real_hours > scope.row.plan_hours?'red':'')">{{scope.row.real_hours == null? 0:scope.row.real_hours.toFixed(1)}}</font>
                         <font :style="'color:'+(scope.row.real_hours > scope.row.plan_hours?'red':'')">{{scope.row.real_hours == null? 0:scope.row.real_hours.toFixed(1)}}</font>
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column prop="real_cost" label="实际成本"  width="150" v-if="user.companyId == 3092 || user.companyId==7 || user.companyId==10">
+                <el-table-column prop="real_cost" :label="$t('shiJiChengBen')"  width="150" v-if="user.companyId == 3092 || user.companyId==7 || user.companyId==10">
                    <template slot-scope="scope">
                    <template slot-scope="scope">
                         {{scope.row.real_cost == null? 0:scope.row.real_cost.toFixed(2)}}
                         {{scope.row.real_cost == null? 0:scope.row.real_cost.toFixed(2)}}
                     </template>
                     </template>
@@ -328,12 +328,12 @@
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
                 <span v-if="user.companyId == '3092'">
                 <span v-if="user.companyId == '3092'">
-                  <el-table-column prop="group_plan_hours" :label="'分组预估工时(h)'"  width="150">
+                  <el-table-column prop="group_plan_hours" :label="$t('fenZuYuGuGongShiH')"  width="150">
                       <template slot-scope="scope">
                       <template slot-scope="scope">
                           {{scope.row.group_plan_hours}}
                           {{scope.row.group_plan_hours}}
                       </template>
                       </template>
                   </el-table-column>
                   </el-table-column>
-                  <el-table-column prop="group_real_hours" :label="'分组实际工时(h)'"  width="150">
+                  <el-table-column prop="group_real_hours" :label="$t('fenZuShiJiGongShiH')"  width="150">
                       <template slot-scope="scope">
                       <template slot-scope="scope">
                           {{scope.row.group_real_hours}}
                           {{scope.row.group_real_hours}}
                       </template>
                       </template>
@@ -402,7 +402,7 @@
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
                 <!--开通合同管理模块的显示已回款金额-->
                 <!--开通合同管理模块的显示已回款金额-->
-                <el-table-column prop="payment" label="已回款金额" width="100" align="right" v-if="user.company.packageContract==1">
+                <el-table-column prop="payment" :label="$t('yi-hui-kuan-jin-e')" width="100" align="right" v-if="user.company.packageContract==1">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
                         {{scope.row.payment.toFixed(2)}}
                         {{scope.row.payment.toFixed(2)}}
                     </template>
                     </template>
@@ -425,22 +425,22 @@
                         {{(scope.row.budget).toFixed(2)}}
                         {{(scope.row.budget).toFixed(2)}}
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column  label="已回款利润"  width="100" align="right" v-if="user.company.packageContract == 1">
+                <el-table-column  :label="$t('yiHuiKuanLiRun')"  width="100" align="right" v-if="user.company.packageContract == 1">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
                         {{((scope.row.payment==null?0:scope.row.payment) - (scope.row.budget)).toFixed(2)}}
                         {{((scope.row.payment==null?0:scope.row.payment) - (scope.row.budget)).toFixed(2)}}
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column  label="已回款利润率"  width="120" align="right" v-if="user.company.packageContract==1">
+                <el-table-column  :label="$t('yiHuiKuanLiRunShuai')"  width="120" align="right" v-if="user.company.packageContract==1">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
                         {{(scope.row.payment==null||scope.row.payment==0)?'-':((scope.row.payment - scope.row.budget)*100/scope.row.payment).toFixed(1)+"%"}}
                         {{(scope.row.payment==null||scope.row.payment==0)?'-':((scope.row.payment - scope.row.budget)*100/scope.row.payment).toFixed(1)+"%"}}
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column  label="合同利润"  width="100" align="right">
+                <el-table-column  :label="$t('heTongLiRun')"  width="100" align="right">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
                         {{((scope.row.contractAmount==null?0:scope.row.contractAmount) - scope.row.budget).toFixed(2)}}
                         {{((scope.row.contractAmount==null?0:scope.row.contractAmount) - scope.row.budget).toFixed(2)}}
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column  label="合同利润率"  width="100" align="right">
+                <el-table-column  :label="$t('heTongLiRunShuai')"  width="100" align="right">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
                         {{(scope.row.contractAmount==null||scope.row.contractAmount==0)?'-':((scope.row.contractAmount - scope.row.budget)*100/scope.row.contractAmount).toFixed(1)+"%"}}
                         {{(scope.row.contractAmount==null||scope.row.contractAmount==0)?'-':((scope.row.contractAmount - scope.row.budget)*100/scope.row.contractAmount).toFixed(1)+"%"}}
                     </template>
                     </template>
@@ -884,7 +884,7 @@
                       type="primary" 
                       type="primary" 
                       v-if="scope.row.whether == 0 && scope.row.workingTime > 0"
                       v-if="scope.row.whether == 0 && scope.row.workingTime > 0"
                       size="mini"
                       size="mini"
-                      @click="fillWorkingHours(scope.row)">补足工时</el-button>
+                      @click="fillWorkingHours(scope.row)">{{ $t('buZuGongShi') }}</el-button>
                     </div>
                     </div>
                   </template>
                   </template>
                 </el-table-column>
                 </el-table-column>
@@ -932,21 +932,21 @@
 
 
             <!-- 子项目工时成本表 -->
             <!-- 子项目工时成本表 -->
             <el-table v-if="ins == 17"  key="17" border :data="subprojectArr" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
             <el-table v-if="ins == 17"  key="17" border :data="subprojectArr" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
-                <el-table-column align="center" prop="projectCode" label="父项目编号" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="projectName" label="父项目名称" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="subProjectCode" label="子项目编号" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="subProjectName" label="子项目名称" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="workingTime" label="子项目工时" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="cost" label="子项目成本" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="projectCode" :label="$t('fuXiangMuBianHao')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="projectName" :label="$t('fuXiangMuMingCheng')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="subProjectCode" :label="$t('subprojectno')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="subProjectName" :label="$t('ziXiangMuMingCheng')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="workingTime" :label="$t('ziXiangMuGongShi')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="cost" :label="$t('ziXiangMuChengBen')" min-width="150"></el-table-column>
             </el-table>
             </el-table>
 
 
             <!-- 任务重启表 -->
             <!-- 任务重启表 -->
             <el-table v-if="ins == 18"  key="18" border :data="taskRestartArr" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
             <el-table v-if="ins == 18"  key="18" border :data="taskRestartArr" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
-                <el-table-column align="center" prop="projectCode" label="项目编号" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="projectName" label="项目名称" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="taskName" label="任务名称" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="restartReason" label="重启原因" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="workingTime" label="责任人" min-width="150">
+                <el-table-column align="center" prop="projectCode" :label="$t('Itemno')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="projectName" :label="$t('headerTop.projectName')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="taskName" :label="$t('nameofthetask')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="restartReason" :label="$t('zhongQiYuanYin')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="workingTime" :label="$t('zeRenRen')" min-width="150">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
                     <div>
                     <div>
                       <span v-for="item, index in scope.row.personLiableNames" :key="index">
                       <span v-for="item, index in scope.row.personLiableNames" :key="index">
@@ -959,15 +959,15 @@
                     </div>
                     </div>
                   </template>
                   </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column align="center" prop="restartDate" label="重启时间" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="restartDate" :label="$t('zhongQiShiJian')" min-width="150"></el-table-column>
             </el-table>
             </el-table>
 
 
             <!-- FTE报表 -->
             <!-- FTE报表 -->
             <el-table v-if="ins == 19"  key="19" border :data="fTEDataList" highlight-current-row v-loading="listLoading" :height="+tableHeight - 1" style="width: 100%;" @sort-change="tableSort">
             <el-table v-if="ins == 19"  key="19" border :data="fTEDataList" highlight-current-row v-loading="listLoading" :height="+tableHeight - 1" style="width: 100%;" @sort-change="tableSort">
                 <el-table-column align="center" prop="area" :label="customName" min-width="150"></el-table-column>
                 <el-table-column align="center" prop="area" :label="customName" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="projectCode" label="项目编号" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="projectName" label="项目名称" min-width="250"></el-table-column>
-                <el-table-column align="center" prop="userName" label="人名" min-width="150" sortable="custom">
+                <el-table-column align="center" prop="projectCode" :label="$t('Itemno')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="projectName" :label="$t('headerTop.projectName')" min-width="250"></el-table-column>
+                <el-table-column align="center" prop="userName" :label="$t('renMing')" min-width="150" sortable="custom">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
                     <div>
                     <div>
                       <span v-if="user.userNameNeedTranslate == '1'">
                       <span v-if="user.userNameNeedTranslate == '1'">
@@ -979,14 +979,14 @@
                     </div>
                     </div>
                   </template>
                   </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column align="center" prop="workTime" label="工时" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="FTE" label="FTE(工时/当月工时基数)" min-width="250"></el-table-column>
-                <el-table-column v-if="user.companyId==876" align="center" prop="FTERegular" label="FTE(工时/固定工时基数(163.125))" min-width="300"></el-table-column>
+                <el-table-column align="center" prop="workTime" :label="$t('time.workingHours')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="FTE" :label="$t('fteGongShiDangYueGongShiJiShu')" min-width="250"></el-table-column>
+                <el-table-column v-if="user.companyId==876" align="center" prop="FTERegular" :label="$t('fteGongShiGuDingGongShiJiShu_163125')" min-width="300"></el-table-column>
             </el-table>
             </el-table>
 
 
             <!-- 有效工时率表 -->
             <!-- 有效工时率表 -->
             <el-table  v-if="ins == 20" key="20" border :data="efficentList" highlight-current-row v-loading="listLoading" :height="+tableHeight - 1" style="width: 100%;" >
             <el-table  v-if="ins == 20" key="20" border :data="efficentList" highlight-current-row v-loading="listLoading" :height="+tableHeight - 1" style="width: 100%;" >
-                <el-table-column align="center" prop="department_name" label="所属部门" min-width="150">
+                <el-table-column align="center" prop="department_name" :label="$t('subordinatedepartments')" min-width="150">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
                     <div>
                     <div>
                       <span v-if="user.userNameNeedTranslate == '1'">
                       <span v-if="user.userNameNeedTranslate == '1'">
@@ -998,19 +998,19 @@
                     </div>
                     </div>
                   </template>
                   </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column align="center" prop="working_time" label="实报工时(小时)" min-width="150"></el-table-column>
-                <el-table-column align="center" label="应工时(小时)" >
-                    <el-table-column align="center" prop="count" label="在职人数" min-width="150"></el-table-column>
-                    <el-table-column align="center" prop="date_count" label="应报工时天数" min-width="150"></el-table-column>
-                    <el-table-column align="center" prop="day_time" label="日标准工时" min-width="150"></el-table-column>
-                    <el-table-column align="center" prop="total_time" label="应报工时" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="working_time" :label="$t('shiBaoGongShiXiaoShi')" min-width="150"></el-table-column>
+                <el-table-column align="center" :label="$t('yingGongShiXiaoShi')" >
+                    <el-table-column align="center" prop="count" :label="$t('zaiZhiRenShu')" min-width="150"></el-table-column>
+                    <el-table-column align="center" prop="date_count" :label="$t('yingBaoGongShiTianShu')" min-width="150"></el-table-column>
+                    <el-table-column align="center" prop="day_time" :label="$t('riBiaoZhunGongShi')" min-width="150"></el-table-column>
+                    <el-table-column align="center" prop="total_time" :label="$t('yingBaoGongShi')" min-width="150"></el-table-column>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column align="center" prop="rate" label="有效工时率" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="rate" :label="$t('youXiaoGongShiShuai')" min-width="150"></el-table-column>
             </el-table>
             </el-table>
 
 
             <!-- 项目分类工时占比表 -->
             <!-- 项目分类工时占比表 -->
             <el-table  v-if="ins == 21" :key="projectCateRatioListKey" border :data="projectCateRatioList.userList" highlight-current-row v-loading="listLoading" :height="(+tableHeight + 50) - 1" style="width: 100%;" >
             <el-table  v-if="ins == 21" :key="projectCateRatioListKey" border :data="projectCateRatioList.userList" highlight-current-row v-loading="listLoading" :height="(+tableHeight + 50) - 1" style="width: 100%;" >
-              <el-table-column align="center" prop="name" label="人员" min-width="150" fixed="left">
+              <el-table-column align="center" prop="name" :label="$t('ren-yuan')" min-width="150" fixed="left">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   <div>
                   <div>
                     <span v-if="user.userNameNeedTranslate == '1'">
                     <span v-if="user.userNameNeedTranslate == '1'">
@@ -1022,14 +1022,14 @@
                   </div>
                   </div>
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-              <el-table-column v-if="user.companyId==4374" align="center" prop="name" label="员工类型" min-width="150" fixed="left">
+              <el-table-column v-if="user.companyId==4374" align="center" prop="name" :label="$t('yuanGongLeiXing')" min-width="150" fixed="left">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                     <span>
                     <span>
-                      {{findValue('员工类型',scope.row.plateMap)}}
+                      {{findValue($t('yuanGongLeiXing'),scope.row.plateMap)}}
                     </span>
                     </span>
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-              <el-table-column align="center" prop="workingTime" label="总工时" min-width="150">
+              <el-table-column align="center" prop="workingTime" :label="$t('other.totalworkinghours')" min-width="150">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   {{ scope.row.workingTime }} h
                   {{ scope.row.workingTime }} h
                 </template>
                 </template>
@@ -1038,12 +1038,12 @@
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   <div v-for="v,i in scope.row.cateTimeList || []" :key="i">
                   <div v-for="v,i in scope.row.cateTimeList || []" :key="i">
                     <div v-if="item.name == v.categoryName && v.categoryName" :style="`color: ${v.warning ? 'red' : ''}`">
                     <div v-if="item.name == v.categoryName && v.categoryName" :style="`color: ${v.warning ? 'red' : ''}`">
-                      <div>工时: {{ v.workingTime }} h </div>
-                      <div>占比: {{ v.percent | schedulePercentage }} % </div>
+                      <div>{{ $t('time.workingHours') }}: {{ v.workingTime }} h </div>
+                      <div>{{ $t('Accountedfor') }} : {{ v.percent | schedulePercentage }} % </div>
                     </div>
                     </div>
                     <div v-if="!v.categoryName && item.name == '未分类'" :style="`color: ${v.warning ? 'red' : ''}`">
                     <div v-if="!v.categoryName && item.name == '未分类'" :style="`color: ${v.warning ? 'red' : ''}`">
-                      <div>工时: {{ v.workingTime }} h </div>
-                      <div>占比: {{ v.percent | schedulePercentage }} % </div>
+                      <div>{{ $t('time.workingHours') }} : {{ v.workingTime }} h </div>
+                      <div>{{ $t('Accountedfor') }} : {{ v.percent | schedulePercentage }} % </div>
                     </div>
                     </div>
                   </div>
                   </div>
                 </template>
                 </template>
@@ -1052,8 +1052,8 @@
 
 
             <!-- 分类工时明细表 -->
             <!-- 分类工时明细表 -->
             <el-table  v-if="ins == 22" :key="hoursDetailClassListKey" border :data="hoursDetailClassList.record" highlight-current-row v-loading="listLoading" :height="+tableHeight -1" style="width: 100%;" >
             <el-table  v-if="ins == 22" :key="hoursDetailClassListKey" border :data="hoursDetailClassList.record" highlight-current-row v-loading="listLoading" :height="+tableHeight -1" style="width: 100%;" >
-              <el-table-column align="center" prop="projectCode" :label="`${projectSortName}项目号`" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="userName" label="姓名" min-width="150">
+              <el-table-column align="center" prop="projectCode" :label="`${projectSortName} ${$t('xiangMuHao')}`" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="userName" :label="$t('lable.name')" min-width="150">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   <div>
                   <div>
                     <span v-if="user.userNameNeedTranslate == '1'">
                     <span v-if="user.userNameNeedTranslate == '1'">
@@ -1065,7 +1065,7 @@
                   </div>
                   </div>
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-              <el-table-column align="center" prop="deptName" label="部门" min-width="150">
+              <el-table-column align="center" prop="deptName" :label="$t('lable.department')" min-width="150">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   <div>
                   <div>
                     <span v-if="user.userNameNeedTranslate == '1'">
                     <span v-if="user.userNameNeedTranslate == '1'">
@@ -1087,8 +1087,8 @@
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
 
 
-              <el-table-column align="center" prop="allWorkingTime" label="总工时" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="targetWorkingTime" :label="`${projectSortName}工时`" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="allWorkingTime" :label="$t('other.totalworkinghours')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="targetWorkingTime" :label="`${projectSortName} ${$t('time.workingHours')}`" min-width="150"></el-table-column>
 
 
               <!-- 渲染日期 -->
               <!-- 渲染日期 -->
               <el-table-column align="center" :label="item.titleName" min-width="150" v-for="(item, index) in hoursDetailClassList.header" :key="index">
               <el-table-column align="center" :label="item.titleName" min-width="150" v-for="(item, index) in hoursDetailClassList.header" :key="index">
@@ -1105,7 +1105,7 @@
 
 
             <!-- 员工项目进度表 -->
             <!-- 员工项目进度表 -->
             <el-table  v-if="ins == 23" :key="23" border :data="isbeCustomReport.projectSchedule" highlight-current-row v-loading="listLoading" :height="(+tableHeight) - 1" style="width: 100%;" :span-method="objectSpanMethod">
             <el-table  v-if="ins == 23" :key="23" border :data="isbeCustomReport.projectSchedule" highlight-current-row v-loading="listLoading" :height="(+tableHeight) - 1" style="width: 100%;" :span-method="objectSpanMethod">
-              <el-table-column align="center" prop="departmentName" label="部门" width="150">
+              <el-table-column align="center" prop="departmentName" :label="$t('lable.department')" width="150">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   <div>
                   <div>
                     <span v-if="user.userNameNeedTranslate == '1'">
                     <span v-if="user.userNameNeedTranslate == '1'">
@@ -1118,7 +1118,7 @@
                   </div>
                   </div>
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-              <el-table-column align="center" prop="userName" label="人员" width="150">
+              <el-table-column align="center" prop="userName" :label="$t('ren-yuan')" width="150">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   <div>
                   <div>
                     <span v-if="user.userNameNeedTranslate == '1'">
                     <span v-if="user.userNameNeedTranslate == '1'">
@@ -1131,15 +1131,15 @@
                   </div>
                   </div>
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-              <el-table-column align="center" prop="projectName" label="项目名称"></el-table-column>
-              <el-table-column align="center" prop="projectCode" label="项目编号"></el-table-column>
-              <el-table-column align="center" prop="residueTime" label="剩余工时(h)" width="150"></el-table-column>
+              <el-table-column align="center" prop="projectName" :label="$t('headerTop.projectName')"></el-table-column>
+              <el-table-column align="center" prop="projectCode" :label="$t('Itemno')"></el-table-column>
+              <el-table-column align="center" prop="residueTime" :label="$t('shengYuGongShiH')" width="150"></el-table-column>
             </el-table>
             </el-table>
 
 
             <!-- 分组耗用进度表 -->
             <!-- 分组耗用进度表 -->
             <el-table  v-if="ins == 24" :key="24" border :data="isbeCustomReport.consumptionSchedule" highlight-current-row v-loading="listLoading" :height="(+tableHeight - 0) - 1" style="width: 100%;" :span-method="objectSpanMethod">
             <el-table  v-if="ins == 24" :key="24" border :data="isbeCustomReport.consumptionSchedule" highlight-current-row v-loading="listLoading" :height="(+tableHeight - 0) - 1" style="width: 100%;" :span-method="objectSpanMethod">
-              <el-table-column align="center" prop="projectName" label="项目名称" min-width="200"></el-table-column>
-              <el-table-column align="center" prop="department_name" label="负责部门" min-width="150">
+              <el-table-column align="center" prop="projectName" :label="$t('headerTop.projectName')" min-width="200"></el-table-column>
+              <el-table-column align="center" prop="department_name" :label="$t('fuZeBuMen')" min-width="150">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   <div>
                   <div>
                     <span v-if="user.userNameNeedTranslate == '1'">
                     <span v-if="user.userNameNeedTranslate == '1'">
@@ -1152,30 +1152,30 @@
                   </div>
                   </div>
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-              <el-table-column align="center" prop="groupName" label="任务分组" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="planHour" label="计划工时(财务)" width="120"></el-table-column>
-              <el-table-column align="center" label="实际工时成本">
-                <el-table-column align="center" prop="afterSetPlanHour" label="增补工时(h)" width="120"></el-table-column>
-                <el-table-column align="center" prop="normalHour" label="正常工时(h)" width="100"></el-table-column>
-                <el-table-column align="center" prop="overHour" label="加班工时(h)" width="100"></el-table-column>
-                <el-table-column align="center" prop="realHour" label="合计工时(h)" width="100"></el-table-column>
-                <el-table-column align="center" prop="realCost" label="合计工时成本" width="140"></el-table-column>
+              <el-table-column align="center" prop="groupName" :label="$t('lable.taskGrouping')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="planHour" :label="$t('jiHuaGongShiCaiWu')" width="120"></el-table-column>
+              <el-table-column align="center" :label="$t('shiJiGongShiChengBen')">
+                <el-table-column align="center" prop="afterSetPlanHour" :label="$t('zengBuGongShiH')" width="120"></el-table-column>
+                <el-table-column align="center" prop="normalHour" :label="$t('zhengChangGongShiH')" width="100"></el-table-column>
+                <el-table-column align="center" prop="overHour" :label="$t('jiaBanGongShiH')" width="100"></el-table-column>
+                <el-table-column align="center" prop="realHour" :label="$t('heJiGongShiH')" width="100"></el-table-column>
+                <el-table-column align="center" prop="realCost" :label="$t('heJiGongShiChengBen')" width="140"></el-table-column>
               </el-table-column>
               </el-table-column>
-              <el-table-column align="center" prop="process" label="工时耗用率" width="150"></el-table-column>
+              <el-table-column align="center" prop="process" :label="$t('gongShiHaoYongShuai')" width="150"></el-table-column>
             </el-table>
             </el-table>
 
 
             <!-- 项目耗用进度表 -->
             <!-- 项目耗用进度表 -->
             <el-table  v-if="ins == 25" :key="25" border :data="isbeCustomReport.consumptionScheduleTwo" highlight-current-row v-loading="listLoading" :height="(+tableHeight) - 1" style="width: 100%;" >
             <el-table  v-if="ins == 25" :key="25" border :data="isbeCustomReport.consumptionScheduleTwo" highlight-current-row v-loading="listLoading" :height="(+tableHeight) - 1" style="width: 100%;" >
-              <el-table-column align="center" prop="projectName" label="项目名称" min-width="220"></el-table-column>
-              <el-table-column align="center" prop="categoryName" label="项目分类" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="projectCode" label="项目编号" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="planStartDate" label="开始时间" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="planEndDate" label="截止时间" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="planHour" label="分配工时(h)" width="100"></el-table-column>
-              <el-table-column align="center" prop="realHour" label="已消耗工时(h)" width="120"></el-table-column>
-              <el-table-column align="center" prop="realCost" label="已消耗工时成本(¥)" width="150"></el-table-column>
-              <el-table-column align="center" prop="residueHour" label="剩余工时(h)" width="100"></el-table-column>
-              <el-table-column align="center"  label="负责组长" width="100">
+              <el-table-column align="center" prop="projectName" :label="$t('headerTop.projectName')" min-width="220"></el-table-column>
+              <el-table-column align="center" prop="categoryName" :label="$t('projectclassification')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="projectCode" :label="$t('Itemno')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="planStartDate" :label="$t('starttimes')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="planEndDate" :label="$t('deadline')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="planHour" :label="$t('fenPeiGongShiH')" width="100"></el-table-column>
+              <el-table-column align="center" prop="realHour" :label="$t('yiXiaoHaoGongShiH')" width="120"></el-table-column>
+              <el-table-column align="center" prop="realCost" :label="$t('yiXiaoHaoGongShiChengBen')" width="150"></el-table-column>
+              <el-table-column align="center" prop="residueHour" :label="$t('shengYuGongShiH')" width="100"></el-table-column>
+              <el-table-column align="center"  :label="$t('fuZeZuChang')" width="100">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   <div class="participatingEmployee">
                   <div class="participatingEmployee">
                     <div v-for="(item,index) in scope.row.teamLeader" :key="index">
                     <div v-for="(item,index) in scope.row.teamLeader" :key="index">
@@ -1190,7 +1190,7 @@
                   </div>
                   </div>
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-              <el-table-column align="center" label="参与员工" min-width="150">
+              <el-table-column align="center" :label="$t('canYuYuanGong')" min-width="150">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   <div class="participatingEmployee">
                   <div class="participatingEmployee">
                     <div v-for="(item,index) in scope.row.userProgress" :key="index">
                     <div v-for="(item,index) in scope.row.userProgress" :key="index">
@@ -1211,7 +1211,7 @@
 
 
             <!-- 员工任务进度表 -->
             <!-- 员工任务进度表 -->
             <el-table  v-if="ins == 26" :key="26" border :data="isbeCustomReport.taskCompletionSheet" highlight-current-row v-loading="listLoading" :height="(+tableHeight) - 1" style="width: 100%;" :span-method="objectSpanMethod">
             <el-table  v-if="ins == 26" :key="26" border :data="isbeCustomReport.taskCompletionSheet" highlight-current-row v-loading="listLoading" :height="(+tableHeight) - 1" style="width: 100%;" :span-method="objectSpanMethod">
-              <el-table-column align="center" prop="departmentName" label="部门" min-width="150">
+              <el-table-column align="center" prop="departmentName" :label="$t('lable.department')" min-width="150">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   <div>
                   <div>
                     <span v-if="user.userNameNeedTranslate == '1'">
                     <span v-if="user.userNameNeedTranslate == '1'">
@@ -1224,7 +1224,7 @@
                   </div>
                   </div>
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-              <el-table-column align="center" prop="w" label="人员" min-width="150">
+              <el-table-column align="center" prop="w" :label="$t('ren-yuan')" min-width="150">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   <div>
                   <div>
                     <span v-if="user.userNameNeedTranslate == '1'">
                     <span v-if="user.userNameNeedTranslate == '1'">
@@ -1237,27 +1237,27 @@
                   </div>
                   </div>
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-              <el-table-column align="center" prop="projectName" label="项目名称" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="projectCode" label="项目编号" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="taskName" label="项目任务" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="planHour" label="计划工时(h)" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="consumeTime" label="消耗工时(h)" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="residue" label="剩余工时(h)" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="planStartDate" label="项目开始时间" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="planEndDate" label="项目截止时间" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="projectName" :label="$t('headerTop.projectName')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="projectCode" :label="$t('Itemno')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="taskName" :label="$t('xiangMuRenWu')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="planHour" :label="$t('jiHuaGongShiH')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="consumeTime" :label="$t('xiaoHaoGongShiH')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="residue" :label="$t('shengYuGongShiH')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="planStartDate" :label="$t('xiangMuKaiShiShiJian')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="planEndDate" :label="$t('xiangMuJieZhiShiJian')" min-width="150"></el-table-column>
             </el-table>
             </el-table>
 
 
              <!-- 项目预估工时表 -->
              <!-- 项目预估工时表 -->
              <el-table  v-if="ins == 27" key="27" border :data="projectEstimatedWorkData" highlight-current-row v-loading="listLoading"  :height="+tableHeight - 1" style="width: 100%;" :span-method="objectSpanMethod">
              <el-table  v-if="ins == 27" key="27" border :data="projectEstimatedWorkData" highlight-current-row v-loading="listLoading"  :height="+tableHeight - 1" style="width: 100%;" :span-method="objectSpanMethod">
-              <el-table-column align="center" prop="projectName" label="项目名称" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="groupName" label="分组名称" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="estimatedWorkTime" label="预估工时" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="workTime" label="实际工时" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="projectName" :label="$t('headerTop.projectName')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="groupName" :label="$t('groupname')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="estimatedWorkTime" :label="$t('yuGuGongShi')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="workTime" :label="$t('shi-ji-gong-shi')" min-width="150"></el-table-column>
             </el-table>
             </el-table>
 
 
             <!-- 员工任务完成情况表 -->
             <!-- 员工任务完成情况表 -->
             <el-table  v-if="ins == 28" key="28" border :data="taskCompletedData" highlight-current-row v-loading="listLoading"  :height="+tableHeight - 1" style="width: 100%;" :span-method="objectSpanMethod">
             <el-table  v-if="ins == 28" key="28" border :data="taskCompletedData" highlight-current-row v-loading="listLoading"  :height="+tableHeight - 1" style="width: 100%;" :span-method="objectSpanMethod">
-              <el-table-column align="center" prop="userName" label="员工" min-width="150">
+              <el-table-column align="center" prop="userName" :label="$t('yuanGong')" min-width="150">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   <div>
                   <div>
                     <span v-if="user.userNameNeedTranslate == '1'">
                     <span v-if="user.userNameNeedTranslate == '1'">
@@ -1269,7 +1269,7 @@
                   </div>
                   </div>
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-              <el-table-column align="center" prop="deptName" label="部门" min-width="150">
+              <el-table-column align="center" prop="deptName" :label="$t('lable.department')" min-width="150">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                   <div>
                   <div>
                     <span v-if="user.userNameNeedTranslate == '1'">
                     <span v-if="user.userNameNeedTranslate == '1'">
@@ -1281,13 +1281,13 @@
                   </div>
                   </div>
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-              <el-table-column align="center" prop="allNum" label="任务总数量" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="completedNum" label="已完成数量" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="noCompletedNum" label="未完成数量" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="noCompletedPercent" label="未完成率" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="onTimeNum" label="按时完成数量" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="noOnTimeNum" label="延迟完成数量" min-width="150"></el-table-column>
-              <el-table-column align="center" prop="onTimePercent" label="按时完成率" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="allNum" :label="$t('renWuZongShuLiang')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="completedNum" :label="$t('yiWanChengShuLiang')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="noCompletedNum" :label="$t('weiWanChengShuLiang')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="noCompletedPercent" :label="$t('weiWanChengShuai')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="onTimeNum" :label="$t('anShiWanChengShuLiang')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="noOnTimeNum" :label="$t('yanChiWanChengShuLiang')" min-width="150"></el-table-column>
+              <el-table-column align="center" prop="onTimePercent" :label="$t('anShiWanChengShuai')" min-width="150"></el-table-column>
             </el-table>
             </el-table>
         <!--工具条-->
         <!--工具条-->
         <el-col :span="24" class="toolbar" v-if="ins != 6 && ins != 20 && ins != 21">
         <el-col :span="24" class="toolbar" v-if="ins != 6 && ins != 20 && ins != 21">
@@ -1372,7 +1372,7 @@
             </div>
             </div>
         </el-dialog>
         </el-dialog>
         <el-dialog :title="curProject.projectName+'-'+$t('detailsofreimbursementexpenses')" show-summary=true v-if="detailVisible" :summary-method="getSummaries" :visible.sync="detailVisible" :close-on-click-modal="false" customClass="customWidth" width="1000px">
         <el-dialog :title="curProject.projectName+'-'+$t('detailsofreimbursementexpenses')" show-summary=true v-if="detailVisible" :summary-method="getSummaries" :visible.sync="detailVisible" :close-on-click-modal="false" customClass="customWidth" width="1000px">
-        <div><el-button size="mini" @click="exportExpenseDetail" style="float:right" type="primary">导出</el-button></div>
+        <div><el-button size="mini" @click="exportExpenseDetail" style="float:right" type="primary">{{ $t('export.export') }}</el-button></div>
         <el-table  :key="ins" border :data="detailList" highlight-current-row v-loading="detailListLoading" :height="500" style="width: 100%;">
         <el-table  :key="ins" border :data="detailList" highlight-current-row v-loading="detailListLoading" :height="500" style="width: 100%;">
                 <el-table-column  prop="username" :label="$t('screening.employeename')"  >
                 <el-table-column  prop="username" :label="$t('screening.employeename')"  >
                   <template slot-scope="scope" >
                   <template slot-scope="scope" >
@@ -1424,7 +1424,7 @@
                         {{(scope.row.amount-scope.row.taxValue).toFixed(2)}}
                         {{(scope.row.amount-scope.row.taxValue).toFixed(2)}}
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column prop="remark" label="备注">
+                <el-table-column prop="remark" :label="$t('bei-zhu')">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
                     <el-tooltip popper-class="tipclass" :content=scope.row.remark placement="top-start">
                     <el-tooltip popper-class="tipclass" :content=scope.row.remark placement="top-start">
                       <div class="cloStyleFour">{{scope.row.remark==null?"":scope.row.remark.length > 6?scope.row.remark.substring(0,5) + "...": scope.row.remark}}</div>
                       <div class="cloStyleFour">{{scope.row.remark==null?"":scope.row.remark.length > 6?scope.row.remark.substring(0,5) + "...": scope.row.remark}}</div>
@@ -1506,19 +1506,19 @@
         </el-dialog>
         </el-dialog>
 
 
         <!-- 设置预警弹窗 -->
         <!-- 设置预警弹窗 -->
-        <el-dialog title="设置预警" :visible.sync="setWarningModal" width="600px" :before-close="handleClose">
+        <el-dialog :title="$t('sheZhiYuJing')" :visible.sync="setWarningModal" width="600px" :before-close="handleClose">
           <div>
           <div>
             <el-form ref="warningFrom" :model="warningFrom" label-width="120px">
             <el-form ref="warningFrom" :model="warningFrom" label-width="120px">
-              <el-form-item label="提醒分类:">
-                <el-select v-model="warningFrom.monitorCategoryId" placeholder="请选择提醒分类">
+              <el-form-item :label="$t('tiXingFenLei')">
+                <el-select v-model="warningFrom.monitorCategoryId" :placeholder="$t('qingXuanZeTiXingFenLei')">
                   <el-option v-for="item in projectCateRatioList.categoryList" :key="item.id" :label="item. name" :value="item.id"></el-option>
                   <el-option v-for="item in projectCateRatioList.categoryList" :key="item.id" :label="item. name" :value="item.id"></el-option>
                 </el-select>
                 </el-select>
               </el-form-item>
               </el-form-item>
-              <el-form-item label="选择关系:">
-                <el-radio v-model="warningFrom.moreOrLess" :label="0">低于</el-radio>
-                <el-radio v-model="warningFrom.moreOrLess" :label="1">高于</el-radio>
+              <el-form-item :label="$t('xuanZeGuanXi')">
+                <el-radio v-model="warningFrom.moreOrLess" :label="0">{{ $t('diYu') }}</el-radio>
+                <el-radio v-model="warningFrom.moreOrLess" :label="1">{{ $t('gaoYu') }}</el-radio>
               </el-form-item>
               </el-form-item>
-              <el-form-item label="设置占比:">
+              <el-form-item :label="$t('sheZhiZhanBi')">
                 <div class="sliderSetup">
                 <div class="sliderSetup">
                   <el-slider v-model="warningFrom.ratio" style="width: 340px"></el-slider>
                   <el-slider v-model="warningFrom.ratio" style="width: 340px"></el-slider>
                   <div class="text">{{ warningFrom.ratio }} %</div>
                   <div class="text">{{ warningFrom.ratio }} %</div>
@@ -1527,13 +1527,13 @@
             </el-form>
             </el-form>
           </div>
           </div>
           <span slot="footer" class="dialog-footer">
           <span slot="footer" class="dialog-footer">
-            <el-button @click="setWarningModal = false">取 消</el-button>
-            <el-button type="primary" @click="setForewarning()" :loading="warningTableLoading">确 定</el-button>
+            <el-button @click="setWarningModal = false">{{ $t('quXiao') }}</el-button>
+            <el-button type="primary" @click="setForewarning()" :loading="warningTableLoading">{{ $t('queDing') }}</el-button>
           </span>
           </span>
         </el-dialog>
         </el-dialog>
         <!-- 员工任务数据弹窗 -->
         <!-- 员工任务数据弹窗 -->
         <el-dialog
         <el-dialog
-          title="员工任务数据"
+          :title="$t('yuanGongRenWuShuJu')"
           :visible.sync="showUserTaskDialog"
           :visible.sync="showUserTaskDialog"
           width="80%"
           width="80%"
           top="8.1vh"
           top="8.1vh"
@@ -1541,7 +1541,7 @@
           <div>
           <div>
             <div class="pagingTable">
             <div class="pagingTable">
               <el-table  border :data="userTaskData" highlight-current-row height="50vh" v-loading="userTasklistLoading" style="width: 100%;" >
               <el-table  border :data="userTaskData" highlight-current-row height="50vh" v-loading="userTasklistLoading" style="width: 100%;" >
-                <el-table-column align="center" prop="executorNames" label="执行人" min-width="150">
+                <el-table-column align="center" prop="executorNames" :label="$t('zhi-hang-ren')" min-width="150">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
                     <div>
                     <div>
                       <span v-if="user.userNameNeedTranslate == '1'">
                       <span v-if="user.userNameNeedTranslate == '1'">
@@ -1553,11 +1553,11 @@
                     </div>
                     </div>
                   </template>
                   </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column align="center" prop="taskName" label="任务名称" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="stateValue" label="当前状态" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="startDate" label="开始日期" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="endDate" label="截止日期" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="finishDate" label="完成日期" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="taskName" :label="$t('nameofthetask')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="stateValue" :label="$t('dangQianZhuangTai')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="startDate" :label="$t('time.startDate')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="endDate" :label="$t('expirationdate')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="finishDate" :label="$t('wanChengRiQi')" min-width="150"></el-table-column>
               </el-table>
               </el-table>
             </div>
             </div>
         
         
@@ -1658,15 +1658,15 @@ export default {
       this.$t('pojectbalancesheetincomestatement'),this.$t('customerprojectprofitstatement'),this.$t('projectphasetimesheet'),
       this.$t('pojectbalancesheetincomestatement'),this.$t('customerprojectprofitstatement'),this.$t('projectphasetimesheet'),
       this.$t('statisticsofovertimework'),this.$t('timecostearlywarningtable'),this.$t('personneltimeallocationtable'),
       this.$t('statisticsofovertimework'),this.$t('timecostearlywarningtable'),this.$t('personneltimeallocationtable'),
       this.$t('statisticsofstafffillingintimerate'),this.$t('dailyreporttobereviewedstatistics'),this.$t('statisticsofpersonnelhours'),this.$t('taskgrouptimesheet'),this.$t('projectcostbaselinetable'),
       this.$t('statisticsofstafffillingintimerate'),this.$t('dailyreporttobereviewedstatistics'),this.$t('statisticsofpersonnelhours'),this.$t('taskgrouptimesheet'),this.$t('projectcostbaselinetable'),
-      this.$t('ren-yuan-yue-du-gong-shi-biao'), this.$t('bumenchanyuqingkuang'), this.$t('ge-fen-zu-yu-jie-duan-gong-shi-biao'), '子项目工时成本表', '任务重启表', 'FTE报表', '有效工时率表', '项目分类工时占比表', '分类工时明细表',
-      '员工项目进度表', '分组耗用进度表', '项目耗用进度表', '员工任务进度表', '项目预估工时表','员工任务完成情况表'],
+      this.$t('ren-yuan-yue-du-gong-shi-biao'), this.$t('bumenchanyuqingkuang'), this.$t('ge-fen-zu-yu-jie-duan-gong-shi-biao'), this.$t('ziXiangMuGongShiChengBenBiao'), this.$t('renWuZhongQiBiao'), this.$t('fteBaoBiao'), this.$t('youXiaoGongShiShuaiBiao'), this.$t('xiangMuFenLeiGongShiZhanBiBiao'), this.$t('fenLeiGongShiMingXiBiao'),
+      this.$t('yuanGongXiangMuJinDuBiao'), this.$t('fenZuHaoYongJinDuBiao'), this.$t('xiangMuHaoYongJinDuBiao'), this.$t('yuanGongRenWuJinDuBiao'), this.$t('xiangMuYuGuGongShiBiao'),this.$t('yuanGongRenWuWanChengQingKuangBiao')],
 
 
       shuzArr: [this.$t('projectreport'),this.$t('projectTaskReport'),this.$t('projectcoststatement'),
       shuzArr: [this.$t('projectreport'),this.$t('projectTaskReport'),this.$t('projectcoststatement'),
       this.$t('projectbalancesheet'),this.$t('customerprojectincomestatement'),this.$t('projectphasetimesheet'),
       this.$t('projectbalancesheet'),this.$t('customerprojectincomestatement'),this.$t('projectphasetimesheet'),
       this.$t('statisticsofovertimework'),this.$t('timecostearlywarningtable'),this.$t('personneltimeallocationtable'),
       this.$t('statisticsofovertimework'),this.$t('timecostearlywarningtable'),this.$t('personneltimeallocationtable'),
       this.$t('employeereporttimelinessrate'),this.$t('dailyreporttobereviewedstatistics'),this.$t('statisticsofpersonnelhours'),this.$t('taskgrouptimesheet'),this.$t('projectcostbaselinetable'),
       this.$t('employeereporttimelinessrate'),this.$t('dailyreporttobereviewedstatistics'),this.$t('statisticsofpersonnelhours'),this.$t('taskgrouptimesheet'),this.$t('projectcostbaselinetable'),
-      this.$t('ren-yuan-yue-du-gong-shi-biao'), this.$t('bumenchanyuqingkuang'), this.$t('ge-fen-zu-yu-jie-duan-gong-shi-biao'), '子项目工时成本表', '任务重启表', 'FTE报表','有效工时率表', '项目分类工时占比表', '分类工时明细表',
-      '员工项目进度表', '分组耗用进度表', '项目耗用进度表', '员工任务进度表', '项目预估工时表','员工任务完成情况表'],
+      this.$t('ren-yuan-yue-du-gong-shi-biao'), this.$t('bumenchanyuqingkuang'), this.$t('ge-fen-zu-yu-jie-duan-gong-shi-biao'), this.$t('ziXiangMuGongShiChengBenBiao'), this.$t('renWuZhongQiBiao'), this.$t('fteBaoBiao'),this.$t('youXiaoGongShiShuaiBiao'), this.$t('xiangMuFenLeiGongShiZhanBiBiao'), this.$t('fenLeiGongShiMingXiBiao'),
+      this.$t('yuanGongXiangMuJinDuBiao'), this.$t('fenZuHaoYongJinDuBiao'), this.$t('xiangMuHaoYongJinDuBiao'), this.$t('yuanGongRenWuJinDuBiao'), this.$t('xiangMuYuGuGongShiBiao'),this.$t('yuanGongRenWuWanChengQingKuangBiao')],
 
 
       ins: 10000,
       ins: 10000,
       user: JSON.parse(sessionStorage.user),
       user: JSON.parse(sessionStorage.user),
@@ -1749,19 +1749,19 @@ export default {
       projectCategorySubList:[
       projectCategorySubList:[
           {
           {
               value: 1,
               value: 1,
-              label: '纯软件项目'
+              label: this.$t('softwareproject')
           },
           },
           {
           {
               value: 2,
               value: 2,
-              label: '纯硬件项目'
+              label: this.$t('hardwareproject')
           },
           },
           {
           {
               value: 3,
               value: 3,
-              label: '集成项目'
+              label: this.$t('integrationproject')
           },
           },
           {
           {
               value: 4,
               value: 4,
-              label: '服务项目'
+              label: this.$t('fuWuXiangMu')
           }
           }
       ],
       ],
       projectCategorySubId:'',
       projectCategorySubId:'',
@@ -1973,7 +1973,7 @@ export default {
       res => {
       res => {
           if (res.code == "ok") {
           if (res.code == "ok") {
               this.customName = res.data
               this.customName = res.data
-              this.customNameChoose = "请选择" + res.data
+              this.customNameChoose = this.$t('defaultText.pleaseChoose') + res.data
           } else {
           } else {
               this.$message({
               this.$message({
                 message: res.msg,
                 message: res.msg,
@@ -2122,7 +2122,7 @@ export default {
             if (res.code == "ok") {
             if (res.code == "ok") {
                 var filePath = res.data;
                 var filePath = res.data;
                 const a = document.createElement('a'); // 创建a标签
                 const a = document.createElement('a'); // 创建a标签
-                a.setAttribute('download', '费用报销明细表.xlsx');// download属性
+                a.setAttribute('download', this.$t('feiYongBaoXiaoMingXiBiaoXlsx'));// download属性
                 a.setAttribute('href', filePath);// href链接
                 a.setAttribute('href', filePath);// href链接
                 a.click(); //自执行点击事件
                 a.click(); //自执行点击事件
                 a.remove();
                 a.remove();
@@ -2408,30 +2408,30 @@ export default {
           sl.endDate = this.rangeDatas[1]
           sl.endDate = this.rangeDatas[1]
           sl.projectId = this.proJuctId
           sl.projectId = this.proJuctId
         } else if(this.ins == 17) {
         } else if(this.ins == 17) {
-          fName = '子项目工时成本表' + '.xlsx'
+          fName = this.$t('ziXiangMuGongShiChengBenBiao') + '.xlsx'
           url += "/exportSubProjectTimeCost"
           url += "/exportSubProjectTimeCost"
           sl.startDate = this.rangeDatas[0]
           sl.startDate = this.rangeDatas[0]
           sl.endDate = this.rangeDatas[1]
           sl.endDate = this.rangeDatas[1]
         } else if(this.ins == 18) {
         } else if(this.ins == 18) {
-          fName = '任务重启表' + '.xlsx'
+          fName = this.$t('renWuZhongQiBiao') + '.xlsx'
           url = "/task-restart/exportTaskRestartList"
           url = "/task-restart/exportTaskRestartList"
           sl.startDate = this.rangeDatas[0]
           sl.startDate = this.rangeDatas[0]
           sl.endDate = this.rangeDatas[1]
           sl.endDate = this.rangeDatas[1]
           sl.projectId = this.proJuctId
           sl.projectId = this.proJuctId
           sl.personLiableId = this.userId
           sl.personLiableId = this.userId
         } else if(this.ins == 19) {
         } else if(this.ins == 19) {
-          fName = 'FTE报表' + '.xlsx'
+          fName = this.$t('fteBaoBiao') + '.xlsx'
           url += "/exportFTEData"
           url += "/exportFTEData"
           sl.monthStart= this.monthRange[0]+"-01"
           sl.monthStart= this.monthRange[0]+"-01"
           sl.monthEnd= this.monthRange[1]+"-01"
           sl.monthEnd= this.monthRange[1]+"-01"
           sl.area = this.areaName || null
           sl.area = this.areaName || null
         }else if(this.ins == 20) {
         }else if(this.ins == 20) {
-          fName = '有效工时率表' + '.xlsx'
+          fName = this.$t('youXiaoGongShiShuaiBiao') + '.xlsx'
           url = "/project/exportEffectiveLaborHourRate"
           url = "/project/exportEffectiveLaborHourRate"
           sl.startDate = this.rangeDatas[0]
           sl.startDate = this.rangeDatas[0]
           sl.endDate = this.rangeDatas[1]
           sl.endDate = this.rangeDatas[1]
         }else if(this.ins == 21) {
         }else if(this.ins == 21) {
-          fName = '项目分类工时占比表' + '.xlsx'
+          fName = this.$t('xiangMuFenLeiGongShiZhanBiBiao') + '.xlsx'
           url = "/project/exportMembProjectCateRatio"
           url = "/project/exportMembProjectCateRatio"
           sl.onlyShowWarning=0
           sl.onlyShowWarning=0
           sl.startDate = this.rangeDatas[0]
           sl.startDate = this.rangeDatas[0]
@@ -2439,26 +2439,26 @@ export default {
           sl.departmentId = this.departmentIdArray.length > 0 ? this.departmentIdArray[this.departmentIdArray.length - 1] : ''
           sl.departmentId = this.departmentIdArray.length > 0 ? this.departmentIdArray[this.departmentIdArray.length - 1] : ''
           sl.subUserCustomName = this.subUserCustomName ? this.subUserCustomName: null
           sl.subUserCustomName = this.subUserCustomName ? this.subUserCustomName: null
         } else if(this.ins == 22) {
         } else if(this.ins == 22) {
-          fName = '分类工时明细表' + '.xlsx'
+          fName = this.$t('fenLeiGongShiMingXiBiao') + '.xlsx'
           url = "/report/exportUserWorkTimeByCategory"
           url = "/report/exportUserWorkTimeByCategory"
           sl.categoryId = this.projectSortId
           sl.categoryId = this.projectSortId
           sl.startDate = this.rangeDatas[0]
           sl.startDate = this.rangeDatas[0]
           sl.endDate = this.rangeDatas[1]
           sl.endDate = this.rangeDatas[1]
         } else if(this.ins == 23) {
         } else if(this.ins == 23) {
-          fName = '员工项目进度表' + '.xlsx'
+          fName = this.$t('yuanGongXiangMuJinDuBiao') + '.xlsx'
           url = "/project/exportUserProjectProcessList"
           url = "/project/exportUserProjectProcessList"
           let dept = this.departmentIdArray[this.departmentIdArray.length - 1]
           let dept = this.departmentIdArray[this.departmentIdArray.length - 1]
           this.proJuctId ? sl.projectId = this.proJuctId : ''
           this.proJuctId ? sl.projectId = this.proJuctId : ''
           this.userId ? sl.userId = this.userId : ''
           this.userId ? sl.userId = this.userId : ''
           dept ? sl.deptId = dept : ''
           dept ? sl.deptId = dept : ''
         } else if(this.ins == 24) {
         } else if(this.ins == 24) {
-          fName = '分组耗用进度表' + '.xlsx'
+          fName = this.$t('fenZuHaoYongJinDuBiao') + '.xlsx'
           url = "/project/exportGroupExpendProcessList"
           url = "/project/exportGroupExpendProcessList"
           this.proJuctId ? sl.projectId = this.proJuctId : ''
           this.proJuctId ? sl.projectId = this.proJuctId : ''
           sl.startDate = this.rangeDatas[0]
           sl.startDate = this.rangeDatas[0]
           sl.endDate = this.rangeDatas[1]
           sl.endDate = this.rangeDatas[1]
         } else if(this.ins == 25) {
         } else if(this.ins == 25) {
-          fName = '项目耗用进度表' + '.xlsx'
+          fName = this.$t('xiangMuHaoYongJinDuBiao') + '.xlsx'
           url = "/project/exportProjectExpendProcessList"
           url = "/project/exportProjectExpendProcessList"
           sl.startDate = this.rangeDatas[0]
           sl.startDate = this.rangeDatas[0]
           sl.endDate = this.rangeDatas[1]
           sl.endDate = this.rangeDatas[1]
@@ -2466,7 +2466,7 @@ export default {
           this.userId ? sl.userId = this.userId : ''
           this.userId ? sl.userId = this.userId : ''
           this.projectSortIdTwo ? sl.categoryId = this.projectSortIdTwo : ''
           this.projectSortIdTwo ? sl.categoryId = this.projectSortIdTwo : ''
         } else if(this.ins == 26) {
         } else if(this.ins == 26) {
-          fName = '员工任务进度表' + '.xlsx'
+          fName = this.$t('yuanGongRenWuJinDuBiao') + '.xlsx'
           url = "/project/exportUserTaskProcessList"
           url = "/project/exportUserTaskProcessList"
           let dept = this.departmentIdArray[this.departmentIdArray.length - 1]
           let dept = this.departmentIdArray[this.departmentIdArray.length - 1]
           this.proJuctId ? sl.projectId = this.proJuctId : ''
           this.proJuctId ? sl.projectId = this.proJuctId : ''
@@ -2475,11 +2475,11 @@ export default {
           sl.startDate = this.rangeDatas[0]
           sl.startDate = this.rangeDatas[0]
           sl.endDate = this.rangeDatas[1]
           sl.endDate = this.rangeDatas[1]
         }else if(this.ins == 27) {
         }else if(this.ins == 27) {
-          fName = '项目预估工时表' + '.xlsx'
+          fName = this.$t('xiangMuYuGuGongShiBiao') + '.xlsx'
           url = "/project/exportProjectEstimatedWorkTime"
           url = "/project/exportProjectEstimatedWorkTime"
           this.proJuctId ? sl.projectId = this.proJuctId : ''
           this.proJuctId ? sl.projectId = this.proJuctId : ''
         }else if(this.ins == 28) {
         }else if(this.ins == 28) {
-          fName = '员工任务完成情况表' + '.xlsx'
+          fName = this.$t('yuanGongRenWuWanChengQingKuangBiao') + '.xlsx'
           url = "/task/exportUserTaskCompleteDetail"
           url = "/task/exportUserTaskCompleteDetail"
           let dept = this.departmentIdArray[this.departmentIdArray.length - 1]
           let dept = this.departmentIdArray[this.departmentIdArray.length - 1]
           this.userId ? sl.userId = this.userId : ''
           this.userId ? sl.userId = this.userId : ''
@@ -2519,7 +2519,7 @@ export default {
             res => {
             res => {
                 if (res.code == "ok") {
                 if (res.code == "ok") {
                     var filePath = res.data;
                     var filePath = res.data;
-                    var fName = this.$t('personnelfillingtimelyratestatistics') + '(' + this.quarterParameter.year + this.$t('di') + this.quarterParameter.quarter  + '季度).xlsx'
+                    var fName = this.$t('personnelfillingtimelyratestatistics') + '(' + this.quarterParameter.year + this.$t('di') + this.quarterParameter.quarter  + this.$t('jiDuXlsx')
                     const a = document.createElement('a'); // 创建a标签
                     const a = document.createElement('a'); // 创建a标签
                     a.setAttribute('download', fName);// download属性
                     a.setAttribute('download', fName);// download属性
                     a.setAttribute('href', filePath);// href链接
                     a.setAttribute('href', filePath);// href链接
@@ -2601,7 +2601,7 @@ export default {
     },
     },
     // 获取人员自定义 员工类型下的下拉数据
     // 获取人员自定义 员工类型下的下拉数据
     getSubUserCustom() {
     getSubUserCustom() {
-      this.http.post('/sub-user-custom/listWithName',{userCustomName:'员工类型'},
+      this.http.post('/sub-user-custom/listWithName',{userCustomName:this.$t('yuanGongLeiXing')},
       res => {
       res => {
           if (res.code == "ok") {
           if (res.code == "ok") {
               this.subUserCustom=res.data
               this.subUserCustom=res.data
@@ -2689,7 +2689,7 @@ export default {
         const sums = [];
         const sums = [];
         columns.forEach((column, index) => {
         columns.forEach((column, index) => {
           if (index === 0) {
           if (index === 0) {
-            sums[index] = '总工时';
+            sums[index] = this.$t('other.totalworkinghours');
             return;
             return;
           }
           }
           const values = data.map(item => Number(item[column.property]));
           const values = data.map(item => Number(item[column.property]));
@@ -3886,7 +3886,7 @@ export default {
       let { categoryList, userList } = data
       let { categoryList, userList } = data
       categoryList.push({
       categoryList.push({
         id: 999999,
         id: 999999,
-        name: '未分类'
+        name: this.$t('weiFenLei')
       })
       })
       this.listLoading = false
       this.listLoading = false
       this.projectCateRatioList = {
       this.projectCateRatioList = {
@@ -3961,9 +3961,9 @@ export default {
     async getProjectSort() {
     async getProjectSort() {
       let { data } = await this.postData('/project-category/list', {})
       let { data } = await this.postData('/project-category/list', {})
       let dataList = data || []
       let dataList = data || []
-      dataList.push({id: 0, name: '未分类'})
+      dataList.push({id: 0, name: this.$t('weiFenLei')})
       this.projectSortList = dataList
       this.projectSortList = dataList
-      this.projectSortListTwo = dataList.filter((item) => item.name != '报价项目' &&  item.name != '售后报价项目' && item.name != '研发项目' && item.name != '未分类')
+      this.projectSortListTwo = dataList.filter((item) => item.name != this.$t('baoJiaXiangMu') &&  item.name != this.$t('shouHouBaoJiaXiangMu') && item.name != this.$t('yanFaXiangMu') && item.name != this.$t('weiFenLei'))
       this.projectSortId = dataList[0].id
       this.projectSortId = dataList[0].id
       this.projectSortName = dataList[0].name
       this.projectSortName = dataList[0].name
     },
     },

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/customer/list.vue

@@ -16,7 +16,7 @@
                 <el-form-item style="float:right;">
                 <el-form-item style="float:right;">
                     <el-link type="primary" :underline="false" @click="handleAdd(-1,null)">{{ $t('newcustomer') }}</el-link>
                     <el-link type="primary" :underline="false" @click="handleAdd(-1,null)">{{ $t('newcustomer') }}</el-link>
                     <el-link type="primary" :underline="false" @click="intocustomerRatio">{{ $t('importingCustomersinBatches') }}</el-link>
                     <el-link type="primary" :underline="false" @click="intocustomerRatio">{{ $t('importingCustomersinBatches') }}</el-link>
-                    <el-link type="primary" :underline="false" @click="exportData()">{{'导出'}}</el-link>
+                    <el-link type="primary" :underline="false" @click="exportData()">{{ $t('export.export') }}</el-link>
                 </el-form-item>
                 </el-form-item>
             </el-form>
             </el-form>
         </el-col>
         </el-col>
@@ -582,7 +582,7 @@
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         var filePath = res.data;
                         var filePath = res.data;
                         const a = document.createElement('a'); // 创建a标签
                         const a = document.createElement('a'); // 创建a标签
-                        a.setAttribute('download', '客户列表.xlsx');// download属性
+                        a.setAttribute('download', this.$t('keHuLieBiaoXlsx'));// download属性
                         a.setAttribute('href', filePath);// href链接
                         a.setAttribute('href', filePath);// href链接
                         a.click(); //自执行点击事件
                         a.click(); //自执行点击事件
                         a.remove();
                         a.remove();

+ 32 - 32
fhKeeper/formulahousekeeper/timesheet/src/views/desktop/detail.vue

@@ -4,14 +4,14 @@
     <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
     <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
       <el-form :inline="true">
       <el-form :inline="true">
         <el-form-item>
         <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>
         <el-form-item class="divLine"></el-form-item>
         <el-form-item class="divLine"></el-form-item>
         <el-form-item>
         <el-form-item>
           <span class="workName">{{uName}} / {{date}}</span>
           <span class="workName">{{uName}} / {{date}}</span>
         </el-form-item>
         </el-form-item>
         <el-form-item style="float:right;">
         <el-form-item style="float:right;">
-          今日工作时长:
+          {{ $t('jinRiGongZuoShiChang') }} 
           <span class="workHours">{{uHours}}h</span>
           <span class="workHours">{{uHours}}h</span>
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
@@ -139,7 +139,7 @@ export default {
       this.myChart = myChart;
       this.myChart = myChart;
       var option = {
       var option = {
         title: {
         title: {
-          text: "工作时长分配",
+          text: this.$t('gongZuoShiChangFenPei'),
           left: "left"
           left: "left"
         },
         },
         tooltip: {
         tooltip: {
@@ -153,17 +153,17 @@ export default {
           top: 30,
           top: 30,
           bottom: 20,
           bottom: 20,
           data: [
           data: [
-            "研发",
-            "上网",
-            "文档",
-            "设计",
+            this.$t('yanFa'),
+            this.$t('shangWang'),
+            this.$t('wenDang'),
+            this.$t('sheJi'),
             // "美工",
             // "美工",
             // "运营",
             // "运营",
-            "看小说",
-            "影视娱乐",
+            this.$t('kanXiaoShuo'),
+            this.$t('yingShiYuLe'),
             // "听音乐",
             // "听音乐",
-            "聊天",
-            "其他工作"
+            this.$t('liaoTian'),
+            this.$t('qiTaGongZuo')
           ]
           ]
         },
         },
         toolbox: {
         toolbox: {
@@ -181,19 +181,19 @@ export default {
         },
         },
         series: [
         series: [
           {
           {
-            name: "时长(单位:h)",
+            name: this.$t('shiChangDanWeiH'),
             type: "pie",
             type: "pie",
             radius: [30, 110],
             radius: [30, 110],
             roseType: "area",
             roseType: "area",
             data: [
             data: [
-              { value: (this.timeList[1] / 3600).toFixed(2), name: "研发" },
-              { value: (this.timeList[2] / 3600).toFixed(2), name: "上网" },
-              { value: (this.timeList[3] / 3600).toFixed(2), name: "文档" },
-              { value: (this.timeList[4] / 3600).toFixed(2), name: "设计" },
-              { value: (this.timeList[7] / 3600).toFixed(2), name: "看小说" },
-              { value: (this.timeList[8] / 3600).toFixed(2), name: "影视娱乐" },
-              { value: (this.timeList[10] / 3600).toFixed(2), name: "聊天" },
-              { value: (this.timeList[0] / 3600).toFixed(2), name: "其他工作" }
+              { value: (this.timeList[1] / 3600).toFixed(2), name: this.$t('yanFa') },
+              { value: (this.timeList[2] / 3600).toFixed(2), name: this.$t('shangWang') },
+              { value: (this.timeList[3] / 3600).toFixed(2), name: this.$t('wenDang') },
+              { value: (this.timeList[4] / 3600).toFixed(2), name: this.$t('sheJi') },
+              { value: (this.timeList[7] / 3600).toFixed(2), name: this.$t('kanXiaoShuo') },
+              { value: (this.timeList[8] / 3600).toFixed(2), name: this.$t('yingShiYuLe') },
+              { value: (this.timeList[10] / 3600).toFixed(2), name: this.$t('liaoTian') },
+              { value: (this.timeList[0] / 3600).toFixed(2), name: this.$t('qiTaGongZuo') }
             ]
             ]
           }
           }
         ]
         ]
@@ -209,29 +209,29 @@ export default {
     converType(type) {
     converType(type) {
       switch (type) {
       switch (type) {
         case 0:
         case 0:
-          return "其他工作";
+          return this.$t('qiTaGongZuo');
         case 1:
         case 1:
-          return "研发";
+          return this.$t('yanFa');
         case 2:
         case 2:
-          return "上网";
+          return this.$t('shangWang');
         case 3:
         case 3:
-          return "文档";
+          return this.$t('wenDang');
         case 4:
         case 4:
-          return "设计";
+          return this.$t('sheJi');
         case 5:
         case 5:
-          return "美工";
+          return this.$t('meiGong');
         case 6:
         case 6:
-          return "运营";
+          return this.$t('yunYing');
         case 7:
         case 7:
-          return "看小说";
+          return this.$t('kanXiaoShuo');
         case 8:
         case 8:
-          return "影视娱乐";
+          return this.$t('yingShiYuLe');
         case 9:
         case 9:
-          return "听音乐";
+          return this.$t('tingYinLe');
         case 10:
         case 10:
-          return "聊天";
+          return this.$t('liaoTian');
         default:
         default:
-          return "未知";
+          return this.$t('weiZhi');
       }
       }
     }
     }
   },
   },

+ 17 - 17
fhKeeper/formulahousekeeper/timesheet/src/views/desktop/index.vue

@@ -16,12 +16,12 @@
                         @change="getDesktopList"
                         @change="getDesktopList"
                         :clearable="false"
                         :clearable="false"
                         type="date"
                         type="date"
-                        placeholder="选择日期"
+                        :placeholder="this.$t('optiondate')"
                     ></el-date-picker>
                     ></el-date-picker>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item style="float:right;">
                 <el-form-item style="float:right;">
-                    <span style="color:#aaa;font-size:12px;">(员工安装客户端,领导即可查看工作桌面远程监管)</span>
-                    <el-link type="primary" :underline="false" href="http://gsgj.ttkuaiban.com/download.html" target="_blank">客户端下载</el-link>
+                    <span style="color:#aaa;font-size:12px;">{{ $t('yuanGongAnZhuangKeHuDuanLingDaoJiKeChaKanGongZuoZhuoMianYuanChengJianGuan') }}</span>
+                    <el-link type="primary" :underline="false" href="http://gsgj.ttkuaiban.com/download.html" target="_blank">{{ $t('keHuDuanXiaZai') }}</el-link>
                 </el-form-item>
                 </el-form-item>
             </el-form>
             </el-form>
         </el-col>
         </el-col>
@@ -29,7 +29,7 @@
         <!-- 卡片列表 -->
         <!-- 卡片列表 -->
         <div>
         <div>
             <el-col :span="24" v-if="desktopList.length == 0" style="padding: 200px 0;text-align:center;cursor:pointer">
             <el-col :span="24" v-if="desktopList.length == 0" style="padding: 200px 0;text-align:center;cursor:pointer">
-                <el-link :underline="false" type="primary" @click="getHavePic">今日暂无截图,点击查看近期</el-link>
+                <el-link :underline="false" type="primary" @click="getHavePic">{{ $t('jinRiZanWuJieTuDianJiChaKanJinQi') }}</el-link>
             </el-col>
             </el-col>
             <el-col :span="6" v-for="(item, index) in desktopList" :key="index" class="one_div">
             <el-col :span="6" v-for="(item, index) in desktopList" :key="index" class="one_div">
                 <el-card :body-style="{ padding: '0px' }" shadow="hover" class="one_card">
                 <el-card :body-style="{ padding: '0px' }" shadow="hover" class="one_card">
@@ -41,7 +41,7 @@
                     </el-image>
                     </el-image>
                     <div :id="'over'+index" class="over">
                     <div :id="'over'+index" class="over">
                     <el-button type="primary" plain @click.native="jumpTo(item.id)">
                     <el-button type="primary" plain @click.native="jumpTo(item.id)">
-                        <i class="fa fa-link"></i> 所有截图
+                        <i class="fa fa-link"></i> {{ $t('suoYouJieTu') }}
                     </el-button>
                     </el-button>
                     </div>
                     </div>
                 </div>
                 </div>
@@ -149,29 +149,29 @@
             converType(type) {
             converType(type) {
                 switch (type) {
                 switch (type) {
                     case 0:
                     case 0:
-                    return "其他工作";
+                    return this.$t('qiTaGongZuo');
                     case 1:
                     case 1:
-                    return "研发";
+                    return this.$t('yanFa');
                     case 2:
                     case 2:
-                    return "上网";
+                    return this.$t('shangWang');
                     case 3:
                     case 3:
-                    return "文档";
+                    return this.$t('wenDang');
                     case 4:
                     case 4:
-                    return "设计";
+                    return this.$t('sheJi');
                     case 5:
                     case 5:
-                    return "美工";
+                    return this.$t('meiGong');
                     case 6:
                     case 6:
-                    return "运营";
+                    return this.$t('yunYing');
                     case 7:
                     case 7:
-                    return "看小说";
+                    return this.$t('kanXiaoShuo');
                     case 8:
                     case 8:
-                    return "影视娱乐";
+                    return this.$t('yingShiYuLe');
                     case 9:
                     case 9:
-                    return "听音乐";
+                    return this.$t('tingYinLe');
                     case 10:
                     case 10:
-                    return "聊天";
+                    return this.$t('liaoTian');
                     default:
                     default:
-                    return "未知";
+                    return this.$t('weiZhi');
                 }
                 }
             }
             }
         },
         },

+ 17 - 17
fhKeeper/formulahousekeeper/timesheet/src/views/desktop/unusual.vue

@@ -2,7 +2,7 @@
   <section>
   <section>
     <!--工具条-->
     <!--工具条-->
     <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
     <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
-      <div class="nowTime">非工作情况统计</div>
+      <div class="nowTime">{{ $t('feiGongZuoQingKuangTongJi') }}</div>
     </el-col>
     </el-col>
 
 
     <!--列表-->
     <!--列表-->
@@ -14,11 +14,11 @@
       style="width: 100%;"
       style="width: 100%;"
     >
     >
         <el-table-column type="index" width="60"></el-table-column>
         <el-table-column type="index" width="60"></el-table-column>
-        <el-table-column prop="name" label="姓名" width="140" sortable></el-table-column>
-        <el-table-column label="行为">
+        <el-table-column prop="name" :label="$t('lable.name')" width="140" sortable></el-table-column>
+        <el-table-column :label="$t('hangWei')">
             <template slot-scope="scope">{{converType(scope.row.type+1)}}</template>
             <template slot-scope="scope">{{converType(scope.row.type+1)}}</template>
         </el-table-column>
         </el-table-column>
-        <el-table-column label="图片" width="200">
+        <el-table-column :label="$t('tuPian')" width="200">
             <template slot-scope="scope">
             <template slot-scope="scope">
                 <el-image :src="scope.row.picUrl" :preview-src-list="getSrcList(index)">
                 <el-image :src="scope.row.picUrl" :preview-src-list="getSrcList(index)">
                     <div slot="error" class="image-slot">
                     <div slot="error" class="image-slot">
@@ -27,8 +27,8 @@
                 </el-image>
                 </el-image>
             </template>
             </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="time" label="时间" width="140" sortable></el-table-column>
-        <el-table-column prop="date" label="日期" width="140" sortable></el-table-column>
+        <el-table-column prop="time" :label="$t('time.times')" width="140" sortable></el-table-column>
+        <el-table-column prop="date" :label="$t('weekDay.date')" width="140" sortable></el-table-column>
     </el-table>
     </el-table>
 
 
     <!--工具条-->
     <!--工具条-->
@@ -109,27 +109,27 @@ export default {
     converType(type) {
     converType(type) {
       switch (type) {
       switch (type) {
         case 0:
         case 0:
-          return "其他工作";
+          return this.$t('qiTaGongZuo');
         case 1:
         case 1:
-          return "研发";
+          return this.$t('yanFa');
         case 2:
         case 2:
-          return "上网";
+          return this.$t('shangWang');
         case 3:
         case 3:
-          return "文档";
+          return this.$t('wenDang');
         case 4:
         case 4:
-          return "设计";
+          return this.$t('sheJi');
         case 5:
         case 5:
-          return "美工";
+          return this.$t('meiGong');
         case 6:
         case 6:
-          return "运营";
+          return this.$t('yunYing');
         case 7:
         case 7:
-          return "看小说";
+          return this.$t('kanXiaoShuo');
         case 8:
         case 8:
-          return "影视娱乐";
+          return this.$t('yingShiYuLe');
         case 9:
         case 9:
-          return "听音乐";
+          return this.$t('tingYinLe');
         default:
         default:
-          return "未知";
+          return this.$t('weiZhi');
       }
       }
     },
     },
     getSrcList(index) {
     getSrcList(index) {

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

@@ -50,7 +50,7 @@
     <div class="contents">
     <div class="contents">
       <div v-if="!displayTable" class="headine" ref="headine">
       <div v-if="!displayTable" class="headine" ref="headine">
         <!-- <h3 ref="headHe" style="padding-left: 220px">{{shuz[ins]}}</h3> -->
         <!-- <h3 ref="headHe" style="padding-left: 220px">{{shuz[ins]}}</h3> -->
-        <h3 ref="headHe" style="padding-left: 220px">费用填报</h3>
+        <h3 ref="headHe" style="padding-left: 220px">{{ $t('expenses') }}</h3>
         <p style="float: right;margin-right: 25px;"><el-button type="primary" @click="submits" size="mini">{{
         <p style="float: right;margin-right: 25px;"><el-button type="primary" @click="submits" size="mini">{{
           $t('btn.submit') }}</el-button></p>
           $t('btn.submit') }}</el-button></p>
         <p style="float: right;margin-right: 25px;"><el-button type="primary" @click="submitUpload" size="mini">{{
         <p style="float: right;margin-right: 25px;"><el-button type="primary" @click="submitUpload" size="mini">{{
@@ -58,7 +58,7 @@
         <p style="float: right;margin-right: 25px;"><el-button type="primary" @click="customTypeOp" size="mini"
         <p style="float: right;margin-right: 25px;"><el-button type="primary" @click="customTypeOp" size="mini"
             v-if="permissions.costAll">{{ $t('expensetypemanagement') }}</el-button></p>
             v-if="permissions.costAll">{{ $t('expensetypemanagement') }}</el-button></p>
         <p style="float: right;margin-right: 25px;"><el-button type="primary" @click="expenseTypeOp" size="mini"
         <p style="float: right;margin-right: 25px;"><el-button type="primary" @click="expenseTypeOp" size="mini"
-            v-if="permissions.costAll">费用主类型管理</el-button></p>
+            v-if="permissions.costAll">{{ $t('feiYongZhuLeiXingGuanLi') }}</el-button></p>
       </div>
       </div>
       <!-- 上面部分 -->
       <!-- 上面部分 -->
       <div ref="staff" style="margin: 20px 20px 0 220px; width: 81.5%">
       <div ref="staff" style="margin: 20px 20px 0 220px; width: 81.5%">
@@ -95,16 +95,16 @@
                 <el-input v-model="addForm.ticketNum" style="width: 150px"></el-input>
                 <el-input v-model="addForm.ticketNum" style="width: 150px"></el-input>
               </el-form-item>
               </el-form-item>
               <!-- 费用主类型 -->
               <!-- 费用主类型 -->
-              <el-form-item :label="'费用主类型'">
+              <el-form-item :label="$t('feiYongZhuLeiXing')">
                 <el-select v-model="expenseMainTypeValue" style="width: 150px" @change="this.getExpList">
                 <el-select v-model="expenseMainTypeValue" style="width: 150px" @change="this.getExpList">
                   <el-option v-for="item in expenseMainTypes" :key="item.id" :label="item.name"
                   <el-option v-for="item in expenseMainTypes" :key="item.id" :label="item.name"
                     :value="item.id"></el-option>
                     :value="item.id"></el-option>
                 </el-select>
                 </el-select>
               </el-form-item>
               </el-form-item>
               <!-- 第一审核人 -->
               <!-- 第一审核人 -->
-              <el-form-item label="第一审核人" v-if="auditTypeItem.auditType == 2">
+              <el-form-item :label="$t('di-yi-shen-he-ren')" v-if="auditTypeItem.auditType == 2">
                 <el-select v-if="user.userNameNeedTranslate != '1'" v-model="addForm.firstCheckerId"
                 <el-select v-if="user.userNameNeedTranslate != '1'" v-model="addForm.firstCheckerId"
-                  :placeholder="'请选择审核人'" style="width: 150px"
+                  :placeholder="$t('message.Pleaseselectareviewer')" style="width: 150px"
                   filterable="true">
                   filterable="true">
                   <span v-for="(item, index) in usersNoInfo" :key="index">
                   <span v-for="(item, index) in usersNoInfo" :key="index">
                     <el-option :label="item.name" :value="item.id"></el-option>
                     <el-option :label="item.name" :value="item.id"></el-option>
@@ -116,9 +116,9 @@
                   @selectCal="selectCal"></selectCat>
                   @selectCal="selectCal"></selectCat>
               </el-form-item>
               </el-form-item>
               <!-- 第一审核人 -->
               <!-- 第一审核人 -->
-              <el-form-item label="第二审核人" v-if="auditTypeItem.auditType == 2">
+              <el-form-item :label="$t('di-er-shen-he-ren')" v-if="auditTypeItem.auditType == 2">
                 <el-select v-if="user.userNameNeedTranslate != '1'" v-model="addForm.secondCheckerId"
                 <el-select v-if="user.userNameNeedTranslate != '1'" v-model="addForm.secondCheckerId"
-                  :placeholder="'请选择审核人'" style="width: 150px"
+                  :placeholder="$t('message.Pleaseselectareviewer')" style="width: 150px"
                   filterable="true">
                   filterable="true">
                   <span v-for="(item, index) in usersNoInfo" :key="index">
                   <span v-for="(item, index) in usersNoInfo" :key="index">
                     <el-option :label="item.name" :value="item.id"></el-option>
                     <el-option :label="item.name" :value="item.id"></el-option>
@@ -229,10 +229,10 @@
                 -->
                 -->
                   <div>
                   <div>
                     <div v-if="scope.row.pic && scope.row.pic.length > 0">
                     <div v-if="scope.row.pic && scope.row.pic.length > 0">
-                      <el-button size="small" @click="viewDetailsImage(scope.$index)">查看详情</el-button>
+                      <el-button size="small" @click="viewDetailsImage(scope.$index)">{{ $t('Checkthedetails') }}</el-button>
                     </div>
                     </div>
                     <div v-else>
                     <div v-else>
-                      <el-button type="primary" size="small" @click="performCustomization(scope.$index)" :loading="listLoading">点击上传</el-button>
+                      <el-button type="primary" size="small" @click="performCustomization(scope.$index)" :loading="listLoading">{{ $t('clickupload') }}</el-button>
                     </div>
                     </div>
                   </div>
                   </div>
                 </template>
                 </template>
@@ -252,7 +252,7 @@
     </div>
     </div>
 
 
     <!-- 多张图片查看详情 -->
     <!-- 多张图片查看详情 -->
-    <el-dialog title="查看详情" :visible.sync="dialogVisibleImage" width="745px" :before-close="handleClose">
+    <el-dialog :title="$t('Checkthedetails')" :visible.sync="dialogVisibleImage" width="745px" :before-close="handleClose">
       <div class="dayImge">
       <div class="dayImge">
         <div class="dayImgeItem" v-if="dialogVisibleImageList">
         <div class="dayImgeItem" v-if="dialogVisibleImageList">
           <viewer :images="dialogVisibleImageList" v-viewer="viewerOptions" class="dayImgeItem">
           <viewer :images="dialogVisibleImageList" v-viewer="viewerOptions" class="dayImgeItem">
@@ -304,8 +304,8 @@
                   style="width: 120px"></el-input>
                   style="width: 120px"></el-input>
               </el-form-item>
               </el-form-item>
               <!-- 费用主类型 -->
               <!-- 费用主类型 -->
-              <el-form-item :label="'费用主类型'">
-                <el-select size="small" v-model="queryExpenseMainType" style="width: 150px" clearable placeholder="全部类型">
+              <el-form-item :label="$t('feiYongZhuLeiXing')">
+                <el-select size="small" v-model="queryExpenseMainType" style="width: 150px" clearable :placeholder="$t('typesof')">
                   <el-option v-for="item in expenseMainTypes" :key="item.id" :label="item.name"
                   <el-option v-for="item in expenseMainTypes" :key="item.id" :label="item.name"
                     :value="item.id"></el-option>
                     :value="item.id"></el-option>
                   <!-- <el-option :label="$t('yi-ban')" :value="0"></el-option>
                   <!-- <el-option :label="$t('yi-ban')" :value="0"></el-option>
@@ -313,16 +313,16 @@
                 <el-option :label="$t('wai-bao')" :value="2"></el-option> -->
                 <el-option :label="$t('wai-bao')" :value="2"></el-option> -->
                 </el-select>
                 </el-select>
               </el-form-item>
               </el-form-item>
-              <el-form-item :label="'发放状态'" v-if="permissions.costExpenseRelease">
+              <el-form-item :label="$t('faFangZhuangTai')" v-if="permissions.costExpenseRelease">
                 <el-select v-model="sendState" size="small" style="width: 150px"
                 <el-select v-model="sendState" size="small" style="width: 150px"
                   clearable>
                   clearable>
-                  <el-option :label="'未发放'" :value="0"></el-option>
-                  <el-option :label="'已发放'" :value="1"></el-option>
+                  <el-option :label="$t('weiFaFang')" :value="0"></el-option>
+                  <el-option :label="$t('yiFaFang')" :value="1"></el-option>
                 </el-select>
                 </el-select>
               </el-form-item>
               </el-form-item>
               <!-- 填报日期 -->
               <!-- 填报日期 -->
               <div style="display: inline-block;">
               <div style="display: inline-block;">
-                <el-form-item :label="'项目'">
+                <el-form-item :label="$t('other.project')">
                   <el-select v-model="selectProject" size="small" style="width: 162px" clearable filterable>
                   <el-select v-model="selectProject" size="small" style="width: 162px" clearable filterable>
                     <el-option v-for="item in projectList" :label="item.projectName" :value="item.id" :key="item.id">
                     <el-option v-for="item in projectList" :label="item.projectName" :value="item.id" :key="item.id">
                       <span style="float: left">{{ item.projectName }}</span>
                       <span style="float: left">{{ item.projectName }}</span>
@@ -340,13 +340,13 @@
                   <el-button @click="getList" size="small">{{ $t('find') }}</el-button>
                   <el-button @click="getList" size="small">{{ $t('find') }}</el-button>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item v-if="currentClick == '2-1'">
                 <el-form-item v-if="currentClick == '2-1'">
-                  <el-button @click="exportDocument()" size="small">单据导出</el-button>
+                  <el-button @click="exportDocument()" size="small">{{ $t('danJuDaoChu') }}</el-button>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item v-if="currentClick == '2-1' && permissions.costExpenseRelease">
                 <el-form-item v-if="currentClick == '2-1' && permissions.costExpenseRelease">
-                  <el-button @click="documentIssuance(1)" size="small">发放</el-button>
+                  <el-button @click="documentIssuance(1)" size="small">{{ $t('faFang') }}</el-button>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item v-if="currentClick == '2-1' && permissions.costExpenseRelease">
                 <el-form-item v-if="currentClick == '2-1' && permissions.costExpenseRelease">
-                  <el-button @click="documentIssuance(0)" size="small">取消发放</el-button>
+                  <el-button @click="documentIssuance(0)" size="small">{{ $t('quXiaoFaFang') }}</el-button>
                 </el-form-item>
                 </el-form-item>
                 <!-- <span>审核模式:{{ auditTypeItem.auditType }}</span> -->
                 <!-- <span>审核模式:{{ auditTypeItem.auditType }}</span> -->
               </div>
               </div>
@@ -397,11 +397,11 @@
                 <span v-if="scope.row.status == 0 || scope.row.status == 3">{{ statusTxt[scope.row.status] }}</span>
                 <span v-if="scope.row.status == 0 || scope.row.status == 3">{{ statusTxt[scope.row.status] }}</span>
               </template>
               </template>
             </el-table-column>
             </el-table-column>
-            <el-table-column prop="reviewProcess" :label="'审核流程'" width="180" v-if="auditTypeItem.auditType == 2">
+            <el-table-column prop="reviewProcess" :label="$t('title.reviewProcess')" width="180" v-if="auditTypeItem.auditType == 2">
               <template slot-scope="scope">
               <template slot-scope="scope">
-                <span v-if="scope.row.reviewProcess == 0">待第一审核人审核</span>
-                <span v-if="scope.row.reviewProcess == 1">待第二审核人审核</span>
-                <span v-if="scope.row.reviewProcess == 2">审核完成</span>
+                <span v-if="scope.row.reviewProcess == 0">{{ $t('daiDiYiShenHeRenShenHe') }}</span>
+                <span v-if="scope.row.reviewProcess == 1">{{ $t('daiDiErShenHeRenShenHe') }}</span>
+                <span v-if="scope.row.reviewProcess == 2">{{ $t('shenHeWanCheng') }}</span>
               </template>
               </template>
             </el-table-column>
             </el-table-column>
             <!-- <el-table-column prop="denyReason" :label="$t('dismissreason')" width="180">
             <!-- <el-table-column prop="denyReason" :label="$t('dismissreason')" width="180">
@@ -409,13 +409,13 @@
                   <span style="font-size:12px;">{{scope.row.denyReason}}</span>
                   <span style="font-size:12px;">{{scope.row.denyReason}}</span>
                 </template>
                 </template>
               </el-table-column> -->
               </el-table-column> -->
-            <el-table-column prop="sendState" label="发放状态" width="80" v-if="permissions.costExpenseRelease">
+            <el-table-column prop="sendState" :label="$t('faFangZhuangTai')" width="80" v-if="permissions.costExpenseRelease">
               <template slot-scope="scope">
               <template slot-scope="scope">
-                <span :style="`color: ${scope.row.sendState == 0 ? '#FFA500' : ''}`">{{ scope.row.sendState == 1 ? '已发放' :
+                <span :style="`color: ${scope.row.sendState == 0 ? '#FFA500' : ''}`">{{ scope.row.sendState == 1 ? $t('yiFaFang') :
                   '未发放' }}</span>
                   '未发放' }}</span>
               </template>
               </template>
             </el-table-column>
             </el-table-column>
-            <el-table-column prop="payWayName" label="支付方式" width="80" v-if="permissions.costExpenseRelease">
+            <el-table-column prop="payWayName" :label="$t('zhiFuFangShi')" width="80" v-if="permissions.costExpenseRelease">
             </el-table-column>
             </el-table-column>
             <el-table-column fixed="right" :label="$t('operation')" :width="isAuditList ? 220 : 160">
             <el-table-column fixed="right" :label="$t('operation')" :width="isAuditList ? 220 : 160">
               <template slot-scope="scope">
               <template slot-scope="scope">
@@ -438,7 +438,7 @@
                       $t('btn.rejected') }}</el-button>
                       $t('btn.rejected') }}</el-button>
                   </div>
                   </div>
                   <div v-if="auditTypeItem.auditType == 1">
                   <div v-if="auditTypeItem.auditType == 1">
-                    <el-button size="mini" @click.stop.native="approve(scope.row)">审核</el-button>
+                    <el-button size="mini" @click.stop.native="approve(scope.row)">{{ $t('other.audit') }}</el-button>
                   </div>
                   </div>
                 </div>
                 </div>
               </template>
               </template>
@@ -455,7 +455,7 @@
       </div>
       </div>
     </div>
     </div>
     <!-- 我的单据报销展示 -->
     <!-- 我的单据报销展示 -->
-    <el-dialog title="报销凭证详情" :visible.sync="dialog" width="1000px">
+    <el-dialog :title="$t('detailsofReimbursementvoucher')" :visible.sync="dialog" width="1000px">
       <!-- 内容主体 -->
       <!-- 内容主体 -->
       <div class="informant"><!--  报销人 -->
       <div class="informant"><!--  报销人 -->
         <el-form :model="ParticularsList" label-width="100px">
         <el-form :model="ParticularsList" label-width="100px">
@@ -477,9 +477,9 @@
 
 
           </el-form-item>
           </el-form-item>
           <!-- 第一审核人 -->
           <!-- 第一审核人 -->
-          <el-form-item label="第一审核人" v-if="auditTypeItem.auditType == 2">
+          <el-form-item :label="$t('di-yi-shen-he-ren')" v-if="auditTypeItem.auditType == 2">
             <el-select v-if="user.userNameNeedTranslate != '1'" v-model="ParticularsList.firstCheckerId"
             <el-select v-if="user.userNameNeedTranslate != '1'" v-model="ParticularsList.firstCheckerId"
-              :placeholder="'请选择审核人'" style="width: 150px" :disabled="ParticularsList.reviewProcess > 0"
+              :placeholder="$t('message.Pleaseselectareviewer')" style="width: 150px" :disabled="ParticularsList.reviewProcess > 0"
               filterable="true">
               filterable="true">
               <span v-for="(item, index) in users" :key="index">
               <span v-for="(item, index) in users" :key="index">
                 <el-option :label="item.name" :value="item.id"></el-option>
                 <el-option :label="item.name" :value="item.id"></el-option>
@@ -491,9 +491,9 @@
               @selectCal="selectCal"></selectCat>
               @selectCal="selectCal"></selectCat>
           </el-form-item>
           </el-form-item>
           <!-- 第二审核人 -->
           <!-- 第二审核人 -->
-          <el-form-item label="第二审核人" v-if="auditTypeItem.auditType == 2">
+          <el-form-item :label="$t('di-er-shen-he-ren')" v-if="auditTypeItem.auditType == 2">
             <el-select v-if="user.userNameNeedTranslate != '1'" v-model="ParticularsList.secondCheckerId"
             <el-select v-if="user.userNameNeedTranslate != '1'" v-model="ParticularsList.secondCheckerId"
-              :placeholder="'请选择审核人'" style="width: 150px" :disabled="ParticularsList.reviewProcess > 1"
+              :placeholder="$t('message.Pleaseselectareviewer')" style="width: 150px" :disabled="ParticularsList.reviewProcess > 1"
               filterable="true">
               filterable="true">
               <span v-for="(item, index) in users" :key="index">
               <span v-for="(item, index) in users" :key="index">
                 <el-option :label="item.name" :value="item.id"></el-option>
                 <el-option :label="item.name" :value="item.id"></el-option>
@@ -530,14 +530,14 @@
           }}</span>
           }}</span>
         </div>
         </div>
         <el-table :data="ParticularsList.invoiceList" border style="width: 100%">
         <el-table :data="ParticularsList.invoiceList" border style="width: 100%">
-          <el-table-column prop="status" label="审核状态" width="172" v-if="auditTypeItem.auditType == 1">
+          <el-table-column prop="status" :label="$t('other.approvalStatus')" width="172" v-if="auditTypeItem.auditType == 1">
             <template slot-scope="scope">
             <template slot-scope="scope">
               <span v-if="scope.row.status == 1" class="waiting">{{ statusTxt[scope.row.status] }}</span>
               <span v-if="scope.row.status == 1" class="waiting">{{ statusTxt[scope.row.status] }}</span>
               <span v-if="scope.row.status == 2" class="rejected">{{ statusTxt[scope.row.status] }}</span>
               <span v-if="scope.row.status == 2" class="rejected">{{ statusTxt[scope.row.status] }}</span>
               <span v-if="scope.row.status == 0 || scope.row.status == 3">{{ statusTxt[scope.row.status] }}</span>
               <span v-if="scope.row.status == 0 || scope.row.status == 3">{{ statusTxt[scope.row.status] }}</span>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
-          <el-table-column v-if="auditTypeItem.auditType == 1" width="172" label="审核人">
+          <el-table-column v-if="auditTypeItem.auditType == 1" width="172" :label="$t('other.reviewer')">
             <template slot-scope="scope">
             <template slot-scope="scope">
               <span v-if="user.userNameNeedTranslate == 1">
               <span v-if="user.userNameNeedTranslate == 1">
                 <TranslationOpenDataText type='userName' :openid='scope.row.projectManagerName'></TranslationOpenDataText>
                 <TranslationOpenDataText type='userName' :openid='scope.row.projectManagerName'></TranslationOpenDataText>
@@ -648,10 +648,10 @@
               </div> -->
               </div> -->
               <div>
               <div>
                 <div v-if="scope.row.pic && scope.row.pic.length > 0">
                 <div v-if="scope.row.pic && scope.row.pic.length > 0">
-                  <el-button size="small" @click="viewDetailsImage(scope.$index, 'ParticularsList', 'invoiceList')">查看详情</el-button>
+                  <el-button size="small" @click="viewDetailsImage(scope.$index, 'ParticularsList', 'invoiceList')">{{ $t('Checkthedetails') }}</el-button>
                 </div>
                 </div>
                 <div v-else>
                 <div v-else>
-                  <el-button type="primary" size="small" @click="performCustomization(scope.$index, 2)" :loading="listLoading">点击上传</el-button>
+                  <el-button type="primary" size="small" @click="performCustomization(scope.$index, 2)" :loading="listLoading">{{ $t('clickupload') }}</el-button>
                 </div>
                 </div>
               </div>
               </div>
             </template>
             </template>
@@ -663,12 +663,12 @@
                 @click="delec(scope.$index)">{{ $t('btn.delete') }}</el-button>
                 @click="delec(scope.$index)">{{ $t('btn.delete') }}</el-button>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
-          <el-table-column prop="status" label="审核" width="172" v-if="auditTypeItem.auditType == 1 && showSingleAudit"
+          <el-table-column prop="status" :label="$t('other.audit')" width="172" v-if="auditTypeItem.auditType == 1 && showSingleAudit"
             fixed="right">
             fixed="right">
             <template slot-scope="scope">
             <template slot-scope="scope">
               <el-button v-if="scope.row.isIncharger && scope.row.status == 1"
               <el-button v-if="scope.row.isIncharger && scope.row.status == 1"
-                @click="approveSingle(scope.row)">通过</el-button><el-button
-                v-if="scope.row.isIncharger && scope.row.status == 1" @click="denySingle(scope.row)">驳回</el-button>
+                @click="approveSingle(scope.row)">{{ $t('btn.through') }}</el-button><el-button
+                v-if="scope.row.isIncharger && scope.row.status == 1" @click="denySingle(scope.row)">{{ $t('btn.rejected') }}</el-button>
             </template>
             </template>
           </el-table-column>
           </el-table-column>
         </el-table>
         </el-table>
@@ -711,15 +711,15 @@
 
 
 
 
     <!-- 主费用类型自定义 -->
     <!-- 主费用类型自定义 -->
-    <el-dialog title="费用类型大类管理" v-if="expenseTypeDialog" :visible.sync="expenseTypeDialog" customClass="customWidth"
+    <el-dialog :title="$t('feiYongLeiXingDaLeiGuanLi')" v-if="expenseTypeDialog" :visible.sync="expenseTypeDialog" customClass="customWidth"
       width="600px">
       width="600px">
       <el-table :data="expenseMainTypes" style="width:100%" height="400" :loading="expenseTypeListLoading">
       <el-table :data="expenseMainTypes" style="width:100%" height="400" :loading="expenseTypeListLoading">
-        <el-table-column :label="'类型名称'" min-width="150">
+        <el-table-column :label="$t('typename ')" min-width="150">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <span>{{ scope.row.name }}</span>
             <span>{{ scope.row.name }}</span>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column :label="'对应成本项'" min-width="150">
+        <el-table-column :label="$t('duiYingChengBenXiang')" min-width="150">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <span>{{ scope.row.basecostSettingName }}</span>
             <span>{{ scope.row.basecostSettingName }}</span>
           </template>
           </template>
@@ -747,7 +747,7 @@
               :placeholder="$t('customizethfeetypename')" style="width:90%"
               :placeholder="$t('customizethfeetypename')" style="width:90%"
               @keyup.native="editExpenseTypeDataInput('editExpenseTypeDataInput')"></el-input>
               @keyup.native="editExpenseTypeDataInput('editExpenseTypeDataInput')"></el-input>
           </el-form-item>
           </el-form-item>
-          <el-form-item label="对应成本项" style="margin:30px 0" prop="basecostSettingId">
+          <el-form-item :label="$t('duiYingChengBenXiang')" style="margin:30px 0" prop="basecostSettingId">
             <el-select v-model="editExpenseTypeData.basecostSettingId" size="medium" style="width:90%" clearable>
             <el-select v-model="editExpenseTypeData.basecostSettingId" size="medium" style="width:90%" clearable>
               <el-option v-for="item in basecostSettingList" :key="item.id" :label="item.name" :value="item.id"
               <el-option v-for="item in basecostSettingList" :key="item.id" :label="item.name" :value="item.id"
                 :disabled="item.alarmType == 1"></el-option>
                 :disabled="item.alarmType == 1"></el-option>
@@ -819,11 +819,11 @@
     </el-dialog>
     </el-dialog>
 
 
     <!-- 详情查看弹出框 -->
     <!-- 详情查看弹出框 -->
-    <el-dialog title="报销凭证详情" :visible.sync="detailDialog" width="1100px" :before-close="handleClose">
+    <el-dialog :title="$t('detailsofReimbursementvoucher')" :visible.sync="detailDialog" width="1100px" :before-close="handleClose">
       <div ref="printContent" class="printContent">
       <div ref="printContent" class="printContent">
         <div class="printContent-detail">
         <div class="printContent-detail">
           <div class="detail-item">
           <div class="detail-item">
-            <span class="detail-item-title"> <span class="printBox">报销人</span> </span>
+            <span class="detail-item-title"> <span class="printBox">{{ $t('peopleconcerned') }}</span> </span>
             <span class="detail-item-content">
             <span class="detail-item-content">
               <span v-if="user.userNameNeedTranslate == 1">
               <span v-if="user.userNameNeedTranslate == 1">
                 <TranslationOpenDataText type='userName' :openid='ParticularsList.ownerName'></TranslationOpenDataText>
                 <TranslationOpenDataText type='userName' :openid='ParticularsList.ownerName'></TranslationOpenDataText>
@@ -832,23 +832,23 @@
             </span>
             </span>
           </div>
           </div>
           <div class="detail-item">
           <div class="detail-item">
-            <span class="detail-item-title"><span class="printBox">填报时间</span></span>
+            <span class="detail-item-title"><span class="printBox">{{ $t('tianBaoShiJian') }}</span></span>
             <span class="detail-item-content">{{ ParticularsList.createDate }}</span>
             <span class="detail-item-content">{{ ParticularsList.createDate }}</span>
           </div>
           </div>
           <div class="detail-item">
           <div class="detail-item">
-            <span class="detail-item-title"><span class="printBox">发票张数</span></span>
-            <span class="detail-item-content">{{ ParticularsList.ticketNum }} </span>
+            <span class="detail-item-title"><span class="printBox">{{ $t('invoicenumber') }}</span></span>
+            <span class="detail-item-content">{{ ParticularsList.ticketNum }} {{ $t('zhang') }}</span>
           </div>
           </div>
           <div class="detail-item">
           <div class="detail-item">
-            <span class="detail-item-title"><span class="printBox">费用类型:</span></span>
+            <span class="detail-item-title"><span class="printBox">{{ $t('feiYongLeiXing') }}</span></span>
             <span class="detail-item-content">{{ detaExpenseMainTypeName }}</span>
             <span class="detail-item-content">{{ detaExpenseMainTypeName }}</span>
           </div>
           </div>
           <div class="detail-item">
           <div class="detail-item">
-            <span class="detail-item-title"><span class="printBox">总费用</span></span>
+            <span class="detail-item-title"><span class="printBox">{{ $t('totalcostos') }}</span></span>
             <span class="detail-item-content">¥ {{ ParticularsList.totalAmount | numberToCurrency }}</span>
             <span class="detail-item-content">¥ {{ ParticularsList.totalAmount | numberToCurrency }}</span>
           </div>
           </div>
           <div class="detail-item" style="width: 100%">
           <div class="detail-item" style="width: 100%">
-            <span class="detail-item-title"><span class="printBox">备注</span></span>
+            <span class="detail-item-title"><span class="printBox">{{ $t('bei-zhu') }}</span></span>
             <span class="detail-item-content">{{ ParticularsList.remark }}</span>
             <span class="detail-item-content">{{ ParticularsList.remark }}</span>
           </div>
           </div>
         </div>
         </div>
@@ -978,7 +978,7 @@
         <div class="conter-box">
         <div class="conter-box">
           <div class="conter-border" v-for="item, index in ParticularsList.invoiceList" :key="index">
           <div class="conter-border" v-for="item, index in ParticularsList.invoiceList" :key="index">
             <div class="detail-item" v-if="auditTypeItem.auditType != 1">
             <div class="detail-item" v-if="auditTypeItem.auditType != 1">
-              <span class="detail-item-title"> <span class="printBox">项目</span> </span>
+              <span class="detail-item-title"> <span class="printBox">{{ $t('other.project') }}</span> </span>
               <span class="detail-item-content">
               <span class="detail-item-content">
                 {{ item.projectName }}
                 {{ item.projectName }}
                 <!-- <el-select size="small" v-if="!flg" v-model="item.projectId" :placeholder="$t('other.project')"
                 <!-- <el-select size="small" v-if="!flg" v-model="item.projectId" :placeholder="$t('other.project')"
@@ -997,7 +997,7 @@
               </span>
               </span>
             </div>
             </div>
             <div class="detail-item" v-if="auditTypeItem.auditType == 1">
             <div class="detail-item" v-if="auditTypeItem.auditType == 1">
-              <span class="detail-item-title"> <span class="printBox">项目(审核状态)</span> </span>
+              <span class="detail-item-title"> <span class="printBox">{{ $t('xiangMuShenHeZhuangTai') }}</span> </span>
               <span class="detail-item-content">
               <span class="detail-item-content">
                 <span v-if="item.status == 1" class="waiting">{{ statusTxt[item.status] }}</span>
                 <span v-if="item.status == 1" class="waiting">{{ statusTxt[item.status] }}</span>
                 <span v-if="item.status == 2" class="rejected">{{ statusTxt[item.status] }}</span>
                 <span v-if="item.status == 2" class="rejected">{{ statusTxt[item.status] }}</span>
@@ -1005,39 +1005,39 @@
               </span>
               </span>
             </div>
             </div>
             <div class="detail-item">
             <div class="detail-item">
-              <span class="detail-item-title"> <span class="printBox">费用日期</span> </span>
+              <span class="detail-item-title"> <span class="printBox">{{ $t('forthedate') }}</span> </span>
               <span class="detail-item-content">{{ item.happenDate }}</span>
               <span class="detail-item-content">{{ item.happenDate }}</span>
             </div>
             </div>
             <div class="detail-item">
             <div class="detail-item">
-              <span class="detail-item-title"> <span class="printBox">发票种类</span> </span>
+              <span class="detail-item-title"> <span class="printBox">{{ $t('invoices') }}</span> </span>
               <span class="detail-item-content">{{ typeInvoic[item.invoiceType] }}</span>
               <span class="detail-item-content">{{ typeInvoic[item.invoiceType] }}</span>
             </div>
             </div>
             <div class="detail-item">
             <div class="detail-item">
-              <span class="detail-item-title"> <span class="printBox">费用类型</span> </span>
+              <span class="detail-item-title"> <span class="printBox">{{ $t('costtype') }}</span> </span>
               <span class="detail-item-content">{{ item.expenseType }}</span>
               <span class="detail-item-content">{{ item.expenseType }}</span>
             </div>
             </div>
             <div class="detail-item">
             <div class="detail-item">
-              <span class="detail-item-title single"> <span class="printBox">费用金额(含税)</span> </span>
+              <span class="detail-item-title single"> <span class="printBox">{{ $t('feiYongJineHanShui') }}</span> </span>
               <span class="detail-item-content">{{ item.amount }}</span>
               <span class="detail-item-content">{{ item.amount }}</span>
             </div>
             </div>
             <div class="detail-item">
             <div class="detail-item">
-              <span class="detail-item-title"> <span class="printBox">发票号</span> </span>
+              <span class="detail-item-title"> <span class="printBox">{{ $t('invoiceno') }}</span> </span>
               <span class="detail-item-content">{{ item.invoiceNo }}</span>
               <span class="detail-item-content">{{ item.invoiceNo }}</span>
             </div>
             </div>
             <div class="detail-item">
             <div class="detail-item">
-              <span class="detail-item-title"> <span class="printBox">税率%</span> </span>
+              <span class="detail-item-title"> <span class="printBox">{{ $t('shui-shuai') }}</span> </span>
               <span class="detail-item-content">{{ item.taxValue }}</span>
               <span class="detail-item-content">{{ item.taxValue }}</span>
             </div>
             </div>
             <div class="detail-item">
             <div class="detail-item">
-              <span class="detail-item-title"> <span class="printBox">税额</span> </span>
+              <span class="detail-item-title"> <span class="printBox">{{ $t('taxs') }}</span> </span>
               <span class="detail-item-content">{{ item.taxValue ? `¥${item.taxValue}` : '' }}</span>
               <span class="detail-item-content">{{ item.taxValue ? `¥${item.taxValue}` : '' }}</span>
             </div>
             </div>
             <div class="detail-item">
             <div class="detail-item">
-              <span class="detail-item-title"> <span class="printBox">备注</span> </span>
+              <span class="detail-item-title"> <span class="printBox">{{ $t('bei-zhu') }}</span> </span>
               <span class="detail-item-content">{{ item.remark }}</span>
               <span class="detail-item-content">{{ item.remark }}</span>
             </div>
             </div>
             <div class="detail-item" style="display: flex">
             <div class="detail-item" style="display: flex">
-              <span class="detail-item-title"> <span class="printBox">报销凭证</span> </span>
+              <span class="detail-item-title"> <span class="printBox">{{ $t('expensereimbursementvoucher') }}</span> </span>
               <div class="detail-item-content">
               <div class="detail-item-content">
                 <div v-if="item.pic" style="display: inline-block;">
                 <div v-if="item.pic" style="display: inline-block;">
                   <div class="tups">
                   <div class="tups">
@@ -1058,8 +1058,8 @@
         </div>
         </div>
       </div>
       </div>
       <span slot="footer" class="dialog-footer">
       <span slot="footer" class="dialog-footer">
-        <el-button @click="print()">打 印</el-button>
-        <el-button @click="detailDialog = false">关 闭</el-button>
+        <el-button @click="print()">{{ $t('daYin') }}</el-button>
+        <el-button @click="detailDialog = false">{{ $t('guanBi') }}</el-button>
       </span>
       </span>
     </el-dialog>
     </el-dialog>
 
 
@@ -1069,15 +1069,15 @@
     </div>
     </div>
 
 
     <!-- 发放支付方式 -->
     <!-- 发放支付方式 -->
-    <el-dialog title="发放方式" :visible.sync="dialogVisibleRelease" width="400px" :before-close="handleClose">
+    <el-dialog :title="$t('faFangFangShi')" :visible.sync="dialogVisibleRelease" width="400px" :before-close="handleClose">
       <div>
       <div>
-        <el-select v-model="releaseData.id" placeholder="请选择支付方式" style="width: 100%" clearable>
+        <el-select v-model="releaseData.id" :placeholder="$t('qingXuanZeZhiFuFangShi')" style="width: 100%" clearable>
           <el-option v-for="item in sendStateList" :key="item.id" :label="item.name" :value="item.id"></el-option>
           <el-option v-for="item in sendStateList" :key="item.id" :label="item.name" :value="item.id"></el-option>
         </el-select>
         </el-select>
       </div>
       </div>
       <span slot="footer" class="dialog-footer">
       <span slot="footer" class="dialog-footer">
-        <el-button @click="dialogVisibleRelease = false">取 消</el-button>
-        <el-button type="primary" @click="callingInterface(1, releaseData.data)">确 定</el-button>
+        <el-button @click="dialogVisibleRelease = false">{{ $t('quXiao') }}</el-button>
+        <el-button type="primary" @click="callingInterface(1, releaseData.data)">{{ $t('queDing') }}</el-button>
       </span>
       </span>
     </el-dialog>
     </el-dialog>
   </section>
   </section>
@@ -1737,7 +1737,7 @@ export default {
       let noAmount = paramData.invoiceList.filter(item => !item.amount)
       let noAmount = paramData.invoiceList.filter(item => !item.amount)
       if(noAmount.length > 0) {
       if(noAmount.length > 0) {
         this.$message({
         this.$message({
-          message: '请填写完整费用金额',
+          message: this.$t('qingTianXieWanZhengFeiYongJinE'),
           type: "error"
           type: "error"
         });
         });
         return;
         return;
@@ -1812,7 +1812,7 @@ export default {
         if (valid) {
         if (valid) {
           if(this.auditTypeItem.auditType == 2 && (!this.addForm.firstCheckerId || !this.addForm.secondCheckerId)) {
           if(this.auditTypeItem.auditType == 2 && (!this.addForm.firstCheckerId || !this.addForm.secondCheckerId)) {
             this.$message({
             this.$message({
-              message: !this.addForm.firstCheckerId ? '请选择第一审核人' : '请选择第二审核人',
+              message: !this.addForm.firstCheckerId ? this.$t('qingXuanZeDiYiShenHeRen') : this.$t('qingXuanZeDiErShenHeRen'),
               type: "error"
               type: "error"
             });
             });
             return;
             return;
@@ -1834,7 +1834,7 @@ export default {
           }
           }
           for (var i in this.invoiceList) {
           for (var i in this.invoiceList) {
             if (!this.invoiceList[i].projectId) {
             if (!this.invoiceList[i].projectId) {
-              strObj.project = '所属项目'
+              strObj.project = this.$t('subordinatetotheproject')
               strObj.flg = true
               strObj.flg = true
             }
             }
             // if(!this.invoiceList[i].invoiceType || this.invoiceList[i].invoiceType == '') {
             // if(!this.invoiceList[i].invoiceType || this.invoiceList[i].invoiceType == '') {
@@ -1842,21 +1842,21 @@ export default {
             //   strObj.flg = true
             //   strObj.flg = true
             // }
             // }
             if (!this.invoiceList[i].expenseType || this.invoiceList[i].expenseType == '') {
             if (!this.invoiceList[i].expenseType || this.invoiceList[i].expenseType == '') {
-              strObj.fyType = '费用类型'
+              strObj.fyType = this.$t('costtype')
               strObj.flg = true
               strObj.flg = true
             }
             }
             if (!this.invoiceList[i].happenDate || this.invoiceList[i].happenDate == '') {
             if (!this.invoiceList[i].happenDate || this.invoiceList[i].happenDate == '') {
-              strObj.datas = '费用日期'
+              strObj.datas = this.$t('forthedate')
               strObj.flg = true
               strObj.flg = true
             }
             }
             if (!this.invoiceList[i].amount || this.invoiceList[i].amount == '') {
             if (!this.invoiceList[i].amount || this.invoiceList[i].amount == '') {
-              strObj.rmb = '费用金额'
+              strObj.rmb = this.$t('feiYongJinE')
               strObj.flg = true
               strObj.flg = true
             }
             }
           }
           }
           if (strObj.flg) {
           if (strObj.flg) {
             this.$message({
             this.$message({
-              message: `${strObj.project} ${strObj.fptype} ${strObj.fyType} ${strObj.datas} ${strObj.rmb} 请填写完整`,
+              message: `${strObj.project} ${strObj.fptype} ${strObj.fyType} ${strObj.datas} ${strObj.rmb} ${this.$t('qingTianXieWanZheng')}`,
               type: "error"
               type: "error"
             });
             });
             return;
             return;
@@ -2075,7 +2075,7 @@ export default {
                     name: item,
                     name: item,
                     url: `/upload/${item}`,
                     url: `/upload/${item}`,
                     // url: `http://47.101.180.183/upload/${item}`,
                     // url: `http://47.101.180.183/upload/${item}`,
-                    title: '报销凭证'
+                    title: this.$t('expensereimbursementvoucher')
                   }
                   }
                 })
                 })
               }
               }
@@ -2336,7 +2336,7 @@ export default {
       const sums = [];
       const sums = [];
       columns.forEach((column, index) => {
       columns.forEach((column, index) => {
         if (index === 1) {
         if (index === 1) {
-          sums[index] = '本页金额合计';//this.$t('other.totals');
+          sums[index] = this.$t('benYeJineheJi');//this.$t('other.totals');
           return;
           return;
         }
         }
         if (index === 2) {
         if (index === 2) {
@@ -2407,7 +2407,7 @@ export default {
           if (res.code == "ok") {
           if (res.code == "ok") {
             var filePath = res.data;
             var filePath = res.data;
             const a = document.createElement('a'); // 创建a标签
             const a = document.createElement('a'); // 创建a标签
-            a.setAttribute('download', '费用报销单据列表');// download属性
+            a.setAttribute('download', this.$t('feiYongBaoXiaoDanJuLieBiao'));// download属性
             a.setAttribute('href', filePath);// href链接
             a.setAttribute('href', filePath);// href链接
             a.click(); //自执行点击事件
             a.click(); //自执行点击事件
             a.remove();
             a.remove();
@@ -2439,17 +2439,17 @@ export default {
       };
       };
 
 
       if (newList.length > 0) {
       if (newList.length > 0) {
-        showMessage('存在待审核或已驳回的单据', 'warning');
+        showMessage(this.$t('cunZaiDaiShenHeHuoYiBoHuiDeDanJu'), 'warning');
         return;
         return;
       }
       }
 
 
       if (type == 1 && unissueds.length == 0) {
       if (type == 1 && unissueds.length == 0) {
-        showMessage('请选择未发放的单据', 'warning');
+        showMessage(this.$t('qingXuanZeWeiFaFangDeDanJu'), 'warning');
         return;
         return;
       }
       }
 
 
       if (type == 0 && Issueds.length == 0) {
       if (type == 0 && Issueds.length == 0) {
-        showMessage('请选择已发放的单据', 'warning');
+        showMessage(this.$t('qingXuanZeYiFaFangDeDanJu'), 'warning');
         return;
         return;
       }
       }
 
 
@@ -2473,7 +2473,7 @@ export default {
           this.dialogVisibleRelease = false
           this.dialogVisibleRelease = false
           if (res.code == "ok") {
           if (res.code == "ok") {
             this.$message({
             this.$message({
-              message: '操作成功',
+              message: this.$t('operationissuccessful'),
               type: "success"
               type: "success"
             });
             });
             this.getList()
             this.getList()
@@ -2552,7 +2552,7 @@ export default {
                 name: item,
                 name: item,
                 url: '/upload/' + item,
                 url: '/upload/' + item,
                 // url: `http://47.101.180.183/upload/${item}`,
                 // url: `http://47.101.180.183/upload/${item}`,
-                title: '报销凭证'
+                title: this.$t('expensereimbursementvoucher')
               }
               }
             })
             })
             if(this.imgLoadType == 1) {
             if(this.imgLoadType == 1) {

+ 20 - 20
fhKeeper/formulahousekeeper/timesheet/src/views/financeAudit/financeAudit.vue

@@ -2,17 +2,17 @@
     <div class='financeAudit'>
     <div class='financeAudit'>
         <div class="fAd_hrader">
         <div class="fAd_hrader">
             <div class="items">
             <div class="items">
-                <div class="label">年月:</div>
+                <div class="label">{{ $t('nianYue') }}</div>
                 <div class="value">
                 <div class="value">
-                    <el-date-picker v-model="tableForm.dates" type="monthrange" range-separator="至" start-placeholder="开始日期"
-                        @change="getFinanceAuditTableData()" size="small" value-format="yyyy-MM" end-placeholder="结束日期" :clearable="false">
+                    <el-date-picker v-model="tableForm.dates" type="monthrange" :range-separator="$t('other.to')" :start-placeholder="$t('time.startDate')"
+                        @change="getFinanceAuditTableData()" size="small" value-format="yyyy-MM" :end-placeholder="$t('time.endDate')" :clearable="false">
                     </el-date-picker>
                     </el-date-picker>
                 </div>
                 </div>
             </div>
             </div>
             <div class="items">
             <div class="items">
-                <div class="label">审核状态:</div>
+                <div class="label">{{ $t('shenHeZhuangTai') }}</div>
                 <div class="value">
                 <div class="value">
-                    <el-select v-model="tableForm.status" placeholder="请选择" size="small"
+                    <el-select v-model="tableForm.status" :placeholder="$t('defaultText.pleaseChoose')" size="small"
                         @change="getFinanceAuditTableData()">
                         @change="getFinanceAuditTableData()">
                         <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value">
                         <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value">
                         </el-option>
                         </el-option>
@@ -23,22 +23,22 @@
         <div class="fAd_content">
         <div class="fAd_content">
             <el-table :data="financeAuditTableData" border style="width: 100%;height: 100%;"
             <el-table :data="financeAuditTableData" border style="width: 100%;height: 100%;"
                 v-loading="allLoading.tableLoading">
                 v-loading="allLoading.tableLoading">
-                <el-table-column prop="reportYrmnth" label="日报年月" align="center">
+                <el-table-column prop="reportYrmnth" :label="$t('riBaoNianYue')" align="center">
                     <template slot-scope="scope">
                     <template slot-scope="scope">
                         <el-button type="text" @click="toDetail(scope.row)">{{ scope.row.reportYrmnth }}</el-button>
                         <el-button type="text" @click="toDetail(scope.row)">{{ scope.row.reportYrmnth }}</el-button>
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column prop="reviewerName" label="审核人" align="center"></el-table-column>
-                <el-table-column prop="reviewTime" label="审核时间" align="center"></el-table-column>
-                <el-table-column prop="reviewStatus" label="状态" align="center">
+                <el-table-column prop="reviewerName" :label="$t('other.reviewer')" align="center"></el-table-column>
+                <el-table-column prop="reviewTime" :label="$t('AuditTime')" align="center"></el-table-column>
+                <el-table-column prop="reviewStatus" :label="$t('state.states')" align="center">
                     <template slot-scope="scope">
                     <template slot-scope="scope">
-                        {{ scope.row.reviewStatus == 1 ? '未审核' : '已审核' }}
+                        {{ scope.row.reviewStatus == 1 ? $t('weiShenHe') : $t('yiShenHe') }}
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column label="操作" align="center" fixed="right">
+                <el-table-column :label="$t('operation')" align="center" fixed="right">
                     <template slot-scope="scope">
                     <template slot-scope="scope">
-                        <el-button @click="audit(scope.row)" type="text" v-if="scope.row.reviewStatus == 1">审核</el-button>
-                        <el-button type="text" @click="toDetail(scope.row)">查看详情</el-button>
+                        <el-button @click="audit(scope.row)" type="text" v-if="scope.row.reviewStatus == 1">{{ $t('other.audit') }}</el-button>
+                        <el-button type="text" @click="toDetail(scope.row)">{{ $t('Checkthedetails') }}</el-button>
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
             </el-table>
             </el-table>
@@ -65,9 +65,9 @@ export default {
             },
             },
             financeAuditTableData: [],
             financeAuditTableData: [],
             statusOptions: [
             statusOptions: [
-                { value: 0, label: '全部' },
-                { value: 1, label: '未审核' },
-                { value: 2, label: '已审核' },
+                { value: 0, label: this.$t('all') },
+                { value: 1, label: this.$t('weiShenHe') },
+                { value: 2, label: this.$t('yiShenHe') },
             ],
             ],
             paging: {
             paging: {
                 pageSize: 50,
                 pageSize: 50,
@@ -100,15 +100,15 @@ export default {
             })
             })
         },
         },
         audit(item) {
         audit(item) {
-            this.$confirm(`您确定要审核通过${item.reportYrmnth}月的工时报告吗?`, '财务审核提示', {
-                confirmButtonText: '确定',
-                cancelButtonText: '取消',
+            this.$confirm(`${this.$t('ninQueDingYaoShenHeTongGuo')}${item.reportYrmnth} ${this.$t('yueDeGongShiBaoGaoMa')}`, this.$t('caiWuShenHeTiShi'), {
+                confirmButtonText: this.$t('btn.determine'),
+                cancelButtonText: this.$t('btn.cancel'),
                 type: 'warning'
                 type: 'warning'
             }).then(() => {
             }).then(() => {
                 this.postData('/financial-audit/audit', { id: item.id }).then(res => {
                 this.postData('/financial-audit/audit', { id: item.id }).then(res => {
                     this.$message({
                     this.$message({
                         type: 'success',
                         type: 'success',
-                        message: '审核成功!'
+                        message: this.$t('shenHeChengGong')
                     });
                     });
                     this.getFinanceAuditTableData();
                     this.getFinanceAuditTableData();
                 });
                 });

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

@@ -31,7 +31,7 @@
 
 
           <el-menu-item index="2" @select="bills" @click="auditList()" v-if="permissions.leaveAudit">
           <el-menu-item index="2" @select="bills" @click="auditList()" v-if="permissions.leaveAudit">
               <i class="iconfont firerock-iconshenhe"></i>
               <i class="iconfont firerock-iconshenhe"></i>
-              <span slot="title">请假审核</span>
+              <span slot="title">{{ $t('qingJiaShenHe') }}</span>
             </el-menu-item>
             </el-menu-item>
             <el-menu-item index="3" @select="bills" @click="bills(false, 2)" >
             <el-menu-item index="3" @select="bills" @click="bills(false, 2)" >
               <i class="iconfont firerock-iconbaoxiaodan"></i>
               <i class="iconfont firerock-iconbaoxiaodan"></i>
@@ -164,16 +164,16 @@
                     <el-input type="textarea" v-model="addForm.remark" :rows="5" style="width: 550px" maxlength="100" show-word-limit></el-input>
                     <el-input type="textarea" v-model="addForm.remark" :rows="5" style="width: 550px" maxlength="100" show-word-limit></el-input>
                 </el-form-item>
                 </el-form-item>
                 <!--请假流程显示-->
                 <!--请假流程显示-->
-                <el-form-item label="审批流程" style="width: 100%;color:#606266" >
+                <el-form-item :label="$t('other.approvalProcess')" style="width: 100%;color:#606266" >
                   <span v-for="(item, index) in curWorkflowList" :key="item.id" >
                   <span v-for="(item, index) in curWorkflowList" :key="item.id" >
                     <span v-if="index>0"><i class="el-icon-right"></i></span>
                     <span v-if="index>0"><i class="el-icon-right"></i></span>
                     <span><i class="el-icon-s-custom"></i></span>
                     <span><i class="el-icon-s-custom"></i></span>
                     <span v-if="user.userNameNeedTranslate == 1">
                     <span v-if="user.userNameNeedTranslate == 1">
-                      <span v-if="item.auditorType == 1"><TranslationOpenDataText type='departmentName' :openid='item.auditDeptName' ></TranslationOpenDataText>(主要负责人)</span>
+                      <span v-if="item.auditorType == 1"><TranslationOpenDataText type='departmentName' :openid='item.auditDeptName' ></TranslationOpenDataText>{{ $t('zhu-yao-fu-ze-ren') }}</span>
                       <TranslationOpenDataText type='userName' :openid='item.userName' v-if="item.auditorType == 2"></TranslationOpenDataText>
                       <TranslationOpenDataText type='userName' :openid='item.userName' v-if="item.auditorType == 2"></TranslationOpenDataText>
                     </span>
                     </span>
                     <span v-if="user.userNameNeedTranslate == 0">
                     <span v-if="user.userNameNeedTranslate == 0">
-                      {{item.auditorType == 1?(item.auditDeptName+'(主要负责人)'):item.userName}}
+                      {{item.auditorType == 1 ? (`${item.auditDeptName} ${$t('zhu-yao-fu-ze-ren')}`) : item.userName}}
                     </span>
                     </span>
                   </span>
                   </span>
                 </el-form-item>
                 </el-form-item>
@@ -277,8 +277,8 @@
                           <TranslationOpenDataText type='userName' :openid='scope.row.auditorName'></TranslationOpenDataText>
                           <TranslationOpenDataText type='userName' :openid='scope.row.auditorName'></TranslationOpenDataText>
                         </span>
                         </span>
                       </div>
                       </div>
-                      <div v-if="scope.row.status == 2" style="color: red">{{ $t('btn.rejected') }}<el-link style="margin-left:5px;" @click="showDenyReason(scope.row.id)">查看原因</el-link></div>
-                      <div v-if="scope.row.status == 3" style="color: #666666">已撤回</div>
+                      <div v-if="scope.row.status == 2" style="color: red">{{ $t('btn.rejected') }}<el-link style="margin-left:5px;" @click="showDenyReason(scope.row.id)">{{ $t('chaKanYuanYin') }}</el-link></div>
+                      <div v-if="scope.row.status == 3" style="color: #666666">{{ $t('yiCheHui') }}</div>
                     </div>
                     </div>
                     <div v-else>
                     <div v-else>
                       <span>{{ $t('norequestforleaveatpresent') }}</span>
                       <span>{{ $t('norequestforleaveatpresent') }}</span>
@@ -305,9 +305,9 @@
                     <template slot-scope="scope">
                     <template slot-scope="scope">
                       <!-- <div v-if="(scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.leaveAll"> -->
                       <!-- <div v-if="(scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.leaveAll"> -->
                       <div v-if="(scope.row.status != 0 || permissions.leaveAll) && scope.row.ownerId == user.id">
                       <div v-if="(scope.row.status != 0 || permissions.leaveAll) && scope.row.ownerId == user.id">
-                        <el-button size="mini" v-if="scope.row.status == 3 ||scope.row.status == 2" @click.stop.native="deletes(scope.row)" >删除</el-button>
-                        <el-button size="mini" v-if="scope.row.status == 1" @click.stop.native="cancel(scope.row)">撤回</el-button>
-                        <el-button size="mini" v-if="scope.row.status == 3 ||scope.row.status == 2 " type="primary" @click.stop.native="editor(scope.row)">重新提交</el-button>
+                        <el-button size="mini" v-if="scope.row.status == 3 ||scope.row.status == 2" @click.stop.native="deletes(scope.row)" >{{ $t('btn.delete') }}</el-button>
+                        <el-button size="mini" v-if="scope.row.status == 1" @click.stop.native="cancel(scope.row)">{{ $t('btn.withdraw') }}</el-button>
+                        <el-button size="mini" v-if="scope.row.status == 3 ||scope.row.status == 2 " type="primary" @click.stop.native="editor(scope.row)">{{ $t('zhong-xin-ti-jiao') }}</el-button>
                       </div>
                       </div>
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
@@ -731,8 +731,8 @@
                 <el-timeline-item v-for="item in auditLogList" :key="item.id" :timestamp="item.indate">
                 <el-timeline-item v-for="item in auditLogList" :key="item.id" :timestamp="item.indate">
                   <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.auditorName'></TranslationOpenDataText> </span>
                   <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.auditorName'></TranslationOpenDataText> </span>
                   <span v-if="user.userNameNeedTranslate == 0">{{item.auditorName}}</span>
                   <span v-if="user.userNameNeedTranslate == 0">{{item.auditorName}}</span>
-                  <span> {{item.isPass==0?"驳回了请假申请。":"审核通过。"}}</span>
-                  <span v-if="item.isPass == 0">原因:{{item.denyReason}}</span>
+                  <span> {{item.isPass==0?$t('boHuiLeQingJiaShenQing'):$t('state.approved')}}</span>
+                  <span v-if="item.isPass == 0">{{ $t('other.reason') }} :{{item.denyReason}}</span>
                   </el-timeline-item>
                   </el-timeline-item>
             </el-timeline>
             </el-timeline>
         </div>
         </div>
@@ -1025,7 +1025,7 @@ export default {
         if(res.code == 'ok'){
         if(res.code == 'ok'){
           var filePath = res.data;
           var filePath = res.data;
           const a = document.createElement('a'); // 创建a标签
           const a = document.createElement('a'); // 创建a标签
-          a.setAttribute('download', '请假单');// download属性
+          a.setAttribute('download', this.$t('qingJiaDan'));// download属性
           a.setAttribute('href', filePath);// href链接
           a.setAttribute('href', filePath);// href链接
           a.click(); //自执行点击事件
           a.click(); //自执行点击事件
           a.remove();
           a.remove();
@@ -1065,7 +1065,7 @@ export default {
         if(res.code == 'ok'){
         if(res.code == 'ok'){
           var filePath = res.data;
           var filePath = res.data;
           const a = document.createElement('a'); // 创建a标签
           const a = document.createElement('a'); // 创建a标签
-          a.setAttribute('download', '剩余假期');// download属性
+          a.setAttribute('download', this.$t('shengYuJiaQi'));// download属性
           a.setAttribute('href', filePath);// href链接
           a.setAttribute('href', filePath);// href链接
           a.click(); //自执行点击事件
           a.click(); //自执行点击事件
           a.remove();
           a.remove();
@@ -1466,12 +1466,12 @@ export default {
               if(!flgUserRadio) {
               if(!flgUserRadio) {
                 if(node.type == 'dep') {
                 if(node.type == 'dep') {
                   this.$message({
                   this.$message({
-                      message: '已存在重复部门',
+                      message: this.$t('yi-cun-zai-zhong-fu-bu-men'),
                       type: "error"
                       type: "error"
                   });
                   });
                 } else {
                 } else {
                   this.$message({
                   this.$message({
-                      message: '已存在重复人员',
+                      message: this.$t('yi-cun-zai-zhong-fu-ren-yuan'),
                       type: "error"
                       type: "error"
                   });
                   });
                 }
                 }
@@ -1544,7 +1544,7 @@ export default {
           });
           });
       } else {
       } else {
         this.$message({
         this.$message({
-            message: '至少选择一个部门或者人员做为审核人',
+            message: this.$t('zhi-shao-xuan-ze-yi-ge-bu-men-huo-zhe-ren-yuan-zuo-wei-shen-he-ren'),
             type: "error"
             type: "error"
         });
         });
       }
       }
@@ -1559,7 +1559,7 @@ export default {
             if (res.code == "ok") {
             if (res.code == "ok") {
                 this.auditList();
                 this.auditList();
                 this.$message({
                 this.$message({
-                        message: '操作成功',
+                        message: this.$t('operationissuccessful'),
                         type: "success"
                         type: "success"
                         });
                         });
             } else {
             } else {
@@ -1587,7 +1587,7 @@ export default {
         res => {
         res => {
             if (res.code == "ok") {
             if (res.code == "ok") {
                 this.$message({
                 this.$message({
-                        message: '操作成功',
+                        message: this.$t('operationissuccessful'),
                         type: "success"
                         type: "success"
                 });
                 });
             } else {
             } else {
@@ -1614,7 +1614,7 @@ export default {
                 this.auditList();
                 this.auditList();
                 this.denyDialogV = false;
                 this.denyDialogV = false;
                 this.$message({
                 this.$message({
-                        message: '操作成功',
+                        message: this.$t('operationissuccessful'),
                         type: "success"
                         type: "success"
                         });
                         });
             } else {
             } else {
@@ -2102,7 +2102,7 @@ export default {
       // console.log(this.addForm)
       // console.log(this.addForm)
     },
     },
     cancel(e) {
     cancel(e) {
-      this.$confirm('确定要撤回该请假申请吗', this.$t('other.prompts'), {
+      this.$confirm(this.$t('queDingYaoCheHuiGaiQingJiaShenQingMa'), this.$t('other.prompts'), {
           //type: 'warning'
           //type: 'warning'
       }).then(() => {
       }).then(() => {
           this.http.post('/leave-sheet/cancel', {id:e.id},
           this.http.post('/leave-sheet/cancel', {id:e.id},
@@ -2110,7 +2110,7 @@ export default {
               if (res.code == "ok") {
               if (res.code == "ok") {
                   this.bills();
                   this.bills();
                   this.$message({
                   this.$message({
-                      message: '操作成功',
+                      message: this.$t('operationissuccessful'),
                       type: "success"
                       type: "success"
                   });
                   });
               } else {
               } else {

+ 17 - 17
fhKeeper/formulahousekeeper/timesheet/src/views/market/list.vue

@@ -3,7 +3,7 @@
         <!--工具条-->
         <!--工具条-->
         <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
         <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
             <el-form :inline="true">
             <el-form :inline="true">
-                <el-form-item label="公司列表">
+                <el-form-item :label="$t('gongSiLieBiao')">
                     
                     
                 </el-form-item>
                 </el-form-item>
             </el-form>
             </el-form>
@@ -16,20 +16,20 @@
                         {{scope.$index+1+(page-1)*size}}
                         {{scope.$index+1+(page-1)*size}}
                     </template>
                     </template>
             </el-table-column>
             </el-table-column>
-            <el-table-column prop="companyName" label="公司名称"  ></el-table-column>
-            <el-table-column prop="cTime" label="注册时间"  ></el-table-column>
-            <el-table-column prop="name" label="联系人" ></el-table-column>
-            <el-table-column prop="phone" label="联系方式"  width="150"></el-table-column>
-            <el-table-column prop="contacted" label="是否联系" >
+            <el-table-column prop="companyName" :label="$t('gongSiMingCheng')"  ></el-table-column>
+            <el-table-column prop="cTime" :label="$t('zhuCeShiJian')"  ></el-table-column>
+            <el-table-column prop="name" :label="$t('contact')" ></el-table-column>
+            <el-table-column prop="phone" :label="$t('lianXiFangShi')"  width="150"></el-table-column>
+            <el-table-column prop="contacted" :label="$t('shiFouLianXi')" >
                 <template slot-scope="scope">
                 <template slot-scope="scope">
-                    <font v-if="scope.row.contacted" color="green">已联系</font>
-                    <font v-if="!scope.row.contacted" color="red">未联系</font>
+                    <font v-if="scope.row.contacted" color="green">{{ $t('yiLianXi') }}</font>
+                    <font v-if="!scope.row.contacted" color="red">{{ $t('weiLianXi') }}</font>
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
-            <el-table-column prop="feedback" label="客户反馈" ></el-table-column>
-            <el-table-column label="操作" width="290">
+            <el-table-column prop="feedback" :label="$t('keHuFanKui')" ></el-table-column>
+            <el-table-column :label="$t('operation')" width="290">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
-                    <el-button size="small" type="primary" @click="handleAdd(scope.$index, scope.row)">填写反馈</el-button>
+                    <el-button size="small" type="primary" @click="handleAdd(scope.$index, scope.row)">{{ $t('tianXieFanKui') }}</el-button>
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
         </el-table>
         </el-table>
@@ -51,16 +51,16 @@
         <el-dialog :title="title" v-if="addFormVisible" :visible.sync="addFormVisible" :close-on-click-modal="false" customClass="customWidth" width="600px">
         <el-dialog :title="title" v-if="addFormVisible" :visible.sync="addFormVisible" :close-on-click-modal="false" customClass="customWidth" width="600px">
             <el-form ref="form1" :model="addForm" :rules="rules" label-width="100px">
             <el-form ref="form1" :model="addForm" :rules="rules" label-width="100px">
                 
                 
-                <el-form-item label="公司名称" prop="companyName">
+                <el-form-item :label="$t('gongSiMingCheng')" prop="companyName">
                     {{addForm.companyName}}
                     {{addForm.companyName}}
                 </el-form-item>
                 </el-form-item>
-                <el-form-item label="反馈结果">
+                <el-form-item :label="$t('fanKuiJieGuo')">
                     <el-input type="area" v-model="addForm.feedback"></el-input>
                     <el-input type="area" v-model="addForm.feedback"></el-input>
                 </el-form-item>
                 </el-form-item>
             </el-form>
             </el-form>
             <div slot="footer" class="dialog-footer">
             <div slot="footer" class="dialog-footer">
-                <el-button @click.native="addFormVisible = false">取消</el-button>
-                <el-button type="primary" @click="submitInsert" :loading="addLoading">提交</el-button>
+                <el-button @click.native="addFormVisible = false">{{ $t('quXiao') }}</el-button>
+                <el-button type="primary" @click="submitInsert" :loading="addLoading">{{ $t('tiJiao') }}</el-button>
             </div>
             </div>
         </el-dialog>
         </el-dialog>
 
 
@@ -113,7 +113,7 @@
                     feedback:null,
                     feedback:null,
                 },
                 },
                 rules: {
                 rules: {
-                    feedback: [{ required: true, message: "请输入客户反馈", trigger: "blur" }],
+                    feedback: [{ required: true, message: this.$t('qingShuRuKeHuFanKui'), trigger: "blur" }],
                 }
                 }
             };
             };
         },
         },
@@ -194,7 +194,7 @@
                             this.addLoading = false;
                             this.addLoading = false;
                             if (res.code == "ok") {
                             if (res.code == "ok") {
                                 this.$message({
                                 this.$message({
-                                    message: "填写成功",
+                                    message: this.$t('tianXieChengGong'),
                                     type: "success"
                                     type: "success"
                                 });
                                 });
                                 this.addFormVisible = false;
                                 this.addFormVisible = false;

+ 7 - 7
fhKeeper/formulahousekeeper/timesheet/src/views/message.vue

@@ -4,7 +4,7 @@
     <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
     <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
       <el-form :inline="true">
       <el-form :inline="true">
         <el-col :span="2">
         <el-col :span="2">
-          <el-form-item>消息中心</el-form-item>
+          <el-form-item>{{ $t('other.messageCenter') }}</el-form-item>
         </el-col>
         </el-col>
       </el-form>
       </el-form>
     </el-col>
     </el-col>
@@ -12,9 +12,9 @@
     <!--选项卡-->
     <!--选项卡-->
     <el-col :span="24">
     <el-col :span="24">
       <el-tabs v-model="activePage" @tab-click="handleClick" type="card">
       <el-tabs v-model="activePage" @tab-click="handleClick" type="card">
-        <el-tab-pane name="0" label="审批">
+        <el-tab-pane name="0" :label="$t('shenPi')">
           <div :style="heightString">
           <div :style="heightString">
-            <span v-if="messages[0].length == 0">目前暂无消息</span>
+            <span v-if="messages[0].length == 0">{{ $t('muQianZanWuXiaoXi') }}</span>
             <div
             <div
               class="message-div"
               class="message-div"
               v-for="item,index in messages[0]"
               v-for="item,index in messages[0]"
@@ -42,9 +42,9 @@
             ></el-pagination>
             ></el-pagination>
           </el-col>
           </el-col>
         </el-tab-pane>
         </el-tab-pane>
-        <el-tab-pane name="1" label="警告">
+        <el-tab-pane name="1" :label="$t('jingGao')">
           <div :style="heightString">
           <div :style="heightString">
-            <span v-if="messages[1].length == 0">目前暂无消息</span>
+            <span v-if="messages[1].length == 0">{{ $t('muQianZanWuXiaoXi') }}</span>
             <div
             <div
               class="message-div"
               class="message-div"
               v-for="item,index in messages[1]"
               v-for="item,index in messages[1]"
@@ -72,9 +72,9 @@
             ></el-pagination>
             ></el-pagination>
           </el-col>
           </el-col>
         </el-tab-pane>
         </el-tab-pane>
-        <el-tab-pane name="2" label="保养">
+        <el-tab-pane name="2" :label="$t('baoYang')">
           <div :style="heightString">
           <div :style="heightString">
-            <span v-if="messages[2].length == 0">目前暂无消息</span>
+            <span v-if="messages[2].length == 0">{{ $t('muQianZanWuXiaoXi') }}</span>
             <div
             <div
               class="message-div"
               class="message-div"
               v-for="item,index in messages[2]"
               v-for="item,index in messages[2]"

+ 18 - 18
fhKeeper/formulahousekeeper/timesheet/src/views/profession/list.vue

@@ -3,18 +3,18 @@
         <!--工具条-->
         <!--工具条-->
         <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
         <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
             <el-form :inline="true">
             <el-form :inline="true">
-                <el-form-item label="工程专业列表">
+                <el-form-item :label="$t('gongChengZhuanYeLieBiao')">
                     
                     
                 </el-form-item>
                 </el-form-item>
                 <el-form-item >
                 <el-form-item >
                     <div>
                     <div>
-                    <el-input style="float:left;" v-model="keyword" class="input-with-select" placeholder="请输入专业名称关键字" clearable="true" @keyup.enter.native="searchList()">
+                    <el-input style="float:left;" v-model="keyword" class="input-with-select" :placeholder="$t('qingShuRuZhuanYeMingChengGuanJianZi')" clearable="true" @keyup.enter.native="searchList()">
                         <el-button slot="append" @click="searchList" icon="el-icon-search"></el-button>
                         <el-button slot="append" @click="searchList" icon="el-icon-search"></el-button>
                     </el-input>
                     </el-input>
                     </div>
                     </div>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item style="float:right;">
                 <el-form-item style="float:right;">
-                    <el-link type="primary" :underline="false" @click="handleAdd(-1,null)">新增专业</el-link>
+                    <el-link type="primary" :underline="false" @click="handleAdd(-1,null)">{{ $t('xinZengZhuanYe') }}</el-link>
                 </el-form-item>
                 </el-form-item>
             </el-form>
             </el-form>
         </el-col>
         </el-col>
@@ -26,13 +26,13 @@
                         {{scope.$index+1+(page-1)*size}}
                         {{scope.$index+1+(page-1)*size}}
                     </template>
                     </template>
             </el-table-column>
             </el-table-column>
-            <el-table-column prop="name" label="专业名称" >
+            <el-table-column prop="name" :label="$t('nameprofessional')" >
             </el-table-column>
             </el-table-column>
             
             
-            <el-table-column label="操作" width="150">
+            <el-table-column :label="$t('operation')" width="150">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
-                    <el-button size="mini" type="primary" @click="handleAdd(scope.$index, scope.row)">编辑</el-button>
-                    <el-button size="mini"  @click="deletePro(scope.$index, scope.row)">删除</el-button>
+                    <el-button size="mini" type="primary" @click="handleAdd(scope.$index, scope.row)">{{ $t('bian-ji') }}</el-button>
+                    <el-button size="mini"  @click="deletePro(scope.$index, scope.row)">{{ $t('btn.delete') }}</el-button>
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
         </el-table>
         </el-table>
@@ -53,13 +53,13 @@
         <!--新增界面-->
         <!--新增界面-->
         <el-dialog :title="title" v-if="addFormVisible" :visible.sync="addFormVisible" :close-on-click-modal="false" customClass="customWidth" width="600px">
         <el-dialog :title="title" v-if="addFormVisible" :visible.sync="addFormVisible" :close-on-click-modal="false" customClass="customWidth" width="600px">
             <el-form ref="form1" :model="addForm" :rules="rules" label-width="120px">
             <el-form ref="form1" :model="addForm" :rules="rules" label-width="120px">
-                <el-form-item label="专业名称" prop="name">
-                    <el-input v-model="addForm.name" :max="20" placeholder="请输入专业名称" clearable></el-input>
+                <el-form-item :label="$t('nameprofessional')" prop="name">
+                    <el-input v-model="addForm.name" :max="20" :placeholder="$t('qingShuRuZhuanYeMingCheng')" clearable></el-input>
                 </el-form-item>
                 </el-form-item>
             </el-form>
             </el-form>
             <div slot="footer" class="dialog-footer;">
             <div slot="footer" class="dialog-footer;">
-                <el-button @click.native="addFormVisible = false">取消</el-button>
-                <el-button type="primary" @click="submitInsert" :loading="addLoading">提交</el-button>
+                <el-button @click.native="addFormVisible = false">{{ $t('btn.cancel') }}</el-button>
+                <el-button type="primary" @click="submitInsert" :loading="addLoading">{{ $t('btn.submit') }}</el-button>
             </div>
             </div>
         </el-dialog>
         </el-dialog>
     </section>
     </section>
@@ -105,7 +105,7 @@
                     name: ''
                     name: ''
                 },
                 },
                 rules: {
                 rules: {
-                    name: [{ required: true, message: "请输入专业名称", trigger: "blur" }],
+                    name: [{ required: true, message: this.$t('qingShuRuZhuanYeMingCheng'), trigger: "blur" }],
                 }
                 }
             };
             };
         },
         },
@@ -186,11 +186,11 @@
             //显示新增界面
             //显示新增界面
             handleAdd(i, item) {
             handleAdd(i, item) {
                 if(i == -1) {
                 if(i == -1) {
-                    this.title = "新增专业";
+                    this.title = this.$t('xinZengZhuanYe');
                     this.addForm = {
                     this.addForm = {
                     }
                     }
                 } else {
                 } else {
-                    this.title = "修改专业";
+                    this.title = this.$t('xiuGaiZhuanYe');
                     this.addForm = JSON.parse(JSON.stringify(item));
                     this.addForm = JSON.parse(JSON.stringify(item));
                 }
                 }
                 this.addFormVisible = true;
                 this.addFormVisible = true;
@@ -227,9 +227,9 @@
             // 删除
             // 删除
             deletePro(i, item) {
             deletePro(i, item) {
                 console.log(item, '要删除的')
                 console.log(item, '要删除的')
-                this.$confirm("确定要专业" + item.name + "吗?","删除专业", {
-                    confirmButtonText: "确定",
-                    cancelButtonText: "取消",
+                this.$confirm(this.$t('queDingYaoZhuanYe') + item.name + this.$t('ma'),this.$t('shanChuZhuanYe'), {
+                    confirmButtonText: this.$t('btn.determine'),
+                    cancelButtonText: this.$t('btn.cancel'),
                     type: "warning"
                     type: "warning"
                 })
                 })
                 .then(() => {
                 .then(() => {
@@ -241,7 +241,7 @@
                         this.listLoading = false;
                         this.listLoading = false;
                         if (res.code == "ok") {
                         if (res.code == "ok") {
                             this.$message({
                             this.$message({
-                                message: "删除成功",
+                                message: this.$t('message.successfullyDeleted'),
                                 type: "success"
                                 type: "success"
                             });
                             });
                             this.getList();
                             this.getList();

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

@@ -77,7 +77,7 @@
                 <el-col :span="24">
                 <el-col :span="24">
                     <div class="box">
                     <div class="box">
                         <div class="box_head">
                         <div class="box_head">
-                            日期区间:
+                            {{ $t('riQiQuJian') }} 
                             <el-date-picker
                             <el-date-picker
                             v-model="dateSelect"
                             v-model="dateSelect"
                             type="daterange"
                             type="daterange"
@@ -95,23 +95,23 @@
                             <div class="boxBoxMax_con">
                             <div class="boxBoxMax_con">
                                 <el-card class="box-card">
                                 <el-card class="box-card">
                                     <div slot="header" class="clearfix">
                                     <div slot="header" class="clearfix">
-                                        工时成本
+                                        {{ $t('gongShiChengBen') }} 
                                     </div>
                                     </div>
                                     <div class="text item boxBoxMax_con_one">
                                     <div class="text item boxBoxMax_con_one">
-                                        <span>工时合计</span> {{ chengbenData.workingTime }} h 
+                                        <span>{{ $t('gongShiHeJi') }}</span> {{ chengbenData.workingTime }} h 
                                     </div>
                                     </div>
                                     <div class="text item">
                                     <div class="text item">
-                                        <span style="letter-spacing: 26px;">成本</span>¥ {{ chengbenData.cost }} 
+                                        <span style="letter-spacing: 26px;">{{ $t('costof') }}</span>¥ {{ chengbenData.cost }} 
                                     </div>
                                     </div>
                                 </el-card>
                                 </el-card>
                             </div>
                             </div>
                             <div class="boxBoxMax_con" v-if="user.company.packageExpense">
                             <div class="boxBoxMax_con" v-if="user.company.packageExpense">
                                 <el-card class="box-card">
                                 <el-card class="box-card">
                                     <div slot="header" class="clearfix">
                                     <div slot="header" class="clearfix">
-                                        费用报销成本
+                                        {{ $t('feiYongBaoXiaoChengBen') }} 
                                     </div>
                                     </div>
                                     <div class="text item boxBoxMax_con_two">
                                     <div class="text item boxBoxMax_con_two">
-                                       <span>报销合计 </span>¥ {{ chengbenData.expense }} 
+                                       <span>{{ $t('baoXiaoHeJi') }} </span>¥ {{ chengbenData.expense }} 
                                     </div>
                                     </div>
                                 </el-card>
                                 </el-card>
                             </div>
                             </div>

+ 31 - 31
fhKeeper/formulahousekeeper/timesheet/src/views/project/budgetReview.vue

@@ -5,14 +5,14 @@
                 <!-- 日期 -->
                 <!-- 日期 -->
                 <div class="budgetReviewHeader_FormItem">
                 <div class="budgetReviewHeader_FormItem">
                     <el-date-picker size="small" v-model="screeningConditionForm.dateRange" :editable="false"
                     <el-date-picker size="small" v-model="screeningConditionForm.dateRange" :editable="false"
-                        format="yyyy-MM-dd" value-format="yyyy-MM-dd" :clearable="false" :range-separator="'至'"
-                        type="daterange" :start-placeholder="'开始日期'" :end-placeholder="'结束日期'" style="width: 260px"
+                        format="yyyy-MM-dd" value-format="yyyy-MM-dd" :clearable="false" :range-separator="$t('other.to')"
+                        type="daterange" :start-placeholder="$t('selectstartdate')" :end-placeholder="$t('time.endDate')" style="width: 260px"
                         @change="getList"></el-date-picker>
                         @change="getList"></el-date-picker>
                 </div>
                 </div>
                 <!-- 项目 -->
                 <!-- 项目 -->
                 <div class="budgetReviewHeader_FormItem">
                 <div class="budgetReviewHeader_FormItem">
-                    <div class="budgetReviewHeader_FormItemText">项目:</div>
-                    <el-select v-model="screeningConditionForm.projectId" filterable placeholder="请选择项目" clearable
+                    <div class="budgetReviewHeader_FormItemText">{{ $t('xiangMu') }}</div>
+                    <el-select v-model="screeningConditionForm.projectId" filterable :placeholder="$t('defaultText.pleaseSelectSnItem')" clearable
                         size="small" @change="getList">
                         size="small" @change="getList">
                         <el-option v-for="item in projectList" :key="item.id"
                         <el-option v-for="item in projectList" :key="item.id"
                             :label="item.projectName + '\u3000' + item.projectCode" :value="item.id">
                             :label="item.projectName + '\u3000' + item.projectCode" :value="item.id">
@@ -23,8 +23,8 @@
                 </div>
                 </div>
                 <!-- 审核人 -->
                 <!-- 审核人 -->
                 <div class="budgetReviewHeader_FormItem">
                 <div class="budgetReviewHeader_FormItem">
-                    <div class="budgetReviewHeader_FormItemText">审核人:</div>
-                    <el-select v-model="screeningConditionForm.checkUserId" filterable placeholder="请选择审核人" clearable
+                    <div class="budgetReviewHeader_FormItemText">{{ $t('shenHeRen') }}</div>
+                    <el-select v-model="screeningConditionForm.checkUserId" filterable :placeholder="$t('message.Pleaseselectareviewer')" clearable
                         size="small" v-if="user.userNameNeedTranslate != 1" style="width: 130px;" @change="getList">
                         size="small" v-if="user.userNameNeedTranslate != 1" style="width: 130px;" @change="getList">
                         <el-option v-for="item in usersList" :key="item.id" :label="item.name + '\u3000' + item.jobNumber"
                         <el-option v-for="item in usersList" :key="item.id" :label="item.name + '\u3000' + item.jobNumber"
                             :value="item.id">
                             :value="item.id">
@@ -38,8 +38,8 @@
                 </div>
                 </div>
                 <!-- 审核状态 -->
                 <!-- 审核状态 -->
                 <div class="budgetReviewHeader_FormItem">
                 <div class="budgetReviewHeader_FormItem">
-                    <div class="budgetReviewHeader_FormItemText">审核状态:</div>
-                    <el-select v-model="screeningConditionForm.status" filterable placeholder="请选择状态" clearable size="small"
+                    <div class="budgetReviewHeader_FormItemText">{{ $t('other.approvalStatus') }}:</div>
+                    <el-select v-model="screeningConditionForm.status" filterable :placeholder="$t('qingXuanZeZhuangTai')" clearable size="small"
                         style="width: 120px;" @change="getList">
                         style="width: 120px;" @change="getList">
                         <el-option v-for="item in auditStatus" :key="item.id" :label="item.label" :value="item.id">
                         <el-option v-for="item in auditStatus" :key="item.id" :label="item.label" :value="item.id">
                         </el-option>
                         </el-option>
@@ -47,13 +47,13 @@
                 </div>
                 </div>
             </div>
             </div>
             <div class="budgetReviewHeader_btn">
             <div class="budgetReviewHeader_btn">
-                <el-button type="primary" size="small" @click="exportReport" :loading="exporListLoading">导出</el-button>
+                <el-button type="primary" size="small" @click="exportReport" :loading="exporListLoading">{{ $t('export.export') }}</el-button>
             </div>
             </div>
         </div>
         </div>
         <!--列表-->
         <!--列表-->
         <el-table :data="list" ref="multipleTable" highlight-current-row v-loading="listLoading" :height="tableHeight"
         <el-table :data="list" ref="multipleTable" highlight-current-row v-loading="listLoading" :height="tableHeight"
             style="width: 100%;">
             style="width: 100%;">
-            <el-table-column prop="projectName" :label="'项目名称'" sortable min-width="200px">
+            <el-table-column prop="projectName" :label="$t('headerTop.projectName')" sortable min-width="200px">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                     <div>
                     <div>
                         <span>
                         <span>
@@ -63,7 +63,7 @@
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
 
 
-            <el-table-column prop="groupName" :label="'分组名称'" sortable min-width="180px">
+            <el-table-column prop="groupName" :label="$t('groupname')" sortable min-width="180px">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                     <div>
                     <div>
                         <span>
                         <span>
@@ -73,7 +73,7 @@
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
 
 
-            <el-table-column prop="creator" :label="'提交人'" sortable min-width="120px">
+            <el-table-column prop="creator" :label="$t('tiJiaoRen')" sortable min-width="120px">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                     <div>
                     <div>
                         <span v-if="user.userNameNeedTranslate == '1'">
                         <span v-if="user.userNameNeedTranslate == '1'">
@@ -86,7 +86,7 @@
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
 
 
-            <el-table-column prop="createTime" :label="'提交时间'" sortable min-width="120px">
+            <el-table-column prop="createTime" :label="$t('tiJiaoShiJian')" sortable min-width="120px">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                     <div>
                     <div>
                         <span>
                         <span>
@@ -95,37 +95,37 @@
                     </div>
                     </div>
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
-            <el-table-column prop="oldManDay" :label="'变更前预估工时'" sortable min-width="150px">
+            <el-table-column prop="oldManDay" :label="$t('bianGengQianYuGuGongShi')" sortable min-width="150px">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                     <div>
                     <div>
                         <span>
                         <span>
-                            {{ scope.row.oldManDay }}人天 / {{ scope.row.oldEstimatedWorkTime }}小时
+                            {{ scope.row.oldManDay }}{{ $t('renTian') }} / {{ scope.row.oldEstimatedWorkTime }} {{ $t('time.hour') }}
                         </span>
                         </span>
                     </div>
                     </div>
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
 
 
-            <el-table-column prop="changeManDay" :label="'预估工时变更'" sortable min-width="150px">
+            <el-table-column prop="changeManDay" :label="$t('yuGuGongShiBianGeng')" sortable min-width="150px">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                     <div>
                     <div>
                         <span>
                         <span>
-                            {{ scope.row.changeManDay }}人天 / {{ scope.row.changeEstimatedWorkTime }}小时
+                            {{ scope.row.changeManDay }}{{ $t('renTian') }} / {{ scope.row.changeEstimatedWorkTime }}{{ $t('time.hour') }}
                         </span>
                         </span>
                     </div>
                     </div>
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
 
 
-            <el-table-column prop="nowManDay" :label="'变更后预估工时'" sortable min-width="150px">
+            <el-table-column prop="nowManDay" :label="$t('bianGengHouYuGuGongShi')" sortable min-width="150px">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                     <div>
                     <div>
                         <span>
                         <span>
-                            {{ scope.row.nowManDay }}人天 / {{ scope.row.nowEstimatedWorkTime }}小时
+                            {{ scope.row.nowManDay }}{{ $t('renTian') }} / {{ scope.row.nowEstimatedWorkTime }}{{ $t('time.hour') }}
                         </span>
                         </span>
                     </div>
                     </div>
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
 
 
-            <el-table-column prop="remark" :label="'变更理由'" sortable width="200px">
+            <el-table-column prop="remark" :label="$t('bianGengLiYou')" sortable width="200px">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                     <div>
                     <div>
                         <div v-if="scope.row.remark && scope.row.remark.length > 11">
                         <div v-if="scope.row.remark && scope.row.remark.length > 11">
@@ -140,7 +140,7 @@
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
 
 
-            <el-table-column prop="rejectReason" :label="'驳回理由'" sortable width="200px">
+            <el-table-column prop="rejectReason" :label="$t('boHuiLiYou')" sortable width="200px">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                     <div>
                     <div>
                         <div v-if="scope.row.rejectReason && scope.row.rejectReason.length > 11">
                         <div v-if="scope.row.rejectReason && scope.row.rejectReason.length > 11">
@@ -197,9 +197,9 @@ export default {
             searchUsersList: [],
             searchUsersList: [],
             projectList: [],
             projectList: [],
             auditStatus: [
             auditStatus: [
-                { id: 1, label: '待审核' },
-                { id: 2, label: '审核通过' },
-                { id: 3, label: '已驳回' }
+                { id: 1, label: this.$t('state.WaitingAudit') },
+                { id: 2, label: this.$t('state.approved') },
+                { id: 3, label: this.$t('state.rejected') }
             ],
             ],
 
 
             screeningConditionForm: {
             screeningConditionForm: {
@@ -218,15 +218,15 @@ export default {
     methods: {
     methods: {
         review(id,checkType){
         review(id,checkType){
             if(checkType==2){
             if(checkType==2){
-                this.$prompt('请输入驳回理由', '提示', {
-                confirmButtonText: '确定',
-                cancelButtonText: '取消',
+                this.$prompt(this.$t('qingShuRuBoHuiLiYou'), this.$t('other.prompts'), {
+                confirmButtonText: this.$t('btn.determine'),
+                cancelButtonText: this.$t('btn.cancel'),
                 }).then(({ value }) => {
                 }).then(({ value }) => {
                 this.http.post("/group-budget-review/check", {id:id,checkType:checkType,rejectReason:value},
                 this.http.post("/group-budget-review/check", {id:id,checkType:checkType,rejectReason:value},
                     res => {
                     res => {
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         this.$message({
                         this.$message({
-                            message:"操作成功",
+                            message:this.$t('operationissuccessful'),
                             type: "success"
                             type: "success"
                         });
                         });
                         this.getList();
                         this.getList();
@@ -246,7 +246,7 @@ export default {
                 }).catch(() => {
                 }).catch(() => {
                     this.$message({
                     this.$message({
                         type: 'info',
                         type: 'info',
-                        message: '取消驳回'
+                        message: this.$t('quXiaoBoHui')
                     });       
                     });       
                     });
                     });
                 }else{
                 }else{
@@ -254,7 +254,7 @@ export default {
                     res => {
                     res => {
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         this.$message({
                         this.$message({
-                            message:"操作成功",
+                            message:this.$t('operationissuccessful'),
                             type: "success"
                             type: "success"
                         });
                         });
                         this.getList();
                         this.getList();
@@ -382,7 +382,7 @@ export default {
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         var filePath = res.data;
                         var filePath = res.data;
                         const a = document.createElement('a'); // 创建a标签
                         const a = document.createElement('a'); // 创建a标签
-                        a.setAttribute('download', '预估工时审核');// download属性
+                        a.setAttribute('download', this.$t('navigation.budgetReview'));// download属性
                         a.setAttribute('href', filePath);// href链接
                         a.setAttribute('href', filePath);// href链接
                         a.click(); //自执行点击事件
                         a.click(); //自执行点击事件
                         a.remove();
                         a.remove();

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

@@ -66,9 +66,13 @@
             <div id="container" ref="container" :style="'height:'+(containerHeight - 20)+'px;width:100%'"></div>
             <div id="container" ref="container" :style="'height:'+(containerHeight - 20)+'px;width:100%'"></div>
             <div class="poss" :style="`width:${possWidth}px;`">
             <div class="poss" :style="`width:${possWidth}px;`">
                 <div class="poss-btn">
                 <div class="poss-btn">
-                    <el-radio-group v-model="possradio" size="small" @change="onYAxisChange" v-if="radio == '项目'">
-                        <el-radio-button label="1">项目名称</el-radio-button>
-                        <el-radio-button label="2">项目编号</el-radio-button>
+                    <el-radio-group v-model="possradio" size="small" @change="onYAxisChange" v-if="radio == $t('other.project')">
+                        <el-radio-button label="1">{{ $t('headerTop.projectName') }}</el-radio-button>
+                        <el-radio-button label="2">{{ $t('Itemno') }}</el-radio-button>
+                    </el-radio-group>
+                    <el-radio-group v-model="departmentadio" size="small" @change="departmentPersonnelSwitch" v-if="radio == $t('lable.department') && this.parentDeptId">
+                        <el-radio-button label="1">{{ $t('lable.department') }}</el-radio-button>
+                        <el-radio-button label="2">{{ $t('ren-yuan') }}</el-radio-button>
                     </el-radio-group>
                     </el-radio-group>
                 </div>
                 </div>
                 <el-pagination
                 <el-pagination
@@ -103,11 +107,11 @@
                         </el-option>
                         </el-option>
                     </el-select>
                     </el-select>
                 </el-form-item>
                 </el-form-item>
-                <el-form-item prop="exportContent" label="导出内容" v-if="permissions.countCost && permissions.countHours && (radio == $t('other.project') || radio == $t('projectclassification'))">
+                <el-form-item prop="exportContent" :label="$t('daoChuNeiRon')" v-if="permissions.countCost && permissions.countHours && (radio == $t('other.project') || radio == $t('projectclassification'))">
                     <el-select v-model="exportParam.exportContent" style="width:350px;" filterable="true" popper-class="projectSelectPopperClass">
                     <el-select v-model="exportParam.exportContent" style="width:350px;" filterable="true" popper-class="projectSelectPopperClass">
-                        <el-option label="工时和成本" value="hoursAndCost"></el-option>
-                        <el-option label="仅工时" value="hours"></el-option>
-                        <el-option label="仅成本" value="cost"></el-option>
+                        <el-option :label="$t('gongShiHeChengBen')" value="hoursAndCost"></el-option>
+                        <el-option :label="$t('jingGongShi')" value="hours"></el-option>
+                        <el-option :label="$t('jingChenBen')" value="cost"></el-option>
                     </el-select>
                     </el-select>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item :label="$t('departmentchoice')" v-if="radio == $t('other.project')">
                 <el-form-item :label="$t('departmentchoice')" v-if="radio == $t('other.project')">
@@ -177,13 +181,13 @@
                     </div>
                     </div>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item v-if="exportParam.type == 1 && permissions.countHours && (radio == $t('other.project'))">
                 <el-form-item v-if="exportParam.type == 1 && permissions.countHours && (radio == $t('other.project'))">
-                    <el-checkbox v-model="exportParam.withPercent" >含项目工时占比</el-checkbox>
+                    <el-checkbox v-model="exportParam.withPercent" >{{ $t('gongHhiZhanbiXmu') }}</el-checkbox>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item v-if="radio == $t('zhu-xiang-mu') || ((radio == $t('other.project') || radio == $t('projectclassification')) && exportParam.type == '0')">
                 <el-form-item v-if="radio == $t('zhu-xiang-mu') || ((radio == $t('other.project') || radio == $t('projectclassification')) && exportParam.type == '0')">
                     <el-checkbox v-model="exportParam.projectSum" >{{ $t('individualprojectdata') }}</el-checkbox>
                     <el-checkbox v-model="exportParam.projectSum" >{{ $t('individualprojectdata') }}</el-checkbox>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item v-if="radio == $t('ren-yuan') && user.timeType.mainProjectState == 1">
                 <el-form-item v-if="radio == $t('ren-yuan') && user.timeType.mainProjectState == 1">
-                    <el-checkbox v-model="exportParam.mainProjectColumn" >含主项目</el-checkbox>
+                    <el-checkbox v-model="exportParam.mainProjectColumn" >{{ $t('hanZhuXiangMu') }}</el-checkbox>
                 </el-form-item>
                 </el-form-item>
             </el-form>
             </el-form>
             <div slot="footer" class="dialog-footer">
             <div slot="footer" class="dialog-footer">
@@ -249,10 +253,21 @@
                 radioLoading: false,
                 radioLoading: false,
                 proJuctId:'',
                 proJuctId:'',
                 possWidth: 300,
                 possWidth: 300,
-                possradio: '1'
+                possradio: '1',
+                departmentadio: '1'
             };
             };
         },
         },
         methods: {
         methods: {
+            // 部门详情的部门和人员切换显示
+            departmentPersonnelSwitch() {
+                const typeIndex = this.departmentadio
+                console.log('点击切换', typeIndex, this.parentDeptId)
+                if(typeIndex == '1') {
+                    this.jieliu()
+                } else {
+                    this.getUserCostList(this.parentDeptId)
+                }
+            },
             echartsCurrentChange(val){
             echartsCurrentChange(val){
                 this.page = val
                 this.page = val
                 if(this.radio == this.$t('ren-yuan')){
                 if(this.radio == this.$t('ren-yuan')){
@@ -455,7 +470,7 @@
                         endDate: this.exportParam.dateRange[1],
                         endDate: this.exportParam.dateRange[1],
                         projectId: this.exportParam.projectId,
                         projectId: this.exportParam.projectId,
                     }
                     }
-                    fileName = this.radio + '成本统计' + '.xlsx'
+                    fileName = this.radio + this.$t('chenBenTongJi') + '.xlsx'
                 }
                 }
                 this.exporting = true;
                 this.exporting = true;
                 this.http.post(url, param,
                 this.http.post(url, param,
@@ -521,22 +536,22 @@
                 }
                 }
             },
             },
             //获取人员成本统计列表
             //获取人员成本统计列表
-            getUserCostList() {
-                // console.log(this.port.project.userCost, '获取人员成本统计列表')
-                // console.log(this.user.timeType.fixMonthcost)
-                // console.log(Boolean(this.dateRange))
+            getUserCostList(departmentId) {
                 let startDateNum = ''
                 let startDateNum = ''
                 let endDateNum = ''
                 let endDateNum = ''
                 if(this.dateRange) {
                 if(this.dateRange) {
                     startDateNum = this.user.timeType.fixMonthcost==0?this.dateRange[0]:this.dateRange
                     startDateNum = this.user.timeType.fixMonthcost==0?this.dateRange[0]:this.dateRange
                     endDateNum = this.user.timeType.fixMonthcost==0?this.dateRange[1]:this.dateRange
                     endDateNum = this.user.timeType.fixMonthcost==0?this.dateRange[1]:this.dateRange
                 } 
                 } 
-                // return 
-                this.http.post(this.port.project.userCost, {
-                    // startDate:this.user.timeType.fixMonthcost==0?this.dateRange[0]:this.dateRange, 
-                    // endDate: this.user.timeType.fixMonthcost==0?this.dateRange[1]:this.dateRange
+                let params = {
                     startDate: startDateNum,
                     startDate: startDateNum,
                     endDate: endDateNum
                     endDate: endDateNum
+                }
+                if(departmentId) {
+                    params.departmentId = departmentId
+                }
+                this.http.post(this.port.project.userCost, {
+                    ...params
                 },
                 },
                 res => {
                 res => {
                     this.radioLoading = false
                     this.radioLoading = false
@@ -575,7 +590,7 @@
                         }
                         }
                     } else { 
                     } else { 
                         this.$message({
                         this.$message({
-                        message: res.msg + '里面',
+                        message: res.msg + this.$t('liMian'),
                         type: "error"
                         type: "error"
                         });
                         });
                     }
                     }
@@ -583,7 +598,7 @@
                 error => {
                 error => {
                     this.radioLoading = false
                     this.radioLoading = false
                     this.$message({
                     this.$message({
-                        message: error + '外面',
+                        message: error + this.$t('waiMian'),
                         type: "error"
                         type: "error"
                     });
                     });
                 });
                 });
@@ -701,7 +716,7 @@
                                         if(!name) {
                                         if(!name) {
                                             return ''
                                             return ''
                                         }
                                         }
-                                        const unit = yAxisValue == 0 ? '元' : '小时';
+                                        const unit = yAxisValue == 0 ? _this.$t('yuan') : _this.$t('time.hour');
                                         console.log(nameObj, name, nameObj[name], params)
                                         console.log(nameObj, name, nameObj[name], params)
                                         const totalValue = yAxisValue == 0 ? nameObj[name].moneyTol : nameObj[name].timeTol;
                                         const totalValue = yAxisValue == 0 ? nameObj[name].moneyTol : nameObj[name].timeTol;
                                         return seriesName === cerName ? `${totalValue ? totalValue.toFixed(0) : 0} ${unit}` : '';
                                         return seriesName === cerName ? `${totalValue ? totalValue.toFixed(0) : 0} ${unit}` : '';
@@ -911,6 +926,7 @@
                 } else if (this.radio==this.$t('lable.department')) {
                 } else if (this.radio==this.$t('lable.department')) {
                     url = this.port.project.depCost;
                     url = this.port.project.depCost;
                     param.parentDeptId = this.parentDeptId;
                     param.parentDeptId = this.parentDeptId;
+                    this.departmentadio = '1'
                 } else if (this.radio==this.$t('ren-yuan')) {
                 } else if (this.radio==this.$t('ren-yuan')) {
                     this.getUserCostList();
                     this.getUserCostList();
                     return;
                     return;
@@ -1082,7 +1098,8 @@
                                         // "value": this.yAxisValue==0 ? list[i].costMoney.toFixed(2) || list[i].costMoney: list[i].costTime.toFixed(1),
                                         // "value": this.yAxisValue==0 ? list[i].costMoney.toFixed(2) || list[i].costMoney: list[i].costTime.toFixed(1),
                                         "value": this.yAxisValue==0 ? (list[i].costMoney ? list[i].costMoney.toFixed(2) : 0) || list[i].costMoney: (list[i].costTime ? list[i].costTime.toFixed(1) : 0),
                                         "value": this.yAxisValue==0 ? (list[i].costMoney ? list[i].costMoney.toFixed(2) : 0) || list[i].costMoney: (list[i].costTime ? list[i].costTime.toFixed(1) : 0),
                                         "id": list[i].departmentId,
                                         "id": list[i].departmentId,
-                                        "hasSubDept": list[i].hasSubDept
+                                        "hasSubDept": list[i].hasSubDept,
+                                        "type": list[i].type
                                     }
                                     }
                                     if(this.permissions.countCost){
                                     if(this.permissions.countCost){
                                         // item.money = list[i].costMoney.toFixed(2)
                                         // item.money = list[i].costMoney.toFixed(2)
@@ -1313,19 +1330,24 @@
                                         _this.$router.push("/cost/" + _this.params[0].data.id + "/" + _this.params[0].name);
                                         _this.$router.push("/cost/" + _this.params[0].data.id + "/" + _this.params[0].name);
                                     }
                                     }
                                 } else if (_this.radio==this.$t('lable.department')) {
                                 } else if (_this.radio==this.$t('lable.department')) {
-                                    if (_this.params[0].data.hasSubDept) {
-                                        if (_this.parentDeptId != _this.params[0].data.id) {
-                                            _this.parentDeptId = _this.params[0].data.id;
-                                            _this.parentDeptStack.push(_this.parentDeptId);
-                                            _this.jieliu();
-                                        }
-                                        // _this.jieliu();
-                                    } else {
-                                        if (_this.dateRange != null) {
-                                            _this.$router.push("/costDep/" + _this.params[0].data.id + "/" + _this.params[0].name
-                                                +"?startDate="+_this.dateRange[0]+"&endDate="+_this.dateRange[1]);
+                                    if (_this.params[0].data.type == 'departmentName') {
+                                        if (_this.params[0].data.hasSubDept) {
+                                            if (_this.parentDeptId != _this.params[0].data.id) {
+                                                _this.parentDeptId = _this.params[0].data.id;
+                                                _this.parentDeptStack.push(_this.parentDeptId);
+                                                _this.jieliu();
+                                            }
+                                            // _this.jieliu();
                                         } else {
                                         } else {
-                                            _this.$router.push("/costDep/" + _this.params[0].data.id + "/" + _this.params[0].name);
+                                            if(this.departmentadio == '2') {
+                                                return
+                                            }
+                                            if (_this.dateRange != null) {
+                                                _this.$router.push("/costDep/" + _this.params[0].data.id + "/" + _this.params[0].name
+                                                    +"?startDate="+_this.dateRange[0]+"&endDate="+_this.dateRange[1]);
+                                            } else {
+                                                _this.$router.push("/costDep/" + _this.params[0].data.id + "/" + _this.params[0].name);
+                                            }
                                         }
                                         }
                                     }
                                     }
                                 }
                                 }

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

@@ -21,7 +21,7 @@
                 <!-- <el-radio-button :label="部门"></el-radio-button> -->
                 <!-- <el-radio-button :label="部门"></el-radio-button> -->
                 <el-radio-button :label="$t('ren-yuan')"></el-radio-button>
                 <el-radio-button :label="$t('ren-yuan')"></el-radio-button>
                 <el-radio-button :label="$t('lable.department')"></el-radio-button>
                 <el-radio-button :label="$t('lable.department')"></el-radio-button>
-                <el-radio-button :label="'日期'"></el-radio-button>
+                <el-radio-button :label="$t('weekDay.date')"></el-radio-button>
                 <!-- <el-radio-button :label="namess" v-if="jichu.customDegreeActive == 1"></el-radio-button> -->
                 <!-- <el-radio-button :label="namess" v-if="jichu.customDegreeActive == 1"></el-radio-button> -->
             </el-radio-group>
             </el-radio-group>
         </el-col>
         </el-col>
@@ -226,7 +226,7 @@
             //获取人员成本统计列表
             //获取人员成本统计列表
             getUserCostList() {
             getUserCostList() {
                 this.listLoading = true;
                 this.listLoading = true;
-                let url = this.radio == this.$t('ren-yuan') ? '/department/getUserCustomDataStatistic' :this.radio == '日期'?'/report/getCustomDataWithDate': '/department/getDeptCustomDataStatistic'
+                let url = this.radio == this.$t('ren-yuan') ? '/department/getUserCustomDataStatistic' :this.radio == $t('weekDay.date')?'/report/getCustomDataWithDate': '/department/getDeptCustomDataStatistic'
                 this.http.post(url, {
                 this.http.post(url, {
                     startDate:this.user.timeType.fixMonthcost==0?this.dateRange[0]:this.dateRange, 
                     startDate:this.user.timeType.fixMonthcost==0?this.dateRange[0]:this.dateRange, 
                     endDate: this.user.timeType.fixMonthcost==0?this.dateRange[1]:this.dateRange
                     endDate: this.user.timeType.fixMonthcost==0?this.dateRange[1]:this.dateRange
@@ -473,7 +473,7 @@
                     url = '/project/getCustomDataSum';
                     url = '/project/getCustomDataSum';
                 // } else if (this.radio=='部门') {
                 // } else if (this.radio=='部门') {
                 //     url = '/department/getDeptCustomDataStatistic';
                 //     url = '/department/getDeptCustomDataStatistic';
-                } else if (this.radio==this.$t('ren-yuan') || this.radio == this.$t('lable.department')||this.radio == '日期') {
+                } else if (this.radio==this.$t('ren-yuan') || this.radio == this.$t('lable.department')||this.radio == $t('weekDay.date')) {
                     this.getUserCostList();
                     this.getUserCostList();
                     return;
                     return;
                 } else if (this.radio == this.namess) {
                 } else if (this.radio == this.namess) {
@@ -520,7 +520,7 @@
                                     totalHours += parseFloat(list[i].costTime);
                                     totalHours += parseFloat(list[i].costTime);
                                 }
                                 }
                             }
                             }
-                        } else if(this.radio == this.$t('ren-yuan') || this.radio=='日期') {
+                        } else if(this.radio == this.$t('ren-yuan') || this.radio==$t('weekDay.date')) {
                             list = res.data
                             list = res.data
                             var totalMoneyCost = 0;
                             var totalMoneyCost = 0;
                             for(var i in list) {
                             for(var i in list) {
@@ -548,7 +548,7 @@
                         if(totalMoneyCost) {
                         if(totalMoneyCost) {
                             this.zhishin = totalMoneyCost.toFixed(2)
                             this.zhishin = totalMoneyCost.toFixed(2)
                         } 
                         } 
-                        if(this.radio == this.$t('other.project') || this.radio == this.$t('ren-yuan') || this.radio==this.$t('lable.department')|| this.radio=='日期') {
+                        if(this.radio == this.$t('other.project') || this.radio == this.$t('ren-yuan') || this.radio==this.$t('lable.department')|| this.radio==$t('weekDay.date')) {
                             var option = {
                             var option = {
                                 title: {
                                 title: {
                                     text: _this.user.timeType.customDataName+_this.$t('zong-ji')+':' + totalHours,
                                     text: _this.user.timeType.customDataName+_this.$t('zong-ji')+':' + totalHours,

+ 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-col :span="24" class="toolbar" style="padding-bottom: 0px;">
             <el-form :inline="true">
             <el-form :inline="true">
                 <el-form-item>
                 <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>
                 <el-form-item class="divLine"></el-form-item>
                 <el-form-item class="divLine"></el-form-item>
                 <el-form-item style="width: 500px">
                 <el-form-item style="width: 500px">
                     <!-- <div class="dipali"> -->
                     <!-- <div class="dipali"> -->
                         <!-- <span class="workName">{{detailName}}</span> -->
                         <!-- <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>
                         :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>
                         <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> -->
                     <!-- </div> -->
                 </el-form-item>
                 </el-form-item>
                 <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>
                 <el-form-item style="float:right;">
                 <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-item>
             </el-form>
             </el-form>
         </el-col> 
         </el-col> 
@@ -292,16 +292,16 @@
                                 }
                                 }
                                 var res
                                 var res
                                 if(_this.user.userNameNeedTranslate != 1) {
                                 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 {
                                 } else {
-                                    res = " 工时 : " + totalTime.toFixed(1)+"小时<br/>";
+                                    res = "this.$t('gongShi')" + totalTime.toFixed(1)+this.$t('time.hour')+"<br/>";
                                 }
                                 }
                                 
                                 
                                 for(var i in params) {
                                 for(var i in params) {
                                     if (params[i].data.value > 0) {
                                     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;
                                 return res;
@@ -324,7 +324,7 @@
                     myChart.setOption(option, {notMerge: true});
                     myChart.setOption(option, {notMerge: true});
                 } else {
                 } else {
                     this.$message({
                     this.$message({
-                        message: "暂无数据",
+                        message: this.$t('nodata'),
                         type: "error"
                         type: "error"
                         });
                         });
                 }
                 }

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

@@ -8,7 +8,7 @@
             <span style="float:right;">
             <span style="float:right;">
                 <!-- <el-link type="primary" :underline="false" v-if="list.length
                 <!-- <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> -->
                 > 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-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-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>
                         <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">
         <el-dialog :title="$t('modifyingFolder')" v-if="addFolderDialog" :visible.sync="addFolderDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <div class="titleBox">
             <div class="titleBox">
                 <el-tabs v-model="activeName" @tab-click="handleClick" v-if="!addFolderDialogTwo">
                 <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 ref="form2" :model="folderForm" :rules="rules" style="margin-top: 10px">
                             <el-form-item prop="documentName">
                             <el-form-item prop="documentName">
                                 <el-input v-model="folderForm.documentName" :placeholder="$t('pleaseenterfoldername')" maxlength="25"
                                 <el-input v-model="folderForm.documentName" :placeholder="$t('pleaseenterfoldername')" maxlength="25"
@@ -145,7 +145,7 @@
                             show-word-limit clearable></el-input>
                             show-word-limit clearable></el-input>
                     </el-form-item>
                     </el-form-item>
                     <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-item>
                 </el-form>
                 </el-form>
             </div>
             </div>
@@ -156,7 +156,7 @@
         </el-dialog>
         </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>
                 <div class="filrTree">
                 <div class="filrTree">
                     <el-tree
                     <el-tree
@@ -184,12 +184,12 @@
         </el-dialog>
         </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>
             <div>
                 <el-form :model="nodeForm" ref="nodeForm" label-width="100px" class="demo-ruleForm">
                 <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="[
                         :rules="[
-                            { required: true, message: '请输入节点名称'}
+                            { required: true, message: $t('qingShuRuJieDianMingCheng')}
                         ]"
                         ]"
                     >
                     >
                         <el-input v-model="nodeForm.name"></el-input>
                         <el-input v-model="nodeForm.name"></el-input>
@@ -197,16 +197,16 @@
                 </el-form>
                 </el-form>
             </div>
             </div>
             <div slot="footer" class="dialog-footer">
             <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>
             </div>
         </el-dialog>
         </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>
             <div>
                 <el-form :model="nodeForm" ref="nodeForms" label-width="100px" class="demo-ruleForm">
                 <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="[
                         :rules="[
-                            { required: true, message: '请输入节点名称'}
+                            { required: true, message: $t('qingShuRuJieDianMingCheng')}
                         ]"
                         ]"
                     >
                     >
                         <el-input v-model="nodeForm.name"></el-input>
                         <el-input v-model="nodeForm.name"></el-input>
@@ -214,16 +214,16 @@
                 </el-form>
                 </el-form>
             </div>
             </div>
             <div slot="footer" class="dialog-footer">
             <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>
             </div>
         </el-dialog>
         </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>
             <div>
                 <el-form :model="nodeForm" ref="nodeFormss" label-width="100px" class="demo-ruleForm">
                 <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="[
                         :rules="[
-                            { required: true, message: '请输入节点名称'}
+                            { required: true, message: $t('qingShuRuJieDianMingCheng')}
                         ]"
                         ]"
                     >
                     >
                         <el-input v-model="nodeForm.name"></el-input>
                         <el-input v-model="nodeForm.name"></el-input>
@@ -231,7 +231,7 @@
                 </el-form>
                 </el-form>
             </div>
             </div>
             <div slot="footer" class="dialog-footer">
             <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>
             </div>
         </el-dialog>
         </el-dialog>
 
 
@@ -414,16 +414,16 @@
                 this.nodeForm.name = data.label
                 this.nodeForm.name = data.label
             },
             },
             removeTemplate(data) {
             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'
                     type: 'warning'
                 }).then(() => {
                 }).then(() => {
                     this.http.post('/project-document-template/delete', {id: data.id},
                     this.http.post('/project-document-template/delete', {id: data.id},
                         res => {
                         res => {
                             if (res.code == "ok") {
                             if (res.code == "ok") {
                                 this.$message({
                                 this.$message({
-                                    message: `删除成功`,
+                                    message: this.$t('message.successfullyDeleted'),
                                     type: 'success'
                                     type: 'success'
                                 });
                                 });
                                 this.getTemplateList()
                                 this.getTemplateList()
@@ -450,7 +450,7 @@
                             this.templateDataTreeDaylong = false
                             this.templateDataTreeDaylong = false
                             if (res.code == "ok") {
                             if (res.code == "ok") {
                                 this.$message({
                                 this.$message({
-                                    message: `操作成功`,
+                                    message: this.$t('operationissuccessful'),
                                     type: 'success'
                                     type: 'success'
                                 });
                                 });
                             } else {this.$message({message: res.msg,type: 'error'});}
                             } else {this.$message({message: res.msg,type: 'error'});}
@@ -484,7 +484,7 @@
                     this.templateDataTreeDaylong = false
                     this.templateDataTreeDaylong = false
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         this.$message({
                         this.$message({
-                            message: `操作成功`,
+                            message: this.$t('operationissuccessful'),
                             type: 'success'
                             type: 'success'
                         });
                         });
                         this.templatedialing = false
                         this.templatedialing = false
@@ -551,9 +551,9 @@
             },
             },
             
             
             removeNode(node, data) {
             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'
                     type: 'warning'
                 }).then(() => {
                 }).then(() => {
                     const parent = node.parent;
                     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="1" >{{ $t('Apportionmentofpersonnelcosts') }}</el-radio-button>
                     <el-radio-button label="2">{{ $t('Spreadallpersonnelcosts') }}</el-radio-button>
                     <el-radio-button label="2">{{ $t('Spreadallpersonnelcosts') }}</el-radio-button>
                 </el-radio-group>
                 </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>
 
 
             <el-form-item style="float:right;margin-right:20px;" v-if="permissions.financialShare">
             <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-link type="primary" :underline="false" @click="exportFinanceDialog=true">{{ $t('ExportingtheAllocationData') }}</el-link>
             </el-form-item>
             </el-form-item>
             
             
@@ -312,11 +312,11 @@
         </el-dialog>
         </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 :data="missingFinanceUserList" highlight-current-row v-loading="listLoading" :height="400" style="width: 100%;">
             <el-table-column type="index"></el-table-column>
             <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">
                 <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'"><TranslationOpenDataText type='userName' :openid='scope.row.name'></TranslationOpenDataText></span>
                     <span v-if="user.userNameNeedTranslate != '1'">{{scope.row.name}}</span>
                     <span v-if="user.userNameNeedTranslate != '1'">{{scope.row.name}}</span>
@@ -324,8 +324,8 @@
             </el-table-column>
             </el-table-column>
         </el-table>
         </el-table>
             <div slot="footer" class="dialog-footer">
             <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>
             </div>
         </el-dialog>
         </el-dialog>
 
 
@@ -500,9 +500,9 @@
         <el-dialog :title="proSetting.ymonth + $t('projectstobe assessed')" show-header="false" v-if="projSettingDialog" :visible.sync="projSettingDialog" 
         <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">
             :close-on-click-modal="false" customClass="customWidth" width="1000px">
             <el-radio-group v-model="proSetting.settingType" style="margin-top:15px;">
             <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-radio-group>
             <el-select v-model="proSettingChosenProjects" multiple filterable clearable style="width:100%;margin-top:10px;" v-show="proSetting.settingType > 0" @change="updateChosenView()">
             <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">
                 <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 => {
                 this.http.post('/cost-project-setting/save',this.proSetting,res => {
                     if(res.code == 'ok'){
                     if(res.code == 'ok'){
                         this.$message({
                         this.$message({
-                            message: '保存成功',
+                            message: this.$t('savesuccess'),
                             type: 'success'
                             type: 'success'
                         })
                         })
                         this.projSettingDialog = false;
                         this.projSettingDialog = false;
@@ -750,7 +750,7 @@ import { error } from 'dingtalk-jsapi';
                 },res => {
                 },res => {
                     if(res.code == 'ok'){
                     if(res.code == 'ok'){
                         this.$message({
                         this.$message({
-                            message: '上传成功',
+                            message: this.$t('uploadedsuccessfully'),
                             type: 'success'
                             type: 'success'
                         })
                         })
                     }else{
                     }else{

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

@@ -36,52 +36,52 @@ export default {
     gantt.clearAll()
     gantt.clearAll()
     gantt.locale={
     gantt.locale={
     date: {
     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: {
     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 */
         /* 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: "",
         column_add: "",
 
 
         /* link confirmation */
         /* 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;
     // gantt.config.autosize = true;
@@ -90,7 +90,7 @@ export default {
       gantt.config.drag_move = false;
       gantt.config.drag_move = false;
     gantt.config.xml_date = "%Y-%m-%d";
     gantt.config.xml_date = "%Y-%m-%d";
     gantt.config.columns=[
     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:"time",label:"计划工时(h)", align: "center" }
         // {name:"start_date", label:"开始时间", width:'*' , align: "center" },
         // {name:"start_date", label:"开始时间", width:'*' , align: "center" },
         // {name:"duration",   label:"工时(天)", width:'*' ,   align: "center" }
         // {name:"duration",   label:"工时(天)", width:'*' ,   align: "center" }

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

@@ -102,8 +102,8 @@
                     </div>
                     </div>
                     <div v-if="user.timeType.projectManDay">
                     <div v-if="user.timeType.projectManDay">
                         <el-row :gutter="10" >
                         <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>
                         </el-row>
                     </div>
                     </div>
                     <!-- <div v-if="user.companyId == '428'">
                     <!-- <div v-if="user.companyId == '428'">
@@ -122,8 +122,13 @@
                         <span v-if="user.userNameNeedTranslate != 1">{{project.inchargerName}}</span>
                         <span v-if="user.userNameNeedTranslate != 1">{{project.inchargerName}}</span>
                         <span v-else><TranslationOpenDataText type='userName' :openid='project.inchargerName'></TranslationOpenDataText></span>
                         <span v-else><TranslationOpenDataText type='userName' :openid='project.inchargerName'></TranslationOpenDataText></span>
                     </el-link></div>
                     </el-link></div>
-                    <div style="margin-top:10px;color:#999;">{{ user.timeType.reportCc == 1?'日报抄送人':$t('newspaperauditor') }}</div>
-                    <div>
+                    <div v-if="user.timeType.reportAuditType == 8" style="margin-top:10px;color:#999;">{{ $t('other.projectReviwer') }}</div>
+                    <div v-if="user.timeType.reportAuditType == 8"><el-link style="margin:10px" @click="showUser(project.reviwerId)">
+                        <span v-if="user.userNameNeedTranslate != 1">{{project.reviwerName}}</span>
+                        <span v-else><TranslationOpenDataText type='userName' :openid='project.reviwerName'></TranslationOpenDataText></span>
+                    </el-link></div>
+                    <div v-if="user.timeType.reportAuditType != 8" style="margin-top:10px;color:#999;">{{ user.timeType.reportCc == 1?'日报抄送人':$t('newspaperauditor') }}</div>
+                    <div v-if="user.timeType.reportAuditType != 8">
                         <span v-if="project.auditorList.length == 0" style="margin:10px;">-</span>
                         <span v-if="project.auditorList.length == 0" style="margin:10px;">-</span>
                         <el-link v-for="item in project.auditorList" :key="item.id" style="margin:10px;" @click="showUser(item.auditorId)">
                         <el-link v-for="item in project.auditorList" :key="item.id" style="margin:10px;" @click="showUser(item.auditorId)">
                             <span v-if="user.userNameNeedTranslate != 1">
                             <span v-if="user.userNameNeedTranslate != 1">
@@ -371,7 +376,7 @@
                     <el-input v-model="addForm.contractAmount" id="contractAmount" :disabled="true" style="width:32%;"
                     <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>
                     placeholder="" clearable @keyup.native="restrictNumber('contractAmount')"></el-input><span style="margin-left:10px;">{{ $t('yuan') }}</span>
                 </el-form-item>
                 </el-form-item>
-                <el-form-item :label="'计划开始日期'" prop="planStartDate">
+                <el-form-item :label="$t('ommencementDate')" prop="planStartDate">
                     <el-date-picker v-model="addForm.planStartDate" 
                     <el-date-picker v-model="addForm.planStartDate" 
                      :editable="false" 
                      :editable="false" 
                      format="yyyy-MM-dd" 
                      format="yyyy-MM-dd" 
@@ -385,7 +390,7 @@
                     placeholder="" clearable @keyup.native="restrictNumber('outputValue')"></el-input><span style="margin-left:10px;">{{ $t('yuan') }}</span>
                     placeholder="" clearable @keyup.native="restrictNumber('outputValue')"></el-input><span style="margin-left:10px;">{{ $t('yuan') }}</span>
                     </template>
                     </template>
                 </el-form-item>
                 </el-form-item>
-                <el-form-item :label="'计划结束日期'" prop="planEndDate">
+                <el-form-item :label="$t('jiHuaJieShuRiQi')" prop="planEndDate">
                     <el-date-picker v-model="addForm.planEndDate" 
                     <el-date-picker v-model="addForm.planEndDate" 
                      :editable="false" 
                      :editable="false" 
                      format="yyyy-MM-dd" 
                      format="yyyy-MM-dd" 
@@ -445,7 +450,7 @@
                 <div style="margin-top: 20px" v-if="dataList.length > 0 && user.timeType.projectCustom">
                 <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">
                     <el-form-item v-for="(item, index) in dataList" :key="item.id" :label="item.customName">
                         <div v-if="item.customType == 0">
                         <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>
                         <div v-if="item.customType == 1">
                         <div v-if="item.customType == 1">
                             <el-upload
                             <el-upload
@@ -476,7 +481,7 @@
                                 </el-upload>
                                 </el-upload>
                         </div>
                         </div>
                         <div v-if="item.customType == 2">
                         <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>
                         </div>
                     </el-form-item>
                     </el-form-item>
                 </div>
                 </div>
@@ -520,6 +525,15 @@
                     </el-select>
                     </el-select>
                     <selectCat v-if="user.userNameNeedTranslate == 1" :filterable="true" :widthStr="'430'" :size="'medium'" :subject="project.participationList" :subjectId="addForm.inchargerId" :distinction="'1'" @selectCal="selectCal" :disabled="isShowProjectName"></selectCat>
                     <selectCat v-if="user.userNameNeedTranslate == 1" :filterable="true" :widthStr="'430'" :size="'medium'" :subject="project.participationList" :subjectId="addForm.inchargerId" :distinction="'1'" @selectCal="selectCal" :disabled="isShowProjectName"></selectCat>
                 </el-form-item>
                 </el-form-item>
+                <el-form-item :label="$t('other.projectReviwer')" v-if="user.timeType.reportAuditType == 8">
+                    <el-select v-if="user.userNameNeedTranslate != 1" v-model="addForm.reviwerId"  filterable :placeholder="$t('defaultText.pleaseChoose')" style="width:100%;" :disabled="isShowProjectName">
+                        <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id">
+                            <span style="float: left">{{ item.name }}</span>
+                            <span style="float: right; color: #8492a6;">{{ item.jobNumber }}</span>
+                        </el-option>
+                    </el-select>
+                    <selectCat v-if="user.userNameNeedTranslate == 1" :filterable="true" :widthStr="'430'" :size="'medium'" :subject="users" :subjectId="addForm.reviwerId" :distinction="'1'" @selectCal="selectCal" :disabled="isShowProjectName"></selectCat>
+                </el-form-item>
             </el-form>
             </el-form>
             <div slot="footer" class="dialog-footer">
             <div slot="footer" class="dialog-footer">
                 <el-button @click.native="pVisible = false">{{ $t('btn.cancel') }}</el-button>
                 <el-button @click.native="pVisible = false">{{ $t('btn.cancel') }}</el-button>
@@ -2250,7 +2264,7 @@
 
 
             const usersJson = JSON.parse(sessionStorage.getItem("user"))
             const usersJson = JSON.parse(sessionStorage.getItem("user"))
             if(usersJson.companyId == '936') {
             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
                     this.isShowProjectName = true
                 } else {
                 } else {
                     this.isShowProjectName = false
                     this.isShowProjectName = false

File diff suppressed because it is too large
+ 234 - 145
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue


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

@@ -1,28 +1,28 @@
 <template>
 <template>
   <div class="infrastructures">
   <div class="infrastructures">
       <div class="til">
       <div class="til">
-          <p>项目表单设置</p>
+          <p>{{ $t('navigation.projectFormSettings') }}</p>
           <div style="display: flex;">
           <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>
       </div>
       <div class="tabl">
       <div class="tabl">
         <el-table :data="dataList" highlight-current-row v-loading="listLoading" :height="heightDoms" style="width: 100%;">
         <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" >
                 <template slot-scope="scope" >
                     {{scope.$index + 1}}
                     {{scope.$index + 1}}
                 </template>
                 </template>
             </el-table-column>
             </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">
                 <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>
                 </template>
             </el-table-column>
             </el-table-column>
-            <el-table-column label="操作" width="280">
+            <el-table-column :label="$t('operation')" width="280">
                 <template slot-scope="scope">
                 <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>
                 </template>
             </el-table-column>
             </el-table-column>
         </el-table>
         </el-table>
@@ -31,21 +31,21 @@
       <el-dialog :title="titleTex" :visible.sync="dialogVisible" width="400px" :before-close="handleClose">
       <el-dialog :title="titleTex" :visible.sync="dialogVisible" width="400px" :before-close="handleClose">
         <div>
         <div>
             <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="80px" class="demo-ruleForm">
             <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-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-radio-group>
                 </el-form-item>
                 </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-item>
             </el-form>
             </el-form>
         </div>
         </div>
         <span slot="footer" class="dialog-footer">
         <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>
         </span>
       </el-dialog>
       </el-dialog>
   </div>
   </div>
@@ -58,7 +58,7 @@ export default {
   data() {
   data() {
     return {
     return {
       heightDoms: document.documentElement.clientHeight - 130,
       heightDoms: document.documentElement.clientHeight - 130,
-      titleTex: '添加表单字段',
+      titleTex: this.$t('tianJiaBiaoDanZiDuan'),
       dialogVisible: false,
       dialogVisible: false,
       ruleForm: {
       ruleForm: {
           id: '',
           id: '',
@@ -66,7 +66,7 @@ export default {
           customName: '',
           customName: '',
           customType: '0'
           customType: '0'
       },
       },
-      rules: {customName: [{required: true, message: '请输入自定义名称', trigger: 'blur'}]},
+      rules: {customName: [{required: true, message: this.$t('qingShuRuZiDingYiMingCheng'), trigger: 'blur'}]},
       listLoading: false,
       listLoading: false,
       user: JSON.parse(sessionStorage.getItem("user")),
       user: JSON.parse(sessionStorage.getItem("user")),
       dataList: []
       dataList: []
@@ -104,7 +104,7 @@ export default {
     addJa(tex) {
     addJa(tex) {
         if(this.dataList.length >= 10) {
         if(this.dataList.length >= 10) {
             this.$message({
             this.$message({
-                message: '最多只能存在十个自定义字段',
+                message: this.$t('zuiDuoZhiNengCunZaiShiGeZiDingYiZiDuan'),
                 type: 'warning'
                 type: 'warning'
             });
             });
             return
             return
@@ -139,14 +139,14 @@ export default {
                 this.listLoading = false
                 this.listLoading = false
                 if(res.code == 'ok') {
                 if(res.code == 'ok') {
                     this.$message({
                     this.$message({
-                        message: this.titleTex == '添加表单字段' ? '添加成功' : '编辑成功',
+                        message: this.titleTex == this.$t('tianJiaBiaoDanZiDuan') ? this.$t('addsuccessful') : this.$t('editsuccess'),
                         type: 'success'
                         type: 'success'
                     });
                     });
                     this.dialogVisible = false
                     this.dialogVisible = false
                     this.getObtain()
                     this.getObtain()
                 } else {
                 } else {
                     this.$message({
                     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'
                         type: 'error'
                     });
                     });
                 }
                 }
@@ -171,13 +171,13 @@ export default {
         res => {
         res => {
             if(res.code == 'ok') {
             if(res.code == 'ok') {
                 this.$message({
                 this.$message({
-                    message: '删除成功',
+                    message: this.$t('message.successfullyDeleted'),
                     type: 'success'
                     type: 'success'
                 });
                 });
                 this.getObtain()
                 this.getObtain()
             } else {
             } else {
                 this.$message({
                 this.$message({
-                    message: '删除失败:' + res.msg,
+                    message: this.$t('shanChuShiBai') + res.msg,
                     type: 'error'
                     type: 'error'
                 });
                 });
             }
             }

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

@@ -36,7 +36,7 @@
                         <p ><span class="heavyTxt">{{ $t('other.taskGroup') }}</span>
                         <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>
                             <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>
-                        <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 :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">
                             <el-menu-item :index="item.id" v-for="item in groupList" :key="item.id"  class="group_style">
                                 <div slot="title">
                                 <div slot="title">
@@ -59,7 +59,7 @@
                                             {{ $t('changegroups') }}</el-dropdown-item>
                                             {{ $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)">
                                         <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>
                                             <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)">
                                         <el-dropdown-item divided @click.native="addToTemplate(item)" :disabled="!(projectCreatorId == user.id || projectInchargerId == user.id || permissions.projectManagement || isManageDept)">
                                             <i class="el-icon-plus"></i>
                                             <i class="el-icon-plus"></i>
                                             {{ $t('settemplate') }}</el-dropdown-item>
                                             {{ $t('settemplate') }}</el-dropdown-item>
@@ -116,8 +116,8 @@
                                 <el-form-item label="wbsCode:" v-if="user.companyId == 936">
                                 <el-form-item label="wbsCode:" v-if="user.companyId == 936">
                                     <span>{{groupDetailData.wbsCode}}</span>
                                     <span>{{groupDetailData.wbsCode}}</span>
                                 </el-form-item>
                                 </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-item>
                             </el-form>
                             </el-form>
                         </div>
                         </div>
@@ -150,7 +150,7 @@
                             
                             
                             <el-col :span="16" style="float:right;" class="hideCompletedFelx">
                             <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-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">
                                     <el-option v-for="item in orderList" :key="item.id" :label="item.name" :value="item.id">
                                         <span>{{item.name}}</span>
                                         <span>{{item.name}}</span>
@@ -365,7 +365,7 @@
                     </el-input>
                     </el-input>
 
 
                     <div v-if="user.userNameNeedTranslate == '1'">
                     <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-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
                         </el-input>
                         </el-input>
                     </div>
                     </div>
@@ -1099,7 +1099,7 @@
                 <el-form label-width="20%">
                 <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="$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 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-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">
                         <el-link :underline="false" type="primary" style="color:#aaa;" @click="deleteStages(item,index)"  v-if="index != 0">
                             <i class="el-icon-delete"></i>
                             <i class="el-icon-delete"></i>
@@ -1146,42 +1146,42 @@
             </div>
             </div>
         </el-dialog>
         </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 :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>
-                <el-table-column prop="manDay" width="200" label="预估工时(人天)" >
+                <el-table-column prop="manDay" width="200" :label="$t('yuGuGongShiRenTian')" >
                     <template slot-scope="scope">
                     <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> -->
                         <!-- <i v-if="user.companyId=3092 && scope.row.disabled"  @click="changeBudget(scope.row)"  class="el-icon-circle-plus-outline"></i> -->
                     </template>
                     </template>
                 </el-table-column>
                 </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">
                     <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>
                         <i v-if="user.companyId=3092 && scope.row.disabled"  @click="changeBudget(scope.row)"  class="el-icon-circle-plus-outline"></i>
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
             </el-table>
             </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">
             <div slot="footer" class="dialog-footer">
                 <el-button type="primary" @click="setManDayData()" style="width:100%;" >{{ $t('save') }}</el-button>
                 <el-button type="primary" @click="setManDayData()" style="width:100%;" >{{ $t('save') }}</el-button>
             </div>
             </div>
         </el-dialog>
         </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 :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>
-                <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
                     <el-input
                         type="textarea"
                         type="textarea"
                         :rows="2"
                         :rows="2"
-                        placeholder="请输入内容"
+                        :placeholder="$t('pleaseentercontent')"
                         v-model="groupBudgetData.remark">
                         v-model="groupBudgetData.remark">
                     </el-input>
                     </el-input>
                 </el-form-item>
                 </el-form-item>
@@ -1396,7 +1396,7 @@
                     name: [{ required: true, message: this.$t('pleaseenteragroupname'), trigger: "blur" }],
                     name: [{ required: true, message: this.$t('pleaseenteragroupname'), trigger: "blur" }],
                 },
                 },
                 rulesManDay: {
                 rulesManDay: {
-                    manDay: [{ required: true, message: '请输入预估工时', trigger: "blur" }],
+                    manDay: [{ required: true, message: this.$t('qingShuRuYuGuGongShi'), trigger: "blur" }],
                 },
                 },
                 rules2: {
                 rules2: {
                     stagesName: [{ required: true, message: this.$t('pleaseenteratasklistname'), trigger: "blur" }],
                     stagesName: [{ required: true, message: this.$t('pleaseenteratasklistname'), trigger: "blur" }],
@@ -1822,7 +1822,7 @@
             },
             },
             // 列表的删除按钮
             // 列表的删除按钮
             taskFileDelete(eid){
             taskFileDelete(eid){
-                this.$confirm('是否移除此文件?', this.$t('other.prompts'), {
+                this.$confirm(this.$t('shiFouYiChuCiWenJian'), this.$t('other.prompts'), {
                     confirmButtonText: this.$t('btn.determine'),
                     confirmButtonText: this.$t('btn.determine'),
                     cancelButtonText: this.$t('btn.cancel'),
                     cancelButtonText: this.$t('btn.cancel'),
                     type: 'warning'
                     type: 'warning'
@@ -2991,7 +2991,7 @@
                 }
                 }
                 if(!groupBudgetData.remark) {
                 if(!groupBudgetData.remark) {
                     this.$message({
                     this.$message({
-                        message: '请输入变更理由',
+                        message: this.$t('qingShuRuBianGengLiYou'),
                         type: "error"
                         type: "error"
                     });
                     });
                     return
                     return
@@ -3000,7 +3000,7 @@
                 res => {
                 res => {
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         this.$message({
                         this.$message({
-                        message: "操作成功",
+                        message: this.$t('operationissuccessful'),
                         type: "success"
                         type: "success"
                         });
                         });
                         this.changeBudgetDig=false
                         this.changeBudgetDig=false
@@ -3560,7 +3560,9 @@
                 this.$refs.fileCenter.refreshPage();
                 this.$refs.fileCenter.refreshPage();
                 this.$refs.projectInfo.refreshPage();
                 this.$refs.projectInfo.refreshPage();
                 this.$refs.summary.refreshPage();
                 this.$refs.summary.refreshPage();
-                this.$refs.costbaseline.refreshPage();
+                if(this.permissions.projectBaseline) {
+                    this.$refs.costbaseline.refreshPage();
+                }
                 // this.$refs.earning.refreshPage();
                 // this.$refs.earning.refreshPage();
                 if(this.user.companyId == '936') {
                 if(this.user.companyId == '936') {
                     this.$refs.projectInfo.getKeyNodes()
                     this.$refs.projectInfo.getKeyNodes()

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

@@ -1,7 +1,7 @@
 <template>
 <template>
   <div>
   <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 :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">
           <template slot-scope="scope">
               <!-- user.userNameNeedTranslate == 1 -->
               <!-- user.userNameNeedTranslate == 1 -->
               <span v-if="user.userNameNeedTranslate == 1 && scope.row.translationType == 'department'"><TranslationOpenDataText type='departmentName' :openid='scope.row.text'></TranslationOpenDataText></span>
               <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>
               <span v-if="user.userNameNeedTranslate != 1">{{scope.row.text}}</span>
           </template>
           </template>
         </el-table-column>
         </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">
           <template slot-scope="scope">
             <span v-if="user.userNameNeedTranslate == 1 && scope.row.translationType == 'user'">
             <span v-if="user.userNameNeedTranslate == 1 && scope.row.translationType == 'user'">
               <span v-for="(item, index) in scope.row.userNameList" :key="index">
               <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'">
                   <!-- <span v-if="scope.row.translationType == 'user' && scope.column.label.indexof(scope.row.end_date) != '-1'">
                     <TranslationOpenDataText type='userName' :openid='scope.row.text'></TranslationOpenDataText>
                     <TranslationOpenDataText type='userName' :openid='scope.row.text'></TranslationOpenDataText>
                   </span> -->
                   </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.end_date | dataValue(scope.column, scope.row)}} -->
                     <!-- {{scope.row.start_date | dataValue(scope.column, scope.row)}} -->
                     <!-- {{scope.row.start_date | dataValue(scope.column, scope.row)}} -->
                     {{scope.row.con_data | dataValue(scope.column, scope.row)}}
                     {{scope.row.con_data | dataValue(scope.column, scope.row)}}
                   </span>
                   </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.end_date | dataValue(scope.column, scope.row)}} -->
                     <!-- {{scope.row.start_date | dataValue(scope.column, scope.row)}} -->
                     <!-- {{scope.row.start_date | dataValue(scope.column, scope.row)}} -->
                     {{scope.row.con_data | dataValue(scope.column, scope.row)}}
                     {{scope.row.con_data | dataValue(scope.column, scope.row)}}
@@ -154,7 +154,7 @@ export default {
     // 递归加颜色以及存储需要合并的数据
     // 递归加颜色以及存储需要合并的数据
     recursive(data) {
     recursive(data) {
       for (let i in data) {
       for (let i in data) {
-            if(this.stafforpro == '按项目查看') {
+            if(this.stafforpro == this.$t('an-xiang-mu-cha-kan')) {
               data[i].color = '#409EFF'
               data[i].color = '#409EFF'
               if(data[i].translationType == 'user' && data[i].text) {
               if(data[i].translationType == 'user' && data[i].text) {
                 let arr = []
                 let arr = []
@@ -237,7 +237,7 @@ export default {
             if(data[i].id.indexOf(this.$t('other.AskForLeave')) != '-1') {
             if(data[i].id.indexOf(this.$t('other.AskForLeave')) != '-1') {
               data[i].color = '#F56C6C'
               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) {
               if(data[i].level == 0) {
                 data[i].color = '#409EFF'
                 data[i].color = '#409EFF'
               }
               }
@@ -304,7 +304,7 @@ export default {
     combination(month, data) {
     combination(month, data) {
       let monthStr = [this.initialMonth, ...month]
       let monthStr = [this.initialMonth, ...month]
       let arrList = []
       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) {
       for(let i in monthStr) {
         let obj = {}
         let obj = {}
         obj.name = monthStr[i]
         obj.name = monthStr[i]

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

@@ -51,8 +51,8 @@
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
                         <el-table-column prop="categoryName" :label="$t('projectclassification')"  width="140"></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>
                         <el-table-column prop="inchargerName" :label="$t('projectmanager')"  min-width="150">
                         <el-table-column prop="inchargerName" :label="$t('projectmanager')"  min-width="150">
                             <template slot-scope="scope">
                             <template slot-scope="scope">
@@ -73,7 +73,7 @@
                                 <span v-else>{{importanceListLable[scope.row.level - 1]}}</span>
                                 <span v-else>{{importanceListLable[scope.row.level - 1]}}</span>
                             </template>
                             </template>
                         </el-table-column>
                         </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">
                             <template slot-scope="scope">
                                 {{scope.row.status == null?"-":approvalStatusStr[scope.row.status]}}
                                 {{scope.row.status == null?"-":approvalStatusStr[scope.row.status]}}
                             </template>
                             </template>
@@ -255,7 +255,7 @@
                     <el-dialog :title="$t('selectingParticipants')"  :visible.sync="chooseParticipVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
                     <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> -->
                         <!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
                         <div v-if="user.userNameNeedTranslate == '1'">
                         <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-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
                             </el-input>
                             </el-input>
                         </div>
                         </div>
@@ -352,26 +352,26 @@
                         </div>
                         </div>
                         <el-divider></el-divider>
                         <el-divider></el-divider>
                         <div class="line">
                         <div class="line">
-                            <span>成本基线</span>
+                            <span>{{ $t('costbaseline') }}</span>
                         </div>
                         </div>
                         <div class="line" v-for="(item,index) in projectApprocalDetail.projectApprovalBasecostList">
                         <div class="line" v-for="(item,index) in projectApprocalDetail.projectApprovalBasecostList">
                             <span>{{item.baseName+":"}}</span><span>{{item.baseAmount}}</span>
                             <span>{{item.baseName+":"}}</span><span>{{item.baseAmount}}</span>
                         </div>
                         </div>
                         <el-divider></el-divider>
                         <el-divider></el-divider>
                         <div class="line">
                         <div class="line">
-                            <span>操作记录</span>
+                            <span>{{ $t('caoZuoJiLu') }}</span>
                         </div>
                         </div>
                         <div class="line" v-for="(item,index) in approvalLogData">
                         <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>
                         <div slot="footer" class="dialog-footer">
                         <div slot="footer" class="dialog-footer">
                             <el-button type="primary" @click="projectApprovalDetailVisible = false" >{{'关闭'}}</el-button>
                             <el-button type="primary" @click="projectApprovalDetailVisible = false" >{{'关闭'}}</el-button>
                         </div>
                         </div>
                     </el-dialog>
                     </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')}}
                     <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>
                     <p>2. {{$t('other.projectsAndPeopleInThetemplate')}}。</p>
                     <p>2. {{$t('other.projectsAndPeopleInThetemplate')}}。</p>
                     <p style="display: flex;justify-content: center;">
                     <p style="display: flex;justify-content: center;">
@@ -380,7 +380,7 @@
                     </el-upload>
                     </el-upload>
                     </p>
                     </p>
                     </el-dialog>
                     </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 >
                             <div >
                                 {{importResultMsg}}
                                 {{importResultMsg}}
                             </div>
                             </div>
@@ -407,7 +407,7 @@ return {
     page: 1,
     page: 1,
     size: localStorage.getItem("projectPageSize")==null?20:parseInt(localStorage.getItem("projectPageSize")),
     size: localStorage.getItem("projectPageSize")==null?20:parseInt(localStorage.getItem("projectPageSize")),
     listLoading:false,
     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')}],
     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')],
     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,
     addFormVisible:false,
@@ -442,7 +442,7 @@ return {
         code: [{ required: true, message: this.$t('qing-shu-ru-bian-hao'), trigger: "blur" }],
         code: [{ required: true, message: this.$t('qing-shu-ru-bian-hao'), trigger: "blur" }],
         projectStageName: [{ required: true, message: this.$t('pleaseentername'), trigger: "blur" }],
         projectStageName: [{ required: true, message: this.$t('pleaseentername'), trigger: "blur" }],
         projectLevelName: [{ 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,
     chosenMembCount:0,
     dataDetail:{},
     dataDetail:{},
@@ -459,7 +459,7 @@ return {
     projectApprocalDetail:{},
     projectApprocalDetail:{},
     importDialog:false,
     importDialog:false,
     approvalLogData:[],
     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,
     addLoading:false,
     importingData:false,
     importingData:false,
     showImportResult:false,
     showImportResult:false,
@@ -1221,7 +1221,7 @@ methods: {
         this.getList()
         this.getList()
     },
     },
     deletePro(i, item) {
     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'),
             confirmButtonText: this.$t('btn.determine'),
             cancelButtonText: this.$t('btn.cancel'),
             cancelButtonText: this.$t('btn.cancel'),
             type: "warning"
             type: "warning"
@@ -1269,7 +1269,7 @@ methods: {
             this.listLoading = false;
             this.listLoading = false;
             if (res.code == "ok") {
             if (res.code == "ok") {
                 this.$message({
                 this.$message({
-                    message: "操作成功",
+                    message: this.$t('operationissuccessful'),
                     type: "success"
                     type: "success"
                 });
                 });
                 this.addFormVisible=false
                 this.addFormVisible=false
@@ -1328,7 +1328,7 @@ methods: {
             this.importingData = false;
             this.importingData = false;
             if (res.code == "ok") {
             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.showImportResult=true
                 this.getList();
                 this.getList();
                 this.importDialog = false;
                 this.importDialog = false;
@@ -1359,7 +1359,7 @@ methods: {
         res => {
         res => {
             if (res.code == "ok") {
             if (res.code == "ok") {
                 const a = document.createElement("a"); // 创建a标签
                 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.setAttribute("href", res.data); // href链接
                 a.click(); // 自执行点击事件
                 a.click(); // 自执行点击事件
                 a.remove();
                 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-form-item :label="$t('workSettings')" prop="allday" v-if="!timeType.lockWorktime">
                             <el-checkbox v-model="timeType.fillOvertime" :label="$t('hourscanbereported')" />
                             <el-checkbox v-model="timeType.fillOvertime" :label="$t('hourscanbereported')" />
                             <el-form-item v-if="timeType.fillOvertime">
                             <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>
                                         <i class="el-icon-question" style="color:#606266"></i>
                             </el-tooltip>
                             </el-tooltip>
                             </el-form-item>
                             </el-form-item>
@@ -219,20 +219,20 @@
                             <el-option :label="$t('monthAlert')" :value="3"></el-option>
                             <el-option :label="$t('monthAlert')" :value="3"></el-option>
                             <el-option :label="$t('alertLastWeek')" :value="4"></el-option>
                             <el-option :label="$t('alertLastWeek')" :value="4"></el-option>
                         </el-select>
                         </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-select v-model="timeType.alertDay" style="width:80px;">
                             <el-option v-for="item in alertDayRange" :label="item" :value="item" :key="item"></el-option>
                             <el-option v-for="item in alertDayRange" :label="item" :value="item" :key="item"></el-option>
                         </el-select>
                         </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-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-option v-for="item in alertWeekDayRange" :label="item.label" :value="item.value" :key="item.value"></el-option>
                         </el-select>
                         </el-select>
-                        提醒)</span>
+                        {{ $t('tiXing') }})</span>
                     </el-form-item>
                     </el-form-item>
                     <el-form-item v-if="timeType.alertType != 3" :label="$t('remindertext')" prop="alertMsg" style="margin-left:10px;">
                     <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>
                             <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-item>
                     
                     
                     </el-form>
                     </el-form>
@@ -250,7 +250,7 @@
                         </div>
                         </div>
 
 
                         <div style="width:100%;margin-top: 10px;">
                         <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 
                             <el-time-picker 
                                     v-model="timeType.waitCheckAlertTime"
                                     v-model="timeType.waitCheckAlertTime"
                                     :placeholder="$t('checkRemindertime')"
                                     :placeholder="$t('checkRemindertime')"
@@ -262,13 +262,13 @@
                                     end: '23:30'
                                     end: '23:30'
                                     }">
                                     }">
                                 </el-time-picker>
                                 </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-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-option v-for="item in alertWeekDayRange" :label="item.label" :value="item.value" :key="item.value"></el-option>
                                 </el-select>
                                 </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>
                                 <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>
                             </span>
                         </div>
                         </div>
 
 
@@ -284,31 +284,31 @@
             <div class="panel" style="height:260px;">
             <div class="panel" style="height:260px;">
                 <el-form :inline="true" :model="timeType"  style="margin-top:10px;">
                 <el-form :inline="true" :model="timeType"  style="margin-top:10px;">
                 <div class="panel_flx">
                 <div class="panel_flx">
-                    <el-form-item>额外工作日设置:</el-form-item>
+                    <el-form-item>{{ $t('eWaiGongZuoRiSheZhi') }}</el-form-item>
                     <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-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-form-item>
                     <el-form-item>
-                        <el-checkbox v-model="settThree" label="其他法定节日" />
+                        <el-checkbox v-model="settThree" :label="$t('qiTaFaDingJieRi')" />
                     </el-form-item>
                     </el-form-item>
                 </div>
                 </div>
                 <el-form-item>
                 <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><br/>
                 <el-form-item :label="$t('filltime')" prop="fillMonths">
                 <el-form-item :label="$t('filltime')" prop="fillMonths">
                     <el-select v-model="timeType.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 v-for="item in monthTimeList" :key="item.id" :label="item.name" :value="item.id">
                         </el-option>
                         </el-option>
                     </el-select>
                     </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-select v-model="timeType.fillMonthOnDay" style="width:80px;">
                             <el-option v-for="item in alertDayRange" :key="item" :label="item" :value="item">
                             <el-option v-for="item in alertDayRange" :key="item" :label="item" :value="item">
                             </el-option>
                             </el-option>
                         </el-select>
                         </el-select>
-                        号(含)前填报。
+                        {{ $t('haoHanQianTianBao') }} 
                     </span>
                     </span>
                     
                     
                     <span style="color:#666;margin-left:10px;">{{ $t('instructions') }}</span>
                     <span style="color:#666;margin-left:10px;">{{ $t('instructions') }}</span>
@@ -329,16 +329,16 @@
         </el-col>
         </el-col>
         </el-row>
         </el-row>
         <div class="yanjiu">
         <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>
                                 <i class="el-icon-question" style="color:#606266"></i>
                             </el-tooltip>
                             </el-tooltip>
             </el-tag>
             </el-tag>
         </div>
         </div>
         <div class="yanjiu">
         <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>
             <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>
         <!-- 设置研究中心 -->
         <!-- 设置研究中心 -->
         <div class="yanjiu">
         <div class="yanjiu">
@@ -361,7 +361,7 @@
                             <el-button type="primary" size="small" @click="bianji()">{{ $t('datamaintenance') }}</el-button>
                             <el-button type="primary" size="small" @click="bianji()">{{ $t('datamaintenance') }}</el-button>
                         </el-form-item>
                         </el-form-item>
                         <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-item>
                     </el-form>
                     </el-form>
                 </div>
                 </div>
@@ -417,20 +417,20 @@
             </el-col>
             </el-col>
         </el-row>
         </el-row>
         <div class="yanjiu" v-if="user.company.packageProject==1">
         <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>
             <el-switch style="margin:0px 0 10px 81px;" v-model="timeType.hideStages" active-color="#20a0ff"></el-switch>
         </div>
         </div>
         <div class="yanjiu" v-if="user.company.packageProject==1">
         <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>
             <el-switch style="margin:0px 0 10px 81px;" v-model="timeType.hideTask" active-color="#20a0ff" @change="onHideTask()"></el-switch>
         </div>
         </div>
         <div class="yanjiu" v-if="user.company.packageProject==1 && !timeType.hideTask">
         <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>
             <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>
             <span style="margin:0px 0 10px 10px;color:#999;">{{ $t('parametermandatory') }}</span>
         </div>
         </div>
         <div class="yanjiu">
         <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>
             <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>
             <span style="margin:0px 0 10px 10px;color:#999;">{{ $t('parametermandatory') }}</span>
         </div>
         </div>
@@ -449,7 +449,7 @@
         <!-- 特殊节假日设置 -->
         <!-- 特殊节假日设置 -->
         <div class="yanjiu">
         <div class="yanjiu">
             <p style="margin: 0 68px 0 10px;color:#666;">{{'特殊节假日设置'}}</p>
             <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>
             <span style="margin-left:10px;color:#999;">{{'设置部门或人员的特殊节假日'}}</span>
         </div>
         </div>
 
 
@@ -464,16 +464,16 @@
             <el-button  type="primary" @click="submitInsert" :loading="addLoading">{{ $t('save') }}</el-button>
             <el-button  type="primary" @click="submitInsert" :loading="addLoading">{{ $t('save') }}</el-button>
         </div>
         </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 :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>
-            <el-table-column prop="name" :label="'有效范围'" width="120">
+            <el-table-column prop="name" :label="$t('youXiaoFanWei')" width="120">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
-                    {{scope.row.rangeType==0?"全公司":"部分成员"}}
+                    {{scope.row.rangeType==0?$t('quanGongSi'):$t('buFenChengYuan')}}
                 </template>
                 </template>
             </el-table-column>
             </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">
                 <template slot-scope="scope">
                     <div v-if="user.userNameNeedTranslate != '1'">{{ scope.row.targetDeptsNames }}</div>
                     <div v-if="user.userNameNeedTranslate != '1'">{{ scope.row.targetDeptsNames }}</div>
                     <div v-else>
                     <div v-else>
@@ -484,7 +484,7 @@
                     </div>
                     </div>
                 </template>
                 </template>
             </el-table-column>
             </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">
                 <template slot-scope="scope">
                     <div v-if="user.userNameNeedTranslate != '1'">{{ scope.row.targetUsersNames }}</div>
                     <div v-if="user.userNameNeedTranslate != '1'">{{ scope.row.targetUsersNames }}</div>
                     <div v-else>
                     <div v-else>
@@ -508,9 +508,9 @@
             </div>
             </div>
         </el-dialog>
         </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 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"
                     <el-date-picker v-model="holidaySeetingForm.holidayDate"
                     :editable="false"
                     :editable="false"
                     format="yyyy-MM-dd" 
                     format="yyyy-MM-dd" 
@@ -518,14 +518,14 @@
                     :clearable="false" type="date" 
                     :clearable="false" type="date" 
                     :placeholder="$t('optiondate')"></el-date-picker>
                     :placeholder="$t('optiondate')"></el-date-picker>
                 </el-form-item>
                 </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>
                 </el-form-item>
                 <div style="height: 36vh" v-if="holidaySeetingForm.rangeType!=1"></div>
                 <div style="height: 36vh" v-if="holidaySeetingForm.rangeType!=1"></div>
                 <div v-if="holidaySeetingForm.rangeType==1">
                 <div v-if="holidaySeetingForm.rangeType==1">
                     <div class="specialHolidaysClass">
                     <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">
                         <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)">
                             <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>
                                 <span v-if="user.userNameNeedTranslate != '1'">{{item}}</span>
@@ -534,7 +534,7 @@
                         </div>
                         </div>
                     </div>
                     </div>
                     <div class="specialHolidaysClass">
                     <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">
                         <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)">
                             <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>
                                 <span v-if="user.userNameNeedTranslate != '1'">{{item}}</span>
@@ -546,7 +546,7 @@
             </el-form>
             </el-form>
             <div slot="footer" class="dialog-footer">
             <div slot="footer" class="dialog-footer">
                 <el-button type="primary" @click="addHolidaySeeting = false" >{{ $t('Shutdown') }}</el-button>
                 <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>
             </div>
         </el-dialog>
         </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">
         <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'">
             <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-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
                 </el-input>
                 </el-input>
             </div>
             </div>
@@ -703,9 +703,9 @@
         </el-dialog>
         </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'">
             <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-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
                 </el-input>
                 </el-input>
             </div>
             </div>
@@ -753,7 +753,7 @@
         },
         },
         data() {
         data() {
             return {
             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: [],
                 expandedKeys: [],
                 checkStrictly: false,
                 checkStrictly: false,
                 checkedKeys:[],
                 checkedKeys:[],
@@ -774,14 +774,14 @@
                 tourFlg: false,
                 tourFlg: false,
                 steps: [{
                 steps: [{
                         target: '[data-v-step="timetypeBox"]',
                         target: '[data-v-step="timetypeBox"]',
-                        content: `按照企业情况调整`,
+                        content: this.$t('anZhaoQiYeQingKuangTiaoZheng'),
                         params: {
                         params: {
                             placement: 'left',
                             placement: 'left',
                             highlight: true 
                             highlight: true 
                         }
                         }
                     },{
                     },{
                         target: '[data-v-step="/xinshozhidao1"]',
                         target: '[data-v-step="/xinshozhidao1"]',
-                        content: `请先点击系统基础设置`,
+                        content: this.$t('qingXianDianJiXiTongJiChuSheZhi'),
                         params: {
                         params: {
                             placement: 'right',
                             placement: 'right',
                             highlight: true 
                             highlight: true 
@@ -792,10 +792,10 @@
                     startTimeout: 1000,   //1秒后执行
                     startTimeout: 1000,   //1秒后执行
                     highlight: true,
                     highlight: true,
                     labels: {
                     labels: {
-                        buttonSkip: '跳过',
-                        buttonPrevious: '上一步',
-                        buttonNext: '下一步',
-                        buttonStop: '关闭'
+                        buttonSkip: this.$t('tiaoGuo'),
+                        buttonPrevious: this.$t('btn.previousstep'),
+                        buttonNext: this.$t('btn.nextStep'),
+                        buttonStop: this.$t('Shutdown')
                     }
                     }
                 },
                 },
                 myCallbacks: {
                 myCallbacks: {
@@ -803,7 +803,7 @@
                     onNextStep: this.myCustomNextStepCallback
                     onNextStep: this.myCustomNextStepCallback
                 },
                 },
                 alertDayRange: ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15'],
                 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:{
                 pushParam:{
                     day:'05',
                     day:'05',
                     hour:'01',
                     hour:'01',
@@ -972,7 +972,7 @@
                 this.http.post('/holiday-setting/holidaySetting',{...newForm},res => {
                 this.http.post('/holiday-setting/holidaySetting',{...newForm},res => {
                     if(res.code == 'ok'){
                     if(res.code == 'ok'){
                         this.$message({
                         this.$message({
-                            message: "保存成功",
+                            message: this.$t('savesuccess'),
                             type: 'success'
                             type: 'success'
                         })
                         })
                         this.specialHolidaysDialog = false
                         this.specialHolidaysDialog = false
@@ -1070,7 +1070,7 @@
                 },res => {
                 },res => {
                     if(res.code == 'ok'){
                     if(res.code == 'ok'){
                         console.log(res.data)
                         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))
                         all.children = JSON.parse(JSON.stringify(res.data))
                         this.options.unshift(all)
                         this.options.unshift(all)
                     }else {
                     }else {
@@ -1230,13 +1230,13 @@
                         var data = this.$refs.deptTree.getCheckedNodes()
                         var data = this.$refs.deptTree.getCheckedNodes()
                         var deptId = [];
                         var deptId = [];
                         for(var i in data){
                         for(var i in data){
-                            if(data[i].label != '全选'){
+                            if(data[i].label != this.$t('btn.selectAll')){
                                 deptId.push(data[i].id)
                                 deptId.push(data[i].id)
                             }
                             }
                         }
                         }
                         this.restTime.departmentId = deptId
                         this.restTime.departmentId = deptId
                         if(this.restTime.departmentId.length == 0){
                         if(this.restTime.departmentId.length == 0){
-                            this.$message("请选择部门")
+                            this.$message(this.$t('qing-xuan-ze-bu-men'))
                             return
                             return
                         }
                         }
                     }
                     }
@@ -1341,7 +1341,7 @@
                 this.addSubProject = true;
                 this.addSubProject = true;
             },
             },
             deleteHolidaySeeting(item) {
             deleteHolidaySeeting(item) {
-                this.$confirm('确定删除这条数据吗?','删除', {
+                this.$confirm(this.$t('queDingShanChuZheTiaoShuJuMa'),this.$t('btn.delete'), {
                     confirmButtonText: this.$t('btn.determine'),
                     confirmButtonText: this.$t('btn.determine'),
                     cancelButtonText: this.$t('btn.cancel'),
                     cancelButtonText: this.$t('btn.cancel'),
                     type: "warning"
                     type: "warning"

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

@@ -21,7 +21,7 @@
                     ></el-cascader>
                     ></el-cascader>
                 </el-form-item>
                 </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">
                     <div style="margin-left: 8px">
                         <el-cascader v-if="user.userNameNeedTranslate != 1" v-model="screenDeptId" :placeholder="$t('defaultText.pleaseChoose')" style="width: 125px"
                         <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
                         :options="departmentList" :props="{ checkStrictly: true,expandTrigger: 'hover' }" :show-all-levels="false" clearable
@@ -41,7 +41,7 @@
                     </div>
                     </div>
                 </el-form-item>
                 </el-form-item>
 
 
-                <el-form-item :label="'项目'">
+                <el-form-item :label="$t('other.project')">
                     <div style="margin-left: 8px">
                     <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-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>
                             <el-option v-for="item in allProjectList" :key="item.id"  :label="item.projectName" :value="item.id"></el-option>
@@ -49,7 +49,7 @@
                     </div>
                     </div>
                 </el-form-item>
                 </el-form-item>
 
 
-                <el-form-item :label="'任务分组'">
+                <el-form-item :label="$t('lable.taskGrouping')">
                     <div style="margin-left: 8px">
                     <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-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>
                             <el-option v-for="item in taskGroupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
@@ -57,7 +57,7 @@
                     </div>
                     </div>
                 </el-form-item>
                 </el-form-item>
 
 
-                <el-form-item :label="'人员'">
+                <el-form-item :label="$t('ren-yuan')">
                     <div style="margin-left: 8px">
                     <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-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>
                             <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id"></el-option>
@@ -91,8 +91,8 @@
                     </div>
                     </div>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item style="float: right;" v-if="user.companyId != '3092'">
                 <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-item>
             </el-form>
             </el-form>
         </el-col>
         </el-col>
@@ -119,12 +119,12 @@
                     </el-table-column>
                     </el-table-column>
                     <el-table-column prop="stagesName" :label="$t('taskstage')" sortable width="180" @mouseover="mouseOver">
                     <el-table-column prop="stagesName" :label="$t('taskstage')" sortable width="180" @mouseover="mouseOver">
                     </el-table-column>
                     </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">
                         <template slot-scope="scope">
                             <div>
                             <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>
                             </div>
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
@@ -184,14 +184,14 @@
                 </el-table>
                 </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>
                     <div>
                         <el-form ref="causeRejectionForm" :model="causeRejectionForm" label-width="80px">
                         <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-input type="textarea" v-model.trim="causeRejectionForm.cause"></el-input>
                             </el-form-item>
                             </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">
                                     <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: 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>
                                         <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>
                         </el-form>
                     </div>
                     </div>
                     <span slot="footer" class="dialog-footer">
                     <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>
                     </span>
                 </el-dialog>
                 </el-dialog>
 
 
@@ -276,25 +276,25 @@
         </el-dialog>
         </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 class="block">
                     <div>
                     <div>
-                        <span class="demonstration">会议开始时间</span>
+                        <span class="demonstration">{{ $t('huiYiKaiShiShiJian') }}</span>
                         <el-date-picker
                         <el-date-picker
                         v-model="meetingStartValue"
                         v-model="meetingStartValue"
                         type="datetime"
                         type="datetime"
-                        placeholder="选择日期时间"
+                        :placeholder="$t('xuanZeRiQiShiJian')"
                         value-format="yyyy-MM-dd HH:mm:ss"
                         value-format="yyyy-MM-dd HH:mm:ss"
                         clearable
                         clearable
                         default-time="10:00:00">
                         default-time="10:00:00">
                         </el-date-picker>
                         </el-date-picker>
                     </div>
                     </div>
                     <div style="margin-top: 20px">
                     <div style="margin-top: 20px">
-                        <span class="demonstration">会议结束时间</span>
+                        <span class="demonstration">{{ $t('huiYiJieShuShiJian') }}</span>
                         <el-date-picker
                         <el-date-picker
                         v-model="meetingEndValue"
                         v-model="meetingEndValue"
                         type="datetime"
                         type="datetime"
-                        placeholder="选择日期时间"
+                        :placeholder="$t('xuanZeRiQiShiJian')"
                         value-format="yyyy-MM-dd HH:mm:ss"
                         value-format="yyyy-MM-dd HH:mm:ss"
                         clearable.
                         clearable.
                         default-time="11:00:00">
                         default-time="11:00:00">
@@ -302,8 +302,8 @@
                     </div>
                     </div>
                 </div>
                 </div>
                 <span slot="footer" class="dialog-footer">
                 <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>
                 </span>
             </el-dialog>
             </el-dialog>
 
 
@@ -677,7 +677,7 @@ import { error } from 'dingtalk-jsapi';
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         this.meeting=false,
                         this.meeting=false,
                         this.$message({
                         this.$message({
-                        message: "成功发起会议",
+                        message: this.$t('chengGongFaQiHuiYi'),
                         type: "success"
                         type: "success"
                         });
                         });
                     } else {
                     } else {
@@ -828,7 +828,7 @@ import { error } from 'dingtalk-jsapi';
                     res => {
                     res => {
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         var filePath = res.data;
                         var filePath = res.data;
-                        var fName = '待办任务导出.xlsx'
+                        var fName = this.$t('daiBanRenWuDaoChuXlsx')
                         const a = document.createElement('a'); // 创建a标签
                         const a = document.createElement('a'); // 创建a标签
                         a.setAttribute('download', fName);// download属性
                         a.setAttribute('download', fName);// download属性
                         a.setAttribute('href', filePath);// href链接
                         a.setAttribute('href', filePath);// href链接
@@ -1068,7 +1068,7 @@ import { error } from 'dingtalk-jsapi';
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         this.exportTaskLoading = false;
                         this.exportTaskLoading = false;
                         var aTag = document.createElement('a');
                         var aTag = document.createElement('a');
-                        aTag.download = '待办任务';
+                        aTag.download = this.$t('navigation.upcomingTasks');
                         aTag.href = res.data;
                         aTag.href = res.data;
                         aTag.click();
                         aTag.click();
                     } else {
                     } else {

+ 73 - 73
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -11,9 +11,9 @@
                   </div>
                   </div>
             </div> 
             </div> 
             <div style="width: 100%;display: flex">
             <div style="width: 100%;display: flex">
-              <el-button v-if="!adjustPosition" style="width: 100%;" size="small" @click="adjustPositionClick()">调整部门</el-button>
-              <el-button v-if="adjustPosition" style="width: 50%" size="small" @click="adjustPosition = !adjustPosition,data = dataRepeat">取消</el-button>
-              <el-button v-if="adjustPosition" style="width: 50%" size="small" @click="adjustPositionClick()">确定</el-button>
+              <el-button v-if="!adjustPosition" style="width: 100%;" size="small" @click="adjustPositionClick()">{{ $t('tiaoZhengBuMen') }}</el-button>
+              <el-button v-if="adjustPosition" style="width: 50%" size="small" @click="adjustPosition = !adjustPosition,data = dataRepeat">{{ $t('btn.cancel') }}</el-button>
+              <el-button v-if="adjustPosition" style="width: 50%" size="small" @click="adjustPositionClick()">{{ $t('btn.determine') }}</el-button>
             </div>
             </div>
             <el-divider style="margin: 0px 0px !important;height:0.5px;"></el-divider>
             <el-divider style="margin: 0px 0px !important;height:0.5px;"></el-divider>
             <div class="tree" :style="'height:'+ (tableHeight + 83) + 'px'">
             <div class="tree" :style="'height:'+ (tableHeight + 83) + 'px'">
@@ -169,11 +169,11 @@
                     </el-form-item>
                     </el-form-item>
                     <el-form-item style="float:right;">
                     <el-form-item style="float:right;">
                         <div style="width: 300px;display: inline-block;margin-top: 4px">
                         <div style="width: 300px;display: inline-block;margin-top: 4px">
-                            <el-input v-model="keyword" class="input-with-select" placeholder="请输入" clearable="true" size="small" @keyup.enter.native="searchList()">
+                            <el-input v-model="keyword" class="input-with-select" :placeholder="$t('peaseenterthe')" clearable="true" size="small" @keyup.enter.native="searchList()">
                               <el-select v-model="integer" slot="prepend" style="width: 80px">
                               <el-select v-model="integer" slot="prepend" style="width: 80px">
-                                <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('lable.name')" value="0"></el-option>
+                                <el-option :label="$t('phone')" value="1"></el-option>
+                                <el-option :label="$t('Worknumber')" value="2"></el-option>
                               </el-select>
                               </el-select>
                                 <el-button slot="append" @click="searchList" icon="el-icon-search"></el-button>
                                 <el-button slot="append" @click="searchList" icon="el-icon-search"></el-button>
                             </el-input>
                             </el-input>
@@ -220,7 +220,7 @@
                     </div>
                     </div>
                   </template>
                   </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column prop="superiorName" label="直属审核人" width="120" v-if="user.timeType.reportAuditType == 5 || user.timeType.reportAuditType == 6">
+                <el-table-column prop="superiorName" :label="$t('immediatesuperior')" width="120" v-if="user.timeType.reportAuditType == 5 || user.timeType.reportAuditType == 6">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
                     <div>
                     <div>
                       <div v-if="user.userNameNeedTranslate == 1">
                       <div v-if="user.userNameNeedTranslate == 1">
@@ -230,8 +230,8 @@
                     </div>
                     </div>
                   </template>
                   </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column v-if="user.companyId==4374" :label="'员工类型'" width="100">
-                    <template slot-scope="scope">{{findValue('员工类型',scope.row.plateMap)}}</template>
+                <el-table-column v-if="user.companyId==4374" :label="$t('yuanGongLeiXing')" width="100">
+                    <template slot-scope="scope">{{findValue($t('yuanGongLeiXing'),scope.row.plateMap)}}</template>
                 </el-table-column>
                 </el-table-column>
                 <el-table-column :label="$t('jiao-se')" width="100">
                 <el-table-column :label="$t('jiao-se')" width="100">
                     <template slot-scope="scope">{{scope.row.roleName}}</template>
                     <template slot-scope="scope">{{scope.row.roleName}}</template>
@@ -255,14 +255,14 @@
                     <template slot-scope="scope">
                     <template slot-scope="scope">
                         <el-button size="mini" type="default" v-if="scope.row.roleName == $t('role.superAdministrator') && user.id == scope.row.id" @click="transferRole(scope.row)">{{ $t('transfer') }}</el-button>
                         <el-button size="mini" type="default" v-if="scope.row.roleName == $t('role.superAdministrator') && user.id == scope.row.id" @click="transferRole(scope.row)">{{ $t('transfer') }}</el-button>
                         <el-button size="mini" type="default" v-if="scope.row.roleName != $t('role.superAdministrator') && user.userNameNeedTranslate != 1" @click="resetPwd(scope.row)">{{ $t('reset') }}</el-button>
                         <el-button size="mini" type="default" v-if="scope.row.roleName != $t('role.superAdministrator') && user.userNameNeedTranslate != 1" @click="resetPwd(scope.row)">{{ $t('reset') }}</el-button>
-                        <el-button size="mini" type="default" v-if="(user.roleName == '超级管理员' || user.roleName == '系统管理员') && user.companyId == 936" @click="resetPwd(scope.row)">{{ $t('reset') }}</el-button>
+                        <el-button size="mini" type="default" v-if="(user.roleName == $t('role.superAdministrator') || user.roleName == $t('role.systemAdministrator')) && user.companyId == 936" @click="resetPwd(scope.row)">{{ $t('reset') }}</el-button>
                         <!-- <el-button size="mini" type="primary" v-if="scope.row.roleName != $t('role.superAdministrator')" @click="openInsertDialog(scope.row)">{{ $t('bian-ji') }}</el-button> -->
                         <!-- <el-button size="mini" type="primary" v-if="scope.row.roleName != $t('role.superAdministrator')" @click="openInsertDialog(scope.row)">{{ $t('bian-ji') }}</el-button> -->
                         <el-button size="mini" type="primary" @click="openInsertDialog(scope.row, scope.row.roleName)">{{ $t('bian-ji') }}</el-button>
                         <el-button size="mini" type="primary" @click="openInsertDialog(scope.row, scope.row.roleName)">{{ $t('bian-ji') }}</el-button>
                         <!-- <el-button size="mini" type="primary" v-if="scope.row.roleName == $t('role.superAdministrator')" @click="openInsertDialog1(scope.row)">{{ $t('bian-ji') }}</el-button> -->
                         <!-- <el-button size="mini" type="primary" v-if="scope.row.roleName == $t('role.superAdministrator')" @click="openInsertDialog1(scope.row)">{{ $t('bian-ji') }}</el-button> -->
                         <!-- <el-button size="mini" type="danger"  v-if="scope.row.roleName != $t('role.superAdministrator')" @click="deleteUser(scope.row)">删除</el-button> -->
                         <!-- <el-button size="mini" type="danger"  v-if="scope.row.roleName != $t('role.superAdministrator')" @click="deleteUser(scope.row)">删除</el-button> -->
                         <el-button size="mini" type="default" v-if="scope.row.roleName != $t('role.superAdministrator') && scope.row.isActive==1" @click="showDeactiveDialog(scope.row)">{{ $t('ting-yong') }}</el-button>
                         <el-button size="mini" type="default" v-if="scope.row.roleName != $t('role.superAdministrator') && scope.row.isActive==1" @click="showDeactiveDialog(scope.row)">{{ $t('ting-yong') }}</el-button>
                         <el-button size="mini" type="success" v-if="scope.row.roleName != $t('role.superAdministrator') && scope.row.isActive==0" @click="setActive(scope.row, 1)">{{ $t('enable') }}</el-button>
                         <el-button size="mini" type="success" v-if="scope.row.roleName != $t('role.superAdministrator') && scope.row.isActive==0" @click="setActive(scope.row, 1)">{{ $t('enable') }}</el-button>
-                        <el-button size="mini" type="default" v-if="scope.row.roleName != $t('role.superAdministrator') && scope.row.activeInfoByUser == 1" @click="transferActiveDialog(scope.row)">转让</el-button>
+                        <el-button size="mini" type="default" v-if="scope.row.roleName != $t('role.superAdministrator') && scope.row.activeInfoByUser == 1" @click="transferActiveDialog(scope.row)">{{ $t('transfer') }}</el-button>
                       </template>
                       </template>
                 </el-table-column>
                 </el-table-column>
             </el-table>
             </el-table>
@@ -277,8 +277,8 @@
                     
                     
                 <el-button size="small" type="primary" @click="handleSelectionZzjgbtn3" v-if="user.userNameNeedTranslate != 1">{{ $t('modifyingDepartments') }}</el-button>
                 <el-button size="small" type="primary" @click="handleSelectionZzjgbtn3" v-if="user.userNameNeedTranslate != 1">{{ $t('modifyingDepartments') }}</el-button>
                 <el-button size="small" type="primary" @click="handJue">{{ $t('modifyingRoles') }}</el-button>
                 <el-button size="small" type="primary" @click="handJue">{{ $t('modifyingRoles') }}</el-button>
-                <el-button size="small" type="primary" @click="workingHoursDialogClick()">修正工时所属部门</el-button>
-                <el-button size="small" type="primary" @click="handleSelectionUser()">批量启用员工</el-button>
+                <el-button size="small" type="primary" @click="workingHoursDialogClick()">{{ $t('xiuZhengGongShiSuoShuBuMen') }}</el-button>
+                <el-button size="small" type="primary" @click="handleSelectionUser()">{{ $t('piLiangQiYongYuanGong') }}</el-button>
                
                
                 
                 
                 
                 
@@ -297,20 +297,20 @@
       </div>
       </div>
 
 
       <!-- 修正工时所属部门 -->
       <!-- 修正工时所属部门 -->
-      <el-dialog title="修正工时" :visible.sync="workingHoursDialog" width="650px" :before-close="handleClose">
+      <el-dialog :title="$t('xiuZhengGongShi')" :visible.sync="workingHoursDialog" width="650px" :before-close="handleClose">
         <div>
         <div>
           <div class="workingHours">
           <div class="workingHours">
-            <el-radio v-model="workingHoursRadio" label="1">全部工时</el-radio>
-            <el-radio v-model="workingHoursRadio" label="2">部分工时</el-radio>
+            <el-radio v-model="workingHoursRadio" label="1">{{ $t('quanBuGongShi') }}</el-radio>
+            <el-radio v-model="workingHoursRadio" label="2">{{ $t('buFenGongShi') }}</el-radio>
           </div>
           </div>
           <div class="workingHours workingHoursData" v-if="workingHoursRadio == 2">
           <div class="workingHours workingHoursData" v-if="workingHoursRadio == 2">
-            <span class="workingHoursSpan">日期范围</span>
-            <el-date-picker v-model="workingHoursDatas" type="daterange" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+            <span class="workingHoursSpan">{{ $t('time.dateRange') }}</span>
+            <el-date-picker v-model="workingHoursDatas" type="daterange" value-format="yyyy-MM-dd" :range-separator="$t('other.to')" :start-placeholder="$t('time.startDate')" :end-placeholder="$t('time.endDate')"></el-date-picker>
           </div>
           </div>
         </div>
         </div>
         <span slot="footer" class="dialog-footer">
         <span slot="footer" class="dialog-footer">
-          <el-button @click="workingHoursDialog = false">取 消</el-button>
-          <el-button type="primary" @click="workingHours()">确 定</el-button>
+          <el-button @click="workingHoursDialog = false">{{ $t('quXiao') }}</el-button>
+          <el-button type="primary" @click="workingHours()">{{ $t('queDing') }}</el-button>
         </span>
         </span>
       </el-dialog>
       </el-dialog>
 
 
@@ -385,10 +385,10 @@
                     <selectCat :size="'medium'" :widthStr="'360'" v-if="user.userNameNeedTranslate == '1'" :subject="users" :subjectId="depForm.reportAuditUserid" :distinction="'5'" @selectCal="selectCal"></selectCat>
                     <selectCat :size="'medium'" :widthStr="'360'" v-if="user.userNameNeedTranslate == '1'" :subject="users" :subjectId="depForm.reportAuditUserid" :distinction="'5'" @selectCal="selectCal"></selectCat>
                 </el-form-item>
                 </el-form-item>
                 <!-- 是否推送到SAP -->
                 <!-- 是否推送到SAP -->
-                <el-form-item :label="'推送至SAP'" prop="pushToSap" v-if="user.companyId==3092">
+                <el-form-item :label="$t('tuiSongZhiSap')" prop="pushToSap" v-if="user.companyId==3092">
                    <el-radio-group v-model="depForm.pushToSap">
                    <el-radio-group v-model="depForm.pushToSap">
-                      <el-radio :label="1"></el-radio>
-                      <el-radio :label="0"></el-radio>
+                      <el-radio :label="1">{{ $t('state.yes') }}</el-radio>
+                      <el-radio :label="0">{{ $t('state.no') }}</el-radio>
                    </el-radio-group>
                    </el-radio-group>
                 </el-form-item>
                 </el-form-item>
             </el-form>
             </el-form>
@@ -440,25 +440,25 @@
                       <vueCascader :size="'medium'" :widthStr="'430'" :clearable="true && user.userNameNeedTranslate != 1" :subject="option" :subjectId="insertForm.departmentId" :radios="true" :distinction="'2'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" ></vueCascader>
                       <vueCascader :size="'medium'" :widthStr="'430'" :clearable="true && user.userNameNeedTranslate != 1" :subject="option" :subjectId="insertForm.departmentId" :radios="true" :distinction="'2'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" ></vueCascader>
 
 
                   </el-form-item>
                   </el-form-item>
-                  <el-form-item label="可填报部门" prop="reportDeptIds" v-if="user.timeType.userWithMultiDept">
+                  <el-form-item :label="$t('keTianBaoBuMen')" prop="reportDeptIds" v-if="user.timeType.userWithMultiDept">
                     <template v-if="insertForm.reportDeptIdsList && insertForm.reportDeptIdsList.length > 0"> 
                     <template v-if="insertForm.reportDeptIdsList && insertForm.reportDeptIdsList.length > 0"> 
                       <el-tag v-for="(tag, tagIndex) in insertForm.reportDeptIdsList" :key="tag.id" closable :type="'success'" style="margin-right: 10px;" @close="handleDeptClose(tagIndex)">
                       <el-tag v-for="(tag, tagIndex) in insertForm.reportDeptIdsList" :key="tag.id" closable :type="'success'" style="margin-right: 10px;" @close="handleDeptClose(tagIndex)">
                         <TranslationOpenDataText type='departmentName' :openid='tag.label'></TranslationOpenDataText>
                         <TranslationOpenDataText type='departmentName' :openid='tag.label'></TranslationOpenDataText>
                       </el-tag>
                       </el-tag>
                     </template>
                     </template>
-                    <el-link type="primary" :underline="false" @click="addFilldDepartment(insertForm.reportDeptIdsList)">添加</el-link>
+                    <el-link type="primary" :underline="false" @click="addFilldDepartment(insertForm.reportDeptIdsList)">{{ $t('addTian') }}</el-link>
                   </el-form-item>
                   </el-form-item>
 
 
-                  <el-form-item label="审核层级" v-if="user.timeType.reportAuditType == 6">
+                  <el-form-item :label="$t('shenHeCengJi')" v-if="user.timeType.reportAuditType == 6">
                       <el-radio-group v-model="insertForm.onlyAuditOnce" >
                       <el-radio-group v-model="insertForm.onlyAuditOnce" >
-                      <el-radio  :label="0" >两层审核</el-radio>
-                      <el-radio  :label="1">一层审核</el-radio>
+                      <el-radio  :label="0" >{{ $t('liangCengShenHe') }}</el-radio>
+                      <el-radio  :label="1">{{ $t('yiCengShenHe') }}</el-radio>
                       </el-radio-group>
                       </el-radio-group>
                   </el-form-item>
                   </el-form-item>
                   <el-form-item v-if="user.timeType.reportAuditType == 5 || user.timeType.reportAuditType == 6">
                   <el-form-item v-if="user.timeType.reportAuditType == 5 || user.timeType.reportAuditType == 6">
                       <span slot="label">
                       <span slot="label">
-                        <span>直属审核人</span>
-                        <el-tooltip effect="dark" content="未设置时由所属部门负责人审核" placement="top-start">
+                        <span>{{ $t('immediatesuperior') }}</span>
+                        <el-tooltip effect="dark" :content="$t('weiSheZhiShiYouSuoShuBuMenFuZeRenShenHe')" placement="top-start">
                           <i class="el-icon-question" style="color:#606266"></i>
                           <i class="el-icon-question" style="color:#606266"></i>
                         </el-tooltip>
                         </el-tooltip>
                       </span>
                       </span>
@@ -488,7 +488,7 @@
                   <el-form-item :label="$t('entrytime')" prop="phone">
                   <el-form-item :label="$t('entrytime')" prop="phone">
                       <el-date-picker v-model="insertForm.inductionDate" value-format="yyyy-MM-dd"></el-date-picker>
                       <el-date-picker v-model="insertForm.inductionDate" value-format="yyyy-MM-dd"></el-date-picker>
                   </el-form-item>
                   </el-form-item>
-                  <el-form-item label="离职日期" prop="inactiveDate" v-if="insertForm.isActive == 0">
+                  <el-form-item :label="$t('liZhiRiQi')" prop="inactiveDate" v-if="insertForm.isActive == 0">
                       <el-date-picker v-model="insertForm.inactiveDate" value-format="yyyy-MM-dd"></el-date-picker>
                       <el-date-picker v-model="insertForm.inactiveDate" value-format="yyyy-MM-dd"></el-date-picker>
                   </el-form-item>
                   </el-form-item>
                   <el-form-item :label="$t('postrank')" prop="phone">
                   <el-form-item :label="$t('postrank')" prop="phone">
@@ -520,12 +520,12 @@
             </span>
             </span>
         </el-dialog>
         </el-dialog>
         <!-- 删除员工时转移日报 -->
         <!-- 删除员工时转移日报 -->
-        <el-dialog title="提示" :visible.sync="deleteUserFlg" width="600px" :before-close="handleClose">
+        <el-dialog :title="$t('other.prompts')" :visible.sync="deleteUserFlg" width="600px" :before-close="handleClose">
         <div>
         <div>
-          <div class="deteee">确定删除该员工吗?</div>
+          <div class="deteee">{{ $t('queDingShanChuGaiYuanGongMa') }}</div>
           <div class="deteeeAce" v-if="deleteUserFlgData.isExistsReport">
           <div class="deteeeAce" v-if="deleteUserFlgData.isExistsReport">
 
 
-            <div style="margin-right: 10px">将该员工的工时数据、参与的项目与任务转移 至</div>
+            <div style="margin-right: 10px">{{ $t('jiangGaiYuanGongDeGongShiShuJuCanYuDeXiangMuYuRenWuZhuanYiZhi') }}</div>
             <el-select v-if="user.userNameNeedTranslate != 1" v-model="moveReportUserId" style="width:140px;" :placeholder="$t('defaultText.pleaseChoose')" clearable size="small" filterable popper-class="managePopperClass">
             <el-select v-if="user.userNameNeedTranslate != 1" v-model="moveReportUserId" style="width:140px;" :placeholder="$t('defaultText.pleaseChoose')" clearable size="small" filterable popper-class="managePopperClass">
                 <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id">
                 <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id">
                     <span style="float: left">{{ item.name }}</span>
                     <span style="float: left">{{ item.name }}</span>
@@ -538,8 +538,8 @@
           </div>
           </div>
         </div>
         </div>
         <span slot="footer" class="dialog-footer">
         <span slot="footer" class="dialog-footer">
-          <el-button @click="deleteUserFlg = false">取 消</el-button>
-          <el-button type="primary" @click="deleteUser(deleteUserFlgData)" :loading="deleteUserFlgloading">确 定</el-button>
+          <el-button @click="deleteUserFlg = false">{{ $t('quXiao') }}</el-button>
+          <el-button type="primary" @click="deleteUser(deleteUserFlgData)" :loading="deleteUserFlgloading">{{ $t('queDing') }}</el-button>
         </span>
         </span>
       </el-dialog>
       </el-dialog>
         <el-dialog :title="$t('historicalpersonnelcost')" :visible.sync="userSalaryListDialog" width="750px" >
         <el-dialog :title="$t('historicalpersonnelcost')" :visible.sync="userSalaryListDialog" width="750px" >
@@ -570,7 +570,7 @@
                 </el-table-column>
                 </el-table-column>
                 <el-table-column  >
                 <el-table-column  >
                     <template slot-scope="scope" >
                     <template slot-scope="scope" >
-                        <el-button size="small" @click="delHisSalary(scope.row.id,scope.row.userId)">删除</el-button>
+                        <el-button size="small" @click="delHisSalary(scope.row.id,scope.row.userId)">{{ $t('btn.delete') }}</el-button>
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
             </el-table>
             </el-table>
@@ -771,11 +771,11 @@
                 <el-button type="primary" :underline="false" :loading="importingData" :disabled="!canSync" @click="startCorpWxImport">{{ $t('startsynchronization') }}</el-button>
                 <el-button type="primary" :underline="false" :loading="importingData" :disabled="!canSync" @click="startCorpWxImport">{{ $t('startsynchronization') }}</el-button>
             </p>
             </p>
         </el-dialog>
         </el-dialog>
-        <el-dialog title="同步钉钉通讯录" v-if="showSyncDDDialog" :visible.sync="showSyncDDDialog" customClass="customWidth" width="500px">
+        <el-dialog :title="$t('synchronizetheaddressbook')" v-if="showSyncDDDialog" :visible.sync="showSyncDDDialog" customClass="customWidth" width="500px">
             <p>{{ $t('areyousuretosynchronize') }} 
             <p>{{ $t('areyousuretosynchronize') }} 
             </p>
             </p>
             <p>
             <p>
-              <el-checkbox v-model="isSyncContact" @change="setSyncContactDD()">人员所在部门与钉钉通讯录保持一致</el-checkbox>
+              <el-checkbox v-model="isSyncContact" @change="setSyncContactDD()">{{ $t('renYuanSuoZaiBuMenYuDingDingTongXunLuBaoChiYiZhi') }}</el-checkbox>
             </p>
             </p>
             <p style="display: flex;justify-content: center;padding-bottom:1em;">
             <p style="display: flex;justify-content: center;padding-bottom:1em;">
                 <el-button type="primary" :underline="false" :loading="importingData"  @click="syncWithCorpDingding">{{ $t('startsynchronization') }}</el-button>
                 <el-button type="primary" :underline="false" :loading="importingData"  @click="syncWithCorpDingding">{{ $t('startsynchronization') }}</el-button>
@@ -786,43 +786,43 @@
             {{syncMembByCardTimeMsg}}
             {{syncMembByCardTimeMsg}}
             </p>
             </p>
         </el-dialog>
         </el-dialog>
-        <el-dialog title="同步日志" v-if="recordMsgDialog" :visible.sync="recordMsgDialog" customClass="customWidth" width="500px">
+        <el-dialog :title="$t('tongBuRiZhi')" v-if="recordMsgDialog" :visible.sync="recordMsgDialog" customClass="customWidth" width="500px">
             <el-row style="height:70px;line-height:40px;padding-top:30px;padding-left:20px">
             <el-row style="height:70px;line-height:40px;padding-top:30px;padding-left:20px">
-              <el-col :span="6">操作时间</el-col>
+              <el-col :span="6">{{ $t('caoZuoShiJian') }}</el-col>
               <el-col :span="18">{{recordIndate(recordMsg.indate)}}</el-col>
               <el-col :span="18">{{recordIndate(recordMsg.indate)}}</el-col>
             </el-row>
             </el-row>
             <el-row style="height:70px;line-height:40px;padding-bottom:30px;padding-left:20px">
             <el-row style="height:70px;line-height:40px;padding-bottom:30px;padding-left:20px">
-              <el-col :span="6">错误信息</el-col>
+              <el-col :span="6">{{ $t('cuoWuXinXi') }}</el-col>
               <el-col :span="18">{{recordMsg.msg}}</el-col>
               <el-col :span="18">{{recordMsg.msg}}</el-col>
             </el-row>
             </el-row>
         </el-dialog>
         </el-dialog>
         <el-dialog :title="$t('synchronizetheenterprisemicrodirectory')" :visible.sync="newSyncWithCorpWxDayload" width="400px" :before-close="handleClose">
         <el-dialog :title="$t('synchronizetheenterprisemicrodirectory')" :visible.sync="newSyncWithCorpWxDayload" width="400px" :before-close="handleClose">
         <span>
         <span>
-          同步前请联系企业微信管理员检查应用授权的可见范围 <br/>
-          路径:管理企业-应用管理-工时管家-可见范围
+          {{ $t('tongBuQianQingLianXiQiYeWeiXinGuanLiYuanJianChaYingYongShouQuanDeKeJianFanWei') }} <br/>
+          {{ $t('luJingGuanLiQiYeYingYongGuanLiGongShiGuanJiaKeJianFanWei') }} 
         </span>
         </span>
         <span slot="footer" class="dialog-footer">
         <span slot="footer" class="dialog-footer">
-          <el-button type="primary" @click="visibleRange" v-if="wxManager">可见范围设置</el-button>
-          <el-button type="primary" @click="newSyncWithCorpWx">开始同步</el-button>
+          <el-button type="primary" @click="visibleRange" v-if="wxManager">{{ $t('keJianFanWeiSheZhi') }}</el-button>
+          <el-button type="primary" @click="newSyncWithCorpWx">{{ $t('startsynchronization') }}</el-button>
         </span>
         </span>
       </el-dialog>
       </el-dialog>
 
 
       <el-dialog
       <el-dialog
-        title="转移到"
+        :title="$t('zhuanYiDao')"
         :visible.sync="transferActiveDialogFlag"
         :visible.sync="transferActiveDialogFlag"
         width="20%">
         width="20%">
-        <span style="margin-left:25px;margin-right:5px;color:#606266;">转移到</span>
+        <span style="margin-left:25px;margin-right:5px;color:#606266;">{{ $t('zhuanYiDao') }}</span>
         <selectCat v-if="user.userNameNeedTranslate == 1" :subject="users" :subjectId="transferActive.takeoverId" :distinction="'23'" :clearable="true" @selectCal="selectCal"></selectCat>            
         <selectCat v-if="user.userNameNeedTranslate == 1" :subject="users" :subjectId="transferActive.takeoverId" :distinction="'23'" :clearable="true" @selectCal="selectCal"></selectCat>            
         <span slot="footer" class="dialog-footer">
         <span slot="footer" class="dialog-footer">
-          <el-button @click="transferActiveDialogFlag = false">取 消</el-button>
-          <el-button type="primary" @click="transferActiveMethod">确 定</el-button>
+          <el-button @click="transferActiveDialogFlag = false">{{ $t('quXiao') }}</el-button>
+          <el-button type="primary" @click="transferActiveMethod">{{ $t('queDing') }}</el-button>
         </span>
         </span>
       </el-dialog>
       </el-dialog>
 
 
       <!-- 多选部门 -->
       <!-- 多选部门 -->
-      <el-dialog :title="'请选择部门'" :top="'10vh'"  v-if="specialHolidaysDialog" :visible.sync="specialHolidaysDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
+      <el-dialog :title="$t('qing-xuan-ze-bu-men')" :top="'10vh'"  v-if="specialHolidaysDialog" :visible.sync="specialHolidaysDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
             <div v-if="user.userNameNeedTranslate == '1'">
             <div v-if="user.userNameNeedTranslate == '1'">
-                <el-input placeholder="请输入名字搜索" v-model.trim="wxFilterText" clearable @keyup.enter.native="echartDepartment()" @clear="getWhiteListAll()" class="input-with-select">
+                <el-input :placeholder="$t('qingShuRuMingZiSouSuo')" v-model.trim="wxFilterText" clearable @keyup.enter.native="echartDepartment()" @clear="getWhiteListAll()" class="input-with-select">
                     <el-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
                     <el-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
                 </el-input>
                 </el-input>
             </div>
             </div>
@@ -1193,7 +1193,7 @@ export default {
   },
   },
   methods: {
   methods: {
     delHisSalary(id, userId) {
     delHisSalary(id, userId) {
-      this.$confirm('是否删除该记录?', this.$t('other.prompts'), {
+      this.$confirm(this.$t('shiFouShanChuGaiJiLu'), this.$t('other.prompts'), {
             confirmButtonText: this.$t('btn.determine'),
             confirmButtonText: this.$t('btn.determine'),
             cancelButtonText: this.$t('btn.cancel'),
             cancelButtonText: this.$t('btn.cancel'),
             type: 'warning'
             type: 'warning'
@@ -1203,7 +1203,7 @@ export default {
             },res => {
             },res => {
                 if(res.code == 'ok'){
                 if(res.code == 'ok'){
                     this.$message({
                     this.$message({
-                        message: '操作成功',
+                        message: this.$t('operationissuccessful'),
                         type: 'success'
                         type: 'success'
                     })
                     })
                     this.reqSalaryList(userId);
                     this.reqSalaryList(userId);
@@ -1228,7 +1228,7 @@ export default {
     },
     },
     statesPush(){
     statesPush(){
       if(this.user.corpwxUserid != null && this.user.userNameNeedTranslate == 1){
       if(this.user.corpwxUserid != null && this.user.userNameNeedTranslate == 1){
-        var state = {value: "2",label: "可转让"}
+        var state = {value: "2",label: this.$t('keZhuanRang')}
         this.states.push(state);
         this.states.push(state);
       } 
       } 
     },
     },
@@ -1241,7 +1241,7 @@ export default {
     transferActiveMethod(){
     transferActiveMethod(){
       if(this.transferActive.takeoverId == null){
       if(this.transferActive.takeoverId == null){
         this.$message({
         this.$message({
-                  message: "请选择接收人",
+                  message: this.$t('qingXuanZeJieShouRen'),
                   type: "error"
                   type: "error"
               });
               });
         return;
         return;
@@ -1481,7 +1481,7 @@ export default {
     newSyncWithCorpWx() {
     newSyncWithCorpWx() {
       const loading = this.$loading({
       const loading = this.$loading({
           lock: true,
           lock: true,
-          text: '同步中',
+          text: this.$t('tongBuZhong'),
           spinner: 'el-icon-loading',
           spinner: 'el-icon-loading',
           background: 'rgba(0, 0, 0, 0.7)'
           background: 'rgba(0, 0, 0, 0.7)'
         });
         });
@@ -1495,7 +1495,7 @@ export default {
           loading.close();
           loading.close();
           if (res.code == "ok") {
           if (res.code == "ok") {
             this.$message({
             this.$message({
-              message: '同步成功',
+              message: this.$t('synchronoussuccess'),
               type: "success",
               type: "success",
             });
             });
             this.getDepartment();
             this.getDepartment();
@@ -2243,9 +2243,9 @@ export default {
             this.getUser();
             this.getUser();
           } else {
           } else {
             if(this.user.companyId==876||this.user.companyId==877||this.user.companyId==878){
             if(this.user.companyId==876||this.user.companyId==877||this.user.companyId==878){
-                this.$confirm('当前员工有待审核日报,确认停用并驳回日报吗?', '提示', {
-                confirmButtonText: '确定',
-                cancelButtonText: '取消',
+                this.$confirm(this.$t('dangQianYuanGongYouDaiShenHeRiBaoQueRenTingYongBingBoHuiRiBaoMa'), this.$t('other.prompts'), {
+                confirmButtonText: this.$t('btn.determine'),
+                cancelButtonText: this.$t('btn.cancel'),
                 type: 'warning'
                 type: 'warning'
                 }).then(() => {
                 }).then(() => {
                   this.http.post(
                   this.http.post(
@@ -2275,7 +2275,7 @@ export default {
                 }).catch(() => {
                 }).catch(() => {
                   this.$message({
                   this.$message({
                     type: 'info',
                     type: 'info',
-                    message: '已取消'
+                    message: this.$t('yiQuXiao')
                   });          
                   });          
               });
               });
             }else{
             }else{
@@ -2693,7 +2693,7 @@ export default {
     syncFeishu(){
     syncFeishu(){
       const loading = this.$loading({
       const loading = this.$loading({
           lock: true,
           lock: true,
-          text: '同步中',
+          text: this.$t('tongBuZhong'),
           spinner: 'el-icon-loading',
           spinner: 'el-icon-loading',
           background: 'rgba(0, 0, 0, 0.7)'
           background: 'rgba(0, 0, 0, 0.7)'
         });
         });
@@ -2704,7 +2704,7 @@ export default {
               loading.close()
               loading.close()
               if (res.code == "ok") {
               if (res.code == "ok") {
                 this.$message({
                 this.$message({
-                  message: '同步成功',
+                  message: this.$t('synchronoussuccess'),
                   type: "success",
                   type: "success",
                 });
                 });
               } else {
               } else {
@@ -2732,7 +2732,7 @@ export default {
             (res) => {
             (res) => {
               if (res.code == "ok") {
               if (res.code == "ok") {
                 this.$message({
                 this.$message({
-                  message: '同步成功',
+                  message: this.$t('synchronoussuccess'),
                   type: "success",
                   type: "success",
                 });
                 });
               } else {
               } else {
@@ -3077,7 +3077,7 @@ export default {
     setActive(item, isActive) {
     setActive(item, isActive) {
       var txt = isActive == 1 ? this.$t('enable') : this.$t('ting-yong');
       var txt = isActive == 1 ? this.$t('enable') : this.$t('ting-yong');
       // this.$confirm(this.$t('sureyouwantto') + txt + " " + item.name + this.$t('ma'), this.$t('zhang-hao') + txt, {
       // this.$confirm(this.$t('sureyouwantto') + txt + " " + item.name + this.$t('ma'), this.$t('zhang-hao') + txt, {
-      this.$confirm(this.$t('sureyouwantto') + txt + '该员工' + this.$t('ma'), this.$t('zhang-hao') + txt, {
+      this.$confirm(this.$t('sureyouwantto') + txt + this.$t('gaiYuanGong') + this.$t('ma'), this.$t('zhang-hao') + txt, {
         confirmButtonText: this.$t('btn.determine'),
         confirmButtonText: this.$t('btn.determine'),
         cancelButtonText: this.$t('btn.cancel'),
         cancelButtonText: this.$t('btn.cancel'),
         type: "warning",
         type: "warning",
@@ -3357,7 +3357,7 @@ export default {
     // 删除部门
     // 删除部门
     deleteDep() {
     deleteDep() {
       var that = this;
       var that = this;
-      var txtMsg = this.user.userNameNeedTranslate == '1'?'确定要删除该部门吗?':this.$t('deletethedepartment') + that.depData.label + this.$t('ma')
+      var txtMsg = this.user.userNameNeedTranslate == '1'?this.$t('queDingYaoShanChuGaiBuMenMa'):this.$t('deletethedepartment') + that.depData.label + this.$t('ma')
       setTimeout(() => {
       setTimeout(() => {
         that
         that
           .$confirm(txtMsg, this.$t('deletethedepartmentdsa'), {
           .$confirm(txtMsg, this.$t('deletethedepartmentdsa'), {
@@ -3777,19 +3777,19 @@ export default {
           }
           }
           if(res.err_msg == "openAppManage:fail:no permission") {
           if(res.err_msg == "openAppManage:fail:no permission") {
               // 调用人身份不符合                 
               // 调用人身份不符合                 
-              this.$message({message: '调用人身份不符合',type: "error"});
+              this.$message({message: this.$t('tiaoYongRenShenFenBuFuHe'),type: "error"});
           }
           }
           if(res.err_msg == "openAppManage:fail:unknown app") {
           if(res.err_msg == "openAppManage:fail:unknown app") {
               // 应用信息获取失败
               // 应用信息获取失败
-              this.$message({message: '应用信息获取失败',type: "error"});
+              this.$message({message: this.$t('yingYongXinXiHuoQuShiBai'),type: "error"});
           }
           }
           if(res.err_msg == "openAppManage:fail:unsupported app type") {
           if(res.err_msg == "openAppManage:fail:unsupported app type") {
               // 应用类型不符合要求
               // 应用类型不符合要求
-              this.$message({message: '应用类型不符合要求',type: "error"});
+              this.$message({message: this.$t('yingYongLeiXingBuFuHeYaoQiu'),type: "error"});
           }
           }
           if(res.err_msg == "openAppManage:fail") {
           if(res.err_msg == "openAppManage:fail") {
               // 其它错误                  
               // 其它错误                  
-              this.$message({message: '其它错误',type: "error"});
+              this.$message({message: this.$t('qiTaCuoWu'),type: "error"});
           }      
           }      
        })
        })
     },
     },
@@ -3814,7 +3814,7 @@ export default {
         if (res.code == "ok") {
         if (res.code == "ok") {
           this.getUser();
           this.getUser();
           this.workingHoursDialog = false
           this.workingHoursDialog = false
-          this.$message({message: '操作成功:'+res.data,type: "success"});
+          this.$message({message: this.$t('caoZuoChengGong')+res.data,type: "success"});
         } else {
         } else {
             this.$message({message: res.msg,type: "error"});
             this.$message({message: res.msg,type: "error"});
         }
         }

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

@@ -127,16 +127,16 @@
                                     <el-link :underline="false" @click="showMembList(2)"><span style="margin-left:5px;margin-right:5px;color:green;">{{fillList.filter(item => item.state == 3).length}}</span></el-link>{{$t('other.people')}},
                                     <el-link :underline="false" @click="showMembList(2)"><span style="margin-left:5px;margin-right:5px;color:green;">{{fillList.filter(item => item.state == 3).length}}</span></el-link>{{$t('other.people')}},
                                     <!-- 漏填 -->
                                     <!-- 漏填 -->
                                     <!-- {{$t('state.missFillReport')}} -->
                                     <!-- {{$t('state.missFillReport')}} -->
-                                    未填
+                                    {{ $t('other.unfilled') }}
                                     <el-link :underline="false" @click="showMembList(0)"><span style="margin-left:5px;margin-right:5px;color:red;">{{(unFillList.length - leaveAllNum) | numbers}}</span>{{$t('other.people')}}
                                     <el-link :underline="false" @click="showMembList(0)"><span style="margin-left:5px;margin-right:5px;color:red;">{{(unFillList.length - leaveAllNum) | numbers}}</span>{{$t('other.people')}}
-                                    <span v-if="leaveAllNum">{{', 全天请假' + leaveAllNum + '人'}}</span></el-link>
+                                    <span v-if="leaveAllNum">{{','+ $t('other.takeDayOff') + leaveAllNum + $t('other.people')}}</span></el-link>
                                     </span>
                                     </span>
                                     </span>
                                     </span>
                                 </span>
                                 </span>
                                 <span style="float:right;">
                                 <span style="float:right;">
                                     <el-link type="primary" v-if="user.timeType.enableNewWeeklyfill != 1" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,0)">{{$t('textLink.fillInTheWork')}}</el-link>
                                     <el-link type="primary" v-if="user.timeType.enableNewWeeklyfill != 1" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,0)">{{$t('textLink.fillInTheWork')}}</el-link>
                                     <el-link v-if="reportTimeType.type != 0 && user.companyId != yuzhongCompId && user.timeType.enableNewWeeklyfill != 1 && user.companyId != 3092" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportss()">{{$t('textLink.fillInAWeek')}}</el-link>
                                     <el-link v-if="reportTimeType.type != 0 && user.companyId != yuzhongCompId && user.timeType.enableNewWeeklyfill != 1 && user.companyId != 3092" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportss()">{{$t('textLink.fillInAWeek')}}</el-link>
-                                    <el-link v-if="user.timeType.enableNewWeeklyfill == 1" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportCustom()">按周填报</el-link>
+                                    <el-link v-if="user.timeType.enableNewWeeklyfill == 1" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportCustom()">{{ $t('textLink.fillInAWeek') }}</el-link>
                                     <!-- <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportCustom()">按周填报</el-link> -->
                                     <!-- <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportCustom()">按周填报</el-link> -->
                                     <el-link type="primary" v-if="user.companyId != 5978 && permissions.reportsFillOut && user.timeType.enableNewWeeklyfill != 1" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,2)">{{$t('textLink.helpToFillIn')}}</el-link>
                                     <el-link type="primary" v-if="user.companyId != 5978 && permissions.reportsFillOut && user.timeType.enableNewWeeklyfill != 1" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,2)">{{$t('textLink.helpToFillIn')}}</el-link>
                                     <!-- 苏州景昱,按周填报的模式进行代填日报 -->
                                     <!-- 苏州景昱,按周填报的模式进行代填日报 -->
@@ -147,9 +147,9 @@
                                     <el-link type="primary" style="margin-right:10px;" :underline="false" @click="showExportDialog" v-if="permissions.reportExport">{{$t('textLink.exportWork')}}</el-link>
                                     <el-link type="primary" style="margin-right:10px;" :underline="false" @click="showExportDialog" v-if="permissions.reportExport">{{$t('textLink.exportWork')}}</el-link>
                                     <!--部门负责人给个导出工时的功能 -->
                                     <!--部门负责人给个导出工时的功能 -->
                                     <el-link type="primary" v-if="user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="showExportTimeDialog">{{$t('textLink.exportingTimeStatistics')}}</el-link>
                                     <el-link type="primary" v-if="user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="showExportTimeDialog">{{$t('textLink.exportingTimeStatistics')}}</el-link>
-                                    <el-link type="primary" v-if="user.timeType.pushReportData == 1 && permissions.reportPush" :underline="false" @click="pushWorkTime">推送工时</el-link>
-                                    <el-link type="primary" v-if="user.timeType.pushReportData == 1 && user.companyId==3092 && permissions.reportPush" :underline="false" @click="pushWorkTimeLogDig=true,getPushWorkLogData()">工时推送日志</el-link>
-                                    <el-link type="primary" v-if="user.roleName == '超级管理员' && user.companyId==839" :underline="false" @click="reportLogCheckDialog=true">日报审核修改</el-link>
+                                    <el-link type="primary" v-if="user.timeType.pushReportData == 1 && permissions.reportPush" :underline="false" @click="pushWorkTime">{{ $t('tuiSongGongShi') }}</el-link>
+                                    <el-link type="primary" v-if="user.timeType.pushReportData == 1 && user.companyId==3092 && permissions.reportPush" :underline="false" @click="pushWorkTimeLogDig=true,getPushWorkLogData()">{{ $t('gongShiTuiSongRiZhi') }}</el-link>
+                                    <el-link type="primary" v-if="user.roleName == $t('role.superAdministrator') && user.companyId==839" :underline="false" @click="reportLogCheckDialog=true">{{ $t('riBaoShenHeXiuGai') }}</el-link>
                                     <!-- <el-button v-if="user.timeType.pushReportData == 1 && permissions.reportPush" style="margin-left:10px;" icon="iconfont firerock-icontuisong" size="mini" @click="pushWorkTime"></el-button> -->
                                     <!-- <el-button v-if="user.timeType.pushReportData == 1 && permissions.reportPush" style="margin-left:10px;" icon="iconfont firerock-icontuisong" size="mini" @click="pushWorkTime"></el-button> -->
                                 </span>
                                 </span>
                             </div>
                             </div>
@@ -272,9 +272,9 @@
                                                     </span>
                                                     </span>
                                                     </p>
                                                     </p>
                                                     <p v-if="user.companyId == yuzhongCompId">
                                                     <p v-if="user.companyId == yuzhongCompId">
-                                                        <span>角色:{{item2.extraField1? roleList.filter(r=>r.value == item2.extraField1)[0].label:''}}</span>
-                                                    <span style="margin-left:10px;">工作职责:{{ item2.extraField2? item2.extraField2Name:''}}</span>
-                                                    <span style="margin-left:10px;">工作内容:{{ item2.extraField3? item2.extraField3Name:''}}</span></p>
+                                                        <span>{{ $t('jiao-se') }} :{{item2.extraField1? roleList.filter(r=>r.value == item2.extraField1)[0].label:''}}</span>
+                                                    <span style="margin-left:10px;">{{ $t('gongZuoZhiZe') }} :{{ item2.extraField2? item2.extraField2Name:''}}</span>
+                                                    <span style="margin-left:10px;">{{ $t('gongZuoNeiRong') }} :{{ item2.extraField3? item2.extraField3Name:''}}</span></p>
                                                     <!--任务分组和阶段 -->
                                                     <!--任务分组和阶段 -->
                                                     <p v-if="item2.groupId != 0">
                                                     <p v-if="item2.groupId != 0">
                                                         {{$t('other.taskGroup')}}:{{item2.groupName}}
                                                         {{$t('other.taskGroup')}}:{{item2.groupName}}
@@ -300,7 +300,7 @@
                                                             </span>
                                                             </span>
                                                     </p>
                                                     </p>
                                                     <p v-if="item2.taskId != null">{{$t('other.task')}}:{{item2.taskName}}
                                                     <p v-if="item2.taskId != null">{{$t('other.task')}}:{{item2.taskName}}
-                                                        <span style="margin-left:10px;" v-if="user.companyId==3092">-- 服务:{{ item2.sapServiceName }}</span>
+                                                        <span style="margin-left:10px;" v-if="user.companyId==3092">-- {{ $t('fuWu') }} :{{ item2.sapServiceName }}</span>
                                                     </p>
                                                     </p>
                                                     <div v-if="item2.multiWorktime==0">
                                                     <div v-if="item2.multiWorktime==0">
                                                     <p style="display: inline-block;">{{$t('time.duration')}}:
                                                     <p style="display: inline-block;">{{$t('time.duration')}}:
@@ -337,7 +337,7 @@
                                         </el-timeline>
                                         </el-timeline>
                                     </div>
                                     </div>
                                 </div>
                                 </div>
-                                <div v-if="hasMore && !listLoading" style="width:100%;font-size:17px;text-align:center;padding-bottom:15px;"><el-link @click="reqMore" :underline=false style="color:#20a0ff;">加载更多日报</el-link></div>
+                                <div v-if="hasMore && !listLoading" style="width:100%;font-size:17px;text-align:center;padding-bottom:15px;"><el-link @click="reqMore" :underline=false style="color:#20a0ff;">{{ $t('jiaZaiGengDuoRiBao') }}</el-link></div>
                                 <!-- 简陋的无报告提示 -->
                                 <!-- 简陋的无报告提示 -->
                                 <div v-if="reportList.length==0" style="width:100%;font-size:17px;text-align:center;color:#aaa;">{{curDate}}{{$t('other.noReportYet')}}</div>
                                 <div v-if="reportList.length==0" style="width:100%;font-size:17px;text-align:center;color:#aaa;">{{curDate}}{{$t('other.noReportYet')}}</div>
                             </div>
                             </div>
@@ -349,27 +349,27 @@
         </div>
         </div>
 
 
         <!-- 工时推送日志弹窗 -->
         <!-- 工时推送日志弹窗 -->
-        <el-dialog title="工时推送日志" :visible.sync="pushWorkTimeLogDig"  width="70%" :before-close="handleClose">
+        <el-dialog :title="$t('gongShiTuiSongRiZhi')" :visible.sync="pushWorkTimeLogDig"  width="70%" :before-close="handleClose">
               <template>
               <template>
-                <el-button type="primary" size="small" style="float: right" @click="exportPushLog">导出</el-button>
+                <el-button type="primary" size="small" style="float: right" @click="exportPushLog">{{ $t('export.export') }}</el-button>
               </template>  
               </template>  
               <template>
               <template>
                 <el-table :data="pushWorkTimeLogData" style="width: 100%" height="500" >
                 <el-table :data="pushWorkTimeLogData" style="width: 100%" height="500" >
-                    <el-table-column prop="syncTime" label="推送时间" width="150"></el-table-column>
-                    <el-table-column prop="remark" label="推送名称" width="180"></el-table-column>
-                    <el-table-column prop="operator" label="操作人员" width="150"></el-table-column>
-                    <el-table-column prop="syncType" label="推送方式" width="150"></el-table-column>
-                    <el-table-column prop="result" label="推送结果" width="250">
+                    <el-table-column prop="syncTime" :label="$t('tuiSongShiJian')" width="150"></el-table-column>
+                    <el-table-column prop="remark" :label="$t('tuiSongMingCheng')" width="180"></el-table-column>
+                    <el-table-column prop="operator" :label="$t('caozuo')" width="150"></el-table-column>
+                    <el-table-column prop="syncType" :label="$t('tuiSongFangShi')" width="150"></el-table-column>
+                    <el-table-column prop="result" :label="$t('tuiSongJieGuo')" width="250">
                         <template slot-scope="scope">
                         <template slot-scope="scope">
-                            <span style="color:green;" v-if="scope.row.result.includes('成功')">{{scope.row.result}}</span>
-                            <span style="color:red;" v-if="scope.row.result.includes('失败')">{{scope.row.result}}</span>
+                            <span style="color:green;" v-if="scope.row.result.includes($t('other.successful'))">{{scope.row.result}}</span>
+                            <span style="color:red;" v-if="scope.row.result.includes($t('shiBai'))">{{scope.row.result}}</span>
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
-                    <el-table-column prop="resultRemark" label="备注" width="400"></el-table-column>
+                    <el-table-column prop="resultRemark" :label="$t('bei-zhu')" width="400"></el-table-column>
                 </el-table>
                 </el-table>
             </template>
             </template>
             <span slot="footer" class="dialog-footer">
             <span slot="footer" class="dialog-footer">
-                <el-button type="primary" @click="pushWorkTimeLogDig = false">关 闭</el-button>
+                <el-button type="primary" @click="pushWorkTimeLogDig = false">{{ $t('guanBi') }}</el-button>
             </span>
             </span>
         </el-dialog>
         </el-dialog>
 
 
@@ -406,17 +406,17 @@
                         <span v-if="isBatch && user.company.companyName != mingyiName">, {{$t('other.fillInTheTotal')}} <el-input v-model="jsTime" @change="onBatchTimeChange" style="width:80px;"/> {{$t('time.hour')}}</span>
                         <span v-if="isBatch && user.company.companyName != mingyiName">, {{$t('other.fillInTheTotal')}} <el-input v-model="jsTime" @change="onBatchTimeChange" style="width:80px;"/> {{$t('time.hour')}}</span>
 
 
                         <!-- AI智能填报 -->
                         <!-- AI智能填报 -->
-                        <el-button type="primary" @click="getAIReport()" v-if="!hasWrittenReport" style="margin-left:5px;" >智能填报</el-button>
+                        <el-button type="primary" @click="getAIReport()" v-if="!hasWrittenReport" style="margin-left:5px;" >{{ $t('zhiNengTianBao') }}</el-button>
                     </el-form-item>
                     </el-form-item>
                     <!--考勤时长显示-->
                     <!--考勤时长显示-->
                     <el-form-item :label="$t('other.attendancePunch')" v-if="workForm.showRefresh || user.companyId == 5978">
                     <el-form-item :label="$t('other.attendancePunch')" v-if="workForm.showRefresh || user.companyId == 5978">
                         <span v-if="workForm.time">{{workForm.time.startTime}}-{{workForm.time.endTime}}, 工作{{workForm.time.workHours}}{{$t('time.hour')}}
                         <span v-if="workForm.time">{{workForm.time.startTime}}-{{workForm.time.endTime}}, 工作{{workForm.time.workHours}}{{$t('time.hour')}}
-                        <span v-if="workForm.time.askLeaveTime">|&nbsp;请假{{ workForm.time.askLeaveTime }}小时</span>
+                        <span v-if="workForm.time.askLeaveTime">|&nbsp;{{ $t('other.AskForLeave') }}{{ workForm.time.askLeaveTime }}{{$t('time.hour')}}</span>
                         </span>
                         </span>
                         <!--批量填报和批量代填不显示考勤记录-->
                         <!--批量填报和批量代填不显示考勤记录-->
                         <span v-if="!isBatch && (user.timeType.syncDingding==1 || user.timeType.syncCorpwxTime==1)&&!workForm.time" >{{$t('other.noAttendanceRecord')}}</span>
                         <span v-if="!isBatch && (user.timeType.syncDingding==1 || user.timeType.syncCorpwxTime==1)&&!workForm.time" >{{$t('other.noAttendanceRecord')}}</span>
                         <!--针对明夷,批量填报(不含代填)情况下显示考勤时长-->
                         <!--针对明夷,批量填报(不含代填)情况下显示考勤时长-->
-                        <span v-if="!isSubstitude && isBatch && user.company.companyName === mingyiName">{{',考勤时长'}}:{{this.workTimeForMinYi}}{{$t('time.hour')}}</span>
+                        <span v-if="!isSubstitude && isBatch && user.company.companyName === mingyiName">,{{ $t('workAttendance') }}:{{this.workTimeForMinYi}}{{$t('time.hour')}}</span>
                         <el-button type="default" style="margin-left:5px;" size="small" :loading="syncTimeLoading" 
                         <el-button type="default" style="margin-left:5px;" size="small" :loading="syncTimeLoading" 
                         v-if="!isBatch && user.timeType.syncCorpwxTime==1" icon="el-icon-refresh" 
                         v-if="!isBatch && user.timeType.syncCorpwxTime==1" icon="el-icon-refresh" 
                                 @click="refreshWXCardTime(workForm.createDate)"></el-button>
                                 @click="refreshWXCardTime(workForm.createDate)"></el-button>
@@ -491,10 +491,10 @@
                             </div>
                             </div>
                         </el-form-item>
                         </el-form-item>
 
 
-                        <el-form-item label="填报部门" v-if="user.timeType.userWithMultiDept == 1 && userReportDeptList.length > 0"
+                        <el-form-item :label="$t('tianBaoBuMen')" v-if="user.timeType.userWithMultiDept == 1 && userReportDeptList.length > 0"
                             :prop="'domains.' + index + '.reportTargetDeptId'"
                             :prop="'domains.' + index + '.reportTargetDeptId'"
-                            :rules="{ required: true, message: '请选择部门', trigger: ['change','blur'] }">
-                            <el-select v-model="domain.reportTargetDeptId" :placeholder="'请选择部门'" style="width:200px;" :clearable="true" v-if="user.userNameNeedTranslate == 0">
+                            :rules="{ required: true, message: $t('qing-xuan-ze-bu-men'), trigger: ['change','blur'] }">
+                            <el-select v-model="domain.reportTargetDeptId" :placeholder="$t('qing-xuan-ze-bu-men')" style="width:200px;" :clearable="true" v-if="user.userNameNeedTranslate == 0">
                                 <el-option v-for="depts in userReportDeptList" :key="depts.departmentId" :value="depts.departmentId" :label="depts.departmentName">
                                 <el-option v-for="depts in userReportDeptList" :key="depts.departmentId" :value="depts.departmentId" :label="depts.departmentName">
                                     <span style="float: left">
                                     <span style="float: left">
                                         <TranslationOpenDataText type='departmentName' :openid='depts.departmentName'></TranslationOpenDataText>
                                         <TranslationOpenDataText type='departmentName' :openid='depts.departmentName'></TranslationOpenDataText>
@@ -528,7 +528,7 @@
                                 </el-select>
                                 </el-select>
                             </template>
                             </template>
                             <template v-if="user.companyId == yuzhongCompId">
                             <template v-if="user.companyId == yuzhongCompId">
-                                <span style="color:#FF0000;margin-left:45px;">*</span><span style="margin-left:3px;">角色选择</span>
+                                <span style="color:#FF0000;margin-left:45px;">*</span><span style="margin-left:3px;">{{ $t('jiaoSeXuanZe') }}</span>
                                 <!--角色选择 -->
                                 <!--角色选择 -->
                                 <el-select v-model="domain.extraField1" style="width:200px;margin-left:10px;" placeHolder="请选择"
                                 <el-select v-model="domain.extraField1" style="width:200px;margin-left:10px;" placeHolder="请选择"
                                 :disabled="(workForm.domains[index].state>=2?false:true)" @change="updateResponse(domain)">
                                 :disabled="(workForm.domains[index].state>=2?false:true)" @change="updateResponse(domain)">
@@ -568,8 +568,8 @@
                                 <el-option v-for="item in domain.taskGroups" :key="item.id" :label="item.name" :value="item.id"></el-option>
                                 <el-option v-for="item in domain.taskGroups" :key="item.id" :label="item.name" :value="item.id"></el-option>
                             </el-select>
                             </el-select>
                             <template v-if="user.companyId == yuzhongCompId">
                             <template v-if="user.companyId == yuzhongCompId">
-                                <span style="margin-left:45px;"><span style="color:#FF0000;">*</span>工作职责</span>
-                                <el-select v-model="domain.extraField2" style="width:200px;margin-left:10px;" placeHolder="请选择"
+                                <span style="margin-left:45px;"><span style="color:#FF0000;">*</span>{{ $t('gongZuoZhiZe') }}</span>
+                                <el-select v-model="domain.extraField2" style="width:200px;margin-left:10px;" :placeHolder="$t('defaultText.pleaseChoose')"
                                 :disabled="(workForm.domains[index].state>=2?false:true)" @change="updateJobContent(domain)">
                                 :disabled="(workForm.domains[index].state>=2?false:true)" @change="updateJobContent(domain)">
                                     <el-option
                                     <el-option
                                         v-for="item in domain.filteredRespList"
                                         v-for="item in domain.filteredRespList"
@@ -608,9 +608,9 @@
                         <el-form-item v-if="user.companyId == yuzhongCompId">
                         <el-form-item v-if="user.companyId == yuzhongCompId">
                             <template slot="label">
                             <template slot="label">
                                 <span style="color:#FF0000;">*</span>
                                 <span style="color:#FF0000;">*</span>
-                                <span >工作内容</span>
+                                <span >{{ $t('gongZuoNeiRong') }}</span>
                             </template>
                             </template>
-                            <el-select v-model="domain.extraField3" style="width:200px;" placeHolder="请选择" @change="$forceUpdate()"
+                            <el-select v-model="domain.extraField3" style="width:200px;" :placeHolder="$t('defaultText.pleaseChoose')" @change="$forceUpdate()"
                             :disabled="(workForm.domains[index].state>=2?false:true)" >
                             :disabled="(workForm.domains[index].state>=2?false:true)" >
                                 <el-option
                                 <el-option
                                     v-for="item in domain.workContentList"
                                     v-for="item in domain.workContentList"
@@ -704,7 +704,7 @@
                         <el-form-item :label="$t('other.task')+' / '+$t('other.milestone')" :prop="'domains.' + index + '.taskId'" v-if="user.company.packageProject==1&& !user.timeType.hideTask && (user.company.nonProjectSimple==0 || (user.company.nonProjectSimple==1&&domain.isPublic!=1))" >
                         <el-form-item :label="$t('other.task')+' / '+$t('other.milestone')" :prop="'domains.' + index + '.taskId'" v-if="user.company.packageProject==1&& !user.timeType.hideTask && (user.company.nonProjectSimple==0 || (user.company.nonProjectSimple==1&&domain.isPublic!=1))" >
                             <template slot="label" v-if="user.timeType.taskRequired == 1">
                             <template slot="label" v-if="user.timeType.taskRequired == 1">
                                 <span style="color:#FF0000;">*</span>
                                 <span style="color:#FF0000;">*</span>
-                                <span >任务</span>
+                                <span >{{ $t('other.task') }}</span>
                             </template>
                             </template>
                             <el-select v-model="domain.taskId" :placeholder="$t('defaultText.pleaseChoose')" style="width:75%;margin-right:7%" filterable="true" 
                             <el-select v-model="domain.taskId" :placeholder="$t('defaultText.pleaseChoose')" style="width:75%;margin-right:7%" filterable="true" 
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" @change="onTaskSelected(domain)">
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" @change="onTaskSelected(domain)">
@@ -713,9 +713,9 @@
                             <el-checkbox v-model="domain.taskFinish" v-if="domain.taskId != undefined && user.companyId != '5608'">{{$t('state.completed')}}</el-checkbox>
                             <el-checkbox v-model="domain.taskFinish" v-if="domain.taskId != undefined && user.companyId != '5608'">{{$t('state.completed')}}</el-checkbox>
                         </el-form-item>
                         </el-form-item>
                         <!--针对依斯贝的SAP服务-->
                         <!--针对依斯贝的SAP服务-->
-                        <el-form-item v-if="user.companyId==3092" label="服务" :prop="'domains.' + index + '.sapServiceId'" 
-                        :rules=" { required: true, message: '请选择服务', trigger: 'blur' }">
-                        <el-select v-model="domain.sapServiceId" placeholder="请选择服务" style="width:75%;margin-right:7%" filterable="true" 
+                        <el-form-item v-if="user.companyId==3092" :label="$t('fuWu')" :prop="'domains.' + index + '.sapServiceId'" 
+                        :rules=" { required: true, message: $t('qingXuanZeFuWu'), trigger: 'blur' }">
+                        <el-select v-model="domain.sapServiceId" :placeholder="$t('qingXuanZeFuWu')" style="width:75%;margin-right:7%" filterable="true" 
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" >
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" >
                                 <el-option v-for="item in domain.serviceList" :key="item.id" :label="item.serviceName" :value="item.id"></el-option>
                                 <el-option v-for="item in domain.serviceList" :key="item.id" :label="item.serviceName" :value="item.id"></el-option>
                             </el-select>
                             </el-select>
@@ -728,8 +728,8 @@
                         </el-form-item>
                         </el-form-item>
 
 
                         <!-- 拍照上传 -->
                         <!-- 拍照上传 -->
-                        <el-form-item label="图片上传" v-if="user.timeType.choseFromAlbum == 1" :prop="'domains.' + index + '.imgListUrl'" 
-                        :rules="isCustomization(user, reportPictureRequired) ? { required: true, message: '请选择图片', trigger: 'blur' } : null">
+                        <el-form-item :label="$t('tuPianShangChuan')" v-if="user.timeType.choseFromAlbum == 1" :prop="'domains.' + index + '.imgListUrl'" 
+                        :rules="isCustomization(user, reportPictureRequired) ? { required: true, message: $t('pleaseselectpictures'), trigger: 'blur' } : null">
                             <div class="photos">
                             <div class="photos">
                                 <div>
                                 <div>
                                     <el-upload
                                     <el-upload
@@ -930,7 +930,7 @@
             <span slot="footer" class="dialog-footer">
             <span slot="footer" class="dialog-footer">
                 <el-button @click="cancel(workForm.domains,true)" v-if="canCancelInDialog" style="float:left;">{{$t('btn.withdraw')}}</el-button>
                 <el-button @click="cancel(workForm.domains,true)" v-if="canCancelInDialog" style="float:left;">{{$t('btn.withdraw')}}</el-button>
 
 
-                <span style="margin-right:20px" v-if="!(user.company.companyName == mingyiName && isSubstitude)">合计工时:{{totalReportHours}}小时</span>
+                <span style="margin-right:20px" v-if="!(user.company.companyName == mingyiName && isSubstitude)">{{ $t('heJiGongShi') }}:{{totalReportHours}}{{ $t('time.hour') }}</span>
 
 
                 <el-button @click="deleteReport"  v-if="workForm.domains[0].id != null && canEdit && reportCanDelete">{{$t('btn.delete')}}</el-button>
                 <el-button @click="deleteReport"  v-if="workForm.domains[0].id != null && canEdit && reportCanDelete">{{$t('btn.delete')}}</el-button>
                 <el-button @click="dialogVisible = false">{{$t('btn.cancel')}}</el-button>
                 <el-button @click="dialogVisible = false">{{$t('btn.cancel')}}</el-button>
@@ -970,7 +970,7 @@
                         {{$t('defaultText.pleaseSelectAsubstitute')}}
                         {{$t('defaultText.pleaseSelectAsubstitute')}}
                     </span>
                     </span>
                 </div>
                 </div>
-                <el-button @click="substitudeStep = 2; getCurrentWeek();" style="margin-top:10px;margin-left:100px" type="primary">下一步</el-button>    
+                <el-button @click="substitudeStep = 2; getCurrentWeek();" style="margin-top:10px;margin-left:100px" type="primary">{{ $t('btn.nextStep') }}</el-button>    
             </div>
             </div>
             <el-form ref="WeekWorkForm" :model="workForm" :rules="workRules" label-width="100px" v-if="!isSubstitude || (substitudeStep == 2 && isSubstitude && workForm.userNames && workForm.userNames.length>0)">
             <el-form ref="WeekWorkForm" :model="workForm" :rules="workRules" label-width="100px" v-if="!isSubstitude || (substitudeStep == 2 && isSubstitude && workForm.userNames && workForm.userNames.length>0)">
                 <el-form-item style="height:30px;margin-top:-72px;">
                 <el-form-item style="height:30px;margin-top:-72px;">
@@ -989,7 +989,7 @@
                         <span style="float: right">{{ item.projectName }}</span>
                         <span style="float: right">{{ item.projectName }}</span>
                         </el-option>
                         </el-option>
                     </el-select>
                     </el-select>
-                    <span style="float:right;margin-right:10px;">选择项目</span>
+                    <span style="float:right;margin-right:10px;">{{ $t('defaultText.selectProject') }}</span>
                 </el-form-item>
                 </el-form-item>
 
 
                 <el-table ref="weekTable" :data="zhoData" style="width: 100%" v-loading="weekDataLoading" max-height="620" stripe>
                 <el-table ref="weekTable" :data="zhoData" style="width: 100%" v-loading="weekDataLoading" max-height="620" stripe>
@@ -1019,7 +1019,7 @@
                                 </div>
                                 </div>
                             </div>
                             </div>
                             <div v-else >
                             <div v-else >
-                                <span style="color:#999999;">不可超前填报</span>
+                                <span style="color:#999999;">{{ $t('buKeChaoQianTianBao') }}</span>
                             </div>
                             </div>
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
@@ -1042,7 +1042,7 @@
             </el-form>
             </el-form>
 
 
             <span slot="footer" class="dialog-footer" v-if="!isSubstitude || substitudeStep == 2">
             <span slot="footer" class="dialog-footer" v-if="!isSubstitude || substitudeStep == 2">
-                <span v-if="isSubstitude" style="float:left;color:orange;">*正在为【{{workForm.userNames}}】代填</span>
+                <span v-if="isSubstitude" style="float:left;color:orange;">{{ $t('zhengZaiWei') }}【{{workForm.userNames}}】{{ $t('daiTian') }}</span>
                 <!-- <el-button @click="zhoAddlast()" style="float:left;" class="el-icon-back">{{$t('defaultText.selectProject')}}</el-button> -->
                 <!-- <el-button @click="zhoAddlast()" style="float:left;" class="el-icon-back">{{$t('defaultText.selectProject')}}</el-button> -->
                 <el-button @click="closeAddWeeklyReport()" :loading="submitingReport">{{$t('btn.cancel')}}</el-button>
                 <el-button @click="closeAddWeeklyReport()" :loading="submitingReport">{{$t('btn.cancel')}}</el-button>
                 <el-button @click="submitWeekReport(1)" :loading="submitingReport" >{{$t('btn.temporaryStorage')}}</el-button>
                 <el-button @click="submitWeekReport(1)" :loading="submitingReport" >{{$t('btn.temporaryStorage')}}</el-button>
@@ -1052,7 +1052,7 @@
             </span>
             </span>
         </el-dialog>
         </el-dialog>
         <!-- 重庆物奇私人定制的按周填报 -->
         <!-- 重庆物奇私人定制的按周填报 -->
-        <el-dialog :title="'按周填报'" class="fillWeekCustom" :visible.sync="fillWeekDialogVisiCustom" width="1400px" :before-close="handleClose" top="7.5vh">
+        <el-dialog :title="$t('textLink.fillInAWeek')" class="fillWeekCustom" :visible.sync="fillWeekDialogVisiCustom" width="1400px" :before-close="handleClose" top="7.5vh">
             <div class="fillWeekDialogVisiCustom">
             <div class="fillWeekDialogVisiCustom">
                 <WeeklyCustomization @weekClose="fillWeekCustomClne" @weekSubmit="fillWeekCustomSubmit" :key="weekIndex" :weekParentData="weekParentData"></WeeklyCustomization>
                 <WeeklyCustomization @weekClose="fillWeekCustomClne" @weekSubmit="fillWeekCustomSubmit" :key="weekIndex" :weekParentData="weekParentData"></WeeklyCustomization>
             </div>
             </div>
@@ -1160,8 +1160,8 @@
                 </div>
                 </div>
                 <!-- 选择任务 -->
                 <!-- 选择任务 -->
                 <div class="zhoFel" v-if="user.company.packageProject==1 && !user.timeType.hideTask && user.company.nonProjectSimple==0">
                 <div class="zhoFel" v-if="user.company.packageProject==1 && !user.timeType.hideTask && user.company.nonProjectSimple==0">
-                    <p>任务 / 里程碑</p>
-                    <el-select v-model="zhoBao.taskId" :placeholder="'请选择'" clearable="true" style="width: 355px" filterable @change="$forceUpdate()">
+                    <p>{{ $t('renWuLiChengBei') }}</p>
+                    <el-select v-model="zhoBao.taskId" :placeholder="$t('defaultText.pleaseChoose')" clearable="true" style="width: 355px" filterable @change="$forceUpdate()">
                         <el-option v-for="item in zhoBao.taskList" :key="item.taskId" :label="item.taskName" :value="item.taskId"></el-option>
                         <el-option v-for="item in zhoBao.taskList" :key="item.taskId" :label="item.taskName" :value="item.taskId"></el-option>
                     </el-select>
                     </el-select>
                 </div>
                 </div>
@@ -1223,11 +1223,11 @@
                         <el-option :label="$t('state.alreadyPassedAndWaitingAudit')" value="1"></el-option>
                         <el-option :label="$t('state.alreadyPassedAndWaitingAudit')" value="1"></el-option>
                     </el-select>
                     </el-select>
                 </el-form-item>
                 </el-form-item>
-                <el-form-item prop="exportType" :label="'导出方式'" v-if="user.companyId == '936'">
+                <el-form-item prop="exportType" :label="$t('daoChuFangShi')" v-if="user.companyId == '936'">
                     <div class="exportReportRadio">
                     <div class="exportReportRadio">
-                        <el-radio v-model="exportType" :label="0">完整导出</el-radio>
-                        <el-radio v-model="exportType" :label="1">精简导出</el-radio>
-                        <el-tooltip effect="dark" :content="'精简日报不含工作事项和审批信息,数据量更小导出更快。'" placement="top-start">
+                        <el-radio v-model="exportType" :label="0">{{ $t('wanZhengDaoChu') }}</el-radio>
+                        <el-radio v-model="exportType" :label="1">{{ $t('jingJianDaoChu') }}</el-radio>
+                        <el-tooltip effect="dark" :content="$t('jingJianRiBaoBuHanGongZuoShiXiangHeShenPiXinXiShuJuLiangGengXiaoDaoChuGengKuai')" placement="top-start">
                             <i class="el-icon-question"></i>
                             <i class="el-icon-question"></i>
                         </el-tooltip>
                         </el-tooltip>
                     </div>
                     </div>
@@ -1347,7 +1347,7 @@
 
 
         <!-- 日报审核修改 -->
         <!-- 日报审核修改 -->
         <el-dialog
         <el-dialog
-        title="日报审核修改"
+        :title="$t('riBaoShenHeXiuGai')"
         :visible.sync="reportLogCheckDialog"
         :visible.sync="reportLogCheckDialog"
         width="30%"
         width="30%"
         :before-close="handleClose">
         :before-close="handleClose">
@@ -1363,12 +1363,12 @@
                     ></el-date-picker>
                     ></el-date-picker>
                 </el-form-item>
                 </el-form-item>
         </el-form>
         </el-form>
-        <el-link type="primary" @click="exportReportLog">导出日报审核记录数据</el-link>
+        <el-link type="primary" @click="exportReportLog">{{ $t('daoChuRiBaoShenHeJiLuShuJu') }}</el-link>
         <br>
         <br>
         <el-upload ref="upload"  action="#" :limit="1" :http-request="importReportLog" :show-file-list="false">
         <el-upload ref="upload"  action="#" :limit="1" :http-request="importReportLog" :show-file-list="false">
-        <el-link type="primary" @click="importReportLog">导入日报审核记录修改数据</el-link></el-upload>
+        <el-link type="primary" @click="importReportLog">{{ $t('daoRuRiBaoShenHeJiLuXiuGaiShuJu') }}</el-link></el-upload>
         <span slot="footer" class="dialog-footer">
         <span slot="footer" class="dialog-footer">
-            <el-button  type="primary" @click="reportLogCheckDialog = false">关闭</el-button>
+            <el-button  type="primary" @click="reportLogCheckDialog = false">{{ $t('Shutdown') }}</el-button>
         </span>
         </span>
         </el-dialog>
         </el-dialog>
 
 
@@ -1376,7 +1376,7 @@
         <!-- 按部门选择人员 -->
         <!-- 按部门选择人员 -->
         <el-dialog :title="$t('defaultText.selectthepersonwhneedstofillinthereport')"  v-if="chooseParticipVisible" :visible.sync="chooseParticipVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
         <el-dialog :title="$t('defaultText.selectthepersonwhneedstofillinthereport')"  v-if="chooseParticipVisible" :visible.sync="chooseParticipVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <el-input v-if="user.userNameNeedTranslate != 1" style="width:100%" v-model="deptMembDataText" :placeholder="$t('defaultText.pleaseEnterNametoSearch')"></el-input>
             <el-input v-if="user.userNameNeedTranslate != 1" style="width:100%" v-model="deptMembDataText" :placeholder="$t('defaultText.pleaseEnterNametoSearch')"></el-input>
-            <el-input v-if="user.userNameNeedTranslate == 1" placeholder="请输入姓名搜索" v-model.trim="nameAearch" @keyup.enter.native="nameAearchSeek(true)" class="input-with-select" clearable @input="nameAearchSeek(false)">
+            <el-input v-if="user.userNameNeedTranslate == 1" :placeholder="$t('defaultText.pleaseEnterNametoSearch')" v-model.trim="nameAearch" @keyup.enter.native="nameAearchSeek(true)" class="input-with-select" clearable @input="nameAearchSeek(false)">
                 <el-button slot="append" icon="el-icon-search" @click="nameAearchSeek(true)"></el-button>
                 <el-button slot="append" icon="el-icon-search" @click="nameAearchSeek(true)"></el-button>
             </el-input>
             </el-input>
             <div class="tree" style="height:400px">
             <div class="tree" style="height:400px">
@@ -1444,7 +1444,7 @@
               <!-- 222 -->
               <!-- 222 -->
             </div>
             </div>
             <div>
             <div>
-                <el-cascader v-if="user.userNameNeedTranslate != 1" :size="'small'" v-model="deptIdForHasReport" placeholder="请选择部门" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 200px;" @change="showMonthWorkTime()"></el-cascader>
+                <el-cascader v-if="user.userNameNeedTranslate != 1" :size="'small'" v-model="deptIdForHasReport" :placeholder="$t('qing-xuan-ze-bu-men')" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 200px;" @change="showMonthWorkTime()"></el-cascader>
                 <vueCascader :subjectId="deptIdForHasReport" :size="'small'" :widthStr="'200'" :clearable="true" :subject="trandepartmentList" :radios="true" :distinction="'14'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :selectNameChuan="$t('other.allDepartments')"></vueCascader>
                 <vueCascader :subjectId="deptIdForHasReport" :size="'small'" :widthStr="'200'" :clearable="true" :subject="trandepartmentList" :radios="true" :distinction="'14'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :selectNameChuan="$t('other.allDepartments')"></vueCascader>
                 <el-input style="float:left;width:22%" v-if="user.userNameNeedTranslate != '1'" v-model="searchKeyword" @keyup.enter.native="searchScreen(0)" class="input-with-select" :placeholder="$t('defaultText.pleaseEnterNametoSearch')" clearable="true" size="small">
                 <el-input style="float:left;width:22%" v-if="user.userNameNeedTranslate != '1'" v-model="searchKeyword" @keyup.enter.native="searchScreen(0)" class="input-with-select" :placeholder="$t('defaultText.pleaseEnterNametoSearch')" clearable="true" size="small">
                     <el-button slot="append" @click="searchScreen(0)" icon="el-icon-search"></el-button>
                     <el-button slot="append" @click="searchScreen(0)" icon="el-icon-search"></el-button>
@@ -1452,10 +1452,10 @@
                 <selectCat v-if="user.userNameNeedTranslate == '1'" :filterable="true"  :searchBoxTop="'1'" :size="'small'" :subject="usersList" :subjectId="usersListId" :distinction="'12'" :clearable="true" @selectCal="selectCal"></selectCat>
                 <selectCat v-if="user.userNameNeedTranslate == '1'" :filterable="true"  :searchBoxTop="'1'" :size="'small'" :subject="usersList" :subjectId="usersListId" :distinction="'12'" :clearable="true" @selectCal="selectCal"></selectCat>
             </div>
             </div>
             <div style="float: left; height:32px; padding-top:10px;">
             <div style="float: left; height:32px; padding-top:10px;">
-              <span style="width:20px;height:20px;background-color: orange;padding:5px 8px;">待审核</span>
-              <span style="width:20px;height:20px;background-color: #32CD32;padding:5px 8px;margin-left:10px;">已通过</span>
-              <span style="width:20px;height:20px;background-color: red;padding:5px 8px;margin-left:10px;">已驳回/漏填</span>
-              <span style="width:20px;height:20px;background-color: #E0E0E0;padding:5px 8px;margin-left:10px;">未提交</span>
+              <span style="width:20px;height:20px;background-color: orange;padding:5px 8px;">{{ $t('state.WaitingAudit') }}</span>
+              <span style="width:20px;height:20px;background-color: #32CD32;padding:5px 8px;margin-left:10px;">{{ $t('state.alreadyPassed') }}</span>
+              <span style="width:20px;height:20px;background-color: red;padding:5px 8px;margin-left:10px;">{{ $t('yiBoHuiLouTian') }}</span>
+              <span style="width:20px;height:20px;background-color: #E0E0E0;padding:5px 8px;margin-left:10px;">{{ $t('weiTiJiao') }}</span>
             </div>
             </div>
             <div style="float: right; vertical-align: middle;height:32px">
             <div style="float: right; vertical-align: middle;height:32px">
               <el-link
               <el-link
@@ -1604,7 +1604,7 @@
           <!-- </div> -->
           <!-- </div> -->
         </el-tab-pane>
         </el-tab-pane>
 
 
-        <el-tab-pane label="未提交人员列表" name="second" >
+        <el-tab-pane :label="$t('weiTiJiaoRenYuanLieBiao')" name="second" >
           <div class="selectworktime_export" style="margin-top:10px">
           <div class="selectworktime_export" style="margin-top:10px">
             <div class="selectworktime_export_l">
             <div class="selectworktime_export_l">
               <el-date-picker
               <el-date-picker
@@ -1630,7 +1630,7 @@
             </div>
             </div>
             <div>
             <div>
                 <div style="margin-top:10px;">
                 <div style="margin-top:10px;">
-                    <el-cascader v-if="user.userNameNeedTranslate != 1" :size="'small'" v-model="deptIdForNoReport" placeholder="请选择部门" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 200px;" @change="showMonthNotWorkTime()"></el-cascader>
+                    <el-cascader v-if="user.userNameNeedTranslate != 1" :size="'small'" v-model="deptIdForNoReport" :placeholder="$t('qing-xuan-ze-bu-men')" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 200px;" @change="showMonthNotWorkTime()"></el-cascader>
                     <vueCascader :size="'small'" :widthStr="'200'" :clearable="true" :subject="trandepartmentList" :radios="true" :distinction="'15'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :selectNameChuan="$t('other.allDepartments')"></vueCascader>
                     <vueCascader :size="'small'" :widthStr="'200'" :clearable="true" :subject="trandepartmentList" :radios="true" :distinction="'15'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :selectNameChuan="$t('other.allDepartments')"></vueCascader>
                     <el-input style="width:200px;margin-left: 15px" v-if="user.userNameNeedTranslate != '1'" @keyup.enter.native="searchScreen(1)" v-model="searchKeyword" class="input-with-select" :placeholder="$t('defaultText.pleaseEnterNametoSearch')" clearable="true" size="small">
                     <el-input style="width:200px;margin-left: 15px" v-if="user.userNameNeedTranslate != '1'" @keyup.enter.native="searchScreen(1)" v-model="searchKeyword" class="input-with-select" :placeholder="$t('defaultText.pleaseEnterNametoSearch')" clearable="true" size="small">
                         <el-button slot="append" @click="searchScreen(1)" icon="el-icon-search"></el-button>
                         <el-button slot="append" @click="searchScreen(1)" icon="el-icon-search"></el-button>
@@ -1694,7 +1694,7 @@
           <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isMore" :title="$t('message.noMoreData')" type="success" center show-icon></el-alert>
           <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isMore" :title="$t('message.noMoreData')" type="success" center show-icon></el-alert>
         </el-tab-pane>
         </el-tab-pane>
 
 
-        <el-tab-pane v-if="user.companyId==5978" :label="'工时异常明细'" name="third">
+        <el-tab-pane v-if="user.companyId==5978" :label="$t('gongShiYiChangMingXi')" name="third">
           <div class="selectworktime_export" style="margin-top:10px;">
           <div class="selectworktime_export" style="margin-top:10px;">
             <div class="selectworktime_export_l">
             <div class="selectworktime_export_l">
               <el-date-picker
               <el-date-picker
@@ -1719,20 +1719,20 @@
             </div>
             </div>
             <div>
             <div>
                 <div style="margin-top:10px;">
                 <div style="margin-top:10px;">
-                    <el-cascader v-if="user.userNameNeedTranslate != 1" :size="'small'" v-model="deptIdForReminder" placeholder="请选择部门" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 200px;" @change="showMonthWorkTimeReminder()"></el-cascader>
+                    <el-cascader v-if="user.userNameNeedTranslate != 1" :size="'small'" v-model="deptIdForReminder" :placeholder="$t('qing-xuan-ze-bu-men')" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 200px;" @change="showMonthWorkTimeReminder()"></el-cascader>
                     <vueCascader :size="'small'" :widthStr="'200'" :clearable="true" :subject="trandepartmentList" :radios="true" :distinction="'16'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :selectNameChuan="$t('other.allDepartments')"></vueCascader>
                     <vueCascader :size="'small'" :widthStr="'200'" :clearable="true" :subject="trandepartmentList" :radios="true" :distinction="'16'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :selectNameChuan="$t('other.allDepartments')"></vueCascader>
                     <el-input style="float:left;width:18%" v-if="user.userNameNeedTranslate != '1'" @keyup.enter.native="searchScreen(0)" v-model="searchKeyword" class="input-with-select" :placeholder="$t('defaultText.pleaseEnterNametoSearch')" clearable="true" size="small">
                     <el-input style="float:left;width:18%" v-if="user.userNameNeedTranslate != '1'" @keyup.enter.native="searchScreen(0)" v-model="searchKeyword" class="input-with-select" :placeholder="$t('defaultText.pleaseEnterNametoSearch')" clearable="true" size="small">
                         <el-button slot="append" @click="searchScreen(0)" icon="el-icon-search"></el-button>
                         <el-button slot="append" @click="searchScreen(0)" icon="el-icon-search"></el-button>
                     </el-input>
                     </el-input>
                     <selectCat v-if="user.userNameNeedTranslate == '1'" :filterable="true"  :searchBoxTop="'1'" :size="'small'" :subject="usersList" :subjectId="usersListId" :distinction="'12'" :clearable="true" @selectCal="selectCal"></selectCat>
                     <selectCat v-if="user.userNameNeedTranslate == '1'" :filterable="true"  :searchBoxTop="'1'" :size="'small'" :subject="usersList" :subjectId="usersListId" :distinction="'12'" :clearable="true" @selectCal="selectCal"></selectCat>
-                    <el-checkbox v-model="isReminder" @change="showMonthWorkTimeReminder()">是否异常</el-checkbox>
+                    <el-checkbox v-model="isReminder" @change="showMonthWorkTimeReminder()">{{ $t('shiFouYiChang') }}</el-checkbox>
                 </div>
                 </div>
             </div>
             </div>
             <div style="float: right; vertical-align: middle;height:32px">
             <div style="float: right; vertical-align: middle;height:32px">
               <el-link
               <el-link
               type="primary"
               type="primary"
               @click="changeReminder()"
               @click="changeReminder()"
-              >{{'变更提醒'}}</el-link
+              >{{ $t('bianGengTiXing') }}</el-link
               >
               >
               <el-link
               <el-link
               type="primary"
               type="primary"
@@ -1753,7 +1753,7 @@
             v-loading="tbload"
             v-loading="tbload"
             :lazy="true"
             :lazy="true"
           >
           >
-            <el-table-column width="120" type="index" fixed="left" :label="'日期'">
+            <el-table-column width="120" type="index" fixed="left" :label="$t('weekDay.date')">
               <template slot-scope="scope">
               <template slot-scope="scope">
                 {{ scope.row.createDate}}
                 {{ scope.row.createDate}}
               </template>
               </template>
@@ -1766,7 +1766,7 @@
                         <!-- {{scope.row.name}} -->
                         <!-- {{scope.row.name}} -->
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
-            <el-table-column width="100" prop="invokeValue" fixed="left" :label="'费用类型'">
+            <el-table-column width="100" prop="invokeValue" fixed="left" :label="$t('costtype')">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
                         {{scope.row.invokeValue}}
                         {{scope.row.invokeValue}}
                 </template>
                 </template>
@@ -1778,29 +1778,29 @@
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
 
 
-            <el-table-column width="160" type="index" fixed="left" :label="'填报工时'">
+            <el-table-column width="160" type="index" fixed="left" :label="$t('tianBaoGongShi')">
               <template slot-scope="scope">
               <template slot-scope="scope">
                 {{ scope.row.workingTime}}
                 {{ scope.row.workingTime}}
               </template>
               </template>
             </el-table-column>
             </el-table-column>
 
 
-            <el-table-column width="160" type="index" fixed="left" :label="'考勤工时'">
+            <el-table-column width="160" type="index" fixed="left" :label="$t('kaoQinGongShi')">
               <template slot-scope="scope">
               <template slot-scope="scope">
                 {{ scope.row.cardTime}}
                 {{ scope.row.cardTime}}
                 <i class="el-icon-refresh" @click="restUserCardTime(scope.row)"></i>
                 <i class="el-icon-refresh" @click="restUserCardTime(scope.row)"></i>
               </template>
               </template>
             </el-table-column>
             </el-table-column>
 
 
-            <el-table-column width="160" type="index" fixed="left" :label="'是否异常'">
+            <el-table-column width="160" type="index" fixed="left" :label="$t('shiFouYiChang')">
               <template slot-scope="scope">
               <template slot-scope="scope">
-                {{ scope.row.exceedCardTime==0?'否':'是'}}
+                {{ scope.row.exceedCardTime==0?$t('state.no'):$t('state.yes')}}
               </template>
               </template>
             </el-table-column>
             </el-table-column>
 
 
-            <el-table-column width="160" type="index" fixed="left" :label="'催办'">
+            <el-table-column width="160" type="index" fixed="left" :label="$t('cuiBan')">
               <template slot-scope="scope">
               <template slot-scope="scope">
-                <el-link v-if="scope.row.exceedCardTime==1" type="primary" @click="changeReminder(scope.row)">{{'变更提醒'}}</el-link>
-                <el-link v-if="scope.row.exceedCardTime==1" type="primary" @click="cancelReminder(scope.row)">{{'取消异常'}}</el-link>
+                <el-link v-if="scope.row.exceedCardTime==1" type="primary" @click="changeReminder(scope.row)">{{ $t('bianGengTiXing') }}</el-link>
+                <el-link v-if="scope.row.exceedCardTime==1" type="primary" @click="cancelReminder(scope.row)">{{ $t('quXiaoYiChang') }}</el-link>
               </template>
               </template>
             </el-table-column>
             </el-table-column>
 
 
@@ -1878,11 +1878,11 @@
                             </div>
                             </div>
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
-                    <el-table-column  label="操作" v-if="showHidden && user.companyId == 469 && user.roleName=='超级管理员'">
+                    <el-table-column  :label="$t('operation')" v-if="showHidden && user.companyId == 469 && user.roleName=='超级管理员'">
                         <template slot-scope="scope">
                         <template slot-scope="scope">
                             <div>
                             <div>
-                                <el-button type="default" size="small" @click="openModImportTime(scope.row)">修改导入记录</el-button>
-                                <el-button type="primary" size="small" @click="delImportTime(scope.row)">删除记录</el-button>
+                                <el-button type="default" size="small" @click="openModImportTime(scope.row)">{{ $t('xiuGaiDaoRuJiLu') }}</el-button>
+                                <el-button type="primary" size="small" @click="delImportTime(scope.row)">{{ $t('shan-chu-ji-lu') }}</el-button>
                             </div>
                             </div>
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
@@ -1947,7 +1947,7 @@
                         </div>
                         </div>
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column prop="departmentName" label="部门"  >
+                <el-table-column prop="departmentName" :label="$t('lable.department')"  >
                     <template slot-scope="scope">
                     <template slot-scope="scope">
                         <div>
                         <div>
                             <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='departmentName' :openid='scope.row.departmentName'></TranslationOpenDataText></span>
                             <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='departmentName' :openid='scope.row.departmentName'></TranslationOpenDataText></span>
@@ -1974,10 +1974,10 @@
             <div  slot="title">
             <div  slot="title">
                 <span style="font-size:16px;" @click="showHiddenFunction">{{$t('other.Batchimportofworkinghours')}}</span>
                 <span style="font-size:16px;" @click="showHiddenFunction">{{$t('other.Batchimportofworkinghours')}}</span>
                 <el-link v-if="active==0"  style="float:right;margin-right:100px;" type="primary" @click="toView()">{{$t('other.viewLaborImportRecords')}}</el-link>
                 <el-link v-if="active==0"  style="float:right;margin-right:100px;" type="primary" @click="toView()">{{$t('other.viewLaborImportRecords')}}</el-link>
-                <el-link v-if="active==0"  style="float:right;margin-right:100px;" type="primary" @click="downloadProjectRatio">下载填报工时占比表</el-link>
-                <el-link v-if="active==0 && showHidden && user.companyId == 469 && user.roleName.indexOf('管理员') > 0"  style="float:right;margin-right:100px;" type="primary" @click="importCardTimeVisi = true">导入考勤时长</el-link>
-                <el-link v-if="active==0 && showHidden && user.companyId == 469 && user.roleName == '超级管理员'"  style="float:right;margin-right:50px;" type="primary" @click="showBatchDeleteReport = true; startDeleting = false;">批量删除日报</el-link>
-                <el-link v-if="active==0 && showHidden && user.companyId == 469 && user.roleName == '超级管理员'"  style="float:right;margin-right:50px;" type="primary" @click="showBatchSimpleApproveReport = true; startDeleting = false;getDepartmentForApprove();">批量审核日报</el-link>
+                <el-link v-if="active==0"  style="float:right;margin-right:100px;" type="primary" @click="downloadProjectRatio">{{ $t('xiaZaiTianBaoGongShiZhanBiBiao') }}</el-link>
+                <el-link v-if="active==0 && showHidden && user.companyId == 469 && user.roleName.indexOf('管理员') > 0"  style="float:right;margin-right:100px;" type="primary" @click="importCardTimeVisi = true">{{ $t('daoRuKaoQinShiChang') }}</el-link>
+                <el-link v-if="active==0 && showHidden && user.companyId == 469 && user.roleName == '超级管理员'"  style="float:right;margin-right:50px;" type="primary" @click="showBatchDeleteReport = true; startDeleting = false;">{{ $t('piLiangShanChuRiBao') }}</el-link>
+                <el-link v-if="active==0 && showHidden && user.companyId == 469 && user.roleName == '超级管理员'"  style="float:right;margin-right:50px;" type="primary" @click="showBatchSimpleApproveReport = true; startDeleting = false;getDepartmentForApprove();">{{ $t('piLiangShenHeRiBao') }}</el-link>
             </div>
             </div>
             
             
             <span slot="footer">
             <span slot="footer">
@@ -1989,14 +1989,14 @@
             
             
             </span>
             </span>
         </el-dialog>
         </el-dialog>
-        <el-dialog title="导入考勤时长" v-if="importCardTimeVisi" :visible.sync="importCardTimeVisi"  width="200">
+        <el-dialog :title="$t('daoRuKaoQinShiChang')" v-if="importCardTimeVisi" :visible.sync="importCardTimeVisi"  width="200">
             <p style="display: flex;justify-content: center;height:100px;">
             <p style="display: flex;justify-content: center;height:100px;">
                 <el-upload style="margin-top:10px;" ref="uploadCardTime"  action="#" :limit="1" :http-request="importCardTime" :show-file-list="false">
                 <el-upload style="margin-top:10px;" ref="uploadCardTime"  action="#" :limit="1" :http-request="importCardTime" :show-file-list="false">
                     <el-button type="primary" :underline="false" :loading="importingData">{{$t('other.chooseFileAndUpload')}}</el-button>
                     <el-button type="primary" :underline="false" :loading="importingData">{{$t('other.chooseFileAndUpload')}}</el-button>
                 </el-upload>
                 </el-upload>
             </p>
             </p>
         </el-dialog>
         </el-dialog>
-        <el-dialog title="批量删除日报" v-if="showBatchDeleteReport" :visible.sync="showBatchDeleteReport"  width="200">
+        <el-dialog :title="$t('piLiangShanChuRiBao')" v-if="showBatchDeleteReport" :visible.sync="showBatchDeleteReport"  width="200">
             <div>
             <div>
                 <span>{{$t('time.selectdaterange')}}:</span><el-date-picker 
                 <span>{{$t('time.selectdaterange')}}:</span><el-date-picker 
                     v-model="deleteReportParam.date" :editable="false" 
                     v-model="deleteReportParam.date" :editable="false" 
@@ -2009,13 +2009,13 @@
                     ></el-date-picker>
                     ></el-date-picker>
             </div>
             </div>
             <div style="margin-top:10px;">
             <div style="margin-top:10px;">
-                <span>请选择部门:</span>
-                <el-cascader v-if="user.userNameNeedTranslate != 1" v-model="deleteReportParam.deptId" placeholder="请选择部门" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 350px;"></el-cascader>
+                <span>{{ $t('qing-xuan-ze-bu-men') }}:</span>
+                <el-cascader v-if="user.userNameNeedTranslate != 1" v-model="deleteReportParam.deptId" :placeholder="$t('qing-xuan-ze-bu-men')" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 350px;"></el-cascader>
                 <vueCascader :size="'medium'" :widthStr="'350'" :clearable="true" :subject="departmentList" :radios="true" :distinction="'1'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :selectNameChuan="$t('other.allDepartments')"></vueCascader>
                 <vueCascader :size="'medium'" :widthStr="'350'" :clearable="true" :subject="departmentList" :radios="true" :distinction="'1'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :selectNameChuan="$t('other.allDepartments')"></vueCascader>
             </div>
             </div>
             <div style="margin-top:10px;">
             <div style="margin-top:10px;">
-                <span>请选择员工:</span>
-                <el-select v-model="deleteReportParam.userIds" placeholder="请选择" style="width:500px;" filterable multiple>
+                <span>{{ $t('qingXuanZeYuanGong') }}:</span>
+                <el-select v-model="deleteReportParam.userIds" :placeholder="$t('defaultText.pleaseChoose')" style="width:500px;" filterable multiple>
                     <el-option v-for="item in usersList" :key="item.id" :label="item.name" :value="item.id">
                     <el-option v-for="item in usersList" :key="item.id" :label="item.name" :value="item.id">
                         <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.name'></TranslationOpenDataText></span>
                         <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.name'></TranslationOpenDataText></span>
                         <span v-else>{{item.name}}</span>
                         <span v-else>{{item.name}}</span>
@@ -2023,11 +2023,11 @@
                 </el-select>
                 </el-select>
             </div>
             </div>
             <span slot="footer">
             <span slot="footer">
-            <el-button @click="confirmBatchDelReport" :loading="startDeleting" >开始删除</el-button>
+            <el-button @click="confirmBatchDelReport" :loading="startDeleting" >{{ $t('kaiShiShanChu') }}</el-button>
             </span>
             </span>
         </el-dialog>
         </el-dialog>
 
 
-        <el-dialog title="批量审核日报" v-if="showBatchSimpleApproveReport" :visible.sync="showBatchSimpleApproveReport"  width="200">
+        <el-dialog :title="$t('piLiangShenHeRiBao')" v-if="showBatchSimpleApproveReport" :visible.sync="showBatchSimpleApproveReport"  width="200">
             <div>
             <div>
                 <span>{{$t('time.selectdaterange')}}:</span><el-date-picker 
                 <span>{{$t('time.selectdaterange')}}:</span><el-date-picker 
                     v-model="deleteReportParam.date" :editable="false" 
                     v-model="deleteReportParam.date" :editable="false" 
@@ -2040,8 +2040,8 @@
                     ></el-date-picker>
                     ></el-date-picker>
             </div>
             </div>
             <div style="margin-top:15px;">
             <div style="margin-top:15px;">
-                <span>选择部门:</span>
-                <el-cascader v-model="deleteReportParam.departmentId" placeholder="全部部门" style="width: 350px;margin-left:25px;"
+                <span>{{ $t('other.selectdepartment') }}:</span>
+                <el-cascader v-model="deleteReportParam.departmentId" :placeholder="$t('other.allDepartments')" style="width: 350px;margin-left:25px;"
                     :options="deptOptionList" :props="{ checkStrictly: false,expandTrigger: 'hover' }" :show-all-levels="false" clearable
                     :options="deptOptionList" :props="{ checkStrictly: false,expandTrigger: 'hover' }" :show-all-levels="false" clearable
                      size="small" v-if="user.userNameNeedTranslate != 1"
                      size="small" v-if="user.userNameNeedTranslate != 1"
                     ></el-cascader>
                     ></el-cascader>
@@ -2050,18 +2050,18 @@
             </div>
             </div>
             
             
             <span slot="footer">
             <span slot="footer">
-            <el-button @click="confirmBatchApproveReport" :loading="startDeleting" >审批通过</el-button>
+            <el-button @click="confirmBatchApproveReport" :loading="startDeleting" >{{ $t('shenPiTongGuo') }}</el-button>
             </span>
             </span>
         </el-dialog>
         </el-dialog>
-        <el-dialog title="修改导入记录" v-if="showModImportTimeDialog" :visible.sync="showModImportTimeDialog"  width="200">
+        <el-dialog :title="$t('xiuGaiDaoRuJiLu')" v-if="showModImportTimeDialog" :visible.sync="showModImportTimeDialog"  width="200">
             <div>
             <div>
-                <span>选择时间:</span><el-date-picker 
+                <span>{{ $t('other.timeSelection') }}:</span><el-date-picker 
                     v-model="modImportTime" 
                     v-model="modImportTime" 
                     format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" 
                     format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" 
                     :clearable="true" 
                     :clearable="true" 
                     type="datetime" 
                     type="datetime" 
                     ></el-date-picker>
                     ></el-date-picker>
-                <span>选择导入人员:</span><el-select
+                <span>{{ $t('xuanZeDaoRuRenYuan') }}</span><el-select
                     v-model="modImportUserId"
                     v-model="modImportUserId"
                     >
                     >
                     <el-option v-for="item in usersList" :key="item.id" :label="item.name" :value="item.id">
                     <el-option v-for="item in usersList" :key="item.id" :label="item.name" :value="item.id">
@@ -2071,14 +2071,14 @@
                 </el-select>    
                 </el-select>    
             </div>
             </div>
             <span slot="footer">
             <span slot="footer">
-            <el-button @click="confirmChangeModTime" >确认</el-button>
+            <el-button @click="confirmChangeModTime" >{{ $t('queRen') }}</el-button>
             </span>
             </span>
         </el-dialog>
         </el-dialog>
         
         
         
         
-        <el-dialog title="导出员工填报工时占比" v-if="exportUserRatio" :visible.sync="exportUserRatio"  width="200">
+        <el-dialog :title="$t('daoChuYuanGongTianBaoGongShiZhanBi')" v-if="exportUserRatio" :visible.sync="exportUserRatio"  width="200">
             <div>
             <div>
-                <span>请选择年月:</span>
+                <span>{{ $t('qingXuanZeNianYue') }}</span>
                 <el-date-picker 
                 <el-date-picker 
                     v-model="ratioYmonth" :editable="false" 
                     v-model="ratioYmonth" :editable="false" 
                     format="yyyyMM" value-format="yyyyMM" 
                     format="yyyyMM" value-format="yyyyMM" 
@@ -2086,7 +2086,7 @@
                     ></el-date-picker>
                     ></el-date-picker>
             </div>
             </div>
             <span slot="footer">
             <span slot="footer">
-            <el-button @click="confirmDownloadRatio" :loading="startRatioExporting" :disabled="startRatioExporting">导出</el-button>
+            <el-button @click="confirmDownloadRatio" :loading="startRatioExporting" :disabled="startRatioExporting">{{ $t('export.export') }}</el-button>
             </span>
             </span>
         </el-dialog>
         </el-dialog>
         <!--工时批量代填 -->
         <!--工时批量代填 -->
@@ -2728,7 +2728,7 @@
                     //是否非项目
                     //是否非项目
                     var isPublic = domainItem.isPublic;//this.fillProjectList.filter(p=>p.id == selectPid)[0].isPublic;
                     var isPublic = domainItem.isPublic;//this.fillProjectList.filter(p=>p.id == selectPid)[0].isPublic;
                     console.log('==========','isPublic=='+isPublic);
                     console.log('==========','isPublic=='+isPublic);
-                    var filteredRespList = this.jobResponseList.filter(j=>j.timeType == (isPublic?'非项目工时':'项目工时') && j.role == (this.roleList.filter(r=>r.value==domainItem.extraField1)[0].label));
+                    var filteredRespList = this.jobResponseList.filter(j=>j.timeType == (isPublic?this.$t('fei-xiang-mu-gong-shi'):this.$t('xiangMuGongShi')) && j.role == (this.roleList.filter(r=>r.value==domainItem.extraField1)[0].label));
                     console.log(filteredRespList);
                     console.log(filteredRespList);
                     domainItem.filteredRespList = filteredRespList;
                     domainItem.filteredRespList = filteredRespList;
                 }
                 }
@@ -2758,7 +2758,7 @@
             },
             },
             delImportTime(row) {
             delImportTime(row) {
                 let rowId = row.id;
                 let rowId = row.id;
-                this.$confirm('您确定要删除该条记录吗?',this.$t('other.prompts'), {
+                this.$confirm(this.$t('ninQueDingYaoShanChuGaiTiaoJiLuMa'),this.$t('other.prompts'), {
                     confirmButtonText: this.$t('btn.determine'),
                     confirmButtonText: this.$t('btn.determine'),
                     cancelButtonText: this.$t('btn.cancel'),
                     cancelButtonText: this.$t('btn.cancel'),
                     type: "warning"
                     type: "warning"
@@ -2769,7 +2769,7 @@
                     },res => {
                     },res => {
                         if (res.code == "ok") {
                         if (res.code == "ok") {
                             this.$message({
                             this.$message({
-                                message: '删除成功',
+                                message: this.$t('message.successfullyDeleted'),
                                 type: "success"
                                 type: "success"
                             });
                             });
                             this.getToView();
                             this.getToView();
@@ -2791,7 +2791,7 @@
             confirmChangeModTime() {
             confirmChangeModTime() {
                 if (this.modImportTime == null || this.modImportTime.length == 0) {
                 if (this.modImportTime == null || this.modImportTime.length == 0) {
                     this.$message({
                     this.$message({
-                                message: '请选择时间',
+                                message: this.$t('message.Pleaseselectatime'),
                                 type: "error"
                                 type: "error"
                             });
                             });
                     return;
                     return;
@@ -2803,7 +2803,7 @@
                     },res => {
                     },res => {
                         if (res.code == "ok") {
                         if (res.code == "ok") {
                             this.$message({
                             this.$message({
-                                message: '修改成功',
+                                message: this.$t('message.modifyTheSuccess'),
                                 type: "success"
                                 type: "success"
                             });
                             });
                             this.getToView();
                             this.getToView();
@@ -2825,13 +2825,13 @@
             confirmBatchApproveReport() {
             confirmBatchApproveReport() {
                 if (this.deleteReportParam.date == null || this.deleteReportParam.date.length == 0) {
                 if (this.deleteReportParam.date == null || this.deleteReportParam.date.length == 0) {
                     this.$message({
                     this.$message({
-                                message: '请选择日期范围',
+                                message: this.$t('qingXuanZeRiQiFanWei'),
                                 type: "error"
                                 type: "error"
                             });
                             });
                     return;
                     return;
                 }
                 }
                 
                 
-                this.$confirm('您确定要审核通过该时间段内全部的日报吗?',this.$t('other.prompts'), {
+                this.$confirm(this.$t('ninQueDingYaoShenHeTongGuoGaiShiJianDuanNeiQuanBuDeRiBaoMa'),this.$t('other.prompts'), {
                     confirmButtonText: this.$t('btn.determine'),
                     confirmButtonText: this.$t('btn.determine'),
                     cancelButtonText: this.$t('btn.cancel'),
                     cancelButtonText: this.$t('btn.cancel'),
                     type: "warning"
                     type: "warning"
@@ -2851,7 +2851,7 @@
                     this.http.post('/report/batchApproveByDate',obj,res => {
                     this.http.post('/report/batchApproveByDate',obj,res => {
                         if (res.code == "ok") {
                         if (res.code == "ok") {
                             this.$message({
                             this.$message({
-                                message: '审核通过',
+                                message: this.$t('state.approved'),
                                 type: "success"
                                 type: "success"
                             });
                             });
                             this.getReportList();
                             this.getReportList();
@@ -2875,20 +2875,20 @@
             confirmBatchDelReport() {
             confirmBatchDelReport() {
                 if (this.deleteReportParam.userIds.length == 0 && !this.deleteReportParam.deptId) {
                 if (this.deleteReportParam.userIds.length == 0 && !this.deleteReportParam.deptId) {
                     this.$message({
                     this.$message({
-                                message: '请选择部门或人员',
+                                message: this.$t('qingXuanZeBuMenHuoRenYuan'),
                                 type: "error"
                                 type: "error"
                             });
                             });
                     return;
                     return;
                 }
                 }
                 if (this.deleteReportParam.date == null || this.deleteReportParam.date.length == 0) {
                 if (this.deleteReportParam.date == null || this.deleteReportParam.date.length == 0) {
                     this.$message({
                     this.$message({
-                                message: '请选择日期范围',
+                                message: this.$t('qingXuanZeRiQiFanWei'),
                                 type: "error"
                                 type: "error"
                             });
                             });
                     return;
                     return;
                 }
                 }
                 
                 
-                this.$confirm('您确定要删除该时间段内的日报吗,删除后将不可恢复',this.$t('other.prompts'), {
+                this.$confirm(this.$t('ninQueDingYaoShanChuGaiShiJianDuanNeiDeRiBaoMaShanChuHouJiangBuKeHuiFu'),this.$t('other.prompts'), {
                     confirmButtonText: this.$t('btn.determine'),
                     confirmButtonText: this.$t('btn.determine'),
                     cancelButtonText: this.$t('btn.cancel'),
                     cancelButtonText: this.$t('btn.cancel'),
                     type: "warning"
                     type: "warning"
@@ -2928,11 +2928,11 @@
                 this.http.post('/project/nearProject',{},res => {
                 this.http.post('/project/nearProject',{},res => {
                     if(res.code == 'ok'){
                     if(res.code == 'ok'){
                         let topObj = {
                         let topObj = {
-                            label: '最近选择项目',
+                            label: this.$t('zuiJinXuanZeXiangMu'),
                             peojectList: res.data 
                             peojectList: res.data 
                         }
                         }
                         let botomObj = {
                         let botomObj = {
-                            label: '全部项目',
+                            label: this.$t('other.allProject'),
                             peojectList: this.fillProjectList
                             peojectList: this.fillProjectList
                         }
                         }
                         //最近项目如果在fillProjectList中不存在,需要移除
                         //最近项目如果在fillProjectList中不存在,需要移除
@@ -3469,7 +3469,7 @@
                         if (res.code == "ok") {
                         if (res.code == "ok") {
                             //换成弹出框,以免有人等了半天回来啥也没看到
                             //换成弹出框,以免有人等了半天回来啥也没看到
                             this.$message({
                             this.$message({
-                            message: '导入考勤时长成功',
+                            message: this.$t('daoRuKaoQinShiChangChengGong'),
                             type: "success"
                             type: "success"
                             });
                             });
                         } else {
                         } else {
@@ -3511,7 +3511,7 @@
                         this.importingData = false;
                         this.importingData = false;
                         if (res.code == "ok") {
                         if (res.code == "ok") {
                             //换成弹出框,以免有人等了半天回来啥也没看到
                             //换成弹出框,以免有人等了半天回来啥也没看到
-                            this.importResultMsg = '成功导入' +res.data+this.$t('other.workHourData')+(res.msg?res.msg:"");
+                            this.importResultMsg = this.$t('chengGongDaoRu') +res.data+this.$t('other.workHourData')+(res.msg?res.msg:"");
                             this.getReportList();
                             this.getReportList();
                             this.importWxDialog = false;
                             this.importWxDialog = false;
                         } else {
                         } else {
@@ -3550,7 +3550,7 @@
                         this.showImportResult = true;
                         this.showImportResult = true;
                         if (res.code == "ok") {
                         if (res.code == "ok") {
                             //换成弹出框,以免有人等了半天回来啥也没看到
                             //换成弹出框,以免有人等了半天回来啥也没看到
-                            this.importResultMsg = "成功导入"+res.data+this.$t('other.workHourData')+(res.msg?res.msg:"");;
+                            this.importResultMsg = this.$t('chengGongDaoRu')+res.data+this.$t('other.workHourData')+(res.msg?res.msg:"");;
                             this.getReportList();
                             this.getReportList();
                             this.importWXDialog = false;
                             this.importWXDialog = false;
                         } else {
                         } else {
@@ -3873,14 +3873,14 @@
             url='/report/pushProjectReportToSap'
             url='/report/pushProjectReportToSap'
             let day = (this.choseDay+1) > 9 ? "-" + (this.choseDay + 1) : "-0" + (this.choseDay + 1);
             let day = (this.choseDay+1) > 9 ? "-" + (this.choseDay + 1) : "-0" + (this.choseDay + 1);
             var pushDate = this.date + day;
             var pushDate = this.date + day;
-            this.$confirm(reportId?'确认推送当前工时?':('确认推送'+pushDate+'的工时?'), '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
+            this.$confirm(reportId?this.$t('queRenTuiSongDangQianGongShi'):(this.$t('queRenTuiSong')+pushDate+this.$t('deGongShi')), this.$t('other.prompts'), {
+          confirmButtonText: this.$t('btn.determine'),
+          cancelButtonText: this.$t('btn.cancel'),
           type: 'info'
           type: 'info'
         }).then(() => {
         }).then(() => {
             const loading = this.$loading({
             const loading = this.$loading({
                 lock: true,
                 lock: true,
-                text: '正在推送中,请耐心等待。',
+                text: this.$t('zhengZaiTuiSongZhongQingNaiXinDengDai'),
                 spinner: 'el-icon-loading',
                 spinner: 'el-icon-loading',
                 background: 'rgba(0, 0, 0, 0.7)'
                 background: 'rgba(0, 0, 0, 0.7)'
             });
             });
@@ -3912,14 +3912,14 @@
         });
         });
         }else{
         }else{
             url='/report/pushReportDataToThird'
             url='/report/pushReportDataToThird'
-            this.$confirm('确认推送'+this.date+'月的工时?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
+            this.$confirm(this.$t('queRenTuiSong')+this.date+this.$t('yueDeGongShi'), this.$t('other.prompts'), {
+          confirmButtonText: this.$t('btn.determine'),
+          cancelButtonText: this.$t('btn.cancel'),
           type: 'info'
           type: 'info'
         }).then(() => {
         }).then(() => {
             const loading = this.$loading({
             const loading = this.$loading({
                 lock: true,
                 lock: true,
-                text: '正在推送中,请耐心等待。',
+                text: this.$t('zhengZaiTuiSongZhongQingNaiXinDengDai'),
                 spinner: 'el-icon-loading',
                 spinner: 'el-icon-loading',
                 background: 'rgba(0, 0, 0, 0.7)'
                 background: 'rgba(0, 0, 0, 0.7)'
             });
             });
@@ -3930,7 +3930,7 @@
                 if(res.code == 'ok'){
                 if(res.code == 'ok'){
                     this.$message({
                     this.$message({
                         type: 'success',
                         type: 'success',
-                        message: '推送成功!'
+                        message: this.$t('tuiSongChengGong')
                     });
                     });
                 }else{
                 }else{
                     this.$message({
                     this.$message({
@@ -4435,7 +4435,7 @@
                 if (this.user.company.packageProject == 1) {
                 if (this.user.company.packageProject == 1) {
                     if (this.chosenMembList.length > 1) {
                     if (this.chosenMembList.length > 1) {
                         this.$message({
                         this.$message({
-                            message: '每次仅支持代填一个人',
+                            message: this.$t('meiCiJinZhiChiDaiTianYiGeRen'),
                             type: "error",
                             type: "error",
                         });
                         });
                         return;
                         return;
@@ -4756,7 +4756,7 @@
                 if (this.user.company.packageProject==1 && this.isSubstitude) {
                 if (this.user.company.packageProject==1 && this.isSubstitude) {
                     if (!this.workForm.userId || this.workForm.userId.length == 0) {
                     if (!this.workForm.userId || this.workForm.userId.length == 0) {
                         this.$message({
                         this.$message({
-                            message: '请选择代填的员工',
+                            message: this.$t('qingXuanZeDaiTianDeYuanGong'),
                             type: "error"
                             type: "error"
                         });
                         });
                         return;
                         return;
@@ -5713,7 +5713,7 @@
                             this.reportList = this.reportList.concat(res.data.data);
                             this.reportList = this.reportList.concat(res.data.data);
                         } else if (this.pageIndex > 1){
                         } else if (this.pageIndex > 1){
                             this.$message({
                             this.$message({
-                            message: '没有更多数据了',
+                            message: this.$t('meiYouGengDuoShuJuLe'),
                             type: "info"
                             type: "info"
                         });
                         });
                         }
                         }
@@ -5927,7 +5927,7 @@
                 } else {
                 } else {
                     const loading = this.$loading({
                     const loading = this.$loading({
                         lock: true,
                         lock: true,
-                        text: '正在导入修改中,请耐心等待。',
+                        text: this.$t('zhengZaiDaoRuXiuGaiZhongQingNaiXinDengDai'),
                         spinner: 'el-icon-loading',
                         spinner: 'el-icon-loading',
                         background: 'rgba(0, 0, 0, 0.7)'
                         background: 'rgba(0, 0, 0, 0.7)'
                     });
                     });
@@ -6147,7 +6147,7 @@
                                 var filteredRespList = null
                                 var filteredRespList = null
                                 if (targetP.length > 0) {
                                 if (targetP.length > 0) {
                                     var isPublic = targetP[0].isPublic;
                                     var isPublic = targetP[0].isPublic;
-                                    filteredRespList = this.jobResponseList.filter(j=>j.timeType == (isPublic?'非项目工时':'项目工时') && j.role == this.roleList.filter(r=>r.value == list.report[i].extraField1)[0].label);
+                                    filteredRespList = this.jobResponseList.filter(j=>j.timeType == (isPublic?this.$t('fei-xiang-mu-gong-shi'):this.$t('xiangMuGongShi')) && j.role == this.roleList.filter(r=>r.value == list.report[i].extraField1)[0].label);
                                 }
                                 }
                                 arr.push({
                                 arr.push({
                                     id: list.report[i].id,
                                     id: list.report[i].id,
@@ -6398,14 +6398,14 @@
             showWeekItemEdit(item, i, projectId,names, row) {
             showWeekItemEdit(item, i, projectId,names, row) {
                 if (item.state == 0) {
                 if (item.state == 0) {
                     this.$message({
                     this.$message({
-                        message: '待审核状态不可修改,请返回到查看日报中先撤回',
+                        message: this.$t('daiShenHeZhuangTaiBuKeXiuGaiQingFanHuiDaoChaKanRiBaoZhongXianCheHui'),
                         type: "error"
                         type: "error"
                     });
                     });
                     return;
                     return;
                 }
                 }
                 if (item.state == 1) {
                 if (item.state == 1) {
                     this.$message({
                     this.$message({
-                        message: '已通过状态不可修改',
+                        message: this.$t('yiTongGuoZhuangTaiBuKeXiuGai'),
                         type: "error"
                         type: "error"
                     });
                     });
                     return;
                     return;
@@ -6550,7 +6550,7 @@
                 if (this.user.company.packageProject == 1 && this.user.companyId === 3917) {
                 if (this.user.company.packageProject == 1 && this.user.companyId === 3917) {
                     if (!this.zhoBao.groupId || !this.zhoBao.stage) {
                     if (!this.zhoBao.groupId || !this.zhoBao.stage) {
                         this.$message({
                         this.$message({
-                            message: '任务分组和阶段必填,请检查',
+                            message: this.$t('renWuFenZuHeJieDuanBiTianQingJianCha'),
                             type: "error"
                             type: "error"
                         });
                         });
                         return;
                         return;
@@ -6559,7 +6559,7 @@
                 // 检查任务分组
                 // 检查任务分组
                 if(this.user.timeType.taskGroupRequired == 1 && !this.zhoBao.groupId){
                 if(this.user.timeType.taskGroupRequired == 1 && !this.zhoBao.groupId){
                     this.$message({
                     this.$message({
-                        message: '任务分组必填,请检查',
+                        message: this.$t('renWuFenZuBiTianQingJianCha'),
                         type: "error"
                         type: "error"
                     });
                     });
                     return
                     return
@@ -6567,7 +6567,7 @@
                 //检查子项目是否必填
                 //检查子项目是否必填
                 if (this.user.timeType.subProMustFill == 1 && this.zhoBao.subProjectList && this.zhoBao.subProjectList.length > 0 && !this.zhoBao.subProjectId) {
                 if (this.user.timeType.subProMustFill == 1 && this.zhoBao.subProjectList && this.zhoBao.subProjectList.length > 0 && !this.zhoBao.subProjectId) {
                     this.$message({
                     this.$message({
-                        message: '子项目必填,请检查',
+                        message: this.$t('ziXiangMuBiTianQingJianCha'),
                         type: "error"
                         type: "error"
                     });
                     });
                     return;
                     return;
@@ -7118,9 +7118,9 @@
                         if (res.code == "ok") {
                         if (res.code == "ok") {
                             this.submitWeekReport(0)
                             this.submitWeekReport(0)
                         } else {
                         } else {
-                            this.$confirm(res.msg, '提示', {
-                                confirmButtonText: '忽略并提交',
-                                cancelButtonText: '取消',
+                            this.$confirm(res.msg, this.$t('other.prompts'), {
+                                confirmButtonText: this.$t('huLveBingTiJiao'),
+                                cancelButtonText: this.$t('btn.cancel'),
                                 type: 'error'
                                 type: 'error'
                             }).then(() => {
                             }).then(() => {
                                 this.submitWeekReport(0)
                                 this.submitWeekReport(0)
@@ -7520,7 +7520,7 @@
                     let { next, error } = this.handleGroupAuditorData(this.zhoData)
                     let { next, error } = this.handleGroupAuditorData(this.zhoData)
                     if(!next) {
                     if(!next) {
                         this.$message({
                         this.$message({
-                            message: `【${error.join('、')}】请填写任务分组`,
+                            message: `【${error.join('、')}】` + this.$t('qingTianXieRenWuFenZu'),
                             type: 'error'
                             type: 'error'
                         })
                         })
                         return
                         return
@@ -7584,7 +7584,7 @@
                 if(arrList.length > 0) {
                 if(arrList.length > 0) {
                     return {
                     return {
                         next: false,
                         next: false,
-                        error: arrList.map(item => `【${item.date} ${item.dateText} 中的 (${item.projectName})项目】`),
+                        error: arrList.map(item => `【${item.date} ${item.dateText} `+ this.$t('zhongDe')+ `(${item.projectName})` + this.$t('other.project')+ `】`),
                     }
                     }
                 } else {
                 } else {
                     return {
                     return {
@@ -7815,7 +7815,7 @@
                                     var endDate = new Date(this.workForm.createDate[1]);
                                     var endDate = new Date(this.workForm.createDate[1]);
                                     if (startDate > endDate) {
                                     if (startDate > endDate) {
                                         this.$message({
                                         this.$message({
-                                            message: '开始日期不能大于结束日期',
+                                            message: this.$t('kaiShiRiQiBuNengDaYuJieShuRiQi'),
                                             type: "error"
                                             type: "error"
                                         });
                                         });
                                         return
                                         return
@@ -7844,9 +7844,9 @@
                                     if (res.code == "ok") {
                                     if (res.code == "ok") {
                                         this.submitReportSon()
                                         this.submitReportSon()
                                     } else {
                                     } else {
-                                        this.$confirm(res.msg, '提示', {
-                                            confirmButtonText: '忽略并提交',
-                                            cancelButtonText: '取消',
+                                        this.$confirm(res.msg, this.$t('other.prompts'), {
+                                            confirmButtonText: this.$t('huLveBingTiJiao'),
+                                            cancelButtonText: this.$t('btn.cancel'),
                                             type: 'error'
                                             type: 'error'
                                         }).then(() => {
                                         }).then(() => {
                                             this.submitReportSon()
                                             this.submitReportSon()
@@ -7862,9 +7862,9 @@
                                 });
                                 });
                             } else {
                             } else {
                                 if(this.totalReportHours < this.user.timeType.allday){
                                 if(this.totalReportHours < this.user.timeType.allday){
-                                    this.$confirm('当日工时不足' + this.user.timeType.allday.toFixed(1) + '小时,是否确定提交?', '提示', {
-                                        confirmButtonText: '确定',
-                                        cancelButtonText: '取消',
+                                    this.$confirm(this.$t('dangRiGongShiBuZu') + this.user.timeType.allday.toFixed(1) + this.$t('xiaoShiShiFouQueDingTiJiao'), this.$t('other.prompts'), {
+                                        confirmButtonText: this.$t('btn.determine'),
+                                        cancelButtonText: this.$t('btn.cancel'),
                                         type: 'warning'
                                         type: 'warning'
                                     }).then(() => {
                                     }).then(() => {
                                         this.submitReportSon()
                                         this.submitReportSon()
@@ -7939,7 +7939,7 @@
                                 if (oneProItem.subProjectList.length > 0 && !oneProItem.subProjectId) {
                                 if (oneProItem.subProjectList.length > 0 && !oneProItem.subProjectId) {
                                     //没有选择子项目
                                     //没有选择子项目
                                     this.$message({
                                     this.$message({
-                                        message: '子项目必填,请检查',
+                                        message: this.$t('ziXiangMuBiTianQingJianCha'),
                                         type: "error"
                                         type: "error"
                                     });
                                     });
                                     return
                                     return
@@ -7953,21 +7953,21 @@
                                 var oneProItem = this.workForm.domains[p]
                                 var oneProItem = this.workForm.domains[p]
                                 if (!oneProItem.extraField1) {
                                 if (!oneProItem.extraField1) {
                                     this.$message({
                                     this.$message({
-                                        message: '角色必填,请检查',
+                                        message: this.$t('jiaoSeBiTianQingJianCha'),
                                         type: "error"
                                         type: "error"
                                     });
                                     });
                                     return
                                     return
                                 }
                                 }
                                 if (!oneProItem.extraField2) {
                                 if (!oneProItem.extraField2) {
                                     this.$message({
                                     this.$message({
-                                        message: '工作职责必填,请检查',
+                                        message: this.$t('gongZuoZhiZeBiTianQingJianCha'),
                                         type: "error"
                                         type: "error"
                                     });
                                     });
                                     return
                                     return
                                 }
                                 }
                                 if (!oneProItem.extraField3) {
                                 if (!oneProItem.extraField3) {
                                     this.$message({
                                     this.$message({
-                                        message: '工作内容必填,请检查',
+                                        message: this.$t('gongZuoNeiRongBiTianQingJianCha'),
                                         type: "error"
                                         type: "error"
                                     });
                                     });
                                     return
                                     return
@@ -8093,7 +8093,7 @@
                             if(taskRequired == 1) {
                             if(taskRequired == 1) {
                                 if(!this.workForm.domains[i].taskId) {
                                 if(!this.workForm.domains[i].taskId) {
                                     this.$message({
                                     this.$message({
-                                        message: `【${this.workForm.domains[i].projectName}】请选择 任务/里程碑`,
+                                        message: `【${this.workForm.domains[i].projectName}】`+this.$t('qingXuanZeRenWuLiChengBei'),
                                         type: "error"
                                         type: "error"
                                     });
                                     });
                                     return
                                     return
@@ -8362,7 +8362,7 @@
                             }
                             }
                             if(this.user.timeType.taskGroupRequired == 1 && !this.workForm.domains[i].groupId) {
                             if(this.user.timeType.taskGroupRequired == 1 && !this.workForm.domains[i].groupId) {
                                 this.$message({
                                 this.$message({
-                                    message: `请选择【${this.workForm.domains[i].projectName}】项目下的任务分组`,
+                                    message: this.$t('defaultText.pleaseChoose') + `【${this.workForm.domains[i].projectName}】`+ this.$t('xiangMuXiaDeRenWuFenZu'),
                                     type: "error"
                                     type: "error"
                                 });
                                 });
                                 return
                                 return

+ 16 - 13
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue

@@ -12,7 +12,7 @@
                         <vueCascader :size="'mini'" :widthStr="'125'" :clearable="true" :subject="option" :radios="false" :distinction="'1'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1"></vueCascader>
                         <vueCascader :size="'mini'" :widthStr="'125'" :clearable="true" :subject="option" :radios="false" :distinction="'1'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1"></vueCascader>
                     </el-form-item>
                     </el-form-item>
 
 
-                    <el-form-item :label="'填报人'" style="width: 210px">
+                    <el-form-item :label="$t('tian-bao-ren')" style="width: 210px">
                         <el-select v-if="user.userNameNeedTranslate != '1'" v-model="search.userIdArray" :placeholder="$t('defaultText.pleaseChoose')" clearable @visible-change="usersSearch" @remove-tag="usersSearch(false)" @clear="usersSearch(false)" filterable="true" size="mini" style="width: 150px" multiple collapse-tags>
                         <el-select v-if="user.userNameNeedTranslate != '1'" v-model="search.userIdArray" :placeholder="$t('defaultText.pleaseChoose')" clearable @visible-change="usersSearch" @remove-tag="usersSearch(false)" @clear="usersSearch(false)" filterable="true" size="mini" style="width: 150px" multiple collapse-tags>
                             <el-option v-for="item in searchUsersList" :key="item.id" :label="item.name" :value="item.id">
                             <el-option v-for="item in searchUsersList" :key="item.id" :label="item.name" :value="item.id">
                                 <span style="float: left" v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.name'></TranslationOpenDataText></span>
                                 <span style="float: left" v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.name'></TranslationOpenDataText></span>
@@ -24,7 +24,7 @@
                         <!-- <selectCat :size="'size'" :subject="searchUsersList" :clearable="true" :filterable="true" @selectCal="selectCal"></selectCat> -->
                         <!-- <selectCat :size="'size'" :subject="searchUsersList" :clearable="true" :filterable="true" @selectCal="selectCal"></selectCat> -->
                     </el-form-item>
                     </el-form-item>
 
 
-                    <el-form-item :label="'审核人'" style="width: 210px">
+                    <el-form-item :label="$t('other.reviewer')" style="width: 210px">
                         <el-select v-if="user.userNameNeedTranslate != '1'" v-model="search.auditUserId" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="usersSearch(false)" size="mini" style="width: 150px" collapse-tags>
                         <el-select v-if="user.userNameNeedTranslate != '1'" v-model="search.auditUserId" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="usersSearch(false)" size="mini" style="width: 150px" collapse-tags>
                             <el-option v-for="item in searchUsersList" :key="item.id" :label="item.name" :value="item.id">
                             <el-option v-for="item in searchUsersList" :key="item.id" :label="item.name" :value="item.id">
                                 <span style="float: left" v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.name'></TranslationOpenDataText></span>
                                 <span style="float: left" v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.name'></TranslationOpenDataText></span>
@@ -126,9 +126,9 @@
                                         </span>]
                                         </span>]
                                     </span>
                                     </span>
                                     </b></p>
                                     </b></p>
-                                    <p v-if="user.timeType.reportAuditType == 6" >审核流程:<span v-if="item.auditorList && item.auditorList.length == 1">一层审核(<span style="color:#20A0ff;">{{ item.auditorList[0].name }}</span>)</span>
-                                    <span v-if="item.auditorList && item.auditorList.length == 2">两层审核(<span style="color:#20A0ff;">{{ item.auditorList[0].name }}->{{ item.auditorList[1].name }}</span>)</span>
-                                    <el-button size="small" @click="viewOneReport(item)" v-if="!item.auditorList">查看</el-button>
+                                    <p v-if="user.timeType.reportAuditType == 6" >{{ $t('shenHeLiuCheng') }}<span v-if="item.auditorList && item.auditorList.length == 1">{{ $t('yiCengShenHe') }}(<span style="color:#20A0ff;">{{ item.auditorList[0].name }}</span>)</span>
+                                    <span v-if="item.auditorList && item.auditorList.length == 2">{{ $t('liangCengShenHe') }}(<span style="color:#20A0ff;">{{ item.auditorList[0].name }}->{{ item.auditorList[1].name }}</span>)</span>
+                                    <el-button size="small" @click="viewOneReport(item)" v-if="!item.auditorList">{{ $t('cha-kan') }}</el-button>
                                     </p>
                                     </p>
                                     <p v-if="user.timeType.customDegreeActive==1 && (item.degree_id != null || item.multiDegrId != '[]')">{{user.timeType.customDegreeName}}:{{item.degreeName}}</p>
                                     <p v-if="user.timeType.customDegreeActive==1 && (item.degree_id != null || item.multiDegrId != '[]')">{{user.timeType.customDegreeName}}:{{item.degreeName}}</p>
                                     <p v-if="user.timeType.customDataActive==1">{{user.timeType.customDataName}}:{{item.customData}}</p>
                                     <p v-if="user.timeType.customDataActive==1">{{user.timeType.customDataName}}:{{item.customData}}</p>
@@ -148,18 +148,18 @@
                                             </span> 
                                             </span> 
                                     </p>
                                     </p>
                                     <p v-if="user.companyId == yuzhongCompId">
                                     <p v-if="user.companyId == yuzhongCompId">
-                                                            <span>角色:{{item.extraField1? roleList.filter(r=>r.value == item.extraField1)[0].label:''}}</span>
-                                                        <span style="margin-left:10px;">工作职责:{{ item.extraField2? item.extraField2Name:''}}</span>
-                                                        <span style="margin-left:10px;">工作内容:{{ item.extraField3? item.extraField3Name:''}}</span></p>
+                                                            <span>{{ $t('jiao-se') }}:{{item.extraField1? roleList.filter(r=>r.value == item.extraField1)[0].label:''}}</span>
+                                                        <span style="margin-left:10px;">{{ $t('gongZuoZhiZe') }}:{{ item.extraField2? item.extraField2Name:''}}</span>
+                                                        <span style="margin-left:10px;">{{ $t('gongZuoNeiRong') }}:{{ item.extraField3? item.extraField3Name:''}}</span></p>
                                     <p v-if="item.taskId != null">{{$t('other.task')}}:{{item.taskName}}
                                     <p v-if="item.taskId != null">{{$t('other.task')}}:{{item.taskName}}
-                                        <span style="margin-left:10px;" v-if="user.companyId==3092">-- 服务:{{ item.sapServiceName }}</span></p>
+                                        <span style="margin-left:10px;" v-if="user.companyId==3092">-- {{ $t('fuWu') }}:{{ item.sapServiceName }}</span></p>
                                     <p v-if="item.groupId">
                                     <p v-if="item.groupId">
                                         <span>{{$t('other.taskGroup')}}:{{item.groupName}}</span>
                                         <span>{{$t('other.taskGroup')}}:{{item.groupName}}</span>
                                         <!-- 阶段 -->
                                         <!-- 阶段 -->
                                         <span v-if="item.stage != null && user.companyId != yuzhongCompId" style="margin-left:10px;"> {{$t('other.inputStage')}}:{{item.stage}}</span>
                                         <span v-if="item.stage != null && user.companyId != yuzhongCompId" style="margin-left:10px;"> {{$t('other.inputStage')}}:{{item.stage}}</span>
                                     </p>
                                     </p>
                                     <p v-if="user.company.companyName == '成都明夷电子科技有限公司'">
                                     <p v-if="user.company.companyName == '成都明夷电子科技有限公司'">
-                                        <span>用时占比:{{ item.progress }}%</span>
+                                        <span>{{ $t('lable.percentageOfTime') }} :{{ item.progress }}%</span>
                                     </p>
                                     </p>
                                     <p v-else>
                                     <p v-else>
                                         <span v-if="item.multiWorktime==1">{{ $t('other.project') }}</span>
                                         <span v-if="item.multiWorktime==1">{{ $t('other.project') }}</span>
@@ -237,7 +237,7 @@
                 <el-table-column prop="state" :label="$t('state.states')" sortable>
                 <el-table-column prop="state" :label="$t('state.states')" sortable>
                     <template slot-scope="scope">
                     <template slot-scope="scope">
                         <span v-if="scope.row.state == 0" style="color:#DAA520;">
                         <span v-if="scope.row.state == 0" style="color:#DAA520;">
-                            <span v-if="user.timeType.reportAuditType == 7">待审核</span>
+                            <span v-if="user.timeType.reportAuditType == 7">{{ $t('state.WaitingAudit') }}</span>
                             <span v-else>
                             <span v-else>
                                 <span v-if="user.userNameNeedTranslate != '1'">
                                 <span v-if="user.userNameNeedTranslate != '1'">
                                     <span v-if="user.company.companyName != '成都明夷电子科技有限公司'">
                                     <span v-if="user.company.companyName != '成都明夷电子科技有限公司'">
@@ -257,7 +257,7 @@
                                         </span>
                                         </span>
                                     </span>
                                     </span>
                                     <span v-else>
                                     <span v-else>
-                                        待审核
+                                        {{ $t('state.WaitingAudit') }}
                                     </span>
                                     </span>
                                 </span>
                                 </span>
                                 <span v-if="user.userNameNeedTranslate == '1'">
                                 <span v-if="user.userNameNeedTranslate == '1'">
@@ -908,7 +908,10 @@
                     this.listLoading = false;
                     this.listLoading = false;
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         for (let entry of res.data) {
                         for (let entry of res.data) {
-                            entry.reviewerNames = (entry.data || []).map(item => item.projectAuditorName);
+                            let reviewerNames = (entry.data || []).map(item => item.projectAuditorName);
+                            let uniqueReviewerNames = [...new Set(reviewerNames)];
+                            entry.reviewerNames = uniqueReviewerNames;
+                            // entry.reviewerNames = (entry.data || []).map(item => item.projectAuditorName);
                         }
                         }
                         this.listBackup = JSON.parse(JSON.stringify(res.data));
                         this.listBackup = JSON.parse(JSON.stringify(res.data));
                         console.log(this.listBackup, "《====== 赋值")
                         console.log(this.listBackup, "《====== 赋值")

+ 23 - 23
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/weeklyCustomization.vue

@@ -2,21 +2,21 @@
     <div class='weeklyCustomization'>
     <div class='weeklyCustomization'>
         <div class="title">
         <div class="title">
             <el-button @click="getCurrentWeek(-7)" size="small">&lt;&lt;</el-button>
             <el-button @click="getCurrentWeek(-7)" size="small">&lt;&lt;</el-button>
-            <el-button @click="getCurrentWeek(0)" size="small">本周</el-button>
+            <el-button @click="getCurrentWeek(0)" size="small">{{ $t('time.thisWeek') }}</el-button>
             <el-button @click="getCurrentWeek(7)" size="small">&gt;&gt;</el-button>
             <el-button @click="getCurrentWeek(7)" size="small">&gt;&gt;</el-button>
         </div>
         </div>
         <div class="weekcen flexColumn" v-loading="submitLoading">
         <div class="weekcen flexColumn" v-loading="submitLoading">
             <div class="flexColumnAuto flex1">
             <div class="flexColumnAuto flex1">
                 <el-table :data="weekTableData" border style="width: 100%;" height="0" :span-method="arraySpanMethod">
                 <el-table :data="weekTableData" border style="width: 100%;" height="0" :span-method="arraySpanMethod">
-                    <el-table-column prop="dateTime" label="日期" width="180">
+                    <el-table-column prop="dateTime" :label="$t('weekDay.date')" width="180">
                         <template slot-scope="scope">
                         <template slot-scope="scope">
                             <span>{{ scope.row.dateTime }}</span>
                             <span>{{ scope.row.dateTime }}</span>
                             (<span>{{ scope.row.weekDayTxt }}</span>)
                             (<span>{{ scope.row.weekDayTxt }}</span>)
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
-                    <el-table-column label="项目" width="220">
+                    <el-table-column :label="$t('other.project')" width="220">
                         <template slot-scope="scope">
                         <template slot-scope="scope">
-                            <el-select v-model="scope.row.projectId" size="small" placeholder="请选择项目" clearable
+                            <el-select v-model="scope.row.projectId" size="small" :placeholder="$t('defaultText.pleaseSelectSnItem')" clearable
                                 @change="changeProject(scope.row.projectId, scope.$index)"
                                 @change="changeProject(scope.row.projectId, scope.$index)"
                                 :disabled="scope.row.state == 1 || scope.row.state == 0 || !scope.row.canFill">
                                 :disabled="scope.row.state == 1 || scope.row.state == 0 || !scope.row.canFill">
                                 <el-option v-for="item in projectList" :key="item.id" :label="item.projectName"
                                 <el-option v-for="item in projectList" :key="item.id" :label="item.projectName"
@@ -25,9 +25,9 @@
                             </el-select>
                             </el-select>
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
-                    <el-table-column label="分组" width="180">
+                    <el-table-column :label="$t('fenZu')" width="180">
                         <template slot-scope="scope">
                         <template slot-scope="scope">
-                            <el-select v-model="scope.row.groupId" size="small" placeholder="请选择分组"
+                            <el-select v-model="scope.row.groupId" size="small" :placeholder="$t('selectagroup')"
                                 @change="changeGroup(scope.row.groupId, scope.row.taskGroups, scope.$index)"
                                 @change="changeGroup(scope.row.groupId, scope.row.taskGroups, scope.$index)"
                                 :disabled="scope.row.state == 1 || scope.row.state == 0 || !scope.row.canFill">
                                 :disabled="scope.row.state == 1 || scope.row.state == 0 || !scope.row.canFill">
                                 <el-option v-for="item in scope.row.taskGroups" :key="item.id" :label="item.name"
                                 <el-option v-for="item in scope.row.taskGroups" :key="item.id" :label="item.name"
@@ -36,20 +36,20 @@
                             </el-select>
                             </el-select>
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
-                    <el-table-column prop="content" label="工作内容" width="300">
+                    <el-table-column prop="content" :label="$t('gongZuoNeiRong')" width="300">
                         <template slot-scope="scope">
                         <template slot-scope="scope">
                             <el-input size="small" type="textarea" :rows="2" v-model="scope.row.content"
                             <el-input size="small" type="textarea" :rows="2" v-model="scope.row.content"
                                 :disabled="scope.row.state == 1 || scope.row.state == 0 || !scope.row.canFill"
                                 :disabled="scope.row.state == 1 || scope.row.state == 0 || !scope.row.canFill"
                                 resize="none"></el-input>
                                 resize="none"></el-input>
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
-                    <el-table-column prop="workingTime" label="时间(小时)" width="160">
+                    <el-table-column prop="workingTime" :label="$t('shiJianXiaoShi')" width="160">
                         <template slot-scope="scope">
                         <template slot-scope="scope">
                             <el-input-number size="small" v-model="scope.row.workingTime" :min="0" :max="12" :step="0.5"
                             <el-input-number size="small" v-model="scope.row.workingTime" :min="0" :max="12" :step="0.5"
                                 :disabled="scope.row.state == 1 || scope.row.state == 0 || !scope.row.canFill"></el-input-number>
                                 :disabled="scope.row.state == 1 || scope.row.state == 0 || !scope.row.canFill"></el-input-number>
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
-                    <el-table-column prop="projectAuditorId" label="审批人" width="160">
+                    <el-table-column prop="projectAuditorId" :label="$t('approver')" width="160">
                         <template slot-scope="scope">
                         <template slot-scope="scope">
                             <!-- <span v-if="user.userNameNeedTranslate != '1'">{{ scope.row.projectAuditorName }}</span>
                             <!-- <span v-if="user.userNameNeedTranslate != '1'">{{ scope.row.projectAuditorName }}</span>
                             <span v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName'
                             <span v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName'
@@ -60,12 +60,12 @@
                             </span>
                             </span>
                         </template>
                         </template>
                     </el-table-column>
                     </el-table-column>
-                    <el-table-column prop="state" label="状态" width="140" fixed="right">
+                    <el-table-column prop="state" :label="$t('state.states')" width="140" fixed="right">
                         <template slot-scope="scope">
                         <template slot-scope="scope">
                             <div class="controls">
                             <div class="controls">
-                                <el-tag v-if="scope.row.state == 0" type="warning">待审</el-tag>
-                                <el-tag v-if="scope.row.state == 1" type="success">通过</el-tag>
-                                <el-tag v-if="scope.row.state == 2" type="danger">拒绝</el-tag>
+                                <el-tag v-if="scope.row.state == 0" type="warning">{{ $t('daiShen') }}</el-tag>
+                                <el-tag v-if="scope.row.state == 1" type="success">{{ $t('btn.through') }}</el-tag>
+                                <el-tag v-if="scope.row.state == 2" type="danger">{{ $t('juJue') }}</el-tag>
                                 <span v-if="scope.row.state != 1 && scope.row.canFill">
                                 <span v-if="scope.row.state != 1 && scope.row.canFill">
                                     <el-link type="primary" :underline="false" class="el-icon-circle-plus-outline"
                                     <el-link type="primary" :underline="false" class="el-icon-circle-plus-outline"
                                         @click="insertRow(scope.$index)"></el-link>
                                         @click="insertRow(scope.$index)"></el-link>
@@ -79,14 +79,14 @@
             </div>
             </div>
             <div>
             <div>
                 <el-input type="textarea" :autosize="{ minRows: 4, maxRows: 6}" maxlength="1000" show-word-limit
                 <el-input type="textarea" :autosize="{ minRows: 4, maxRows: 6}" maxlength="1000" show-word-limit
-                    placeholder="请输入周总结"
+                    :placeholder="$t('qingShuRuZhouZongJie')"
                     v-model="summaryContent">
                     v-model="summaryContent">
                     </el-input>
                     </el-input>
             </div>
             </div>
             <div class="weeklyCustomization_btn">
             <div class="weeklyCustomization_btn">
-                <el-button @click="handleClose()">取 消</el-button>
-                <el-button @click="submitWeekData(1)">暂 存</el-button>
-                <el-button type="primary" @click="submitWeekData(0)">提 交</el-button>
+                <el-button @click="handleClose()">{{ $t('quXiao') }}</el-button>
+                <el-button @click="submitWeekData(1)">{{ $t('zanCun') }}</el-button>
+                <el-button type="primary" @click="submitWeekData(0)">{{ $t('tiJiao') }}</el-button>
             </div>
             </div>
         </div>
         </div>
     </div>
     </div>
@@ -133,7 +133,7 @@ export default {
             const { allday } = this.user.timeType // 系统设置的每日工作时间
             const { allday } = this.user.timeType // 系统设置的每日工作时间
             if (strArr.length > 0) {
             if (strArr.length > 0) {
                 this.$message({
                 this.$message({
-                    message: `【${strArr.join('、')}】填写工时合计非 ${allday} 小时`,
+                    message: `【${strArr.join('、')}】`+this.$t('tianXieGongShiHeJiFei')+` ${allday}`+ this.$t('time.hour'),
                     type: "error"
                     type: "error"
                 });
                 });
                 return
                 return
@@ -188,14 +188,14 @@ export default {
                     this.submitLoading = false
                     this.submitLoading = false
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         this.$message({
                         this.$message({
-                            message: `${draft ? '暂存成功' : '提交成功'}`,
+                            message: `${draft ? this.$t('message.Temporarysuccess') : this.$t('message.submittedSuccessfully')}`,
                             type: "success"
                             type: "success"
                         });
                         });
                         this.$emit('weekClose')
                         this.$emit('weekClose')
                         this.$emit('weekSubmit')
                         this.$emit('weekSubmit')
                     } else {
                     } else {
                         this.$message({
                         this.$message({
-                            message: `${draft ? '暂存失败:' : '提交失败:'}` + res.msg,
+                            message: `${draft ? this.$t('zanCunShiBai') : this.$t('tiJiaoShiBai')}` + res.msg,
                             type: "error"
                             type: "error"
                         });
                         });
                     }
                     }
@@ -247,7 +247,7 @@ export default {
             let newArr = groupList.filter(item => item.id == groupId)
             let newArr = groupList.filter(item => item.id == groupId)
             if (!newArr[0].inchargerId) {
             if (!newArr[0].inchargerId) {
                 this.$message({
                 this.$message({
-                    message: `【${newArr[0].name}】分组未设置审批人,请联系该项目管理人员`,
+                    message: `【${newArr[0].name}】`+this.$t('fenZuWeiSheZhiShenPiRenQingLianXiGaiXiangMuGuanLiRenYuan'),
                     type: "error"
                     type: "error"
                 });
                 });
                 return
                 return
@@ -307,7 +307,7 @@ export default {
             let { data } = await this.getData('/task-group/listProjectGroupAndAuditor', { projectId, isSubstitude: isSubstitude ? 1 : 0 })
             let { data } = await this.getData('/task-group/listProjectGroupAndAuditor', { projectId, isSubstitude: isSubstitude ? 1 : 0 })
             if (data.length == 0) {
             if (data.length == 0) {
                 this.$message({
                 this.$message({
-                    message: '分组未设置,请联系该项目管理人员',
+                    message: this.$t('fenZuWeiSheZhiQingLianXiGaiXiangMuGuanLiRenYuan'),
                     type: "error"
                     type: "error"
                 });
                 });
             } else if (data.length == 1) {
             } else if (data.length == 1) {
@@ -316,7 +316,7 @@ export default {
                 this.$set(this.weekTableData[index], 'projectAuditorName', data[0].inchargerName)
                 this.$set(this.weekTableData[index], 'projectAuditorName', data[0].inchargerName)
                 if (!data[0].inchargerId) {
                 if (!data[0].inchargerId) {
                     this.$message({
                     this.$message({
-                        message: `【${data[0].name}】分组未设置审批人,请联系该项目管理人员`,
+                        message: `【${data[0].name}】`+this.$t('fenZuWeiSheZhiShenPiRenQingLianXiGaiXiangMuGuanLiRenYuan'),
                         type: "error"
                         type: "error"
                     });
                     });
                 }
                 }

+ 5 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/workflow/report.vue

@@ -282,7 +282,7 @@
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         this.$message({
                         this.$message({
                             type: 'success',
                             type: 'success',
-                            message: '操作成功!'
+                            message: this.$t('caoZuoChengGong-0')
                         });
                         });
 
 
                         this.isAdd = false;
                         this.isAdd = false;
@@ -317,10 +317,10 @@
                             this.dialogVisible = true;
                             this.dialogVisible = true;
                             this.curDeptId = item.auditDeptId;
                             this.curDeptId = item.auditDeptId;
                         } else {
                         } else {
-                            if(res.msg.indexOf('当前部门存在待审核报告') != '-1') {
-                                this.$confirm('当前部门存在待审核报告, 是否全部转为通过?', '提示', {
-                                    confirmButtonText: '确定',
-                                    cancelButtonText: '取消',
+                            if(res.msg.indexOf(this.$t('dangQianBuMenCunZaiDaiShenHeBaoGao')) != '-1') {
+                                this.$confirm(this.$t('dangQianBuMenCunZaiDaiShenHeBaoGaoShiFouQuanBuZhuanWeiTongGuo'), this.$t('other.prompts'), {
+                                    confirmButtonText: this.$t('btn.determine'),
+                                    cancelButtonText: this.$t('btn.cancel'),
                                     type: 'warning'
                                     type: 'warning'
                                 }).then(() => {
                                 }).then(() => {
                                     this.judgmentDepartment(item.auditDeptId, item, index)
                                     this.judgmentDepartment(item.auditDeptId, item, index)

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

@@ -992,7 +992,7 @@
             },
             },
             // 获取项目
             // 获取项目
             getPeoject() {
             getPeoject() {
-                this.$axios.post("/project/getProjectList", {})
+                this.$axios.post("/project/getProjectList", {forReport:1})
                 .then(res => {
                 .then(res => {
                     if(res.code == "ok") {
                     if(res.code == "ok") {
                         for(var i in res.data) {
                         for(var i in res.data) {
@@ -1390,7 +1390,7 @@
                     forbidClick: true,
                     forbidClick: true,
                     duration: 0
                     duration: 0
                 });
                 });
-                this.$axios.post("/project/getProjectList", {})
+                this.$axios.post("/project/getProjectList", {forReport:1})
                 .then(res => {
                 .then(res => {
                     if(res.code == "ok") {
                     if(res.code == "ok") {
                         this.$toast.clear();
                         this.$toast.clear();