Przeglądaj źródła

支持加班按薪酬分组设置固定时薪

QuYueTing 1 dzień temu
rodzic
commit
127984beec

+ 38 - 16
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -302,7 +302,7 @@ public class ReportController {
                                               Integer departmentId,
                                               @RequestParam(defaultValue = "1") Integer pageIndex,
                                               @RequestParam(defaultValue = "20") Integer pageSize,
-                                              String userId, String orderBy) {
+                                              String userId, Integer orderByAuditor) {
         //startDate和endDate间隔不得超过1年
         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDate start = LocalDate.parse(startDate, dateTimeFormatter);
@@ -312,7 +312,7 @@ public class ReportController {
             httpRespMsg.setError("查询日报时间间隔不得超过1年");
             return httpRespMsg;
         }
-        return reportService.getReportListForExport(startDate, endDate, projectId, state, departmentId, pageIndex, pageSize, userId,orderBy, request);
+        return reportService.getReportListForExport(startDate, endDate, projectId, state, departmentId, pageIndex, pageSize, userId,orderByAuditor, request);
     }
 
     /**
@@ -327,7 +327,7 @@ public class ReportController {
     public HttpRespMsg exportReportListForExport(String startDate, String endDate,
                                                  Integer projectId,
                                                  Integer state,
-                                                 Integer departmentId, String userId) {
+                                                 Integer departmentId, String userId, Integer orderByAuditor) {
         //startDate和endDate间隔不得超过1年
         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDate start = LocalDate.parse(startDate, dateTimeFormatter);
@@ -337,11 +337,11 @@ public class ReportController {
             httpRespMsg.setError("导出日报时间间隔不得超过1年");
             return httpRespMsg;
         }
-        return reportService.exportReportListForExport(startDate, endDate, projectId, state, departmentId, userId, request);
+        return reportService.exportReportListForExport(startDate, endDate, projectId, state, departmentId, userId, orderByAuditor, request);
     }
 
     @RequestMapping("/getReportGroupByDay")
-    public HttpRespMsg getReportGroupByDay(String startDate, String endDate,String userId, Integer departmentId, Integer projectId, Integer state, String orderBy) {
+    public HttpRespMsg getReportGroupByDay(String startDate, String endDate,String userId, Integer departmentId, Integer projectId, Integer state, Integer orderByAuditor) {
         //startDate和endDate间隔不得超过1年
         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDate start = LocalDate.parse(startDate, dateTimeFormatter);
@@ -351,7 +351,7 @@ public class ReportController {
             httpRespMsg.setError("日报时间间隔不得超过1年");
             return httpRespMsg;
         }
-        return reportService.getReportGroupByDay(startDate, endDate,userId, departmentId, projectId, state, orderBy, request);
+        return reportService.getReportGroupByDay(startDate, endDate,userId, departmentId, projectId, state, orderByAuditor, request);
     }
 
     @RequestMapping("/exportReportGroupByDay")
@@ -674,6 +674,8 @@ public class ReportController {
                 }
             }
         }
+        //获取用户分组的数据
+        List<UserGroup> userGroupList = comTimeType.getPayOvertimeMode() == 1? userGroupMapper.selectList(new QueryWrapper<UserGroup>().eq("company_id", company.getId())) : null;
         if (company.getPackageProject() == 1) {
             //检查是否设置了预算的工时预警
             ProjectBasecostSetting alarmSetting = projectBasecostSettingMapper.selectOne(new QueryWrapper<ProjectBasecostSetting>()
@@ -979,6 +981,7 @@ public class ReportController {
             }
         }
 
+        List<User> reportUserList = new ArrayList<>();
         //代填
         if (targetUids != null && targetUids.length > 0) {
             String val = targetUids[0];
@@ -988,6 +991,10 @@ public class ReportController {
                 targetUidList.add(ids[i]);
             }
             targetUserList = userService.list(new QueryWrapper<User>().in("id", targetUidList));
+            reportUserList.addAll(targetUserList);
+        } else {
+            //自己填自己的
+            reportUserList.add(user);
         }
 
         LocalDate now = LocalDate.now();
@@ -1299,9 +1306,9 @@ public class ReportController {
                             }
                             //计算工时和成本
                             if (report.getMultiWorktime() == 0) {
-                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType, excludeTimeList);
+                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType, excludeTimeList, reportUserList, userGroupList);
                             } else {
-                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType, excludeTimeList);
+                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType, excludeTimeList, reportUserList, userGroupList);
                             }
 
                             //项目专业的进展
@@ -1365,9 +1372,9 @@ public class ReportController {
                                 hourCost = subsUser.getCost();
                                 //计算工时和成本
                                 if (report.getMultiWorktime() == 0) {
-                                    fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType, excludeTimeList);
+                                    fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType, excludeTimeList, reportUserList, userGroupList);
                                 } else {
-                                    fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType, excludeTimeList);
+                                    fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType, excludeTimeList, reportUserList, userGroupList);
                                 }
                                 fillReportProgress(report, professionProgress[i]);
                                 reportList.add(report);
@@ -1429,9 +1436,9 @@ public class ReportController {
                         }
                         //计算工时和成本
                         if (report.getMultiWorktime() == 0) {
-                            fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i], sdf, comTimeType, excludeTimeList);
+                            fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i], sdf, comTimeType, excludeTimeList, reportUserList, userGroupList);
                         } else {
-                            fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType, excludeTimeList);
+                            fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType, excludeTimeList, reportUserList, userGroupList);
                         }
 
                         fillReportProgress(report, professionProgress[i]);
@@ -1507,9 +1514,9 @@ public class ReportController {
                             hourCost = subsUser.getCost();
                             //计算工时和成本
                             if (report.getMultiWorktime() == 0) {
-                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType, excludeTimeList);
+                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], startTime==null?null:startTime[i], endTime==null?null:endTime[i],  sdf, comTimeType, excludeTimeList, reportUserList, userGroupList);
                             } else {
-                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType, excludeTimeList);
+                                fillReportHours(report, hourCost, workingTime==null?null:workingTime[i], timeType==null?null:timeType[i], null, null, sdf, comTimeType, excludeTimeList, reportUserList, userGroupList);
                             }
 
                             fillReportProgress(report, professionProgress[i]);
@@ -2707,7 +2714,7 @@ public class ReportController {
         return msg;
     }
 
-    private void fillReportHours(Report report, BigDecimal hourCost, Double workingTime, Integer timeType, String startTime, String endTime, SimpleDateFormat sdf, TimeType comTimeType, List<TimeAutoExclude> excludeTimeList) {
+    private void fillReportHours(Report report, BigDecimal hourCost, Double workingTime, Integer timeType, String startTime, String endTime, SimpleDateFormat sdf, TimeType comTimeType, List<TimeAutoExclude> excludeTimeList, List<User> reportUserList, List<UserGroup> userGroupList) {
         if (report.getMultiWorktime() == 0) {
             //普通工时成本计算
             if (report.getReportTimeType() == 0) {
@@ -2799,7 +2806,22 @@ public class ReportController {
 
         //如果设置了加班有工资并且当前存在加班的勾选,需要计算一下
         if (report.getIsOvertime() != null && report.getIsOvertime() == 1 && comTimeType.getPayOvertime()) {
-            BigDecimal overtimeCost = hourCost.multiply(new BigDecimal(report.getOvertimeHours())).multiply(new BigDecimal(comTimeType.getOvertimeRatio()));
+            BigDecimal overtimeCost = new BigDecimal(0);
+            if (comTimeType.getPayOvertimeMode() == 0) {
+                overtimeCost = hourCost.multiply(new BigDecimal(report.getOvertimeHours())).multiply(new BigDecimal(comTimeType.getOvertimeRatio()));
+            } else {
+                User targetUser = reportUserList.stream().filter(u->u.getId().equals(report.getCreatorId())).findFirst().orElse(null);
+
+                if (targetUser != null) {
+                    if (targetUser.getUserGroupId() != null) {
+                        UserGroup userGroup = userGroupList.stream().filter(ug->ug.getId().equals(targetUser.getUserGroupId())).findFirst().orElse(null);
+                        if (userGroup != null) {
+                            //重新计算加班成本
+                            overtimeCost = userGroup.getOvertimeHourCost().multiply(new BigDecimal(report.getOvertimeHours()));
+                        }
+                    }
+                }
+            }
             report.setOvertimeCost(overtimeCost);
             //重新计算总的cost
             BigDecimal nonOvertimeCost = hourCost.multiply(new BigDecimal(report.getWorkingTime() - report.getOvertimeHours()));

+ 6 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -735,6 +735,12 @@ public class TimeType extends Model<TimeType> {
     private Boolean timeInputNormal;
 
 
+    /**
+     * 0-按工资时薪倍数,1-按分组设置固定时薪
+     */
+    @TableField("pay_overtime_mode")
+    private Integer payOvertimeMode;
+
     @TableField(exist = false)
     private List<User> userList;
     @TableField(exist = false)

