4 changed files with 539 additions and 2 deletions
-
5src/api/xm/core/xmTaskWorkload.js
-
262src/views/xm/rpt/project/projectWorkloadSetDayList.vue
-
262src/views/xm/rpt/project/projectWorkloadSetMonthList.vue
-
12src/views/xm/rpt/reportIndex.vue
@ -0,0 +1,262 @@ |
|||
<template> |
|||
<section> |
|||
<el-dialog :title="(filters.project?'【'+filters.project.name+'】':'')+'结算工时按日分布趋势图'" append-to-body modal-append-to-body width="80%" top="20px" :visible.sync="visible"> |
|||
|
|||
<el-row :gutter="5"> |
|||
<el-col :span="18"> |
|||
<div> |
|||
<div class="main" id="projectWorkloadSetDayList" style="width:100%;height:600px;margin:0 auto;"></div> |
|||
</div> |
|||
</el-col> |
|||
<el-col :span="6" class="border padding"> |
|||
<el-form :model="filters"> |
|||
<el-form-item label="归属项目" v-if="!xmProject"> |
|||
<xm-project-select v-if="!xmProject" ref="xmProjectSelect" style="display:inline;" :auto-select="false" :link-project-id="xmProject?xmProject.id:null" @row-click="onProjectSelected" @clear="onProjectClear"></xm-project-select> |
|||
</el-form-item> |
|||
<el-form-item label="日期区间"> |
|||
<br> |
|||
<date-range v-model="filters" value-format="yyyy-MM-dd" start-key="startBizDate" end-key="endBizDate"></date-range> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="primary" icon="el-icon-search" @click="listProjectWorkloadSetDay">查询</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</el-col> |
|||
</el-row> |
|||
</el-dialog> |
|||
</section> |
|||
</template> |
|||
|
|||
<script> |
|||
import util from '@/common/js/util';//全局公共库 |
|||
import { initSimpleDicts } from '@/api/mdp/meta/item';//下拉框数据查询 |
|||
import { mapGetters } from 'vuex' |
|||
|
|||
import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';//新增界面 |
|||
import { listProjectWorkloadSetDay } from '@/api/xm/core/xmTaskWorkload'; |
|||
export default { |
|||
|
|||
components: { |
|||
XmProjectSelect, |
|||
}, |
|||
props:['xmProduct','xmProject'], |
|||
computed: { |
|||
...mapGetters([ |
|||
'userInfo','roles' |
|||
]), |
|||
dataSetCpd(){ |
|||
return [ |
|||
['日期',...this.xmProjectWorkloadSetDays.map(i=>i.bizDate)], |
|||
['登记工时',...this.xmProjectWorkloadSetDays.map(i=>i.workload)], |
|||
['待确认',...this.xmProjectWorkloadSetDays.map(i=>i.toConfirmWorkload)], |
|||
['已确认',...this.xmProjectWorkloadSetDays.map(i=>i.hadConfirmWorkload)], |
|||
['待结算',...this.xmProjectWorkloadSetDays.map(i=>i.toSetWorkload)], |
|||
['已提交审核',...this.xmProjectWorkloadSetDays.map(i=>i.hadCommitSworkload)], |
|||
['已审核',...this.xmProjectWorkloadSetDays.map(i=>i.hadAgreeSworkload)], |
|||
['已结算',...this.xmProjectWorkloadSetDays.map(i=>i.hadSetSworkload)] |
|||
] |
|||
} |
|||
|
|||
}, |
|||
watch: { |
|||
dataSetCpd(){ |
|||
this.$nextTick(()=>{ |
|||
this.drawCharts(); |
|||
}) |
|||
|
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
filters:{ |
|||
category:'', |
|||
product:null, |
|||
iteration:null, |
|||
project:null, |
|||
startBizDate:'', |
|||
endBizDate:'', |
|||
}, |
|||
dicts:{},//下拉选择框的所有静态数据 params=[{categoryId:'0001',itemCode:'sex'}] 返回结果 {'sex':[{optionValue:'1',optionName:'男',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'女',seqOrder:'2',fp:'',isDefault:'0'}]} |
|||
load:{ list: false, edit: false, del: false, add: false },//查询中... |
|||
dateRanger:[], |
|||
maxTableHeight:300, |
|||
visible:false, |
|||
xmProjectWorkloadSetDays:[], |
|||
|
|||
}//end return |
|||
},//end data |
|||
methods: { |
|||
listProjectWorkloadSetDay(){ |
|||
if(!this.filters.project){ |
|||
this.$notify({position:'bottom-left',showClose:true,message:'请先选中项目',type:'warning'}) |
|||
return; |
|||
} |
|||
|
|||
var params={projectId: this.filters.project.id,orderBy:'biz_date asc'} |
|||
if(this.filters.startBizDate && this.filters.endBizDate){ |
|||
params.startBizDate=this.filters.startBizDate; |
|||
params.endBizDate=this.filters.endBizDate; |
|||
} |
|||
listProjectWorkloadSetDay(params).then(res=>{ |
|||
this.xmProjectWorkloadSetDays=res.data.tips.isOk?res.data.data:this.xmProjectWorkloadSetDays; |
|||
}) |
|||
}, |
|||
open(params){ |
|||
this.visible=true; |
|||
this.filters.product=params.xmProduct |
|||
this.filters.project=params.xmProject |
|||
this.filters.iteration=params.xmIteration |
|||
this.xmProjectWorkloadSetDays=[] |
|||
|
|||
this.$nextTick(()=>{ |
|||
if(this.$refs['xmProjectSelect'])this.$refs['xmProjectSelect'].clearSelect(); |
|||
this.listProjectWorkloadSetDay(); |
|||
}) |
|||
|
|||
}, |
|||
drawCharts() { |
|||
this.myChart = this.$echarts.init(document.getElementById("projectWorkloadSetDayList")); |
|||
var that=this; |
|||
this.myChart.on('updateAxisPointer', function (event) { |
|||
const xAxisInfo = event.axesInfo[0]; |
|||
if (xAxisInfo) { |
|||
const dimension = xAxisInfo.value + 1; |
|||
that.myChart.setOption({ |
|||
series: { |
|||
id: 'pie', |
|||
label: { |
|||
formatter: '{b}: {@[' + dimension + ']} ({d}%)' |
|||
}, |
|||
encode: { |
|||
value: dimension, |
|||
tooltip: dimension |
|||
} |
|||
} |
|||
}); |
|||
} |
|||
}); |
|||
this.myChart.setOption({ |
|||
title: { |
|||
text: '工作项分布', |
|||
}, |
|||
tooltip: { |
|||
trigger: 'axis', |
|||
showContent: false |
|||
}, |
|||
legend: { |
|||
}, |
|||
|
|||
dataset: { |
|||
source: this.dataSetCpd |
|||
}, |
|||
xAxis: { |
|||
type: 'category', |
|||
}, |
|||
yAxis: { gridIndex: 0 }, |
|||
grid: { top: '55%' }, |
|||
series: [ |
|||
{ name:'登记工时', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ name:'待确认', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ |
|||
name:'已确认', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ |
|||
name:'无需结算', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ name:'待结算', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ name:'已提交审核', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ name:'已审核', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
|
|||
{ name:'已结算', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ |
|||
type: 'pie', |
|||
id: 'pie', |
|||
radius: '30%', |
|||
center: ['50%', '25%'], |
|||
emphasis: { |
|||
focus: 'self' |
|||
}, |
|||
label: { |
|||
formatter: '{b}: {@日期} ({d}%)' |
|||
}, |
|||
encode: { |
|||
itemName: '日期', |
|||
value: '日期', |
|||
tooltip: '日期' |
|||
} |
|||
} |
|||
] |
|||
}); |
|||
}, |
|||
|
|||
onProjectSelected(project){ |
|||
this.filters.project=project |
|||
this.xmProjectWorkloadSetDays=[]; |
|||
this.listProjectWorkloadSetDay(); |
|||
}, |
|||
|
|||
onProjectClear(){ |
|||
this.filters.project=null |
|||
|
|||
this.xmProjectWorkloadSetDays=[]; |
|||
|
|||
}, |
|||
},//end method |
|||
mounted() { |
|||
/** |
|||
initSimpleDicts('all',['planType','xmTaskSettleSchemel','taskType','priority','taskState'] ).then(res=>{ |
|||
this.dicts=res.data.data; |
|||
}) |
|||
*/ |
|||
//this.charts(); |
|||
//this.drawCharts(); |
|||
|
|||
}//end mounted |
|||
} |
|||
|
|||
</script> |
|||
|
|||
<style scoped> |
|||
.image { |
|||
width: 100%; |
|||
display: block; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,262 @@ |
|||
<template> |
|||
<section> |
|||
<el-dialog :title="(filters.project?'【'+filters.project.name+'】':'')+'结算工时按月分布趋势图'" append-to-body modal-append-to-body width="80%" top="20px" :visible.sync="visible"> |
|||
|
|||
<el-row :gutter="5"> |
|||
<el-col :span="18"> |
|||
<div> |
|||
<div class="main" id="projectWorkloadSetMonthList" style="width:100%;height:600px;margin:0 auto;"></div> |
|||
</div> |
|||
</el-col> |
|||
<el-col :span="6" class="border padding"> |
|||
<el-form :model="filters"> |
|||
<el-form-item label="归属项目" v-if="!xmProject"> |
|||
<xm-project-select v-if="!xmProject" ref="xmProjectSelect" style="display:inline;" :auto-select="false" :link-project-id="xmProject?xmProject.id:null" @row-click="onProjectSelected" @clear="onProjectClear"></xm-project-select> |
|||
</el-form-item> |
|||
<el-form-item label="日期区间"> |
|||
<br> |
|||
<date-range v-model="filters" value-format="yyyy-MM-dd" start-key="startBizDate" end-key="endBizDate"></date-range> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="primary" icon="el-icon-search" @click="listProjectWorkloadSetMonth">查询</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</el-col> |
|||
</el-row> |
|||
</el-dialog> |
|||
</section> |
|||
</template> |
|||
|
|||
<script> |
|||
import util from '@/common/js/util';//全局公共库 |
|||
import { initSimpleDicts } from '@/api/mdp/meta/item';//下拉框数据查询 |
|||
import { mapGetters } from 'vuex' |
|||
|
|||
import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';//新增界面 |
|||
import { listProjectWorkloadSetMonth } from '@/api/xm/core/xmTaskWorkload'; |
|||
export default { |
|||
|
|||
components: { |
|||
XmProjectSelect, |
|||
}, |
|||
props:['xmProduct','xmProject'], |
|||
computed: { |
|||
...mapGetters([ |
|||
'userInfo','roles' |
|||
]), |
|||
dataSetCpd(){ |
|||
return [ |
|||
['日期',...this.xmProjectWorkloadSetMonths.map(i=>i.bizMonth)], |
|||
['登记工时',...this.xmProjectWorkloadSetMonths.map(i=>i.workload)], |
|||
['待确认',...this.xmProjectWorkloadSetMonths.map(i=>i.toConfirmWorkload)], |
|||
['已确认',...this.xmProjectWorkloadSetMonths.map(i=>i.hadConfirmWorkload)], |
|||
['待结算',...this.xmProjectWorkloadSetMonths.map(i=>i.toSetWorkload)], |
|||
['已提交审核',...this.xmProjectWorkloadSetMonths.map(i=>i.hadCommitSworkload)], |
|||
['已审核',...this.xmProjectWorkloadSetMonths.map(i=>i.hadAgreeSworkload)], |
|||
['已结算',...this.xmProjectWorkloadSetMonths.map(i=>i.hadSetSworkload)] |
|||
] |
|||
} |
|||
|
|||
}, |
|||
watch: { |
|||
dataSetCpd(){ |
|||
this.$nextTick(()=>{ |
|||
this.drawCharts(); |
|||
}) |
|||
|
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
filters:{ |
|||
category:'', |
|||
product:null, |
|||
iteration:null, |
|||
project:null, |
|||
startBizDate:'', |
|||
endBizDate:'', |
|||
}, |
|||
dicts:{},//下拉选择框的所有静态数据 params=[{categoryId:'0001',itemCode:'sex'}] 返回结果 {'sex':[{optionValue:'1',optionName:'男',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'女',seqOrder:'2',fp:'',isDefault:'0'}]} |
|||
load:{ list: false, edit: false, del: false, add: false },//查询中... |
|||
dateRanger:[], |
|||
maxTableHeight:300, |
|||
visible:false, |
|||
xmProjectWorkloadSetMonths:[], |
|||
|
|||
}//end return |
|||
},//end data |
|||
methods: { |
|||
listProjectWorkloadSetMonth(){ |
|||
if(!this.filters.project){ |
|||
this.$notify({position:'bottom-left',showClose:true,message:'请先选中项目',type:'warning'}) |
|||
return; |
|||
} |
|||
|
|||
var params={projectId: this.filters.project.id} |
|||
if(this.filters.startBizDate && this.filters.endBizDate){ |
|||
params.startBizDate=this.filters.startBizDate; |
|||
params.endBizDate=this.filters.endBizDate; |
|||
} |
|||
listProjectWorkloadSetMonth(params).then(res=>{ |
|||
this.xmProjectWorkloadSetMonths=res.data.tips.isOk?res.data.data:this.xmProjectWorkloadSetMonths; |
|||
}) |
|||
}, |
|||
open(params){ |
|||
this.visible=true; |
|||
this.filters.product=params.xmProduct |
|||
this.filters.project=params.xmProject |
|||
this.filters.iteration=params.xmIteration |
|||
this.xmProjectWorkloadSetMonths=[] |
|||
|
|||
this.$nextTick(()=>{ |
|||
if(this.$refs['xmProjectSelect'])this.$refs['xmProjectSelect'].clearSelect(); |
|||
this.listProjectWorkloadSetMonth(); |
|||
}) |
|||
|
|||
}, |
|||
drawCharts() { |
|||
this.myChart = this.$echarts.init(document.getElementById("projectWorkloadSetMonthList")); |
|||
var that=this; |
|||
this.myChart.on('updateAxisPointer', function (event) { |
|||
const xAxisInfo = event.axesInfo[0]; |
|||
if (xAxisInfo) { |
|||
const dimension = xAxisInfo.value + 1; |
|||
that.myChart.setOption({ |
|||
series: { |
|||
id: 'pie', |
|||
label: { |
|||
formatter: '{b}: {@[' + dimension + ']} ({d}%)' |
|||
}, |
|||
encode: { |
|||
value: dimension, |
|||
tooltip: dimension |
|||
} |
|||
} |
|||
}); |
|||
} |
|||
}); |
|||
this.myChart.setOption({ |
|||
title: { |
|||
text: '工作项分布', |
|||
}, |
|||
tooltip: { |
|||
trigger: 'axis', |
|||
showContent: false |
|||
}, |
|||
legend: { |
|||
}, |
|||
|
|||
dataset: { |
|||
source: this.dataSetCpd |
|||
}, |
|||
xAxis: { |
|||
type: 'category', |
|||
}, |
|||
yAxis: { gridIndex: 0 }, |
|||
grid: { top: '55%' }, |
|||
series: [ |
|||
{ name:'登记工时', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ name:'待确认', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ |
|||
name:'已确认', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ |
|||
name:'无需结算', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ name:'待结算', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ name:'已提交审核', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ name:'已审核', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
|
|||
{ name:'已结算', |
|||
type: 'line', |
|||
seriesLayoutBy: 'row', |
|||
smooth:true, |
|||
emphasis: { focus: 'series' }, |
|||
}, |
|||
{ |
|||
type: 'pie', |
|||
id: 'pie', |
|||
radius: '30%', |
|||
center: ['50%', '25%'], |
|||
emphasis: { |
|||
focus: 'self' |
|||
}, |
|||
label: { |
|||
formatter: '{b}: {@日期} ({d}%)' |
|||
}, |
|||
encode: { |
|||
itemName: '日期', |
|||
value: '日期', |
|||
tooltip: '日期' |
|||
} |
|||
} |
|||
] |
|||
}); |
|||
}, |
|||
|
|||
onProjectSelected(project){ |
|||
this.filters.project=project |
|||
this.xmProjectWorkloadSetMonths=[]; |
|||
this.listProjectWorkloadSetMonth(); |
|||
}, |
|||
|
|||
onProjectClear(){ |
|||
this.filters.project=null |
|||
|
|||
this.xmProjectWorkloadSetMonths=[]; |
|||
|
|||
}, |
|||
},//end method |
|||
mounted() { |
|||
/** |
|||
initSimpleDicts('all',['planType','xmTaskSettleSchemel','taskType','priority','taskState'] ).then(res=>{ |
|||
this.dicts=res.data.data; |
|||
}) |
|||
*/ |
|||
//this.charts(); |
|||
//this.drawCharts(); |
|||
|
|||
}//end mounted |
|||
} |
|||
|
|||
</script> |
|||
|
|||
<style scoped> |
|||
.image { |
|||
width: 100%; |
|||
display: block; |
|||
} |
|||
</style> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue