瀏覽代碼

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

ggooalice 2 年之前
父節點
當前提交
9cd76a2c13

+ 34 - 0
fhKeeper/formulahousekeeper/inva_4_tivo/css/projectt.css

@@ -22,6 +22,40 @@ html {font-size: 10px; -webkit-text-size-adjust:none; -webkit-tap-highlight-colo
 .bor {
     box-shadow: 0 0 .5rem .75rem #e6e9ef;
 }
+.bannar {
+    position: relative;
+}
+.bannarText {
+    position: absolute;
+    left: 10.75rem;
+    top: 11rem;
+}
+.bannarText h4 {
+    font-size: 3.4375rem;
+    font-family: '黑体';
+    letter-spacing: 5px;
+}
+.bannarText p {
+    font-size: 18px;
+    font-style: oblique;
+    color: #afafaf;
+    letter-spacing: 5px;
+    margin-top: 1.875rem;
+}
+.bannarText a {
+    color: #fff;
+}
+.bannarText div {
+    width: 145px;
+    line-height: 48px;
+    background: #FB674B;
+    letter-spacing: 3px;
+    text-align: center;
+    margin-top: 42px;
+    font-size: 21px;
+    border-radius: 10px;
+}
+
 
 /* 团队协作 */
 .collaborationTeam {

二進制
fhKeeper/formulahousekeeper/inva_4_tivo/image/projectImg/bannar.jpg


+ 3 - 3
fhKeeper/formulahousekeeper/inva_4_tivo/index.html

@@ -15,8 +15,8 @@
     <script src="js/jquery1.42.min.js"></script>
     <script src="js/jquery.SuperSlide.2.1.3.js"></script>
     <!-- 统计文件 -->
-    <!-- <script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js"></script>
-    <script>LA.init({id: "Jk62Sh8gvUhl1xcU",ck: "Jk62Sh8gvUhl1xcU"})</script> -->
+    <script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js"></script>
+    <script>LA.init({id: "Jk62Sh8gvUhl1xcU",ck: "Jk62Sh8gvUhl1xcU"})</script>
 </head>
 
 <body data-spy="scroll" data-target=".fixed-top" id="body">
@@ -97,7 +97,7 @@
             <div class="bannarTil">工时管家</div>
             <div class="bannarTilP">·提供最全面的项目工时统计解决方案·</div>
             <a href="http://worktime.ttkuaiban.com/#/register">
-                <div class="bannarBtn">免费使用</div>
+                <div class="bannarBtn">免费用</div>
             </a>
         </div>
     </div>

+ 5 - 0
fhKeeper/formulahousekeeper/inva_4_tivo/project.html

@@ -41,6 +41,11 @@
     </nav>
     <div style="height: 5.1rem"></div>
     <div class="bannar">
+        <div class="bannarText">
+            <h4>企业级项目全过程管理工具</h4>
+            <p>·团队协作和项目管理一站式解决,提高项目交付质量·</p>
+            <a href="http://worktime.ttkuaiban.com/#/register"><div>免费试用</div></a>
+        </div>
         <a href="http://worktime.ttkuaiban.com/#/register"><img src="./image/projectImg/bannar.jpg" style="width: 100%;" alt=""></a>
     </div>
 

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/User.java

@@ -64,6 +64,7 @@ public class User extends Model<User> {
      * 创建时间
      */
     @TableField("create_time")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
     private LocalDateTime createTime;
 
     /**

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

@@ -78,7 +78,7 @@ public interface ProjectMapper extends BaseMapper<Project> {
     //获取导出的项目数据
     List<HashMap<String, Object>> getExportData(Integer companyId, String userId);
 
-    List<Map<String, Object>> getOvertimeDetail(String userId, Integer companyId, String startDate, String endDate, Integer projectId,Integer departmentId,List<Integer> deptIds);
+    List<Map<String, Object>> getOvertimeDetail(String userId, Integer companyId, String startDate, String endDate, Integer projectId,List<Integer> branchDepartment,List<Integer> deptIds);
 
     //获取项目的成本预警和实际工时表
     List<HashMap> getProjectCostAlarm(Integer companyId, Integer pageStart, Integer pageSize, Integer projectId);
@@ -93,7 +93,7 @@ public interface ProjectMapper extends BaseMapper<Project> {
 
     List<Map<String, Object>> getProjectCostByCategory(Integer companyId, String startDate, String endDate, Integer curProjectCategoryId, String userId);
 
-    List<Map<String, Object>> getUserWorkingTimeList(String userId, Integer companyId, String startDate, String endDate, Integer projectId, Integer start, Integer size,Integer departmentId,List<Integer> deptIds);
+    List<Map<String, Object>> getUserWorkingTimeList(String userId, Integer companyId, String startDate, String endDate, Integer projectId, Integer start, Integer size,List<Integer> branchDepartment,List<Integer> deptIds);
 
     long findCountWithUser(String userId, Integer companyId, String startDate, String endDate, Integer projectId, Integer start,Integer size,Integer departmentId,List<Integer> deptIds);
 
@@ -104,9 +104,9 @@ public interface ProjectMapper extends BaseMapper<Project> {
     @Update("update project set status=4 where id=#{id}")
     void suspendProject(Integer id);
 
-    List<Map<String, Object>> getUserWorkingTimeStatic(Integer companyId,String startDate, String endDate, Integer start, Integer size, String userId, Integer departmentId, List<Integer> deptIds);
+    List<Map<String, Object>> getUserWorkingTimeStatic(Integer companyId,String startDate, String endDate, Integer start, Integer size, String userId,List<Integer> branchDepartment, List<Integer> deptIds);
 
-    long findCountWithUserWorkingTime(Integer companyId,String startDate, String endDate, Integer start, Integer size, String userId, Integer departmentId, List<Integer> deptIds);
+    long findCountWithUserWorkingTime(Integer companyId,String startDate, String endDate, Integer start, Integer size, String userId,List<Integer> branchDepartment, List<Integer> deptIds);
 
     List<Map<String, Object>> getTimeCostByMainProject(Integer companyId, String startDate, String endDate, Integer projectId, String userId, List<Integer> deptIds);
 

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

@@ -535,7 +535,7 @@ public class DingDingServiceImpl implements DingDingService {
         try {
             String accessToken = null;
             if (isPrivateDeploy) {
-                getPrivateAT(corpid);
+                accessToken = getPrivateAT(corpid);
             } else {
                 accessToken = getValidCorpAccessToken(corpid);
             }

+ 209 - 9
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -2492,7 +2492,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 }
             }
         }
-        List<Map<String, Object>> list = projectMapper.getOvertimeDetail(userId, user.getCompanyId(), startDate, endDate, projectId,departmentId,deptIds);
+        List<Integer> branchDepartment =null;
+        if(departmentId!=null){
+            branchDepartment = getBranchDepartment(departmentId, allDepartmentList);
+        }
+        List<Map<String, Object>> list = projectMapper.getOvertimeDetail(userId, user.getCompanyId(), startDate, endDate, projectId,branchDepartment,deptIds);
         boolean hasViewSalary = sysFunctionService.hasPriviledge(user.getRoleId(), "查看加班成本");
         if (!hasViewSalary) {
             //去掉权限
@@ -4435,7 +4439,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 }
             }
         }
-        List<Map<String, Object>> list = projectMapper.getUserWorkingTimeList(userId, user.getCompanyId(), startDate, endDate, projectId,start,size,departmentId,deptIds);
+        //获取筛选部门 子部门数据
+        List<Integer> branchDepartment =null;
+        if(departmentId!=null){
+            branchDepartment = getBranchDepartment(departmentId, allDepartmentList);
+        }
+        List<Map<String, Object>> list = projectMapper.getUserWorkingTimeList(userId, user.getCompanyId(), startDate, endDate, projectId,start,size,branchDepartment,deptIds);
         long total=projectMapper.findCountWithUser(userId, user.getCompanyId(), startDate, endDate, projectId,null,null,departmentId,deptIds);
         list.forEach(li->{
             double isPublic = (double) li.get("isPublic");
@@ -4535,8 +4544,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         List<Map<String,Object>> reportList=reportMapper.getUserReportTimelinessRate(targetUser.getCompanyId(),startDate,endDate);
         QueryWrapper<User> queryWrapper=new QueryWrapper();
         queryWrapper.eq("company_id",targetUser.getCompanyId());
+        List<Integer> branchDepartment =null;
         if(departmentId!=null){
-            queryWrapper.eq("department_id",departmentId);
+            branchDepartment = getBranchDepartment(departmentId, allDepartmentList);
+        }
+        if(branchDepartment!=null&&branchDepartment.size()>0){
+            queryWrapper.in("department_id",branchDepartment);
         }
         if(userId!=null){
             queryWrapper.eq("id",userId);
@@ -4779,14 +4792,18 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         }
         long total;
         List<Map<String,Object>> resultList;
+        List<Integer> branchDepartment =null;
+        if(departmentId!=null){
+            branchDepartment = getBranchDepartment(departmentId, allDepartmentList);
+        }
         if(pageIndex!=null&&pageSize!=null){
             Integer size=pageSize;
             Integer start=(pageIndex-1)*size;
-            resultList=projectMapper.getUserWorkingTimeStatic(targetUser.getCompanyId(),startDate,endDate,start,size,userId,departmentId,deptIds);
-            total=projectMapper.findCountWithUserWorkingTime(targetUser.getCompanyId(),startDate,endDate,start,size,userId,departmentId,deptIds);
+            resultList=projectMapper.getUserWorkingTimeStatic(targetUser.getCompanyId(),startDate,endDate,start,size,userId,branchDepartment,deptIds);
+            total=projectMapper.findCountWithUserWorkingTime(targetUser.getCompanyId(),startDate,endDate,start,size,userId,branchDepartment,deptIds);
         }else{
-            resultList=projectMapper.getUserWorkingTimeStatic(targetUser.getCompanyId(),startDate,endDate,null,null,userId,departmentId,deptIds);
-            total=projectMapper.findCountWithUserWorkingTime(targetUser.getCompanyId(),startDate,endDate,null,null,userId,departmentId,deptIds);
+            resultList=projectMapper.getUserWorkingTimeStatic(targetUser.getCompanyId(),startDate,endDate,null,null,userId,branchDepartment,deptIds);
+            total=projectMapper.findCountWithUserWorkingTime(targetUser.getCompanyId(),startDate,endDate,null,null,userId,branchDepartment,deptIds);
         }
         for (Map<String, Object> map : resultList) {
             BigDecimal phBigDecimal =new BigDecimal(String.valueOf(map.get("planHours")==null?0:map.get("planHours")));
@@ -5365,8 +5382,191 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     }
 
     @Override
-    public HttpRespMsg importPersonnelWithGroup(MultipartFile file, HttpServletRequest request) {
-        return null;
+    public HttpRespMsg importPersonnelWithGroup(MultipartFile multipartFile, HttpServletRequest request) {
+        HttpRespMsg msg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId()));
+        //然后处理文件
+        String fileName = multipartFile.getOriginalFilename();
+        File file = new File(fileName == null ? "file" : fileName);
+        InputStream inputStream = null;
+        OutputStream outputStream = null;
+        try {
+            inputStream = multipartFile.getInputStream();
+            outputStream = new FileOutputStream(file);
+            byte[] buffer = new byte[4096];
+            int temp = 0;
+            while ((temp = inputStream.read(buffer, 0, 4096)) != -1) {
+                outputStream.write(buffer, 0, temp);
+            }
+            inputStream.close();
+            outputStream.close();
+            //然后解析表格
+            XSSFWorkbook workbook = new XSSFWorkbook(file);
+            //我们只需要第一个sheet
+            XSSFSheet sheet = workbook.getSheetAt(0);
+            //由于第一行需要指明列对应的标题
+            int rowNum = sheet.getLastRowNum();
+            int importCount = 0;
+            for (int rowIndex = 0; rowIndex <= rowNum; rowIndex++) {
+                XSSFRow row = sheet.getRow(rowIndex);
+                if (row == null) {
+                    continue;
+                }
+                //跳过空行
+                if (ExcelUtil.isRowEmpty(row)) {
+                    continue;
+                }
+                //项目编号	项目名称 参与人 负责人 级别 开始日期 截止日期 合同金额
+                XSSFCell codeCell = row.getCell(0);
+                XSSFCell nameCell = row.getCell(1);
+                XSSFCell groupCell = row.getCell(2);
+                XSSFCell inchargerCell = row.getCell(3);
+                XSSFCell participatorCell = row.getCell(4);
+
+
+                if (codeCell != null) codeCell.setCellType(CellType.STRING);
+                if (nameCell != null) nameCell.setCellType(CellType.STRING);
+                if (groupCell !=null) groupCell.setCellType(CellType.STRING);
+                if (inchargerCell != null) inchargerCell.setCellType(CellType.STRING);
+                if (participatorCell != null) participatorCell.setCellType(CellType.STRING);
+
+                if (codeCell != null) {
+                    String code = codeCell.getStringCellValue().trim().replaceAll("\\u00a0", "");
+                    if (code.equals("项目编号") && rowIndex == 0) {
+                        //跳过第一行标题
+                        continue;
+                    }
+                    //检查编号是否已经存在
+                    if (!StringUtils.isEmpty(code)) {
+                        int cnt = projectMapper.selectCount(new QueryWrapper<Project>().eq("project_code", code).eq("company_id", user.getCompanyId()));
+                        if (cnt <= 0) {
+                            msg.setError("项目编号["+code+"]不存在");
+                            return msg;
+                        }
+                        List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("project_code", code).eq("company_id", user.getCompanyId()));
+                        if(projectList.size()>0){
+                            Project project = projectList.get(0);
+                            if(nameCell!=null){
+                                String name = nameCell.getStringCellValue();
+                                if(StringUtils.isEmpty(name)){
+                                    msg.setError("项目编号为["+code+"]的项目名称为["+name+"]的项目不存在");
+                                    return msg;
+                                }
+                            }
+                            if(groupCell!=null){
+                                List<TaskGroup> groupList = taskGroupMapper.selectList(new QueryWrapper<TaskGroup>().eq("project_id", project.getId()).eq("name", groupCell.getStringCellValue()));
+                                if(groupList.size()<=0){
+                                    msg.setError("项目名称为["+project.getProjectName()+"]的任务分组["+groupCell.getStringCellValue()+"]不存在");
+                                    return msg;
+                                }
+                                TaskGroup taskGroup = groupList.get(0);
+                                if(inchargerCell!=null){
+                                    String incharger = inchargerCell.getStringCellValue();
+                                    Optional<User> first = userList.stream().filter(ul -> ul.getName().equals(incharger)).findFirst();
+                                    if(first.isPresent()){
+                                        taskGroup.setInchargerId(first.get().getId());
+                                    }
+                                    taskGroupMapper.updateById(taskGroup);
+                                    if(participatorCell!=null){
+                                        String participator = participatorCell.getStringCellValue();
+                                        String[] split = participator.split(",");
+                                        List<String> list = Arrays.asList(split);
+                                        groupParticipatorMapper.delete(new QueryWrapper<GroupParticipator>().eq("group_id", taskGroup.getId()));
+                                        for (String s : list) {
+                                            Optional<User> optionalUser = userList.stream().filter(ul -> ul.getName().equals(s)).findFirst();
+                                            if(optionalUser.isPresent()){
+                                                GroupParticipator groupParticipator=new GroupParticipator();
+                                                groupParticipator.setUserId(optionalUser.get().getId());
+                                                groupParticipator.setGroupId(taskGroup.getId());
+                                                groupParticipatorMapper.insert(groupParticipator);
+                                            }
+                                        }
+                                        importCount++;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }else {
+                    if(nameCell!=null){
+                        String name = nameCell.getStringCellValue();
+                        List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("project_name", name).eq("company_id", user.getCompanyId()));
+                        Project project = projectList.get(0);
+                        if(StringUtils.isEmpty(name)){
+                            msg.setError("项目名称为["+name+"]的项目不存在");
+                            return msg;
+                        }
+                        if(groupCell!=null){
+                            List<TaskGroup> groupList = taskGroupMapper.selectList(new QueryWrapper<TaskGroup>().eq("project_id", project.getId()).eq("name", groupCell.getStringCellValue()));
+                            if(groupList.size()<=0){
+                                msg.setError("项目名称为["+project.getProjectName()+"]的任务分组["+groupCell.getStringCellValue()+"]不存在");
+                                return msg;
+                            }
+                            TaskGroup taskGroup = groupList.get(0);
+                            if(inchargerCell!=null){
+                                String incharger = inchargerCell.getStringCellValue();
+                                Optional<User> first = userList.stream().filter(ul -> ul.getName().equals(incharger)).findFirst();
+                                if(first.isPresent()){
+                                    taskGroup.setInchargerId(first.get().getId());
+                                }
+                                taskGroupMapper.updateById(taskGroup);
+                                if(participatorCell!=null){
+                                    String participator = participatorCell.getStringCellValue();
+                                    String[] split = participator.split(",");
+                                    List<String> list = Arrays.asList(split);
+                                    groupParticipatorMapper.delete(new QueryWrapper<GroupParticipator>().eq("group_id", taskGroup.getId()));
+                                    for (String s : list) {
+                                        Optional<User> optionalUser = userList.stream().filter(ul -> ul.getName().equals(s)).findFirst();
+                                        if(optionalUser.isPresent()){
+                                            GroupParticipator groupParticipator=new GroupParticipator();
+                                            groupParticipator.setUserId(optionalUser.get().getId());
+                                            groupParticipator.setGroupId(taskGroup.getId());
+                                            groupParticipatorMapper.insert(groupParticipator);
+                                        }
+                                    }
+                                    importCount++;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            msg.data = "成功导入" + importCount + "条数据。";
+        }catch(IOException e){
+                e.printStackTrace();
+                msg.setError("文件处理出错");
+                return msg;
+            } catch(NullPointerException e){
+                e.printStackTrace();
+                msg.setError("数据格式有误或存在空数据 导入失败");
+                return msg;
+            }catch(InvalidFormatException e){
+                e.printStackTrace();
+                msg.setError("文件格式错误,如果安装了加密软件需要先解密再上传");
+            }catch(EncryptedDocumentException e){
+                e.printStackTrace();
+                msg.setError("文件加密状态,需要先解除加密状态再上传");
+                return msg;
+            } catch(Exception e){
+                e.printStackTrace();
+                msg.setError("上传失败:" + e.getMessage());
+                return msg;
+            } finally{
+                //关闭流
+                try {
+                    if (outputStream != null && inputStream != null) {
+                        outputStream.close();
+                        inputStream.close();
+                        System.out.println("流已关闭");
+                    }
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+//            file.deleteOnExit();//程序退出时删除临时文件
+                System.out.println(file.delete());
+            }
+            return msg;
     }
 
 

+ 20 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -654,8 +654,11 @@
         <if test="userId != null">
             AND report.`creator_id` = #{userId}
         </if>
-        <if test="departmentId!=null">
-            and report.dept_id=#{departmentId}
+        <if test="branchDepartment!=null and branchDepartment.size()>0">
+            and report.dept_id in
+            <foreach collection="branchDepartment" open="(" close=")" separator="," item="item">
+                #{item}
+            </foreach>
         </if>
         <if test="deptIds!=null and deptIds.size()>0">
             and report.dept_id in
@@ -684,8 +687,11 @@
         <if test="projectId!=null">
             and project.id=#{projectId}
         </if>
-        <if test="departmentId!=null">
-            and report.dept_id=#{departmentId}
+        <if test="branchDepartment!=null and branchDepartment.size()>0">
+            and report.dept_id in
+            <foreach collection="branchDepartment" open="(" close=")" item="item" separator=",">
+                #{item}
+            </foreach>
         </if>
         <if test="deptIds!=null and deptIds.size()>0">
             and report.dept_id in
@@ -888,8 +894,11 @@
         <if test="userId!=null and userId!=''">
             and us.id=#{userId}
         </if>
-        <if test="departmentId!=null">
-            and us.department_id=#{departmentId}
+        <if test="branchDepartment!=null and branchDepartment.size()>0">
+            and us.department_id in
+            <foreach collection="branchDepartment" open="(" close=")" separator="," item="item">
+                #{item}
+            </foreach>
         </if>
         <if test="deptIds!=null and deptIds.size()>0">
             and us.department_id in
@@ -924,8 +933,11 @@
         <if test="userId!=null and userId!=''">
             and us.id=#{userId}
         </if>
-        <if test="departmentId!=null">
-            and us.department_id=#{departmentId}
+        <if test="branchDepartment!=null and branchDepartment.size()>0">
+            and us.department_id in
+            <foreach collection="branchDepartment" open="(" close=")" separator="," item="item">
+                #{item}
+            </foreach>
         </if>
         <if test="deptIds!=null and deptIds.size()>0">
             and us.department_id in

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

@@ -55,7 +55,7 @@
         SELECT a.id, a.role_id as roleId, a.role_name as roleName, a.name, a.phone, a.portrait_url AS portraitUrl, a.role, a.company_id AS companyId, a.cost,
         a.department_id AS departmentId, b.department_name AS departmentName, a.department_cascade AS departmentCascade,
         a.month_cost as monthCost, a.salary_type as salaryType, a.is_active as isActive,date_format(a.`inactive_date`, '%Y-%m-%d') AS inactiveDate, a.cost_apply_date as costApplyDate,a.plate1,a.plate2,a.plate3,a.plate4,a.plate5,
-        a.job_number as jobNumber
+        a.job_number as jobNumber, DATE_FORMAT(a.create_time, '%Y-%m-%d %H:%m')  as createTime
         FROM user AS a
         LEFT JOIN department AS b ON a.department_id = b.department_id
         WHERE a.company_id = #{companyId}
@@ -78,7 +78,7 @@
         SELECT a.id,  a.role_id as roleId, a.role_name as roleName,  a.name, a.phone, a.portrait_url AS portraitUrl, a.role, a.company_id AS companyId, a.cost,
         a.department_id AS departmentId, b.department_name AS departmentName, a.department_cascade AS departmentCascade,
         a.month_cost as monthCost, a.salary_type as salaryType, a.is_active as isActive,date_format(a.`inactive_date`, '%Y-%m-%d') AS inactiveDate, a.cost_apply_date as costApplyDate,a.plate1,a.plate2,a.plate3,a.plate4,a.plate5,
-        a.job_number as jobNumber
+        a.job_number as jobNumber, DATE_FORMAT(a.create_time, '%Y-%m-%d %H:%m')  as createTime
         FROM user AS a
         LEFT JOIN department AS b ON a.department_id = b.department_id
         WHERE a.company_id = #{companyId} AND a.department_id IN

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

@@ -87,7 +87,7 @@
           
           <!-- 部门筛选 -->
           <el-cascader v-if="(ins == 9 && permissions.reportAllTimely) || (ins == 8 && permissions.reportAllTimeDivide) || (ins == 6 && permissions.reportAllOvertime) || (ins == 11 && permissions.reportPersonnel)" v-model="departmentIdArray" :options="departmentList" placeholder="请选择部门"
-            :props="{ checkStrictly: false,expandTrigger: 'hover' }" :show-all-levels="false" clearable
+            :props="{ checkStrictly: true,expandTrigger: 'hover' }" :show-all-levels="false" clearable
             @change="selcts(9)" size="small" style="margin-left:10px"
           ></el-cascader>
 

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

@@ -1648,7 +1648,14 @@
                             //     res.data[i].taskTex = '截止于 ' + res.data[i].endDate
                             // }
                             if(res.data[i].finishDate) {
-                                res.data[i].taskTex = '完成于 ' + res.data[i].finishDate
+                                let str = `完成于 ${res.data[i].finishDate}`
+                                res.data[i].taskTex = str
+                                if(res.data[i].endDate) {
+                                    let strS = '截止于 ' + res.data[i].endDate
+                                    let assignment = `${strS}   ${str}`
+                                    res.data[i].taskTex = assignment
+                                }
+                                // res.data[i].taskTex = '完成于 ' + res.data[i].finishDate
                             } else if(res.data[i].endDate) {
                                 res.data[i].taskTex = '截止于 ' + res.data[i].endDate
                             } else {

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

@@ -66,7 +66,9 @@
                                             <i class="el-icon-delete"></i>
                                             删除分组</el-dropdown-item>
                                             <!-- 设置参与人 0000 -->
-                                            
+                                        <el-dropdown-item divided @click.native="getGroupDetails(item)">
+                                            <i class="el-icon-tickets"></i>
+                                            分组详情</el-dropdown-item>
                                     </el-dropdown-menu>
                                 </el-dropdown>
                                 </div>
@@ -82,6 +84,24 @@
                             </el-menu-item>
                         </el-menu>
                     </el-aside>
+                    <!-- 分组详情 -->
+                    <el-dialog :title="groupDetailTil" :visible.sync="groupDetailsShow" width="500px" :before-close="handleClose">
+                        <div>
+                            <el-form label-width="80px">
+                                <el-form-item label="负责人:">
+                                    {{groupDetailData.incharger}}
+                                </el-form-item>
+                                <el-form-item label="参与人:">
+                                    <span v-for="(item, index) in groupDetailData.participators" :key="index">
+                                        {{item.userName}} <span v-if="index < groupDetailData.participators.length - 1">、</span>
+                                    </span>
+                                </el-form-item>
+                            </el-form>
+                        </div>
+                        <span slot="footer" class="dialog-footer">
+                            <el-button type="primary" @click="groupDetailsShow = false">确 定</el-button>
+                        </span>
+                    </el-dialog>
                     <span :style="'background:#f0f0f0;width:1px;height:'+tableHeight+'px;'" @click="toggleGroup">
                         
                     </span>
@@ -1077,6 +1097,9 @@ import delete$ from 'dingtalk-jsapi/api/biz/cspace/delete';
 
                 canAddTask: false, // 分组创建任务的判断
                 groupResponsibleId: '', // 分组负责人的id
+                groupDetailsShow: false,
+                groupDetailData: {},
+                groupDetailTil: ''
             };
             
         },
@@ -2476,6 +2499,29 @@ import delete$ from 'dingtalk-jsapi/api/biz/cspace/delete';
                         });
                 });
             },
+            getGroupDetails(obj) {
+                this.http.post('/task-group/detail',{
+                    groupId: obj.id
+                },
+                res => {
+                    if (res.code == "ok") {
+                        this.groupDetailsShow = true
+                        this.groupDetailData = res.data
+                        this.groupDetailTil = obj.name + ' - 分组详情'
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
             addTemplateGroup() {
                 // var param = JSON.parse(JSON.stringify(this.groupTemplateList.filter(g=>g.selected)[0]));
                 // delete param.stagesList;

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

@@ -20,7 +20,7 @@
                         <span style="padding-right: 50px;box-sizing: border-box;overflow:hidden;text-overflow:ellipsis;line-height: 36px; display: inline-block;">{{ node.label }}</span>
 
                         <!-- <span v-if="node.label != '全部人员'" class="node none"> -->
-                        <span v-if="node.label != '全部人员'" class="node none poAub">
+                        <span v-if="node.label != '全部人员' && node.label != '未分配'" class="node none poAub">
                             <el-button type="text" size="mini" @click="createDepartment(-2)" >
                                 <i class="el-icon-circle-plus-outline"></i> <!-- 新增 -->
                             </el-button>
@@ -63,7 +63,9 @@
                         </div>
                     </el-form-item>
                     <el-form-item>
-                        <div style="color:#999;font-size:13px;">共{{total}}人</div>
+                        <div style="color:#999;font-size:13px;">共<span :style="total>user.company.staffCountMax?'color:red;':''">{{total}}</span>人
+                        <span v-if="depData == null || depData.id == -1">(上限:{{user.company.staffCountMax}}人)</span>
+                        </div>
                     </el-form-item>
                     <el-form-item style="float:right;" v-if="permissions.structureCustomConfig">
                         <el-link type="primary" :underline="false" @click="customConfigShow">自定义配置</el-link>
@@ -147,7 +149,7 @@
                 <el-table-column prop="name" label="姓名" ></el-table-column>
                 <el-table-column prop="jobNumber" label="工号" ></el-table-column>
                 <el-table-column prop="phone" label="手机" width="120"></el-table-column>
-                <el-table-column prop="departmentName" label="部门" ></el-table-column>
+                <el-table-column prop="departmentName" label="部门" width="220"></el-table-column>
                 <el-table-column label="角色" width="100">
                     <template slot-scope="scope">{{scope.row.roleName}}</template>
                 </el-table-column>
@@ -159,11 +161,13 @@
                         <el-link v-if="user.timeType.isSecretSalary==0" @click.native="showSalaryList(scope.row)"><i class="iconfont firerock-iconrecord"></i></el-link>
                     </template>
                 </el-table-column>
-                <el-table-column label="状态" width="160">
+                <el-table-column label="状态" width="100">
                     <template slot-scope="scope">
                         <span>{{scope.row.isActive==0 ? '停用(' + scope.row.inactiveDate + ')' : '在职'}}</span>
                     </template>
                 </el-table-column>
+                <el-table-column label="创建时间" width="150" prop="createTime">
+                </el-table-column>
                 <el-table-column label="操作" width="300" fixed="right">
                     <template slot-scope="scope">
                         <el-button size="mini" type="default" v-if="scope.row.roleName == '超级管理员' && user.id == scope.row.id" @click="transferRole(scope.row)">转让</el-button>

二進制
任务分组相关人员导入模板.xlsx