|
@@ -323,285 +323,140 @@
|
|
|
</div>
|
|
|
|
|
|
<!-- 填写日报的dialog -->
|
|
|
- <el-dialog :title="editTitle[isBatch]" :visible.sync="dialogVisible" width="60%" style="height:95%" :close-on-click-modal="false" @closed="guanbi()" custom-class="editReportDialog" ref="editReportDialog">
|
|
|
- <el-form ref="workForm" :model="workForm" :rules="workRules" label-width="120px">
|
|
|
- <el-form-item :label="$t('screening.selectPeople')" v-if="isSubstitude">
|
|
|
- <el-input v-if="user.userNameNeedTranslate != 1" @focus="showChooseMembTree" v-model="workForm.userNames"
|
|
|
- :placeholder="$t('defaultText.pleaseSelectAsubstitute')" ></el-input>
|
|
|
- <div class="daitianrbao" @click="showChooseMembTree" v-if="user.userNameNeedTranslate == 1">
|
|
|
- <span class="spnn" v-if="workForm.userNames">
|
|
|
- <span v-for="(item, index) in workForm.userNames" :key="index">
|
|
|
- <span><ww-open-data type='userName' :openid='item'></ww-open-data></span>
|
|
|
- <span v-if="index < workForm.userNames.length - 1">,</span>
|
|
|
+ <el-dialog :title="editTitle[isBatch]" :visible.sync="dialogVisible" width="60%" :close-on-click-modal="false" @closed="guanbi()" :top="'5.5vh'" custom-class="editReportDialog" ref="editReportDialog">
|
|
|
+ <div style="height: 65vh;overflow: auto;">
|
|
|
+ <el-form ref="workForm" :model="workForm" :rules="workRules" label-width="120px">
|
|
|
+ <el-form-item :label="$t('screening.selectPeople')" v-if="isSubstitude">
|
|
|
+ <el-input v-if="user.userNameNeedTranslate != 1" @focus="showChooseMembTree" v-model="workForm.userNames"
|
|
|
+ :placeholder="$t('defaultText.pleaseSelectAsubstitute')" ></el-input>
|
|
|
+ <div class="daitianrbao" @click="showChooseMembTree" v-if="user.userNameNeedTranslate == 1">
|
|
|
+ <span class="spnn" v-if="workForm.userNames">
|
|
|
+ <span v-for="(item, index) in workForm.userNames" :key="index">
|
|
|
+ <span><ww-open-data type='userName' :openid='item'></ww-open-data></span>
|
|
|
+ <span v-if="index < workForm.userNames.length - 1">,</span>
|
|
|
+ </span>
|
|
|
+ </span>
|
|
|
+ <span class="spnn hover" v-else>
|
|
|
+ {{$t('defaultText.pleaseSelectAsubstitute')}}
|
|
|
</span>
|
|
|
- </span>
|
|
|
- <span class="spnn hover" v-else>
|
|
|
- {{$t('defaultText.pleaseSelectAsubstitute')}}
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item :label="$t('screening.workingDate')" prop="createDate">
|
|
|
- <el-date-picker v-model="workForm.createDate" :editable="false" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
|
|
- :style="'width:'+(isBatch==0?'200':'280')+'px;'" :type="isBatch==0?'date':'daterange'"
|
|
|
- @change="changeMonth()" @blur="iptBlur(reportTimeType.type)" :clearable="false" :placeholder="$t('defaultText.selectWorkDate')" :disabled="isDisable"></el-date-picker>
|
|
|
- <div v-if="falsss" style="display: inline-block;margin-left:10px">{{jsDay}} {{$t('time.day')}}, {{jsTime}} {{$t('time.hour')}}</div>
|
|
|
- <div v-if="isBatch!=0" style="display: inline-block;margin-left:10px">{{jsDay}} {{$t('time.day')}}, {{$t('other.fillInTheTotal')}} {{jsTime}} {{$t('time.hour')}}</div>
|
|
|
- <span v-if="reportTimeType.type == 3" style="margin-left:30px;">{{isBatch==0? $t('other.total'):$t('weekDay.daily')}}{{$t('time.duration')}}:</span>
|
|
|
- <el-input-number :disabled="(!canEdit || user.timeType.lockWorktime) && !isWeekend" v-if="reportTimeType.type == 3" style="margin-left:10px;" @change="changeAllTime"
|
|
|
- v-model="reportTimeType.allday" :precision="1" :step="0.5" :max="12" :min="0.5"></el-input-number>
|
|
|
- <span v-if="reportTimeType.type == 3">{{$t('time.hour')}}</span>
|
|
|
-
|
|
|
- <span v-if="workForm.time">{{$t('other.attendancePunch')}}: {{workForm.time.startTime}}-{{workForm.time.endTime}}, {{workForm.time.workHours}}{{$t('time.hour')}}</span>
|
|
|
- <!--批量填报和批量代填不显示考勤记录-->
|
|
|
- <span v-if="!isBatch && (user.timeType.syncDingding==1 || user.timeType.syncCorpwxTime==1)&&!workForm.time" >{{$t('other.noAttendanceRecord')}}</span>
|
|
|
- <el-button type="default" style="margin-left:5px;" size="mini" :loading="syncTimeLoading"
|
|
|
- v-if="!isBatch && user.timeType.syncCorpwxTime==1 && (workForm.createDate == today || !workForm.time || workForm.time.workHours == 0)" icon="el-icon-refresh"
|
|
|
- @click="refreshWXCardTime(workForm.createDate)"></el-button>
|
|
|
- </el-form-item>
|
|
|
- <!-- 000000 -->
|
|
|
- <div v-for="(domain, index) in workForm.domains" :key="domain.id" :style="index>0?'margin-top:10px;':''">
|
|
|
- <div v-if="reportTimeType.multiWorktime==0">
|
|
|
- <el-form-item v-if="reportTimeType.type != 3" :label="reportTimeType.type ==2?$t('screening.workHours'):$t('screening.workTime')" :prop="'domains.' + index + '.'+timeFields[reportTimeType.type]"
|
|
|
- :rules="{ required: true, message: $t('defaultText.pleaseSelectWorkingHours'), trigger: 'blur' }">
|
|
|
- <el-select v-model="domain.timeType" style="width:200px;"
|
|
|
- v-if="reportTimeType.type == 0"
|
|
|
- :placeholder="$t('defaultText.pleaseSelectWorkingHours')"
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
- @change="onTimeTypeChange(domain.timeType)">
|
|
|
- <el-option
|
|
|
- v-for="item in timeType"
|
|
|
- :key="item.value"
|
|
|
- :label="item.label"
|
|
|
- :value="item.value">
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- <!-- 数字时长选择 -->
|
|
|
- <el-select v-model="domain.workingTime" style="width:200px;"
|
|
|
- v-if="reportTimeType.type == 1"
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
- :placeholder="$t('defaultText.pleaseSelectWorkingHours') + domain.workingTime"
|
|
|
- @change="seleChn(0,domain)">
|
|
|
- <el-option v-for="item in timeRange" :key="item" :value="item.toFixed(1)">{{item.toFixed(1)}}</el-option>
|
|
|
- </el-select>
|
|
|
- <span v-if="reportTimeType.type == 1">{{$t('time.hour')}}</span>
|
|
|
-
|
|
|
- <span v-if="reportTimeType.type == 2">
|
|
|
- <!--时间范围选择 -->
|
|
|
- <el-time-picker
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
- v-model="domain.startTime"
|
|
|
- :placeholder="$t('time.startTime')"
|
|
|
- style="width:120px;"
|
|
|
- format="HH:mm"
|
|
|
- value-format="HH:mm"
|
|
|
- :picker-options="{
|
|
|
- start: '08:00',
|
|
|
- end: '23:30'
|
|
|
- }"
|
|
|
- @change="iptChang()">
|
|
|
- </el-time-picker> - <el-time-picker
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
- v-model="domain.endTime"
|
|
|
- :placeholder="$t('time.endTime')"
|
|
|
- style="width:120px;"
|
|
|
- format="HH:mm"
|
|
|
- value-format="HH:mm"
|
|
|
- :picker-options="{
|
|
|
- start: '08:00',
|
|
|
- end: '23:30',
|
|
|
- minTime: domain.startTime
|
|
|
- }"
|
|
|
- @change="iptChang()">
|
|
|
- </el-time-picker>
|
|
|
- </span>
|
|
|
- <div class="overtime" v-if="user.timeType.fillOvertime || (isWeekend && user.timeType.lockWorktime != 1)">
|
|
|
- <el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">{{$t('other.IncludingOvertime')}}</el-checkbox>
|
|
|
- <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">{{$t('time.hour')}}</span>
|
|
|
</div>
|
|
|
</el-form-item>
|
|
|
-
|
|
|
- <el-form-item :label="user.companyId==781? $t('screening.workTasks') : $t('screening.inputProject')" :prop="'domains.' + index + '.projectId'"
|
|
|
- :rules="{ required: true, message: user.companyId==781? $t('defaultText.pleaseSelectaJob'): $t('defaultText.pleaseSelectSnItem'), trigger: ['change','blur'] }">
|
|
|
- <el-select v-model="domain.projectId" :placeholder="user.companyId==781?$t('defaultText.pleaseSelectaJob'): $t('defaultText.pleaseSelectSnItem')" style="width:200px;" clearable="true" filterable="true" value-key="id"
|
|
|
- @change="selectProject(domain, index)"
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" popper-class="projectSelectPopperClass">
|
|
|
- <!-- <el-option v-for="item in projectList" :disabled="item.status>=2" :key="item.id" :label="item.projectName" :value="item.id"></el-option> -->
|
|
|
- <el-option v-for="item in fillProjectList" :disabled="item.status!=1 && item.status!=4" :key="item.id" :label="item.projectName + '\u3000' + item.projectCode" :value="item.id">
|
|
|
- <span style="float: left; color: #8492a6; font-size: 13px;">{{ item.projectCode }}</span>
|
|
|
- <span style="float: right;">{{ item.projectName }}</span>
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- <template v-if="user.timeType.mainProjectState != 1">
|
|
|
- <span v-if="domain.subProjectList != null && domain.subProjectList.length> 0 && domain.projectId != ''"
|
|
|
- style="margin-left:45px;">{{$t('lable.subproject')}}</span>
|
|
|
-
|
|
|
- <!--子项目 -->
|
|
|
- <el-select v-model="domain.subProjectId" :placeholder="$t('defaultText.PleaseSelectaSub-item')" style="width:200px;margin-left:10px;" clearable="true"
|
|
|
- v-if="domain.subProjectList != null && domain.subProjectList.length> 0 && domain.projectId != ''"
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" @change="updateSubProject">
|
|
|
- <el-option v-for="item in domain.subProjectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
- </el-select>
|
|
|
- </template>
|
|
|
-
|
|
|
- <el-link v-if="index >= 1&&domain.canEdit" type="primary" :underline="false" @click="delDomain(index)" style="float:right;margin-right:10px;"
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)">
|
|
|
- <i class="fa fa-trash" style="color: red;;font-size:18px;"></i>
|
|
|
- </el-link>
|
|
|
- <!-- <el-link type="primary" v-if="canEdit"
|
|
|
- :underline="false" style="margin-left:10px;" @click="copyProject(index)">复制</el-link> -->
|
|
|
- </el-form-item>
|
|
|
- <el-form-item :label="user.companyId==781? $t('other.describe'):$t('other.projectDescription')" v-if="user.company.packageProject==0&&domain.projectId&&projectList.filter(p=>p.id == domain.projectId)[0].projectDesc">
|
|
|
- <span>{{projectList.filter(p=>p.id == domain.projectId)[0].projectDesc}}</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;">
|
|
|
- <el-option v-for="item in timeBasecostList" :label="item.name" :value="item.id" :key="item.id"></el-option>
|
|
|
- </el-select>
|
|
|
+ <el-form-item :label="$t('screening.workingDate')" prop="createDate">
|
|
|
+ <el-date-picker v-model="workForm.createDate" :editable="false" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
|
|
+ :style="'width:'+(isBatch==0?'200':'280')+'px;'" :type="isBatch==0?'date':'daterange'"
|
|
|
+ @change="changeMonth()" @blur="iptBlur(reportTimeType.type)" :clearable="false" :placeholder="$t('defaultText.selectWorkDate')" :disabled="isDisable"></el-date-picker>
|
|
|
+ <div v-if="falsss" style="display: inline-block;margin-left:10px">{{jsDay}} {{$t('time.day')}}, {{jsTime}} {{$t('time.hour')}}</div>
|
|
|
+ <div v-if="isBatch!=0" style="display: inline-block;margin-left:10px">{{jsDay}} {{$t('time.day')}}, {{$t('other.fillInTheTotal')}} {{jsTime}} {{$t('time.hour')}}</div>
|
|
|
+ <span v-if="reportTimeType.type == 3" style="margin-left:30px;">{{isBatch==0? $t('other.total'):$t('weekDay.daily')}}{{$t('time.duration')}}:</span>
|
|
|
+ <el-input-number :disabled="(!canEdit || user.timeType.lockWorktime) && !isWeekend" v-if="reportTimeType.type == 3" style="margin-left:10px;" @change="changeAllTime"
|
|
|
+ v-model="reportTimeType.allday" :precision="1" :step="0.5" :max="12" :min="0.5"></el-input-number>
|
|
|
+ <span v-if="reportTimeType.type == 3">{{$t('time.hour')}}</span>
|
|
|
+
|
|
|
+ <span v-if="workForm.time">{{$t('other.attendancePunch')}}: {{workForm.time.startTime}}-{{workForm.time.endTime}}, {{workForm.time.workHours}}{{$t('time.hour')}}</span>
|
|
|
+ <!--批量填报和批量代填不显示考勤记录-->
|
|
|
+ <span v-if="!isBatch && (user.timeType.syncDingding==1 || user.timeType.syncCorpwxTime==1)&&!workForm.time" >{{$t('other.noAttendanceRecord')}}</span>
|
|
|
+ <el-button type="default" style="margin-left:5px;" size="mini" :loading="syncTimeLoading"
|
|
|
+ v-if="!isBatch && user.timeType.syncCorpwxTime==1 && (workForm.createDate == today || !workForm.time || workForm.time.workHours == 0)" icon="el-icon-refresh"
|
|
|
+ @click="refreshWXCardTime(workForm.createDate)"></el-button>
|
|
|
</el-form-item>
|
|
|
- <el-form-item :label="$t('lable.taskGrouping')" v-if="user.company.packageProject == 1">
|
|
|
- <!-- 任务分组 -->
|
|
|
- <el-select v-model="domain.groupId" :placeholder="$t('defaultText.pleaseSelectaTaskGroup')" style="width:200px;" clearable="true"
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" @change="getGroupStages(domain, index)">
|
|
|
- <el-option v-for="item in domain.taskGroups" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
- </el-select>
|
|
|
- <!-- 项目的阶段 -->
|
|
|
- <span v-if="domain.stages != null && domain.stages.length> 0"
|
|
|
- style="margin-left:30px;">{{$t('other.inputStage')}}</span>
|
|
|
- <el-select v-model="domain.stage" :placeholder="$t('defaultText.pleaseChoose')" style="width:200px;margin-left:10px;"
|
|
|
- clearable="true" v-if="domain.stages != null && domain.stages.length> 0"
|
|
|
- @change="changeStages(domain, index)"
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)">
|
|
|
- <el-option v-for="item in domain.stages" :key="item.id" :label="item.stagesName" :value="item.stagesName"></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item :label="user.companyId==781? $t('other.reviewer') : $t('other.projectAuditor')" v-if="user.timeType.reportAuditType != 3">
|
|
|
-
|
|
|
- <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'"><ww-open-data type='userName' :openid='item.auditorName'></ww-open-data></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"></selectCat>
|
|
|
-
|
|
|
- </el-form-item>
|
|
|
- <!-- 111111 -->
|
|
|
- <el-form-item :label="$t('other.reviewer')" v-if="user.timeType.reportAuditType == 3">
|
|
|
- <el-select v-model="domain.auditorFirst" :placeholder="$t('di-yi-shen-he-ren')" :disabled="!domain.canEdit" style="width:200px;">
|
|
|
- <el-option v-for="item in allUsersList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
- </el-select>
|
|
|
-
|
|
|
- <template v-if="user.timeType.auditLevel > 1">
|
|
|
- <i class="el-icon-right"></i>
|
|
|
- <el-select v-model="domain.auditorSec" :placeholder="$t('di-er-shen-he-ren')" :disabled="!domain.canEdit" style="width:200px;">
|
|
|
- <el-option v-for="item in allUsersList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ <!-- 000000 -->
|
|
|
+ <div v-for="(domain, index) in workForm.domains" :key="domain.id" :style="index>0?'margin-top:10px;':''">
|
|
|
+ <div v-if="reportTimeType.multiWorktime==0">
|
|
|
+ <el-form-item v-if="reportTimeType.type != 3" :label="reportTimeType.type ==2?$t('screening.workHours'):$t('screening.workTime')" :prop="'domains.' + index + '.'+timeFields[reportTimeType.type]"
|
|
|
+ :rules="{ required: true, message: $t('defaultText.pleaseSelectWorkingHours'), trigger: 'blur' }">
|
|
|
+ <el-select v-model="domain.timeType" style="width:200px;"
|
|
|
+ v-if="reportTimeType.type == 0"
|
|
|
+ :placeholder="$t('defaultText.pleaseSelectWorkingHours')"
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
+ @change="onTimeTypeChange(domain.timeType)">
|
|
|
+ <el-option
|
|
|
+ v-for="item in timeType"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value">
|
|
|
+ </el-option>
|
|
|
</el-select>
|
|
|
- </template>
|
|
|
-
|
|
|
- <template v-if="user.timeType.auditLevel > 2">
|
|
|
- <i class="el-icon-right"></i>
|
|
|
- <el-select v-model="domain.auditorThird" :placeholder="$t('di-san-shen-he-ren')" :disabled="!domain.canEdit" style="width:200px;">
|
|
|
- <el-option v-for="item in allUsersList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ <!-- 数字时长选择 -->
|
|
|
+ <el-select v-model="domain.workingTime" style="width:200px;"
|
|
|
+ v-if="reportTimeType.type == 1"
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
+ :placeholder="$t('defaultText.pleaseSelectWorkingHours') + domain.workingTime"
|
|
|
+ @change="seleChn(0,domain)">
|
|
|
+ <el-option v-for="item in timeRange" :key="item" :value="item.toFixed(1)">{{item.toFixed(1)}}</el-option>
|
|
|
</el-select>
|
|
|
- </template>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item :label="$t('chao-song-ren')" v-if="user.timeType.reportAuditType == 3">
|
|
|
- <el-select v-model="domain.ccUserid" clearable :disabled="!domain.canEdit" style="width:200px;">
|
|
|
- <el-option v-for="item in allUsersList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
+ <span v-if="reportTimeType.type == 1">{{$t('time.hour')}}</span>
|
|
|
|
|
|
- <!-- 相关维度/自定义维度 -->
|
|
|
- <el-form-item :label="yonghuUser.customDegreeName" v-if="domain.projectId && yonghuUser.customDegreeActive == 1" :rules="user.timeType.customDegreeStatus == 1 && domain.wuduList != undefined && domain.wuduList.length != 0 ? { required: true, message: $t('defaultText.pleaseChoose') + yonghuUser.customDegreeName, trigger: ['change','blur'] } : null" :prop="'domains.' + index + '.degreeId'">
|
|
|
- <el-select v-model="domain.degreeId" clearable :placeholder="$t('defaultText.pleaseChoose')" :disabled="!domain.canEdit" style="width:200px;">
|
|
|
- <el-option v-for="item in domain.wuduList" :key="item.value" :label="item.name" :value="item.id">
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <!-- 相关数值 -->
|
|
|
- <el-form-item :label="yonghuUser.customDataName" v-if="yonghuUser.customDataActive == 1" :prop="'domains.' + index + '.customData'" :rules="user.timeType.customDataStatus == 1 ? { type: 'number', required: true, message: $t('defaultText.pleaseFillOut') + yonghuUser.customDataName, trigger: ['change','blur'] } : null">
|
|
|
- <el-input-number :id="'numberData_'+index" :disabled="!domain.canEdit" v-model="domain.customData" style="width:200px;" @keyup.native="restrictNumber('numberData_'+index)" :max="user.timeType.customDataMaxStatus == 1 ? user.timeType.customDataMaxValue : 'infinity'"></el-input-number>
|
|
|
- </el-form-item>
|
|
|
- <!-- 自定义文本 -->
|
|
|
- <el-form-item :label="yonghuUser.customTextName" v-if="yonghuUser.customTextActive == 1" :prop="'domains.' + index + '.customText'" :rules="user.timeType.customTextStatus == 1 ? { required: true, message: $t('defaultText.pleaseFillOut') + yonghuUser.customTextName, trigger: ['change','blur'] } : null">
|
|
|
- <el-input :disabled="!domain.canEdit" v-model="domain.customText" type="textarea" :rows="1" style="width:75%;margin-right:7%" maxlength="1000" show-word-limit></el-input>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item v-if="reportTimeType.type == 3" :label="$t('lable.percentageOfTime')" :prop="'domains.' + index + '.'+timeFields[reportTimeType.type]"
|
|
|
- :rules="{ required: true, message: $t('defaultText.pleaseSetTheTimeRatio'), trigger: 'blur' }">
|
|
|
- <div style="width:300px;">
|
|
|
- <el-col span="14"><el-slider :disabled="!domain.canEdit" v-model="domain.progress" :min="5" :show-tooltip="false" :step="5" style="width:180px;" @input="domain.workingTime = (reportTimeType.allday*domain.progress/100).toFixed(1)" @change="seleChn(0)"></el-slider></el-col>
|
|
|
- <el-col span="10"><span style="margin-left:10px;float:right;"><span style="margin-right:10px;">{{domain.progress}}%</span>{{domain.workingTime}}{{$t('time.hour')}}</span></el-col>
|
|
|
- </div>
|
|
|
- <div class="overtime" v-if="user.timeType.fillOvertime || isWeekend"><el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">{{$t('other.WorkOvertime')}}</el-checkbox>
|
|
|
- <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">{{$t('time.hour')}}</span>
|
|
|
- </div>
|
|
|
- </el-form-item>
|
|
|
- <!--工程专业版本模式下, 各个专业的进度填报 -->
|
|
|
- <el-form-item :label="$t('other.professionalProgress')" :prop="'domains.' + index + '.professionProgress'" v-if="user.company.packageEngineering==1">
|
|
|
- <span v-for="item in domain.professionProgress" :key="item.professionId" style="margin-right:10px;">
|
|
|
- <span>{{item.professionName}}</span> / {{$t('other.schedule')}}:
|
|
|
- <el-input size="mini" style="width:60px;" v-model="item.progress"
|
|
|
- @keyup.native="onProgressChange"
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"></el-input>%
|
|
|
- </span>
|
|
|
- </el-form-item>
|
|
|
- <!--项目管理专业版模式下,项目下的近期执行的任务 -->
|
|
|
- <el-form-item :label="$t('other.task')+' / '+$t('other.milestone')" :prop="'domains.' + index + '.taskId'" v-if="user.company.packageProject==1" >
|
|
|
- <el-select v-model="domain.taskId" :placeholder="$t('defaultText.pleaseChoose')" style="width:75%;margin-right:7%" filterable="true"
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)">
|
|
|
- <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">{{$t('state.completed')}}</el-checkbox>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item :label="user.companyId==781? $t('other.specificContentAndResults') : $t('other.workMatters') " :prop="'domains.' + index + '.content'"
|
|
|
- :rules="user.timeType.workContentState == 1 ? { required: true, message: user.companyId==781? $t('other.tianspecificContentAndResults'):$t('other.tianworkMatters'), trigger: 'blur' } : null">
|
|
|
- <el-input v-model="domain.content" type="textarea" :rows="4" :placeholder="$t('defaultText.pleaseFillOut')" clearable
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"></el-input>
|
|
|
- </el-form-item>
|
|
|
- </div>
|
|
|
- <!--多个工作事项填报的情况 -->
|
|
|
- <div v-if="reportTimeType.multiWorktime==1">
|
|
|
- <el-form-item :label="$t('screening.inputProject')" :prop="'domains.' + index + '.projectId'"
|
|
|
- :rules="{ required: true, message: $t('defaultText.pleaseSelectSnItem'), trigger: ['change','blur'] }">
|
|
|
- <el-select v-model="domain.projectId" :placeholder="$t('defaultText.pleaseSelectSnItem')" style="width:200px;" clearable="true" filterable="true" value-key="id"
|
|
|
+ <span v-if="reportTimeType.type == 2">
|
|
|
+ <!--时间范围选择 -->
|
|
|
+ <el-time-picker
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
+ v-model="domain.startTime"
|
|
|
+ :placeholder="$t('time.startTime')"
|
|
|
+ style="width:120px;"
|
|
|
+ format="HH:mm"
|
|
|
+ value-format="HH:mm"
|
|
|
+ :picker-options="{
|
|
|
+ start: '08:00',
|
|
|
+ end: '23:30'
|
|
|
+ }"
|
|
|
+ @change="iptChang()">
|
|
|
+ </el-time-picker> - <el-time-picker
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
+ v-model="domain.endTime"
|
|
|
+ :placeholder="$t('time.endTime')"
|
|
|
+ style="width:120px;"
|
|
|
+ format="HH:mm"
|
|
|
+ value-format="HH:mm"
|
|
|
+ :picker-options="{
|
|
|
+ start: '08:00',
|
|
|
+ end: '23:30',
|
|
|
+ minTime: domain.startTime
|
|
|
+ }"
|
|
|
+ @change="iptChang()">
|
|
|
+ </el-time-picker>
|
|
|
+ </span>
|
|
|
+ <div class="overtime" v-if="user.timeType.fillOvertime || (isWeekend && user.timeType.lockWorktime != 1)">
|
|
|
+ <el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">{{$t('other.IncludingOvertime')}}</el-checkbox>
|
|
|
+ <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">{{$t('time.hour')}}</span>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item :label="user.companyId==781? $t('screening.workTasks') : $t('screening.inputProject')" :prop="'domains.' + index + '.projectId'"
|
|
|
+ :rules="{ required: true, message: user.companyId==781? $t('defaultText.pleaseSelectaJob'): $t('defaultText.pleaseSelectSnItem'), trigger: ['change','blur'] }">
|
|
|
+ <el-select v-model="domain.projectId" :placeholder="user.companyId==781?$t('defaultText.pleaseSelectaJob'): $t('defaultText.pleaseSelectSnItem')" style="width:200px;" clearable="true" filterable="true" value-key="id"
|
|
|
@change="selectProject(domain, index)"
|
|
|
:disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" popper-class="projectSelectPopperClass">
|
|
|
+ <!-- <el-option v-for="item in projectList" :disabled="item.status>=2" :key="item.id" :label="item.projectName" :value="item.id"></el-option> -->
|
|
|
<el-option v-for="item in fillProjectList" :disabled="item.status!=1 && item.status!=4" :key="item.id" :label="item.projectName + '\u3000' + item.projectCode" :value="item.id">
|
|
|
<span style="float: left; color: #8492a6; font-size: 13px;">{{ item.projectCode }}</span>
|
|
|
<span style="float: right;">{{ item.projectName }}</span>
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
<template v-if="user.timeType.mainProjectState != 1">
|
|
|
- <span v-if="domain.subProjectList != null && domain.subProjectList.length> 0 && domain.projectId != ''"
|
|
|
+ <span v-if="domain.subProjectList != null && domain.subProjectList.length> 0 && domain.projectId != ''"
|
|
|
style="margin-left:45px;">{{$t('lable.subproject')}}</span>
|
|
|
+
|
|
|
<!--子项目 -->
|
|
|
<el-select v-model="domain.subProjectId" :placeholder="$t('defaultText.PleaseSelectaSub-item')" style="width:200px;margin-left:10px;" clearable="true"
|
|
|
- v-if="domain.subProjectList != null && domain.subProjectList.length> 0 && domain.projectId != ''"
|
|
|
+ v-if="domain.subProjectList != null && domain.subProjectList.length> 0 && domain.projectId != ''"
|
|
|
:disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" @change="updateSubProject">
|
|
|
<el-option v-for="item in domain.subProjectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
</el-select>
|
|
|
</template>
|
|
|
-
|
|
|
+
|
|
|
<el-link v-if="index >= 1&&domain.canEdit" type="primary" :underline="false" @click="delDomain(index)" style="float:right;margin-right:10px;"
|
|
|
:disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)">
|
|
|
<i class="fa fa-trash" style="color: red;;font-size:18px;"></i>
|
|
|
</el-link>
|
|
|
-
|
|
|
- <div class="overtime" v-if="user.timeType.fillOvertime"><el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">{{$t('other.IncludingOvertime')}}</el-checkbox>
|
|
|
- <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">{{$t('time.hour')}}</span>
|
|
|
- </div>
|
|
|
-
|
|
|
<!-- <el-link type="primary" v-if="canEdit"
|
|
|
:underline="false" style="margin-left:10px;" @click="copyProject(index)">复制</el-link> -->
|
|
|
</el-form-item>
|
|
|
- <el-form-item :label="user.companyId==781?$t('other.describe'):$t('other.projectDescription')" v-if="user.company.packageProject==0&&domain.projectId&&projectList.filter(p=>p.id == domain.projectId)[0].projectDesc">
|
|
|
+ <el-form-item :label="user.companyId==781? $t('other.describe'):$t('other.projectDescription')" v-if="user.company.packageProject==0&&domain.projectId&&projectList.filter(p=>p.id == domain.projectId)[0].projectDesc">
|
|
|
<span>{{projectList.filter(p=>p.id == domain.projectId)[0].projectDesc}}</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()">
|
|
|
+ <el-select v-model="domain.basecostId" :disabled="!domain.canEdit" @change="$forceUpdate()" style="width:200px;">
|
|
|
<el-option v-for="item in timeBasecostList" :label="item.name" :value="item.id" :key="item.id"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
@@ -621,41 +476,77 @@
|
|
|
<el-option v-for="item in domain.stages" :key="item.id" :label="item.stagesName" :value="item.stagesName"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item :label="$t('other.projectAuditor')" >
|
|
|
- <el-select v-model="domain.projectAuditorId" :disabled="!domain.canEdit" @change="$forceUpdate()" v-if="user.userNameNeedTranslate != '1'">
|
|
|
+ <el-form-item :label="user.companyId==781? $t('other.reviewer') : $t('other.projectAuditor')" v-if="user.timeType.reportAuditType != 3">
|
|
|
+
|
|
|
+ <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'"><ww-open-data type='userName' :openid='item.auditorName'></ww-open-data></span>
|
|
|
<span style="float: left" v-if="user.userNameNeedTranslate != '1'">{{item.auditorName}}</span>
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
|
|
|
- <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'small'" :subject="domain.auditUserList" :idx="index" :subjectId="domain.projectAuditorId" ref="selectCat" :flg="true" :flgs="true" @selectCatCli="selectCatCli"></selectCat>
|
|
|
+ <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"></selectCat>
|
|
|
+
|
|
|
</el-form-item>
|
|
|
-
|
|
|
+ <!-- 111111 -->
|
|
|
+ <el-form-item :label="$t('other.reviewer')" v-if="user.timeType.reportAuditType == 3">
|
|
|
+ <el-select v-model="domain.auditorFirst" :placeholder="$t('di-yi-shen-he-ren')" :disabled="!domain.canEdit" style="width:200px;">
|
|
|
+ <el-option v-for="item in allUsersList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ </el-select>
|
|
|
|
|
|
- <!--工程专业版本模式下, 各个专业的进度填报 -->
|
|
|
- <el-form-item :label="$t('other.professionalProgress')" :prop="'domains.' + index + '.professionProgress'" v-if="user.company.packageEngineering==1">
|
|
|
- <span v-for="item in domain.professionProgress" :key="item.professionId" style="margin-right:10px;">
|
|
|
- <span>{{item.professionName}}</span> / {{$t('other.schedule')}}:
|
|
|
- <el-input size="mini" style="width:60px;" v-model="item.progress"
|
|
|
- @keyup.native="onProgressChange"
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"></el-input>%
|
|
|
- </span>
|
|
|
+ <template v-if="user.timeType.auditLevel > 1">
|
|
|
+ <i class="el-icon-right"></i>
|
|
|
+ <el-select v-model="domain.auditorSec" :placeholder="$t('di-er-shen-he-ren')" :disabled="!domain.canEdit" style="width:200px;">
|
|
|
+ <el-option v-for="item in allUsersList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template v-if="user.timeType.auditLevel > 2">
|
|
|
+ <i class="el-icon-right"></i>
|
|
|
+ <el-select v-model="domain.auditorThird" :placeholder="$t('di-san-shen-he-ren')" :disabled="!domain.canEdit" style="width:200px;">
|
|
|
+ <el-option v-for="item in allUsersList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
</el-form-item>
|
|
|
- <!-- 相关维度 -->
|
|
|
- <el-form-item :label="yonghuUser.customDegreeName" v-if="domain.projectId && yonghuUser.customDegreeActive == 1" :rules="user.timeType.customDegreeStatus == 1 && domain.wuduList.length != 0 ? { required: true, message: $t('defaultText.pleaseChoose') + yonghuUser.customDegreeName, trigger: ['change','blur'] } : null" :prop="'domains.' + index + '.degreeId'">
|
|
|
- <el-select v-model="domain.degreeId" :disabled="!domain.canEdit" clearable :placeholder="$t('defaultText.pleaseChoose')">
|
|
|
+ <el-form-item :label="$t('chao-song-ren')" v-if="user.timeType.reportAuditType == 3">
|
|
|
+ <el-select v-model="domain.ccUserid" clearable :disabled="!domain.canEdit" style="width:200px;">
|
|
|
+ <el-option v-for="item in allUsersList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- 相关维度/自定义维度 -->
|
|
|
+ <el-form-item :label="yonghuUser.customDegreeName" v-if="domain.projectId && yonghuUser.customDegreeActive == 1" :rules="user.timeType.customDegreeStatus == 1 && domain.wuduList != undefined && domain.wuduList.length != 0 ? { required: true, message: $t('defaultText.pleaseChoose') + yonghuUser.customDegreeName, trigger: ['change','blur'] } : null" :prop="'domains.' + index + '.degreeId'">
|
|
|
+ <el-select v-model="domain.degreeId" clearable :placeholder="$t('defaultText.pleaseChoose')" :disabled="!domain.canEdit" style="width:200px;">
|
|
|
<el-option v-for="item in domain.wuduList" :key="item.value" :label="item.name" :value="item.id">
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<!-- 相关数值 -->
|
|
|
- <el-form-item :label="yonghuUser.customDataName" v-if="domain.projectId && yonghuUser.customDataActive == 1" :prop="'domains.' + index + '.customData'" :rules="user.timeType.customDataStatus == 1 ? { type: 'number', required: true, message: $t('defaultText.pleaseFillOut') + yonghuUser.customDataName, trigger: ['change','blur'] } : null">
|
|
|
+ <el-form-item :label="yonghuUser.customDataName" v-if="yonghuUser.customDataActive == 1" :prop="'domains.' + index + '.customData'" :rules="user.timeType.customDataStatus == 1 ? { type: 'number', required: true, message: $t('defaultText.pleaseFillOut') + yonghuUser.customDataName, trigger: ['change','blur'] } : null">
|
|
|
<el-input-number :id="'numberData_'+index" :disabled="!domain.canEdit" v-model="domain.customData" style="width:200px;" @keyup.native="restrictNumber('numberData_'+index)" :max="user.timeType.customDataMaxStatus == 1 ? user.timeType.customDataMaxValue : 'infinity'"></el-input-number>
|
|
|
</el-form-item>
|
|
|
<!-- 自定义文本 -->
|
|
|
<el-form-item :label="yonghuUser.customTextName" v-if="yonghuUser.customTextActive == 1" :prop="'domains.' + index + '.customText'" :rules="user.timeType.customTextStatus == 1 ? { required: true, message: $t('defaultText.pleaseFillOut') + yonghuUser.customTextName, trigger: ['change','blur'] } : null">
|
|
|
- <el-input :disabled="!domain.canEdit" v-model="domain.customText" style="width:75%;margin-right:7%" type="textarea" :rows="1" maxlength="1000"></el-input>
|
|
|
+ <el-input :disabled="!domain.canEdit" v-model="domain.customText" type="textarea" :rows="1" style="width:75%;margin-right:7%" maxlength="1000" show-word-limit></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="reportTimeType.type == 3" :label="$t('lable.percentageOfTime')" :prop="'domains.' + index + '.'+timeFields[reportTimeType.type]"
|
|
|
+ :rules="{ required: true, message: $t('defaultText.pleaseSetTheTimeRatio'), trigger: 'blur' }">
|
|
|
+ <div style="width:300px;">
|
|
|
+ <el-col span="14"><el-slider :disabled="!domain.canEdit" v-model="domain.progress" :min="5" :show-tooltip="false" :step="5" style="width:180px;" @input="domain.workingTime = (reportTimeType.allday*domain.progress/100).toFixed(1)" @change="seleChn(0)"></el-slider></el-col>
|
|
|
+ <el-col span="10"><span style="margin-left:10px;float:right;"><span style="margin-right:10px;">{{domain.progress}}%</span>{{domain.workingTime}}{{$t('time.hour')}}</span></el-col>
|
|
|
+ </div>
|
|
|
+ <div class="overtime" v-if="user.timeType.fillOvertime || isWeekend"><el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">{{$t('other.WorkOvertime')}}</el-checkbox>
|
|
|
+ <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">{{$t('time.hour')}}</span>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ <!--工程专业版本模式下, 各个专业的进度填报 -->
|
|
|
+ <el-form-item :label="$t('other.professionalProgress')" :prop="'domains.' + index + '.professionProgress'" v-if="user.company.packageEngineering==1">
|
|
|
+ <span v-for="item in domain.professionProgress" :key="item.professionId" style="margin-right:10px;">
|
|
|
+ <span>{{item.professionName}}</span> / {{$t('other.schedule')}}:
|
|
|
+ <el-input size="mini" style="width:60px;" v-model="item.progress"
|
|
|
+ @keyup.native="onProgressChange"
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"></el-input>%
|
|
|
+ </span>
|
|
|
</el-form-item>
|
|
|
<!--项目管理专业版模式下,项目下的近期执行的任务 -->
|
|
|
<el-form-item :label="$t('other.task')+' / '+$t('other.milestone')" :prop="'domains.' + index + '.taskId'" v-if="user.company.packageProject==1" >
|
|
@@ -665,66 +556,177 @@
|
|
|
</el-select>
|
|
|
<el-checkbox v-model="domain.taskFinish" v-if="domain.taskId != undefined">{{$t('state.completed')}}</el-checkbox>
|
|
|
</el-form-item>
|
|
|
- <div v-for="(timeItem,tIndex) in domain.worktimeList" :key="tIndex"
|
|
|
- style="border: 0.5px #ddd solid;padding:5px;margin-bottom:15px;position:relative;">
|
|
|
- <i v-if="tIndex>0&&workForm.domains[index].state>=2" @click="removeTimeItem(domain,tIndex)" class="el-icon-delete" style="position:absolute;right:-7px;top:-7px;font-size:16px;"></i>
|
|
|
- <el-form-item :label="$t('screening.workHours')" :prop="'domains.' + index + '.worktimeList.'+tIndex+'.'+timeFields[reportTimeType.type]"
|
|
|
- :rules="{ required: true, message: $t('defaultText.pleaseSelectWorkingHourss'), trigger: 'blur' }">
|
|
|
-
|
|
|
- <span v-if="reportTimeType.type == 2">
|
|
|
- <!-- <span> -->
|
|
|
- <!--时间范围选择 -->
|
|
|
- <el-time-picker
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
- v-model="timeItem.startTime"
|
|
|
- :placeholder="$t('time.startTime')"
|
|
|
- style="width:120px;"
|
|
|
- format="HH:mm"
|
|
|
- value-format="HH:mm"
|
|
|
- :picker-options="{
|
|
|
- start: '00:00',
|
|
|
- end: '23:59',
|
|
|
- }"
|
|
|
- @change="iptChangs()">
|
|
|
- </el-time-picker> - <el-time-picker
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
- v-model="timeItem.endTime"
|
|
|
- :placeholder="$t('time.endTime')"
|
|
|
- style="width:120px;"
|
|
|
- format="HH:mm"
|
|
|
- value-format="HH:mm"
|
|
|
- :picker-options="{
|
|
|
- start: '00:00',
|
|
|
- end: '23:59',
|
|
|
- minTime: timeItem.startTime
|
|
|
- }"
|
|
|
- @change="iptChangs()">
|
|
|
- </el-time-picker>
|
|
|
- </span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item :label="$t('other.workMatters')" :prop="'domains.' + index + '.worktimeList.'+tIndex+'.content'"
|
|
|
- :rules="user.timeType.workContentState == 1 ? { required: true, message: $t('other.tianworkMatters'), trigger: 'blur' } : null">
|
|
|
- <el-input v-model="timeItem.content" type="textarea" :rows="2" :placeholder="$t('other.tianworkMatters')" clearable
|
|
|
- :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
- ></el-input>
|
|
|
+ <el-form-item :label="user.companyId==781? $t('other.specificContentAndResults') : $t('other.workMatters') " :prop="'domains.' + index + '.content'"
|
|
|
+ :rules="user.timeType.workContentState == 1 ? { required: true, message: user.companyId==781? $t('other.tianspecificContentAndResults'):$t('other.tianworkMatters'), trigger: 'blur' } : null">
|
|
|
+ <el-input v-model="domain.content" type="textarea" :rows="4" :placeholder="$t('defaultText.pleaseFillOut')" clearable
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"></el-input>
|
|
|
</el-form-item>
|
|
|
</div>
|
|
|
- <el-link size="small" @click="addNewWorktime(index, domain)" style="margin-left:15px;margin-top:5px;margin-bottom:5px;">{{$t('other.AddWorkTime')}}</el-link>
|
|
|
- </div>
|
|
|
+ <!--多个工作事项填报的情况 -->
|
|
|
+ <div v-if="reportTimeType.multiWorktime==1">
|
|
|
+ <el-form-item :label="$t('screening.inputProject')" :prop="'domains.' + index + '.projectId'"
|
|
|
+ :rules="{ required: true, message: $t('defaultText.pleaseSelectSnItem'), trigger: ['change','blur'] }">
|
|
|
+ <el-select v-model="domain.projectId" :placeholder="$t('defaultText.pleaseSelectSnItem')" style="width:200px;" clearable="true" filterable="true" value-key="id"
|
|
|
+ @change="selectProject(domain, index)"
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" popper-class="projectSelectPopperClass">
|
|
|
+ <el-option v-for="item in fillProjectList" :disabled="item.status!=1 && item.status!=4" :key="item.id" :label="item.projectName + '\u3000' + item.projectCode" :value="item.id">
|
|
|
+ <span style="float: left; color: #8492a6; font-size: 13px;">{{ item.projectCode }}</span>
|
|
|
+ <span style="float: right;">{{ item.projectName }}</span>
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ <template v-if="user.timeType.mainProjectState != 1">
|
|
|
+ <span v-if="domain.subProjectList != null && domain.subProjectList.length> 0 && domain.projectId != ''"
|
|
|
+ style="margin-left:45px;">{{$t('lable.subproject')}}</span>
|
|
|
+ <!--子项目 -->
|
|
|
+ <el-select v-model="domain.subProjectId" :placeholder="$t('defaultText.PleaseSelectaSub-item')" style="width:200px;margin-left:10px;" clearable="true"
|
|
|
+ v-if="domain.subProjectList != null && domain.subProjectList.length> 0 && domain.projectId != ''"
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" @change="updateSubProject">
|
|
|
+ <el-option v-for="item in domain.subProjectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </template>
|
|
|
|
|
|
- <!--照片的显示 -->
|
|
|
- <p v-if="domain.pics != null && domain.pics.length > 0" style="text-align:center;">
|
|
|
- <el-image v-for="(pic, index) in domain.pics" :key="index"
|
|
|
- style="width: 100px; height: 100px; margin-right:10px;"
|
|
|
- :src="pic"
|
|
|
- :preview-src-list="domain.pics">
|
|
|
- </el-image>
|
|
|
- </p>
|
|
|
- <el-divider v-if="workForm.domains.length>1" style="margin-bottom:10px;"></el-divider>
|
|
|
- </div>
|
|
|
- <span id="workFormsItemBottom"></span>
|
|
|
- <el-link v-if="showAddMore" type="primary" :underline="false" @click="addDomain(reportTimeType.type)" style="margin-left:40px;position:sticky;bottom:70px;background:#fff;z-index:1010">{{$t('other.addMore')}}</el-link>
|
|
|
- </el-form>
|
|
|
+ <el-link v-if="index >= 1&&domain.canEdit" type="primary" :underline="false" @click="delDomain(index)" style="float:right;margin-right:10px;"
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)">
|
|
|
+ <i class="fa fa-trash" style="color: red;;font-size:18px;"></i>
|
|
|
+ </el-link>
|
|
|
+
|
|
|
+ <div class="overtime" v-if="user.timeType.fillOvertime"><el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">{{$t('other.IncludingOvertime')}}</el-checkbox>
|
|
|
+ <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">{{$t('time.hour')}}</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- <el-link type="primary" v-if="canEdit"
|
|
|
+ :underline="false" style="margin-left:10px;" @click="copyProject(index)">复制</el-link> -->
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item :label="user.companyId==781?$t('other.describe'):$t('other.projectDescription')" v-if="user.company.packageProject==0&&domain.projectId&&projectList.filter(p=>p.id == domain.projectId)[0].projectDesc">
|
|
|
+ <span>{{projectList.filter(p=>p.id == domain.projectId)[0].projectDesc}}</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()">
|
|
|
+ <el-option v-for="item in timeBasecostList" :label="item.name" :value="item.id" :key="item.id"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item :label="$t('lable.taskGrouping')" v-if="user.company.packageProject == 1">
|
|
|
+ <!-- 任务分组 -->
|
|
|
+ <el-select v-model="domain.groupId" :placeholder="$t('defaultText.pleaseSelectaTaskGroup')" style="width:200px;" clearable="true"
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" @change="getGroupStages(domain, index)">
|
|
|
+ <el-option v-for="item in domain.taskGroups" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
+ </el-select>
|
|
|
+ <!-- 项目的阶段 -->
|
|
|
+ <span v-if="domain.stages != null && domain.stages.length> 0"
|
|
|
+ style="margin-left:30px;">{{$t('other.inputStage')}}</span>
|
|
|
+ <el-select v-model="domain.stage" :placeholder="$t('defaultText.pleaseChoose')" style="width:200px;margin-left:10px;"
|
|
|
+ clearable="true" v-if="domain.stages != null && domain.stages.length> 0"
|
|
|
+ @change="changeStages(domain, index)"
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)">
|
|
|
+ <el-option v-for="item in domain.stages" :key="item.id" :label="item.stagesName" :value="item.stagesName"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item :label="$t('other.projectAuditor')" >
|
|
|
+ <el-select v-model="domain.projectAuditorId" :disabled="!domain.canEdit" @change="$forceUpdate()" v-if="user.userNameNeedTranslate != '1'">
|
|
|
+ <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'"><ww-open-data type='userName' :openid='item.auditorName'></ww-open-data></span>
|
|
|
+ <span style="float: left" v-if="user.userNameNeedTranslate != '1'">{{item.auditorName}}</span>
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+
|
|
|
+ <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'small'" :subject="domain.auditUserList" :idx="index" :subjectId="domain.projectAuditorId" ref="selectCat" :flg="true" :flgs="true" @selectCatCli="selectCatCli"></selectCat>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+
|
|
|
+ <!--工程专业版本模式下, 各个专业的进度填报 -->
|
|
|
+ <el-form-item :label="$t('other.professionalProgress')" :prop="'domains.' + index + '.professionProgress'" v-if="user.company.packageEngineering==1">
|
|
|
+ <span v-for="item in domain.professionProgress" :key="item.professionId" style="margin-right:10px;">
|
|
|
+ <span>{{item.professionName}}</span> / {{$t('other.schedule')}}:
|
|
|
+ <el-input size="mini" style="width:60px;" v-model="item.progress"
|
|
|
+ @keyup.native="onProgressChange"
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"></el-input>%
|
|
|
+ </span>
|
|
|
+ </el-form-item>
|
|
|
+ <!-- 相关维度 -->
|
|
|
+ <el-form-item :label="yonghuUser.customDegreeName" v-if="domain.projectId && yonghuUser.customDegreeActive == 1" :rules="user.timeType.customDegreeStatus == 1 && domain.wuduList.length != 0 ? { required: true, message: $t('defaultText.pleaseChoose') + yonghuUser.customDegreeName, trigger: ['change','blur'] } : null" :prop="'domains.' + index + '.degreeId'">
|
|
|
+ <el-select v-model="domain.degreeId" :disabled="!domain.canEdit" clearable :placeholder="$t('defaultText.pleaseChoose')">
|
|
|
+ <el-option v-for="item in domain.wuduList" :key="item.value" :label="item.name" :value="item.id">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <!-- 相关数值 -->
|
|
|
+ <el-form-item :label="yonghuUser.customDataName" v-if="domain.projectId && yonghuUser.customDataActive == 1" :prop="'domains.' + index + '.customData'" :rules="user.timeType.customDataStatus == 1 ? { type: 'number', required: true, message: $t('defaultText.pleaseFillOut') + yonghuUser.customDataName, trigger: ['change','blur'] } : null">
|
|
|
+ <el-input-number :id="'numberData_'+index" :disabled="!domain.canEdit" v-model="domain.customData" style="width:200px;" @keyup.native="restrictNumber('numberData_'+index)" :max="user.timeType.customDataMaxStatus == 1 ? user.timeType.customDataMaxValue : 'infinity'"></el-input-number>
|
|
|
+ </el-form-item>
|
|
|
+ <!-- 自定义文本 -->
|
|
|
+ <el-form-item :label="yonghuUser.customTextName" v-if="yonghuUser.customTextActive == 1" :prop="'domains.' + index + '.customText'" :rules="user.timeType.customTextStatus == 1 ? { required: true, message: $t('defaultText.pleaseFillOut') + yonghuUser.customTextName, trigger: ['change','blur'] } : null">
|
|
|
+ <el-input :disabled="!domain.canEdit" v-model="domain.customText" style="width:75%;margin-right:7%" type="textarea" :rows="1" maxlength="1000"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <!--项目管理专业版模式下,项目下的近期执行的任务 -->
|
|
|
+ <el-form-item :label="$t('other.task')+' / '+$t('other.milestone')" :prop="'domains.' + index + '.taskId'" v-if="user.company.packageProject==1" >
|
|
|
+ <el-select v-model="domain.taskId" :placeholder="$t('defaultText.pleaseChoose')" style="width:75%;margin-right:7%" filterable="true"
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)">
|
|
|
+ <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">{{$t('state.completed')}}</el-checkbox>
|
|
|
+ </el-form-item>
|
|
|
+ <div v-for="(timeItem,tIndex) in domain.worktimeList" :key="tIndex"
|
|
|
+ style="border: 0.5px #ddd solid;padding:5px;margin-bottom:15px;position:relative;">
|
|
|
+ <i v-if="tIndex>0&&workForm.domains[index].state>=2" @click="removeTimeItem(domain,tIndex)" class="el-icon-delete" style="position:absolute;right:-7px;top:-7px;font-size:16px;"></i>
|
|
|
+ <el-form-item :label="$t('screening.workHours')" :prop="'domains.' + index + '.worktimeList.'+tIndex+'.'+timeFields[reportTimeType.type]"
|
|
|
+ :rules="{ required: true, message: $t('defaultText.pleaseSelectWorkingHourss'), trigger: 'blur' }">
|
|
|
+
|
|
|
+ <span v-if="reportTimeType.type == 2">
|
|
|
+ <!-- <span> -->
|
|
|
+ <!--时间范围选择 -->
|
|
|
+ <el-time-picker
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
+ v-model="timeItem.startTime"
|
|
|
+ :placeholder="$t('time.startTime')"
|
|
|
+ style="width:120px;"
|
|
|
+ format="HH:mm"
|
|
|
+ value-format="HH:mm"
|
|
|
+ :picker-options="{
|
|
|
+ start: '00:00',
|
|
|
+ end: '23:59',
|
|
|
+ }"
|
|
|
+ @change="iptChangs()">
|
|
|
+ </el-time-picker> - <el-time-picker
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
+ v-model="timeItem.endTime"
|
|
|
+ :placeholder="$t('time.endTime')"
|
|
|
+ style="width:120px;"
|
|
|
+ format="HH:mm"
|
|
|
+ value-format="HH:mm"
|
|
|
+ :picker-options="{
|
|
|
+ start: '00:00',
|
|
|
+ end: '23:59',
|
|
|
+ minTime: timeItem.startTime
|
|
|
+ }"
|
|
|
+ @change="iptChangs()">
|
|
|
+ </el-time-picker>
|
|
|
+ </span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item :label="$t('other.workMatters')" :prop="'domains.' + index + '.worktimeList.'+tIndex+'.content'"
|
|
|
+ :rules="user.timeType.workContentState == 1 ? { required: true, message: $t('other.tianworkMatters'), trigger: 'blur' } : null">
|
|
|
+ <el-input v-model="timeItem.content" type="textarea" :rows="2" :placeholder="$t('other.tianworkMatters')" clearable
|
|
|
+ :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
+ <el-link size="small" @click="addNewWorktime(index, domain)" style="margin-left:15px;margin-top:5px;margin-bottom:5px;">{{$t('other.AddWorkTime')}}</el-link>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!--照片的显示 -->
|
|
|
+ <p v-if="domain.pics != null && domain.pics.length > 0" style="text-align:center;">
|
|
|
+ <el-image v-for="(pic, index) in domain.pics" :key="index"
|
|
|
+ style="width: 100px; height: 100px; margin-right:10px;"
|
|
|
+ :src="pic"
|
|
|
+ :preview-src-list="domain.pics">
|
|
|
+ </el-image>
|
|
|
+ </p>
|
|
|
+ <el-divider v-if="workForm.domains.length>1" style="margin-bottom:10px;"></el-divider>
|
|
|
+ </div>
|
|
|
+ <span id="workFormsItemBottom"></span>
|
|
|
+ <el-link v-if="showAddMore" type="primary" :underline="false" @click="addDomain(reportTimeType.type)" style="margin-left:40px;">{{$t('other.addMore')}}</el-link>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
<span slot="footer" class="dialog-footer">
|
|
|
<el-button @click="cancel(workForm.domains,true)" v-if="canCancelInDialog" style="float:left;">{{$t('btn.withdraw')}}</el-button>
|
|
|
<el-button @click="deleteReport" v-if="workForm.domains[0].id != null && canEdit && reportCanDelete">{{$t('btn.delete')}}</el-button>
|
|
@@ -763,7 +765,7 @@
|
|
|
<el-button @click="getCurrentWeek()">{{$t('time.thisWeek')}}</el-button>
|
|
|
<el-button @click="newDates()">{{$t('time.addedDate')}}</el-button>
|
|
|
</el-form-item>
|
|
|
- <el-table :data="zhoData" style="width: 100%" v-loading="zhoLoading">
|
|
|
+ <el-table :data="zhoData" style="width: 100%" v-loading="zhoLoading" max-height="400">
|
|
|
<el-table-column fixed="left" prop="zhoDataTime" :label="$t('weekDay.date')" width="160">
|
|
|
<template slot-scope="scope">
|
|
|
{{scope.row.zhoDataTime}}({{scope.row.zhoDataTime | zhoData(weekDay)}})
|
|
@@ -6359,13 +6361,13 @@
|
|
|
padding-top: 10px;
|
|
|
}
|
|
|
}
|
|
|
- .editReportDialog .el-dialog__footer{
|
|
|
- position: sticky;
|
|
|
- bottom: 0;
|
|
|
- background: #fff;
|
|
|
- height: 70px;
|
|
|
- z-index: 1010;
|
|
|
- }
|
|
|
+ // .editReportDialog .el-dialog__footer{
|
|
|
+ // position: sticky;
|
|
|
+ // bottom: 0;
|
|
|
+ // background: #fff;
|
|
|
+ // height: 70px;
|
|
|
+ // z-index: 1010;
|
|
|
+ // }
|
|
|
.touruxiangmu{
|
|
|
max-width: 1000px;
|
|
|
}
|