|
@@ -1,262 +1,280 @@
|
|
|
<template>
|
|
|
- <section>
|
|
|
+ <div class="review">
|
|
|
<!--工具条-->
|
|
|
- <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
|
|
|
- <el-form :inline="true">
|
|
|
- <el-form-item :label="$t('lable.department')" style="width: 165px">
|
|
|
- <el-cascader v-if="user.userNameNeedTranslate != 1" v-model="search.departmentIdArray" :placeholder="$t('defaultText.pleaseChoose')" style="width: 125px"
|
|
|
- :options="option" :props="{ checkStrictly: false,expandTrigger: 'hover' }" :show-all-levels="false" clearable
|
|
|
- @change="getList(1)" size="mini"></el-cascader>
|
|
|
+ <div class="reviewTop">
|
|
|
+ <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
|
|
|
+ <el-form :inline="true">
|
|
|
+ <el-form-item :label="$t('lable.department')" style="width: 165px">
|
|
|
+ <el-cascader v-if="user.userNameNeedTranslate != 1" v-model="search.departmentIdArray" :placeholder="$t('defaultText.pleaseChoose')" style="width: 125px"
|
|
|
+ :options="option" :props="{ checkStrictly: false,expandTrigger: 'hover' }" :show-all-levels="false" clearable
|
|
|
+ @change="getList(1)" size="mini"></el-cascader>
|
|
|
|
|
|
- <vueCascader :size="'mini'" :widthStr="'125'" :clearable="true" :subject="option" :radios="false" :distinction="'1'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1"></vueCascader>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item :label="'填报人'" style="width: 210px">
|
|
|
- <el-select v-if="user.userNameNeedTranslate != '1'" v-model="search.userIdArray" :placeholder="$t('defaultText.pleaseChoose')" clearable @visible-change="usersSearch" @remove-tag="usersSearch(false)" @clear="usersSearch(false)" filterable="true" size="mini" style="width: 150px" multiple collapse-tags>
|
|
|
- <el-option v-for="item in searchUsersList" :key="item.id" :label="item.name" :value="item.id">
|
|
|
- <span style="float: left" v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.name'></TranslationOpenDataText></span>
|
|
|
- <span style="float: left" v-if="user.userNameNeedTranslate != '1'">{{item.name}}</span>
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
+ <vueCascader :size="'mini'" :widthStr="'125'" :clearable="true" :subject="option" :radios="false" :distinction="'1'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1"></vueCascader>
|
|
|
+ </el-form-item>
|
|
|
|
|
|
- <selectCat v-if="user.userNameNeedTranslate == '1'" :filterable="true" :size="'size'" :subject="searchUsersList" :clearable="true" :multiSelect="true" :distinction="'1'" @selectCal="selectCal"></selectCat>
|
|
|
- <!-- <selectCat :size="'size'" :subject="searchUsersList" :clearable="true" :filterable="true" @selectCal="selectCal"></selectCat> -->
|
|
|
- </el-form-item>
|
|
|
+ <el-form-item :label="'填报人'" style="width: 210px">
|
|
|
+ <el-select v-if="user.userNameNeedTranslate != '1'" v-model="search.userIdArray" :placeholder="$t('defaultText.pleaseChoose')" clearable @visible-change="usersSearch" @remove-tag="usersSearch(false)" @clear="usersSearch(false)" filterable="true" size="mini" style="width: 150px" multiple collapse-tags>
|
|
|
+ <el-option v-for="item in searchUsersList" :key="item.id" :label="item.name" :value="item.id">
|
|
|
+ <span style="float: left" v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.name'></TranslationOpenDataText></span>
|
|
|
+ <span style="float: left" v-if="user.userNameNeedTranslate != '1'">{{item.name}}</span>
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
|
|
|
- <el-form-item :label="'审核人'" style="width: 210px">
|
|
|
- <el-select v-if="user.userNameNeedTranslate != '1'" v-model="search.auditUserId" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="usersSearch(false)" size="mini" style="width: 150px" collapse-tags>
|
|
|
- <el-option v-for="item in searchUsersList" :key="item.id" :label="item.name" :value="item.id">
|
|
|
- <span style="float: left" v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.name'></TranslationOpenDataText></span>
|
|
|
- <span style="float: left" v-if="user.userNameNeedTranslate != '1'">{{item.name}}</span>
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
+ <selectCat v-if="user.userNameNeedTranslate == '1'" :filterable="true" :size="'size'" :subject="searchUsersList" :clearable="true" :multiSelect="true" :distinction="'1'" @selectCal="selectCal"></selectCat>
|
|
|
+ <!-- <selectCat :size="'size'" :subject="searchUsersList" :clearable="true" :filterable="true" @selectCal="selectCal"></selectCat> -->
|
|
|
+ </el-form-item>
|
|
|
|
|
|
- <selectCat v-if="user.userNameNeedTranslate == '1'" :filterable="true" :size="'size'" :subject="searchUsersList" :clearable="true" :distinction="'2'" @selectCal="selectCal"></selectCat>
|
|
|
- </el-form-item>
|
|
|
+ <el-form-item :label="'审核人'" style="width: 210px">
|
|
|
+ <el-select v-if="user.userNameNeedTranslate != '1'" v-model="search.auditUserId" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="usersSearch(false)" size="mini" style="width: 150px" collapse-tags>
|
|
|
+ <el-option v-for="item in searchUsersList" :key="item.id" :label="item.name" :value="item.id">
|
|
|
+ <span style="float: left" v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.name'></TranslationOpenDataText></span>
|
|
|
+ <span style="float: left" v-if="user.userNameNeedTranslate != '1'">{{item.name}}</span>
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
|
|
|
- <el-form-item :label="$t('other.project')" style="width: 215px">
|
|
|
- <el-select v-model="search.projectId" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="getList()" filterable="true" size="mini" style="width: 175px" popper-class="projectSelectPopperClass">
|
|
|
- <el-option v-for="item in projectList" :key="item.id" :label="item.projectName + item.projectCode" :value="item.id">
|
|
|
- <span style="float: left;color: #8492a6;">{{ item.projectCode }}</span>
|
|
|
- <span style="float: right;font-size: 13px;">{{ item.projectName }}</span>
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <!-- <el-form-item style="margin-left:20px;">
|
|
|
- <el-button @click="batchApprove(true)" style="margin-left:10px;" :loading="batchApproveLoading" :disabled="multipleSelection.length==0">批量通过</el-button>
|
|
|
- <el-button @click="batchApprove(false)" :loading="batchDenyLoading" :disabled="multipleSelection.length==0">批量驳回</el-button>
|
|
|
- </el-form-item> -->
|
|
|
- <!-- <div> -->
|
|
|
-
|
|
|
- <el-form-item :label="$t('weekDay.date')">
|
|
|
- <!-- <el-date-picker v-model="search.date" :editable="false" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
|
|
- @change="getList()" :clearable="true" type="date" placeholder="选择工作日期"></el-date-picker> -->
|
|
|
- <el-date-picker
|
|
|
- v-model="dataTime"
|
|
|
- type="daterange"
|
|
|
- :range-separator="$t('other.to')"
|
|
|
- :start-placeholder="$t('time.startDate')"
|
|
|
- :end-placeholder="$t('time.endDate')"
|
|
|
- format="yyyy-MM-dd" value-format="yyyy-MM-dd" @change="dataTimes()" size="mini">
|
|
|
- </el-date-picker>
|
|
|
+ <selectCat v-if="user.userNameNeedTranslate == '1'" :filterable="true" :size="'size'" :subject="searchUsersList" :clearable="true" :distinction="'2'" @selectCal="selectCal"></selectCat>
|
|
|
</el-form-item>
|
|
|
|
|
|
- <el-form-item style="margin-left:20px;">
|
|
|
- <el-button @click="batchApprove(true)" style="margin-left:10px;" :loading="batchApproveLoading" :disabled="multipleSelection.length==0" size="mini">{{ $t('Batchthrough') }}</el-button>
|
|
|
- <el-button @click="batchApprove(false)" :disabled="multipleSelection.length==0" size="mini">{{ $t('Batchrejected') }}</el-button>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item style="margin-left:20px;">
|
|
|
- <el-link type="primary" @click="recordList(),recordDialogVisible = true,pageIndexList = 1,pageSizeList = 20">{{ $t('Auditrecords') }}</el-link>
|
|
|
+ <el-form-item :label="$t('other.project')" style="width: 215px">
|
|
|
+ <el-select v-model="search.projectId" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="getList()" filterable="true" size="mini" style="width: 175px" popper-class="projectSelectPopperClass">
|
|
|
+ <el-option v-for="item in projectList" :key="item.id" :label="item.projectName + item.projectCode" :value="item.id">
|
|
|
+ <span style="float: left;color: #8492a6;">{{ item.projectCode }}</span>
|
|
|
+ <span style="float: right;font-size: 13px;">{{ item.projectName }}</span>
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
</el-form-item>
|
|
|
+ <!-- <el-form-item style="margin-left:20px;">
|
|
|
+ <el-button @click="batchApprove(true)" style="margin-left:10px;" :loading="batchApproveLoading" :disabled="multipleSelection.length==0">批量通过</el-button>
|
|
|
+ <el-button @click="batchApprove(false)" :loading="batchDenyLoading" :disabled="multipleSelection.length==0">批量驳回</el-button>
|
|
|
+ </el-form-item> -->
|
|
|
+ <!-- <div> -->
|
|
|
+
|
|
|
+ <el-form-item :label="$t('weekDay.date')">
|
|
|
+ <!-- <el-date-picker v-model="search.date" :editable="false" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
|
|
+ @change="getList()" :clearable="true" type="date" placeholder="选择工作日期"></el-date-picker> -->
|
|
|
+ <el-date-picker
|
|
|
+ v-model="dataTime"
|
|
|
+ type="daterange"
|
|
|
+ :range-separator="$t('other.to')"
|
|
|
+ :start-placeholder="$t('time.startDate')"
|
|
|
+ :end-placeholder="$t('time.endDate')"
|
|
|
+ format="yyyy-MM-dd" value-format="yyyy-MM-dd" @change="dataTimes()" size="mini">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item style="margin-left:20px;">
|
|
|
+ <el-button @click="batchApprove(true)" style="margin-left:10px;" :loading="batchApproveLoading" :disabled="multipleSelection.length==0" size="mini">{{ $t('Batchthrough') }}</el-button>
|
|
|
+ <el-button @click="batchApprove(false)" :disabled="multipleSelection.length==0" size="mini">{{ $t('Batchrejected') }}</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item style="margin-left:20px;">
|
|
|
+ <el-link type="primary" @click="recordList(),recordDialogVisible = true,pageIndexList = 1,pageSizeList = 20">{{ $t('Auditrecords') }}</el-link>
|
|
|
+ </el-form-item>
|
|
|
|
|
|
- <!-- 调试 -->
|
|
|
- <!-- <cascaderOption></cascaderOption> -->
|
|
|
- <!-- </div> -->
|
|
|
- </el-form>
|
|
|
- </el-col>
|
|
|
+ <!-- 调试 -->
|
|
|
+ <!-- <cascaderOption></cascaderOption> -->
|
|
|
+ <!-- </div> -->
|
|
|
+ </el-form>
|
|
|
+ </el-col>
|
|
|
+ </div>
|
|
|
+
|
|
|
<!--列表-->
|
|
|
- <el-table :data="list" ref="multipleTable" v-if="showTable" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;"
|
|
|
- @selection-change="handleSelectionChange" :default-expand-all="defaultExpandAllFlg" @expand-change="expandChange">
|
|
|
- <el-table-column type="selection" width="55"></el-table-column>
|
|
|
- <el-table-column type="expand" :label="''">
|
|
|
- <template slot="header">
|
|
|
- <i :class="defaultExpandAllFlg ? 'el-icon-arrow-down' : 'el-icon-arrow-right'" style="cursor: pointer;" @click="defaultExpandAllFlgCli()"></i>
|
|
|
- </template>
|
|
|
- <template slot-scope="props">
|
|
|
- <el-timeline>
|
|
|
- <el-timeline-item v-for="(item,index) in props.row.data" :key="index">
|
|
|
- <el-card shadow="never">
|
|
|
- <p>{{ $t('other.project') + ':' }}<b>{{item.projectCode+'/'+item.project}}<span v-if="item.subProjectName != null"> / {{item.subProjectName}}</span>
|
|
|
- <span style="margin-left:15px;color:#DAA520;" >[
|
|
|
- <span v-if="item.isDeptAudit==0">
|
|
|
- <span v-if="item.projectAuditState==0">
|
|
|
- {{ $t('other.waitForTheProjectReviewer') }}<span v-if="item.projectAuditorName != null">(
|
|
|
- <!-- {{item.projectAuditorName}} -->
|
|
|
- <span v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.projectAuditorName'></TranslationOpenDataText></span>
|
|
|
- <span v-if="user.userNameNeedTranslate != '1'">{{item.projectAuditorName}}</span>
|
|
|
- )</span>{{ $t('other.audit') }}
|
|
|
+ <div class="reviewTable" ref="reviewTable">
|
|
|
+ <el-table :data="list" ref="multipleTable" v-if="showTable" :height="reviewTableHeight" :key="reviewTableHeightKey" highlight-current-row v-loading="listLoading" style="width: 100%;"
|
|
|
+ @selection-change="handleSelectionChange" :default-expand-all="defaultExpandAllFlg" @expand-change="expandChange">
|
|
|
+ <el-table-column type="selection" width="55"></el-table-column>
|
|
|
+ <el-table-column type="expand" :label="''">
|
|
|
+ <template slot="header">
|
|
|
+ <i :class="defaultExpandAllFlg ? 'el-icon-arrow-down' : 'el-icon-arrow-right'" style="cursor: pointer;" @click="defaultExpandAllFlgCli()"></i>
|
|
|
+ </template>
|
|
|
+ <template slot-scope="props">
|
|
|
+ <el-timeline>
|
|
|
+ <el-timeline-item v-for="(item,index) in props.row.data" :key="index">
|
|
|
+ <el-card shadow="never">
|
|
|
+ <p>{{ $t('other.project') + ':' }}<b>{{item.projectCode+'/'+item.project}}<span v-if="item.subProjectName != null"> / {{item.subProjectName}}</span>
|
|
|
+ <span style="margin-left:15px;color:#DAA520;" >[
|
|
|
+ <span v-if="item.isDeptAudit==0">
|
|
|
+ <span v-if="item.projectAuditState==0">
|
|
|
+ {{ $t('other.waitForTheProjectReviewer') }}<span v-if="item.projectAuditorName != null">(
|
|
|
+ <!-- {{item.projectAuditorName}} -->
|
|
|
+ <span v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.projectAuditorName'></TranslationOpenDataText></span>
|
|
|
+ <span v-if="user.userNameNeedTranslate != '1'">{{item.projectAuditorName}}</span>
|
|
|
+ )</span>{{ $t('other.audit') }}
|
|
|
+ </span>
|
|
|
+ <span style="color:#32CD32;" v-else-if="item.projectAuditState==1">
|
|
|
+ {{ $t('other.projectAuditor') }}<span v-if="item.projectAuditorName != null">(
|
|
|
+ <!-- {{item.projectAuditorName}} -->
|
|
|
+ <span v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.projectAuditorName'></TranslationOpenDataText></span>
|
|
|
+ <span v-if="user.userNameNeedTranslate != '1'">{{item.projectAuditorName}}</span>
|
|
|
+ )</span>{{ $t('state.approved') }}
|
|
|
+ </span>
|
|
|
</span>
|
|
|
- <span style="color:#32CD32;" v-else-if="item.projectAuditState==1">
|
|
|
- {{ $t('other.projectAuditor') }}<span v-if="item.projectAuditorName != null">(
|
|
|
- <!-- {{item.projectAuditorName}} -->
|
|
|
- <span v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.projectAuditorName'></TranslationOpenDataText></span>
|
|
|
- <span v-if="user.userNameNeedTranslate != '1'">{{item.projectAuditorName}}</span>
|
|
|
- )</span>{{ $t('state.approved') }}
|
|
|
+ <span v-else-if="item.isDeptAudit==1">
|
|
|
+ <!-- {{($t('other.await') +item.auditDeptName+('('+item.deptAuditorName+')')+ $t('other.audit'))}} -->
|
|
|
+ ({{$t('other.await')}}
|
|
|
+ <span v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='departmentName' :openid='item.auditDeptName'></TranslationOpenDataText></span>
|
|
|
+ <span v-if="user.userNameNeedTranslate != '1'">{{item.auditDeptName}}</span>
|
|
|
+ (<span v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.deptAuditorName'></TranslationOpenDataText></span>
|
|
|
+ <span v-if="user.userNameNeedTranslate != '1'">{{item.deptAuditorName}}</span>)
|
|
|
+ {{$t('other.audit')}})
|
|
|
</span>
|
|
|
- </span>
|
|
|
- <span v-else-if="item.isDeptAudit==1">
|
|
|
- <!-- {{($t('other.await') +item.auditDeptName+('('+item.deptAuditorName+')')+ $t('other.audit'))}} -->
|
|
|
- ({{$t('other.await')}}
|
|
|
- <span v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='departmentName' :openid='item.auditDeptName'></TranslationOpenDataText></span>
|
|
|
- <span v-if="user.userNameNeedTranslate != '1'">{{item.auditDeptName}}</span>
|
|
|
- (<span v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='item.deptAuditorName'></TranslationOpenDataText></span>
|
|
|
- <span v-if="user.userNameNeedTranslate != '1'">{{item.deptAuditorName}}</span>)
|
|
|
- {{$t('other.audit')}})
|
|
|
- </span>
|
|
|
- ]
|
|
|
- </span>
|
|
|
- </b></p>
|
|
|
- <p v-if="user.timeType.reportAuditType == 6" >审核流程:<span v-if="item.auditorList && item.auditorList.length == 1">一层审核(<span style="color:#20A0ff;">{{ item.auditorList[0].name }}</span>)</span>
|
|
|
- <span v-if="item.auditorList && item.auditorList.length == 2">两层审核(<span style="color:#20A0ff;">{{ item.auditorList[0].name }}->{{ item.auditorList[1].name }}</span>)</span>
|
|
|
- <el-button size="small" @click="viewOneReport(item)" v-if="!item.auditorList">查看</el-button>
|
|
|
- </p>
|
|
|
- <p v-if="user.timeType.customDegreeActive==1 && (item.degree_id != null || item.multiDegrId != '[]')">{{user.timeType.customDegreeName}}:{{item.degreeName}}</p>
|
|
|
- <p v-if="user.timeType.customDataActive==1">{{user.timeType.customDataName}}:{{item.customData}}</p>
|
|
|
- <p v-if="user.timeType.customTextActive==1">{{user.timeType.customTextName}}:{{item.customText}}</p>
|
|
|
- <p v-if="user.company.packageEngineering == 1">
|
|
|
- {{ $t('other.professionalProgress') +':'}} <span style="margin-right:10px;" v-for="progressItem in item.professionProgressList" :key="progressItem.id">
|
|
|
- {{progressItem.professionName}}({{progressItem.progress}}%)
|
|
|
- <el-tooltip v-if="progressItem.auditState == 0" :content="$t('state.WaitingAudit')" effect="light" placement="top">
|
|
|
- <i class="iconfont firerock-icondaibandengdaishenhe"></i>
|
|
|
- </el-tooltip>
|
|
|
- <el-tooltip v-if="progressItem.auditState == 1" :content="$t('state.alreadyPassed')" effect="light" placement="top">
|
|
|
- <i class="iconfont firerock-iconshenhetongguo"></i>
|
|
|
- </el-tooltip>
|
|
|
- <el-tooltip v-if="progressItem.auditState == 2" :content="$t('state.notThrough')" effect="light" placement="top">
|
|
|
- <i class="iconfont firerock-iconshenhebohui"></i>
|
|
|
- </el-tooltip>
|
|
|
- </span>
|
|
|
- </p>
|
|
|
- <p v-if="user.companyId == yuzhongCompId">
|
|
|
- <span>角色:{{item.extraField1? roleList.filter(r=>r.value == item.extraField1)[0].label:''}}</span>
|
|
|
- <span style="margin-left:10px;">工作职责:{{ item.extraField2? item.extraField2Name:''}}</span>
|
|
|
- <span style="margin-left:10px;">工作内容:{{ item.extraField3? item.extraField3Name:''}}</span></p>
|
|
|
- <p v-if="item.taskId != null">{{$t('other.task')}}:{{item.taskName}}
|
|
|
- <span style="margin-left:10px;" v-if="user.companyId==3092">-- 服务:{{ item.sapServiceName }}</span></p>
|
|
|
- <p v-if="item.groupId">
|
|
|
- <span>{{$t('other.taskGroup')}}:{{item.groupName}}</span>
|
|
|
- <!-- 阶段 -->
|
|
|
- <span v-if="item.stage != null && user.companyId != yuzhongCompId" style="margin-left:10px;"> {{$t('other.inputStage')}}:{{item.stage}}</span>
|
|
|
- </p>
|
|
|
- <p v-if="user.company.companyName == '成都明夷电子科技有限公司'">
|
|
|
- <span>用时占比:{{ item.progress }}%</span>
|
|
|
- </p>
|
|
|
- <p v-else>
|
|
|
- <span v-if="item.multiWorktime==1">{{ $t('other.project') }}</span>
|
|
|
- <span>{{$t('time.duration')}}:</span>
|
|
|
- <span v-if="item.startTime">{{ item.startTime + '-' + item.endTime }}</span>
|
|
|
- <span>{{item.time.toFixed(1)}}h </span>
|
|
|
- <span class="propsbtn" v-if="item.isOvertime === 1">
|
|
|
- <el-tag type="danger" size="mini" style="margin-left: 65px">{{ $t('other.WorkOvertime') }}<span v-if="item.overtimeHours">{{item.overtimeHours.toFixed(1)}}{{$t('time.hour')}}</span></el-tag></span>
|
|
|
- </p>
|
|
|
+ ]
|
|
|
+ </span>
|
|
|
+ </b></p>
|
|
|
+ <p v-if="user.timeType.reportAuditType == 6" >审核流程:<span v-if="item.auditorList && item.auditorList.length == 1">一层审核(<span style="color:#20A0ff;">{{ item.auditorList[0].name }}</span>)</span>
|
|
|
+ <span v-if="item.auditorList && item.auditorList.length == 2">两层审核(<span style="color:#20A0ff;">{{ item.auditorList[0].name }}->{{ item.auditorList[1].name }}</span>)</span>
|
|
|
+ <el-button size="small" @click="viewOneReport(item)" v-if="!item.auditorList">查看</el-button>
|
|
|
+ </p>
|
|
|
+ <p v-if="user.timeType.customDegreeActive==1 && (item.degree_id != null || item.multiDegrId != '[]')">{{user.timeType.customDegreeName}}:{{item.degreeName}}</p>
|
|
|
+ <p v-if="user.timeType.customDataActive==1">{{user.timeType.customDataName}}:{{item.customData}}</p>
|
|
|
+ <p v-if="user.timeType.customTextActive==1">{{user.timeType.customTextName}}:{{item.customText}}</p>
|
|
|
+ <p v-if="user.company.packageEngineering == 1">
|
|
|
+ {{ $t('other.professionalProgress') +':'}} <span style="margin-right:10px;" v-for="progressItem in item.professionProgressList" :key="progressItem.id">
|
|
|
+ {{progressItem.professionName}}({{progressItem.progress}}%)
|
|
|
+ <el-tooltip v-if="progressItem.auditState == 0" :content="$t('state.WaitingAudit')" effect="light" placement="top">
|
|
|
+ <i class="iconfont firerock-icondaibandengdaishenhe"></i>
|
|
|
+ </el-tooltip>
|
|
|
+ <el-tooltip v-if="progressItem.auditState == 1" :content="$t('state.alreadyPassed')" effect="light" placement="top">
|
|
|
+ <i class="iconfont firerock-iconshenhetongguo"></i>
|
|
|
+ </el-tooltip>
|
|
|
+ <el-tooltip v-if="progressItem.auditState == 2" :content="$t('state.notThrough')" effect="light" placement="top">
|
|
|
+ <i class="iconfont firerock-iconshenhebohui"></i>
|
|
|
+ </el-tooltip>
|
|
|
+ </span>
|
|
|
+ </p>
|
|
|
+ <p v-if="user.companyId == yuzhongCompId">
|
|
|
+ <span>角色:{{item.extraField1? roleList.filter(r=>r.value == item.extraField1)[0].label:''}}</span>
|
|
|
+ <span style="margin-left:10px;">工作职责:{{ item.extraField2? item.extraField2Name:''}}</span>
|
|
|
+ <span style="margin-left:10px;">工作内容:{{ item.extraField3? item.extraField3Name:''}}</span></p>
|
|
|
+ <p v-if="item.taskId != null">{{$t('other.task')}}:{{item.taskName}}
|
|
|
+ <span style="margin-left:10px;" v-if="user.companyId==3092">-- 服务:{{ item.sapServiceName }}</span></p>
|
|
|
+ <p v-if="item.groupId">
|
|
|
+ <span>{{$t('other.taskGroup')}}:{{item.groupName}}</span>
|
|
|
+ <!-- 阶段 -->
|
|
|
+ <span v-if="item.stage != null && user.companyId != yuzhongCompId" style="margin-left:10px;"> {{$t('other.inputStage')}}:{{item.stage}}</span>
|
|
|
+ </p>
|
|
|
+ <p v-if="user.company.companyName == '成都明夷电子科技有限公司'">
|
|
|
+ <span>用时占比:{{ item.progress }}%</span>
|
|
|
+ </p>
|
|
|
+ <p v-else>
|
|
|
+ <span v-if="item.multiWorktime==1">{{ $t('other.project') }}</span>
|
|
|
+ <span>{{$t('time.duration')}}:</span>
|
|
|
+ <span v-if="item.startTime">{{ item.startTime + '-' + item.endTime }}</span>
|
|
|
+ <span>{{item.time.toFixed(1)}}h </span>
|
|
|
+ <span class="propsbtn" v-if="item.isOvertime === 1">
|
|
|
+ <el-tag type="danger" size="mini" style="margin-left: 65px">{{ $t('other.WorkOvertime') }}<span v-if="item.overtimeHours">{{item.overtimeHours.toFixed(1)}}{{$t('time.hour')}}</span></el-tag></span>
|
|
|
+ </p>
|
|
|
|
|
|
- <div v-if="item.multiWorktime==0">
|
|
|
- <p>{{ $t('other.matters') }}:<span v-html="item.content"></span></p>
|
|
|
- </div>
|
|
|
- <div v-if="item.multiWorktime==1" >
|
|
|
- <div v-for="(timeItem, tIndex) in item.worktimeList" :key="tIndex"
|
|
|
- style="border: 0.5px #ddd solid;margin:5px 0px;padding:5px; ">
|
|
|
- <p style="line-height:20px;margin:5px 0px;">{{$t('time.duration')}}:
|
|
|
- <span v-if="item.reportTimeType == 2" style="margin-right:10px;">{{timeItem.startTime+'-'+timeItem.endTime}}</span>
|
|
|
- {{timeItem.time.toFixed(1)}}h
|
|
|
- </p>
|
|
|
- <p style="line-height:20px;margin:5px 0px;">{{ $t('other.matters') }}:<span v-html="timeItem.content"></span></p>
|
|
|
+ <div v-if="item.multiWorktime==0">
|
|
|
+ <p>{{ $t('other.matters') }}:<span v-html="item.content"></span></p>
|
|
|
+ </div>
|
|
|
+ <div v-if="item.multiWorktime==1" >
|
|
|
+ <div v-for="(timeItem, tIndex) in item.worktimeList" :key="tIndex"
|
|
|
+ style="border: 0.5px #ddd solid;margin:5px 0px;padding:5px; ">
|
|
|
+ <p style="line-height:20px;margin:5px 0px;">{{$t('time.duration')}}:
|
|
|
+ <span v-if="item.reportTimeType == 2" style="margin-right:10px;">{{timeItem.startTime+'-'+timeItem.endTime}}</span>
|
|
|
+ {{timeItem.time.toFixed(1)}}h
|
|
|
+ </p>
|
|
|
+ <p style="line-height:20px;margin:5px 0px;">{{ $t('other.matters') }}:<span v-html="timeItem.content"></span></p>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
|
|
|
- <!--照片的显示 -->
|
|
|
- <p v-if="item.pics != null && item.pics.length > 0">
|
|
|
- <el-image v-for="(pic, index) in item.pics" :key="index"
|
|
|
- style="width: 100px; height: 100px; margin-right:10px;"
|
|
|
- :src="pic"
|
|
|
- :preview-src-list="item.pics">
|
|
|
- </el-image>
|
|
|
- </p>
|
|
|
- </el-card>
|
|
|
- </el-timeline-item>
|
|
|
- </el-timeline>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
-
|
|
|
- <el-table-column prop="name" :label="$t('lable.name')" sortable>
|
|
|
- <template slot-scope="scope">
|
|
|
- <div>
|
|
|
- <span v-if="user.userNameNeedTranslate == '1'">
|
|
|
- <TranslationOpenDataText type='userName' :openid='scope.row.name'></TranslationOpenDataText>
|
|
|
- </span>
|
|
|
- <span v-else>
|
|
|
- {{scope.row.name}}
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="departmentName" :label="$t('lable.department')" sortable>
|
|
|
- <template slot-scope="scope">
|
|
|
- <div>
|
|
|
- <span v-if="user.userNameNeedTranslate == '1'">
|
|
|
- <TranslationOpenDataText type='departmentName' :openid='scope.row.departmentName'></TranslationOpenDataText>
|
|
|
- </span>
|
|
|
- <span v-else>
|
|
|
- {{scope.row.departmentName}}
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="dateStr" :label="$t('weekDay.date')" sortable>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="reportTime" :label="$t('screening.workTime') + '(h)'" >
|
|
|
- <template slot-scope="scope">
|
|
|
- {{scope.row.reportTime | amounts}}
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="cardHours" :label="$t('workAttendance') + '(h)'" v-if="user.timeType.showCorpwxCardtime==1||user.timeType.showDdCardtime==1">
|
|
|
- <template slot-scope="scope">
|
|
|
- {{scope.row.cardHours?scope.row.cardHours.toFixed(1):'-'}}
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="state" :label="$t('state.states')" sortable>
|
|
|
- <template slot-scope="scope">
|
|
|
- <span v-if="scope.row.state == 0" style="color:#DAA520;">
|
|
|
- <span v-if="user.userNameNeedTranslate != '1'">
|
|
|
- <span v-if="user.company.companyName != '成都明夷电子科技有限公司'">
|
|
|
- {{scope.row.isDeptAudit==0?$t('other.Tobereviewedbytheprojectreviewer'):($t('other.await')+scope.row.auditDeptName+('('+scope.row.deptAuditorName+')')+$t('other.audit'))}}
|
|
|
+ <!--照片的显示 -->
|
|
|
+ <p v-if="item.pics != null && item.pics.length > 0">
|
|
|
+ <el-image v-for="(pic, index) in item.pics" :key="index"
|
|
|
+ style="width: 100px; height: 100px; margin-right:10px;"
|
|
|
+ :src="pic"
|
|
|
+ :preview-src-list="item.pics">
|
|
|
+ </el-image>
|
|
|
+ </p>
|
|
|
+ </el-card>
|
|
|
+ </el-timeline-item>
|
|
|
+ </el-timeline>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column prop="name" :label="$t('lable.name')" sortable>
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div>
|
|
|
+ <span v-if="user.userNameNeedTranslate == '1'">
|
|
|
+ <TranslationOpenDataText type='userName' :openid='scope.row.name'></TranslationOpenDataText>
|
|
|
</span>
|
|
|
<span v-else>
|
|
|
- 待审核
|
|
|
+ {{scope.row.name}}
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="departmentName" :label="$t('lable.department')" sortable>
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div>
|
|
|
+ <span v-if="user.userNameNeedTranslate == '1'">
|
|
|
+ <TranslationOpenDataText type='departmentName' :openid='scope.row.departmentName'></TranslationOpenDataText>
|
|
|
</span>
|
|
|
- </span>
|
|
|
- <span v-if="user.userNameNeedTranslate == '1'">
|
|
|
- <span v-if="scope.row.isDeptAudit==0">{{$t('other.Tobereviewedbytheprojectreviewer')}}</span>
|
|
|
<span v-else>
|
|
|
- {{$t('other.await')}}
|
|
|
- <TranslationOpenDataText type='departmentName' :openid='scope.row.auditDeptName'></TranslationOpenDataText>
|
|
|
- (<TranslationOpenDataText type='userName' :openid='scope.row.deptAuditorName'></TranslationOpenDataText>)
|
|
|
- {{$t('other.audit')}}
|
|
|
+ {{scope.row.departmentName}}
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="dateStr" :label="$t('weekDay.date')" sortable>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="reportTime" :label="$t('screening.workTime') + '(h)'" >
|
|
|
+ <template slot-scope="scope">
|
|
|
+ {{scope.row.reportTime | amounts}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="cardHours" :label="$t('workAttendance') + '(h)'" v-if="user.timeType.showCorpwxCardtime==1||user.timeType.showDdCardtime==1">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ {{scope.row.cardHours?scope.row.cardHours.toFixed(1):'-'}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="state" :label="$t('state.states')" sortable>
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span v-if="scope.row.state == 0" style="color:#DAA520;">
|
|
|
+ <span v-if="user.userNameNeedTranslate != '1'">
|
|
|
+ <span v-if="user.company.companyName != '成都明夷电子科技有限公司'">
|
|
|
+ {{scope.row.isDeptAudit==0?$t('other.Tobereviewedbytheprojectreviewer'):($t('other.await')+scope.row.auditDeptName+('('+scope.row.deptAuditorName+')')+$t('other.audit'))}}
|
|
|
+ </span>
|
|
|
+ <span v-else>
|
|
|
+ 待审核
|
|
|
+ </span>
|
|
|
+ </span>
|
|
|
+ <span v-if="user.userNameNeedTranslate == '1'">
|
|
|
+ <span v-if="scope.row.isDeptAudit==0">{{$t('other.Tobereviewedbytheprojectreviewer')}}</span>
|
|
|
+ <span v-else>
|
|
|
+ {{$t('other.await')}}
|
|
|
+ <TranslationOpenDataText type='departmentName' :openid='scope.row.auditDeptName'></TranslationOpenDataText>
|
|
|
+ (<TranslationOpenDataText type='userName' :openid='scope.row.deptAuditorName'></TranslationOpenDataText>)
|
|
|
+ {{$t('other.audit')}}
|
|
|
+ </span>
|
|
|
</span>
|
|
|
</span>
|
|
|
- </span>
|
|
|
- <span v-else-if="scope.row.state == 1" style="color:#32CD32;">{{ $t('state.alreadyPassed') }}</span>
|
|
|
- <span v-else-if="scope.row.state == 2" style="color:#FF0000;">{{ $t('state.rejected') }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column :label="$t('operation')" width="220">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-button type="primary" :loading="logining" size="small" @click="approve(scope.row.id,scope.row.date, scope.row)">{{ $t('btn.through') }}</el-button>
|
|
|
- <el-button type="danger" :loading="logining" size="small" @click="showDenyDialog(scope.row.id,0,scope.row.dateStr, scope.row)">{{ $t('btn.rejected') }}</el-button>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- <!--驳回弹出框 -->
|
|
|
+ <span v-else-if="scope.row.state == 1" style="color:#32CD32;">{{ $t('state.alreadyPassed') }}</span>
|
|
|
+ <span v-else-if="scope.row.state == 2" style="color:#FF0000;">{{ $t('state.rejected') }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column :label="$t('operation')" width="220">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-button type="primary" :loading="logining" size="small" @click="approve(scope.row.id,scope.row.date, scope.row)">{{ $t('btn.through') }}</el-button>
|
|
|
+ <el-button type="danger" :loading="logining" size="small" @click="showDenyDialog(scope.row.id,0,scope.row.dateStr, scope.row)">{{ $t('btn.rejected') }}</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 分页 -->
|
|
|
+ <div class="reviewPaging">
|
|
|
+ <el-pagination
|
|
|
+ @size-change="reviewHandleSizeChange"
|
|
|
+ @current-change="reviewHandleCurrentChange"
|
|
|
+ :current-page="reviewTableObj.reviewTableIndex"
|
|
|
+ :page-sizes="[10, 15, 20, 30]"
|
|
|
+ :page-size="reviewTableObj.reviewTableSize"
|
|
|
+ layout="total, prev, pager, next, sizes"
|
|
|
+ :total="reviewTableObj.reviewTableTotal"
|
|
|
+ >
|
|
|
+ </el-pagination>
|
|
|
+ </div> <!--驳回弹出框 -->
|
|
|
<el-dialog :title="$t('defaultText.pleaseEnterTheReason')" v-if="denyReasonDialog" :visible.sync="denyReasonDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
|
|
|
<div>
|
|
|
<el-input type="textarea" v-model="denyForm.reason" rows="2" :placeholder="$t('defaultText.pleaseEnterYourDecision')+(denyForm.i==0?$t('btn.rejected'):$t('btn.undo'))+$t('other.reason')" />
|
|
@@ -432,7 +450,7 @@
|
|
|
<el-button type="primary" @click="approveinfun()" v-else>{{ $t('btn.determine') }}</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
- </section>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
@@ -511,7 +529,16 @@
|
|
|
isbatch: false,
|
|
|
defaultExpandAllFlg: false,
|
|
|
showTable: true,
|
|
|
- projectList: []
|
|
|
+ projectList: [],
|
|
|
+ reviewTableHeight: 0,
|
|
|
+ reviewTableHeightKey: 1,
|
|
|
+
|
|
|
+ reviewTableObj: {
|
|
|
+ reviewTableTotal: 0,
|
|
|
+ reviewTableIndex: 1,
|
|
|
+ reviewTableSize: 10,
|
|
|
+ },
|
|
|
+ listBackup: []
|
|
|
};
|
|
|
},
|
|
|
filters: {
|
|
@@ -787,6 +814,25 @@
|
|
|
this.getList()
|
|
|
}
|
|
|
},
|
|
|
+ reviewHandleSizeChange(val) {
|
|
|
+ this.reviewTableObj.reviewTableSize = val,
|
|
|
+ this.reviewTableObj.reviewTableIndex = 1
|
|
|
+ this.list = this.currentChangePage(val, 1, this.listBackup);
|
|
|
+ },
|
|
|
+ reviewHandleCurrentChange(val) {
|
|
|
+ this.reviewTableObj.reviewTableIndex = val
|
|
|
+ this.list = this.currentChangePage(this.reviewTableObj.reviewTableSize, val, this.listBackup);
|
|
|
+ },
|
|
|
+ currentChangePage(size, current, list) {
|
|
|
+ const tablePush = [];
|
|
|
+ let array = JSON.parse(JSON.stringify(list));
|
|
|
+ array.forEach((item, index) => {
|
|
|
+ if (size * (current - 1) <= index && index <= size * current - 1) {
|
|
|
+ tablePush.push(item);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return tablePush;
|
|
|
+ },
|
|
|
//获取待审核的数据列表
|
|
|
getList(e) {
|
|
|
this.listLoading = true;
|
|
@@ -820,7 +866,14 @@
|
|
|
res => {
|
|
|
this.listLoading = false;
|
|
|
if (res.code == "ok") {
|
|
|
- this.list = res.data;
|
|
|
+ this.listBackup = JSON.parse(JSON.stringify(res.data));
|
|
|
+ this.list = this.currentChangePage(10, 1, res.data);
|
|
|
+ let total = res.data.length || 0
|
|
|
+ this.reviewTableObj = {
|
|
|
+ reviewTableTotal: total,
|
|
|
+ reviewTableIndex: 1,
|
|
|
+ reviewTableSize: this.reviewTableObj.reviewTableSize
|
|
|
+ }
|
|
|
// console.log(this.port.report.portList);
|
|
|
} else {
|
|
|
this.$message({
|
|
@@ -1060,6 +1113,8 @@
|
|
|
};
|
|
|
},
|
|
|
mounted() {
|
|
|
+ this.reviewTableHeight = this.$refs.reviewTable.offsetHeight
|
|
|
+ this.reviewTableHeightKey++
|
|
|
this.getList();
|
|
|
this.getDepartment();
|
|
|
this.getProjectList();
|
|
@@ -1068,10 +1123,30 @@
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
-<style lang="scss">
|
|
|
+<style lang="scss" scoped>
|
|
|
.propsbtn {
|
|
|
display: inline-block;
|
|
|
padding-left: 20px;
|
|
|
}
|
|
|
|
|
|
+.review {
|
|
|
+ width: 100%;
|
|
|
+ height: calc(100vh - 60px);
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ .reviewTable {
|
|
|
+ flex: 1;
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
+ .reviewPaging {
|
|
|
+ padding: 10px 20px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-end;
|
|
|
+ width: 100%;
|
|
|
+ margin-top: 2px solid #999;
|
|
|
+ box-sizing: border-box;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
</style>
|