Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

yusm 7 месяцев назад
Родитель
Сommit
7692026d26

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -2925,5 +2925,10 @@ public class ReportController {
         }
         //TODO: 针对钉钉和微信公众号进行推送
     }
+
+    @RequestMapping("/getCurAuditNode")
+    public HttpRespMsg getCurAuditNode(String date, String userId) {
+        return reportService.getCurAuditNode(date,userId);
+    }
 }
 

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

@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2024-08-18
+ * @since 2024-09-23
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -615,6 +615,13 @@ public class TimeType extends Model<TimeType> {
     @TableField(exist = false)
     private Integer saasSyncContact;
 
+    /**
+     * 是否校验考勤数据的加班时长
+     */
+    @TableField("verify_card_overtime")
+    private Integer verifyCardOvertime;
+
+
     @Override
     protected Serializable pkVal() {
         return this.companyId;

+ 20 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserCorpwxTime.java

@@ -1,25 +1,25 @@
 package com.management.platform.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.time.LocalDate;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import java.io.Serializable;
-import java.time.LocalDate;
-
 /**
  * <p>
  * 
  * </p>
  *
  * @author Seyason
- * @since 2022-01-07
+ * @since 2024-09-23
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -97,6 +97,20 @@ public class UserCorpwxTime extends Model<UserCorpwxTime> {
     private String weekDayTxt;
 
 
+
+    /**
+     * 加班状态:0-无加班;1-正常;2-缺时长
+     */
+    @TableField("ot_status")
+    private Integer otStatus;
+
+    /**
+     * 加班时长
+     */
+    @TableField("ot_time")
+    private Double otTime;
+
+
     @Override
     protected Serializable pkVal() {
         return this.id;

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

@@ -169,4 +169,6 @@ public interface ReportService extends IService<Report> {
     HttpRespMsg batchDenyHisReport(Integer reportAuditLogId, String reason, HttpServletRequest request) throws Exception;
 
     HttpRespMsg exportListByState(Integer state, Integer departmentId, Integer projectId, String date, String startDate, String endDate, String userId, String auditUserId, HttpServletRequest request) throws Exception;
+
+    HttpRespMsg getCurAuditNode(String date, String userId);
 }

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

@@ -9949,39 +9949,37 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             QueryWrapper<Report> eq = new QueryWrapper<Report>().eq("create_date", createDate).eq("creator_id", userId);
             List<Report> list = reportMapper.selectList(eq);
             Report oneReport = null;
+            boolean shouldUpdateReport = true;
             if (list.size() == 0) {
                 //httpRespMsg.setError("日报已不存在");
                 throw new Exception(MessageUtils.message("profession.alreadyNull"));
-            } else  {
-                if (list.get(0).getState() == 3) {
-                    //只有已通过的历史记录才能撤销
-                    continue;
-                } else if (list.get(0).getState() == 2) {
-                    //只有已通过的历史记录才能撤销
-                    //httpRespMsg.setError("该日报已被撤销,无法重复操作");
-                    continue;
-                }
+            } else  if (list.get(0).getState() == 3 || list.get(0).getState() == 2){
+                shouldUpdateReport = false;
             }
             oneReport = list.get(0);
-            //直接进行项目经理审核驳回
-            reportMapper.update(new Report().setState(2)
-                            .setRejectReason(reason).setRejectUserid(user.getId()).setRejectUsername(user.getName()),eq);
 
-            TimeType timeType = timeTypeMapper.selectById(company.getId());
-            if (timeType.getReportAuditType() == 2 || timeType.getReportAuditType() == 9) {
-                List<Report> rList = list;
-                //退回任务分组审核状态
-                List<Report> newList = new ArrayList<>();
-                for (Report r : rList) {
-                    Report upR = new Report();
-                    upR.setId(r.getId());
-                    upR.setGroupAuditState(0);
-                    String inchargerId = taskGroupMapper.selectById(r.getGroupId()).getInchargerId();
-                    upR.setProjectAuditorId(inchargerId);
-                    upR.setProjectAuditorName(userMapper.selectById(inchargerId).getName());
-                    newList.add(upR);
+            //直接进行项目经理审核驳回
+            if (shouldUpdateReport) {
+                reportMapper.update(new Report().setState(2)
+                        .setRejectReason(reason).setRejectUserid(user.getId()).setRejectUsername(user.getName()),eq);
+                TimeType timeType = timeTypeMapper.selectById(company.getId());
+                if (timeType.getReportAuditType() == 2 || timeType.getReportAuditType() == 9) {
+                    List<Report> rList = list;
+                    //退回任务分组审核状态
+                    List<Report> newList = new ArrayList<>();
+                    for (Report r : rList) {
+                        Report upR = new Report();
+                        upR.setId(r.getId());
+                        upR.setGroupAuditState(0);
+                        String inchargerId = taskGroupMapper.selectById(r.getGroupId()).getInchargerId();
+                        upR.setProjectAuditorId(inchargerId);
+                        upR.setProjectAuditorName(userMapper.selectById(inchargerId).getName());
+                        newList.add(upR);
+                    }
+                    if (newList.size() > 0) {
+                        updateBatchById(newList);
+                    }
                 }
-                updateBatchById(newList);
             }
 
             //修改审核记录的状态
@@ -10115,4 +10113,13 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         String fileName="待审核日报列表_"+System.currentTimeMillis();
         return excelExportService.exportGeneralExcelByTitleAndList(wxCorpInfo,dingding,fileName,dataList,path);
     }
+
+    @Override
+    public HttpRespMsg getCurAuditNode(String date, String userId) {
+        List<Report> list = reportMapper.selectList(new QueryWrapper<Report>().eq("create_date", date).eq("creator_id", userId));
+        if (list.size() == 0) {
+            return new HttpRespMsg().setError("日报已不存在");
+        }
+        return null;
+    }
 }

+ 9 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -1628,6 +1628,15 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                                 }
                             }
                         }
