Explorar o código

Merge remote-tracking branch 'origin/master'

yusm hai 6 meses
pai
achega
9760f8ea0a
Modificáronse 16 ficheiros con 220 adicións e 24 borrados
  1. 8 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DingDingController.java
  2. 3 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java
  3. 7 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserDingdingTime.java
  4. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DingDingService.java
  5. 3 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ContractServiceImpl.java
  6. 125 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java
  7. 5 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  8. 4 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  9. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserCorpwxTimeMapper.xml
  10. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserDingdingTimeMapper.xml
  11. BIN=BIN
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/upload/员工工时导入模板_新版.xlsx
  12. 0 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/PlanController.java
  13. 5 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanServiceImpl.java
  14. 21 3
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/workView/fillReport.vue
  15. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  16. 32 6
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

+ 8 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DingDingController.java

@@ -194,6 +194,14 @@ public class DingDingController {
     public HttpRespMsg refreshUserCardTime(Integer companyId, String userId, String date) {
         return dingDingService.refreshUserCardTime(companyId, userId, date);
     }
+    @RequestMapping("/listUserScheduleByDay")
+    public HttpRespMsg listUserScheduleByDay(Integer companyId, String userId, String date) {
+        HttpRespMsg msg = new HttpRespMsg();
+        UserDingdingTime time = dingDingService.listUserScheduleByDay(companyId, userId, date);
+        msg.data = time;
+        return msg;
+    }
+
 //
 //    @RequestMapping("/syncLeaveTime")
 //    public HttpRespMsg syncLeaveTime(Integer companyId, String userId, String startDate, String endDate) {

+ 3 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java

@@ -578,8 +578,9 @@ public class UserCorpwxTimeController {
                 UserCorpwxTime time = changedCorpwxTimes.get(0);
                 resultMap.put("time", time);
 
-                //如果考勤时间为0,获取当日打卡记录
-                if (time.getWorkHours() == 0) {
+                //如果没有考勤,获取当日打卡记录
+                boolean hasTimeRecord = time.getWorkHours() > 0 || time.getCardTime() >= 1.0 || time.getAskLeaveTime() > 0 || time.getOutdoorTime() > 0;
+                if (!hasTimeRecord) {
                     LocalDateTime start1 = LocalDateTime.of(localDate, LocalTime.MIN);
                     LocalDateTime end1 = LocalDateTime.of(localDate, LocalTime.MAX).withSecond(0).withNano(0);
                     wxCorpInfoService.getUserPunchRecord(user.getCompanyId(),user.getId(),start1,end1,false);

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

@@ -19,7 +19,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2022-04-26
+ * @since 2024-11-03
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -66,6 +66,12 @@ public class UserDingdingTime extends Model<UserDingdingTime> {
     @TableField("work_hours")
     private Float workHours;
 
+    /**
+     * 是否是出差
+     */
+    @TableField("is_offi_business")
+    private Integer isOffiBusiness;
+
 
     @Override
     protected Serializable pkVal() {

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

@@ -2,6 +2,7 @@ package com.management.platform.service;
 
 import com.alibaba.fastjson.JSONArray;
 import com.management.platform.entity.CompanyDingding;
+import com.management.platform.entity.UserDingdingTime;
 import com.management.platform.util.HttpRespMsg;
 import com.taobao.api.ApiException;
 
@@ -62,4 +63,6 @@ public interface DingDingService {
     HttpRespMsg getAuthInfo(String corpid) throws Exception;
 
     HttpRespMsg refreshUserCardTime(Integer companyId, String userId, String date);
+
+    UserDingdingTime listUserScheduleByDay(Integer companyId, String userId, String date);
 }

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

@@ -351,7 +351,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
             return httpRespMsg;
         }
         //合同编号不可重复
-        if (StringUtils.isNotBlank(contract.getNumber())){
+        if (StringUtils.isNotBlank(contract.getNumber()) && user.getCompanyId() != 4215){
             for (Contract ContractNumber: contracts) {
                 if (ContractNumber.getNumber() != null && ContractNumber.getNumber().equals(contract.getNumber())){
                     httpRespMsg.setError("[" + ContractNumber.getNumber() + "]" + MessageUtils.message("contract.numberRepeat"));
@@ -447,7 +447,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
                 return httpRespMsg;
             }
             //合同编号不可重复
-            if (StringUtils.isNotBlank(contract.getNumber())){
+            if (StringUtils.isNotBlank(contract.getNumber()) && user.getCompanyId() != 4215){
                 Contract number = contractMapper.selectOne(new QueryWrapper<Contract>().eq("number", contract.getNumber()).eq("company_id", contract.getCompanyId()));
                 if (number != null && !number.getId().equals(contract.getId())){
                     httpRespMsg.setError("[" + contract.getNumber() + "]" + MessageUtils.message("contract.numberRepeat"));
@@ -601,7 +601,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
                 String remarks = row.getCell(6)==null?null:row.getCell(6).getStringCellValue();
                 Contract item = new Contract();
                 //检查合同编号是否存在
-                if (StringUtils.isNotBlank(No)){
+                if (StringUtils.isNotBlank(No) && user.getCompanyId() != 4215){
                     for (Contract contract : contractList) {
                         if (No.equals(contract.getNumber())){
                             NoExists = true;

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

@@ -2455,6 +2455,19 @@ public class DingDingServiceImpl implements DingDingService {
         }
     }
 
+    private String listUserScheduleByDay(CompanyDingding dingding, String userDingdingId, String accessToken, long dateTime) throws ApiException {
+        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/attendance/schedule/listbyday");
+        OapiAttendanceScheduleListbydayRequest req = new OapiAttendanceScheduleListbydayRequest();
+        System.out.println("管理员id=="+dingding.getAuthUserId());
+        req.setOpUserId(dingding.getAuthUserId());//获取管理员id
+        req.setUserId(userDingdingId);
+        req.setDateTime(dateTime);
+        OapiAttendanceScheduleListbydayResponse rsp = client.execute(req, accessToken);
+        System.out.println("获得排班结果=="+rsp.getErrcode()+", "+rsp.getBody()+",错误消息:"+rsp.getErrmsg());
+        return rsp.getBody();
+    }
+
+
 
     //同步公司全部人员的假期余额
     private void syncQuotaList(String leaveCode,String oaManagerDid, CompanyDingding dingding, List<User> userList, long offset) {
@@ -2723,10 +2736,122 @@ public class DingDingServiceImpl implements DingDingService {
         List<UserDingdingTime> timeList = userDingdingTimeMapper.selectList(new QueryWrapper<UserDingdingTime>().eq("company_id", companyId).eq("user_id", userId).eq("work_date", date));
         if (timeList.size() > 0) {
             msg.setData(timeList.get(0));
+        } else {
+            //尝试查询出差记录
+            if (userId != null) {
+                msg.data = listUserScheduleByDay(companyId, userId, date);
+            }
         }
         return msg;
     }
 
+    @Override
+    public UserDingdingTime listUserScheduleByDay(Integer companyId, String userId, String date) {
+        CompanyDingding dingding = companyDingdingMapper.selectOne(new QueryWrapper<CompanyDingding>().eq("company_id", companyId));
+        try {
+            //date为yyyy-MM-dd格式,转化为时间戳
+            long time = LocalDateTime.parse(date+"T00:00:00").toEpochSecond(ZoneOffset.ofHours(8))*1000;
+            User user = userMapper.selectById(userId);
+            String result = listUserScheduleByDay(dingding, user.getDingdingUserid(), getCorpAccessToken(dingding), time);
+            //抽取出差时间
+            JSONObject json = JSONObject.parseObject(result);
+            JSONArray array = json.getJSONArray("result");
+            String startTime = null;
+            String endTime = null;
+            String realPlanStartTime = null;
+            String realPlanEndTime = null;
+            for (int i=0;i<array.size(); i++) {
+                JSONObject obj = array.getJSONObject(i);
+                //出差类型
+                System.out.println(obj);
+                if (obj.getInteger("approve_biz_type") == 2) {
+                    if (obj.getString("check_type").equals("OnDuty")) {
+                        //出差开始时间
+                        System.out.println("出差开始时间=="+obj.getString("check_date_time"));
+                        startTime = obj.getString("check_date_time");
+                        realPlanStartTime = obj.getString("real_plan_time");
+                    } else {
+                        //出差结束时间
+                        System.out.println("出差结束时间=="+obj.getString("check_date_time"));
+                        endTime = obj.getString("check_date_time");
+                        realPlanEndTime = obj.getString("real_plan_time");
+                    }
+                }
+            }
+            if (startTime != null && endTime != null) {
+                //获取到出差的时间,计算时长
+                DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+                LocalDateTime start = LocalDateTime.parse(startTime, dtf);
+                LocalDateTime end = LocalDateTime.parse(endTime, dtf);
+                UserDingdingTime userDingdingTime = new UserDingdingTime();
+                userDingdingTime.setUserId(userId);
+                userDingdingTime.setIsOffiBusiness(1);//出差
+                userDingdingTime.setDingdingUserid(user.getDingdingUserid());
+                userDingdingTime.setDingdingCorpid(dingding.getCorpid());
+                userDingdingTime.setCompanyId(companyId);
+                userDingdingTime.setWorkDate(LocalDate.parse(date));
+                DateTimeFormatter mmFormat = DateTimeFormatter.ofPattern("HH:mm");
+                userDingdingTime.setStartTime(start.format(mmFormat));
+                userDingdingTime.setEndTime(end.format(mmFormat));
+                //计算周几
+                userDingdingTime.setWeekDay(userDingdingTime.getWorkDate().getDayOfWeek().getValue());
+                userDingdingTime.setWeekDayTxt(DateTimeUtil.getWeekDayTxt(userDingdingTime.getWeekDay()));
+                if (start.getDayOfYear() != end.getDayOfYear()) {
+                    //可能是跨天的情况,要计算,判断
+                    //转化为yyyy-MM-dd格式
+                    String startDateStr = startTime.substring(0, 10);
+                    String endDateStr = endTime.substring(0, 10);
+                    if (startDateStr.equals(date)) {
+                        //第一天
+                        long seconds = end.toEpochSecond(ZoneOffset.ofHours(8)) - start.toEpochSecond(ZoneOffset.ofHours(8));
+                        double workHours = DateTimeUtil.getHoursFromDouble(DateTimeUtil.getHoursFromSeconds((int) seconds));
+                        System.out.println("出差时长=="+workHours);
+                        userDingdingTime.setWorkHours((float)workHours);
+                    } else if (endDateStr.equals(date)) {
+                        //最后一天
+                        long seconds = end.toEpochSecond(ZoneOffset.ofHours(8)) - start.toEpochSecond(ZoneOffset.ofHours(8));
+                        double workHours = DateTimeUtil.getHoursFromDouble(DateTimeUtil.getHoursFromSeconds((int) seconds));
+                        System.out.println("出差时长=="+workHours);
+                        userDingdingTime.setWorkHours((float)workHours);
+                    } else {
+                        //中间天,就是全天
+                        LocalDateTime normalStart = LocalDateTime.parse(realPlanStartTime);
+                        LocalDateTime normalEnd = LocalDateTime.parse(realPlanEndTime);
+                        userDingdingTime.setStartTime(normalStart.format(mmFormat));
+                        userDingdingTime.setEndTime(normalEnd.format(mmFormat));
+                        //计算realPlanEndTime-realPlanStartTime
+                        long seconds = normalEnd.toEpochSecond(ZoneOffset.ofHours(8)) - normalStart.toEpochSecond(ZoneOffset.ofHours(8));
+                        double workHours = DateTimeUtil.getHoursFromDouble(DateTimeUtil.getHoursFromSeconds((int) seconds));
+                        userDingdingTime.setWorkHours((float)(workHours));
+                    }
+                } else {
+                    //就是当天,计算时长
+                    long seconds = end.toEpochSecond(ZoneOffset.ofHours(8)) - start.toEpochSecond(ZoneOffset.ofHours(8));
+                    double workHours = DateTimeUtil.getHoursFromDouble(DateTimeUtil.getHoursFromSeconds((int) seconds));
+                    System.out.println("出差时长=="+workHours);
+                    userDingdingTime.setWorkHours((float)workHours);
+                }
+                if (userDingdingTime.getWorkHours() > 8.0) {
+                    //全天的情况,要减去中间的休息时间
+                    double restTime = 1.0f;
+                    userDingdingTime.setWorkHours(userDingdingTime.getWorkHours()-1.0f);
+                }
+                //保存数据
+                UserDingdingTime ddTime = userDingdingTimeMapper.selectOne(new QueryWrapper<UserDingdingTime>().eq("company_id", companyId).eq("user_id", userId).eq("work_date", date));
+                if (ddTime != null) {
+                    userDingdingTime.setId(ddTime.getId());
+                    userDingdingTimeMapper.updateById(userDingdingTime);
+                } else {
+                    userDingdingTimeMapper.insert(userDingdingTime);
+                }
+                return userDingdingTime;
+            }
+        } catch (ApiException e) {
+            throw new RuntimeException(e);
+        }
+        return null;
+    }
+
     private boolean judgeIsLeader(String userId) {
         int cnt = projectAuditorMapper.selectCount(new QueryWrapper<ProjectAuditor>().eq("auditor_id", userId));
         return cnt>0;

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

@@ -5614,8 +5614,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             return msg;
                         }
                     }
-                    String stringCellValue = row.getCell(7)==null?null:row.getCell(7).getStringCellValue();
-                    String workContent = row.getCell(8)==null?null:row.getCell(8).getStringCellValue();
+                    //新增阶段
+                    String stageName = row.getCell(7)==null?null:row.getCell(7).getStringCellValue();
+                    String stringCellValue = row.getCell(8)==null?null:row.getCell(8).getStringCellValue();
+                    String workContent = row.getCell(9)==null?null:row.getCell(9).getStringCellValue();
                     double time = 0;
                     if (!StringUtils.isEmpty(stringCellValue)) {
                         time = Double.parseDouble(stringCellValue);
@@ -5630,6 +5632,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             report.setGroupId(groupId);
                             report.setReportTimeType(1);
                             report.setWorkingTime(time);
+                            report.setStage(stageName);
                             report.setContent(workContent);
                             report.setMultiWorktime(timeType.getMultiWorktime());
 //                            report.setFillUserid(user.getId());  导入时,处理为自己填写的

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

@@ -1060,6 +1060,8 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     } else {
                         if (corpInfo.getCompanyId() == 481) {
                             time = DateTimeUtil.getHalfHoursFromDouble(time);
+                        } else {
+                            time = DateTimeUtil.getHoursFromDouble(time);
                         }
                     }
                     userCorpwxTime.setWorkHours(time);
@@ -1305,7 +1307,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                             JSONArray data = spTitle.getJSONArray("data");
                             for (int m = 0; m < data.size(); m++) {
                                 String leaveText = data.getJSONObject(m).getString("text");
-                                if (leaveText.contains("假") || leaveText.contains("休")) {
+                                if (leaveText.contains("假") || leaveText.contains("休") || leaveText.contains("其他")) {
                                     //只要有请假,就重新计算
                                     needRecaculate = true;
                                     //获取对应位置的请假时间段
@@ -1588,7 +1590,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                             JSONArray data = spTitle.getJSONArray("data");
                             for (int m = 0; m < data.size(); m++) {
                                 String leaveText = data.getJSONObject(m).getString("text");
-                                if (leaveText.contains("假") || leaveText.contains("休")) {
+                                if (leaveText.contains("假") || leaveText.contains("休") || leaveText.contains("其他")) {
                                     //获取对应位置的请假时间段
                                     String string = holiday.getJSONObject("sp_description").getJSONArray("data").getJSONObject(m).getString("text");
                                     String[] s = string.split(" |\\~");

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

@@ -58,7 +58,7 @@
         </foreach>
         GROUP BY a.`corpwx_userid`,a.name ) card_time
         ON user.name = card_time.name
-        LEFT JOIN (SELECT r.creator_id, SUM(r.working_time) AS projectTime FROM report r WHERE r.company_id = #{companyId} AND  r.create_date in
+        LEFT JOIN (SELECT r.creator_id, SUM(r.working_time) AS projectTime FROM report r WHERE r.company_id = #{companyId} and r.state &lt;= 1 AND  r.create_date in
         <foreach collection="dateList" item="date" open="(" separator="," close=")">
             #{date}
         </foreach> GROUP BY r.`creator_id` ) report_time

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

@@ -15,11 +15,12 @@
         <result column="week_day" property="weekDay" />
         <result column="week_day_txt" property="weekDayTxt" />
         <result column="work_hours" property="workHours" />
+        <result column="is_offi_business" property="isOffiBusiness" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, work_date, dingding_userid, user_id, dingding_corpid, company_id, start_time, end_time, week_day, week_day_txt, work_hours
+        id, work_date, dingding_userid, user_id, dingding_corpid, company_id, start_time, end_time, week_day, week_day_txt, work_hours, is_offi_business
     </sql>
 
 </mapper>

BIN=BIN
fhKeeper/formulahousekeeper/management-platform/src/main/resources/upload/员工工时导入模板_新版.xlsx


+ 0 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/PlanController.java

@@ -56,7 +56,6 @@ public class PlanController {
     }
 
     @RequestMapping("/addOrUpdatePlan")
-    @Transactional
     public HttpRespMsg addOrUpdatePlan(Plan plan){
         return planService.addOrUpdatePlan(plan);
     }

+ 5 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanServiceImpl.java

@@ -25,6 +25,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.util.StringUtils;
 import org.springframework.web.multipart.MultipartFile;
@@ -313,6 +314,7 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg addOrUpdatePlan(Plan plan) {
         User user = userMapper.selectById(request.getHeader("token"));
         boolean isNew=true;
@@ -492,7 +494,9 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                 planProcedureTotals.add(p);
             }
         }
-        planProcedureTotalService.saveOrUpdateBatch(planProcedureTotals);
+        if (planProcedureTotals.size() > 0) {
+            planProcedureTotalService.saveOrUpdateBatch(planProcedureTotals);
+        }
         List<PlanProcedureTotal> totals = planProcedureTotals.stream().filter(ps -> ps.getPlanId().equals(plan.getId())).collect(Collectors.toList());
         if(totals.size()>0){
             double sum = totals.stream().filter(t->t.getTotalWages()!=null).mapToDouble(PlanProcedureTotal::getTotalWages).sum();

+ 21 - 3
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/workView/fillReport.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="distribution">
     <van-nav-bar title="报工" left-text="返回" @click-left="back" fixed left-arrow />
-    <van-cell title="报工日期" :value="reportDate" @click="reportDateShow = true" is-link>
+    <van-cell title="报工日期" :value="reportDate" @click="showReportDate" is-link>
     </van-cell>
     <van-cell title="产品名称" :value="reportForm.product_name"></van-cell>
     <van-cell :title="reportForm.plan_type == 0?'排产工单号':'任务变更通知号'" :value="reportForm.plan_type == 0 ? reportForm.product_scheduling_num : reportForm.task_change_notice_num"></van-cell>
@@ -57,7 +57,7 @@
           </van-cell>
         </van-cell-group>
         <div style="margin: 16px;">
-          <van-button round block type="primary" native-type="submit" :loading="saving">
+          <van-button round block type="primary" native-type="submit" v-if="supplementaryReportFlag || dateOfTheDay == reportDate" :loading="saving">
             提交
           </van-button>
           <p v-if="reportForm.canBeDeleted" @click="deleteReport" style="margin:16px;text-align:center;color:#666;">删除</p>
@@ -101,7 +101,9 @@ export default {
         progress: 10,
       },
       inputSteelNum:null,
-      oldPlanSteelStampNumberList:[]
+      oldPlanSteelStampNumberList:[],
+      supplementaryReportFlag: true, // 是否补报
+      dateOfTheDay: this.getDateOfTheDay(), // 当天日期
     };
   },
   computed: {},
@@ -116,8 +118,24 @@ export default {
     this.reportId = this.$route.query.otherId;
 
     this.getMyPlanProcedureList();
+    const { functionList = [] } = this.user
+    this.supplementaryReportFlag = functionList.filter(item => item.name == '补报').length > 0
   },
   methods: {
+    // 获取当天的日期 YYYY-MM-DD
+    getDateOfTheDay() {
+      const date = new Date();
+      const year = date.getFullYear();
+      const month = date.getMonth() + 1;
+      const day = date.getDate();
+      return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`;
+    },
+    showReportDate() {
+      if(!this.supplementaryReportFlag) {
+        return
+      }
+      this.reportDateShow = true
+    },
     formatDate(date) {
       // 中国标准时间转成 YYYY-MM-DD
       const year = date.getFullYear();

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

@@ -417,7 +417,7 @@
                     </el-form-item>
                     <!--考勤时长显示-->
                     <el-form-item :label="$t('other.attendancePunch')" v-if="workForm.showRefresh || user.companyId == 5978">
-                        <span v-if="workForm.time">{{workForm.time.startTime}}-{{workForm.time.endTime}}, 工作{{workForm.time.workHours}}{{$t('time.hour')}}
+                        <span v-if="workForm.time">{{workForm.time.startTime}}-{{workForm.time.endTime}}, {{workForm.time.isOffiBusiness?'出差':'工作'}}{{workForm.time.workHours}}{{$t('time.hour')}}
                         <span v-if="workForm.time.askLeaveTime">|&nbsp;{{ $t('other.AskForLeave') }}{{ workForm.time.askLeaveTime }}{{$t('time.hour')}}</span>
                         <span v-if="workForm.time.otTime" style="color:#FFA500;">|&nbsp;加班{{ workForm.time.otTime }}{{$t('time.hour')}}</span>
                         </span>

+ 32 - 6
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

@@ -31,7 +31,7 @@
                 <van-grid-item v-if="user.timeType.enableNewWeeklyfill == 1" :class="999 == inbtn ? 'inbtn' : ''">
                     <van-button class="selectgxbtn"
                     type="default"
-                    size="mini" @click="switchWeekly(999)">周总结</van-button>
+                    size="mini" @click="switchWeekly(999)">{{ user.companyId == wuqiId ? '周报' : '周总结' }}</van-button>
                 </van-grid-item>
                 <van-grid-item v-if="weekIndex != 7 && user.timeType.enableNewWeeklyfill != 1">
                     <van-button type="default" size="mini" class="selectgxbtn" @click="addWeekIndex()" icon="plus"></van-button>
@@ -297,8 +297,8 @@
                             </template>
                         </van-cell>
                         <van-field class="form_input"
-                        v-model="item.content" name="content" type="textarea" :label="user.companyId==781?'具体内容与结果':'工作事项'" placeholder="请输入" :disabled="item.state<=1"
-                        rows="3" autosize :rules="user.timeType.workContentState == 1 ? [{ required: true, message: user.companyId==781?'具体内容与结果':'工作事项' }] : null" />
+                        v-model="item.content" name="content" type="textarea" :label="user.companyId==781?'具体内容与结果': user.companyId == wuqiId ? '日报' : '工作事项'" :placeholder="user.companyId == wuqiId ? '所在项目负责哪一模块(可重复填写),无需涉及技术细节。' : '请输入'" :disabled="item.state<=1"
+                        rows="3" autosize :rules="user.timeType.workContentState == 1 ? [{ required: true, message: user.companyId==781?'具体内容与结果':user.companyId == wuqiId ? '日报' : '工作事项' }] : null" :maxlength="user.companyId == wuqiId ? 30 : 150" />
                         </div>
                         
                         <!-- 多个时间和工作事项的选择方式 -->
@@ -402,7 +402,7 @@
 
             <!-- 周总结 -->
             <div v-if="user.timeType.enableNewWeeklyfill == 1 && inbtn == 999">
-                <div class="van-cell-group__title">周总结</div>
+                <div class="van-cell-group__title">{{ user.companyId == wuqiId ? '周报' : '周总结'}}</div>
                 <van-field
                     v-model.trim="summary"
                     rows="9"
@@ -410,7 +410,7 @@
                     type="textarea"
                     maxlength="1000"
                     show-word-limit
-                    placeholder="请输入周总结"
+                    :placeholder="user.companyId == wuqiId ? '本周主要工作回顾、遗留事宜的初步处理方案和预计完成时间、下周工作的计划,尽可能详细。' : '请输入周总结'"
                 />
             </div>
              
@@ -580,6 +580,8 @@
                 summary: '', // 周总结
 
                 temporaryStorage: false, // 是否开启暂存
+
+                wuqiId: '1071'
             };
         },
         methods: {
@@ -1963,7 +1965,31 @@
                 }
                 console.log(this.form)
                 console.log(this.currentForm)
-                // return
+                // 针对物奇的判断
+                let wuqiflag = false
+                for(let idx in this.form) {
+                    const item = this.form[idx].domains || []
+                    const createDate = this.form[idx].createDate
+                    for (let index in item) {
+                        if(item[index].projectId && !item[index].content && this.user.companyId == this.wuqiId) {
+                            this.$toast(`${createDate} 日报请填写完整`)
+                            wuqiflag = true
+                            return
+                        } else {
+                            wuqiflag = false
+                        }
+                    }
+                }
+                const hasProjectIdValue = this.form.some(obj => 
+                    obj.domains.some(domain => domain.projectId && domain.projectId !== '')
+                );
+                if(hasProjectIdValue && !this.summary && this.user.companyId == this.wuqiId) {
+                    this.$toast(`请填写周报`)
+                    return
+                }
+                if(flag) {
+                    return
+                }
                 const { allday, workContentState, enableNewWeeklyfill, reportAuditType } = this.user.timeType // 系统设置的每日工作时间
                 // 针对物奇做的判断
                 if(this.user.timeType.enableNewWeeklyfill == 1){