<template>
|
<div class="work-time-statistics">
|
<div class="search">
|
<div class="search_thing">
|
<div class="search_label">日期:</div>
|
<div class="search_input" style="display: flex;align-items: center;">
|
<el-date-picker
|
v-model="entity.month"
|
type="month"
|
format="yyyy-MM"
|
value-format="yyyy-MM"
|
placeholder="选择月" size="small" style="width: 100%;"
|
:clearable="false"
|
@change="refreshTable()">
|
</el-date-picker>
|
</div>
|
</div>
|
<div class="search_thing">
|
<div class="search_label">员工:</div>
|
<!-- <el-select v-model="entity.name" placeholder="全部" size="small" @change="refreshTable()" clearable>
|
<el-option v-for="item in personList" :key="item.id" :label="item.name" :value="item.id">
|
</el-option>
|
</el-select> -->
|
<el-input size="small" placeholder="请输入" clearable
|
v-model="entity.name" @keyup.enter.native="refreshTable()"></el-input>
|
</div>
|
<div class="search_thing">
|
<div class="search_label">部门:</div>
|
<div class="search_input">
|
<!-- <el-select v-model="componentData.entity.laboratory" placeholder="全部" size="small" @change="refreshTable()">
|
<el-option v-for="item in weekList" :key="item.value" :label="item.label" :value="item.value">
|
</el-option>
|
</el-select> -->
|
<el-input size="small" placeholder="请输入" clearable
|
v-model="entity.departLims" @keyup.enter.native="refreshTable()"></el-input>
|
</div>
|
</div>
|
<div class="search_thing" style="padding-left: 30px;">
|
<el-button size="small" @click="refresh()">重 置</el-button>
|
<el-button size="small" type="primary" @click="refreshTable()">查 询</el-button>
|
</div>
|
<div class="search_thing">
|
<el-button size="small" type="primary" @click="handleDown" v-show="currentTable == 'value0'&&down" :loading="outLoading">导 出</el-button>
|
<el-button size="small" type="primary" @click="handleUp" v-show="currentTable == 'value1'&&up">导 入</el-button>
|
</div>
|
</div>
|
<el-radio-group v-model="currentTable" size="small" :key="'111'" style="margin-top: 10px;">
|
<el-radio-button label="value0">
|
原始工时
|
</el-radio-button>
|
<el-radio-button label="value1">
|
修正工时
|
</el-radio-button>
|
</el-radio-group>
|
<div class="table">
|
<ValueTable ref="ValueTable0"
|
v-if="currentTable == 'value0'"
|
:url="$api.auxiliaryOriginalHours.selectAuxiliaryOriginalHours"
|
:componentData="componentData" :key="upIndex" />
|
<ValueTable ref="ValueTable1"
|
v-if="currentTable == 'value1'"
|
:url="$api.auxiliaryCorrectionHours.selectAuxiliaryCorrectionHours"
|
:inputUrl="$api.auxiliaryCorrectionHours.upload"
|
:componentData="componentData0"
|
:key="upIndex1" />
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import ValueTable from '../../tool/value-table.vue'
|
import {
|
getYearAndMonthAndDays
|
} from '../../../util/date'
|
export default {
|
components: {
|
ValueTable
|
},
|
data () {
|
return{
|
down:false,
|
up:false,
|
componentData: {
|
entity: {
|
month: getYearAndMonthAndDays().split('-')[0]+'-'+getYearAndMonthAndDays().split('-')[1],
|
name: null,
|
departLims: null,
|
},
|
isIndex: true,
|
showSelect: false,
|
select: false,
|
do: [],
|
tagField: {},
|
linkEvent: {},
|
selectField: {},
|
requiredAdd: [],
|
requiredUp: [],
|
accept: '.xlsx',
|
inputType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
cellSpecialStyle:{
|
redColorByKey:'Hours'
|
}
|
},
|
componentData0: {
|
entity: {
|
month: getYearAndMonthAndDays().split('-')[0]+'-'+getYearAndMonthAndDays().split('-')[1],
|
name: null,
|
departLims: null,
|
orderBy: {
|
field: 'id',
|
order: 'desc'
|
}
|
},
|
isIndex: true,
|
showSelect: false,
|
select: false,
|
do: [],
|
tagField: {},
|
linkEvent: {
|
},
|
selectField: {},
|
requiredAdd: [],
|
requiredUp: [],
|
accept: '.xlsx',
|
inputType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
},
|
entity:{
|
month:getYearAndMonthAndDays()
|
},
|
entityCopy:{},
|
entityCopy0:{},
|
upIndex:0,
|
upIndex1:100,
|
weekList:[],
|
personList:[],
|
currentTable:'value0',
|
outLoading:false
|
}
|
},
|
mounted(){
|
this.getUsers()
|
this.entityCopy = this.HaveJson(this.componentData.entity);
|
this.entityCopy0 = this.HaveJson(this.componentData0.entity);
|
this.getPower()
|
},
|
methods: {
|
refresh(){
|
this.entity = {
|
month:getYearAndMonthAndDays()
|
}
|
if(this.currentTable=='value0'){
|
this.componentData.entity = this.HaveJson(this.entityCopy)
|
this.upIndex++
|
}else{
|
this.componentData0.entity = this.HaveJson(this.entityCopy0)
|
this.upIndex1++
|
}
|
this.refreshTable()
|
},
|
refreshTable(){
|
let entity = {...this.entity}
|
entity.month = entity.month.split('-')[0]+'-'+entity.month.split('-')[1]
|
if(this.currentTable=='value0'){
|
this.componentData.entity = {...this.componentData.entity,...entity}
|
this.$refs['ValueTable0'].selectList()
|
}else{
|
this.componentData0.entity = {...this.componentData0.entity,...entity}
|
this.$refs['ValueTable1'].selectList()
|
}
|
},
|
getUsers(){
|
this.$axios.post(this.$api.user.selectUserList, {
|
page: {
|
current: -1,
|
size: -1,
|
},
|
entity: {
|
name: null,
|
}
|
}, {
|
headers: {
|
'Content-Type': 'application/json'
|
}
|
}).then(res => {
|
if (res.code === 201) {
|
return
|
}
|
let arr = res.data.body.records
|
this.personList = arr
|
})
|
},
|
handleDown(){
|
// this.$refs.ValueTable0.downFile(false)
|
let entity = {...this.entity}
|
entity.month = entity.month.split('-')[0]+'-'+entity.month.split('-')[1]
|
this.outLoading = true
|
this.$axios.get(this.$api.auxiliaryOriginalHours.exportOriginalHours,{
|
params:entity,
|
},{responseType: "blob"}).then(res => {
|
this.outLoading = false
|
this.$message.success('导出成功')
|
const blob = new Blob([res],{ type: 'application/octet-stream' });
|
console.log(blob)
|
const url = URL.createObjectURL(blob);
|
const link = document.createElement('a');
|
link.href = url;
|
link.download = entity.month+'工时统计表.xlsx';
|
link.click();
|
})
|
},
|
handleUp(){
|
this.$refs.ValueTable1.openUpload()
|
},
|
getPower(){
|
let power = JSON.parse(sessionStorage.getItem('power'))
|
let up = false
|
let down = false
|
for (var i = 0; i < power.length; i++) {
|
if (power[i].menuMethod == 'exportOriginalHours') {
|
down = true
|
}
|
if (power[i].menuMethod == 'upload') {
|
up = true
|
}
|
}
|
this.down = down
|
this.up = up
|
}
|
}
|
}
|
</script>
|
|
<style scoped>
|
.work-time-statistics{
|
height: 100%;
|
}
|
.search {
|
background-color: #fff;
|
height: 80px;
|
display: flex;
|
align-items: center;
|
}
|
|
.search_thing {
|
width: 270px;
|
display: flex;
|
align-items: center;
|
}
|
|
.search_label {
|
width: 60px;
|
font-size: 14px;
|
text-align: right;
|
}
|
|
.search_input {
|
width: calc(100% - 60px);
|
}
|
.table {
|
margin-top: 10px;
|
background-color: #fff;
|
width: calc(100% - 40px);
|
height: calc(100% - 60px - 80px - 10px - 40px - 25px);
|
padding: 20px;
|
}
|
</style>
|