+                        //处理加班时长
+                        JSONObject otInfo = jsonObject.getJSONObject("ot_info");
+                        Integer s = otInfo.getIntValue("ot_status");
+                        Integer duration = otInfo.getInteger("ot_duration");//秒为单位
+                        ct.setOtStatus(s);
+                        //加班
+                        double otTime = convertDayTimeToHours(DateTimeUtil.getHoursFromSeconds(duration));
+                        if (showLog) System.out.println("加班时长:"+otTime);
+                        ct.setOtTime(otTime);
                         //校正请假时长
                         if (ct.getAskLeaveTime() != null && ct.getAskLeaveTime() == 24.0) {
                             ct.setAskLeaveTime(8.0);//24小时为一天,修正为8小时

Разница между файлами не показана из-за своего большого размера
+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml


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

@@ -18,18 +18,20 @@
         <result column="ask_leave_time" property="askLeaveTime" />
         <result column="week_day" property="weekDay" />
         <result column="week_day_txt" property="weekDayTxt" />
+        <result column="ot_status" property="otStatus" />
+        <result column="ot_time" property="otTime" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, create_date, corpwx_userid, start_time, end_time, card_time, work_hours, company_id, wx_corpid, name, outdoor_time, ask_leave_time, week_day, week_day_txt
+        id, create_date, corpwx_userid, start_time, end_time, card_time, work_hours, company_id, wx_corpid, name, outdoor_time, ask_leave_time, week_day, week_day_txt, ot_status, ot_time
     </sql>
 
 
     <select id="getUserDataList" resultType="java.util.HashMap" >
         SELECT user.id as userId, department.department_name as departmentName, DATE_FORMAT(a.create_date, '%Y/%m/%d') as createDate,a.start_time as startTime, a.end_time as endTime, a.work_hours as workHours, user.name as username,user.corpwx_userid as corpwxUserid,a.week_day as weekDay,
         week_day_txt as weekDayTxt,card_time as cardTime, outdoor_time as outdoorTime, ask_leave_time as askLeaveTime FROM user_corpwx_time a
-            LEFT JOIN user ON  user.name = a.name AND a.`company_id` = user.`company_id`
+        LEFT JOIN user ON  user.name = a.name AND a.`company_id` = user.`company_id`
         left join department on department.department_id = user.department_id
         WHERE a.create_date BETWEEN #{startDate} AND #{endDate}
         AND a.company_id = #{companyId}
@@ -46,20 +48,20 @@
     <select id="getUserDataRatioList" resultType="java.util.HashMap" >
         SELECT user.id AS userId, user.`name` as username,department.department_name as departmentName, user.`corpwx_userid` as corpwxUserid, IFNULL(card_time.workHours, 0) as workHours, IFNULL(report_time.projectTime, 0)  AS projectTime FROM
         user left join department on department.department_id = user.department_id
-            LEFT JOIN
+        LEFT JOIN
         (SELECT a.corpwx_userid,a.name, SUM(a.work_hours) AS workHours FROM user_corpwx_time a, user b WHERE a.company_id = #{companyId}
         AND (a.`corpwx_userid` = b.`corpwx_userid` OR (a.corpwx_userid IS NULL AND a.name = b.name))
-            AND (a.`create_date` &gt;= b.`induction_date` OR b.`induction_date` IS NULL)
-            AND  a.create_date in
-           <foreach collection="dateList" item="date" open="(" separator="," close=")">
-                #{date}
-            </foreach>
-           GROUP BY a.`corpwx_userid`,a.name ) card_time
+        AND (a.`create_date` &gt;= b.`induction_date` OR b.`induction_date` IS NULL)
+        AND  a.create_date in
+        <foreach collection="dateList" item="date" open="(" separator="," close=")">
+            #{date}
+        </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
-            <foreach collection="dateList" item="date" open="(" separator="," close=")">
-                #{date}
-            </foreach> GROUP BY r.`creator_id` ) report_time
+        <foreach collection="dateList" item="date" open="(" separator="," close=")">
+            #{date}
+        </foreach> GROUP BY r.`creator_id` ) report_time
         ON report_time.creator_id = user.id
         WHERE user.company_id = #{companyId}
         <if test="userId != null">

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json

