瀏覽代碼

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

山水共长天一色 3 年之前
父節點
當前提交
ec6c9d3432
共有 14 個文件被更改,包括 382 次插入101 次删除
  1. 28 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CustomerInfoController.java
  2. 154 7
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectRequirementController.java
  3. 8 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  4. 34 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportExtraDegreeController.java
  5. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java
  6. 7 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  7. 25 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  8. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  9. 4 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectRequirementMapper.xml
  10. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml
  11. 62 35
      fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue
  12. 52 46
      fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue
  13. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue
  14. 3 0
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue

+ 28 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CustomerInfoController.java

@@ -20,10 +20,8 @@ import org.springframework.web.multipart.MultipartFile;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -105,6 +103,32 @@ public class CustomerInfoController {
         }
         }
         return msg;
         return msg;
     }
     }
+    @RequestMapping("/batchDelete")
+    public HttpRespMsg batchDelete(String batchIds) {
+        HttpRespMsg msg = new HttpRespMsg();
+        if(!batchIds.equals("")&&!StringUtils.isEmpty(batchIds)){
+            String[] split = batchIds.split(",");
+            List<String> list = Arrays.asList(split);
+            String token = request.getHeader("TOKEN");
+            User user = userMapper.selectById(token);
+            List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().in("customer_id", list).eq("company_id", user.getCompanyId()));
+            System.out.println(projectList);
+            if(projectList.size()>0){
+                List<String> collect = projectList.stream().map(pro -> pro.getCustomerName()).collect(Collectors.toList());
+                String s = String.valueOf(collect);
+                msg.setError("客户"+s+"已被使用");
+                return msg;
+            }
+            int r = customerInfoMapper.delete(new QueryWrapper<CustomerInfo>().eq("id", list.get(0)).eq("company_id", user.getCompanyId()));
+            if (r <= 0) {
+                msg.setError("无权删除");
+                return msg;
+            }
+            customerInfoMapper.deleteBatchIds(list);
+        }
+        return msg;
+    }
+
 
 
     @RequestMapping("/list")
     @RequestMapping("/list")
     public HttpRespMsg list(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, String keyword) {
     public HttpRespMsg list(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, String keyword) {

+ 154 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectRequirementController.java

@@ -2,26 +2,35 @@ package com.management.platform.controller;
 
 
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.management.platform.constant.Constant;
-import com.management.platform.entity.*;
+import com.management.platform.entity.Project;
+import com.management.platform.entity.ProjectRequirement;
+import com.management.platform.entity.TaskGroup;
 import com.management.platform.mapper.ProjectMapper;
 import com.management.platform.mapper.ProjectMapper;
 import com.management.platform.mapper.ProjectRequirementMapper;
 import com.management.platform.mapper.ProjectRequirementMapper;
 import com.management.platform.mapper.TaskGroupMapper;
 import com.management.platform.mapper.TaskGroupMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.ProjectRequirementService;
 import com.management.platform.service.ProjectRequirementService;
+import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.HttpRespMsg;
+import org.apache.poi.EncryptedDocumentException;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
+import java.io.*;
 import java.time.LocalDate;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -35,6 +44,8 @@ import java.util.stream.Collectors;
 @RestController
 @RestController
 @RequestMapping("/project-requirement")
 @RequestMapping("/project-requirement")
 public class ProjectRequirementController {
 public class ProjectRequirementController {
+    @Value(value = "${upload.path}")
+    private String path;
     @Resource
     @Resource
     private HttpServletRequest request;
     private HttpServletRequest request;
     @Resource
     @Resource
@@ -65,16 +76,19 @@ public class ProjectRequirementController {
         HttpRespMsg msg = new HttpRespMsg();
         HttpRespMsg msg = new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("TOKEN")).getCompanyId();
         Integer companyId = userMapper.selectById(request.getHeader("TOKEN")).getCompanyId();
         int startIndex = (pageIndex-1)*pageSize;
         int startIndex = (pageIndex-1)*pageSize;
-        long total = projectMapper.selectCount(new QueryWrapper<Project>().eq("company_id", companyId));
         LocalDate now = LocalDate.now();
         LocalDate now = LocalDate.now();
         now = now.minusDays(7);
         now = now.minusDays(7);
         String startDate = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(now);
         String startDate = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(now);
         List<Integer> projectIds = new ArrayList<>();
         List<Integer> projectIds = new ArrayList<>();
+        long total;
         if (!StringUtils.isEmpty(groupName)) {
         if (!StringUtils.isEmpty(groupName)) {
             List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId));
             List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId));
             List<Integer> collect = projectList.stream().map(Project::getId).collect(Collectors.toList());
             List<Integer> collect = projectList.stream().map(Project::getId).collect(Collectors.toList());
             List<TaskGroup> taskGroups = taskGroupMapper.selectList(new QueryWrapper<TaskGroup>().eq("name", groupName).in("project_id", collect));
             List<TaskGroup> taskGroups = taskGroupMapper.selectList(new QueryWrapper<TaskGroup>().eq("name", groupName).in("project_id", collect));
             projectIds = taskGroups.stream().map(TaskGroup::getProjectId).collect(Collectors.toList());
             projectIds = taskGroups.stream().map(TaskGroup::getProjectId).collect(Collectors.toList());
+            total=projectIds.size();
+        }else{
+            total = projectMapper.selectCount(new QueryWrapper<Project>().eq("company_id", companyId));
         }
         }
         List<ProjectRequirement> projectRequirements = projectRequirementMapper.customSelect(companyId, startDate, projectId, projectIds.size()==0?null:projectIds, startIndex, pageSize);
         List<ProjectRequirement> projectRequirements = projectRequirementMapper.customSelect(companyId, startDate, projectId, projectIds.size()==0?null:projectIds, startIndex, pageSize);
         HashMap map = new HashMap();
         HashMap map = new HashMap();
