|
@@ -624,11 +624,11 @@
|
|
<!-- 按周填报 -->
|
|
<!-- 按周填报 -->
|
|
<el-dialog :title="$t('textLink.fillInAWeek')" :visible.sync="diasZho" width="60%" :close-on-click-modal="false" @closed="guanbi(),zhoAddqx()">
|
|
<el-dialog :title="$t('textLink.fillInAWeek')" :visible.sync="diasZho" width="60%" :close-on-click-modal="false" @closed="guanbi(),zhoAddqx()">
|
|
<!-- 按周填报-已填工时-点击 -->
|
|
<!-- 按周填报-已填工时-点击 -->
|
|
- <el-dialog append-to-body title="已填日报" :visible.sync="weeklyFilledTimeDialog" width="50%" :close-on-click-modal="false">
|
|
|
|
|
|
+ <el-dialog append-to-body :title="$t('lable.filledReport')" :visible.sync="weeklyFilledTimeDialog" width="50%" :close-on-click-modal="false">
|
|
<el-table :data="weeklyFilledTimeList" v-loading="weeklyFilledTimeLoading">
|
|
<el-table :data="weeklyFilledTimeList" v-loading="weeklyFilledTimeLoading">
|
|
<el-table-column prop="project" :label="$t('headerTop.projectName')"></el-table-column>
|
|
<el-table-column prop="project" :label="$t('headerTop.projectName')"></el-table-column>
|
|
- <el-table-column prop="time" label="工时(h)"></el-table-column>
|
|
|
|
- <el-table-column prop="state" label="状态">
|
|
|
|
|
|
+ <el-table-column prop="time" :label="$t('time.workingHours')+'(h)'"></el-table-column>
|
|
|
|
+ <el-table-column prop="state" :label="$t('state.states')">
|
|
<template slot-scope="scope">{{workReportStateString[scope.row.state]}}</template>
|
|
<template slot-scope="scope">{{workReportStateString[scope.row.state]}}</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<!-- <el-table-column label="操作">
|
|
<!-- <el-table-column label="操作">
|
|
@@ -638,24 +638,24 @@
|
|
</el-table-column> -->
|
|
</el-table-column> -->
|
|
</el-table>
|
|
</el-table>
|
|
<span slot="footer" class="dialog-footer">
|
|
<span slot="footer" class="dialog-footer">
|
|
- <el-button @click="weeklyFilledTimeDelete()" size="small" type="danger" v-if="weeklyFilledTimeCanDelete">删除</el-button>
|
|
|
|
|
|
+ <el-button @click="weeklyFilledTimeDelete()" size="small" type="danger" v-if="weeklyFilledTimeCanDelete">{{$t('btn.delete')}}</el-button>
|
|
</span>
|
|
</span>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
<el-form ref="WeekWorkForm" :model="workForm" :rules="workRules" label-width="100px" v-if="!selConShow">
|
|
<el-form ref="WeekWorkForm" :model="workForm" :rules="workRules" label-width="100px" v-if="!selConShow">
|
|
- <el-form-item label="工作日期" prop="createDate">
|
|
|
|
- <el-date-picker v-model="zhoRqi" format="yyyy-MM-dd" value-format="yyyy-MM-dd" @change="zhoRqis()" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" style="margin-right: 18px" :clearable="false"></el-date-picker>
|
|
|
|
- <el-button @click="handleGetPrevWeek()">上一周</el-button>
|
|
|
|
- <el-button @click="handleGetNextvWeek()">下一周</el-button>
|
|
|
|
- <el-button @click="getCurrentWeek()">本周</el-button>
|
|
|
|
- <el-button @click="newDates()">新增日期</el-button>
|
|
|
|
|
|
+ <el-form-item :label="$t('screening.workingDate')" prop="createDate">
|
|
|
|
+ <el-date-picker v-model="zhoRqi" format="yyyy-MM-dd" value-format="yyyy-MM-dd" @change="zhoRqis()" type="daterange" :range-separator="$t('other.to')" :start-placeholder="$t('time.startDate')" :end-placeholder="$t('time.endDate')" style="margin-right: 18px" :clearable="false"></el-date-picker>
|
|
|
|
+ <el-button @click="handleGetPrevWeek()">{{$t('time.lastWeek')}}</el-button>
|
|
|
|
+ <el-button @click="handleGetNextvWeek()">{{$t('time.nextWeek')}}</el-button>
|
|
|
|
+ <el-button @click="getCurrentWeek()">{{$t('time.thisWeek')}}</el-button>
|
|
|
|
+ <el-button @click="newDates()">{{$t('time.addedDate')}}</el-button>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-table :data="zhoData" style="width: 100%" v-loading="zhoLoading">
|
|
<el-table :data="zhoData" style="width: 100%" v-loading="zhoLoading">
|
|
- <el-table-column fixed="left" prop="zhoDataTime" label="日期" width="160">
|
|
|
|
|
|
+ <el-table-column fixed="left" prop="zhoDataTime" :label="$t('weekDay.date')" width="160">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
- {{scope.row.zhoDataTime}}({{scope.row.zhoDataTime | zhoData}})
|
|
|
|
|
|
+ {{scope.row.zhoDataTime}}({{scope.row.zhoDataTime | zhoData(weekDay)}})
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column fixed="left" label="已填工时(h)" width="100" prop="filledTime" align="center">
|
|
|
|
|
|
+ <el-table-column fixed="left" :label="$t('other.hoursFilled')+ '(h)'" width="100" prop="filledTime" align="center">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
<el-link type="primary" v-if="scope.row.filledTime" @click="weeklyFilledTimeClick(scope.row.zhoDataTime)">{{scope.row.filledTime}}</el-link>
|
|
<el-link type="primary" v-if="scope.row.filledTime" @click="weeklyFilledTimeClick(scope.row.zhoDataTime)">{{scope.row.filledTime}}</el-link>
|
|
<p v-else></p>
|
|
<p v-else></p>
|
|
@@ -668,22 +668,22 @@
|
|
<el-button v-if="scope.row[item.projectName].workingTime != null && scope.row[item.projectName].workingTime != '' && reportTimeType.type == 3 && scope.row[item.projectName].workingTime > 0" type="text" slot="reference">{{scope.row[item.projectName].workingTime}} h</el-button>
|
|
<el-button v-if="scope.row[item.projectName].workingTime != null && scope.row[item.projectName].workingTime != '' && reportTimeType.type == 3 && scope.row[item.projectName].workingTime > 0" type="text" slot="reference">{{scope.row[item.projectName].workingTime}} h</el-button>
|
|
<el-button v-else-if="scope.row[item.projectName].workingTime != null && scope.row[item.projectName].workingTime != '' && reportTimeType.type == 1 && scope.row[item.projectName].workingTime > 0" type="text" slot="reference">{{scope.row[item.projectName].workingTime}} h</el-button>
|
|
<el-button v-else-if="scope.row[item.projectName].workingTime != null && scope.row[item.projectName].workingTime != '' && reportTimeType.type == 1 && scope.row[item.projectName].workingTime > 0" type="text" slot="reference">{{scope.row[item.projectName].workingTime}} h</el-button>
|
|
<el-button v-else-if="scope.row[item.projectName].time != null && scope.row[item.projectName].time != '' && reportTimeType.type == 2" type="text" slot="reference">{{scope.row[item.projectName].time[0]}} - {{scope.row[item.projectName].time[1]}}</el-button>
|
|
<el-button v-else-if="scope.row[item.projectName].time != null && scope.row[item.projectName].time != '' && reportTimeType.type == 2" type="text" slot="reference">{{scope.row[item.projectName].time[0]}} - {{scope.row[item.projectName].time[1]}}</el-button>
|
|
- <el-button v-else type="text" >请填写</el-button>
|
|
|
|
|
|
+ <el-button v-else type="text" >{{$t('defaultText.pleaseFillOut')}}</el-button>
|
|
</div>
|
|
</div>
|
|
<div v-if="reportTimeType.multiWorktime == 1" slot="reference" @click="tianxies(scope.row[item.projectName], scope.$index, item.projectName, workForm.domains)">
|
|
<div v-if="reportTimeType.multiWorktime == 1" slot="reference" @click="tianxies(scope.row[item.projectName], scope.$index, item.projectName, workForm.domains)">
|
|
<el-button v-if="scope.row[item.projectName].time != null && scope.row[item.projectName].time != '' && reportTimeType.type == 2" type="text" slot="reference">{{scope.row[item.projectName].time[0]}} - {{scope.row[item.projectName].time[1]}}</el-button>
|
|
<el-button v-if="scope.row[item.projectName].time != null && scope.row[item.projectName].time != '' && reportTimeType.type == 2" type="text" slot="reference">{{scope.row[item.projectName].time[0]}} - {{scope.row[item.projectName].time[1]}}</el-button>
|
|
- <el-button v-else type="text" >请填写</el-button>
|
|
|
|
|
|
+ <el-button v-else type="text" >{{$t('defaultText.pleaseFillOut')}}</el-button>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column fixed="right" label="考勤打卡" width="150" v-if="user.timeType.showDdCardtime == 1 || user.timeType.showCorpwxCardtime == 1">
|
|
|
|
|
|
+ <el-table-column fixed="right" :label="$t('other.attendancePunch')" width="150" v-if="user.timeType.showDdCardtime == 1 || user.timeType.showCorpwxCardtime == 1">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
<span v-if="scope.row.corpTime">{{scope.row.corpTime.startTime + '-' + scope.row.corpTime.endTime + ',' + scope.row.corpTime.workHours + 'h'}}</span>
|
|
<span v-if="scope.row.corpTime">{{scope.row.corpTime.startTime + '-' + scope.row.corpTime.endTime + ',' + scope.row.corpTime.workHours + 'h'}}</span>
|
|
- <span v-else>暂无考勤记录</span>
|
|
|
|
|
|
+ <span v-else>{{$t('other.noAttendanceRecord')}}</span>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
|
|
|
- <el-table-column fixed="right" prop="he" label="合计(h)" width="120">
|
|
|
|
|
|
+ <el-table-column fixed="right" prop="he" :label="$t('other.totals')+'(h)'" width="120">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
<div class="zhiss">
|
|
<div class="zhiss">
|
|
<p>{{scope.row.filledTime ? parseFloat(scope.row.he) + scope.row.filledTime*1 : parseFloat(scope.row.he)}}</p>
|
|
<p>{{scope.row.filledTime ? parseFloat(scope.row.he) + scope.row.filledTime*1 : parseFloat(scope.row.he)}}</p>
|
|
@@ -699,7 +699,7 @@
|
|
|
|
|
|
<!-- 按周填报项目筛选 -->
|
|
<!-- 按周填报项目筛选 -->
|
|
<div v-if="selConShow" class="selConStyle">
|
|
<div v-if="selConShow" class="selConStyle">
|
|
- <div class="selConStyle_title">请选择要填报的项目</div>
|
|
|
|
|
|
+ <div class="selConStyle_title">{{$t('defaultText.pleaseSelectTheItemYouWantToFillIn')}}</div>
|
|
<el-select v-model="selCon" multiple :placeholder="$t('defaultText.pleaseChoose')" filterable>
|
|
<el-select v-model="selCon" multiple :placeholder="$t('defaultText.pleaseChoose')" filterable>
|
|
<el-option
|
|
<el-option
|
|
v-for="item in fillProjectList"
|
|
v-for="item in fillProjectList"
|
|
@@ -711,57 +711,57 @@
|
|
</el-select>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
<span slot="footer" class="dialog-footer" v-if="selConShow">
|
|
<span slot="footer" class="dialog-footer" v-if="selConShow">
|
|
- <el-button @click="selListqx()">取 消</el-button>
|
|
|
|
- <el-button type="primary" @click="selListFun()">下一步</el-button>
|
|
|
|
|
|
+ <el-button @click="selListqx()">{{$t('btn.cancel')}}</el-button>
|
|
|
|
+ <el-button type="primary" @click="selListFun()">{{$t('btn.nextStep')}}</el-button>
|
|
<!-- :loading="submitingReport" -->
|
|
<!-- :loading="submitingReport" -->
|
|
</span>
|
|
</span>
|
|
<span slot="footer" class="dialog-footer" v-if="!selConShow">
|
|
<span slot="footer" class="dialog-footer" v-if="!selConShow">
|
|
- <el-button @click="zhoAddlast()" style="float:left;" class="el-icon-back">选择项目</el-button>
|
|
|
|
- <el-button @click="zhoAddqx()">取 消</el-button>
|
|
|
|
- <el-button type="primary" @click="zhoAdd()" :loading="submitingReport">提 交</el-button>
|
|
|
|
|
|
+ <el-button @click="zhoAddlast()" style="float:left;" class="el-icon-back">{{$t('defaultText.selectProject')}}</el-button>
|
|
|
|
+ <el-button @click="zhoAddqx()">{{$t('btn.cancel')}}</el-button>
|
|
|
|
+ <el-button type="primary" @click="zhoAdd()" :loading="submitingReport">{{$t('btn.submit')}}</el-button>
|
|
</span>
|
|
</span>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
<!-- 选择时间 -->
|
|
<!-- 选择时间 -->
|
|
- <el-dialog title="时间选择" :visible.sync="btnZho" width="30%" :before-close="handleClose">
|
|
|
|
- <span>这是一段信息</span>
|
|
|
|
|
|
+ <el-dialog :title="$t('other.timeSelection')" :visible.sync="btnZho" width="30%" :before-close="handleClose">
|
|
|
|
+ <span>{{$t('other.thisIsAPieceOfInformation')}}</span>
|
|
<span slot="footer" class="dialog-footer">
|
|
<span slot="footer" class="dialog-footer">
|
|
- <el-button @click="btnZho = false">取 消</el-button>
|
|
|
|
- <el-button type="primary" @click="btnZho = false">确 定</el-button>
|
|
|
|
|
|
+ <el-button @click="btnZho = false">{{$t('btn.cancel')}}</el-button>
|
|
|
|
+ <el-button type="primary" @click="btnZho = false">{{$t('btn.determine')}}</el-button>
|
|
</span>
|
|
</span>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
<!-- 按周填报弹窗 -->
|
|
<!-- 按周填报弹窗 -->
|
|
- <el-dialog title="请填写" :visible.sync="tianxieDialogVisible" width="30%" :before-close="handleClose">
|
|
|
|
|
|
+ <el-dialog :title="$t('defaultText.pleaseFillOut')" :visible.sync="tianxieDialogVisible" width="30%" :before-close="handleClose">
|
|
<div>
|
|
<div>
|
|
<div class="zhoFel" v-if="zhoBao.subProjectList != null && zhoBao.subProjectList.length > 0 && user.timeType.mainProjectState != 1">
|
|
<div class="zhoFel" v-if="zhoBao.subProjectList != null && zhoBao.subProjectList.length > 0 && user.timeType.mainProjectState != 1">
|
|
- <p>子项目</p>
|
|
|
|
|
|
+ <p>{{$t('lable.subproject')}}</p>
|
|
<el-select v-model="zhoBao.subProjectId" :placeholder="$t('defaultText.pleaseChoose')" clearable="true" style="width: 355px">
|
|
<el-select v-model="zhoBao.subProjectId" :placeholder="$t('defaultText.pleaseChoose')" clearable="true" style="width: 355px">
|
|
<el-option v-for="item in zhoBao.subProjectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
<el-option v-for="item in zhoBao.subProjectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
</el-select>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
<!--如果设置了工时成本预警的预算成本项-->
|
|
<!--如果设置了工时成本预警的预算成本项-->
|
|
<div class="zhoFel" v-if="timeBasecostList &&timeBasecostList.length>0">
|
|
<div class="zhoFel" v-if="timeBasecostList &&timeBasecostList.length>0">
|
|
- <p>预算来源</p>
|
|
|
|
|
|
+ <p>{{$t('lable.budgetSource')}}</p>
|
|
<el-select v-model="zhoBao.basecostId" style="width: 355px">
|
|
<el-select v-model="zhoBao.basecostId" style="width: 355px">
|
|
<el-option v-for="item in timeBasecostList" :label="item.name" :value="item.id" :key="item.id"></el-option>
|
|
<el-option v-for="item in timeBasecostList" :label="item.name" :value="item.id" :key="item.id"></el-option>
|
|
</el-select>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
<!-- 任务分组 -->
|
|
<!-- 任务分组 -->
|
|
<div class="zhoFel" v-if="user.company.packageProject == 1">
|
|
<div class="zhoFel" v-if="user.company.packageProject == 1">
|
|
- <p>任务分组</p>
|
|
|
|
- <el-select v-model="zhoBao.groupId" placeholder="请选择任务分组" clearable="true" style="width: 355px"
|
|
|
|
|
|
+ <p>{{$t('lable.taskGrouping')}}</p>
|
|
|
|
+ <el-select v-model="zhoBao.groupId" :placeholder="$t('defaultText.pleaseSelectaTaskGroup')" clearable="true" style="width: 355px"
|
|
@change="getGroupStages(zhoBao, 0)">
|
|
@change="getGroupStages(zhoBao, 0)">
|
|
<el-option v-for="item in zhoBao.taskGroups" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
<el-option v-for="item in zhoBao.taskGroups" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
</el-select>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
<div class="zhoFel" v-if="user.company.packageProject == 1 && zhoBao.stages != null && zhoBao.stages.length> 0">
|
|
<div class="zhoFel" v-if="user.company.packageProject == 1 && zhoBao.stages != null && zhoBao.stages.length> 0">
|
|
- <p>投入阶段</p>
|
|
|
|
|
|
+ <p>{{$t('other.inputStage')}}</p>
|
|
<el-select v-model="zhoBao.stage" :placeholder="$t('defaultText.pleaseChoose')" style="width: 355px" clearable="true" >
|
|
<el-select v-model="zhoBao.stage" :placeholder="$t('defaultText.pleaseChoose')" style="width: 355px" clearable="true" >
|
|
<el-option v-for="item in zhoBao.stages" :key="item.id" :label="item.stagesName" :value="item.stagesName"></el-option>
|
|
<el-option v-for="item in zhoBao.stages" :key="item.id" :label="item.stagesName" :value="item.stagesName"></el-option>
|
|
</el-select>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
<div class="zhoFel" >
|
|
<div class="zhoFel" >
|
|
- <p>审核人</p>
|
|
|
|
|
|
+ <p>{{$t('other.reviewer')}}</p>
|
|
<el-select v-model="zhoBao.projectAuditorId" :placeholder="$t('defaultText.pleaseChoose')" clearable="true" style="width: 355px">
|
|
<el-select v-model="zhoBao.projectAuditorId" :placeholder="$t('defaultText.pleaseChoose')" clearable="true" style="width: 355px">
|
|
<el-option v-for="item in zhoBao.auditUserList" :key="item.id" :label="item.auditorName" :value="item.auditorId"></el-option>
|
|
<el-option v-for="item in zhoBao.auditUserList" :key="item.id" :label="item.auditorName" :value="item.auditorId"></el-option>
|
|
</el-select>
|
|
</el-select>
|
|
@@ -785,145 +785,145 @@
|
|
<el-input v-model="zhoBao.customText" type="textarea" :rows="1" style="width:355px;" maxlength="1000" show-word-limit></el-input>
|
|
<el-input v-model="zhoBao.customText" type="textarea" :rows="1" style="width:355px;" maxlength="1000" show-word-limit></el-input>
|
|
</div>
|
|
</div>
|
|
<div class="zhoFel" v-if="reportTimeType.type == 2">
|
|
<div class="zhoFel" v-if="reportTimeType.type == 2">
|
|
- <p>选择时间</p>
|
|
|
|
- <el-time-picker style="width: 355px" is-range v-model="zhoBao.time" format="HH:mm" value-format="HH:mm" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" placeholder="选择时间范围"></el-time-picker>
|
|
|
|
|
|
+ <p>{{$t('other.timeSelection')}}</p>
|
|
|
|
+ <el-time-picker style="width: 355px" is-range v-model="zhoBao.time" format="HH:mm" value-format="HH:mm" :range-separator="$t('other.to')" :start-placeholder="$t('time.startDate')" :end-placeholder="$t('time.endDate')" :placeholder="$t('time.selectTimeRange')"></el-time-picker>
|
|
</div>
|
|
</div>
|
|
<div class="zhoFel" v-if="reportTimeType.type == 1">
|
|
<div class="zhoFel" v-if="reportTimeType.type == 1">
|
|
- <p>选择时长</p>
|
|
|
|
|
|
+ <p>{{$t('other.chooseDuration')}}</p>
|
|
<el-select clearable v-model="zhoBao.workingTime" style="width: 355px;" :placeholder="$t('defaultText.pleaseSelectWorkingHours')">
|
|
<el-select clearable v-model="zhoBao.workingTime" style="width: 355px;" :placeholder="$t('defaultText.pleaseSelectWorkingHours')">
|
|
<el-option v-for="item in timeRange" :key="item" :value="item.toFixed(1)">{{item.toFixed(1)}}</el-option>
|
|
<el-option v-for="item in timeRange" :key="item" :value="item.toFixed(1)">{{item.toFixed(1)}}</el-option>
|
|
</el-select>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
<div class="zhoFel" v-if="reportTimeType.type == 3">
|
|
<div class="zhoFel" v-if="reportTimeType.type == 3">
|
|
- <p>用时占比</p>
|
|
|
|
|
|
+ <p>{{$t('lable.percentageOfTime')}}</p>
|
|
<div style="width:355px;display: flex;align-items: center;">
|
|
<div style="width:355px;display: flex;align-items: center;">
|
|
<el-col span="23"><el-slider style="margin-left: 5px;width:249px;" v-model="zhoBao.progress" :min="0" :show-tooltip="false" :step="10" @input="zhoBao.workingTime = (reportTimeType.allday*zhoBao.progress/100).toFixed(1)"></el-slider></el-col>
|
|
<el-col span="23"><el-slider style="margin-left: 5px;width:249px;" v-model="zhoBao.progress" :min="0" :show-tooltip="false" :step="10" @input="zhoBao.workingTime = (reportTimeType.allday*zhoBao.progress/100).toFixed(1)"></el-slider></el-col>
|
|
- <el-col span="10"><span style="float:right;"><span style="margin-right:10px;">{{zhoBao.progress || 0}}%</span>{{zhoBao.workingTime | amounts}}小时</span></el-col>
|
|
|
|
|
|
+ <el-col span="10"><span style="float:right;"><span style="margin-right:10px;">{{zhoBao.progress || 0}}%</span>{{zhoBao.workingTime | amounts}}{{$t('time.hour')}}</span></el-col>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="zhoFel">
|
|
<div class="zhoFel">
|
|
- <p>工作事项</p>
|
|
|
|
- <el-input type="textarea" v-model="zhoBao.con" placeholder="请输入工作事项" style="width: 355px" clearable></el-input>
|
|
|
|
|
|
+ <p>{{$t('other.workMatters')}}</p>
|
|
|
|
+ <el-input type="textarea" v-model="zhoBao.con" :placeholder="$t('other.tianworkMatters')" style="width: 355px" clearable></el-input>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<span slot="footer" class="dialog-footer">
|
|
<span slot="footer" class="dialog-footer">
|
|
- <el-button @click="tianxieDialogVisible = false">取 消</el-button>
|
|
|
|
- <el-button type="primary" @click="btnTianxiaes()">确 定</el-button>
|
|
|
|
|
|
+ <el-button @click="tianxieDialogVisible = false">{{$t('btn.cancel')}}</el-button>
|
|
|
|
+ <el-button type="primary" @click="btnTianxiaes()">{{$t('btn.determine')}}</el-button>
|
|
</span>
|
|
</span>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
<!-- 批量日报审核 -->
|
|
<!-- 批量日报审核 -->
|
|
- <el-dialog title="批量项目报告审核" :visible.sync="approveDialogVisible" width="500px" >
|
|
|
|
|
|
+ <el-dialog :title="$t('other.bulkProjectReportReview')" :visible.sync="approveDialogVisible" width="500px" >
|
|
|
|
|
|
- <el-checkbox v-model="isAllSelect" label="全选" style="margin-left:24px;" @change="selectAll" v-if="reportNames.length > 0"></el-checkbox>
|
|
|
|
|
|
+ <el-checkbox v-model="isAllSelect" :label="$t('btn.selectAll')" style="margin-left:24px;" @change="selectAll" v-if="reportNames.length > 0"></el-checkbox>
|
|
<el-tree ref="approveTree" node-key="id" :data="reportNames" show-checkbox="true" @check-change="handleCheckChange" >
|
|
<el-tree ref="approveTree" node-key="id" :data="reportNames" show-checkbox="true" @check-change="handleCheckChange" >
|
|
</el-tree>
|
|
</el-tree>
|
|
- <div style="margin-left:30px;color:#999;" v-if="user.company.packageEngineering==1">仅能看到自己负责的待项目审核的日报填写人员</div>
|
|
|
|
|
|
+ <div style="margin-left:30px;color:#999;" v-if="user.company.packageEngineering==1">{{$t('other.responsibleForTheProjectLength')}}</div>
|
|
<span slot="footer" class="dialog-footer">
|
|
<span slot="footer" class="dialog-footer">
|
|
- <el-button @click="approveDialogVisible = false">取消</el-button>
|
|
|
|
- <el-button type="primary" @click="submitBatchApprove" :disabled="batchShowData.length == 0">审核通过</el-button>
|
|
|
|
|
|
+ <el-button @click="approveDialogVisible = false">{{$t('btn.cancel')}}</el-button>
|
|
|
|
+ <el-button type="primary" @click="submitBatchApprove" :disabled="batchShowData.length == 0">{{$t('state.approved')}}</el-button>
|
|
</span>
|
|
</span>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
<!--导出报表条件选择 -->
|
|
<!--导出报表条件选择 -->
|
|
- <el-dialog title="日报导出" v-if="exportDialog" :visible.sync="exportDialog" customClass="customWidth" width="500px">
|
|
|
|
|
|
+ <el-dialog :title="$t('textLink.exportWork')" v-if="exportDialog" :visible.sync="exportDialog" customClass="customWidth" width="500px">
|
|
<el-form ref="form3" :model="exportParam" >
|
|
<el-form ref="form3" :model="exportParam" >
|
|
- <el-form-item prop="projectId" label="选择项目">
|
|
|
|
- <el-select v-model="exportParam.projectId" placeholder="全部项目" clearable filterable style="width:350px;">
|
|
|
|
|
|
+ <el-form-item prop="projectId" :label="$t('defaultText.selectProject')">
|
|
|
|
+ <el-select v-model="exportParam.projectId" :placeholder="$t('other.allProject')" clearable filterable style="width:350px;">
|
|
<el-option v-for="item in projectList" :key="item.id" :label="item.projectName" :value="item.id"></el-option>
|
|
<el-option v-for="item in projectList" :key="item.id" :label="item.projectName" :value="item.id"></el-option>
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item prop="departmentId" label="选择部门" v-if="permissions.reportsCompany">
|
|
|
|
- <el-cascader v-model="exportParam.departmentId" placeholder="全部部门" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 350px;"></el-cascader>
|
|
|
|
|
|
+ <el-form-item prop="departmentId" :label="$t('other.selectdepartment')" v-if="permissions.reportsCompany">
|
|
|
|
+ <el-cascader v-model="exportParam.departmentId" :placeholder="$t('other.allDepartments')" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 350px;"></el-cascader>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item prop="projectId" label="日期范围">
|
|
|
|
|
|
+ <el-form-item prop="projectId" :label="$t('time.dateRange')">
|
|
<el-date-picker
|
|
<el-date-picker
|
|
v-model="exportParam.dateRange" :editable="false"
|
|
v-model="exportParam.dateRange" :editable="false"
|
|
format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
|
format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
|
:clearable="true"
|
|
:clearable="true"
|
|
- range-separator="至"
|
|
|
|
|
|
+ :range-separator="$t('other.to')"
|
|
type="daterange"
|
|
type="daterange"
|
|
- start-placeholder="开始日期"
|
|
|
|
- end-placeholder="结束日期"
|
|
|
|
|
|
+ :start-placeholder="$t('time.startDate')"
|
|
|
|
+ :end-placeholder="$t('time.endDate')"
|
|
></el-date-picker>
|
|
></el-date-picker>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item prop="stateKey" label="是否包含">
|
|
|
|
|
|
+ <el-form-item prop="stateKey" :label="$t('other.doesItContain')">
|
|
<el-select v-model="stateKey" :placeholder="$t('defaultText.pleaseChoose')" filterable style="width:350px;">
|
|
<el-select v-model="stateKey" :placeholder="$t('defaultText.pleaseChoose')" filterable style="width:350px;">
|
|
- <el-option label="不包含未审核" value="0"></el-option>
|
|
|
|
- <el-option label="包含未审核" value="1"></el-option>
|
|
|
|
|
|
+ <el-option :label="$t('other.doesNotIncludeUnreviewed')" value="0"></el-option>
|
|
|
|
+ <el-option :label="$t('other.containsUnreviewed')" value="1"></el-option>
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
<div slot="footer" class="dialog-footer">
|
|
<div slot="footer" class="dialog-footer">
|
|
- <el-button type="primary" @click="exportReport" style="width:100%;" :loading="listLoading">导出</el-button>
|
|
|
|
|
|
+ <el-button type="primary" @click="exportReport" style="width:100%;" :loading="listLoading">{{$t('export.export')}}</el-button>
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
<!--导出报表条件选择 -->
|
|
<!--导出报表条件选择 -->
|
|
- <el-dialog title="工时统计导出" v-if="exportTimeDialog" :visible.sync="exportTimeDialog" customClass="customWidth" width="500px">
|
|
|
|
|
|
+ <el-dialog :title="$t('other.laborStatisticsExport')" v-if="exportTimeDialog" :visible.sync="exportTimeDialog" customClass="customWidth" width="500px">
|
|
<el-form ref="form3" :model="exportParam" >
|
|
<el-form ref="form3" :model="exportParam" >
|
|
- <el-form-item prop="range" label="日期范围">
|
|
|
|
|
|
+ <el-form-item prop="range" :label="$t('time.dateRange')">
|
|
<el-date-picker
|
|
<el-date-picker
|
|
v-model="exportParam.dateRange" :editable="false"
|
|
v-model="exportParam.dateRange" :editable="false"
|
|
format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
|
format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
|
:clearable="true"
|
|
:clearable="true"
|
|
- range-separator="至"
|
|
|
|
|
|
+ :range-separator="$t('other.to')"
|
|
type="daterange"
|
|
type="daterange"
|
|
- start-placeholder="开始日期"
|
|
|
|
- end-placeholder="结束日期"
|
|
|
|
|
|
+ :start-placeholder="$t('time.startDate')"
|
|
|
|
+ :end-placeholder="$t('time.endDate')"
|
|
></el-date-picker>
|
|
></el-date-picker>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
</el-form>
|
|
</el-form>
|
|
<div slot="footer" class="dialog-footer">
|
|
<div slot="footer" class="dialog-footer">
|
|
- <el-button type="primary" @click="exportUserTime" style="width:100%;" >导出</el-button>
|
|
|
|
|
|
+ <el-button type="primary" @click="exportUserTime" style="width:100%;" >{{$t('export.export')}}</el-button>
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
<!--人员列表 -->
|
|
<!--人员列表 -->
|
|
- <el-dialog :title="(isFill?'已填':'未填')+'人员列表'" v-if="membListVisible" :visible.sync="membListVisible" width="500px" class="membListClass">
|
|
|
|
|
|
+ <el-dialog :title="(isFill?$t('other.filled'):$t('other.unfilled'))+$t('other.personnelList')" v-if="membListVisible" :visible.sync="membListVisible" width="500px" class="membListClass">
|
|
<el-tabs v-model="isLeave" v-if="!isFill && (user.timeType.syncCorpwxTime == 1 || user.timeType.syncDingding == 1 || user.company.packageOa == 1)" type="card">
|
|
<el-tabs v-model="isLeave" v-if="!isFill && (user.timeType.syncCorpwxTime == 1 || user.timeType.syncDingding == 1 || user.company.packageOa == 1)" type="card">
|
|
- <el-tab-pane :label="'当日未填(' + fillMembList.length +'人)'" :name="0">
|
|
|
|
|
|
+ <el-tab-pane :label="$t('other.unfilledontheday')+'(' + fillMembList.length + $t('other.people')+')'" :name="0">
|
|
<el-table :show-header="true" :data="fillMembList" highlight-current-row :height="400" style="width: 100%;" @selection-change="notifySel">
|
|
<el-table :show-header="true" :data="fillMembList" highlight-current-row :height="400" style="width: 100%;" @selection-change="notifySel">
|
|
<el-table-column type="selection"></el-table-column>
|
|
<el-table-column type="selection"></el-table-column>
|
|
- <el-table-column prop="label" label="姓名" >
|
|
|
|
|
|
+ <el-table-column prop="label" :label="$t('lable.name')" >
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
- <span>{{(scope.row.leaveDays || scope.row.leaveTimes) ? scope.row.label + (scope.row.leaveDays ? '(请假' + scope.row.leaveDays + '天)' : '(请假' + scope.row.leaveTimes + 'h)') : scope.row.label}}</span>
|
|
|
|
|
|
+ <span>{{(scope.row.leaveDays || scope.row.leaveTimes) ? scope.row.label + (scope.row.leaveDays ? '(' + $t('other.AskForLeave') +scope.row.leaveDays + $t('time.day') +')' : '(' + $t('other.AskForLeave') + scope.row.leaveTimes + 'h)') : scope.row.label}}</span>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column prop="deptName" label="部门" >
|
|
|
|
|
|
+ <el-table-column prop="deptName" :label="$t('lable.department')" >
|
|
</el-table-column>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-table>
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
- <el-tab-pane :label="'全天请假(' + fillMembList_leave.length + '人)'" :name="1">
|
|
|
|
|
|
+ <el-tab-pane :label="$t('other.takeDayOff')+'(' + fillMembList_leave.length + $t('other.people') +')'" :name="1">
|
|
<el-table :show-header="true" :data="fillMembList_leave" highlight-current-row :height="400" style="width: 100%;">
|
|
<el-table :show-header="true" :data="fillMembList_leave" highlight-current-row :height="400" style="width: 100%;">
|
|
- <el-table-column prop="label" label="姓名" >
|
|
|
|
|
|
+ <el-table-column prop="label" :label="$t('lable.name')" >
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
<!-- <span>{{(scope.row.leaveDays || scope.row.leaveTimes) ? scope.row.label + (scope.row.leaveDays ? '(请假' + scope.row.leaveDays + '天 - ' + leaveTypeName[scope.row.leaveType] + ')' : '(请假' + scope.row.leaveTimes + 'h - ' + leaveTypeName[scope.row.leaveType] + ')') : scope.row.label}}</span> -->
|
|
<!-- <span>{{(scope.row.leaveDays || scope.row.leaveTimes) ? scope.row.label + (scope.row.leaveDays ? '(请假' + scope.row.leaveDays + '天 - ' + leaveTypeName[scope.row.leaveType] + ')' : '(请假' + scope.row.leaveTimes + 'h - ' + leaveTypeName[scope.row.leaveType] + ')') : scope.row.label}}</span> -->
|
|
<span>{{(scope.row.leaveDays || scope.row.leaveTimes) ? scope.row.label + (scope.row.leaveDays ? '(' + leaveTypeName[scope.row.leaveType] + ')' : '(' + leaveTypeName[scope.row.leaveType] + ')') : scope.row.label}}</span>
|
|
<span>{{(scope.row.leaveDays || scope.row.leaveTimes) ? scope.row.label + (scope.row.leaveDays ? '(' + leaveTypeName[scope.row.leaveType] + ')' : '(' + leaveTypeName[scope.row.leaveType] + ')') : scope.row.label}}</span>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column prop="deptName" label="部门" >
|
|
|
|
|
|
+ <el-table-column prop="deptName" :label="$t('lable.department')" >
|
|
</el-table-column>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-table>
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
</el-tabs>
|
|
</el-tabs>
|
|
<el-table :show-header="true" :data="fillMembList" highlight-current-row :height="400" style="width: 100%;" @selection-change="notifySel" v-else>
|
|
<el-table :show-header="true" :data="fillMembList" highlight-current-row :height="400" style="width: 100%;" @selection-change="notifySel" v-else>
|
|
<el-table-column type="selection"></el-table-column>
|
|
<el-table-column type="selection"></el-table-column>
|
|
- <el-table-column prop="label" label="姓名" ></el-table-column>
|
|
|
|
- <el-table-column prop="deptName" label="部门" >
|
|
|
|
|
|
+ <el-table-column prop="label" :label="$t('lable.name')" ></el-table-column>
|
|
|
|
+ <el-table-column prop="deptName" :label="$t('lable.department')" >
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
|
|
|
</el-table>
|
|
</el-table>
|
|
<div slot="footer" class="dialog-footer" v-if="!(isLeave == 1 && !isFill)">
|
|
<div slot="footer" class="dialog-footer" v-if="!(isLeave == 1 && !isFill)">
|
|
- <el-button type="primary" @click="Notify(0)" v-if="!isFill && this.user.corpwxUserid" :disabled="fillMembList == 0">企业微信催填</el-button>
|
|
|
|
- <el-button type="primary" @click="Notify(1)" v-if="!isFill && !this.user.corpwxUserid && this.user.dingdingUserid" :disabled="fillMembList == 0">钉钉催填</el-button>
|
|
|
|
- <el-button type="primary" @click="Notify(2)" v-if="!isFill && !this.user.corpwxUserid && !this.user.dingdingUserid" :disabled="fillMembList == 0">微信催填</el-button>
|
|
|
|
- <el-button type="default" @click="exportMemb" :disabled="fillMembList == 0">导出</el-button>
|
|
|
|
|
|
+ <el-button type="primary" @click="Notify(0)" v-if="!isFill && this.user.corpwxUserid" :disabled="fillMembList == 0">{{$t('other.enterpriseWeChatReminder')}}</el-button>
|
|
|
|
+ <el-button type="primary" @click="Notify(1)" v-if="!isFill && !this.user.corpwxUserid && this.user.dingdingUserid" :disabled="fillMembList == 0">{{$t('other.dingNingurgefilling')}}</el-button>
|
|
|
|
+ <el-button type="primary" @click="Notify(2)" v-if="!isFill && !this.user.corpwxUserid && !this.user.dingdingUserid" :disabled="fillMembList == 0">{{$t('other.weChatReminder')}}</el-button>
|
|
|
|
+ <el-button type="default" @click="exportMemb" :disabled="fillMembList == 0">{{$t('export.export')}}</el-button>
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
|
|
|
|
<!-- 按部门选择人员 -->
|
|
<!-- 按部门选择人员 -->
|
|
- <el-dialog title="选择需要代填报的人员" v-if="chooseParticipVisible" :visible.sync="chooseParticipVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
|
|
|
|
- <el-input style="width:100%" v-model="deptMembDataText" placeholder="请输入姓名搜索"></el-input>
|
|
|
|
|
|
+ <el-dialog :title="$t('defaultText.selectthepersonwhneedstofillinthereport')" v-if="chooseParticipVisible" :visible.sync="chooseParticipVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
|
|
|
|
+ <el-input style="width:100%" v-model="deptMembDataText" :placeholder="$t('defaultText.pleaseEnterNametoSearch')"></el-input>
|
|
<div class="tree" style="height:400px">
|
|
<div class="tree" style="height:400px">
|
|
<el-scrollbar style="height:100%">
|
|
<el-scrollbar style="height:100%">
|
|
<el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
|
|
<el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
|
|
@@ -931,10 +931,10 @@
|
|
highlight-current :filter-node-method="filterNode"></el-tree>
|
|
highlight-current :filter-node-method="filterNode"></el-tree>
|
|
</el-scrollbar>
|
|
</el-scrollbar>
|
|
</div>
|
|
</div>
|
|
- <div>已选中 {{chosenMembCount}} 人</div>
|
|
|
|
|
|
+ <div>{{$t('btn.choose')}} {{chosenMembCount}} {{$t('other.people')}}</div>
|
|
<div slot="footer" class="dialog-footer">
|
|
<div slot="footer" class="dialog-footer">
|
|
- <el-button @click="chooseParticipVisible = false" >取消</el-button>
|
|
|
|
- <el-button type="primary" @click="chooseParticip()" >确定</el-button>
|
|
|
|
|
|
+ <el-button @click="chooseParticipVisible = false" >{{$t('btn.cancel')}}</el-button>
|
|
|
|
+ <el-button type="primary" @click="chooseParticip()" >{{$t('btn.submit')}}</el-button>
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
@@ -948,7 +948,7 @@
|
|
>
|
|
>
|
|
<!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
|
|
<!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
|
|
<el-tabs v-model="activeName" @tab-click="handleClick">
|
|
<el-tabs v-model="activeName" @tab-click="handleClick">
|
|
- <el-tab-pane label="已填工时情况" name="first">
|
|
|
|
|
|
+ <el-tab-pane :label="$t('other.completedHours')" name="first">
|
|
<div class="selectworktime_export" style="margin-top:10px;">
|
|
<div class="selectworktime_export" style="margin-top:10px;">
|
|
<div class="selectworktime_export_l">
|
|
<div class="selectworktime_export_l">
|
|
<el-date-picker
|
|
<el-date-picker
|
|
@@ -958,23 +958,23 @@
|
|
type="daterange"
|
|
type="daterange"
|
|
align="right"
|
|
align="right"
|
|
unlink-panels
|
|
unlink-panels
|
|
- range-separator="至"
|
|
|
|
- start-placeholder="开始日期"
|
|
|
|
- end-placeholder="结束日期"
|
|
|
|
|
|
+ :range-separator="$t('other.to')"
|
|
|
|
+ :start-placeholder="$t('time.startDate')"
|
|
|
|
+ :end-placeholder="$t('time.endDate')"
|
|
:default-time="['12:00:00', '12:00:00']"
|
|
:default-time="['12:00:00', '12:00:00']"
|
|
size="small"
|
|
size="small"
|
|
popper-class="selecteorktime_datapick_popper"
|
|
popper-class="selecteorktime_datapick_popper"
|
|
@change="showMonthWorkTime()"
|
|
@change="showMonthWorkTime()"
|
|
>
|
|
>
|
|
</el-date-picker>
|
|
</el-date-picker>
|
|
- <el-button size="small" @click="getDoubleLastWeek(1)">上上周</el-button>
|
|
|
|
- <el-button size="small" @click="getLastWeek(1)">上周</el-button>
|
|
|
|
- <el-button size="small" @click="getThisWeek(1)">本周</el-button>
|
|
|
|
|
|
+ <el-button size="small" @click="getDoubleLastWeek(1)">{{$t('time.twoWeeksAgo')}}</el-button>
|
|
|
|
+ <el-button size="small" @click="getLastWeek(1)">{{$t('time.lastWeek')}}</el-button>
|
|
|
|
+ <el-button size="small" @click="getThisWeek(1)">{{$t('time.nextWeek')}}</el-button>
|
|
|
|
|
|
<!-- 222 -->
|
|
<!-- 222 -->
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div>
|
|
- <el-input style="float:left;width:22%" v-model="searchKeyword" class="input-with-select" placeholder="请输入人员搜索" clearable="true" size="small">
|
|
|
|
|
|
+ <el-input style="float:left;width:22%" v-model="searchKeyword" class="input-with-select" :placeholder="$t('defaultText.pleaseEnterNametoSearch')" clearable="true" size="small">
|
|
<el-button slot="append" @click="searchScreen(0)" icon="el-icon-search"></el-button>
|
|
<el-button slot="append" @click="searchScreen(0)" icon="el-icon-search"></el-button>
|
|
</el-input>
|
|
</el-input>
|
|
</div>
|
|
</div>
|
|
@@ -982,7 +982,7 @@
|
|
type="primary"
|
|
type="primary"
|
|
style="float: right; vertical-align: middle;height:32px"
|
|
style="float: right; vertical-align: middle;height:32px"
|
|
@click="exportMembWorkHours()"
|
|
@click="exportMembWorkHours()"
|
|
- >导出数据</el-link
|
|
|
|
|
|
+ >{{$t('export.exportData')}}</el-link
|
|
>
|
|
>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
@@ -996,18 +996,18 @@
|
|
v-loading="tbload"
|
|
v-loading="tbload"
|
|
:lazy="true"
|
|
:lazy="true"
|
|
>
|
|
>
|
|
- <el-table-column width="75" type="index" fixed="left" label="序号">
|
|
|
|
|
|
+ <el-table-column width="75" type="index" fixed="left" :label="$t('headerTop.serialNumber')">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
{{ scope.$index + 1 }}
|
|
{{ scope.$index + 1 }}
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
|
|
|
- <el-table-column width="105" prop="name" fixed="left" label="姓名">
|
|
|
|
|
|
+ <el-table-column width="105" prop="name" fixed="left" :label="$t('lable.name')">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
<span :style="scope.row.worktimeList.length==0?'color:red':''">{{scope.row.name}}</span>
|
|
<span :style="scope.row.worktimeList.length==0?'color:red':''">{{scope.row.name}}</span>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column prop="departmentName" fixed="left" label="部门">
|
|
|
|
|
|
+ <el-table-column prop="departmentName" fixed="left" :label="$t('lable.department')">
|
|
|
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column
|
|
<el-table-column
|
|
@@ -1097,8 +1097,8 @@
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-table>
|
|
- <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isFlag" title="加载中..." type="success" center :closable="false" show-icon></el-alert>
|
|
|
|
- <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isMore" title="无更多数据" type="warning" center show-icon></el-alert>
|
|
|
|
|
|
+ <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isFlag" :title="$t('message.loading')+'...'" type="success" center :closable="false" show-icon></el-alert>
|
|
|
|
+ <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isMore" :title="$t('message.noMoreData')" type="warning" center show-icon></el-alert>
|
|
|
|
|
|
<!-- <div slot="title" class="dialog-title selectworktime_title">
|
|
<!-- <div slot="title" class="dialog-title selectworktime_title">
|
|
<label style="font-size: 16px">员工每日已填报工时数</label>
|
|
<label style="font-size: 16px">员工每日已填报工时数</label>
|
|
@@ -1112,7 +1112,7 @@
|
|
<!-- </div> -->
|
|
<!-- </div> -->
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
|
|
|
|
- <el-tab-pane label="未填人员列表" name="second" >
|
|
|
|
|
|
+ <el-tab-pane :label="$t('other.unfilledPersonList')" name="second" >
|
|
<div class="selectworktime_export" style="margin-top:10px">
|
|
<div class="selectworktime_export" style="margin-top:10px">
|
|
<div class="selectworktime_export_l">
|
|
<div class="selectworktime_export_l">
|
|
<el-date-picker
|
|
<el-date-picker
|
|
@@ -1122,22 +1122,22 @@
|
|
type="daterange"
|
|
type="daterange"
|
|
align="right"
|
|
align="right"
|
|
unlink-panels
|
|
unlink-panels
|
|
- range-separator="至"
|
|
|
|
- start-placeholder="开始日期"
|
|
|
|
- end-placeholder="结束日期"
|
|
|
|
|
|
+ :range-separator="$t('other.to')"
|
|
|
|
+ :start-placeholder="$t('time.startDate')"
|
|
|
|
+ :end-placeholder="$t('time.endDate')"
|
|
:default-time="['12:00:00', '12:00:00']"
|
|
:default-time="['12:00:00', '12:00:00']"
|
|
size="small"
|
|
size="small"
|
|
popper-class="selecteorktime_datapick_popper"
|
|
popper-class="selecteorktime_datapick_popper"
|
|
@change="showMonthNotWorkTime()"
|
|
@change="showMonthNotWorkTime()"
|
|
>
|
|
>
|
|
</el-date-picker>
|
|
</el-date-picker>
|
|
- <el-button size="small" @click="getDoubleLastWeek()">上上周</el-button>
|
|
|
|
- <el-button size="small" @click="getLastWeek()">上周</el-button>
|
|
|
|
- <el-button size="small" @click="getThisWeek()">本周</el-button>
|
|
|
|
|
|
+ <el-button size="small" @click="getDoubleLastWeek()">{{$t('time.twoWeeksAgo')}}</el-button>
|
|
|
|
+ <el-button size="small" @click="getLastWeek()">{{$t('time.lastWeek')}}</el-button>
|
|
|
|
+ <el-button size="small" @click="getThisWeek()">{{$t('time.nextWeek')}}</el-button>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div>
|
|
- <el-input style="float:left;width:22%" v-model="searchKeyword" class="input-with-select" placeholder="请输入人员搜索" clearable="true" size="small">
|
|
|
|
|
|
+ <el-input style="float:left;width:22%" v-model="searchKeyword" class="input-with-select" :placeholder="$t('defaultText.pleaseEnterNametoSearch')" clearable="true" size="small">
|
|
<el-button slot="append" @click="searchScreen(1)" icon="el-icon-search"></el-button>
|
|
<el-button slot="append" @click="searchScreen(1)" icon="el-icon-search"></el-button>
|
|
</el-input>
|
|
</el-input>
|
|
</div>
|
|
</div>
|
|
@@ -1145,7 +1145,7 @@
|
|
type="primary"
|
|
type="primary"
|
|
style="float: right; vertical-align: middle;height:32px"
|
|
style="float: right; vertical-align: middle;height:32px"
|
|
@click="exportMembNotWorkHours()"
|
|
@click="exportMembNotWorkHours()"
|
|
- >导出数据</el-link
|
|
|
|
|
|
+ >{{$t('export.exportData')}}</el-link
|
|
>
|
|
>
|
|
</div>
|
|
</div>
|
|
<el-table
|
|
<el-table
|
|
@@ -1159,72 +1159,72 @@
|
|
v-loading="tbload"
|
|
v-loading="tbload"
|
|
lazy
|
|
lazy
|
|
>
|
|
>
|
|
- <el-table-column min-width="150" label="部门" prop="department">
|
|
|
|
|
|
+ <el-table-column min-width="150" :label="$t('lable.department')" prop="department">
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column min-width="150" prop="name" label="姓名" >
|
|
|
|
|
|
+ <el-table-column min-width="150" prop="name" :label="$t('lable.name')" >
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column
|
|
<el-table-column
|
|
min-width="200"
|
|
min-width="200"
|
|
- label="未填日期"
|
|
|
|
|
|
+ :label="$t('other.missingDate')"
|
|
align="center"
|
|
align="center"
|
|
prop="createDate"
|
|
prop="createDate"
|
|
>
|
|
>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column
|
|
<el-table-column
|
|
min-width="200"
|
|
min-width="200"
|
|
- label="考勤数据"
|
|
|
|
|
|
+ :label="$t('other.attendanceData')"
|
|
prop="cardTime"
|
|
prop="cardTime"
|
|
align="center"
|
|
align="center"
|
|
v-if="user.timeType.syncCorpwxTime == 1"></el-table-column>
|
|
v-if="user.timeType.syncCorpwxTime == 1"></el-table-column>
|
|
</el-table>
|
|
</el-table>
|
|
- <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isFlag" title="加载中..." type="success" center :closable="false" show-icon></el-alert>
|
|
|
|
- <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isMore" title="无更多数据" type="success" center show-icon></el-alert>
|
|
|
|
|
|
+ <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isFlag" :title="$t('message.loading')+'...'" type="success" center :closable="false" show-icon></el-alert>
|
|
|
|
+ <el-alert style="position:absolute;bottom:0;z-index:10;" v-if="isMore" :title="$t('message.noMoreData')" type="success" center show-icon></el-alert>
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
</el-tabs>
|
|
</el-tabs>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
<!--驳回弹出框 -->
|
|
<!--驳回弹出框 -->
|
|
- <el-dialog title="请输入原因" v-if="denyReasonDialog" :visible.sync="denyReasonDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
|
|
|
|
|
|
+ <el-dialog :title="$t('defaultText.pleaseEnterTheReason')" v-if="denyReasonDialog" :visible.sync="denyReasonDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
|
|
<div>
|
|
<div>
|
|
- <el-input type="textarea" v-model="denyForm.reason" rows="2" :placeholder="'请输入您决定'+(denyForm.i==0?'驳回':'撤销')+'的原因'" />
|
|
|
|
|
|
+ <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')" />
|
|
</div>
|
|
</div>
|
|
<div slot="footer" class="dialog-footer">
|
|
<div slot="footer" class="dialog-footer">
|
|
- <el-button @click="denyReasonDialog = false" >取消</el-button>
|
|
|
|
- <el-button type="primary" @click="deny()" >确定</el-button>
|
|
|
|
|
|
+ <el-button @click="denyReasonDialog = false" >{{$t('btn.cancel')}}</el-button>
|
|
|
|
+ <el-button type="primary" @click="deny()" >{{$t('btn.submit')}}</el-button>
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
<!-- 通过弹出框 -->
|
|
<!-- 通过弹出框 -->
|
|
- <el-dialog title="审核评价" v-if="approveinDialog" :visible.sync="approveinDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
|
|
|
|
|
|
+ <el-dialog :title="$t('other.reviewEvaluation')" v-if="approveinDialog" :visible.sync="approveinDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
|
|
<div>
|
|
<div>
|
|
- <el-input type="textarea" v-model="approveinData.evaluate" rows="2" placeholder="请输入您决定通过的评价" />
|
|
|
|
|
|
+ <el-input type="textarea" v-model="approveinData.evaluate" rows="2" :placeholder="$t('defaultText.Pleaseenterthereviewyoudecidetopass')" />
|
|
</div>
|
|
</div>
|
|
<div slot="footer" class="dialog-footer">
|
|
<div slot="footer" class="dialog-footer">
|
|
- <el-button @click="approveinDialog = false" >取消</el-button>
|
|
|
|
- <el-button type="primary" @click="approveinfun()" >确定</el-button>
|
|
|
|
|
|
+ <el-button @click="approveinDialog = false" >{{$t('btn.cancel')}}</el-button>
|
|
|
|
+ <el-button type="primary" @click="approveinfun()" >{{$t('btn.submit')}}</el-button>
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
<!--批量导入日报 -->
|
|
<!--批量导入日报 -->
|
|
- <el-dialog title="工时批量导入" v-if="importDialog" :visible.sync="importDialog" customClass="customWidth" width="500px">
|
|
|
|
- <p>1. 下载
|
|
|
|
- <el-link type="primary" style="margin-left:5px;" :underline="false" href="./upload/员工工时统计模板2.xlsx" download="员工工时导入模板.xlsx">员工工时统计模板.xlsx</el-link>
|
|
|
|
|
|
+ <el-dialog :title="$t('other.Batchimportofworkinghours')" v-if="importDialog" :visible.sync="importDialog" customClass="customWidth" width="500px">
|
|
|
|
+ <p>1. {{$t('other.download')}}
|
|
|
|
+ <el-link type="primary" style="margin-left:5px;" :underline="false" :href="'./upload/'+$t('template.EmployeeHoursStatisticsTemplate')+'2.xlsx'" :download="$t('template.EmployeeTimeImportTemplate')+'.xlsx'">{{$t('template.EmployeeHoursStatisticsTemplate') + '.xlsx'}}</el-link>
|
|
</p>
|
|
</p>
|
|
- <p>2. 填写excel模板,请确保模板中的项目和人员已添加到系统中。</p>
|
|
|
|
|
|
+ <p>2. {{$t('other.projectsAndPeopleInThetemplate')}}。</p>
|
|
<p style="display: flex;justify-content: center;">
|
|
<p style="display: flex;justify-content: center;">
|
|
<el-upload ref="upload" action="#" :limit="1" :http-request="batchImportData" :show-file-list="false">
|
|
<el-upload ref="upload" action="#" :limit="1" :http-request="batchImportData" :show-file-list="false">
|
|
- <el-button type="primary" :underline="false" :loading="importingData">开始导入</el-button>
|
|
|
|
|
|
+ <el-button type="primary" :underline="false" :loading="importingData">{{$t("other.startImporting")}}</el-button>
|
|
</el-upload>
|
|
</el-upload>
|
|
</p>
|
|
</p>
|
|
<div style="display: flex;justify-content: end;padding-bottom: 1em;">
|
|
<div style="display: flex;justify-content: end;padding-bottom: 1em;">
|
|
- <el-link type="primary" @click="toView()">查看工时导入记录</el-link>
|
|
|
|
|
|
+ <el-link type="primary" @click="toView()">{{$t('other.viewLaborImportRecords')}}</el-link>
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
<!-- 工时导入记录弹窗 -->
|
|
<!-- 工时导入记录弹窗 -->
|
|
- <el-dialog title="工时导入记录" v-loading="toViewloading" :visible.sync="toViewDialogVisible" width="400" :before-close="handleClose">
|
|
|
|
|
|
+ <el-dialog :title="$t('other.viewLaborImportRecords')" v-loading="toViewloading" :visible.sync="toViewDialogVisible" width="400" :before-close="handleClose">
|
|
<div style="height: 452px">
|
|
<div style="height: 452px">
|
|
<el-table :data="toViewList" stripe style="width: 100%;" height="400" :loading="toViewLoading">
|
|
<el-table :data="toViewList" stripe style="width: 100%;" height="400" :loading="toViewLoading">
|
|
- <el-table-column prop="indate" label="导入时间"> </el-table-column>
|
|
|
|
- <el-table-column prop="userName" label="操作人"> </el-table-column>
|
|
|
|
- <el-table-column prop="datel" label="文件">
|
|
|
|
|
|
+ <el-table-column prop="indate" :label="$t('other.ImportTime')"> </el-table-column>
|
|
|
|
+ <el-table-column prop="userName" :label="$t('other.operator')"> </el-table-column>
|
|
|
|
+ <el-table-column prop="datel" :label="$t('other.document')">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
<div>
|
|
<div>
|
|
<el-link type="primary" @click="addUpload(scope.row)">{{scope.row.fileName}}</el-link>
|
|
<el-link type="primary" @click="addUpload(scope.row)">{{scope.row.fileName}}</el-link>
|
|
@@ -1248,13 +1248,13 @@
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
<!--基于企业微信考勤数据的工时导入 -->
|
|
<!--基于企业微信考勤数据的工时导入 -->
|
|
- <el-dialog title="工时批量导入" v-if="importWxDialog" :visible.sync="importWxDialog" customClass="customWidth" width="1100px">
|
|
|
|
|
|
+ <el-dialog :title="$t('other.Batchimportofworkinghours')" v-if="importWxDialog" :visible.sync="importWxDialog" customClass="customWidth" width="1100px">
|
|
<el-steps :active="active" finish-status="success" style="margin-left:50px;">
|
|
<el-steps :active="active" finish-status="success" style="margin-left:50px;">
|
|
- <el-step title="选择要导入工时的日期范围">
|
|
|
|
|
|
+ <el-step :title="$t('other.selectadaterangetoimporthours')">
|
|
|
|
|
|
</el-step>
|
|
</el-step>
|
|
- <el-step title="下载带考勤数据的模板"></el-step>
|
|
|
|
- <el-step title="填写模板,上传数据"></el-step>
|
|
|
|
|
|
+ <el-step :title="$t('other.downloadTemplateithattendancedata')"></el-step>
|
|
|
|
+ <el-step :title="$t('other.filloutthetemplateanduploaddata')"></el-step>
|
|
|
|
|
|
</el-steps>
|
|
</el-steps>
|
|
|
|
|
|
@@ -1265,10 +1265,10 @@
|
|
v-model="importWxParam.date" :editable="false"
|
|
v-model="importWxParam.date" :editable="false"
|
|
format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
|
format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
|
:clearable="true"
|
|
:clearable="true"
|
|
- range-separator="至"
|
|
|
|
|
|
+ :range-separator="$t('other.to')"
|
|
type="daterange"
|
|
type="daterange"
|
|
- start-placeholder="开始日期"
|
|
|
|
- end-placeholder="结束日期"
|
|
|
|
|
|
+ :start-placeholder="$t('time.startDate')"
|
|
|
|
+ :end-placeholder="$t('time.endDate')"
|
|
@change="loadCheckInData"
|
|
@change="loadCheckInData"
|
|
></el-date-picker>
|
|
></el-date-picker>
|
|
</div>
|
|
</div>
|
|
@@ -1276,19 +1276,19 @@
|
|
<div v-if="active==1" style="padding:10px;">
|
|
<div v-if="active==1" style="padding:10px;">
|
|
<el-table border :data="checkinList" highlight-current-row v-loading="checkinLoading" :height="395"
|
|
<el-table border :data="checkinList" highlight-current-row v-loading="checkinLoading" :height="395"
|
|
style="width: 100%;margin-top:5px;" >
|
|
style="width: 100%;margin-top:5px;" >
|
|
- <el-table-column prop="hasPassed" label="审核状态" width="100px">
|
|
|
|
|
|
+ <el-table-column prop="hasPassed" :label="$t('other.approvalStatus')" width="100px">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
- <span v-if="scope.row.hasPassed" style="color:green; margin-left:10px;">已审</span>
|
|
|
|
- <span v-if="!scope.row.hasPassed" style="color:red; margin-left:10px;">未审</span>
|
|
|
|
|
|
+ <span v-if="scope.row.hasPassed" style="color:green; margin-left:10px;">{{$t('state.tried')}}</span>
|
|
|
|
+ <span v-if="!scope.row.hasPassed" style="color:red; margin-left:10px;">{{$t('state.untrial')}}</span>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column prop="createDate" label="工作日期" >
|
|
|
|
|
|
+ <el-table-column prop="createDate" :label="$t('screening.workingDate')" >
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column prop="weekDayTxt" label="星期" ></el-table-column>
|
|
|
|
- <el-table-column prop="username" label="员工姓名" ></el-table-column>
|
|
|
|
- <el-table-column prop="startTime" label="上班时间" ></el-table-column>
|
|
|
|
- <el-table-column prop="endTime" label="下班时间" ></el-table-column>
|
|
|
|
- <el-table-column prop="workHours" label="实际工作时长" align="right">
|
|
|
|
|
|
+ <el-table-column prop="weekDayTxt" :label="$t('weekDay.Week')" ></el-table-column>
|
|
|
|
+ <el-table-column prop="username" :label="$t('screening.employeename')" ></el-table-column>
|
|
|
|
+ <el-table-column prop="startTime" :label="$t('screening.workinghoursss')" ></el-table-column>
|
|
|
|
+ <el-table-column prop="endTime" :label="$t('screening.off-dutytime')" ></el-table-column>
|
|
|
|
+ <el-table-column prop="workHours" :label="$t('other.actualworkinghours')" align="right">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
{{scope.row.workHours.toFixed(1)}}h
|
|
{{scope.row.workHours.toFixed(1)}}h
|
|
</template>
|
|
</template>
|
|
@@ -1298,48 +1298,48 @@
|
|
<div v-if="active==2" >
|
|
<div v-if="active==2" >
|
|
<p style="display: flex;justify-content: center;height:390px;">
|
|
<p style="display: flex;justify-content: center;height:390px;">
|
|
<el-upload style="margin-top:100px;" ref="upload" action="#" :limit="1" :http-request="batchImportWxData" :show-file-list="false">
|
|
<el-upload style="margin-top:100px;" ref="upload" action="#" :limit="1" :http-request="batchImportWxData" :show-file-list="false">
|
|
- <el-button type="primary" :underline="false" :loading="importingData">选择文件并上传</el-button>
|
|
|
|
|
|
+ <el-button type="primary" :underline="false" :loading="importingData">{{$t('other.chooseFileAndUpload')}}</el-button>
|
|
</el-upload>
|
|
</el-upload>
|
|
</p>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<div slot="title">
|
|
<div slot="title">
|
|
- <span style="font-size:16px;">工时批量导入</span>
|
|
|
|
- <el-link v-if="active==0" style="float:right;margin-right:100px;" type="primary" @click="toView()">查看工时导入记录</el-link>
|
|
|
|
|
|
+ <span style="font-size:16px;">{{$t('other.Batchimportofworkinghours')}}</span>
|
|
|
|
+ <el-link v-if="active==0" style="float:right;margin-right:100px;" type="primary" @click="toView()">{{$t('other.viewLaborImportRecords')}}</el-link>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<span slot="footer">
|
|
<span slot="footer">
|
|
<el-link v-show="active==1" style="margin-right:300px;margin-top:10px;"
|
|
<el-link v-show="active==1" style="margin-right:300px;margin-top:10px;"
|
|
- type="primary" @click="downloadCheckInExcel">下载员工工时统计模板.xlsx</el-link>
|
|
|
|
- <el-button @click="pre" v-if="active!=0">上一步</el-button>
|
|
|
|
|
|
+ type="primary" @click="downloadCheckInExcel">{{$t('template.DownloadEmployeeHourStatisticsTemplate')}}.xlsx</el-link>
|
|
|
|
+ <el-button @click="pre" v-if="active!=0">{{$t('btn.previousstep')}}</el-button>
|
|
|
|
|
|
- <el-button @click="next" :disabled="importWxParam.date==null" v-if="active<2">下一步</el-button>
|
|
|
|
|
|
+ <el-button @click="next" :disabled="importWxParam.date==null" v-if="active<2">{{$t('btn.nextstep')}}</el-button>
|
|
|
|
|
|
</span>
|
|
</span>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
<!--工时批量代填 -->
|
|
<!--工时批量代填 -->
|
|
- <el-dialog title="工时批量代填" v-if="batchSubFillDialog" :visible.sync="batchSubFillDialog" customClass="customWidth" width="90%">
|
|
|
|
|
|
+ <el-dialog :title="$t('title.Fillinginbatchesofworkinghours')" v-if="batchSubFillDialog" :visible.sync="batchSubFillDialog" customClass="customWidth" width="90%">
|
|
<div>
|
|
<div>
|
|
- <span>选择日期范围:</span><el-date-picker
|
|
|
|
|
|
+ <span>{{$t('time.selectdaterange')}}:</span><el-date-picker
|
|
v-model="importWxParam.date" :editable="false"
|
|
v-model="importWxParam.date" :editable="false"
|
|
format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
|
format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
|
:clearable="true"
|
|
:clearable="true"
|
|
- range-separator="至"
|
|
|
|
|
|
+ :range-separator="$t('other.to')"
|
|
type="daterange"
|
|
type="daterange"
|
|
- start-placeholder="开始日期"
|
|
|
|
- end-placeholder="结束日期"
|
|
|
|
|
|
+ :start-placeholder="$t('time.startDate')"
|
|
|
|
+ :end-placeholder="$t('time.endDate')"
|
|
@change="loadCheckInData"
|
|
@change="loadCheckInData"
|
|
></el-date-picker>
|
|
></el-date-picker>
|
|
- <el-button style="float:right;" type="primary" @click="submitBatchSubFillData">提交</el-button>
|
|
|
|
|
|
+ <el-button style="float:right;" type="primary" @click="submitBatchSubFillData">{{$t('btn.submit')}}</el-button>
|
|
</div>
|
|
</div>
|
|
<el-table border :data="checkinList" highlight-current-row v-loading="checkinLoading" :height="520"
|
|
<el-table border :data="checkinList" highlight-current-row v-loading="checkinLoading" :height="520"
|
|
:key="timeStamp"
|
|
:key="timeStamp"
|
|
style="width: 100%;margin-top:5px;" ref="tab">
|
|
style="width: 100%;margin-top:5px;" ref="tab">
|
|
- <el-table-column prop="createDate" label="工作日期" width="100px" fixed="left"></el-table-column>
|
|
|
|
- <el-table-column prop="username" label="员工姓名" width="80px" fixed="left"></el-table-column>
|
|
|
|
- <el-table-column prop="startTime" label="上班时间" width="80px" fixed="left"></el-table-column>
|
|
|
|
- <el-table-column prop="endTime" label="下班时间" width="80px" fixed="left"></el-table-column>
|
|
|
|
- <el-table-column prop="workHours" label="工作时长" width="80px" align="right" fixed="left">
|
|
|
|
|
|
+ <el-table-column prop="createDate" :label="$t('screening.workingDate')" width="100px" fixed="left"></el-table-column>
|
|
|
|
+ <el-table-column prop="username" :label="$t('screening.employeename')" width="80px" fixed="left"></el-table-column>
|
|
|
|
+ <el-table-column prop="startTime" :label="$t('screening.workinghoursss')" width="80px" fixed="left"></el-table-column>
|
|
|
|
+ <el-table-column prop="endTime" :label="$t('screening.off-dutytime')" width="80px" fixed="left"></el-table-column>
|
|
|
|
+ <el-table-column prop="workHours" :label="$t('screening.workTime')" width="80px" align="right" fixed="left">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
{{scope.row.workHours.toFixed(1)}}h
|
|
{{scope.row.workHours.toFixed(1)}}h
|
|
</template>
|
|
</template>
|
|
@@ -1350,7 +1350,7 @@
|
|
<el-input v-model="scope.row[item]" style="width:60px;" @input="triggerTotalTime(scope.$index)"></el-input> h
|
|
<el-input v-model="scope.row[item]" style="width:60px;" @input="triggerTotalTime(scope.$index)"></el-input> h
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column prop="totalFillTime" label="总工时" fixed="right">
|
|
|
|
|
|
+ <el-table-column prop="totalFillTime" :label="$t('other.totalworkinghours')" fixed="right">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
{{scope.row.totalFillTime==null?0.0:scope.row.totalFillTime}} h
|
|
{{scope.row.totalFillTime==null?0.0:scope.row.totalFillTime}} h
|
|
</template>
|
|
</template>
|
|
@@ -1358,18 +1358,18 @@
|
|
</el-table>
|
|
</el-table>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
<!--基于企业微信考勤数据的工时导入 -->
|
|
<!--基于企业微信考勤数据的工时导入 -->
|
|
- <el-dialog title="工时导入结果" v-if="showImportResult" :visible.sync="showImportResult" customClass="customWidth" width="500px">
|
|
|
|
|
|
+ <el-dialog :title="$t('title.Workhoursimportresult')" v-if="showImportResult" :visible.sync="showImportResult" customClass="customWidth" width="500px">
|
|
<div>
|
|
<div>
|
|
<span>{{importResultMsg}}</span>
|
|
<span>{{importResultMsg}}</span>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<span slot="footer" class="dialog-footer">
|
|
<span slot="footer" class="dialog-footer">
|
|
- <el-button type="primary" @click="showImportResult=false">确定</el-button>
|
|
|
|
|
|
+ <el-button type="primary" @click="showImportResult=false">{{$t('btn.submit')}}</el-button>
|
|
</span>
|
|
</span>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
<!-- 审核流程展示 -->
|
|
<!-- 审核流程展示 -->
|
|
- <el-dialog title="审核流程" v-if="approvalProcessDialog" :visible.sync="approvalProcessDialog" customClass="customWidth" width="400px">
|
|
|
|
|
|
+ <el-dialog :title="$t('title.reviewProcess')" v-if="approvalProcessDialog" :visible.sync="approvalProcessDialog" customClass="customWidth" width="400px">
|
|
<div style="padding:20px 40px 20px 0">
|
|
<div style="padding:20px 40px 20px 0">
|
|
<el-timeline :reverse="false">
|
|
<el-timeline :reverse="false">
|
|
<el-timeline-item v-for="item in approvalProcessData" :key="item.id" :timestamp="item.operateDate">{{item.msg}}</el-timeline-item>
|
|
<el-timeline-item v-for="item in approvalProcessData" :key="item.id" :timestamp="item.operateDate">{{item.msg}}</el-timeline-item>
|
|
@@ -1383,7 +1383,7 @@
|
|
// 左右滑动
|
|
// 左右滑动
|
|
import dragMixin from "@/common/js/tensile.js";
|
|
import dragMixin from "@/common/js/tensile.js";
|
|
import util from "../../common/js/util";
|
|
import util from "../../common/js/util";
|
|
-
|
|
|
|
|
|
+ let _that = this
|
|
export default {
|
|
export default {
|
|
mixins: [dragMixin],
|
|
mixins: [dragMixin],
|
|
data() {
|
|
data() {
|
|
@@ -1448,7 +1448,7 @@
|
|
fillMembList_leave: [],
|
|
fillMembList_leave: [],
|
|
membListVisible: false,
|
|
membListVisible: false,
|
|
isBatch:0,//是否是批量填报
|
|
isBatch:0,//是否是批量填报
|
|
- editTitle: ['填写日报','批量填报','代填日报'],
|
|
|
|
|
|
+ editTitle: [this.$t('textLink.fillInTheWork'),this.$t('textLink.batchFillIn'),this.$t('textLink.helpToFillIn')],
|
|
// weekDay : ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
|
|
// weekDay : ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
|
|
weekDay : [this.$t('weekDay.sunday'), this.$t('weekDay.monday'), this.$t('weekDay.tuesday'), this.$t('weekDay.wednesday'), this.$t('weekDay.thursday'), this.$t('weekDay.friday'), this.$t('weekDay.saturday')],
|
|
weekDay : [this.$t('weekDay.sunday'), this.$t('weekDay.monday'), this.$t('weekDay.tuesday'), this.$t('weekDay.wednesday'), this.$t('weekDay.thursday'), this.$t('weekDay.friday'), this.$t('weekDay.saturday')],
|
|
statusStyle:["waiting", "filledReportStyle", "RejectStyle", "waitSubmitStyle"],
|
|
statusStyle:["waiting", "filledReportStyle", "RejectStyle", "waitSubmitStyle"],
|
|
@@ -1471,7 +1471,7 @@
|
|
user: JSON.parse(sessionStorage.getItem("user")),
|
|
user: JSON.parse(sessionStorage.getItem("user")),
|
|
showAddMore:false,
|
|
showAddMore:false,
|
|
allDate: [],
|
|
allDate: [],
|
|
- typeList:['全天','上午','下午'],
|
|
|
|
|
|
+ typeList:[this.$t('other.allDay'),this.$t('other.morning'),this.$t('other.afternoon')],
|
|
date: sessionStorage.msg?sessionStorage.msg.split('-')[0]+"-"+sessionStorage.msg.split('-')[1]:util.formatDate.format(new Date(new Date()), "yyyy-MM"),
|
|
date: sessionStorage.msg?sessionStorage.msg.split('-')[0]+"-"+sessionStorage.msg.split('-')[1]:util.formatDate.format(new Date(new Date()), "yyyy-MM"),
|
|
choseDay: 0,
|
|
choseDay: 0,
|
|
|
|
|
|
@@ -1504,7 +1504,7 @@
|
|
}],
|
|
}],
|
|
},
|
|
},
|
|
workRules: {
|
|
workRules: {
|
|
- createDate: [{ required: true, message: "请选择工作日期", trigger: "change" }],
|
|
|
|
|
|
+ createDate: [{ required: true, message: this.$t('defaultText.pleaseselectaworkdate'), trigger: "change" }],
|
|
},
|
|
},
|
|
chooseParticipVisible: false,
|
|
chooseParticipVisible: false,
|
|
logining: false,
|
|
logining: false,
|
|
@@ -1518,12 +1518,12 @@
|
|
data: [
|
|
data: [
|
|
{
|
|
{
|
|
id: -1,
|
|
id: -1,
|
|
- label: '全部人员',
|
|
|
|
|
|
+ label: this.$t('lable.allStaff'),
|
|
membCount:0
|
|
membCount:0
|
|
},
|
|
},
|
|
{
|
|
{
|
|
id: 0,
|
|
id: 0,
|
|
- label: '未分配',
|
|
|
|
|
|
+ label: this.$t('lable.unassigned'),
|
|
}
|
|
}
|
|
],
|
|
],
|
|
allData:{},
|
|
allData:{},
|
|
@@ -1531,7 +1531,7 @@
|
|
option: [],
|
|
option: [],
|
|
depData: {
|
|
depData: {
|
|
id: -1,
|
|
id: -1,
|
|
- label: '全部人员',
|
|
|
|
|
|
+ label: this.$t('lable.allStaff'),
|
|
},
|
|
},
|
|
defaultProps: {
|
|
defaultProps: {
|
|
children: 'children',
|
|
children: 'children',
|
|
@@ -1609,7 +1609,8 @@
|
|
|
|
|
|
approvalProcessDialog: false,
|
|
approvalProcessDialog: false,
|
|
approvalProcessData: [],
|
|
approvalProcessData: [],
|
|
- leaveTypeName: ['事假','病假','年假','产假','婚假','丧假','调休假','陪产假','其他',],
|
|
|
|
|
|
+ // leaveTypeName: ['事假','病假','年假','产假','婚假','丧假','调休假','陪产假','其他',],
|
|
|
|
+ leaveTypeName: [this.$t('leave.personalLeave'),this.$t('leave.sickLeave'),this.$t('leave.annualLeave'),this.$t('leave.maternityLeave'),this.$t('leave.marriageLeave'),this.$t('leave.bereavementLeave'),this.$t('leave.leave'),this.$t('leave.paternityLeave'),this.$t('leave.other')],
|
|
isWeekend: false,
|
|
isWeekend: false,
|
|
|
|
|
|
canCancelInDialog: false,
|
|
canCancelInDialog: false,
|
|
@@ -1620,7 +1621,7 @@
|
|
weeklyFilledTimeDialog: false,
|
|
weeklyFilledTimeDialog: false,
|
|
weeklyFilledTimeList: [],
|
|
weeklyFilledTimeList: [],
|
|
weeklyFilledTimeLoading: false,
|
|
weeklyFilledTimeLoading: false,
|
|
- workReportStateString: ['待审核','已通过','已驳回','待提交'],
|
|
|
|
|
|
+ workReportStateString: [this.$t('state.WaitingAudit'),this.$t('state.alreadyPassed'),this.$t('state.rejected'),this.$t('state.waitingsubmit')],
|
|
weeklyFilledTimeCanDelete: false,
|
|
weeklyFilledTimeCanDelete: false,
|
|
weeklyFilledTimeDate: null
|
|
weeklyFilledTimeDate: null
|
|
};
|
|
};
|
|
@@ -1640,10 +1641,13 @@
|
|
return zhi.toFixed(1)
|
|
return zhi.toFixed(1)
|
|
},
|
|
},
|
|
// zhoData
|
|
// zhoData
|
|
- zhoData(value) {
|
|
|
|
|
|
+ zhoData(value, arr) {
|
|
var dateArray = value.split("-");
|
|
var dateArray = value.split("-");
|
|
var date = new Date(dateArray[0], parseInt(dateArray[1] - 1), dateArray[2]);
|
|
var date = new Date(dateArray[0], parseInt(dateArray[1] - 1), dateArray[2]);
|
|
- return "周" + "日一二三四五六".charAt(date.getDay());
|
|
|
|
|
|
+ // console.log("周" + "日一二三四五六".charAt(date.getDay()), '答应的值来你看看')
|
|
|
|
+ // console.log(arr[date.getDay()])
|
|
|
|
+ // return "周" + "日一二三四五六".charAt(date.getDay());
|
|
|
|
+ return arr[date.getDay()]
|
|
},
|
|
},
|
|
// 过滤数字
|
|
// 过滤数字
|
|
numbers(value) {
|
|
numbers(value) {
|
|
@@ -1689,9 +1693,9 @@
|
|
},
|
|
},
|
|
|
|
|
|
weeklyFilledTimeDelete(){ //按周填报-已填工时-点击-删除
|
|
weeklyFilledTimeDelete(){ //按周填报-已填工时-点击-删除
|
|
- this.$confirm("确定要删除该日报吗?","提示", {
|
|
|
|
- confirmButtonText: "确定",
|
|
|
|
- cancelButtonText: "取消",
|
|
|
|
|
|
+ this.$confirm(this.$t('message.Areyousureyouwanttodeletethisdaily'),this.$t('other.prompts'), {
|
|
|
|
+ confirmButtonText: this.$t('btn.determine'),
|
|
|
|
+ cancelButtonText: this.$t('btn.cancel'),
|
|
type: "warning"
|
|
type: "warning"
|
|
})
|
|
})
|
|
.then(() => {
|
|
.then(() => {
|
|
@@ -1701,7 +1705,7 @@
|
|
},res => {
|
|
},res => {
|
|
if (res.code == "ok") {
|
|
if (res.code == "ok") {
|
|
this.$message({
|
|
this.$message({
|
|
- message: "删除成功",
|
|
|
|
|
|
+ message: this.$t('message.successfullyDeleted'),
|
|
type: "success"
|
|
type: "success"
|
|
});
|
|
});
|
|
this.getWeeklyWorkTime()
|
|
this.getWeeklyWorkTime()
|
|
@@ -1900,7 +1904,7 @@
|
|
},
|
|
},
|
|
res => {
|
|
res => {
|
|
if (res.code == "ok") {
|
|
if (res.code == "ok") {
|
|
- this.$message({message:'提交成功', type:'success'});
|
|
|
|
|
|
+ this.$message({message:this.$t('message.submittedSuccessfully'), type:'success'});
|
|
this.importWxDialog = false;
|
|
this.importWxDialog = false;
|
|
}
|
|
}
|
|
},
|
|
},
|
|
@@ -1950,7 +1954,7 @@
|
|
let format = str[str.length - 1];
|
|
let format = str[str.length - 1];
|
|
if (format != "xls" && format != "xlsx") {
|
|
if (format != "xls" && format != "xlsx") {
|
|
this.$message({
|
|
this.$message({
|
|
- message: "请选择.xls或.xlsx文件",
|
|
|
|
|
|
+ message: this.$t('other.PleaseselecttheXLSorXLSXfile'),
|
|
type: "error"
|
|
type: "error"
|
|
});
|
|
});
|
|
} else {
|
|
} else {
|
|
@@ -1966,11 +1970,11 @@
|
|
this.importingData = false;
|
|
this.importingData = false;
|
|
if (res.code == "ok") {
|
|
if (res.code == "ok") {
|
|
//换成弹出框,以免有人等了半天回来啥也没看到
|
|
//换成弹出框,以免有人等了半天回来啥也没看到
|
|
- this.importResultMsg = "导入成功:成功导入"+res.data+"条工时数据。"+(res.msg?res.msg:"");
|
|
|
|
|
|
+ this.importResultMsg = this.$t('other.successful') + ':' + this.$t('other.importSuccess') +res.data+this.$t('other.workHourData')+(res.msg?res.msg:"");
|
|
this.getReportList();
|
|
this.getReportList();
|
|
this.importWxDialog = false;
|
|
this.importWxDialog = false;
|
|
} else {
|
|
} else {
|
|
- this.importResultMsg = "导入失败:"+res.msg;
|
|
|
|
|
|
+ this.importResultMsg = this.$t('export.Importfailure')+":"+res.msg;
|
|
}
|
|
}
|
|
},
|
|
},
|
|
error => {
|
|
error => {
|
|
@@ -1989,7 +1993,7 @@
|
|
let format = str[str.length - 1];
|
|
let format = str[str.length - 1];
|
|
if (format != "xls" && format != "xlsx") {
|
|
if (format != "xls" && format != "xlsx") {
|
|
this.$message({
|
|
this.$message({
|
|
- message: "请选择.xls或.xlsx文件",
|
|
|
|
|
|
+ message: this.$t('other.PleaseselecttheXLSorXLSXfile'),
|
|
type: "error"
|
|
type: "error"
|
|
});
|
|
});
|
|
} else {
|
|
} else {
|
|
@@ -2004,11 +2008,11 @@
|
|
this.showImportResult = true;
|
|
this.showImportResult = true;
|
|
if (res.code == "ok") {
|
|
if (res.code == "ok") {
|
|
//换成弹出框,以免有人等了半天回来啥也没看到
|
|
//换成弹出框,以免有人等了半天回来啥也没看到
|
|
- this.importResultMsg = "成功导入"+res.data+"条工时数据。"+(res.msg?res.msg:"");;
|
|
|
|
|
|
+ this.importResultMsg = this.$t('other.importSuccess')+res.data+this.$t('other.workHourData')+(res.msg?res.msg:"");;
|
|
this.getReportList();
|
|
this.getReportList();
|
|
this.importWXDialog = false;
|
|
this.importWXDialog = false;
|
|
} else {
|
|
} else {
|
|
- this.importResultMsg = "导入失败:"+res.msg;
|
|
|
|
|
|
+ this.importResultMsg = this.$t('export.Importfailure')+":"+res.msg;
|
|
}
|
|
}
|
|
},
|
|
},
|
|
error => {
|
|
error => {
|
|
@@ -3034,9 +3038,9 @@
|
|
},
|
|
},
|
|
//删除自己的日报
|
|
//删除自己的日报
|
|
deleteReport() {
|
|
deleteReport() {
|
|
- this.$confirm("确定要删除该日报吗?","提示", {
|
|
|
|
- confirmButtonText: "确定",
|
|
|
|
- cancelButtonText: "取消",
|
|
|
|
|
|
+ this.$confirm(this.$t('message.Areyousureyouwanttodeletethisdaily'),this.$t('other.prompts'), {
|
|
|
|
+ confirmButtonText: this.$t('btn.determine'),
|
|
|
|
+ cancelButtonText: this.$t('btn.cancel'),
|
|
type: "warning"
|
|
type: "warning"
|
|
})
|
|
})
|
|
.then(() => {
|
|
.then(() => {
|
|
@@ -3049,7 +3053,7 @@
|
|
this.listLoading = false;
|
|
this.listLoading = false;
|
|
if (res.code == "ok") {
|
|
if (res.code == "ok") {
|
|
this.$message({
|
|
this.$message({
|
|
- message: "删除成功",
|
|
|
|
|
|
+ message: this.$t('message.successfullyDeleted'),
|
|
type: "success"
|
|
type: "success"
|
|
});
|
|
});
|
|
this.getReportList();
|
|
this.getReportList();
|
|
@@ -3080,9 +3084,9 @@
|
|
let day = (this.choseDay + 1) > 9 ? "-" + (this.choseDay + 1) : "-0" + (this.choseDay + 1);
|
|
let day = (this.choseDay + 1) > 9 ? "-" + (this.choseDay + 1) : "-0" + (this.choseDay + 1);
|
|
let param = {date: this.date + day, userId: item.id};
|
|
let param = {date: this.date + day, userId: item.id};
|
|
|
|
|
|
- this.$confirm("确定要删除该日报吗?","提示", {
|
|
|
|
- confirmButtonText: "确定",
|
|
|
|
- cancelButtonText: "取消",
|
|
|
|
|
|
+ this.$confirm(this.$t('message.Areyousureyouwanttodeletethisdaily'),this.$t('other.prompts'), {
|
|
|
|
+ confirmButtonText: this.$t('btn.determine'),
|
|
|
|
+ cancelButtonText: this.$t('btn.cancel'),
|
|
type: "warning"
|
|
type: "warning"
|
|
})
|
|
})
|
|
.then(() => {
|
|
.then(() => {
|
|
@@ -3092,7 +3096,7 @@
|
|
this.listLoading = false;
|
|
this.listLoading = false;
|
|
if (res.code == "ok") {
|
|
if (res.code == "ok") {
|
|
this.$message({
|
|
this.$message({
|
|
- message: "删除成功",
|
|
|
|
|
|
+ message: this.$t('message.successfullyDeleted'),
|
|
type: "success"
|
|
type: "success"
|
|
});
|
|
});
|
|
this.getReportList();
|
|
this.getReportList();
|