@@ -1933,6 +1933,7 @@
   "hao": "number",
   "haoHanQianTianBao": "Fill in before (including) the number.",
   "jiaBanShiChangXiaoYan": "Overtime duration verification",
+  "kaoqingjiabanjiaoyan": "attendance overtime verification",
   "kaiQiHouChaoGuoXiangMuJiHuaJieShuRiQiDeRiBaoJiangBuKeTianBao": "Daily reports that exceed the end date of the project plan after opening will not be able to be filled in",
   "keYong_0BiaoShiDaiShenHeTiaoShuLiRu_0JiangBeiTiHuanWei_10": "({0} can be used to represent the number of pending reviews, for example: {0} will be replaced with 10.)",
   "keYong_0BiaoShiLouTianRiQiLiRu_0JiangBeiTiHuanWei_05240525": "(You can use {0} to indicate a missing date, for example: {0} will be replaced with 05/24, 05/25.)",

+ 2 - 0
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json

@@ -1921,6 +1921,8 @@
   "liXiangShuJu": "立项数据",
   "liXiangDaoChuXlsx": "立项导出.xlsx",
   "jiaBanShiChangXiaoYan": "加班时长校验",
+  "kaoqingjiabanjiaoyan": "考勤加班时长校验",
+  "kaoqingjiabanjiaoyanTip": "每日填报工时总加班时长不得超过考勤的加班时长",
   "gongZuoRiTianXieJiaBanShiChangBuDeChaoGuoZongGongZuoShiChangZhengChangGongZuoShiChang": "工作日填写加班时长不得超过总工作时长-正常工作时长",
   "meiYue": "每月",
   "hao": "号",