@@ -84,6 +98,139 @@ public class ProjectRequirementController {
 
 
         return msg;
         return msg;
     }
     }
+    @RequestMapping("/exportData")
+    public HttpRespMsg exportData(){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("TOKEN")).getCompanyId();
+        LocalDate now = LocalDate.now();
+        now = now.minusDays(7);
+        String startDate = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(now);
+        List<ProjectRequirement> projectRequirementList = projectRequirementMapper.customSelect(companyId,startDate, null, null, null, null);
+        List<List<String>> dataList=new ArrayList<>();
+        String[] titleString={"项目编号","项目名称","近七日活跃人员","人员需求","任务需求"};
+        List<String> nameList = Arrays.asList(titleString);
+        dataList.add(nameList);
+        projectRequirementList.forEach(pr->{
+            List<String> resultData=new ArrayList<>();
+            resultData.add(pr.getProjectCode());
+            resultData.add(pr.getProjectName());
+            resultData.add(pr.getActiveUsers());
+            resultData.add(pr.getMembReq());
+            resultData.add(pr.getTaskReq());
+            dataList.add(resultData);
+        });
+        //生成excel文件导出
+        String fileName = "资源需求统计报表_"+System.currentTimeMillis();
+        String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
+        httpRespMsg.data=resp;
+        return httpRespMsg;
+    }
+    @RequestMapping("/importData")
+    public HttpRespMsg importData(MultipartFile multipartFile){
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        HttpRespMsg msg=new HttpRespMsg();
+        //然后处理文件
+        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();
+            List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId));
+            List<ProjectRequirement> projectRequirementList = projectRequirementMapper.selectList(null);
+            List<ProjectRequirement> projectRequirements=new ArrayList<>();
+            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 taskReqCell = row.getCell(2);
+                XSSFCell membReqCell = row.getCell(3);
+                if(nameCell==null&&codeCell==null){
+                    throw new Exception("项目编号以及名称不能同时不存在");
+                }
+                if (codeCell != null)codeCell.setCellType(CellType.STRING);
+                if (nameCell != null)nameCell.setCellType(CellType.STRING);
+                if (taskReqCell != null)taskReqCell.setCellType(CellType.STRING);
+                if (membReqCell != null)membReqCell.setCellType(CellType.STRING);
+                ProjectRequirement projectRequirement=new ProjectRequirement();
+                List<Project> list = projectList.stream().filter(project ->
+                        (StringUtils.isEmpty(project.getProjectCode())?"":project.getProjectCode()).equals(codeCell.getStringCellValue())
+                        || (StringUtils.isEmpty(project.getProjectName())?"":project.getProjectName()).equals(nameCell.getStringCellValue())
+                ).collect(Collectors.toList());
+                if(StringUtils.isEmpty(list)){
+                    msg.setError("项目编号/名称"+codeCell.getStringCellValue()+"/"+nameCell.getStringCellValue()+"不存在");
+                }else{
+                    list.forEach(li->{
+                        projectRequirement.setProjectId(li.getId());
+                        projectRequirement.setTaskReq(StringUtils.isEmpty(taskReqCell.getStringCellValue())?"":taskReqCell.getStringCellValue());
+                        projectRequirement.setMembReq(StringUtils.isEmpty(membReqCell.getStringCellValue())?"":membReqCell.getStringCellValue());
+                        boolean flag = projectRequirementList.stream().anyMatch(pr -> pr.getProjectId().equals(li.getId()));
+                        if(flag){
+                            Optional<ProjectRequirement> first = projectRequirementList.stream().filter(pr -> pr.getProjectId().equals(li.getId())).findFirst();
+                            projectRequirement.setId(first.get().getId());
+                        }
+                        projectRequirements.add(projectRequirement);
+                    });
+                }
+            }
+            projectRequirementService.saveOrUpdateBatch(projectRequirements);
+        } 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;
+    }
 
 
     @RequestMapping("/delete")
     @RequestMapping("/delete")
     public HttpRespMsg delete(Integer id) {
     public HttpRespMsg delete(Integer id) {

+ 8 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -106,6 +106,12 @@ public class ReportController {
         return reportService.getReport(date, request);
         return reportService.getReport(date, request);
     }
     }
 
 
+    @RequestMapping("/getCardTime")
+    public HttpRespMsg getCardTime(@RequestParam String date) {
+        return reportService.getCardTime(date, request);
+    }
+
+
     private void fillReportProgress(Report report, String professionProgress) {
     private void fillReportProgress(Report report, String professionProgress) {
         if (!StringUtil.isEmpty(professionProgress)) {
         if (!StringUtil.isEmpty(professionProgress)) {
             professionProgress = professionProgress.replaceAll("@",",");
             professionProgress = professionProgress.replaceAll("@",",");
@@ -437,7 +443,7 @@ public class ReportController {
                     String[] dateArray = createDate[i].split("@");
                     String[] dateArray = createDate[i].split("@");
                     String startDate = dateArray[0];
                     String startDate = dateArray[0];
                     String endDate = dateArray[1];
                     String endDate = dateArray[1];
-                    //检查该时间范围是否已经有填写过的日报了
+                    //检查该时间范围是否已经有填写过的日报了,代填日报不需要检查
                     List<Report> oldReportList = reportService.list(new QueryWrapper<Report>().between("create_date", startDate, endDate).eq("creator_id", token));
                     List<Report> oldReportList = reportService.list(new QueryWrapper<Report>().between("create_date", startDate, endDate).eq("creator_id", token));
                     if (oldReportList.size() > 0) {
                     if (oldReportList.size() > 0) {
                         List<LocalDate> collect = oldReportList.stream().map(Report::getCreateDate).collect(Collectors.toList());
                         List<LocalDate> collect = oldReportList.stream().map(Report::getCreateDate).collect(Collectors.toList());
@@ -820,7 +826,7 @@ public class ReportController {
             }
             }
         }
         }
 
 
-        if (!createDate[0].contains("@")) {
+        if (!createDate[0].contains("@") && targetUids.length == 0) {
             //不是批量,可能是按周填报。
             //不是批量,可能是按周填报。
             boolean isWeeklyFill = true;
             boolean isWeeklyFill = true;
             if (reportList.stream().anyMatch(r->r.getId() != null)) {
             if (reportList.stream().anyMatch(r->r.getId() != null)) {

+ 34 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportExtraDegreeController.java

@@ -14,6 +14,7 @@ import com.management.platform.service.ProjectService;
 import com.management.platform.service.ReportExtraDegreeService;
 import com.management.platform.service.ReportExtraDegreeService;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.HttpRespMsg;
 import org.apache.poi.util.StringUtil;
 import org.apache.poi.util.StringUtil;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
@@ -22,6 +23,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -142,6 +144,38 @@ public class ReportExtraDegreeController {
         return msg;
         return msg;
     }
     }
 
 
+    @RequestMapping("/batchDelete")
+    public HttpRespMsg batchDelete(String batchIds) {
+        HttpRespMsg msg = new HttpRespMsg();
+        if(!StringUtils.isEmpty(batchIds)&&!batchIds.equals("")){
+            String[] split = batchIds.split(",");
+            List<String> list = Arrays.asList(split);
+            String token = request.getHeader("TOKEN");
+            User user = userMapper.selectById(token);
+            //检查是否已经被使用
+            QueryWrapper<Project> queryWrapper=new QueryWrapper<>();
+            queryWrapper.in("associate_degrees", list);
+            list.forEach(li->{
+                queryWrapper.or().like("associate_degrees", li+",%")
+                        .or().like("associate_degrees", "%,"+li+",%")
+                        .or().like("associate_degrees", "%,"+li);
+            });
+            List<Project> existsProjects = projectMapper.selectList(queryWrapper);
+            if (existsProjects.size() > 0) {
+                String names = existsProjects.stream().map(Project::getProjectName).collect(Collectors.joining(","));
+                msg.setError("该数据已经被以下项目关联,无法删除:"+names);
+                return msg;
+            }
+            int r = reportExtraDegreeMapper.delete(new QueryWrapper<ReportExtraDegree>().eq("id", list.get(0)).eq("company_id", user.getCompanyId()));
+            if (r <= 0) {
+                msg.setError("无权删除");
+                return msg;
+            }
+            reportExtraDegreeMapper.deleteBatchIds(list);
+        }
+        return msg;
+    }
+
     /**
     /**
      * 获取全部getAll
      * 获取全部getAll
      * @return
      * @return

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

@@ -27,6 +27,8 @@ public interface ReportService extends IService<Report> {
 
 
     HttpRespMsg getReport(String date, HttpServletRequest request);
     HttpRespMsg getReport(String date, HttpServletRequest request);
 
 
+    HttpRespMsg getCardTime(String date, HttpServletRequest request);
+
     HttpRespMsg editReport(List<Report> reportList, String date, List<User> userList, BigDecimal hourCost, Integer companyId);
     HttpRespMsg editReport(List<Report> reportList, String date, List<User> userList, BigDecimal hourCost, Integer companyId);
 
 
     HttpRespMsg deleteReport(String userId, String date);
     HttpRespMsg deleteReport(String userId, String date);

+ 7 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -2265,24 +2265,27 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             TimeType timeType = timeTypeMapper.selectById(companyId);
             TimeType timeType = timeTypeMapper.selectById(companyId);
             List<Map<String, Object>> list = projectMapper.getCustomDataSum(companyId, startDate, endDate, projectId, userId);
             List<Map<String, Object>> list = projectMapper.getCustomDataSum(companyId, startDate, endDate, projectId, userId);
             List<String> headList = new ArrayList<String>();
             List<String> headList = new ArrayList<String>();
+            headList.add("序号");
+            headList.add("姓名");
+            headList.add("工作日期");
             headList.add("项目编号");
             headList.add("项目编号");
             headList.add("项目名称");
             headList.add("项目名称");
-            headList.add("人员");
-            headList.add("部门");
             headList.add(timeType.getCustomDataName());
             headList.add(timeType.getCustomDataName());
             List<List<String>> allList = new ArrayList<List<String>>();
             List<List<String>> allList = new ArrayList<List<String>>();
             allList.add(headList);
             allList.add(headList);
             double totalCostTime = 0;
             double totalCostTime = 0;
+            int seq=1;
             List<Map<String, Object>> membList = projectMapper.getProjectCusDataSumItem(companyId, startDate, endDate, projectId, userId);
             List<Map<String, Object>> membList = projectMapper.getProjectCusDataSumItem(companyId, startDate, endDate, projectId, userId);
             for (Map<String, Object> membMap : membList) {
             for (Map<String, Object> membMap : membList) {
                 List<String> membRowData = new ArrayList<String>();
                 List<String> membRowData = new ArrayList<String>();
+                membRowData.add(String.valueOf(seq));
+                membRowData.add((String)membMap.get("name"));
                 membRowData.add((String)membMap.get("projectCode"));
                 membRowData.add((String)membMap.get("projectCode"));
                 membRowData.add((String)membMap.get("projectName"));
                 membRowData.add((String)membMap.get("projectName"));
-                membRowData.add((String)membMap.get("name"));
-                membRowData.add((String)membMap.get("departmentName"));
                 membRowData.add(((Double)membMap.get("cost")).toString());
                 membRowData.add(((Double)membMap.get("cost")).toString());
                 allList.add(membRowData);
                 allList.add(membRowData);
                 totalCostTime += (Double)membMap.get("cost");
                 totalCostTime += (Double)membMap.get("cost");
+                seq++;
             }
             }
             //合计
             //合计
             List<String> sumRow = new ArrayList<String>();
             List<String> sumRow = new ArrayList<String>();

+ 25 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -638,6 +638,31 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         return httpRespMsg;
         return httpRespMsg;
     }
     }
 
 
+    @Override
+    public HttpRespMsg getCardTime(String date, HttpServletRequest request) {
+        String userId = request.getHeader("TOKEN");
+        User user = userMapper.selectById(userId);
+        int companyId = user.getCompanyId();
+        TimeType timeType = timeTypeMapper.selectById(companyId);
+        HttpRespMsg msg = new HttpRespMsg();
+        if (timeType.getShowDdCardtime() == 1) {
+            List<UserDingdingTime> dingdingTimes = userDingdingTimeMapper.selectList(new QueryWrapper<UserDingdingTime>()
+                    .eq("user_id", userId).eq("work_date", date));
+            if (dingdingTimes.size() > 0) {
+                UserDingdingTime time = dingdingTimes.get(0);
+                msg.data = time;
+            }
+        } else if (timeType.getShowCorpwxCardtime() == 1) {
+            List<UserCorpwxTime> corpwxTimes = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>()
+                    .eq("corpwx_userid", user.getCorpwxUserid()).eq("create_date", date));
+            if (corpwxTimes.size() > 0) {
+                UserCorpwxTime time = corpwxTimes.get(0);
+                msg.data = time;
+            }
+        }
+        return msg;
+    }
+
     //新增或编辑报告
     //新增或编辑报告
     @Override
     @Override
     public HttpRespMsg editReport(List<Report> reportList, String date, List<User> userList, BigDecimal hourCost, Integer companyId) {
     public HttpRespMsg editReport(List<Report> reportList, String date, List<User> userList, BigDecimal hourCost, Integer companyId) {

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

@@ -278,6 +278,7 @@
         <if test="pageStart != null and pageSize != null">
         <if test="pageStart != null and pageSize != null">
             LIMIT #{pageStart},#{pageSize}
             LIMIT #{pageStart},#{pageSize}
         </if>
         </if>
+        order by project.is_public desc, id asc
     </select>
     </select>
     <!--分页获取项目收支平衡 -->
     <!--分页获取项目收支平衡 -->
     <select id="getProjectInAndOut" resultMap="BaseResultMap">
     <select id="getProjectInAndOut" resultMap="BaseResultMap">

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

@@ -39,6 +39,9 @@
                  #{item}
                  #{item}
              </foreach>
              </foreach>
          </if>
          </if>
-        order by project.id asc limit #{startIndex}, #{pageSize}
+        order by project.id asc
+        <if test="startIndex!=null and startIndex!='' and pageSize!=null and pageSize!=''">
+            limit #{startIndex}, #{pageSize}
+        </if>
     </select>
     </select>
 </mapper>
 </mapper>

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

@@ -154,7 +154,7 @@
         task.`task_status`, task.`task_type`,
         task.`task_status`, task.`task_type`,
         project.`project_code`, project.`project_name` FROM task LEFT JOIN project ON project.id = task.`project_id`
         project.`project_code`, project.`project_name` FROM task LEFT JOIN project ON project.id = task.`project_id`
         WHERE project.`company_id` = #{companyId}
         WHERE project.`company_id` = #{companyId}
-        ORDER BY project_name ASC
+        ORDER BY project.is_public desc, project.id ASC
         <if test="pageStart != null and pageSize != null">
         <if test="pageStart != null and pageSize != null">
             limit #{pageStart}, #{pageSize}
             limit #{pageStart}, #{pageSize}
         </if>
         </if>

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

@@ -2,36 +2,41 @@
   <section>
   <section>
     <div>
     <div>
     <div class="sidebars" ref="sidebars" style="width: 200px;display: block;background: #fff">
     <div class="sidebars" ref="sidebars" style="width: 200px;display: block;background: #fff">
-      <el-col :span="12">
-        <el-menu
-          default-active="1-1"
-          class="el-menu-vertical-demo"
-          @select="staffs"
-          background-color="#ffffff"
-          text-color="#666666"
-          active-text-color="#20A0FF"
-          style="width:100%">
-          <el-submenu index="1">
-            <template slot="title">
-              <i class="iconfont firerock-iconbaobiao"></i>
-              <span>项目报表服务</span>
-            </template>
-              <el-menu-item index="1-1" ><p @click="ssl(0)">项目报表</p></el-menu-item>
-              <el-menu-item index="1-2" v-if="permissions.reportTask"><p @click="ssl(1)">项目任务报表</p></el-menu-item>
-              <el-menu-item index="1-3" v-if="permissions.reportCostOf"><p @click="ssl(2)">项目成本报表</p></el-menu-item>
-              <el-menu-item index="1-4" v-if="permissions.reportCostWarning"><p @click="ssl(7)">工时成本预警表</p></el-menu-item>
-              <el-menu-item index="1-5" v-if="permissions.reportBalance"><p @click="ssl(3)">项目收支平衡表</p></el-menu-item>
-              <el-menu-item index="1-6" v-if="user.company.packageCustomer == 1 && permissions.reportProfits"><p @click="ssl(4)">客户项目利润表</p></el-menu-item>
-              <el-menu-item index="1-7" v-if="permissions.reportPhase"><p @click="ssl(5)">项目阶段工时表</p></el-menu-item>
-              <el-menu-item index="1-8" v-if="permissions.reportOvertime"><p @click="ssl(6)">加班情况统计表</p></el-menu-item>
-            </el-submenu>
-          </el-menu>
-      </el-col>
+      <div ref="abbisd" style="width: 100%;overflow: hidden;">
+        <el-col :span="12">
+          <el-menu
+            default-active="1-1"
+            class="el-menu-vertical-demo"
+            @select="staffs"
+            background-color="#ffffff"
+            text-color="#666666"
+            active-text-color="#20A0FF"
+            style="width:100%">
+            <el-submenu index="1">
+              <template slot="title">
+                <i class="iconfont firerock-iconbaobiao"></i>
+                <span>项目报表服务</span>
+              </template>
+                <el-menu-item index="1-1" ><p @click="ssl(0)">项目报表</p></el-menu-item>
+                <el-menu-item index="1-2" v-if="permissions.reportTask"><p @click="ssl(1)">项目任务报表</p></el-menu-item>
+                <el-menu-item index="1-3" v-if="permissions.reportCostOf"><p @click="ssl(2)">项目成本报表</p></el-menu-item>
+                <el-menu-item index="1-4" v-if="permissions.reportCostWarning"><p @click="ssl(7)">工时成本预警表</p></el-menu-item>
+                <el-menu-item index="1-5" v-if="permissions.reportBalance"><p @click="ssl(3)">项目收支平衡表</p></el-menu-item>
+                <el-menu-item index="1-6" v-if="user.company.packageCustomer == 1 && permissions.reportProfits"><p @click="ssl(4)">客户项目利润表</p></el-menu-item>
+                <el-menu-item index="1-7" v-if="permissions.reportPhase"><p @click="ssl(5)">项目阶段工时表</p></el-menu-item>
+                <el-menu-item index="1-8" v-if="permissions.reportOvertime"><p @click="ssl(6)">加班情况统计表</p></el-menu-item>
+              </el-submenu>
+            </el-menu>
+        </el-col>
+      </div>
+      <div class="side" @click="side" ref="sid" style="left: 200px">
+        <div class="spans" ref="side" style="left: -19px;"><i  ref="sideI" class="el-icon-arrow-left"></i></div>
+      </div>
     </div>
     </div>
      <!-- 侧边栏点击事件 -->
      <!-- 侧边栏点击事件 -->
-      <div class="side" @click="side" ref="sid" style="left: 430px">
+      <!-- <div class="side" @click="side" ref="sid" style="left: 430px">
         <div class="spans" ref="side" style="left: -19px;"><i  ref="sideI" class="el-icon-arrow-left"></i></div>
         <div class="spans" ref="side" style="left: -19px;"><i  ref="sideI" class="el-icon-arrow-left"></i></div>
-      </div>
+      </div> -->
     <!-- 内容主体区域 -->
     <!-- 内容主体区域 -->
   <div class="contents">
   <div class="contents">
     <div class="headine" ref="headine">
     <div class="headine" ref="headine">
@@ -300,10 +305,16 @@
                   </el-select>
                   </el-select>
                 </div>
                 </div>
               </div>
               </div>
-              <el-table v-if="ins == 6" :key="ins" border :data="overTimeList" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
+              <el-table v-if="ins == 6" :key="ins" border :data="overTimeList" highlight-current-row v-loading="listLoading" :height="tableHeight - 30" style="width: 100%;">
+                <!-- <el-table-column prop="projectCode" label="序号" width="180">
+                  <template slot-scope="scope">
+                    <div>
+                      {{scope.$index + 1}}
+                    </div>
+                  </template>
+                </el-table-column>
                 <el-table-column prop="projectCode" label="项目编号" width="180"></el-table-column> 
                 <el-table-column prop="projectCode" label="项目编号" width="180"></el-table-column> 
                 <el-table-column prop="username" label="姓名" width="180"></el-table-column> 
                 <el-table-column prop="username" label="姓名" width="180"></el-table-column> 
-                <!-- <el-table-column prop="workingTime" label="加班时长" width="180"></el-table-column>  -->
                 <el-table-column prop="overtimeHours" label="加班时长" width="180"></el-table-column> 
                 <el-table-column prop="overtimeHours" label="加班时长" width="180"></el-table-column> 
                 <el-table-column prop="cost" label="成本" width="180" v-if="permissions.reportCost"></el-table-column> 
                 <el-table-column prop="cost" label="成本" width="180" v-if="permissions.reportCost"></el-table-column> 
                 <el-table-column label="操作" width="180">
                 <el-table-column label="操作" width="180">
@@ -312,7 +323,23 @@
                         <el-button icon="el-icon-search" size="mini" circle @click="costBtn(scope.row)"></el-button>
                         <el-button icon="el-icon-search" size="mini" circle @click="costBtn(scope.row)"></el-button>
                       </div>
                       </div>
                     </template>  
                     </template>  
-                </el-table-column> 
+                </el-table-column>  -->
+                <el-table-column prop="projectCode" label="序号" width="80">
+                  <template slot-scope="scope">
+                    <div>
+                      {{scope.$index + 1}}
+                    </div>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="projectCode" label="项目编号" width="220"></el-table-column>
+                <el-table-column prop="projectName" label="项目名称" width="220"></el-table-column>
+                <el-table-column prop="degreeName" :label="user.timeType.customDegreeName" width="180" v-if="user.timeType.customDegreeActive == 1"></el-table-column>
+                <el-table-column prop="username" label="姓名" width="120"></el-table-column>
+                <el-table-column prop="departmentName" label="部门" width="140"></el-table-column>
+                <el-table-column prop="createDate" label="工作日期" width="120"></el-table-column>
+                <el-table-column prop="workingTime" label="工作时长(h)" width="100"></el-table-column>
+                <el-table-column prop="overtimeHours" label="加班时长(h)" width="100" fixed="right"></el-table-column>
+                <el-table-column prop="cost" label="加班成本" width="80" v-if="permissions.reportCost" fixed="right"></el-table-column>
               </el-table>
               </el-table>
             </div>
             </div>
             
             
@@ -545,7 +572,7 @@ export default {
   watch: {},
   watch: {},
   created() {
   created() {
     let height = window.innerHeight;
     let height = window.innerHeight;
-    this.tableHeight = height - 175;
+    this.tableHeight = height - 200;
     const that = this;
     const that = this;
     window.onresize = function temp() {
     window.onresize = function temp() {
         that.tableHeight = window.innerHeight - 175;
         that.tableHeight = window.innerHeight - 175;
@@ -1025,16 +1052,16 @@ export default {
     // 点击侧边栏事件
     // 点击侧边栏事件
     side() {
     side() {
       if(this.$refs.side.style.left < '0px') {
       if(this.$refs.side.style.left < '0px') {
-        this.$refs.sidebars.style.display = 'none'
-        this.$refs.sid.style.left = '230px'
+        this.$refs.sidebars.style.width = '1px'
+        this.$refs.sid.style.left = '0px'
         this.$refs.side.style.left = '1px'
         this.$refs.side.style.left = '1px'
         this.$refs.sideI.className = 'el-icon-arrow-right'
         this.$refs.sideI.className = 'el-icon-arrow-right'
         this.$refs.staff.style.margin = '5px 0px 0px 5px'
         this.$refs.staff.style.margin = '5px 0px 0px 5px'
         this.$refs.staff.style.width = '100%'
         this.$refs.staff.style.width = '100%'
         this.$refs.headHe.style.paddingLeft = '20px'
         this.$refs.headHe.style.paddingLeft = '20px'
       } else {
       } else {
-        this.$refs.sidebars.style.display = 'block'
-        this.$refs.sid.style.left = '430px'
+        this.$refs.sidebars.style.width = '200px'
+        this.$refs.sid.style.left = '200px'
         this.$refs.side.style.left = '-19px'
         this.$refs.side.style.left = '-19px'
         this.$refs.sideI.className = 'el-icon-arrow-left'
         this.$refs.sideI.className = 'el-icon-arrow-left'
         this.$refs.staff.style.margin = '5px 0px 0px 200px'
         this.$refs.staff.style.margin = '5px 0px 0px 200px'

+ 52 - 46
fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue

@@ -1,45 +1,50 @@
 <template>
 <template>
   <section>
   <section>
-    <div class="sidebars" ref="sidebars" style="width: 200px;display: block;background: #fff">
-      <h3><i class="iconfont firerock-iconbaoxiao" style="padding-right: 10px"></i>费用报销模块</h3>
-      <el-divider ></el-divider>
-      <el-col :span="12">
-        <el-menu
-          default-active="1-1"
-          class="el-menu-vertical-demo"
-          @select="staffs"
-          background-color="#ffffff"
-          text-color="#666666"
-          active-text-color="#20A0FF"
-          style="width:100%">
-          <el-submenu index="1">
-            <template slot="title">
-              <i class="iconfont firerock-icontianbao"></i>
-              <span>员工费用填报</span>
-            </template>
-              <el-menu-item index="1-1"><p @click="ssl(0)"> 一般费用填报</p></el-menu-item>
-              <el-menu-item index="1-2"><p @click="ssl(1)">差旅费用填报</p></el-menu-item>
-              <el-menu-item index="1-3"><p @click="ssl(2)">外包费用填报</p></el-menu-item>
-          </el-submenu>
-          <el-submenu index="2">
-            <template slot="title">
-              <i class="iconfont firerock-iconbaoxiaodan"></i>
-              <span>{{permissions.costAll?"报销凭证列表":"我的报销凭证"}}</span>
-            </template>
-            <el-menu-item index="2-1" ><p @click="bills(false)" >单据列表</p></el-menu-item>
-            <el-menu-item index="2-2" v-if="permissions.costAudit"><p @click="bills(true)">单据审核</p></el-menu-item>
-          </el-submenu>
-            <!-- <el-menu-item index="3" @select="bills" @click="bills(false)" v-if="user.role == 0">
-              <i class="iconfont firerock-iconbaoxiaodan"></i>
-              <span slot="title">{{user.role == 0?"我的报销凭证":"报销凭证列表"}}</span>
-            </el-menu-item> -->
-          </el-menu>
-      </el-col>
-    </div>
+      <div class="sidebars" ref="sidebars" style="width: 200px;display: block;background: #fff;">
+        <div ref="abbisd" style="width: 100%;overflow: hidden;">
+          <h3><i class="iconfont firerock-iconbaoxiao" style="padding-right: 10px"></i>费用报销模块</h3>
+          <el-divider ></el-divider>
+          <el-col :span="12">
+            <el-menu
+              default-active="1-1"
+              class="el-menu-vertical-demo"
+              @select="staffs"
+              background-color="#ffffff"
+              text-color="#666666"
+              active-text-color="#20A0FF"
+              style="width:100%">
+              <el-submenu index="1">
+                <template slot="title">
+                  <i class="iconfont firerock-icontianbao"></i>
+                  <span>员工费用填报</span>
+                </template>
+                  <el-menu-item index="1-1"><p @click="ssl(0)"> 一般费用填报</p></el-menu-item>
+                  <el-menu-item index="1-2"><p @click="ssl(1)">差旅费用填报</p></el-menu-item>
+                  <el-menu-item index="1-3"><p @click="ssl(2)">外包费用填报</p></el-menu-item>
+              </el-submenu>
+              <el-submenu index="2">
+                <template slot="title">
+                  <i class="iconfont firerock-iconbaoxiaodan"></i>
+                  <span>{{permissions.costAll?"报销凭证列表":"我的报销凭证"}}</span>
+                </template>
+                <el-menu-item index="2-1" ><p @click="bills(false)" >单据列表</p></el-menu-item>
+                <el-menu-item index="2-2" v-if="permissions.costAudit"><p @click="bills(true)">单据审核</p></el-menu-item>
+              </el-submenu>
+                <!-- <el-menu-item index="3" @select="bills" @click="bills(false)" v-if="user.role == 0">
+                  <i class="iconfont firerock-iconbaoxiaodan"></i>
+                  <span slot="title">{{user.role == 0?"我的报销凭证":"报销凭证列表"}}</span>
+                </el-menu-item> -->
+              </el-menu>
+          </el-col>
+        </div>
+        <div class="side" @click="side" ref="sid" style="left: 200px">
+            <div class="spans" ref="side" style="left: -19px;"><i  ref="sideI" class="el-icon-arrow-left"></i></div>
+        </div>
+      </div>
      <!-- 侧边栏点击事件 -->
      <!-- 侧边栏点击事件 -->
-      <div class="side" @click="side" ref="sid" style="left: 430px">
+      <!-- <div class="side" @click="side" ref="sid" style="left: 430px">
         <div class="spans" ref="side" style="left: -19px;"><i  ref="sideI" class="el-icon-arrow-left"></i></div>
         <div class="spans" ref="side" style="left: -19px;"><i  ref="sideI" class="el-icon-arrow-left"></i></div>
-      </div>
+      </div> -->
     <!-- 内容主体区域 -->
     <!-- 内容主体区域 -->
   <div class="contents">
   <div class="contents">
     <div v-if="!displayTable" class="headine" ref="headine">
     <div v-if="!displayTable" class="headine" ref="headine">
@@ -95,7 +100,7 @@
           <span v-else style="color:#606266;">总费用 ¥{{this.addForm.totalAmount | numberToCurrency}} 元</span>
           <span v-else style="color:#606266;">总费用 ¥{{this.addForm.totalAmount | numberToCurrency}} 元</span>
           <span class="pu_bu_x" style="margin-left:10px;" @click="addxz"> <i class="el-icon-circle-plus-outline"></i> 新增发票</span>
           <span class="pu_bu_x" style="margin-left:10px;" @click="addxz"> <i class="el-icon-circle-plus-outline"></i> 新增发票</span>
         </div>
         </div>
-
+  
         <!-- 表格 -->
         <!-- 表格 -->
         <div class="pu_table">
         <div class="pu_table">
           <el-table
           <el-table
@@ -106,7 +111,7 @@
             @row-dblclick="dbclick">
             @row-dblclick="dbclick">
             <el-table-column prop="projectName" label="所属项目" width="180">
             <el-table-column prop="projectName" label="所属项目" width="180">
               <template slot-scope="scope">
               <template slot-scope="scope">
-                <el-select size="small" v-model="scope.row.projectId" placeholder="项目" style="width: 150px" >
+                <el-select size="small" v-model="scope.row.projectId" placeholder="项目" style="width: 150px" filterable>
                   <el-option v-for="(item, index) in projectList" :key="index" :label="item.projectName" :value="item.id" @click="ok(item)"></el-option>
                   <el-option v-for="(item, index) in projectList" :key="index" :label="item.projectName" :value="item.id" @click="ok(item)"></el-option>
                 </el-select>
                 </el-select>
               </template>
               </template>
@@ -256,8 +261,8 @@
                   <template slot-scope="scope" >
                   <template slot-scope="scope" >
                       <div v-if="!isAuditList">
                       <div v-if="!isAuditList">
                       <el-button icon="el-icon-view"  circle size="mini"  @click.stop.native="downloadByA(scope.row)" ></el-button>
                       <el-button icon="el-icon-view"  circle size="mini"  @click.stop.native="downloadByA(scope.row)" ></el-button>
-                      <el-button icon="el-icon-edit" circle size="mini" style="margin-left:10px;" @click.stop.native="showEditName(scope.row)" v-show="scope.row.status == 1 || scope.row.status == 2 "></el-button>
-                      <el-button icon="el-icon-delete"  circle size="mini" style="margin-left:10px;" @click.stop.native="deleteItem(scope.row)" v-show="scope.row.status == 1 || scope.row.status == 2 "></el-button>
+                      <el-button icon="el-icon-edit" circle size="mini" style="margin-left:10px;" @click.stop.native="showEditName(scope.row)" v-show="permissions.costAudit || scope.row.status == 1 || scope.row.status == 2 "></el-button>
+                      <el-button icon="el-icon-delete"  circle size="mini" style="margin-left:10px;" @click.stop.native="deleteItem(scope.row)" v-show="permissions.costAudit || scope.row.status == 1 || scope.row.status == 2 "></el-button>
                       </div>
                       </div>
                       <div v-if="isAuditList">
                       <div v-if="isAuditList">
                         <el-button  size="mini"  @click.stop.native="downloadByA(scope.row)" >查看</el-button>
                         <el-button  size="mini"  @click.stop.native="downloadByA(scope.row)" >查看</el-button>
@@ -440,6 +445,7 @@ export default {
   props: {},
   props: {},
   data() {
   data() {
     return {
     return {
+      muHeight: document.documentElement.clientHeight || document.body.clientHeight,
       imgs: [],
       imgs: [],
       addFormRules: {ownerId: [{ required: true, message: "请选择报销人", trigger: "blur" }]},      
       addFormRules: {ownerId: [{ required: true, message: "请选择报销人", trigger: "blur" }]},      
       isAuditList: false,
       isAuditList: false,
@@ -962,8 +968,8 @@ export default {
     // 点击侧边栏事件
     // 点击侧边栏事件
     side() {
     side() {
       if(this.$refs.side.style.left < '0px') {
       if(this.$refs.side.style.left < '0px') {
-        this.$refs.sidebars.style.display = 'none'
-        this.$refs.sid.style.left = '230px'
+        this.$refs.sidebars.style.width = '1px'
+        this.$refs.sid.style.left = '1px'
         this.$refs.side.style.left = '1px'
         this.$refs.side.style.left = '1px'
         this.$refs.sideI.className = 'el-icon-arrow-right'
         this.$refs.sideI.className = 'el-icon-arrow-right'
         this.$refs.staff.style.margin = '20px 20px 0 20px'
         this.$refs.staff.style.margin = '20px 20px 0 20px'
@@ -971,8 +977,8 @@ export default {
         this.$refs.xiaomian.style.width = '100%'
         this.$refs.xiaomian.style.width = '100%'
         this.$refs.headHe.style.paddingLeft = '20px'
         this.$refs.headHe.style.paddingLeft = '20px'
       } else {
       } else {
-        this.$refs.sidebars.style.display = 'block'
-        this.$refs.sid.style.left = '430px'
+        this.$refs.sidebars.style.width = '200px'
+        this.$refs.sid.style.left = '200px'
         this.$refs.side.style.left = '-19px'
         this.$refs.side.style.left = '-19px'
         this.$refs.sideI.className = 'el-icon-arrow-left'
         this.$refs.sideI.className = 'el-icon-arrow-left'
         this.$refs.staff.style.margin = '20px 20px 0 220px'
         this.$refs.staff.style.margin = '20px 20px 0 220px'

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

@@ -1316,7 +1316,7 @@
                     projectId: this.curProjectId,
                     projectId: this.curProjectId,
                 },
                 },
                 res => {
                 res => {
-                    if (res.code == "ok") {
+                    if (res.code == "ok") { 
                         console.log(res.data, '里程碑数据')
                         console.log(res.data, '里程碑数据')
                         for(var i in res.data) {
                         for(var i in res.data) {
                             if(res.data[i].taskStatus == 1) {
                             if(res.data[i].taskStatus == 1) {

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

@@ -1938,6 +1938,9 @@ import delete$ from 'dingtalk-jsapi/api/biz/cspace/delete';
                 if(tab.name == 'costbaseline'){
                 if(tab.name == 'costbaseline'){
                     this.$refs.costbaseline.refreshPage();
                     this.$refs.costbaseline.refreshPage();
                 }
                 }
+                if(tab.name == 'info') {
+                    this.$refs.projectInfo.getMileStoneList()
+                }
             },
             },
             showSubTaskList(task) {
             showSubTaskList(task) {
                 this.subTaskVisible = true;
                 this.subTaskVisible = true;