|
|
@@ -656,16 +656,36 @@
|
|
|
<el-form-item v-if="user.timeType.reportAuditType != 3 && user.timeType.reportAuditType != 5 && domain.auditUserList.length > 0">
|
|
|
<template slot="label">
|
|
|
<span style="color:#FF0000;">*</span>
|
|
|
- <span >{{$t('other.projectAuditor')}}</span>
|
|
|
+ <span>审核人</span>
|
|
|
+ </template>
|
|
|
+ <!-- 按审批流显示审核人-->
|
|
|
+ <template v-if="user.timeType.reportWorkflow">
|
|
|
+ <span v-for="(nodeItem, nodeIndex) in domain.auditWorkflow">
|
|
|
+ <span v-if="nodeItem.isDeptAudit">
|
|
|
+ <el-tag v-if="user.userNameNeedTranslate != '1'">{{ nodeItem.auditDeptManagerName }}</el-tag>
|
|
|
+ <el-tag v-else><TranslationOpenDataText type='userName' :openid='nodeItem.auditDeptManagerName'></TranslationOpenDataText></el-tag>
|
|
|
+ </span>
|
|
|
+ <span v-else>
|
|
|
+ <el-select v-model="domain.projectAuditorId" :disabled="!domain.canEdit" @change="$forceUpdate()" v-if="user.userNameNeedTranslate != '1'" style="width:100px;">
|
|
|
+ <el-option v-for="item in domain.auditUserList" :label="item.auditorName" :value="item.auditorId" :key="item.id">
|
|
|
+ <span style="float: left" v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.auditorName'></TranslationOpenDataText></span>
|
|
|
+ <span style="float: left" v-if="user.userNameNeedTranslate != '1'">{{item.auditorName}}</span>
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :subject="domain.auditUserList" :idx="index" :subjectId="domain.projectAuditorId" ref="selectCat" :flg="domain.projectAuditorId ? true : false" :flgs="true" @selectCatCli="selectCatCli" :disabled="!domain.canEdit"></selectCat>
|
|
|
+ </span>
|
|
|
+ <i class="el-icon-right" v-if="nodeIndex < domain.auditWorkflow.length-1" style="margin:0 10px;"></i>
|
|
|
+ </span>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <el-select v-model="domain.projectAuditorId" :disabled="!domain.canEdit" @change="$forceUpdate()" v-if="user.userNameNeedTranslate != '1'" style="width:200px;">
|
|
|
+ <el-option v-for="item in domain.auditUserList" :label="item.auditorName" :value="item.auditorId" :key="item.id">
|
|
|
+ <span style="float: left" v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.auditorName'></TranslationOpenDataText></span>
|
|
|
+ <span style="float: left" v-if="user.userNameNeedTranslate != '1'">{{item.auditorName}}</span>
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :subject="domain.auditUserList" :idx="index" :subjectId="domain.projectAuditorId" ref="selectCat" :flg="domain.projectAuditorId ? true : false" :flgs="true" @selectCatCli="selectCatCli" :disabled="!domain.canEdit"></selectCat>
|
|
|
</template>
|
|
|
-
|
|
|
- <el-select v-model="domain.projectAuditorId" :disabled="!domain.canEdit" @change="$forceUpdate()" v-if="user.userNameNeedTranslate != '1'" style="width:200px;">
|
|
|
- <el-option v-for="item in domain.auditUserList" :label="item.auditorName" :value="item.auditorId" :key="item.id">
|
|
|
- <span style="float: left" v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.auditorName'></TranslationOpenDataText></span>
|
|
|
- <span style="float: left" v-if="user.userNameNeedTranslate != '1'">{{item.auditorName}}</span>
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :subject="domain.auditUserList" :idx="index" :subjectId="domain.projectAuditorId" ref="selectCat" :flg="domain.projectAuditorId ? true : false" :flgs="true" @selectCatCli="selectCatCli" :disabled="!domain.canEdit"></selectCat>
|
|
|
</el-form-item>
|
|
|
</div>
|
|
|
<el-form-item v-if="user.companyId == yuzhongCompId">
|
|
|
@@ -1220,7 +1240,7 @@
|
|
|
</div>
|
|
|
|
|
|
<div class="zhoFel" v-if="user.timeType.reportAuditType == 0 || user.timeType.reportAuditType == 4">
|
|
|
- <p>{{$t('other.reviewer')}}</p>
|
|
|
+ <p>审核人</p>
|
|
|
<el-select v-model="zhoBao.projectAuditorId" v-if="user.userNameNeedTranslate != 1" :placeholder="$t('defaultText.pleaseChoose')" clearable="true" style="width: 355px">
|
|
|
<el-option v-for="item in zhoBao.auditUserList" :key="item.id" :label="item.auditorName" :value="item.auditorId"></el-option>
|
|
|
</el-select>
|
|
|
@@ -1840,6 +1860,76 @@
|
|
|
<el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isFlag" :title="$t('message.loading')+'...'" type="success" center :closable="false" show-icon></el-alert>
|
|
|
<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="缺考勤人员列表" name="fifth" v-if="(user.timeType.syncCorpwxTime==1 || user.timeType.syncFanwei == 1 || user.timeType.syncDingding == 1) && user.companyId!=5978">
|
|
|
+ <div class="selectworktime_export" style="margin-top:10px">
|
|
|
+ <div class="selectworktime_export_l">
|
|
|
+ <el-date-picker
|
|
|
+ class="selecteworktime_datapick"
|
|
|
+ v-model="WorktimeDatepickValue"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ type="daterange"
|
|
|
+ align="right"
|
|
|
+ unlink-panels
|
|
|
+ :range-separator="$t('other.to')"
|
|
|
+ :start-placeholder="$t('time.startDate')"
|
|
|
+ :end-placeholder="$t('time.endDate')"
|
|
|
+ :default-time="['12:00:00', '12:00:00']"
|
|
|
+ size="small"
|
|
|
+ popper-class="selecteorktime_datapick_popper"
|
|
|
+ @change="showMissingCardTimeUserList()"
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+
|
|
|
+ <el-button size="small" @click="getDoubleLastWeek(3)">{{$t('time.twoWeeksAgo')}}</el-button>
|
|
|
+ <el-button size="small" @click="getLastWeek(3)">{{$t('time.lastWeek')}}</el-button>
|
|
|
+ <el-button size="small" @click="getThisWeek(3)">{{$t('time.nextWeek')}}</el-button>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <el-cascader v-if="user.userNameNeedTranslate != 1" :size="'small'" v-model="deptIdForNoReport" :placeholder="$t('qing-xuan-ze-bu-men')" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 200px;" @change="showMissingCardTimeUserList()"></el-cascader>
|
|
|
+ <vueCascader :size="'small'" :widthStr="'200'" :clearable="true" :subject="trandepartmentList" :radios="true" :distinction="'18'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :selectNameChuan="$t('other.allDepartments')"></vueCascader>
|
|
|
+ <el-link
|
|
|
+ type="primary"
|
|
|
+ style="float: right; vertical-align: middle;height:32px"
|
|
|
+ @click="exportMissingCardTimeUserList()"
|
|
|
+ >{{$t('export.exportData')}}</el-link
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <el-table
|
|
|
+ ref="hasworkTbl5"
|
|
|
+ :data="missingCardTimeUserListData"
|
|
|
+ border
|
|
|
+ :height="'70vh'"
|
|
|
+ highlight-current-row
|
|
|
+ style="width: 100%"
|
|
|
+ v-loading="tbload"
|
|
|
+ lazy
|
|
|
+ >
|
|
|
+ <el-table-column min-width="150" :label="$t('lable.department')" prop="departmentName">
|
|
|
+ <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 min-width="150" prop="userName" :label="$t('lable.name')" >
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='scope.row.userName'></TranslationOpenDataText></span>
|
|
|
+ <span v-if="user.userNameNeedTranslate != 1">{{scope.row.userName}}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ min-width="200"
|
|
|
+ label="缺勤日期"
|
|
|
+ align="center"
|
|
|
+ prop="workDate"
|
|
|
+ >
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isFlag" :title="$t('message.loading')+'...'" type="success" center :closable="false" show-icon></el-alert>
|
|
|
+ <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">
|
|
|
<div class="selectworktime_export" style="margin-top:10px">
|
|
|
<div class="selectworktime_export_l">
|
|
|
@@ -2819,7 +2909,8 @@
|
|
|
refreshAttendanceLoading: false,
|
|
|
customConfigurationRow: {
|
|
|
subUserCustomList: []
|
|
|
- }
|
|
|
+ },
|
|
|
+ missingCardTimeUserListData: []
|
|
|
};
|
|
|
},
|
|
|
watch: {
|
|
|
@@ -4564,8 +4655,58 @@
|
|
|
this.showMonthWorkTimeReminder()
|
|
|
} else if (t.name == "fourth") {
|
|
|
this.showReportTimeLessThanCardTimeList();
|
|
|
+ } else if (t.name == "fifth") {
|
|
|
+ this.showMissingCardTimeUserList();
|
|
|
}
|
|
|
},
|
|
|
+ // 显示缺考勤人员列表
|
|
|
+ showMissingCardTimeUserList() {
|
|
|
+ this.tbload = true;
|
|
|
+ this.http.post(
|
|
|
+ "/report/getMissingCardTimeUserList",
|
|
|
+ {
|
|
|
+ startDate: this.WorktimeDatepickValue[0],
|
|
|
+ endDate: this.WorktimeDatepickValue[1],
|
|
|
+ departmentId: this.deptIdForNoReport.length>0?this.deptIdForNoReport[this.deptIdForNoReport.length-1]:null
|
|
|
+ },
|
|
|
+ (res) => {
|
|
|
+ if (res.code == "ok") {
|
|
|
+ this.tbload = false;
|
|
|
+ this.missingCardTimeUserListData = res.data;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ (error) => {
|
|
|
+ this.tbload = false;
|
|
|
+ this.$message({
|
|
|
+ message: error,
|
|
|
+ type: "error",
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+ },
|
|
|
+ // 导出缺考勤人员列表
|
|
|
+ exportMissingCardTimeUserList() {
|
|
|
+ this.http.post(
|
|
|
+ "/report/exportMissingCardTimeUserList",
|
|
|
+ {
|
|
|
+ startDate: this.WorktimeDatepickValue[0],
|
|
|
+ endDate: this.WorktimeDatepickValue[1],
|
|
|
+ departmentId: this.deptIdForNoReport.length>0?this.deptIdForNoReport[this.deptIdForNoReport.length-1]:null
|
|
|
+ },
|
|
|
+ (res) => {
|
|
|
+ if (res.code == "ok") {
|
|
|
+ let url = res.data;
|
|
|
+ this.downloadByA('缺考勤人员列表.xlsx', url);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ (error) => {
|
|
|
+ this.$message({
|
|
|
+ message: error,
|
|
|
+ type: "error",
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+ },
|
|
|
//导出员工每日填报工时数
|
|
|
exportMembWorkHours() {
|
|
|
this.http.post(
|
|
|
@@ -4574,6 +4715,7 @@
|
|
|
// month: this.date,
|
|
|
startDate: this.WorktimeDatepickValue[0],
|
|
|
endDate: this.WorktimeDatepickValue[1],
|
|
|
+ hasReportDeptId: this.deptIdForHasReport.length>0?this.deptIdForHasReport[this.deptIdForHasReport.length-1]:null,
|
|
|
},
|
|
|
(res) => {
|
|
|
if (res.code == "ok") {
|
|
|
@@ -4853,6 +4995,9 @@
|
|
|
}else if(e==2){
|
|
|
this.WorktimeDatepickValue = lastwd
|
|
|
this.showMonthWorkTimeReminder()
|
|
|
+ }else if(e==3){
|
|
|
+ this.WorktimeDatepickValue = lastwd
|
|
|
+ this.showMissingCardTimeUserList()
|
|
|
}else{
|
|
|
this.WorktimeDatepickValue = lastwd
|
|
|
this.showMonthNotWorkTime()
|
|
|
@@ -4868,6 +5013,9 @@
|
|
|
}else if(e==2){
|
|
|
this.WorktimeDatepickValue = nowwd
|
|
|
this.showMonthWorkTimeReminder()
|
|
|
+ }else if(e==3){
|
|
|
+ this.WorktimeDatepickValue = nowwd
|
|
|
+ this.showMissingCardTimeUserList()
|
|
|
}else{
|
|
|
this.WorktimeDatepickValue = nowwd
|
|
|
this.showMonthNotWorkTime()
|
|
|
@@ -4883,6 +5031,9 @@
|
|
|
}else if(e==2){
|
|
|
this.WorktimeDatepickValue = nextwd
|
|
|
this.showMonthWorkTimeReminder()
|
|
|
+ }else if(e==3){
|
|
|
+ this.WorktimeDatepickValue = nextwd
|
|
|
+ this.showMissingCardTimeUserList()
|
|
|
}else{
|
|
|
this.WorktimeDatepickValue = nextwd
|
|
|
this.showMonthNotWorkTime()
|
|
|
@@ -5294,8 +5445,15 @@
|
|
|
this.dimension(domain, index);
|
|
|
|
|
|
//获取项目审核人
|
|
|
- if (this.user.timeType.reportAuditType == 0 || this.user.timeType.reportAuditType == 4) {
|
|
|
+ if ( this.user.timeType.reportAuditType == 4) {
|
|
|
this.getProjectAuditorList(domain, index);
|
|
|
+ } else if (this.user.timeType.reportAuditType == 0) {
|
|
|
+ if (this.user.timeType.reportWorkflow) {
|
|
|
+ //启用审批流了,按照审批流显示
|
|
|
+ this.getWorkFlowList(domain, index);
|
|
|
+ } else {
|
|
|
+ this.getProjectAuditorList(domain, index);
|
|
|
+ }
|
|
|
} else {
|
|
|
//按分组的负责人来审核
|
|
|
domain.projectAuditorId = null;
|
|
|
@@ -5392,7 +5550,55 @@
|
|
|
}
|
|
|
);
|
|
|
},
|
|
|
-
|
|
|
+ //获取审批流进行显示
|
|
|
+ getWorkFlowList(domainItem, index) {
|
|
|
+ if(domainItem.projectId == '') {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ domainItem.projectAuditorId = null;
|
|
|
+ domainItem.projectAuditorName = null;
|
|
|
+ var param = { projectId: domainItem.projectId};
|
|
|
+ if (this.isSubstitude) {
|
|
|
+ if (this.workForm.userId != null && this.workForm.userId.length>0) {
|
|
|
+ param.userId = this.workForm.userId[0];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.http.post('/project-auditor/getWorkFlowList',param,
|
|
|
+ res => {
|
|
|
+ if (res.code == "ok") {
|
|
|
+ //取项目节点,进行加载
|
|
|
+ domainItem.auditWorkflow = res.data;
|
|
|
+ for (var i=0;i<res.data.length; i++) {
|
|
|
+ var node = res.data[i];
|
|
|
+ if (node.isDeptAudit == 0) {
|
|
|
+ var pAuditors = node.projectAuditors;
|
|
|
+ domainItem.auditUserList = pAuditors;
|
|
|
+ console.log('333333333', pAuditors)
|
|
|
+ if (pAuditors == null || pAuditors.length==0) {
|
|
|
+ this.$message({
|
|
|
+ message: this.$t('message.Dailyreviewerhasnotbeensetpleasecontacttheprojectmanager'),
|
|
|
+ type: "error"
|
|
|
+ });
|
|
|
+ } else if (pAuditors.length==1) {
|
|
|
+ //默认取第一个显示
|
|
|
+ domainItem.projectAuditorId = domainItem.auditUserList[0].auditorId;
|
|
|
+ domainItem.projectAuditorName = domainItem.auditUserList[0].auditorName;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.$forceUpdate();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ error => {
|
|
|
+ this.$message({
|
|
|
+ message: error,
|
|
|
+ type: "error"
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+ },
|
|
|
//获取项目审核人
|
|
|
getProjectAuditorList(domainItem, index) {
|
|
|
if(domainItem.projectId == '') {
|
|
|
@@ -5400,7 +5606,7 @@
|
|
|
}
|
|
|
domainItem.projectAuditorId = null;
|
|
|
domainItem.projectAuditorName = null;
|
|
|
- var param = { projectId: domainItem.projectId};
|
|
|
+ var param = { projectId: domainItem.projectId, forReport: true};
|
|
|
if (this.isSubstitude) {
|
|
|
if (this.workForm.userId != null && this.workForm.userId.length>0) {
|
|
|
param.userId = this.workForm.userId[0];
|
|
|
@@ -9202,7 +9408,7 @@
|
|
|
} else {
|
|
|
if (this.user.timeType.reportAuditType == 0 || this.user.timeType.reportAuditType == 4) {
|
|
|
this.$message({
|
|
|
- message: this.$t('message.Pleasespecifyaprojectreviewer'),
|
|
|
+ message: '审核人尚未设置',
|
|
|
type: "error"
|
|
|
});
|
|
|
return;
|
|
|
@@ -9532,6 +9738,12 @@
|
|
|
this.deptIdForHasReport = arr
|
|
|
this.showReportTimeLessThanCardTimeList();
|
|
|
}
|
|
|
+ if(obj.distinction == '18' && obj) {
|
|
|
+ let arr = []
|
|
|
+ arr.push(obj.id)
|
|
|
+ this.deptIdForNoReport = arr
|
|
|
+ this.showMissingCardTimeUserList();
|
|
|
+ }
|
|
|
},
|
|
|
//分页
|
|
|
handleCurrentChange(val) {
|