+ 107 - 90
fhKeeper/formulahousekeeper/timesheet/src/views/contract/components/customContract.vue

@@ -96,8 +96,8 @@
       <el-table-column prop="useDepartment" label="使用部门" min-width="190"></el-table-column>
       <el-table-column prop="fundsSource" label="经费来源" min-width="190">
         <template slot-scope="scope">
-          <span v-if="scope.row.payWay == 1">科研</span>
-          <span v-if="scope.row.payWay == 2">其他(专项等)</span>
+          <span v-if="scope.row.fundsSource == 1">科研</span>
+          <span v-if="scope.row.fundsSource == 2">其他(专项等)</span>
         </template>
       </el-table-column>
       <el-table-column prop="undertaker" label="合同承办人" min-width="190"></el-table-column>
@@ -114,18 +114,6 @@
       </el-table-column>
       <el-table-column prop="amountsNoTax" label="合同金额(元)/不含税价" min-width="190"></el-table-column>
       <el-table-column prop="currency" label="币种" min-width="190"></el-table-column>
-      <el-table-column prop="payedAmount" label="已付款金额(元)" min-width="190"></el-table-column>
-      <el-table-column prop="payWay" label="付款类型" min-width="190">
-        <template slot-scope="scope">
-          <span v-if="scope.row.payWay == 1">预付</span>
-          <span v-if="scope.row.payWay == 2">报账</span>
-        </template>
-      </el-table-column>
-      <el-table-column prop="billNumber" label="凭证号" min-width="190"></el-table-column>
-      <el-table-column prop="reservedAmounts" label="已冲销金额" min-width="190"></el-table-column>
-      <el-table-column prop="reservedBillNumber" label="冲销凭证号" min-width="190"></el-table-column>
-      <el-table-column prop="totalPayedAmounts" label="付款总金额" min-width="190"></el-table-column>
-      <el-table-column prop="pendingAmounts" label="待付款金额" min-width="190"></el-table-column>
       <el-table-column prop="finishStatus" label="合同状态(是否结清)" min-width="190">
         <template slot-scope="scope">
           <span v-if="scope.row.finishStatus == 1">履约中</span>
@@ -157,7 +145,7 @@
       ></el-pagination>
     </el-col>
 
-    <el-dialog :title="dialogTitle + $t('he-tong')" :visible.sync="addDialog" v-if="addDialog" :close-on-click-modal="false" customClass="customWidth" width="900px" :top="'7.8vh'">
+    <el-dialog :title="dialogTitle + $t('he-tong')" :visible.sync="addDialog" v-if="addDialog" :close-on-click-modal="false" customClass="customWidth" width="1200px" :top="'7.8vh'">
       <div style="height: 72vh;overflow-y: auto;overflow-x: hidden;">
         <el-form ref="contractForm" :model="contractForm" label-width="160px" :rules="rules" class="contractForm">
           <el-form-item :label="$t('contractno')">
@@ -242,7 +230,7 @@
             <el-date-picker v-model="contractForm.filingsDate" value-format="yyyy-MM-dd" type="date" :placeholder="$t('optiondate')"></el-date-picker>
           </el-form-item>
           <el-form-item label="合同金额(元)/含税价">
-            <el-input v-model="contractForm.amounts" :placeholder="$t('peaseenterthe')" clearable>
+            <el-input v-model="contractForm.amounts" :placeholder="$t('peaseenterthe')" @change="chgPayedAmount()" clearable>
               <span slot="prefix">¥</span>
             </el-input>
           </el-form-item>
@@ -259,38 +247,6 @@
           <el-form-item label="币种">
             <el-input v-model="contractForm.currency" :placeholder="$t('peaseenterthe')" clearable></el-input>
           </el-form-item>
