فهرست منبع

伊斯呗预估工时驳回修改
美莱德报表修改

Min 1 سال پیش
والد
کامیت
1927d33ba7

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

@@ -92,9 +92,12 @@ public class GroupBudgetReviewController {
     }
 
     @RequestMapping("/check")
-    public HttpRespMsg check(Integer id,Integer checkType){
+    public HttpRespMsg check(Integer id,Integer checkType,String rejectReason){
         HttpRespMsg httpRespMsg=new HttpRespMsg();
         GroupBudgetReview groupBudgetReview=groupBudgetReviewService.getById(id);
+        if(rejectReason!=null&&!StringUtils.isEmpty(rejectReason)){
+            groupBudgetReview.setRejectReason(rejectReason);
+        }
         groupBudgetReview.setStatus(checkType);
         if(checkType==1){
             //审核通过计算到任务分组的项目人天
@@ -165,6 +168,7 @@ public class GroupBudgetReviewController {
         titleList.add("预估工时变更");
         titleList.add("变更后预估工时");
         titleList.add("变更理由");
+        titleList.add("驳回理由");
         titleList.add("状态");
         dataList.add(titleList);
         for (GroupBudgetReview groupBudgetReview : list) {
@@ -184,6 +188,7 @@ public class GroupBudgetReviewController {
             item.add(String.valueOf(groupBudgetReview.getChangeManDay()));
             item.add(String.valueOf(groupBudgetReview.getNowManDay()));
             item.add(String.valueOf(groupBudgetReview.getRemark()));
+            item.add(String.valueOf(groupBudgetReview.getRejectReason()==null?"":groupBudgetReview.getRejectReason()));
             item.add(groupBudgetReview.getStatus()==0?"待审核":groupBudgetReview.getStatus()==1?"审核通过":"已驳回");
             dataList.add(item);
         }

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

@@ -1260,14 +1260,14 @@ public class ProjectController {
 
     //FTE报表
     @RequestMapping("/getFTEData")
-    public HttpRespMsg getFTEData(@RequestParam Integer pageIndex, @RequestParam Integer pageSize,String month,String area,HttpServletRequest request){
-        return projectService.getFTEData(pageIndex,pageSize,month,area,request);
+    public HttpRespMsg getFTEData(@RequestParam Integer pageIndex, @RequestParam Integer pageSize,String monthStart,String monthEnd,String area,HttpServletRequest request){
+        return projectService.getFTEData(pageIndex,pageSize,monthStart,monthEnd,area,request);
     }
 
     //导出FTE报表
     @RequestMapping("/exportFTEData")
-    public HttpRespMsg exportFTEData(String month,String area,HttpServletRequest request){
-        return projectService.exportFTEData(month,area,request);
+    public HttpRespMsg exportFTEData(String monthStart,String monthEnd,String area,HttpServletRequest request){
+        return projectService.exportFTEData(monthStart,monthEnd,area,request);
     }
 
     @RequestMapping("/syncProjectWithFanwei")

+ 7 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/GroupBudgetReview.java

@@ -19,7 +19,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2024-01-04
+ * @since 2024-02-19
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -102,6 +102,12 @@ public class GroupBudgetReview extends Model<GroupBudgetReview> {
     @TableField("remark")
     private String remark;
 
+    /**
+     * 驳回理由
+     */
+    @TableField("reject_reason")
+    private String rejectReason;
+
 
     @Override
     protected Serializable pkVal() {

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

@@ -243,9 +243,9 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg nearProject(HttpServletRequest request);
 
-    HttpRespMsg getFTEData(Integer pageIndex, Integer pageSize, String month, String area, HttpServletRequest request);
+    HttpRespMsg getFTEData(Integer pageIndex, Integer pageSize,String monthStart,String monthEnd, String area, HttpServletRequest request);
 
-    HttpRespMsg exportFTEData(String month, String area, HttpServletRequest request);
+    HttpRespMsg exportFTEData(String monthStart,String monthEnd, String area, HttpServletRequest request);
 
     HttpRespMsg getProjectListByToken(String json);
 

+ 101 - 192
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -61,6 +61,7 @@ import java.text.*;
 import java.time.*;
 import java.time.chrono.ChronoLocalDate;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjuster;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.concurrent.CountDownLatch;
@@ -11258,7 +11259,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
     //获取FTE报表数据
     @Override
-    public HttpRespMsg getFTEData(Integer pageIndex, Integer pageSize, String month, String area, HttpServletRequest request) {
+    public HttpRespMsg getFTEData(Integer pageIndex, Integer pageSize,String monthStart,String monthEnd, String area, HttpServletRequest request) {
         HttpRespMsg httpRespMsg =new HttpRespMsg();
         User targetUser = userMapper.selectById(request.getHeader("token"));
         List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "全部部门FTE报表");
@@ -11286,10 +11287,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         List<Map<String,Object>> resultList = null;
         String startDate = null;
         String endDate = null;
-        System.out.println("month==="+month);
-        LocalDate time = LocalDate.parse(month, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-        startDate = time.with(TemporalAdjusters.firstDayOfMonth()).toString();
-        endDate = time.with(TemporalAdjusters.lastDayOfMonth()).toString();
+        LocalDate timeStart = LocalDate.parse(monthStart, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        LocalDate timeEnd = LocalDate.parse(monthEnd, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        startDate = timeStart.with(TemporalAdjusters.firstDayOfMonth()).toString();
+        endDate = timeEnd.with(TemporalAdjusters.lastDayOfMonth()).toString();
         int days = WorkDayCalculateUtils.getWorkDaysListInRange(startDate, endDate, 0).size();
         TimeType allDay = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", targetUser.getCompanyId()));
         Float monthTime = days * allDay.getAllday();
@@ -11321,7 +11322,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
     //导出FTE报表数据
     @Override
-    public HttpRespMsg exportFTEData(String month, String area,HttpServletRequest request) {
+    public HttpRespMsg exportFTEData(String monthStart,String monthEnd, String area,HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
@@ -11330,7 +11331,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         if (userCustoms.size() != 0){
             customName = userCustoms.get(0).getName();
         }
-        HttpRespMsg fteData = getFTEData(null, null, month, area, request);
+        HttpRespMsg fteData = getFTEData(null, null, monthStart,monthEnd, area, request);
+        LocalDate timeStart = LocalDate.parse(monthStart, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        LocalDate timeEnd = LocalDate.parse(monthEnd, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        timeStart=timeStart.with(TemporalAdjusters.firstDayOfMonth());
+        timeEnd=timeEnd.with(TemporalAdjusters.lastDayOfMonth());
+        //计算日期区间一共几个月
+        Period period = Period.between(timeStart, timeEnd);
         Map<String, Object> data = (Map<String, Object>) (Map<String, Object>) fteData.data;
         List<Map<String, Object>> resultList = (List<Map<String, Object>>) data.get("resultList");
         Float monthTime = (Float) data.get("monthTime");
@@ -11340,11 +11347,15 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         Integer no = 0;
         titleList.add(customName);
         titleList.add("序号");
-        titleList.add("CRC姓名");
+        titleList.add("姓名");
+        titleList.add("部门");
         titleList.add("项目号");
         titleList.add("项目名称");
         titleList.add("工时(H)");
         titleList.add("FTE(工时/当月工时基数)");
+        if(user.getCompanyId()==876){
+            titleList.add("FTE(工时/固定工时基数(163.125))");
+        }
         titleList.add("非项目工时(H)(当月工时基数-项目工时合计工时数)");
         dataList.add(titleList);
         subtitle.add("");
@@ -11353,199 +11364,97 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         subtitle.add("");
         subtitle.add("");
         subtitle.add("");
+        subtitle.add("");
+        subtitle.add("");
+        if(user.getCompanyId()==876){
+            titleList.add("");
+        }
         subtitle.add("当月工时:" + monthTime);
         dataList.add(subtitle);
-        Float pTimeSum = 0.0F;
-        Float pFteSum = 0.0F;
-        Float aTimeSum = 0.0F;
-        Float aFteSum = 0.0F;
-        for (int i = 0; i < resultList.size(); i++) {
-            if(resultList.get(i).get("workTime") == null){
-                resultList.get(i).put("workTime",0);
-            }
-            if(resultList.get(i).get("projectName") == null){
-                resultList.get(i).put("projectName","");
-            }
-            if(resultList.get(i).get("projectCode") == null){
-                resultList.get(i).put("projectCode","");
-            }
-            if (!resultList.get(i).containsKey("area")){
-                resultList.get(i).put("area","无");
-            }else if(org.apache.commons.lang3.StringUtils.isBlank(resultList.get(i).get("area").toString())){
-                resultList.get(i).put("area","无");
-            }
-            ArrayList<String> row = new ArrayList<>();
-            if (i == 0){
-                no += 1;
-                row.add(resultList.get(i).get("area").toString());
-                row.add(no + "");
-                if (wxCorpInfo != null && wxCorpInfo.getSaasSyncContact().equals(1)){
-                    row.add(resultList.get(i).get("corpwx_userid") + "");
-                }else {
-                    row.add(resultList.get(i).get("userName") + "");
+        Map<String, List<Map<String, Object>>> listMap = resultList.stream().collect(Collectors.groupingBy(i -> String.valueOf(i.get("area"))));
+        List<String> areaList = resultList.stream().map(i -> String.valueOf(i.get("area"))).distinct().collect(Collectors.toList());
+        for (String areaName : areaList) {
+            List<Map<String, Object>> mapList = listMap.get(areaName);
+            Map<String, List<Map<String, Object>>> listMap1 = mapList.stream().collect(Collectors.groupingBy(m -> String.valueOf(m.get("id"))));
+            List<String> userIdList = resultList.stream().map(i -> String.valueOf(i.get("id"))).distinct().collect(Collectors.toList());
+            for (String userId : userIdList) {
+                no+=1;
+                List<Map<String, Object>> maps = listMap1.get(userId);
+                if(maps==null){
+                    continue;
                 }
-                row.add(resultList.get(i).get("projectCode") + "");
-                row.add(resultList.get(i).get("projectName") + "");
-
-                Float workTime = Float.valueOf(resultList.get(i).get("workTime").toString());
-                row.add(workTime + "");
-                pTimeSum += workTime;
-                aTimeSum += workTime;
-
-                Float FTE = Float.valueOf(resultList.get(i).get("workTime").toString()) / monthTime;
-                row.add(new BigDecimal(FTE).setScale(2, RoundingMode.HALF_UP) + "");
-                pFteSum += FTE;
-                aFteSum += FTE;
-
-                row.add("");
-
-                dataList.add(row);
-            }else if(resultList.get(i).get("area").equals(resultList.get(i - 1).get("area"))){
-                if (resultList.get(i).get("id").equals(resultList.get(i - 1).get("id"))){
-                    row.add("");
-                    row.add("");
-                    row.add("");
-                    row.add(resultList.get(i).get("projectCode") + "");
-                    row.add(resultList.get(i).get("projectName") + "");
-
-                    Float workTime = Float.valueOf(resultList.get(i).get("workTime").toString());
-                    row.add(workTime + "");
-                    pTimeSum += workTime;
-                    aTimeSum += workTime;
-
-                    Float FTE = Float.valueOf(resultList.get(i).get("workTime").toString()) / monthTime;
-                    row.add(new BigDecimal(FTE).setScale(2, RoundingMode.HALF_UP) + "");
-                    pFteSum += FTE;
-                    aFteSum += FTE;
-
-                    row.add("");
-
-                    dataList.add(row);
-                }else {
-                    ArrayList<String> sum = new ArrayList<>();
-                    sum.add("");
-                    sum.add("");
-                    sum.add("合计");
-                    sum.add("");
-                    sum.add("");
-                    sum.add(new BigDecimal(pTimeSum).setScale(2, RoundingMode.HALF_UP).toString());
-                    sum.add(new BigDecimal(pFteSum).setScale(2, RoundingMode.HALF_UP) + "");
-                    sum.add(new BigDecimal(monthTime - pTimeSum).setScale(2, RoundingMode.HALF_UP).toString());
-                    pTimeSum = 0.0F;
-                    pFteSum = 0.0F;
-                    dataList.add(sum);
-
-                    no += 1;
-                    row.add("");
-                    row.add(no + "");
+                //计算当前人员的合计
+                for (int i = 0; i < maps.size(); i++) {
+                    Map<String, Object> map = maps.get(i);
+                    List<String> item=new ArrayList<>();
+                    if(i==0){
+                        item.add(areaName);
+                        item.add(no+"");
+                    }else {
+                        item.add("");
+                        item.add("");
+                    }
                     if (wxCorpInfo != null && wxCorpInfo.getSaasSyncContact().equals(1)){
-                        row.add(resultList.get(i).get("corpwx_userid") + "");
+                        item.add("$userName="+map.get("wxUserId") + "$");
+                        item.add("$departmentName="+map.get("wxdeptId") + "$");
                     }else {
-                        row.add(resultList.get(i).get("userName") + "");
+                        item.add(map.get("userName") + "");
+                        item.add(map.get("departmentName") + "");
+                    }
+                    item.add(String.valueOf(map.get("projectCode")));
+                    item.add(String.valueOf(map.get("projectName")));
+                    Float workTime = Float.valueOf(map.get("workTime").toString());
+                    item.add(workTime + "");
+                    Float FTE = Float.valueOf(map.get("workTime").toString()) / monthTime;
+                    item.add(new BigDecimal(FTE).setScale(2, RoundingMode.HALF_UP) + "");
+                    if(user.getCompanyId()==876){
+                        Float FTERegular = Float.valueOf(map.get("workTime").toString()) / (Float.valueOf(String.valueOf("163.125"))*(period.getMonths()+1));
+                        item.add(new BigDecimal(FTERegular).setScale(2, RoundingMode.HALF_UP) + "");
                     }
-                    row.add(resultList.get(i).get("projectCode") + "");
-                    row.add(resultList.get(i).get("projectName") + "");
-
-                    Float workTime = Float.valueOf(resultList.get(i).get("workTime").toString());
-                    row.add(workTime + "");
-                    pTimeSum += workTime;
-                    aTimeSum += workTime;
-
-                    Float FTE = Float.valueOf(resultList.get(i).get("workTime").toString()) / monthTime;
-                    row.add(new BigDecimal(FTE).setScale(2, RoundingMode.HALF_UP) + "");
-                    pFteSum += FTE;
-                    aFteSum += FTE;
-
-                    row.add("");
-
-                    dataList.add(row);
+                    item.add("");
+                    dataList.add(item);
                 }
-
-            }else {
-                ArrayList<String> pSum = new ArrayList<>();
-                pSum.add("");
-                pSum.add("");
-                pSum.add("合计");
-                pSum.add("");
-                pSum.add("");
-                pSum.add(new BigDecimal(pTimeSum).setScale(2, RoundingMode.HALF_UP).toString());
-                pSum.add(new BigDecimal(pFteSum).setScale(2, RoundingMode.HALF_UP) + "");
-                pSum.add(new BigDecimal(monthTime - pTimeSum).setScale(2, RoundingMode.HALF_UP).toString());
-                pTimeSum = 0.0F;
-                pFteSum = 0.0F;
-
-                dataList.add(pSum);
-
-                ArrayList<String> sum = new ArrayList<>();
-                sum.add("");
-                sum.add("");
-                sum.add(customName + "合计");
-                sum.add("");
-                sum.add("");
-                sum.add(new BigDecimal((aTimeSum)).setScale(2, RoundingMode.HALF_UP).toString());
-                //sum.add(new BigDecimal(aFteSum).setScale(2, RoundingMode.HALF_UP) + "");
-                sum.add("");
-                sum.add(new BigDecimal((monthTime - aTimeSum)).setScale(2, RoundingMode.HALF_UP).toString());
-                pTimeSum = 0.0F;
-                pFteSum = 0.0F;
-                aTimeSum = 0.0F;
-                aFteSum = 0.0F;
-                dataList.add(sum);
-
-                ArrayList<String> n = new ArrayList<>();
-                n.add("");
-                dataList.add(n);
-
-                no += 1;
-                row.add(resultList.get(i).get("area")==null?"无":resultList.get(i).get("area").toString());
-                row.add(no + "");
+                //增加人员合计行
+                List<String> item=new ArrayList<>();
+                item.add("合计");
+                item.add("");
                 if (wxCorpInfo != null && wxCorpInfo.getSaasSyncContact().equals(1)){
-                    row.add(resultList.get(i).get("corpwx_userid") + "");
+                    item.add("$userName="+maps.get(0).get("wxUserId") + "$");
+                    item.add("$departmentName="+maps.get(0).get("wxdeptId") + "$");
                 }else {
-                    row.add(resultList.get(i).get("userName") + "");
-                }
-                row.add(resultList.get(i).get("projectCode") + "");
-                row.add(resultList.get(i).get("projectName") + "");
-
-                Float workTime = Float.valueOf(resultList.get(i).get("workTime").toString());
-                row.add(workTime + "");
-                pTimeSum += workTime;
-                aTimeSum += workTime;
-
-                Float FTE = Float.valueOf(resultList.get(i).get("workTime").toString()) / monthTime;
-                row.add(new BigDecimal(FTE).setScale(2, RoundingMode.HALF_UP) + "");
-                pFteSum += FTE;
-                aFteSum += FTE;
-
-                row.add("");
-
-                dataList.add(row);
-            }
-
-            if (i == resultList.size()-1){
-                ArrayList<String> pSum = new ArrayList<>();
-                pSum.add("");
-                pSum.add("");
-                pSum.add("合计");
-                pSum.add("");
-                pSum.add("");
-                pSum.add(new BigDecimal(pTimeSum).setScale(2, RoundingMode.HALF_UP) + "");
-                pSum.add(new BigDecimal(pFteSum).setScale(2, RoundingMode.HALF_UP) + "");
-                pSum.add(new BigDecimal((monthTime - pTimeSum)).setScale(2, RoundingMode.HALF_UP).toString());
-                dataList.add(pSum);
-
-                ArrayList<String> sum = new ArrayList<>();
-                sum.add("");
-                sum.add("");
-                sum.add(customName + "合计");
-                sum.add("");
-                sum.add("");
-                sum.add(aTimeSum.toString());
-                //sum.add(new BigDecimal(aFteSum).setScale(2, RoundingMode.HALF_UP) + "");
-                sum.add("");
-                sum.add(new BigDecimal((monthTime - aTimeSum)).setScale(2, RoundingMode.HALF_UP).toString());
-                dataList.add(sum);
-            }
+                    item.add(maps.get(0).get("userName") + "");
+                    item.add(maps.get(0).get("departmentName") + "");
+                }
+                item.add("");
+                item.add("");
+                double workTimeSum = maps.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("workTime")))).sum();
+                item.add(new BigDecimal(workTimeSum).setScale(2,RoundingMode.HALF_UP)+"");
+                double FTESum = maps.stream().mapToDouble(m -> {
+                    return Float.valueOf(m.get("workTime").toString()) / monthTime;
+                }).sum();
+                item.add(new BigDecimal(FTESum).setScale(2,RoundingMode.HALF_UP)+"");
+                if(user.getCompanyId()==876){
+                    double FTERegularSum = maps.stream().mapToDouble(m -> {
+                        return Float.valueOf(m.get("workTime").toString()) / (Float.valueOf(String.valueOf("163.125"))*(period.getMonths()+1));
+                    }).sum();
+                    item.add(new BigDecimal(FTERegularSum).setScale(2,RoundingMode.HALF_UP)+"");
+                }
+                item.add(new BigDecimal(monthTime-workTimeSum).setScale(2,RoundingMode.HALF_UP)+"");
+                dataList.add(item);
+            }
+            //增加自定义维度合计行
+            List<String> item=new ArrayList<>();
+            item.add("合计");
+            item.add("");
+            item.add("");
+            item.add("");
+            item.add("");
+            double workTimeSum = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("workTime")))).sum();
+            item.add(new BigDecimal(workTimeSum).setScale(2,RoundingMode.HALF_UP)+"");
+            item.add("");
+            item.add("");
+            item.add(new BigDecimal((monthTime-workTimeSum)).setScale(2,RoundingMode.HALF_UP)+"");
+            dataList.add(item);
         }
         String fileName = "FTE报表"+System.currentTimeMillis();
         try {

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

@@ -18,11 +18,12 @@
         <result column="project_id" property="projectId" />
         <result column="project_name" property="projectName" />
         <result column="remark" property="remark" />
+        <result column="reject_reason" property="rejectReason" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, group_id, old_man_day, change_man_day, now_man_day, status, create_time, company_id, creator_id, group_name, creator, project_id, project_name, remark
+        id, group_id, old_man_day, change_man_day, now_man_day, status, create_time, company_id, creator_id, group_name, creator, project_id, project_name, remark, reject_reason
     </sql>
 
 </mapper>

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

@@ -1709,8 +1709,9 @@
     </select>
 
     <select id="getFTEData" resultType="java.util.Map">
-        SELECT u.id,u.name userName,u.corpwx_userid wxUserId,u.plate1 area,r.projectName,r.projectCode,r.workTime
+        SELECT u.id,u.name userName,d.department_name as departmentName,d.corpwx_deptid as wxdeptId,u.corpwx_userid as wxUserId,IF(u.plate1 IS NULL OR u.plate1='' ,'无',u.plate1) as area,IFNULL(r.projectName,'') as projectName,IFNULL(r.projectCode,'') as projectCode,IFNULL(r.workTime,0) as workTime
         FROM `user` u
+        LEFT JOIN department d on u.department_id=d.department_id
         LEFT JOIN (
         SELECT p.project_name projectName,p.project_code projectCode,report.working_time,report.creator_id,SUM(working_time) workTime
         FROM report

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

@@ -140,6 +140,13 @@
         <!-- 月份选择 v-if="ins == 14 || ins == 15 || ins == 19" -->
         <el-date-picker v-if="screeningCondition.months.includes(ins)" value-format="yyyy-MM" v-model="monthPersonnel" type="month" :placeholder="$t('Selectmonth')" :clearable="false" @change="selcts()" size="small"></el-date-picker>
           
+        <!-- 月份区间选择 v-if="ins == 14 || ins == 15 || ins == 19" -->
+        <el-date-picker v-if="screeningCondition.monthRange.includes(ins)" value-format="yyyy-MM" 
+          v-model="monthRange"
+          type="monthrange"
+          range-separator="至"
+          start-placeholder="开始月份"
+        end-placeholder="结束月份" :clearable="false" @change="selcts()" size="small"></el-date-picker>
           <!-- 部门筛选 ins == 15 || (ins == 9 && permissions.reportAllTimely) || (ins == 8 && permissions.reportAllTimeDivide) || (ins == 6 && permissions.reportAllOvertime) || (ins == 11 && permissions.reportPersonnel) || (ins == 14) -->
           <el-cascader v-if="(screeningCondition.departments.includes(ins)  || (ins == 9 && permissions.reportAllTimely) || (ins == 8 && permissions.reportAllTimeDivide) || (ins == 6 && permissions.reportAllOvertime) || (ins == 11 && permissions.reportPersonnel)) && user.userNameNeedTranslate != 1" v-model="departmentIdArray" :options="departmentList" :placeholder="$t('qing-xuan-ze-bu-men')"
             :props="{ checkStrictly: true,expandTrigger: 'hover',multiple: ins == 6 ? true : false }" collapse-tags :show-all-levels="false" clearable
@@ -937,7 +944,7 @@
                 <el-table-column align="center" prop="restartDate" label="重启时间" min-width="150"></el-table-column>
             </el-table>
 
-            <!-- ETF报表 -->
+            <!-- FTE报表 -->
             <el-table v-if="ins == 19"  key="19" border :data="fTEDataList" highlight-current-row v-loading="listLoading" :height="+tableHeight - 1" style="width: 100%;">
                 <el-table-column align="center" prop="area" :label="customName" min-width="150"></el-table-column>
                 <el-table-column align="center" prop="projectCode" label="项目编号" min-width="150"></el-table-column>
@@ -1483,7 +1490,8 @@ export default {
     return {
       screeningCondition: { // 筛选条件的判断
         project: [4, 8, 9, 10, 11, 14, 15, 17, 19, 20, 21, 22, 24], // 项目筛选条件 (不等于)
-        months: [14, 15, 19], // 月份筛选条件 (等于)
+        months: [14, 15], // 月份筛选条件 (等于)
+        monthRange: [19], // 月份区间筛选条件 (等于)
         staff: [6, 8, 9, 19, 11, 14, 18, 23, 25, 26], // 人员筛选条件 (等于)
         departments: [14, 15, 23, 26], // 部门筛选条件 (等于)
         timePeriod: [5, 6, 8, 9, 10, 11, 12, 16, 17, 18, 20, 21, 22, 24, 26], // 时间段筛选条件 (等于)
@@ -1606,6 +1614,7 @@ export default {
 
       monthlyPersonnelList: [],
       monthPersonnel: '',
+      monthRange: '',
 
       tableList: [],
       byQuarterDialog: false,
@@ -1702,6 +1711,7 @@ export default {
     let month = +myDate.getMonth() + 1
     let yue = month >= 10 ? yue = month : yue = '0' + month
     this.monthPersonnel = year + '-' + yue
+    this.monthRange=[year + '-' + yue,year + '-' + yue]
 
     this.getProjectListOvertime()
     // this.getProjectList();
@@ -2265,7 +2275,8 @@ export default {
         } else if(this.ins == 19) {
           fName = 'FTE报表' + '.xlsx'
           url += "/exportFTEData"
-          sl.month = this.monthPersonnel + '-01'
+          sl.monthStart= this.monthRange[0]+"-01"
+          sl.monthEnd= this.monthRange[1]+"-01"
           sl.area = this.areaName || null
         }else if(this.ins == 20) {
           fName = '有效工时率表' + '.xlsx'
@@ -2427,7 +2438,8 @@ export default {
       this.getCustomName();
       this.listLoading = true;
       let parameter = {
-        month: this.monthPersonnel + '-01',
+        monthStart: this.monthRange[0]+"-01",
+        monthEnd: this.monthRange[1]+"-01",
         area: this.areaName || null,
         pageIndex: this.page,
         pageSize: this.size

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

@@ -140,11 +140,27 @@
                 </template>
             </el-table-column>
 
+            <el-table-column prop="rejectReason" :label="'驳回理由'" sortable width="200px">
+                <template slot-scope="scope">
+                    <div>
+                        <div v-if="scope.row.rejectReason && scope.row.rejectReason.length > 11">
+                            <el-tooltip class="remarkClassItem" effect="dark" :content="scope.row.rejectReason" placement="top">
+                                <div class="remarkClass">{{ scope.row.rejectReason }}</div>
+                            </el-tooltip>
+                        </div>
+                        <div v-else>
+                            {{ scope.row.rejectReason}}
+                        </div>
+                    </div>
+                </template>
+            </el-table-column>
+
             <el-table-column prop="status" :label="$t('state.states')" sortable>
                 <template slot-scope="scope">
                     <span v-if="scope.row.status == 0" style="color:#DAA520;">{{ '待审核' }}</span>
                     <span v-else-if="scope.row.status == 1" style="color:#32CD32;">{{ $t('state.alreadyPassed') }}</span>
                     <span v-else-if="scope.row.status == 2" style="color:#FF0000;">{{ $t('state.rejected') }}</span>
+                    
                 </template>
             </el-table-column>
             <el-table-column :label="$t('operation')" width="220" fixed="right">
@@ -156,6 +172,7 @@
                 </template>
             </el-table-column>
         </el-table>
+
     </section>
 </template>
 
@@ -201,7 +218,11 @@ export default {
     methods: {
 
         review(id,checkType){
-            this.http.post("/group-budget-review/check", {id:id,checkType:checkType},
+            this.$prompt('请输入驳回理由', '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            }).then(({ value }) => {
+                this.http.post("/group-budget-review/check", {id:id,checkType:checkType,rejectReason:value},
             res => {
                 if (res.code == "ok") {
                     this.$message({
@@ -222,6 +243,12 @@ export default {
                     type: "error"
                 });
             });
+            }).catch(() => {
+            this.$message({
+                type: 'info',
+                message: '取消驳回'
+            });       
+            });
         },
         //获取待审核的数据列表
         getList() {