Browse Source

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

cs 2 năm trước cách đây
mục cha
commit
5e3af71534
30 tập tin đã thay đổi với 331 bổ sung55 xóa
  1. 23 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/AuthRedirectController.java
  2. 16 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectRequirementController.java
  3. 17 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  4. 5 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java
  5. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WxCorpInfoController.java
  6. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectRequirementMapper.java
  7. 3 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java
  8. 16 7
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java
  9. 8 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  10. 10 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java
  11. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  12. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  13. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java
  14. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/ExcelUtil.java
  15. 41 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/WorkDayCalculateUtils.java
  16. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/DepartmentMapper.xml
  17. 9 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectRequirementMapper.xml
  18. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserCorpwxTimeMapper.xml
  19. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/components/select.vue
  20. 46 2
      fhKeeper/formulahousekeeper/timesheet/src/views/Home.vue
  21. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/Register.vue
  22. 13 5
      fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue
  23. 35 5
      fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue
  24. 12 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/CostBaseline.vue
  25. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/finance.vue
  26. 8 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue
  27. 4 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  28. 25 2
      fhKeeper/formulahousekeeper/timesheet/src/views/project/project_gantt.vue
  29. 3 0
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  30. 24 3
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue

+ 23 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/AuthRedirectController.java

@@ -2,14 +2,12 @@ package com.management.platform.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.management.platform.entity.Company;
-import com.management.platform.entity.Project;
-import com.management.platform.entity.SysConfig;
-import com.management.platform.entity.User;
+import com.management.platform.entity.*;
 import com.management.platform.entity.vo.UserVO;
 import com.management.platform.mapper.CompanyMapper;
 import com.management.platform.mapper.SysConfigMapper;
 import com.management.platform.mapper.UserMapper;
+import com.management.platform.mapper.WxCorpInfoMapper;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
 import com.management.platform.util.UserAgentUtils;