-          <el-form-item label="已付款金额(元)">
-            <el-input v-model="contractForm.payedAmount" :placeholder="$t('peaseenterthe')" clearable>
-              <span slot="prefix">¥</span>
-            </el-input>
-          </el-form-item>
-          <el-form-item label="付款类型">
-            <el-select v-model="contractForm.payWay" placeholder="请选择">
-              <el-option label="付款" :value="1"></el-option>
-              <el-option label="报账" :value="2"></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="凭证号">
-            <el-input v-model="contractForm.billNumber" :placeholder="$t('peaseenterthe')" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="已冲销金额">
-            <el-input v-model="contractForm.reservedAmounts" :placeholder="$t('peaseenterthe')" clearable>
-              <span slot="prefix">¥</span>
-            </el-input>
-          </el-form-item>
-          <el-form-item label="冲销凭证号">
-            <el-input v-model="contractForm.reservedBillNumber" :placeholder="$t('peaseenterthe')" clearable></el-input>
-          </el-form-item>
-          <el-form-item label="付款总金额">
-            <el-input v-model="contractForm.totalPayedAmounts" :placeholder="$t('peaseenterthe')" clearable>
-              <span slot="prefix">¥</span>
-            </el-input>
-          </el-form-item>
-          <el-form-item label="待付款金额">
-            <el-input v-model="contractForm.pendingAmounts" :placeholder="$t('peaseenterthe')" clearable>
-              <span slot="prefix">¥</span>
-            </el-input>
-          </el-form-item>
           <el-form-item label="合同状态(是否结清)">
             <el-select v-model="contractForm.finishStatus" placeholder="请选择">
               <el-option label="履约中" :value="1"></el-option>
@@ -304,9 +260,53 @@
             <el-input v-model="contractForm.remarks" :disabled="contractForm.status == 0" :placeholder="$t('peaseenterthe')" type="textarea" :rows="3" clearable></el-input>
           </el-form-item>
 
-          <el-form-item :label="$t('hui-kuan-ji-hua')">
+          <el-form-item label="付款计划">
             <el-table :data="contractPaymentList" size="small" :key="Math.random()" :height="'300px'" show-header="false" style="margin-top:10px;">
-                  <el-table-column prop="isPayed" >
+              <el-table-column prop="isPayed" width="120">
+                  <template slot-scope="scope">
+                      <el-checkbox v-model="scope.row.isPayed" >已付款</el-checkbox>
+                  </template>
+                  <template slot="header" >
+                      <span style="font-size:14px;font-weight:normal;">是否已付款</span>
+                  </template>
+              </el-table-column>
+                <el-table-column prop="payDate" label="付款日期" width="150">
+                  <template slot-scope="scope">
+                      <div><el-date-picker type="date" v-model="scope.row.payDate" style="width:140px;" :placeholder="$t('optiondate')" value-format="yyyy-MM-dd" size="small"></el-date-picker></div>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="payedAmount" label="已付款金额(元)" width="160">
+                  <template slot-scope="scope">
+                    <el-input-number v-model="scope.row.payedAmount" controls-position="right" @change="chgPayedAmount()" :min="0" size="small" :precision="2"></el-input-number>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="payType" label="付款类型" width="140">
+                  <template slot-scope="scope">
+                    <el-select v-model="scope.row.payType" placeholder="请选择" size="small">
+                      <el-option label="预付" :value="1"></el-option>
+                      <el-option label="报账" :value="2"></el-option>
+                    </el-select>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="billNumber" label="凭证号" width="210">
+                  <template slot-scope="scope">
+                    <el-input v-model="scope.row.billNumber" :placeholder="$t('peaseenterthe')" clearable  size="small"></el-input>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="pendingAmounts" label="待付款金额(元)" width="210">
+                  <template slot-scope="scope">
+                    {{ scope.row.pendingAmounts }}
+                  </template>
+                </el-table-column>
+                <el-table-column width="80" fixed="right">
+                    <template slot-scope="scope">
+                        <el-button icon="el-icon-delete" size="mini" style="margin-left:10px;" @click.stop.native="deleteItem(scope.$index)"></el-button>
+                    </template>
+                    <template slot="header" >
+                        <el-link type="primary" :underline="false" @click="addItem">{{ $t('addTian') }}</el-link>
+                    </template>
+                </el-table-column>
+                  <!-- <el-table-column prop="isPayed" >
                       <template slot-scope="scope">
                           <el-checkbox v-model="scope.row.isPayed" >{{ $t('yi-hui-kuan') }}</el-checkbox>
                       </template>