+ 8 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserGroup.java

@@ -1,5 +1,6 @@
 package com.management.platform.entity;
 
+import java.math.BigDecimal;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -15,7 +16,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2024-07-29
+ * @since 2026-05-20
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -45,6 +46,12 @@ public class UserGroup extends Model<UserGroup> {
     @TableField("no_project_percent")
     private Integer noProjectPercent;
 
+    /**
+     * 加班时薪
+     */
+    @TableField("overtime_hour_cost")
+    private BigDecimal overtimeHourCost;
+
 
     @Override
     protected Serializable pkVal() {

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

@@ -32,7 +32,7 @@ public interface ReportMapper extends BaseMapper<Report> {
                                                      @Param("endDate") String endDate,
                                                      @Param("projectId") Integer projectId,
                                                      @Param("state") Integer state,
-                                                     @Param("branchDepartment")List<Integer> branchDepartment, Integer start, Integer size, String orderBy);
+                                                     @Param("branchDepartment")List<Integer> branchDepartment, Integer start, Integer size, Integer orderByAuditor);
     int getAllReportByDateForExportCount(@Param("startDate") String startDate,
                                                               @Param("companyId") Integer companyId,
                                                               @Param("userId") String userId,
@@ -309,7 +309,7 @@ public interface ReportMapper extends BaseMapper<Report> {
                                                    @Param("state") Integer state,
                                                    @Param("deptIds") List<Integer> deptIds,
                                                    @Param("pageStart") Integer pageStart,
-                                                   @Param("pageSize") Integer pageSize, String orderBy);
+                                                   @Param("pageSize") Integer pageSize, Integer orderByAuditor);
 
     Integer getReportGroupByDayCount(@Param("companyId") Integer companyId,
                                       @Param("startDate") String startDate,

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

@@ -28,9 +28,9 @@ public interface ReportService extends IService<Report> {
 
     HttpRespMsg exportReport(@RequestParam String startDate, @RequestParam String endDate,Integer exportType, Integer projectId,Integer stateKey,String departmentIds,String plate, HttpServletRequest request);
 
-    HttpRespMsg getReportListForExport(String startDate, String endDate, Integer projectId, Integer state, Integer departmentId, Integer pageIndex, Integer pageSize, String targetUserId, String orderBy, HttpServletRequest request);
+    HttpRespMsg getReportListForExport(String startDate, String endDate, Integer projectId, Integer state, Integer departmentId, Integer pageIndex, Integer pageSize, String targetUserId, Integer orderByAuditor, HttpServletRequest request);
 
-    HttpRespMsg exportReportListForExport(String startDate, String endDate, Integer projectId, Integer state, Integer departmentId, String targetUserId, HttpServletRequest request);
+    HttpRespMsg exportReportListForExport(String startDate, String endDate, Integer projectId, Integer state, Integer departmentId, String targetUserId, Integer orderByAuditor, HttpServletRequest request);
 
     HttpRespMsg getReport(String date, HttpServletRequest request);
 
@@ -216,7 +216,7 @@ public interface ReportService extends IService<Report> {
 
     HttpRespMsg exportMissingCardTimeUserList(String startDate, String endDate, Integer departmentId, HttpServletRequest request);
 
-    HttpRespMsg getReportGroupByDay(String startDate, String endDate, String userId, Integer departmentId, Integer projectId, Integer state, String orderBy, HttpServletRequest request);
+    HttpRespMsg getReportGroupByDay(String startDate, String endDate, String userId, Integer departmentId, Integer projectId, Integer state, Integer orderByAuditor, HttpServletRequest request);
 
     HttpRespMsg exportReportGroupByDay(String startDate, String endDate, String userId, Integer departmentId, Integer projectId, Integer state, HttpServletRequest request);
 

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

@@ -14580,7 +14580,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
-    public HttpRespMsg getReportListForExport(String startDate, String endDate, Integer projectId, Integer state, Integer departmentId, Integer pageIndex, Integer pageSize, String targetUserId, String orderBy, HttpServletRequest request) {
+    public HttpRespMsg getReportListForExport(String startDate, String endDate, Integer projectId, Integer state, Integer departmentId, Integer pageIndex, Integer pageSize, String targetUserId, Integer orderByAuditor, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             String userId = request.getHeader("Token");
@@ -14596,8 +14596,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 branchDepartment = departmentService.getDeptIncludeSubDeptIds(departmentId, departments);
             }
             // 有查看全公司工时权限
-            int startIndex = (pageIndex - 1) * pageSize;
-            List<HashMap<String, Object>> allReportByDate = reportMapper.getAllReportByDateForExport(startDate, companyId, targetUserId, endDate, projectId, state, branchDepartment, startIndex, pageSize, orderBy);
+            Integer startIndex = pageIndex != null ? (pageIndex - 1) * pageSize : null;
+            List<HashMap<String, Object>> allReportByDate = reportMapper.getAllReportByDateForExport(startDate, companyId, targetUserId, endDate, projectId, state, branchDepartment, startIndex, pageSize, orderByAuditor);
             // 处理数据
             // 分页处理
             int total = reportMapper.getAllReportByDateForExportCount(startDate, companyId, targetUserId, endDate, projectId, state, branchDepartment);
@@ -14647,7 +14647,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             resultMap.put("total", total);
             resultMap.put("pageIndex", pageIndex);
             resultMap.put("pageSize", pageSize);
-            resultMap.put("totalPages", (int) Math.ceil((double) total / pageSize));
+            resultMap.put("totalPages", pageSize != null?(int) Math.ceil((double) total / pageSize) : null);
             resultMap.put("list", allReportByDate);
             
             httpRespMsg.setData(resultMap);
@@ -14659,11 +14659,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
-    public HttpRespMsg exportReportListForExport(String startDate, String endDate, Integer projectId, Integer state, Integer departmentId, String targetUserId, HttpServletRequest request) {
+    public HttpRespMsg exportReportListForExport(String startDate, String endDate, Integer projectId, Integer state, Integer departmentId, String targetUserId, Integer orderByAuditor, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             // 调用getReportListForExport获取全部数据(不分页)
-            HttpRespMsg queryResult = getReportListForExport(startDate, endDate, projectId, state, departmentId, null, null, targetUserId,null, request);
+            HttpRespMsg queryResult = getReportListForExport(startDate, endDate, projectId, state, departmentId, null, null, targetUserId,orderByAuditor, request);
             
             if (queryResult.code != null && !queryResult.code.equals("ok")) {
                 return queryResult; // 返回错误信息
@@ -14839,7 +14839,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
-    public HttpRespMsg getReportGroupByDay(String startDate, String endDate, String userId, Integer departmentId, Integer projectId, Integer state, String orderBy, HttpServletRequest request) {
+    public HttpRespMsg getReportGroupByDay(String startDate, String endDate, String userId, Integer departmentId, Integer projectId, Integer state, Integer orderByAuditor, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             String token = request.getHeader("Token");
@@ -14897,7 +14897,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             
             // 查询按人按天汇总的数据
             List<Map<String, Object>> groupedReportList = reportMapper.getReportGroupByDay(
-                companyId, startDate, endDate, userId, projectId, state, visibleDeptIds, pageStart, pageSize, orderBy);
+                companyId, startDate, endDate, userId, projectId, state, visibleDeptIds, pageStart, pageSize, orderByAuditor);
 
             // 获取总数
             Integer totalCount = reportMapper.getReportGroupByDayCount(

+ 8 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -113,10 +113,10 @@
                 #{deptId}
             </foreach>
         </if>
-        <if test="orderBy != null">
-            ORDER BY #{orderBy}
+        <if test="orderByAuditor != null">
+            ORDER BY audit_dept_managerid asc,a.creator_id, a.create_date desc
         </if>
-        <if test="orderBy == null">
+        <if test="orderByAuditor == null">
             ORDER BY a.creator_id, a.create_date desc
         </if>
         <if test="start != null and size != null">
@@ -1986,11 +1986,12 @@
                 #{deptId}
             </foreach>
         </if>
-        GROUP BY u.id, r.create_date
-        <if test="orderBy != null">
-            ORDER BY #{orderBy}
+        <if test="orderByAuditor != null">
+            GROUP BY audit_dept_managerid, u.id, r.create_date
+            ORDER BY audit_dept_managerid asc, r.create_date DESC, u.name
         </if>
-        <if test="orderBy == null">
+        <if test="orderByAuditor == null">
+            GROUP BY u.id, r.create_date
             ORDER BY r.create_date DESC, u.name
         </if>
         <if test="pageStart != null and pageSize != null">

Plik diff jest za duży
+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml


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

@@ -8,11 +8,12 @@
         <result column="company_id" property="companyId" />
         <result column="group_name" property="groupName" />
         <result column="no_project_percent" property="noProjectPercent" />
+        <result column="overtime_hour_cost" property="overtimeHourCost" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_id, group_name, no_project_percent
+        id, company_id, group_name, no_project_percent, overtime_hour_cost
     </sql>
 
 </mapper>

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

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

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

@@ -965,6 +965,20 @@
               <el-option label="待审核" :value="0"></el-option>
               <el-option label="已驳回" :value="2"></el-option>
             </el-select>
+            <!-- 按审核人排序(工时日报表) -->
+            <el-checkbox
+              v-if="ins == 37"
+              v-model="dailyWorkHoursSortByAuditor"
+              @change="onDailyWorkHoursSortChange"
+              style="margin-left: 10px"
+            >按审核人排序</el-checkbox>
+            <!-- 按审核人排序(日报明细表) -->
+            <el-checkbox
+              v-if="ins == 38"
+              v-model="dailyDetailSortByAuditor"
+              @change="onDailyDetailSortChange"
+              style="margin-left: 10px"
+            >按审核人排序</el-checkbox>
             <!-- 月度财务报表单独筛选条件 -->
             <template v-if="ins == 31">
               <div class="monthlyFinance">
@@ -2114,8 +2128,7 @@
                 <template
                   v-if="
                     user.companyId == 8555 ||
-                    user.companyId == 5792 ||
-                    user.companyId == 10
+                    user.companyId == 5792
                   "
                 >
                   <div style="margin-bottom: 15px">
@@ -5846,23 +5859,9 @@
                 <el-table-column
                   prop="auditorName"
                   align="center"
+                  label="当前审核人"
                   width="140"
                 >
-                  <template slot="header">
-                    <span>当前审核人</span>
-                    <span style="margin-left: 4px; cursor: pointer; display: inline-flex; flex-direction: column; vertical-align: middle;">
-                      <i
-                        class="el-icon-caret-top"
-                        :style="{ color: dailyWorkHoursOrderBy === 'audit_dept_managerid asc' ? '#409EFF' : '#C0C4CC', fontSize: '12px', lineHeight: '1' }"
-                        @click="sortDailyWorkHours('asc')"
-                      ></i>
-                      <i
-                        class="el-icon-caret-bottom"
-                        :style="{ color: dailyWorkHoursOrderBy === 'audit_dept_managerid desc' ? '#409EFF' : '#C0C4CC', fontSize: '12px', lineHeight: '1' }"
-                        @click="sortDailyWorkHours('desc')"
-                      ></i>
-                    </span>
-                  </template>
                   <template slot-scope="scope">
                     <span v-if="scope.row.auditStatusText == '待审核'">
                       <TranslationOpenDataText
@@ -6036,23 +6035,9 @@
                 <el-table-column
                   prop="auditorName"
                   align="center"
+                  label="当前审核人"
                   width="140"
                 >
-                  <template slot="header">
-                    <span>当前审核人</span>
-                    <span style="margin-left: 4px; cursor: pointer; display: inline-flex; flex-direction: column; vertical-align: middle;">
-                      <i
-                        class="el-icon-caret-top"
-                        :style="{ color: dailyDetailOrderBy === 'audit_dept_managerid asc' ? '#409EFF' : '#C0C4CC', fontSize: '12px', lineHeight: '1' }"
-                        @click="sortDailyDetail('asc')"
-                      ></i>
-                      <i
-                        class="el-icon-caret-bottom"
-                        :style="{ color: dailyDetailOrderBy === 'audit_dept_managerid desc' ? '#409EFF' : '#C0C4CC', fontSize: '12px', lineHeight: '1' }"
-                        @click="sortDailyDetail('desc')"
-                      ></i>
-                    </span>
-                  </template>
                   <template slot-scope="scope">
                     <span v-if="scope.row.state == 0">
                       <TranslationOpenDataText
@@ -7936,12 +7921,12 @@ export default {
       // 工时日报表
       dailyWorkHoursList: [],
       dailyWorkHoursLoading: false,
-      dailyWorkHoursOrderBy: '', // 工时日报表排序字段,如 'audit_dept_managerid asc' 或 'audit_dept_managerid desc'
+      dailyWorkHoursSortByAuditor: false, // 工时日报表是否按审核人排序
 
       // 日报明细表
       dailyDetailList: [],
       dailyDetailLoading: false,
-      dailyDetailOrderBy: '', // 日报明细表排序字段,如 'audit_dept_managerid asc' 或 'audit_dept_managerid desc'
+      dailyDetailSortByAuditor: false, // 日报明细表是否按审核人排序
 
       // 工时日报表/日报明细表状态筛选
       dailyState: "",
@@ -9303,6 +9288,9 @@ export default {
         if (this.dailyState !== "" && this.dailyState !== null) {
           sl.state = this.dailyState;
         }
+        if (this.dailyWorkHoursSortByAuditor) {
+          sl.orderByAuditor = 1;
+        }
       } else if (this.ins == 38) {
         fName = `日报明细表.xlsx`;
         url = `/report/exportReportListForExport`;
@@ -9322,6 +9310,9 @@ export default {
         if (this.dailyState !== "" && this.dailyState !== null) {
           sl.state = this.dailyState;
         }
+        if (this.dailyDetailSortByAuditor) {
+          sl.orderByAuditor = 1;
+        }
       } else if (this.ins == 39) {
         fName = `项目薪资成本表.xlsx`;
         url = `/project/exportTimeCostForTable`;
@@ -10845,15 +10836,8 @@ export default {
       }
     },
 
-    // 日报明细表按审核人排序
-    sortDailyDetail(direction) {
-      const newOrderBy = `audit_dept_managerid ${direction}`;
-      if (this.dailyDetailOrderBy === newOrderBy) {
-        // 再次点击同一方向,取消排序
-        this.dailyDetailOrderBy = '';
-      } else {
-        this.dailyDetailOrderBy = newOrderBy;
-      }
+    // 日报明细表按审核人排序勾选处理
+    onDailyDetailSortChange() {
       this.page = 1;
       this.getDailyDetail();
     },
@@ -10880,8 +10864,8 @@ export default {
       if (this.dailyState !== "" && this.dailyState !== null) {
         parameter.state = this.dailyState;
       }
-      if (this.dailyDetailOrderBy) {
-        parameter.orderBy = this.dailyDetailOrderBy;
+      if (this.dailyDetailSortByAuditor) {
+        parameter.orderByAuditor = 1;
       }
       this.postData(`/report/getReportListForExport`, parameter)
         .then((res) => {
@@ -12049,15 +12033,8 @@ export default {
         });
     },
 
-    // 工时日报表按审核人排序
-    sortDailyWorkHours(direction) {
-      const newOrderBy = `audit_dept_managerid ${direction}`;
-      if (this.dailyWorkHoursOrderBy === newOrderBy) {
-        // 再次点击同一方向,取消排序
-        this.dailyWorkHoursOrderBy = '';
-      } else {
-        this.dailyWorkHoursOrderBy = newOrderBy;
-      }
+    // 工时日报表按审核人排序勾选处理
+    onDailyWorkHoursSortChange() {
       this.page = 1;
       this.getDailyWorkHours();
     },
@@ -12084,8 +12061,8 @@ export default {
       if (this.dailyState !== "" && this.dailyState !== null) {
         parameter.state = this.dailyState;
       }
-      if (this.dailyWorkHoursOrderBy) {
-        parameter.orderBy = this.dailyWorkHoursOrderBy;
+      if (this.dailyWorkHoursSortByAuditor) {
+        parameter.orderByAuditor = 1;
       }
       this.postData(`/report/getReportGroupByDay`, parameter)
         .then((res) => {

+ 24 - 14
fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue

@@ -180,18 +180,28 @@
                   v-model="timeType.payOvertime"
                   :label="$t('chargedtocost')"
                 />
-                <!-- <el-checkbox v-model="timeType.doubleOvertime" label="加班双倍成本" :disabled="!timeType.payOvertime"/> -->
-                <el-input
-                  v-model="timeType.overtimeRatio"
-                  placeholder=""
-                  clearable
-                  style="width: 100px; margin: 0 10px 0 20px"
-                  v-if="timeType.payOvertime"
-                  @keyup.native="
-                    timeType.overtimeRatio = oninput(timeType.overtimeRatio, 1)
-                  "
-                ></el-input>
-                <span v-if="timeType.payOvertime">{{ $t("bei-gong-zi") }}</span>
+                <template v-if="timeType.payOvertime">
+                  <el-select
+                    v-model="timeType.payOvertimeMode"
+                    style="width: 180px; margin: 0 10px 0 20px"
+                  >
+                    <el-option :value="0" label="按工资时薪倍数"></el-option>
+                    <el-option :value="1" label="按分组设置固定时薪"></el-option>
+                  </el-select>
+                  <template v-if="timeType.payOvertimeMode === 0 || timeType.payOvertimeMode == null">
+                    <el-input
+                      v-model="timeType.overtimeRatio"
+                      placeholder=""
+                      clearable
+                      style="width: 100px; margin: 0 10px 0 0"
+                      @keyup.native="
+                        timeType.overtimeRatio = oninput(timeType.overtimeRatio, 1)
+                      "
+                    ></el-input>
+                    <span>{{ $t("bei-gong-zi") }}</span>
+                  </template>
+                  <span v-if="timeType.payOvertimeMode === 1" style="color: #999; margin-left: 5px">(请在左侧菜单的用户分组管理中设置加班时薪)</span>
+                </template>
               </template>
             </el-form-item>
           </el-form>
@@ -3726,7 +3736,7 @@ export default {
         }
       }
       if (param.payOvertime) {
-        if (param.overtimeRatio == 0 || param.overtimeRatio == "") {
+        if (param.payOvertimeMode !== 1 && (param.overtimeRatio == 0 || param.overtimeRatio == "")) {
           this.$message({
             message: this.$t("overtimepay"),
             type: "error",
@@ -3851,7 +3861,7 @@ export default {
               : 100;
             this.timeType.reportAutoApproveDays = this.timeType
               .reportAutoApproveDays != null
-              ? this.timeType.reportAutoApproveDays
+              ? this.timeType.reportAutoApproveDaysdd
               : 0;
             this.timeType.stopReport = this.timeType.stopReport ? true : false;
             this.timeType.notAllowedOnNonWorkday = this.timeType

+ 15 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/userGrouping/userGrouping.vue

@@ -10,6 +10,11 @@
       <el-table :data="tableData" border v-loading="tableLoading" style="width: 100%; height: 100%">
         <el-table-column align="center" prop="groupName" label="分组名称"></el-table-column>
         <el-table-column align="center" prop="noProjectPercent" label="非项目工时占比上限(%)"></el-table-column>
+        <el-table-column align="center" prop="overtimeHourCost" label="加班时薪(元)" v-if="user.timeType && user.timeType.payOvertimeMode === 1">
+          <template slot-scope="scope">
+            {{ (scope.row.overtimeHourCost || 0).toFixed(2) }}
+          </template>
+        </el-table-column>
         <el-table-column align="center" prop="operation" label="操作" width="160">
           <template slot-scope="scope">
             <el-button size="small" @click="showGroupVisable(scope.row)">编辑</el-button>
@@ -32,6 +37,11 @@
           <el-input-number v-model="editGroupForm.noProjectPercent" size="small" controls-position="right"
             :precision="0" :min="0" :max="100" class="flex1 textNumber" style="text-align: left;"></el-input-number>
         </div>
+        <div class="groupFormItem" v-if="user.timeType && user.timeType.payOvertimeMode === 1">
+          <div class="label">加班时薪(元)</div>
+          <el-input-number v-model="editGroupForm.overtimeHourCost" size="small" controls-position="right"
+            :precision="2" :min="0" :max="999999" class="flex1 textNumber" style="text-align: left;"></el-input-number>
+        </div>
       </div>
       <div slot="footer" class="dialog-footer">
         <el-button @click="editGroupVisable = false">取 消</el-button>
@@ -52,12 +62,14 @@ export default {
       tableLoading: false,
       editGroupVisable: false,
       editGroupBtnLoading: false,
+      user: JSON.parse(sessionStorage.getItem("user")),
       tableData: [],
       editGroupForm: {
         id: '',
         companyId: '',
         groupName: '',
         noProjectPercent: 0,
+        overtimeHourCost: 0,
       }
     };
   },
@@ -119,6 +131,7 @@ export default {
           companyId: '',
           groupName: '',
           noProjectPercent: 0,
+          overtimeHourCost: 0,
         }
         this.editGroupVisable = true
         return
@@ -126,7 +139,8 @@ export default {
 
       this.editGroupForm = {
         ...row,
-        noProjectPercent: row.noProjectPercent || 0
+        noProjectPercent: row.noProjectPercent || 0,
+        overtimeHourCost: row.overtimeHourCost || 0,
       }
       this.editGroupVisable = true
     },