QuYueTing 1 неделя назад
Родитель
Сommit
c67e61f38a

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/components/taskComponent.vue

@@ -848,7 +848,7 @@ export default {
         createGroupWay:'new',
         modGroupDialog:false,
         subTaskVisible:false,
-        orderList:[{id:"seq",name:this.$t('manuallydragthesequence'),isDesc:false},{id:"create_date",name:this.$t('creationtimeisthelatest'),isDesc:true},
+        orderList:[{id:"seq",name:this.$t('manuallydragthesequence'),isDesc:false},{id:"id",name:this.$t('creationtimeisthelatest'),isDesc:true},
                         {id:"end_date",name:this.$t('deadlineisthelatest'),isDesc:true},
                         {id:"task_level",name:this.$t('highestpriority'),isDesc:true}],
         order:"seq",

+ 9 - 0
fhKeeper/formulahousekeeper/timesheet/src/permissions.js

@@ -132,6 +132,11 @@ const StringUtil = {
         leaveProcess : false, // 请假流程设置 // 
         leaveAnnual : false, // 年假管理 //
 
+        // 加班模块
+        overtimeFil : false, // 加班填报 //
+        overtimeAudit : false, // 加班审核 //
+        overtimeDelete : false, // 删除加班单 //
+
         // 出差模块
         awayOfficeFil : false, // 出差填报 // 
         awayOfficeAudit : false, // 出差审核 //
@@ -216,6 +221,10 @@ const StringUtil = {
         arr[i] == '全部项目阶段工时表' ? obj.reportAllPhase = true : ''
         arr[i] == '全公司加班情况' ? obj.reportAllOvertime = true : ''
         arr[i] == '负责部门加班情况' ? obj.reportOvertime = true : ''
+        arr[i] == '加班填报' ? obj.overtimeFil = true : ''
+        arr[i] == '一级审核' || arr[i] == '二级审核' ? obj.overtimeAudit = true : ''
+        arr[i] == '删除加班单' ? obj.overtimeDelete = true : ''
+        arr[i] == '撤销已通过' ? obj.withdrawPass = true : ''
         arr[i] == '请假填报' ? obj.leaveFil = true : ''
         arr[i] == '请假审核' ? obj.leaveAudit = true : ''
         arr[i] == '查看全部请假单' ? obj.leaveAll = true : ''

+ 15 - 0
fhKeeper/formulahousekeeper/timesheet/src/routes.js

@@ -68,6 +68,9 @@ import tasks from './views/task/list';
 import leave from './views/leave/list';
 import customData from './views/project/custom_data';
 
+// 加班
+import overtime from './views/overtime/overtime_list.vue';
+
 // 出差
 import awayOffice from './views/awayOffice/awayOffice';
 
@@ -391,6 +394,18 @@ export const allRouters = [//组织架构
         // 其他信息
         meta: { text: 'navigation.evectionManagement' } 
     }, 
+    {
+        path: '/',
+        component: Home,
+        name: '加班管理',
+        iconCls: 'iconfont firerock-iconwj-qjd',
+        leaf: true,
+        children: [
+            { path: '/overtime', component: overtime, name: '加班管理' }
+        ],
+        // 其他信息
+        meta: { text: '加班管理' } 
+    }, 
     {
         path: '/',
         component: Home,

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

@@ -126,7 +126,7 @@
             </el-select>
           </span>
         </template>
-        <template v-if="ins == 6 && overtimeTabActive != 'project' && user.companyId != 8555">
+        <template v-if="ins == 6 && overtimeTabActive != 'project' && user.companyId != 8555 && user.companyId != 5792">
           <el-select v-model="writeOffStatus" :placeholder="$t('defaultText.pleaseChoose')" @change="picks()" size="small" clearable>
             <el-option label="正常" :value="0" ></el-option>
             <el-option label="已核销" :value="1" ></el-option>
@@ -149,7 +149,7 @@
             <el-option v-for="(item) in projectMainIdList" :key="item.id" :label="item.name" :value="item.id"></el-option>
           </el-select>
 
-          <el-select v-if="!screeningCondition.project.includes(ins)  && !(ins == 6 && overtimeTabActive === 'project')" v-model="proJuctId" :placeholder="$t('defaultText.pleaseSelectSnItem')" :clearable="ins != 32" filterable size="small" @change="projectChange()" style="margin-left:10px">
+          <el-select v-if="!screeningCondition.project.includes(ins)  && !(ins == 6 && overtimeTabActive === 'project') && !(ins == 6 && (user.companyId == 8555 || user.companyId ==5792 ))" v-model="proJuctId" :placeholder="$t('defaultText.pleaseSelectSnItem')" :clearable="ins != 32" filterable size="small" @change="projectChange()" style="margin-left:10px">
             <el-option v-for="(item) in proListOvertime" :key="item.id" :label="item.projectName + (item.projectCode ? item.projectCode : '')" :value="item.id">
               <span style="float: left;color: #8492a6;">{{ item.projectCode }}</span>
               <span style="float: right;font-size: 13px;margin-left: 20px">{{ item.projectName }}</span>
@@ -718,10 +718,15 @@
 
             <!-- 项目加班情况统计报表 -->
             <div v-if="ins == 6 || ins == 8">
-
               <div v-if="ins == 6">
-                <template v-if="user.companyId == 8555 || user.companyId == 10">
-                  <el-table key="36" border :data="mealAllowanceList" highlight-current-row v-loading="mealAllowanceLoading" :height="+tableHeight" style="width: 100%;" :max-height="+tableHeight + 50">
+                <template v-if="(user.companyId == 8555 || user.companyId ==5792 ) || user.companyId == 10">
+                  <div style="margin-bottom: 15px;">
+                    <el-tabs v-model="overtimeTabActive" @tab-click="handleOvertimeTabClick">
+                      <el-tab-pane label="每日加班明细" name="detail"></el-tab-pane>
+                      <el-tab-pane label="按人员统计" name="member"></el-tab-pane>
+                    </el-tabs>
+                  </div>
+                  <el-table key="36" v-if="overtimeTabActive === 'detail'"  border :data="mealAllowanceList" highlight-current-row v-loading="mealAllowanceLoading" :height="+tableHeight-60" style="width: 100%;" :max-height="+tableHeight">
                     <el-table-column prop="userName" align="center" label="姓名" width="120" fixed>
                       <template slot-scope="scope">
                         <span v-if="user.userNameNeedTranslate == '1'">
@@ -777,6 +782,50 @@
                       </template>
                     </el-table-column>
                   </el-table>
+                  <!--按人员统计-->
+                  <el-table v-if="overtimeTabActive === 'member'" key="6-member" border :data="membOvertimeList" highlight-current-row v-loading="mealAllowanceLoading" :height="+tableHeight-60" style="width: 100%;" :max-height="+tableHeight">
+                  <el-table-column prop="userName" align="center" label="姓名" width="120" fixed>
+                      <template slot-scope="scope">
+                        <span v-if="user.userNameNeedTranslate == '1'">
+                          <TranslationOpenDataText type='userName' :openid='scope.row.corpwxUserid'></TranslationOpenDataText>
+                        </span>
+                        <span v-if="user.userNameNeedTranslate != '1'">
+                          {{scope.row.userName}}
+                        </span>
+                      </template>
+                    </el-table-column>
+                    <el-table-column prop="jobNumber" align="center" label="工号" width="100"></el-table-column>
+                    <el-table-column prop="departmentName" align="center" label="部门" width="150">
+                      <template slot-scope="scope">
+                        <span v-if="user.userNameNeedTranslate == '1'">
+                          <TranslationOpenDataText type='departmentName' :openid='scope.row.departmentName'></TranslationOpenDataText>
+                        </span>
+                        <span v-if="user.userNameNeedTranslate != '1'">
+                          {{scope.row.departmentName}}
+                        </span>
+                      </template>
+                    </el-table-column>
+                  <el-table-column prop="workHours" align="center" label="有效工作时长(h)" width="140">
+                    <template slot-scope="scope">
+                      {{scope.row.workHours ? scope.row.workHours.toFixed(1) : '-'}}
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="overtimeDuration" align="center" label="考勤加班时长(h)" >
+                    <template slot-scope="scope">
+                      {{scope.row.overtimeDuration ? scope.row.overtimeDuration.toFixed(1) : '-'}}
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="applyOvertimeDuration" align="center" label="申请加班时长(h)" >
+                    <template slot-scope="scope">
+                      {{(scope.row.applyOvertimeDuration ? scope.row.applyOvertimeDuration.toFixed(1) : '0.0')}}
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="applyOvertimeDuration" align="center" label="有效加班时长(h)" >
+                    <template slot-scope="scope">
+                      {{(scope.row.applyOvertimeDuration ? (scope.row.applyOvertimeDuration < scope.row.overtimeDuration?'需补加班申请':scope.row.overtimeDuration): '需补加班申请')}}
+                    </template>
+                  </el-table-column>
+                </el-table>
                 </template>
                 <template v-else>
                   <div style="margin-bottom: 15px;">
@@ -2164,49 +2213,8 @@
               </el-table-column>
             </el-table>
           </template>
-
-          <!-- 施工进度表 -->
-          <!-- <template v-if="ins == 42">
-            <el-table key="42" border :data="constructionStageList" highlight-current-row v-loading="constructionStageLoading" :height="+tableHeight" style="width: 100%;" >
-              <el-table-column prop="name" align="center" label="一级工程分类" >
-                  <template slot-scope="scope">
-                    <b v-if="scope.row.mainId == null">{{scope.row.name}}</b>
-                  </template>
-              </el-table-column>
-              <el-table-column prop="name" align="center" label="分项工程" >
-                  <template slot-scope="scope">
-                    <span v-if="scope.row.mainId != null">{{scope.row.name}}</span>
-                  </template>
-              </el-table-column>
-              <el-table-column prop="percent" align="center" label="权重" >
-                <template slot-scope="scope">
-                  <b v-if="scope.row.mainId == null">{{scope.row.percent}} %</b>
-                    <span v-else>{{scope.row.percent}} %</span>
-                </template>
-              </el-table-column>
-              <el-table-column prop="designNumber" align="center" label="设计量" >
-                <template slot-scope="scope">
-                    <b v-if="scope.row.mainId == null">{{scope.row.designNumber}}</b>
-                    <span v-else>{{scope.row.designNumber}}</span>
-                  </template>
-              </el-table-column>
-              <el-table-column prop="finishNumber" align="center" label="累计完成" >
-                <template slot-scope="scope">
-                    <b v-if="scope.row.mainId == null">{{scope.row.finishNumber}}</b>
-                    <span v-else>{{scope.row.finishNumber}}</span>
-                  </template>
-              </el-table-column>
-              <el-table-column prop="finishRate" align="center" label="完成比例" >
-                <template slot-scope="scope">
-                  <b v-if="scope.row.mainId == null">{{scope.row.finishRate}} %</b>
-                    <span v-else>{{scope.row.finishRate}} %</span>
-                </template>
-              </el-table-column>
-            </el-table>
-          </template> -->
-
         <!--工具条-->
-        <el-col :span="24" class="toolbar" v-if="(ins != 6 || (ins == 6 && user.companyId == 8555)) && ins != 20 && ins != 21 && tabPosition==0 && tabsType == 'all' && ins != 31 && ins != 32 && ins != 33 && ins != 40 && ins != 41 && ins != 42">
+        <el-col :span="24" class="toolbar" v-if="(ins != 6 || (ins == 6 && (user.companyId == 8555 || user.companyId ==5792 ) && overtimeTabActive != 'member')) && ins != 20 && ins != 21 && tabPosition==0 && tabsType == 'all' && ins != 31 && ins != 32 && ins != 33 && ins != 40 && ins != 41 && ins != 42">
           <el-pagination
                 v-if="ins == 12"
                 @size-change="groupSizeChange"
@@ -2227,7 +2235,7 @@
                 layout="total, sizes, prev, pager, next"
                 :total="total"
                 style="float:right;"
-            ></el-pagination>{{ins}}
+            ></el-pagination>
         </el-col>
         </div>
     </div>
@@ -2936,7 +2944,7 @@ export default {
       // 餐补表
       mealAllowanceList: [],
       mealAllowanceLoading: false,
-
+      membOvertimeList: [],
       // 工时日报表
       dailyWorkHoursList: [],
       dailyWorkHoursLoading: false,
@@ -3502,10 +3510,17 @@ export default {
       },
     handleOvertimeTabClick(tab) {
       if (tab.name === 'detail') {
-        this.getOvertimeDetailData();
+        if (this.user.companyId == 10 || (this.user.companyId == 8555 || this.user.companyId ==5792 )) {
+          this.getMealAllowance(false);
+        } else {
+          this.getOvertimeDetailData();
+        }
       } else if (tab.name === 'project') {
         //每次切换到项目统计tab都重新获取完整的统计数据
         this.getProjectOvertimeData();
+      } else if (tab.name === 'member') {
+        //每次切换到人员统计tab都重新获取完整的统计数据
+        this.getMembOvertimeData(false);
       }
     },
             //分页
@@ -3578,8 +3593,8 @@ export default {
                 } else if (this.ins == 5) {
                     this.getProjectStages();
                 } else if (this.ins == 6) {
-                  if (this.user.companyId == 8555 || this.user.companyId == 10) {
-                      this.getMealAllowance()
+                  if ((this.user.companyId == 8555 || this.user.companyId ==5792 ) || this.user.companyId == 10) {
+                      this.getMealAllowance(false)
                   } else {
                       this.overTime()
                   }
@@ -3745,8 +3760,14 @@ export default {
           }
         } else if (this.ins == 6) {
           fName = this.$t('statisticalreportofovertimework')  + '.xlsx';
-          if (this.user.companyId == 8555 || this.user.companyId == 10) {
-            url = "/overtime-allowance/export";
+          if ((this.user.companyId == 8555 || this.user.companyId ==5792 ) || this.user.companyId == 10) {
+            if (this.overtimeTabActive == 'detail') {
+              fName = '加班明细表.xlsx';
+              url = "/overtime-allowance/export";
+            } else {
+              url = "/overtime-allowance/exportSummaryList";
+              fName = '员工加班情况汇总.xlsx';
+            }
             sl.isAllowance = false;//非补贴类型,就是考勤加班的数据
           } else {
             url += "/exportOvertimeList";
@@ -4609,7 +4630,6 @@ export default {
         startDate: this.rangeDatas[0],
         endDate: this.rangeDatas[1],
       }
-      console.log(this.userId, '人员')
       if(this.userId) {
         obj.userId = this.userId
       }
@@ -5268,8 +5288,13 @@ export default {
     },
     picks() {
       if(this.ins == 6){
-        if (this.user.companyId == 8555) {
-            this.getMealAllowance();
+        if ((this.user.companyId == 8555 || this.user.companyId ==5792 )) {
+            if (this.overtimeTabActive === 'detail') {
+              this.getMealAllowance(false);
+            } else {
+              this.getMembOvertimeData(false);
+            }
+            
         } else {
             if (this.overtimeTabActive === 'detail') {
               this.overTime();
@@ -5533,11 +5558,15 @@ export default {
       }else if(this.ins == 15){
         this.getDepartmentsInvolved()
       }else if(this.ins == 6){
-        // if (this.overtimeTabActive === 'detail') {
-          this.overTime();
-        // } else {
-        //   this.processProjectOvertimeData();
-        // }
+        if ((this.user.companyId == 8555 || this.user.companyId ==5792 )) {
+            if (this.overtimeTabActive === 'detail') {
+              this.getMealAllowance(false);
+            } else {
+              this.getMembOvertimeData(false);
+            }
+        } else {
+            this.overTime();
+        }
       }else{
       if(e == 9){
         console.log(this.departmentIdArray);
@@ -6309,6 +6338,26 @@ export default {
       })
     },
 
+    getMembOvertimeData(isAllowance) {
+      this.mealAllowanceLoading = true
+      let parameter = {
+        startDate: this.rangeDatas[0],
+        endDate: this.rangeDatas[1],
+        isAllowance: isAllowance
+      }
+      if(this.userId) {
+        parameter.userId = this.userId
+      }
+      if(this.departmentIdArray.length != 0){
+        parameter.departmentId = this.departmentIdArray[this.departmentIdArray.length - 1]
+      }
+      this.postData(`/overtime-allowance/getSummaryList`, parameter).then(res => {
+        this.membOvertimeList = res.data|| []
+      }).finally(() => {
+        this.mealAllowanceLoading = false
+      })
+    },
+
     // 获取工时日报表
     getDailyWorkHours() {
       this.dailyWorkHoursLoading = true

+ 3 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/project/financeComponents/salaryDetails.vue

@@ -13,7 +13,7 @@
                     <el-link type="primary" :underline="false" @click="audits()"
                         v-if="user.timeType.financeAudit == '1'">{{ revaelse }}</el-link>
                 </el-form-item>
-                <el-form-item label="薪酬类型" v-if="user.companyId <= 10 || user.companyId == 8555">
+                <el-form-item label="薪酬类型" v-if="user.companyId <= 10 || (user.companyId == 8555 || user.companyId ==5792 )">
                     <el-select v-model="salaryType" size="small" style="width:150px;" @change="loadMonthData">
                         <el-option :value="0" label="计提工资"></el-option>
                         <el-option :value="1" label="实发工资"></el-option>
@@ -394,7 +394,7 @@
                     <el-date-picker v-model="date" type="month" :placeholder="$t('Selectmonth')" format="yyyy-MM"
                         value-format="yyyy-MM"></el-date-picker>
                 </el-form-item>
-                <el-form-item label="薪酬类型" v-if="user.companyId <= 10 || user.companyId == 8555">
+                <el-form-item label="薪酬类型" v-if="user.companyId <= 10 || (user.companyId == 8555 || user.companyId ==5792 )">
                     <el-select v-model="importParam.salaryType" >
                         <el-option :value="0" label="计提工资"></el-option><el-option :value="1" label="实发工资"></el-option>
                     </el-select>
@@ -407,7 +407,7 @@
                     <el-checkbox :label="$t('Synchronizeemployeemonthlycosttorganizationalstructure')"
                         v-model="importParam.syncUserCost"></el-checkbox>
                 </el-form-item>
-                <el-form-item prop="isVerification" v-if="!(user.companyId <= 10 || user.companyId == 8555)">
+                <el-form-item prop="isVerification" v-if="!(user.companyId <= 10 || (user.companyId == 8555 || user.companyId ==5792 ))">
                     <el-checkbox label="是否为核销数据" v-model="importParam.isVerification"></el-checkbox> <span>(请确认模板中有计提奖金和奖金核销列)</span>
                 </el-form-item>
             </el-form>

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

@@ -701,7 +701,7 @@
                             </el-table>
                         </div>
                         </el-tab-pane>
-                        <el-tab-pane label="施工节点" name="projectConstructionStages" v-if="user.companyId == 10 || user.companyId == 4811">
+                        <el-tab-pane label="施工节点" name="projectConstructionStages" v-if="user.companyId == 4811">
                         <template slot="label" v-if="activeName == 'projectConstructionStages'">
                             <span>施工节点</span>
                             <el-link  size="small"  type="primary" @click="exportConstrutionData" style="margin-left:80px;" >导出</el-link>
@@ -5355,7 +5355,7 @@ a {
                     if (this.user.company.packageEngineering == 1) {
                         this.getProjectProfessions(item.id);
                     }
-                    if (this.user.companyId == 10 || this.user.companyId == 4811) {
+                    if (this.user.companyId == 4811) {
                         this.getConstructionStages(item.id, item.plate1);
                     }
                     //获取审核人
@@ -5725,7 +5725,7 @@ a {
                                 if (this.user.company.packageEngineering == 1) {
                                     this.saveProjectProfessions(pid);
                                 }
-                                if (this.user.companyId == 10 || this.user.companyId == 4811) {
+                                if (this.user.companyId == 4811) {
                                     this.saveConstructionStages(pid);
                                 }
                             } else {
@@ -6143,7 +6143,7 @@ a {
             },
             customSelectChange() {
                 //为柘中定制一个监听加载施工分项
-                if (this.user.companyId == 10 || this.user.companyId == 4811) {
+                if (this.user.companyId == 4811) {
                     this.getConstructionStages(this.addForm.id, this.dataList[0].value.join(','));
                 }
             },

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

@@ -1349,10 +1349,10 @@
                 modGroupDialog:false,
                 subTaskVisible:false,
                 orderList:[{id:"seq",name:this.$t('manuallydragthesequence'),isDesc:false},
-                {id:"create_date",name:this.$t('creationtimeisthelatest'),isDesc:true},
-                {id:"indate",name:'创建时间最早',isDesc:false},
-                                {id:"end_date",name:this.$t('deadlineisthelatest'),isDesc:true},
-                                {id:"task_level",name:this.$t('highestpriority'),isDesc:true}],
+                {id:"id",name:this.$t('creationtimeisthelatest'),isDesc:true},
+                {id:"id",name:'创建时间最早',isDesc:false},
+                {id:"end_date",name:this.$t('deadlineisthelatest'),isDesc:true},
+                {id:"task_level",name:this.$t('highestpriority'),isDesc:true}],
                 order:"seq",
                 isDesc:false,
                 taskDataList:[],
@@ -3236,10 +3236,10 @@
             viewChange(index, indexPath) {
                 this.groupType = 1;
                 if (this.user.companyId == 7757 || this.user.companyId == 7783) {
-                    this.order = "indate";
+                    this.order = "id";
                     this.isDesc = false;
                 } else {
-                    this.order = "create_date";
+                    this.order = "id";
                     this.isDesc = true;
                 }
                 
@@ -3251,7 +3251,7 @@
             groupChange(index, indexPath) {
                 this.groupType = 0;
                 if (this.user.companyId ==  7757 || this.user.companyId == 7783) {
-                    this.order = "indate";
+                    this.order = "id";
                     this.isDesc = false;
                 } else {
                     this.order = "seq";
@@ -4030,7 +4030,7 @@
             this.curProjectId = parseInt(this.$route.params.id);
             this.activeName = this.$route.path.split("/")[1];
             if (this.user.companyId == 7757 || this.user.companyId == 7783) {
-                this.order = "indate";
+                this.order = "id";
             }
             this.getDetail();
             this.getUsers();

+ 25 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -377,6 +377,22 @@
                     </el-select>
                     <selectCat :subject="users" :subjectId="depForm.otherManagerIds" :size="'medium'" :filterable="true" :widthStr="'430'" :multiSelect="true" v-if="user.userNameNeedTranslate == '1' && departmentVisible"  :distinction="'4'" :clearable="true" @selectCal="selectCal"></selectCat>
                 </el-form-item>
+                <!-- 加班审核人 -->
+                <el-form-item v-if="user.company.packageOvertime == 1">
+                    <span slot="label">
+                        加班审核人
+                        <el-tooltip effect="dark" content="按顺序依次审核" placement="top-start">
+                            <i class="el-icon-question" style="color:#606266"></i>
+                        </el-tooltip>
+                    </span>
+                    <el-select v-model="depForm.auditorIds" filterable v-if="user.userNameNeedTranslate != '1'" clearable multiple style="width: 100%" placeholder="请选择加班审核人">
+                        <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id">
+                          <span style="float: left">{{ item.name }}</span>
+                          <span style="float: right; color: #8492a6; font-size: 13px">{{ item.jobNumber }}</span>
+                        </el-option>
+                    </el-select>
+                    <selectCat :subject="users" :subjectId="depForm.auditorIds" :size="'medium'" :filterable="true" :widthStr="'430'" :multiSelect="true" v-if="user.userNameNeedTranslate == '1' && departmentVisible" :distinction="'40'" :clearable="true" @selectCal="selectCal"></selectCat>
+                </el-form-item>
                 <!-- 直属领导 -->
                 <el-form-item :label="$t('leadership')" prop="reportAuditUserid" v-if="user.timeType.needDeptAudit">
                     <el-select v-model="depForm.reportAuditUserid" v-if="user.userNameNeedTranslate != '1'" filterable  clearable  :placeholder="$t('defaultText.pleaseChoose')" style="width: 100%">
@@ -3395,6 +3411,7 @@ export default {
                       type: "warning",
                     });
                   }
+                  this.$set(that.depForm, 'auditorIds', res.data.auditorIds);
                 } 
               },
               (error) => {
@@ -3454,6 +3471,10 @@ export default {
           if(this.depForm.otherManagerIds) {
             form.otherManagerIds = this.depForm.otherManagerIds.toString();
           }
+          // 加班审核人
+          if(this.depForm.auditorIds) {
+            form.auditorIds = this.depForm.auditorIds.toString();
+          }
           if (this.user.timeType.type == 2 && this.user.timeType.multiWorktime == 1) {
             form.isEnableMulti = this.depForm.isEnableMulti;
           }
@@ -3855,7 +3876,10 @@ export default {
     // 自定义组件事件
     selectCal(obj) {
       console.log(obj, '<=== 返回的数据')
-      if(obj.distinction == '4') {
+      if(obj.distinction == '40') {
+        let userList = obj.arrUserList || []
+        this.depForm.auditorIds = userList.map(item => item.id)
+      } else if(obj.distinction == '4') {
         let userList = obj.arrUserList || []
         this.depForm.otherManagerIds = userList.map(item => item.id)
       } else if(obj.distinction == '3') {

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

@@ -279,7 +279,7 @@
                                                     <span style="margin-left:10px;">{{ $t('gongZuoZhiZe') }} :{{ item2.extraField2? item2.extraField2Name:''}}</span>
                                                     <span style="margin-left:10px;">{{ $t('gongZuoNeiRong') }} :{{ item2.extraField3? item2.extraField3Name:''}}</span></p>
 
-                                                    <p v-if="(user.companyId == 4811 || user.companyId == 10) && item2.constructionStageStr">
+                                                    <p v-if="(user.companyId == 4811) && item2.constructionStageStr">
                                                         <span>施工分项工程 :{{item2.constructionStageStr}}</span>
                                                     </p>
 
@@ -435,7 +435,6 @@
                             <el-button type="default" style="margin-left:5px;" size="small" :loading="syncTimeLoading"  icon="el-icon-refresh" 
                                     @click="refreshAttendance(workForm.createDate)"></el-button>
                         </template>
-                        
                         <!-- AI智能填报 -->
                         <el-button type="primary" @click="getAIReport()" v-if="!hasWrittenReport" style="margin-left:5px;" >{{ $t('zhiNengTianBao') }}</el-button>
                     </el-form-item>
@@ -474,11 +473,13 @@
                         <span v-if="user.companyId==5978" style="margin-left:5px;" class="themeFontColor"><i class="el-icon-warning"></i>{{$t('other.kaoqingTimeTip')}}</span>
 
                         <!--针对羲和超导的异常填报功能-->
-                        <template v-if="user.companyId == 8555 && (!workForm.time || !workForm.time.workHours)">
+                        <template v-if="(user.companyId == 8555 || user.companyId ==5792 ) && (!workForm.time || !workForm.time.workHours)">
                             <span style="margin-left:70px;color:#666;">异常填报</span>
                             <el-switch v-model="workForm.abnormalTime" :disabled="!canEdit"></el-switch>
                         </template>
                     </el-form-item>
+                    <!--加班申请时长-->
+                    <el-form-item label="加班时长" v-if="workForm.overtime"><span style="color:#FFA500;">{{ workForm.overtime.toFixed(1) }} h</span></el-form-item>
                     <!-- 000000 -->
                     <div v-for="(domain, index) in workForm.domains" :key="domain.id" :style="index>0?'padding-top:25px;':''" >
                         <div v-if="reportTimeType.multiWorktime==0">
@@ -608,14 +609,14 @@
                             <!-- <el-link type="primary" v-if="canEdit"
                                 :underline="false" style="margin-left:10px;" @click="copyProject(index)">复制</el-link> -->
                             <!--针对柘中,显示项目对应的工程分类-->
-                            <template v-if="(user.companyId == 10 || user.companyId == 4811) && workForm.domains[index].projectId">
+                            <template v-if="(user.companyId == 4811) && workForm.domains[index].projectId">
                                 <span style="margin-left:10px;">工程分类:{{ workForm.domains[index].engineeringCategory }}</span>
                             </template>
                         </el-form-item>
                         <el-form-item :label="$t('other.projectDescription')" v-if="user.company.packageProject==0&&domain.projectId&&fillProjectList.filter(p=>p.id == domain.projectId).length>0&&fillProjectList.filter(p=>p.id == domain.projectId)[0].projectDesc">
                             <span>{{fillProjectList.filter(p=>p.id == domain.projectId)[0].projectDesc}}</span>
                         </el-form-item>
-                        <el-form-item label="施工分项工程" v-if="(user.companyId == 10 || user.companyId == 4811) && workForm.domains[index].engineeringCategory != null && workForm.domains[index].engineeringCategory != ''" :rules="{ required: true, message: '请填写', trigger: ['change','blur'] }">
+                        <el-form-item label="施工分项工程" v-if="(user.companyId == 4811) && workForm.domains[index].engineeringCategory != null && workForm.domains[index].engineeringCategory != ''" :rules="{ required: true, message: '请填写', trigger: ['change','blur'] }">
                             <!-- <el-select v-model="domain.extraField1" :disabled="!domain.canEdit" @change="$forceUpdate()" style="width:200px;" filterable>
                                 <el-option v-for="item in domain.constructionStages" :label="item.name" :value="item.id" :key="item.id"></el-option>
                             </el-select> -->
@@ -632,17 +633,6 @@
                             </el-input-number> {{ item.unit }} </el-col>
                             </el-row>
                         </el-form-item>
-                        <!-- <el-form-item label="完成数量" v-if="(user.companyId == 10 || user.companyId == 4811) && domain.extraField1" :rules="{ required: true, message: '请填写', trigger: ['change','blur'] }">
-                            <el-input-number 
-                                v-model="domain.extraField2" 
-                                :disabled="!domain.canEdit" 
-                                :precision="0" 
-                                :step="1" 
-                                :min="0" 
-                                style="width:200px;">
-                            </el-input-number>
-                            <span style="margin-left:10px;">{{(domain.constructionStages && domain.constructionStages.length>0 && domain.constructionStages.find(item => item.id === domain.extraField1) != null)?domain.constructionStages.find(item => item.id === domain.extraField1).unit || '' :'' }}</span>
-                        </el-form-item> -->
                         <!--如果设置了工时成本预警的预算成本项-->
                         <el-form-item :label="$t('lable.budgetSource')" v-if="user.company.packageProject==1&&timeBasecostList &&timeBasecostList.length>0">
                             <el-select v-model="domain.basecostId" :disabled="!domain.canEdit" @change="$forceUpdate()" style="width:200px;">
@@ -845,7 +835,7 @@
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" @change="onTaskSelected(domain)">
                                 <el-option v-for="item in domain.taskList" :key="item.taskId" :label="item.taskName" :value="item.taskId"></el-option>
                             </el-select>
-                            <!-- <el-checkbox v-model="domain.taskFinish" v-if="domain.taskId != undefined && user.companyId != '5608'">{{$t('state.completed')}}</el-checkbox> -->
+                            <el-checkbox v-model="domain.taskFinish" v-if="domain.taskId != undefined && user.timeType.finishTaskInReport">{{$t('state.completed')}}</el-checkbox>
                         </el-form-item>
                         <!--针对依斯贝的SAP服务-->
                         <el-form-item v-if="user.companyId==3092" :label="$t('fuWu')" :prop="'domains.' + index + '.sapServiceId'" 
@@ -863,7 +853,7 @@
                         </el-form-item>
 
                         <!-- 拍照上传 -->
-                        <el-form-item :label="$t('tuPianShangChuan')" v-if="user.timeType.choseFromAlbum == 1 || (user.companyId == 8555 && workForm.abnormalTime)" :prop="'domains.' + index + '.imgListUrl'" 
+                        <el-form-item :label="$t('tuPianShangChuan')" v-if="user.timeType.choseFromAlbum == 1 || ((user.companyId == 8555 || user.companyId ==5792 ) && workForm.abnormalTime)" :prop="'domains.' + index + '.imgListUrl'" 
                         :rules="isCustomization(user, reportPictureRequired) ? { required: true, message: $t('pleaseselectpictures'), trigger: 'blur' } : null">
                             <div class="photos">
                                 <div>
@@ -1701,6 +1691,7 @@
               <el-link
               type="primary"
               @click="exportMembWorkHours()"
+              v-loading="exportLoading"
               >{{$t('export.exportData')}}</el-link
              >
             </div>
@@ -1870,6 +1861,7 @@
                         type="primary"
                         style="float: right; vertical-align: middle;height:32px"
                         @click="exportMembNotWorkHours()"
+                        v-loading="exportLoading"
                         >{{$t('export.exportData')}}</el-link
                     >
                 </div>
@@ -1979,6 +1971,7 @@
                     type="primary"
                     style="float: right; vertical-align: middle;height:32px"
                     @click="exportMissingCardTimeUserList()"
+                    v-loading="exportLoading"
                     >{{$t('export.exportData')}}</el-link
                 >
             </div>
@@ -2017,7 +2010,7 @@
           <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isMore" :title="$t('message.noMoreData')" type="success" center show-icon></el-alert>
         </el-tab-pane>
 
-        <el-tab-pane :label="$t('cardtimenotfull')" name="fourth" v-if="(user.timeType.syncCorpwxTime==1 || user.timeType.syncFanwei == 1 || user.timeType.syncDingding == 1) && user.companyId!=5978 && user.companyId != 8555">
+        <el-tab-pane :label="$t('cardtimenotfull')" name="fourth" v-if="(user.timeType.syncCorpwxTime==1 || user.timeType.syncFanwei == 1 || user.timeType.syncDingding == 1) && user.companyId!=5978 && user.companyId != 8555 && user.companyId != 5792">
           <div class="selectworktime_export" style="margin-top:10px">
             <div class="selectworktime_export_l">
               <el-date-picker
@@ -2690,6 +2683,7 @@
         },
         data() {
             return {
+                exportLoading: false,
                 allConstructionStages:[],
                 quickWords: [],//用于AI解析快速输入的历史日报填报关键字
                 remindering: false,
@@ -3133,7 +3127,7 @@
             if (this.user.companyId == this.yuzhongCompId) {
                 this.getJobResponList();
             }
-            if (this.user.companyId == 10 || this.user.companyId == 4811) {
+            if (this.user.companyId == 4811) {
                 this.getConstructionStageList();
             }
         },
@@ -3831,7 +3825,7 @@
                     })
                 })
             },
-             refreshAttendance(workdate) {
+            refreshAttendance(workdate) {
                  if (!workdate) return;
                  if (this.isSubstitude && this.workForm.userId == null) return;
                 this.syncTimeLoading = true;
@@ -4444,6 +4438,8 @@
                     if (this.user.companyId == 8264 || this.user.companyId == 8261 || this.user.companyId == 8138 || this.user.companyId == 8268) {
                         url = "/report/importNewDataZhengbei"
                         formData.append("isPass", this.isPass);
+                    } else if (this.user.companyId == 10 || this.user.companyId == 5792) {//羲合超导-合肥定制的临时导入工时功能
+                        url = "/report/importNewDataXiHe"
                     }
                     
                     this.http.uploadFile(url, formData,
@@ -4894,6 +4890,7 @@
     },
     // 导出缺考勤人员列表
     exportMissingCardTimeUserList() {
+        this.exportLoading = true;
       this.http.post(
         "/report/exportMissingCardTimeUserList",
         {
@@ -4902,6 +4899,7 @@
           departmentId: this.deptIdForNoReport.length>0?this.deptIdForNoReport[this.deptIdForNoReport.length-1]:null
         },
         (res) => {
+            this.exportLoading = false;
           if (res.code == "ok") {
             let url = res.data;
             this.downloadByA('缺考勤人员列表.xlsx', url);
@@ -4916,7 +4914,8 @@
       );
     },
     //导出员工每日填报工时数
-    exportMembWorkHours() {   
+    exportMembWorkHours() { 
+        this.exportLoading = true;  
       this.http.post(
         "/report/exportUserDailyWorkTime",
         {
@@ -4926,6 +4925,7 @@
           hasReportDeptId: this.deptIdForHasReport.length>0?this.deptIdForHasReport[this.deptIdForHasReport.length-1]:null,
         },
         (res) => {
+            this.exportLoading = false;
           if (res.code == "ok") {
             let url = res.data;
             this.downloadByA(this.$t('template.Staffdailyworkinghoursstatistics') + '.xlsx', url);
@@ -4962,7 +4962,7 @@
       );
     },
     exportMembNotWorkHours() {
-      
+      this.exportLoading = true;
       this.http.post(
         "/report/exportNoReportUserList",
         {
@@ -4973,6 +4973,7 @@
           noReportDeptId: this.deptIdForNoReport.length>0?this.deptIdForNoReport[this.deptIdForNoReport.length-1]:null
         },
         (res) => {
+            this.exportLoading = false;
           if (res.code == "ok") {
             let url = res.data;
             this.downloadByA(this.$t('template.Staffdailyworkinghoursstatistics') + '.xlsx', url);
@@ -7324,7 +7325,7 @@
                             var abnormalTime = false;
                             for(var i in list.report) {
                                 var flg = null
-                                if (this.user.companyId == 8555) {
+                                if ((this.user.companyId == 8555 || this.user.companyId ==5792 )) {
                                     if (list.report[i].extraField1) {
                                         abnormalTime = true;
                                     }
@@ -7437,7 +7438,8 @@
                                 userId:null,
                                 time: list.time,
                                 showRefresh: list.showRefresh,
-                                abnormalTime: abnormalTime
+                                abnormalTime: abnormalTime,
+                                overtime: list.overtime
                             }
                             if(res.data.timeType.type == 3) {
                                 const reportCalculationReportList = res.data.report || []
@@ -7472,7 +7474,8 @@
                                 userId:null,
                                 userNames:null,
                                 time: this.report.time,
-                                showRefresh: list.showRefresh
+                                showRefresh: list.showRefresh,
+                                overtime: list.overtime
                             }
                             if(res.data.timeType.type == 3) {
                                 copyWorkForm.totalDuration = res.data.timeType.allday
@@ -9464,7 +9467,7 @@
                         //批量填报不校验考勤时长,交给后台校验
                         
                         if (!this.isBatch) {
-                            if (this.user.companyId == 8555 && this.workForm.abnormalTime) {
+                            if ((this.user.companyId == 8555 || this.user.companyId ==5792 ) && this.workForm.abnormalTime) {
                                 //异常上报情况,需要上传图片
                                 var findImg = false;
                                 for (var t=0;t<this.workForm.domains.length; t++) {
@@ -9790,7 +9793,7 @@
                                     }
                                 }
                             }
-                            if (this.user.timeType.reportWorkflow) {
+                            if (this.user.timeType.reportWorkflow && this.user.timeType.reportAuditType == 0) {
                                 //校验部门节点是否有审核人
                                 for (var t=0;t<this.workForm.domains[i].auditWorkflow.length; t++) {
                                     var node = this.workForm.domains[i].auditWorkflow[t];
@@ -9808,7 +9811,7 @@
                                 formData.append('extraField2', this.workForm.domains[i].extraField2);
                                 formData.append('extraField3', this.workForm.domains[i].extraField3);
                             }
-                            if (this.user.companyId == 10 || this.user.companyId == 4811) {
+                            if (this.user.companyId == 4811) {
                                 // formData.append('extraField1', this.workForm.domains[i].extraField1 || -1);//避免null造成数字类型转化错误
                                 // formData.append('extraField2', this.workForm.domains[i].extraField2 || 0);
                                 let constructionStagesStr = JSON.stringify(this.workForm.domains[i].constructionStages).replace(/,/g,"@");
@@ -9869,7 +9872,7 @@
                                 }
                             }
                             //羲合超导的异常工时上报
-                            if (this.user.companyId == 8555) {
+                            if ((this.user.companyId == 8555 || this.user.companyId ==5792 )) {
                                 if (this.workForm.abnormalTime) {
                                     formData.append('abnormalTime', this.workForm.abnormalTime);
                                 }

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/dailyReportReview.vue

@@ -153,7 +153,7 @@
                                                           <span>{{ $t('jiao-se') }}:{{item.extraField1? roleList.filter(r=>r.value == item.extraField1)[0].label:''}}</span>
                                                       <span style="margin-left:10px;">{{ $t('gongZuoZhiZe') }}:{{ item.extraField2? item.extraField2Name:''}}</span>
                                                       <span style="margin-left:10px;">{{ $t('gongZuoNeiRong') }}:{{ item.extraField3? item.extraField3Name:''}}</span></p>
-                                  <p v-if="(user.companyId == 4811 || user.companyId == 10) && item.constructionStageStr">
+                                  <p v-if="(user.companyId == 4811) && item.constructionStageStr">
                                         <span>施工分项工程 :{{item.constructionStageStr}}</span>
                                   </p>
                                   <p v-if="item.taskId != null">{{$t('other.task')}}:{{item.taskName}}
@@ -1346,7 +1346,7 @@
           this.getDepartment();
           this.getProjectList();
           this.getUsers();
-          if (this.user.companyId == 10 || this.user.companyId == 4811) {
+          if (this.user.companyId == 4811) {
             this.getConstructionStageList();
           }
       }