@@ -334,7 +334,7 @@
                       <template slot="header" >
                           <el-link type="primary" :underline="false" @click="addItem">{{ $t('addTian') }}</el-link>
                       </template>
-                  </el-table-column>
+                  </el-table-column> -->
               </el-table>
           </el-form-item>
           
@@ -374,7 +374,7 @@
       </div>
     </el-dialog>
 
-    <el-dialog :title="$t('cha-kan-he-tong')" :visible.sync="lookoverDialog" v-if="lookoverDialog" :close-on-click-modal="false" customClass="customWidth" width="900px">
+    <el-dialog :title="$t('cha-kan-he-tong')" :visible.sync="lookoverDialog" v-if="lookoverDialog" :close-on-click-modal="false" customClass="customWidth" width="1200px" top="7.5vh">
       <div style="height: 72vh;overflow-y: auto;overflow-x: hidden;">
         <el-form label-width="160px" class="lookoverContract clearfix">
           <el-form-item :label="$t('contractno')">
@@ -454,25 +454,6 @@
           <el-form-item label="币种">
             {{contractForm.currency}}
           </el-form-item>
-          <el-form-item label="已付款金额(元)">
-            ¥ {{contractForm.payedAmount}}
-          </el-form-item>
-          <el-form-item label="付款类型">
-            <span v-if="contractForm.payWay">付款</span>
-            <span v-if="contractForm.payWay">报账</span>
-          </el-form-item>
-          <el-form-item label="凭证号">
-            {{contractForm.billNumber}}
-          </el-form-item>
-          <el-form-item label="已冲销金额">
-            ¥ {{contractForm.reservedAmounts}}
-          </el-form-item>
-          <el-form-item label="冲销凭证号">
-            {{contractForm.reservedBillNumber}}
-          </el-form-item>
-          <el-form-item label="付款总金额">
-            ¥ {{contractForm.totalPayedAmounts}}
-          </el-form-item>
           <el-form-item label="合同状态(是否结清)">
             <span v-if="contractForm.finishStatus == 1">履约中</span>
             <span v-else>履约完成</span>
@@ -484,27 +465,25 @@
           <el-form-item style="width:100%" :label="$t('bei-zhu')">
             {{contractForm.remarks}}
           </el-form-item>
-          <el-form-item style="width:100%" :label="$t('hui-kuan-ji-hua')">
+          <el-form-item style="width:100%" label="付款计划">
             <el-table :data="contractPaymentList" size="small" :key="Math.random()" :height="'300px'" show-header="false" style="margin-top:10px;">
                   <el-table-column prop="isPayed" >
                       <template slot-scope="scope">
-                        {{ scope.row.isPayed?$t('yi-hui-kuan'):$t('wei-hui-kuan') }}
+                        {{ scope.row.isPayed?'已付款':'未付款' }}
                       </template>
                       <template slot="header" >
-                          <span style="font-size:14px;font-weight:normal;">{{ $t('shi-fou-yi-hui-kuan') }}</span>
-                      </template>
-                  </el-table-column>
-                  <el-table-column prop="payDate"  :label="$t('hui-kuan-ri-qi')" width="210">
-                      <template slot-scope="scope">
-                          <div>{{ scope.row.payDate }}</div>
+                          <span style="font-size:14px;font-weight:normal;">是否已付款</span>
                       </template>
                   </el-table-column>