@@ -54,6 +52,8 @@ public class AuthRedirectController {
     RestTemplate restTemplate;
     @Resource
     UserMapper userMapper;
+    @Resource
+    WxCorpInfoMapper wxCorpInfoMapper;
 
     @RequestMapping("/corpWXAuth")
     public ModelAndView auth(String code, String state) {
@@ -70,6 +70,8 @@ public class AuthRedirectController {
         System.out.println("企微身份:"+obj.toString());
         String wxUserId = obj.getString("UserId");
         String openUserId = obj.getString("open_userid");
+        String corpId = obj.getString("CorpId");
+
         System.out.println("wxUserId="+wxUserId+", openUserId="+openUserId);
         List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("corpwx_userid", openUserId));
         if (userList.size() > 0) {
@@ -83,6 +85,23 @@ public class AuthRedirectController {
                 //reqParam.put("errorMsg", "您的账号已停用,无法登录");
                 reqParam.put("errorMsg", MessageUtils.message("user.inactive"));
             }
+        } else {
+            //使用UserId比对,之前有的老用户存的是UserId
+            WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
+            if (wxCorpInfo == null) {
+                reqParam.put("errorMsg", MessageUtils.message("user.accountNoExist"));
+            } else {
+                User curUser = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", wxCorpInfo.getCompanyId()).eq("corpwx_userid", wxUserId));
+                if (curUser == null) {
+                    reqParam.put("errorMsg", MessageUtils.message("user.accountNoExist"));
+                } else if (curUser.getIsActive() == 1) {
+                    reqParam.put("userId", curUser.getId());
+                } else {
+                    //提示账号已停用
+                    //reqParam.put("errorMsg", "您的账号已停用,无法登录");
+                    reqParam.put("errorMsg", MessageUtils.message("user.inactive"));
+                }
+            }
         }
         reqParam.put("hasTriedAutoLogin", 1);
         String redirecUrl = null;

+ 16 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectRequirementController.java

@@ -79,6 +79,7 @@ public class ProjectRequirementController {
         SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
         HttpRespMsg msg = new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("TOKEN")).getCompanyId();
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
         int startIndex = (pageIndex-1)*pageSize;
         LocalDate now = LocalDate.now();
         now = now.minusDays(7);
@@ -95,7 +96,7 @@ public class ProjectRequirementController {
             taskGroupUserIds=groupParticipatorList.stream().map(GroupParticipator::getUserId).collect(Collectors.toList());
             taskGroupUserIds.add("-1");
         }
-        List<ProjectRequirement> projectRequirements = projectRequirementMapper.customSelect(companyId, startDate, projectId, projectIds.size()==0?null:projectIds, startIndex, pageSize,reStartDate,reEndDate,taskGroupUserIds.size()==0?null:taskGroupUserIds);
+        List<ProjectRequirement> projectRequirements = projectRequirementMapper.customSelect(wxCorpInfo.getSaasSyncContact(),companyId, startDate, projectId, projectIds.size()==0?null:projectIds, startIndex, pageSize,reStartDate,reEndDate,taskGroupUserIds.size()==0?null:taskGroupUserIds);
         List<Integer> ids = projectRequirements.stream().map(pr -> pr.getProjectId()).collect(Collectors.toList());
         List<Task> milepostList=taskMapper.selectMilepost(ids.size()==0?null:ids);
         projectRequirements.forEach(pr->{
@@ -133,7 +134,7 @@ public class ProjectRequirementController {
             taskGroupUserIds=groupParticipatorList.stream().map(GroupParticipator::getUserId).collect(Collectors.toList());
             taskGroupUserIds.add("-1");
         }
-        List<ProjectRequirement> projectRequirementList = projectRequirementMapper.customSelect(companyId,startDate, projectId,  projectIds.size()==0?null:projectIds, null, null,null,null,taskGroupUserIds.size()==0?null:taskGroupUserIds);
+        List<ProjectRequirement> projectRequirementList = projectRequirementMapper.customSelect(wxCorpInfo.getSaasSyncContact(),companyId,startDate, projectId,  projectIds.size()==0?null:projectIds, null, null,null,null,taskGroupUserIds.size()==0?null:taskGroupUserIds);
         List<Integer> collect = projectRequirementList.stream().map(pr -> pr.getProjectId()).collect(Collectors.toList());
         List<Task> milepostList=taskMapper.selectMilepost(collect);
         projectRequirementList.forEach(pr->{
@@ -150,9 +151,21 @@ public class ProjectRequirementController {
         dataList.add(nameList);
         projectRequirementList.forEach(pr->{
             List<String> resultData=new ArrayList<>();
+            List<String> corpwxUseridList=new ArrayList<>();
+            if(pr.getActiveUsers()!=null){
+                String[] split = pr.getActiveUsers().split(",");
+                Arrays.asList(split).forEach(st->{
+                    corpwxUseridList.add("$userName="+st+"$");
+                });
+            }
+            String userString = corpwxUseridList.toString();
             resultData.add(pr.getProjectCode());
             resultData.add(pr.getProjectName());
-            resultData.add(pr.getActiveUsers());
+            if(wxCorpInfo.getSaasSyncContact()==1){
+                resultData.add(userString.replaceAll("\\[","").replaceAll("]",""));
+            }else {
+                resultData.add(pr.getActiveUsers());
+            }
             resultData.add(pr.getMembReq());
             resultData.add(pr.getTaskReq());
             resultData.add(pr.getContractReq());

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

@@ -1270,6 +1270,23 @@ public class ReportController {
         return reportService.exportUserDailyWorkTime(request, startDate, endDate);
     }
 
+    @RequestMapping("/isWorkDay")
+    public HttpRespMsg isWorkDay(String date) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String token = request.getHeader("TOKEN");
+        if (token == null) {
+            //
+            //msg.setError("请求非法");
+            msg.setError(MessageUtils.message("request.illegal"));
+            System.err.println("==有非法请求===" + date);
+        } else {
+            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            LocalDate lDate = LocalDate.parse(date, dtf);
+            msg.data = WorkDayCalculateUtils.isWorkDay(lDate);
+        }
+        return msg;
+    }
+
     /**
      * 计算给定时间段内的工作日数量
      * @param startDate 开始日期

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

@@ -274,7 +274,11 @@ public class UserCorpwxTimeController {
             String createDate = (String)dataItem.get("createDate");
             dataList.add(createDate);
             dataList.add((String)dataItem.get("weekDayTxt"));
-            dataList.add((String)dataItem.get("username"));
+            if(wxCorpInfo.getSaasSyncContact()==1){
+                dataList.add("$userName="+(String)dataItem.get("corpwxUserid")+"$");
+            }else{
+                dataList.add((String)dataItem.get("username"));
+            }
             dataList.add((String)dataItem.get("startTime"));
             dataList.add((String)dataItem.get("endTime"));
 //            dataList.add(""+(Double)dataItem.get("cardTime"));

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

@@ -68,7 +68,7 @@ public class WxCorpInfoController {
         jsonObj.put("value", "测试提醒消息");
         dataJson.add(jsonObj);
         json.put("template_id","tty9TkCAAAYoevY-40ciWD5lDncDfR5w");
-        json.put("url", "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://mobworktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
+        json.put("url", "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
         json.put("content_item",dataJson);
         wxCorpInfoService.sendWXCorpTemplateMsg(corpInfo, corpUid, json);
         return new HttpRespMsg();

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectRequirementMapper.java

@@ -15,7 +15,7 @@ import java.util.List;
  */
 public interface ProjectRequirementMapper extends BaseMapper<ProjectRequirement> {
 
-    public List<ProjectRequirement> customSelect(Integer companyId, String startDate, Integer projectId, List<Integer> refProjectIdList, Integer startIndex, Integer pageSize,String reStartDate,String reEndDate,List<String> refTaskGroupUserIdList);
+    public List<ProjectRequirement> customSelect(Integer key,Integer companyId, String startDate, Integer projectId, List<Integer> refProjectIdList, Integer startIndex, Integer pageSize,String reStartDate,String reEndDate,List<String> refTaskGroupUserIdList);
 
     long selectCountByDate(Integer companyId, String startDate, Integer projectId, List<Integer> refProjectIdList, Integer startIndex, Integer pageSize, String reStartDate, String reEndDate,List<String> refTaskGroupUserIdList);
 }

+ 3 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java

@@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Update;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -19,7 +20,7 @@ import java.util.List;
  * @since 2021-04-19
  */
 public interface TaskMapper extends BaseMapper<Task> {
-    List getExecutorPanel(Integer projectId);
+    List<Map<String,Object>> getExecutorPanel(Integer projectId);
     List getStagesPanel(Integer projectId);
     List getTopCostTask(Integer projectId);
 
@@ -44,7 +45,7 @@ public interface TaskMapper extends BaseMapper<Task> {
 
     List<Task> selectMilepost(@Param("ids") List<Integer> ids);
 
-    List getExecutorPlanHour(Integer projectId);
+    List<Map<String,Object>> getExecutorPlanHour(Integer projectId);
     @Update("update task set start_date =null where id=#{id}")
     void updateStartDate(Integer id);
     @Update("update task set end_date =null where id=#{id}")

+ 16 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java

@@ -597,6 +597,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         try {
             User targetUser = userMapper.selectById(request.getHeader("Token"));
             Integer companyId =targetUser.getCompanyId();
+            WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
             //当前用户管理部门
             List<Integer> deptIds=null;
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
@@ -652,7 +653,11 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                     dataMap.put("time", time);
                     tempList.add(dataMap);
                 } else {
-                    names.add((String)map.get("user"));
+                    if(wxCorpInfo.getSaasSyncContact()==1){
+                        names.add("$userName="+(String)map.get("corpwxUseid")+"$");
+                    }else {
+                        names.add((String)map.get("user"));
+                    }
                     //这个名字尚未装进数组中
                     List<Map<String, Object>> tempList = new ArrayList<>();
                     if (map.containsKey("project")) {
@@ -744,7 +749,6 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             //生成excel文件导出
             //String fileName = "人员成本统计_"+System.currentTimeMillis();
             String fileName = MessageUtils.message("fileName.costStatistics",System.currentTimeMillis());
-            WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
             String resp = ExcelUtil.exportGeneralExcelByTitleAndList(wxCorpInfo,fileName , dataList, path);
 
             httpRespMsg.data = resp;
@@ -969,7 +973,11 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             for (Map<String, Object> membMap : itemList) {
                 List<String> membRowData = new ArrayList<String>();
                 membRowData.add(String.valueOf(seq));
-                membRowData.add((String)membMap.get("name"));
+                if(wxCorpInfo.getSaasSyncContact()==1){
+                    membRowData.add("$userName="+(String)membMap.get("name")+"$");
+                }else {
+                    membRowData.add((String)membMap.get("name"));
+                }
                 membRowData.add(((Double)membMap.get("cost")).toString());
                 allList.add(membRowData);
                 totalCostTime += (Double)membMap.get("cost");
@@ -1014,7 +1022,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
-
+            WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
             List<Integer> deptIds = null;
             List<Department> allDeptList = null;
             //首先校验有无权限
@@ -1049,9 +1057,9 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             Double totalCost = 0.0;
             for (Map<String, Object> map : list) {
 
-                if (tempMap.containsKey(map.get("user"))) {
+                if (tempMap.containsKey(wxCorpInfo.getSaasSyncContact()==1?map.get("corpwxUserid"):map.get("user"))) {
                     //这个名字已经装进数组中了
-                    List<Map<String, Object>> tempList = tempMap.get(map.get("user"));
+                    List<Map<String, Object>> tempList = tempMap.get(wxCorpInfo.getSaasSyncContact()==1?map.get("corpwxUserid"):map.get("user"));
                     Map<String, Object> dataMap = new HashMap<>();
                     dataMap.put("project", map.get("project"));
                     Double cost = (Double) map.getOrDefault("cost", 0);
@@ -1062,6 +1070,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                     User user = new User();
                     user.setId((String)map.get(("id")));
                     user.setName((String)map.get("user"));
+                    user.setCorpwxUserid((String)map.get("corpwxUserid"));
                     userList.add(user);
                     //这个名字尚未装进数组中
                     List<Map<String, Object>> tempList = new ArrayList<>();
@@ -1073,7 +1082,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                         dataMap.put("cost", cost);
                         tempList.add(dataMap);
                     }
-                    tempMap.put((String) map.get("user"), tempList);
+                    tempMap.put((String) (wxCorpInfo.getSaasSyncContact()==1?map.get("corpwxUserid"):map.get("user")), tempList);
                 }
             }
             Map<String, Object> finalMap = new HashMap<>();

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

@@ -652,6 +652,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             if (company.getPackageProject() == 1) {
                 timeBasecostList = projectBasecostSettingMapper.selectList(new QueryWrapper<ProjectBasecostSetting>().eq("company_id", companyId).eq("alarm_type", 1));
             }
+            //当天是否是工作日
+            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            LocalDate lDate = LocalDate.parse(date, dtf);
+            boolean isWorkDay = companyId == 817 ? WorkDayCalculateUtils.isWorkDayExceptSaturday(lDate) : WorkDayCalculateUtils.isWorkDay(lDate);
+            resultMap.put("isWorkDay", isWorkDay);
 
             resultMap.put("timeBasecostList",timeBasecostList);
 
@@ -1547,7 +1552,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                     item2.put("key","日期");
                                     item2.put("value",report.getCreateDate());
                                     dataJson.add(item2);
-                                    json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://mobworktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
+                                    json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
                                     json.put("content_item",dataJson);
                                     wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfoList.get(0),u.getCorpwxUserid(),json);
                                 }
@@ -1592,7 +1597,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                     item3.put("value",report.getCreateDate());
                                     dataJson.add(item3);
                                     json.put("template_id","tty9TkCAAAwOgmzwS2uFogWgOmPDdIRQ");
-                                    json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://mobworktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
+                                    json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
                                     json.put("content_item",dataJson);
                                     wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfoList.get(0),u.getCorpwxUserid(),json);
                                 }
@@ -2489,7 +2494,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                     item2.put("key","日期");
                                     item2.put("value",report.getCreateDate());
                                     dataJson.add(item2);
-                                    json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://mobworktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
+                                    json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
                                     json.put("content_item",dataJson);
                                     wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfoList.get(0),u.getCorpwxUserid(),json);
                                 }

+ 10 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java

@@ -71,7 +71,11 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
     @Override
     public HttpRespMsg getExecutorPanel(Integer projectId) {
         HttpRespMsg msg = new HttpRespMsg();
-        msg.data = taskMapper.getExecutorPanel(projectId);
+        List<Map<String, Object>> list = taskMapper.getExecutorPanel(projectId);
+        list.forEach(l->{
+            l.put("type","userName");
+        });
+        msg.data=list;
         return msg;
     }
 
@@ -619,7 +623,11 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
     @Override
     public HttpRespMsg getExecutorPlanHour(Integer projectId) {
         HttpRespMsg httpRespMsg=new HttpRespMsg();
-        httpRespMsg.data=taskMapper.getExecutorPlanHour(projectId);
+        List<Map<String, Object>> list = taskMapper.getExecutorPlanHour(projectId);
+        list.forEach(l->{
+            l.put("type","userName");
+        });
+        httpRespMsg.data=list;
         return httpRespMsg;
     }
 

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -1707,7 +1707,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                             jsonObj.put("value", "您"+(StringUtils.isEmpty(date)?"":date)+"的工时报告还未填写");
                             dataJson.add(jsonObj);
                             json.put("template_id","tty9TkCAAAYoevY-40ciWD5lDncDfR5w");
-                            json.put("url", "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://mobworktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
+                            json.put("url", "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
                             json.put("content_item",dataJson);
                             if (cpList.size() > 0) {
                                 wxCorpInfoService.sendWXCorpTemplateMsg(cpList.get(0), corpUid, json);

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -209,6 +209,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
             JSONObject reqParam = new JSONObject();
             reqParam.put("touser", corpUserid);
             reqParam.put("msgtype", "text");
+            reqParam.put("enable_id_trans", 1);
             reqParam.put("agentid", corpInfo.getAgentid());
             JSONObject contentJson = new JSONObject();
             contentJson.put("content", msg);
@@ -220,7 +221,6 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
             if (responseEntity.getStatusCode() == HttpStatus.OK) {
                 String resp = responseEntity.getBody();
                 log.info("发送企业微信消息返回结果==" + resp);
-                System.out.println("发送企业微信消息返回结果==" + resp);
                 JSONObject json = JSONObject.parseObject(resp);
                 if (json.getIntValue("errcode") == 0) {
                     //发送成功

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

@@ -367,7 +367,7 @@ public class TimingTask {
                     jsonObj.put("value",StringUtils.isEmpty(map.get("num"))?"":map.get("num"));
                     dataJson.add(jsonObj);
                     json.put("template_id","tty9TkCAAAuPvPjabDdQXGocnG0K24EQ");
-                    json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://mobworktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
+                    json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
                     json.put("content_item",dataJson);
                     wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfo, corpwxUserid, json);
                     }
@@ -582,7 +582,7 @@ public class TimingTask {
                         jsonObj.put("value", StringUtils.isEmpty(t.getAlertMsg())?"":t.getAlertMsg());
                         dataJson.add(jsonObj);
                         json.put("template_id","tty9TkCAAAYoevY-40ciWD5lDncDfR5w");
-                        json.put("url", "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://mobworktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
+                        json.put("url", "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
                         json.put("content_item",dataJson);
                         if (cpList.size() > 0) {
                             wxCorpInfoService.sendWXCorpTemplateMsg(cpList.get(0), corpUid, json);

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/ExcelUtil.java

@@ -169,6 +169,7 @@ public class ExcelUtil {
             os.close();
             if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
                 String mediaId =ExcelUtil.wxCorpInfoService.getTranslationMediaId(fileName);
+                System.out.println(fileName);
                 String jobId = ExcelUtil.wxCorpInfoService.syncTranslation(wxCorpInfo.getCorpid(),mediaId,fileName, null);
             /*if(jobId!=null&&!jobId.equals("")){
                 File file=new File(path + fileUrlSuffix);

+ 41 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/WorkDayCalculateUtils.java

@@ -167,6 +167,47 @@ public class WorkDayCalculateUtils {
         }
         return false;
     }
+    //一周6天工作制,周六也算工作日
+    public static boolean isWorkDayExceptSaturday(LocalDate date) {
+        int year = date.getYear();
+        try {
+            String dateStr = dateTimeFormatter.format(date);
+            Date d = simpleDateFormat.parse(dateStr);
+            boolean isWeekend = date.getDayOfWeek() == DayOfWeek.SUNDAY;
+            if (isWeekend) {
+                //判断周末是否是特殊工作日
+                HashMap<String, String[]> map = YEAR_DEFINE.get(year + "");
+                if (map == null) {
+                    //特殊日期年份尚未录入,周末不算是工作日
+                    return false;
+                }
+                String[] list = map.get(KEY_SPECIAL_WORK_DAYS);
+                if (isInArray(dateStr, list)) {
+                    //存在特殊工作日
+                    return true;
+                } else {
+                    return false;
+                }
+            } else {
+                //判断常规周一到周六,是否是特殊节假日
+                HashMap<String, String[]> map = YEAR_DEFINE.get(year+"");
+                if (map == null) {
+                    //特殊日期年份尚未录入,工作日正常上班
+                    return true;
+                }
+                String[] list = map.get(KEY_SPECIAL_REST_DAYS);
+                if (isInArray(dateStr, list)) {
+                    return false;
+                } else {
+                    return true;
+                }
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+            System.out.println(e.getMessage());
+        }
+        return true;
+    }
 
     public static boolean isWorkDay(LocalDate date) {
         int year = date.getYear();

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

@@ -37,7 +37,7 @@
 
     <!--根据人员获取成本-->
     <select id="getCostByUser" resultType="java.util.Map">
-        SELECT a.id as id, a.name AS user, a.job_number as jobNumber, c.project_name AS project, SUM(b.working_time) AS time, SUM(b.cost) AS
+        SELECT a.id as id, a.name AS user,a.corpwx_userid as corpwxUserid, a.job_number as jobNumber, c.project_name AS project, SUM(b.working_time) AS time, SUM(b.cost) AS
         money
         FROM user AS a
         LEFT JOIN report AS b ON a.id = b.creator_id
@@ -66,7 +66,7 @@
 
     <!-- 根据人员获取自定义的日报数值 -->
     <select id="getCustomDataByUser" resultType="java.util.Map">
-        SELECT a.id as id, a.name AS user, 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
         FROM user AS a
         LEFT JOIN report AS b ON a.id = b.creator_id
         LEFT JOIN project AS c ON b.project_id = c.id

+ 9 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectRequirementMapper.xml

@@ -31,7 +31,15 @@
 
     <select id="customSelect" resultMap="RichMap">
         SELECT project_requirement.id, project.id AS project_id, project.`project_name`, project.`project_code`, project_requirement.`memb_req`, project_requirement.`task_req`,project_requirement.contract_req,project_requirement.department_speed,project_requirement.start_date,project_requirement.end_date,
-        (SELECT GROUP_CONCAT(DISTINCT user.`name`) FROM report LEFT JOIN `user` ON user.`id` = report.`creator_id` WHERE report.company_id=#{companyId} AND report.create_time >= #{startDate} AND report.`project_id` = project.id
+        (SELECT GROUP_CONCAT(
+        <choose>
+            <when test="key==1">
+                DISTINCT user.`corpwx_userid`
+            </when>
+            <otherwise>
+                DISTINCT user.`name`
+            </otherwise>
+        </choose>) FROM report LEFT JOIN `user` ON user.`id` = report.`creator_id` WHERE report.company_id=#{companyId} AND report.create_time >= #{startDate} AND report.`project_id` = project.id
         <if test="refTaskGroupUserIdList!=null">
         and user.`id` in
         <foreach collection="refTaskGroupUserIdList" open="(" close=")" separator="," item="item">

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserCorpwxTimeMapper.xml

@@ -27,7 +27,7 @@
 
 
     <select id="getUserDataList" resultType="java.util.HashMap" >
-        SELECT user.id as userId, DATE_FORMAT(a.create_date, '%Y/%m/%d') as createDate,a.start_time as startTime, a.end_time as endTime, a.work_hours as workHours, user.name as username,a.week_day as weekDay,
+        SELECT user.id as userId, DATE_FORMAT(a.create_date, '%Y/%m/%d') as createDate,a.start_time as startTime, a.end_time as endTime, a.work_hours as workHours, user.name as username,user.corpwx_userid as corpwxUserid,a.week_day as weekDay,
         week_day_txt as weekDayTxt,card_time as cardTime, outdoor_time as outdoorTime, ask_leave_time as askLeaveTime FROM user_corpwx_time a LEFT JOIN user ON user.`corpwx_userid` = a.corpwx_userid
         WHERE a.create_date BETWEEN #{startDate} AND #{endDate}
         AND a.company_id = #{companyId}

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/components/select.vue

@@ -19,7 +19,7 @@
                     </span>
                     <span v-if="tile">
                         <span class="all" style="margin-right: 6px" v-for="(items, indexs) in multiSelectList" :key="indexs">
-                            <ww-open-data type='userName' :openid='multiSelectList[0].name'></ww-open-data>
+                            <ww-open-data type='userName' :openid='items.name'></ww-open-data>
                             <!-- {{items.name}} -->
                             <i class="el-icon-error" @click.stop="deleteMultiSelectList(indexs)" v-if="!disabled"></i>
                         </span>

+ 46 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/Home.vue

@@ -55,7 +55,22 @@
                         <el-table-column property="type" :label="$t('other.messageContent')" align="left">
                             <template slot-scope="scope">
                                 <el-link type="primary" :underline="false" @click="locationHerf(scope.row.id,scope.row.content, scope.row.type)">
-                                    <span style="font-size:13px;">{{scope.row.msg==null?msgTypeTxt[scope.row.type]:scope.row.msg}}</span>
+                                    <span style="font-size:13px;">
+                                        <span v-if="scope.row.msg == null">
+                                            {{msgTypeTxt[scope.row.type]}}
+                                        </span>
+                                        <span v-else>
+                                            <span v-if="user.userNameNeedTranslate != 1">
+                                                {{scope.row.msg}}
+                                            </span>
+                                            <span v-if="user.userNameNeedTranslate == 1">
+                                                {{scope.row.omg.textOne}}
+                                                <ww-open-data type='userName' :openid='scope.row.omg.textTwo'></ww-open-data>
+                                                {{scope.row.omg.textThree}}
+                                            </span>
+                                        </span>
+                                        <!-- {{scope.row.msg==null?msgTypeTxt[scope.row.type]:scope.row.msg}} -->
+                                    </span>
                                 </el-link>
                             </template> 
                         </el-table-column>
@@ -404,6 +419,36 @@
                 res => {
                     if (res.code == "ok") {
                         var list = res.data;
+                        if(this.user.userNameNeedTranslate == 1) {
+                            let msgArr = res.data
+                            for(var i in msgArr) {
+                                if(msgArr[i].msg) {
+                                    let caozuo = JSON.parse(JSON.stringify(msgArr[i].msg))
+                                    if(caozuo.indexOf('$userName=') != '-1') {
+                                        let textOne = caozuo.split('$userName=')[0]
+                                        let textTwo = caozuo.split('$userName=')[1].split('$')[0]
+                                        let textThree = caozuo.split('$userName=')[1].split('$')[1]
+                                        msgArr[i].omg = {
+                                            textOne: textOne,
+                                            textTwo: textTwo,
+                                            textThree: textThree
+                                        }
+                                    } else {
+                                        msgArr[i].omg = {
+                                            textOne: msgArr[i].msg,
+                                            textTwo: '',
+                                            textThree: ''
+                                        }
+                                    }
+                                } else {
+                                    msgArr[i].omg = {
+                                        textOne: '',
+                                        textTwo: '',
+                                        textThree: ''
+                                    }
+                                }
+                            }
+                        }
                         this.popoverData = res.data;
                         var num = 0;
                         for(var i in list) {
@@ -426,7 +471,6 @@
                     });
                 });
             },
-
             //点击消息的跳转
             locationHerf(id, date, type) {
                 this.http.post( this.port.manage.check, { id: id },

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

@@ -49,7 +49,7 @@
     export default {
         data() {
             return {
-                typeList:[{id:0,name:'工时统计表简易版'},{id:1,name:'工时统计基础版'},
+                typeList:[{id:1,name:'工时统计基础版'},
                 {id:2,name:'项目管理专业版'},{id:3,name:'企业办公旗舰版'},{id:4,name:'工程管理专业版'}],
                 logining: false,
                 showTimer: false,

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

@@ -184,11 +184,14 @@
                 </el-table-column>
                 <el-table-column prop="executor_name" :label="$t('zhi-hang-ren')"  width="200">
                   <template slot-scope="scope" >
-                    <span v-if="user.userNameNeedTranslate == '1'">
-                      <ww-open-data type='userName' :openid='scope.row.executor_name'></ww-open-data>
-                    </span>
-                    <span v-if="user.userNameNeedTranslate != '1'">
-                      {{scope.row.executor_name}}
+                    <span v-for="(items, indexs) in scope.row.executor_name" :key="indexs">
+                      <span v-if="user.userNameNeedTranslate == '1'">
+                        <ww-open-data type='userName' :openid='items'></ww-open-data>
+                      </span>
+                      <span v-if="user.userNameNeedTranslate != '1'">
+                        {{items}}
+                      </span>
+                      <span v-if="indexs < scope.row.executor_name.length - 1">,</span>
                     </span>
                   </template>
                 </el-table-column>
@@ -1567,6 +1570,11 @@ export default {
                 } else {
                   res.data.records[i].customName = res.data.records[i].project_name
                 }
+              }
+              for(var i in res.data.records) {
+                if(res.data.records[i].executor_name) {
+                  res.data.records[i].executor_name = res.data.records[i].executor_name.split(',')
+                }
               }
                 this.list1 = res.data.records;
                 this.listArr1 = []

+ 35 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue

@@ -63,11 +63,14 @@
             <!-- 报销人 -->
             <el-form-item :label="$t('peopleconcerned')" prop="ownerId">
               <!--普通员工只能自己填报自己的 -->
-              <el-select v-model="addForm.ownerId" :placeholder="$t('pleaseselecttheapplicant')" style="width: 150px" :disabled="!permissions.costAudit" filterable="true">
+              <el-select v-if="user.userNameNeedTranslate != '1'" v-model="addForm.ownerId" :placeholder="$t('pleaseselecttheapplicant')" style="width: 150px" :disabled="!permissions.costAudit" filterable="true">
                 <span v-for="(item, index) in users" :key="index">
                   <el-option :label="item.name" :value="item.id"></el-option>
                 </span> 
               </el-select>
+
+              <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :widthStr="'150'" :distinction="'1'" :subject="users" :disabled="!permissions.costAudit" :subjectId="addForm.ownerId" ref="selectCat" @selectCal="selectCal"></selectCat>
+
             </el-form-item>
             <!-- 填报日期 -->
             <el-form-item :label="$t('fillinthedate')" style="position: relative;top: 38px;" prop="createDate">
@@ -198,11 +201,13 @@
           <el-form label-width="70px" inline >
             <!-- 报销人 -->
             <el-form-item :label="$t('peopleconcerned')">
-              <el-select v-model="ownerId" size="small" clearable :placeholder="$t('selecttheapplicant')" style="width: 120px" :disabled="!permissions.costAudit" filterable="true">
+              <el-select v-if="user.userNameNeedTranslate != '1'" v-model="ownerId" size="small" clearable :placeholder="$t('selecttheapplicant')" style="width: 120px" :disabled="!permissions.costAudit" filterable="true">
                 <span v-for="(item, index) in users" :key="index">
                   <el-option :label="item.name" :value="item.id"></el-option>
                 </span> 
               </el-select>
+
+              <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'small'" :widthStr="'120'" :distinction="'2'" :clearable="true" :subject="users" :disabled="!permissions.costAudit" :subjectId="ownerId" ref="selectCat" @selectCal="selectCal"></selectCat>
             </el-form-item>
             <!-- 单据编号 -->
             <el-form-item :label="$t('receiptnumber')" >
@@ -243,7 +248,18 @@
                   <span style="float:right;margin-right:20px">{{scope.row.totalAmount ? scope.row.totalAmount.toFixed(2) : '0'}}</span>
                 </template>
               </el-table-column>
-              <el-table-column prop="ownerName" :label="$t('peopleconcerned')" ></el-table-column>
+              <el-table-column prop="ownerName" :label="$t('peopleconcerned')" >
+                <template slot-scope="scope">
+                  <div>
+                    <span v-if="user.userNameNeedTranslate != 1">
+                      {{scope.row.ownerName}}
+                    </span>
+                    <span v-if="user.userNameNeedTranslate == 1">
+                      <ww-open-data type='userName' :openid='scope.row.ownerName'></ww-open-data>
+                    </span>
+                  </div>
+                </template>
+              </el-table-column>
               <el-table-column prop="createDate" :label="$t('fillinthedate')" ></el-table-column>
               <el-table-column prop="ticketNum" :label="$t('invoicenumber')" ></el-table-column>
               <el-table-column prop="type" :label="$t('ppertype')" >
@@ -306,11 +322,14 @@
           <el-form :model="ParticularsList" label-width="80px">
             <el-form-item :label="$t('peopleconcerned')" style="width: 270px" :rules="{ required: true, message: $t('pleaseselecttheapplicant'), trigger: 'blur' }">
               <!-- <el-input v-show="flg" v-model="ParticularsList.ownerName" disabled ></el-input> -->
-              <el-select v-model="ParticularsList.ownerId" :placeholder="$t('pleaseselecttheapplicant')" style="width: 150px" :disabled="flg || ParticularsList.ownerId == ParticularsList.operatorId">
+              <!-- <el-select v-model="ParticularsList.ownerId" :placeholder="$t('pleaseselecttheapplicant')" style="width: 150px" :disabled="flg || ParticularsList.ownerId == ParticularsList.operatorId">
                 <span v-for="(item, index) in users" :key="index">
                   <el-option :label="item.name" :value="item.id"></el-option>
                 </span>
-              </el-select>
+              </el-select> -->
+
+              <selectCat v-if="user.userNameNeedTranslate != '1'" :size="'medium'" :widthStr="'150'" :distinction="'3'" :subject="users" :disabled="flg || ParticularsList.ownerId == ParticularsList.operatorId" :subjectId="ParticularsList.ownerId" ref="selectCat" @selectCal="selectCal"></selectCat>
+
             </el-form-item>
             <el-form-item :label="$t('fillinthedate')">
               <!-- <el-input v-model="ParticularsList.createDate" :disabled="flg"></el-input> -->
@@ -981,6 +1000,7 @@ export default {
                 if (!this.permissions.costAudit) {
                     this.addForm.ownerId = this.user.id;
                     this.addForm.status = 1;
+                    this.$forceUpdate()
                 }
             } else {
                 this.$message({
@@ -1465,6 +1485,16 @@ export default {
         // console.log(sums, 123)
         this.$nextTick(()=>{ this.$refs.tab.doLayout()})
         return sums;
+      },
+      // 自定义组件事件
+      selectCal(obj) {
+        if(obj.distinction == '1') {
+          this.addForm.ownerId = obj.id
+        } else if(obj.distinction == '2') {
+          this.ownerId = obj.id
+        } else if(obj.distinction == '3') {
+          this.ParticularsList.ownerId = obj.id
+        }
       }
   },
 };

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

@@ -50,7 +50,18 @@
                                 </template>
                             </el-table-column>
                             <el-table-column :label="$t('xiabo')" prop="indate" align="center" min-width="200"></el-table-column>
-                            <el-table-column :label="$t('caozuo')" prop="userName" align="center" min-width="120"></el-table-column>
+                            <el-table-column :label="$t('caozuo')" prop="userName" align="center" min-width="120">
+                                <template slot-scope="scope">
+                                    <div>
+                                        <span v-if="user.userNameNeedTranslate != 1">
+                                            {{scope.row.userName}}
+                                        </span>
+                                        <span v-if="user.userNameNeedTranslate == 1">
+                                            <ww-open-data type='userName' :openid='scope.row.userName'></ww-open-data>
+                                        </span>
+                                    </div>
+                                </template>
+                            </el-table-column>
                             <el-table-column :label="$t('bei-zhu')" prop="remark" align="left" header-align="left" show-overflow-tooltip min-width="200"></el-table-column>
                             <el-table-column label="" align="center" fixed="right" v-if="permissions.projectAllocate">
                                 <template slot-scope="scope">

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

@@ -1328,7 +1328,7 @@ import { error } from 'dingtalk-jsapi';
                         return prev;
                     }
                     }, 0);
-                    sums[index] += this.$t('yuan');
+                    sums[index] = sums[index].toFixed(2) + this.$t('yuan');
                 } else {
                     sums[index] = 'N/A';
                 }

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

@@ -105,7 +105,14 @@
                     <div style="margin-top:10px;color:#999;">{{ $t('newspaperauditor') }}</div>
                     <div>
                         <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)">{{item.auditorName}}</el-link>
+                        <el-link v-for="item in project.auditorList" :key="item.id" style="margin:10px;" @click="showUser(item.auditorId)">
+                            <span v-if="user.userNameNeedTranslate != 1">
+                                {{item.auditorName}}
+                            </span>
+                            <span v-if="user.userNameNeedTranslate == 1">
+                                <ww-open-data type='userName' :openid='item.auditorName'></ww-open-data>
+                            </span>
+                        </el-link>
                     </div>
                    
                     <div v-show="project.isPublic == 0" style="color:#999;">{{ $t('participantin') }}</div>

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

@@ -504,18 +504,21 @@
                 </el-form-item>
                 <el-form-item :label="$t('projectmanager')" :class="title == $t('newproject') && user.companyId == 936 ? 'wpgCssClass' : ''">
                     <!-- <el-select v-model="addForm.inchargerId"  :disabled="(addForm.userId.length==0 && addForm.isPublic == 0) || (!permissions.projectManagement && user.id != addForm.creatorId)" filterable placeholder="请选择项目经理" style="width:32%;" > -->
+
                     <el-select v-if="user.userNameNeedTranslate != 1" v-model="addForm.inchargerId" filterable :placeholder="$t('defaultText.pleaseChoose')" style="width:32%;" >
                         <el-option v-for="item in participator" :key="item.id" :label="item.name" :value="item.id"></el-option>
                     </el-select>
 
-                    <selectCat v-if="user.userNameNeedTranslate == 1" :size="'small'" :subject="participator" :subjectId="addForm.inchargerId" :distinction="'3'"></selectCat>
+                    <selectCat v-if="user.userNameNeedTranslate == 1" :size="'medium'" :subject="participator" :subjectId="addForm.inchargerId" :distinction="'3'" @selectCal="selectCal"></selectCat>
 
                 </el-form-item>
                 <el-form-item :label="$t('newspaperauditor')" v-show="user.timeType.reportAuditType==0">
                     <el-select v-if="user.userNameNeedTranslate != '1'" v-model="addForm.auditUserIds" multiple="true" :disabled=" !(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" filterable :placeholder="$t('defaultistheprojectleader')" style="width:100%;" >
                         <el-option v-for="item in participator" :key="item.id" :label="item.name" :value="item.id"></el-option>
                     </el-select>
+
                     <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :tile="true" :widthStr="'800'" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" :subjectId="addForm.auditUserIds" :subject="participator" :clearable="false" :distinction="'10'"  :multiSelect="true" @selectCal="selectCal"></selectCat>
+
                 </el-form-item>
                 <!--专业项目协作版本功能 -->
                 <el-form-item :label="$t('ji-bie')" :class="title == $t('newproject') && user.companyId == 936 ? 'wpgCssClass' : ''" v-if="user.company.packageProject==1">

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

@@ -85,7 +85,21 @@
     <el-table height="90%" :loading="demandListLoading" :data="demandList">
       <el-table-column label="项目编号" prop="projectCode" width="160"></el-table-column>
       <el-table-column label="项目名称" prop="projectName" min-width="240"></el-table-column>
-      <el-table-column label="近七日活跃人员" prop="activeUsers" min-width="240"></el-table-column>
+      <el-table-column label="近七日活跃人员" prop="activeUsers" min-width="240">
+        <template slot-scope="scope">
+          <div>
+            <span v-if="user.userNameNeedTranslate == 1">
+              <span v-for="(item, index) in scope.row.activeUsers" :key="index">
+                <ww-open-data type='userName' :openid='item'></ww-open-data>
+                <span v-if="index < scope.row.activeUsers.length - 1">,</span>
+              </span>
+            </span>
+            <span v-if="user.userNameNeedTranslate != 1">
+              {{scope.row.activeUsers}}
+            </span>
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column label="开始时间 - 结束时间" min-width="240">
         <template slot-scope="scope">
           <span>{{scope.row.startDate ? scope.row.startDate + ' ~ ' + scope.row.endDate : ''}}</span>
@@ -197,7 +211,9 @@ export default {
       editDate1: '',
       editDate2: '',
       taskgroupList: [],
-      valuex2: ''
+      valuex2: '',
+
+      user: JSON.parse(sessionStorage.getItem("user")),
 
     }
   },
@@ -544,6 +560,13 @@ export default {
           if(res.code == 'ok'){
             this.demandListLoading = false
             this.total = res.data.total
+            if(this.user.userNameNeedTranslate == 1) {
+              for(let i in res.data.records) {
+                if(res.data.records[i].activeUsers){
+                  res.data.records[i].activeUsers = res.data.records[i].activeUsers.split(',')
+                }
+              }
+            }
             this.demandList = res.data.records
           }else {
             this.demandListLoading = false

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

@@ -4076,6 +4076,9 @@
                         this.jsTime = quanbu
                         var list = res.data;
                         this.report = list;
+                        this.reportTimeType = this.report.timeType;
+                        //从后端接口的数据设置是否是周末,后端会判断节假日以及中航工业一周6天工作日的情况
+                        this.isWeekend = !this.report.isWorkDay;
                         
                         this.canCancelInDialog = false
                         if(list.report.length != 0) {

+ 24 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue

@@ -276,19 +276,40 @@
                                     <el-popover placement="top" width="400" trigger="hover">
                                     <div>
                                         <span v-for="(item, index) in scope.row.membdateList" :key="index">
-                                            {{item.userName}}/{{item.createDate}} <span v-if="scope.row.membdateList.length > 1 && scope.row.membdateList.length - 1 != index">,</span>
+                                            <!-- {{item.userName}} -->
+                                            <span v-if="user.userNameNeedTranslate == 1">
+                                                <ww-open-data type='userName' :openid='item.userName'></ww-open-data>
+                                            </span>
+                                            <span v-if="user.userNameNeedTranslate != 1">
+                                                {{item.userName}}
+                                            </span>
+                                            /{{item.createDate}} <span v-if="scope.row.membdateList.length > 1 && scope.row.membdateList.length - 1 != index">,</span>
                                         </span>
                                     </div>
                                     <div slot="reference" style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width: 180px;">
                                         <span v-for="(item, index) in scope.row.membdateList" :key="index">
-                                            {{item.userName}}/{{item.createDate}} <span v-if="scope.row.membdateList.length > 1 && scope.row.membdateList.length - 1 != index">,</span>
+                                            <!-- {{item.userName}} -->
+                                            <span v-if="user.userNameNeedTranslate == 1">
+                                                <ww-open-data type='userName' :openid='item.userName'></ww-open-data>
+                                            </span>
+                                            <span v-if="user.userNameNeedTranslate != 1">
+                                                {{item.userName}}
+                                            </span>
+                                            /{{item.createDate}} <span v-if="scope.row.membdateList.length > 1 && scope.row.membdateList.length - 1 != index">,</span>
                                         </span>
                                     </div>
                                     </el-popover>
                                 </div>
                                 <div style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width: 180px;" v-else>
                                     <span v-for="(item, index) in scope.row.membdateList" :key="index">
-                                        {{item.userName}}/{{item.createDate}} <span v-if="scope.row.membdateList.length > 1 && scope.row.membdateList.length - 1 != index">,</span>
+                                        <!-- {{item.userName}} -->
+                                        <span v-if="user.userNameNeedTranslate == 1">
+                                            <ww-open-data type='userName' :openid='item.userName'></ww-open-data>
+                                        </span>
+                                        <span v-if="user.userNameNeedTranslate != 1">
+                                            {{item.userName}}
+                                        </span>
+                                        /{{item.createDate}} <span v-if="scope.row.membdateList.length > 1 && scope.row.membdateList.length - 1 != index">,</span>
                                     </span>
                                 </div>
                             </div>