-                  
-                  <el-table-column prop="amount" :label="$t('hui-kuan-jin-e')">
-                      <template slot-scope="scope">
-                        <div>{{ scope.row.amount }}</div>
-                      </template>
+                  <el-table-column prop="payDate" label="付款日期" width="150"></el-table-column>
+                  <el-table-column prop="payedAmount" label="已付款金额(元)" width="160"></el-table-column>
+                  <el-table-column prop="payType" label="付款类型" width="140">
+                    <template slot-scope="scope">
+                      {{scope.row.payType?'预付':'报账'}}
+                    </template>
                   </el-table-column>
+                  <el-table-column prop="billNumber" label="凭证号" width="210"></el-table-column>
+                  <el-table-column prop="pendingAmounts" label="待付款金额(元)" width="180"></el-table-column>
               </el-table>
           </el-form-item>
           
@@ -712,6 +691,23 @@ export default {
     //   console.log('test',row);
     //   // this.$refs.uploadFile.submit()
     // },
+    chgPayedAmount() {
+      const { amounts } = this.contractForm
+      const list = this.contractPaymentList || []
+      let totalNum = +amounts || 0
+      if(amounts <= 0 || list.length <= 0) {
+        return
+      }
+      
+      for(let i in list) {
+        if(list[i].payedAmount) {
+          totalNum = totalNum - list[i].payedAmount
+          list[i].pendingAmounts = totalNum
+        }
+      }
+
+      this.contractPaymentList = list
+    },
     restrictNumber(targetId) {
                 let inpu = document.getElementById(targetId);
                 inpu.value = inpu.value.replace(/[^\d.]/g, "");  //仅保留数字和"."
@@ -747,8 +743,20 @@ export default {
         },
         //添加合同回款情况
         addItem() {
-            let p = 0;
-            this.contractPaymentList.push( { contractId:this.contractForm.id, isPayed:false,payDate: null, amount:0.0});
+            // let p = 0;
+            // this.contractPaymentList.push( { contractId:this.contractForm.id, isPayed:false,payDate: null, amount:0.0});
+            
+            let val = {
+              contractId:this.contractForm.id, 
+              isPayed:false,
+              payDate: null,
+              payedAmount: 0,
+              payType: 1,
+              billNumber: '',
+              pendingAmounts: 0,
+            }
+
+            this.contractPaymentList.push(val)
         },
         
         getProjectList() {
@@ -1013,6 +1021,11 @@ export default {
       this.http.post('/contract-payment/getList',{contractId: this.contractForm.id},
       res => {
         if(res.code == 'ok'){
+          res.data = res.data.map(item => ({
+            ...item,
+            payType: item.payType ? 1 : 0
+          }));
+          console.log(res.data, '<==== 数据')
           this.contractPaymentList = res.data;
         }else{
           this.$message({
@@ -1158,14 +1171,14 @@ export default {
               })
               return;
             }
-            if (!this.contractPaymentList[i].amount) {
+            if (!this.contractPaymentList[i].payedAmount) {
               this.$message({
                 message: this.$t('hui-kuan-jinebu-neng-wei-0'),
                 type: 'error'
               })
               return;
             }
-            totalPayment += parseFloat(this.contractPaymentList[i].amount);
+            totalPayment += parseFloat(this.contractPaymentList[i].payedAmount);
           }
           if (totalPayment > parseFloat(this.contractForm.amounts)) {
             this.$message({
@@ -1177,11 +1190,16 @@ export default {
           this.submitLoading = true
           delete this.contractForm.files
           this.contractForm.paymentListStr = JSON.stringify(this.contractPaymentList);
+          delete this.contractForm.msg
+          delete this.contractForm.nextPaymentDate
+          delete this.contractForm.nextPaymentAmount
+          delete this.contractForm.payCustomizedData
+          delete this.contractForm.checkerId
           this.http.post(this.dialogTitle == this.$t('add') ? '/contract/addContract' : '/contract/editContract',this.contractForm,
           res => {
             this.submitLoading = false
-            this.addDialog = false
             if(res.code == 'ok'){
+              this.addDialog = false
               this.$message({
                 message: res.msg,
                 type: 'success'
@@ -1199,7 +1217,6 @@ export default {
             }
           },err => {
             this.submitLoading = false
-            this.addDialog = false
             this.$message({
               message: err,
               type: 'error'

+ 8 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue

@@ -55,6 +55,12 @@
                                         <i class="el-icon-question" style="color:#606266"></i>
                             </el-tooltip>
                             </el-form-item>
+                            <el-form-item v-if="timeType.fillOvertime && timeType.syncCorpwxTime">
+                            <el-checkbox v-model="timeType.verifyCardOvertime" :label="$t('kaoqingjiabanjiaoyan')" />
+                            <el-tooltip effect="dark" :content="$t('kaoqingjiabanjiaoyanTip')" placement="top-start">
+                                        <i class="el-icon-question" style="color:#606266"></i>
+                            </el-tooltip>
+                            </el-form-item>
                             <template v-if="timeType.fillOvertime">
                             <el-checkbox v-model="timeType.payOvertime" :label="$t('chargedtocost')" />
                             <!-- <el-checkbox v-model="timeType.doubleOvertime" label="加班双倍成本" :disabled="!timeType.payOvertime"/> -->
@@ -1635,6 +1641,7 @@
                         param.fillAhead = param.fillAhead ? 1 : 0
                         param.includeWeekends = param.includeWeekends ? 1 : 0
                         param.workOvertimeNeedCheck = param.workOvertimeNeedCheck ? 1 : 0
+                        param.verifyCardOvertime = param.verifyCardOvertime ? 1 : 0
                         param.mainProjectState = param.mainProjectState ? 1 : 0
                         param.stopReport = param.stopReport? 1: 0;
                         param.notAllowedOnNonWorkday = param.notAllowedOnNonWorkday? 1: 0;
@@ -1734,6 +1741,7 @@
                             this.timeType.fillAhead = this.timeType.fillAhead ? true : false
                             this.timeType.includeWeekends = this.timeType.includeWeekends ? true : false
                             this.timeType.workOvertimeNeedCheck = this.timeType.workOvertimeNeedCheck ? true : false
+                            this.timeType.verifyCardOvertime = this.timeType.verifyCardOvertime ? true : false
                             this.timeType.mainProjectState = this.timeType.mainProjectState ? true : false
                             this.timeType.customDataMaxStatus = this.timeType.customDataMaxStatus ? true : false 
                             this.timeType.customDataMaxValue = this.timeType.customDataMaxValue ? this.timeType.customDataMaxValue : 100

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

@@ -2166,7 +2166,14 @@
         <!-- 审核流程展示 -->
         <el-dialog :title="$t('title.reviewProcess')" v-if="approvalProcessDialog" :visible.sync="approvalProcessDialog" customClass="customWidth" width="400px">
             <div style="padding:20px 40px 20px 0">
-                <el-timeline :reverse="false">
+                <el-steps  :active="curAuditNode" align-center="true" finish-status="success">
+                <el-step title="员工提交"></el-step>
+                <el-step title="项目经理审核"></el-step>
+                <el-step title="公司副总审核"></el-step>
+                </el-steps>
+                <el-divider></el-divider>
+                <p style="color:#aaaaaa;">审核记录</p>
+                <el-timeline :reverse="false" style="margin-top:10px;">
                     <el-timeline-item v-for="item in approvalProcessData" :key="item.id" :timestamp="item.operateDate">
                         <!-- {{item.msg}} -->
                         <span v-if="user.userNameNeedTranslate != 1">{{item.msg}}</span>
@@ -2219,6 +2226,7 @@
         },
         data() {
             return {
+                curAuditNode: 1,
                 refreshingTime: false,
                 substitudeStep: 1,
                 showHidden: false,