Browse Source

优化

master
陈裕财 4 years ago
parent
commit
be7b21ffd9
  1. 5
      src/api/xm/core/xmTaskWorkload.js
  2. 262
      src/views/xm/rpt/project/projectWorkloadSetDayList.vue
  3. 262
      src/views/xm/rpt/project/projectWorkloadSetMonthList.vue
  4. 12
      src/views/xm/rpt/reportIndex.vue

5
src/api/xm/core/xmTaskWorkload.js

@ -35,3 +35,8 @@ export const listByProject = params => { return axios.get(`${base}/xm/core/xmTas
export const editWorkloadToSbill = params => { return axios.post(`${base}/xm/core/xmTaskWorkload/editWorkloadToSbill`, params); }; export const editWorkloadToSbill = params => { return axios.post(`${base}/xm/core/xmTaskWorkload/editWorkloadToSbill`, params); };
export const editXmTaskWorkloadSomeFields = params => { return axios.post(`${base}/xm/core/xmTaskWorkload/editSomeFields`, params); }; export const editXmTaskWorkloadSomeFields = params => { return axios.post(`${base}/xm/core/xmTaskWorkload/editSomeFields`, params); };
export const listProjectWorkloadSetDay = params => { return axios.get(`${base}/xm/core/xmTaskWorkload/listProjectWorkloadSetDay`, { params: params }); };
export const listProjectWorkloadSetMonth = params => { return axios.get(`${base}/xm/core/xmTaskWorkload/listProjectWorkloadSetMonth`, { params: params }); };

262
src/views/xm/rpt/project/projectWorkloadSetDayList.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>

262
src/views/xm/rpt/project/projectWorkloadSetMonthList.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="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>

12
src/views/xm/rpt/reportIndex.vue

@ -35,6 +35,9 @@
<xm-task-age-dist ref="xmTaskAgeDist"></xm-task-age-dist> <xm-task-age-dist ref="xmTaskAgeDist"></xm-task-age-dist>
<xm-task-sort ref="xmTaskSort"></xm-task-sort> <xm-task-sort ref="xmTaskSort"></xm-task-sort>
<xm-project-work-item-day-list ref="xmProjectWorkItemDayList"></xm-project-work-item-day-list> <xm-project-work-item-day-list ref="xmProjectWorkItemDayList"></xm-project-work-item-day-list>
<xm-project-workload-set-day-list ref="xmProjectWorkloadSetDayList"></xm-project-workload-set-day-list>
<xm-project-workload-set-month-list ref="xmProjectWorkloadSetMonthList"></xm-project-workload-set-month-list>
<xm-question-day-trend ref="xmQuestionDayTrend"></xm-question-day-trend> <xm-question-day-trend ref="xmQuestionDayTrend"></xm-question-day-trend>
<xm-question-day-accumulate ref="xmQuestionDayAccumulate"></xm-question-day-accumulate> <xm-question-day-accumulate ref="xmQuestionDayAccumulate"></xm-question-day-accumulate>
@ -64,6 +67,8 @@
import xmTaskAgeDist from './project/taskAgeDist' import xmTaskAgeDist from './project/taskAgeDist'
import xmTaskSort from './project/taskSort' import xmTaskSort from './project/taskSort'
import xmProjectWorkItemDayList from './project/projectWorkItemDayList' import xmProjectWorkItemDayList from './project/projectWorkItemDayList'
import xmProjectWorkloadSetDayList from './project/projectWorkloadSetDayList'
import xmProjectWorkloadSetMonthList from './project/projectWorkloadSetMonthList'
import xmQuestionDayTrend from './product/questionDayTrend' import xmQuestionDayTrend from './product/questionDayTrend'
import xmQuestionDayAccumulate from './product/questionDayAccumulate' import xmQuestionDayAccumulate from './product/questionDayAccumulate'
@ -81,7 +86,7 @@
export default { export default {
components: { components: {
xmIterationBurnout,xmMenuDayTrend,xmMenuDayAccumulate,xmMenuAttDist,xmMenuAgeDist,xmMenuSort,xmProductWorkItemDayList,xmTaskDayTrend,xmTaskDayAccumulate,xmTaskAttDist,xmTaskAgeDist,xmTaskSort,xmProjectWorkItemDayList,xmQuestionDayTrend,xmQuestionDayAccumulate,xmQuestionAttDist,xmQuestionAgeDist,xmQuestionSort,
xmIterationBurnout,xmMenuDayTrend,xmMenuDayAccumulate,xmMenuAttDist,xmMenuAgeDist,xmMenuSort,xmProductWorkItemDayList,xmTaskDayTrend,xmTaskDayAccumulate,xmTaskAttDist,xmTaskAgeDist,xmTaskSort,xmProjectWorkItemDayList,xmProjectWorkloadSetDayList,xmProjectWorkloadSetMonthList,xmQuestionDayTrend,xmQuestionDayAccumulate,xmQuestionAttDist,xmQuestionAgeDist,xmQuestionSort,
}, },
props:['xmProduct','xmIteration','xmProject'], props:['xmProduct','xmIteration','xmProject'],
computed: { computed: {
@ -137,7 +142,10 @@
{rptName:'任务属性分布',category:'项目级',ref:'xmTaskAttDist',desc:'统计所有任务任意属性数量分布情况(实时数据)',img:pieSimple }, {rptName:'任务属性分布',category:'项目级',ref:'xmTaskAttDist',desc:'统计所有任务任意属性数量分布情况(实时数据)',img:pieSimple },
{rptName:'任务年龄分布',category:'项目级',ref:'xmTaskAgeDist',desc:'统计所有任务年龄分布情况(实时数据)',img:pieSimple }, {rptName:'任务年龄分布',category:'项目级',ref:'xmTaskAgeDist',desc:'统计所有任务年龄分布情况(实时数据)',img:pieSimple },
{rptName:'任务排行榜',category:'项目级',ref:'xmTaskSort',desc:'任务提出人、负责人的用户故事数量排行(实时数据)',img:bar }, {rptName:'任务排行榜',category:'项目级',ref:'xmTaskSort',desc:'任务提出人、负责人的用户故事数量排行(实时数据)',img:bar },
{rptName:'项目工作项每日趋势',category:'项目级',ref:'xmProjectWorkItemDayList',desc:'统计产品每日工作项数量分布情况',img:datasetLink },
{rptName:'项目工作项每日趋势',category:'项目级',ref:'xmProjectWorkItemDayList',desc:'统计项目每日工作项数量分布情况',img:datasetLink },
{rptName:'项目结算工时每日趋势',category:'项目级',ref:'xmProjectWorkloadSetDayList',desc:'统计项目每日登记工时、结算工时数量分布情况',img:datasetLink },
{rptName:'项目结算工时每月趋势',category:'项目级',ref:'xmProjectWorkloadSetMonthList',desc:'统计项目每月登记工时、结算工时数量分布情况',img:datasetLink },
{rptName:'缺陷每日趋势',category:'产品级',ref:'xmQuestionDayTrend',desc:'跟踪新提出、执行中、已解决、已关闭状态的缺陷数量按日期变化趋势,识别缺陷处理工作情况',img:lineStack }, {rptName:'缺陷每日趋势',category:'产品级',ref:'xmQuestionDayTrend',desc:'跟踪新提出、执行中、已解决、已关闭状态的缺陷数量按日期变化趋势,识别缺陷处理工作情况',img:lineStack },
{rptName:'缺陷每日累积',category:'产品级',ref:'xmQuestionDayAccumulate',desc:'跟踪新提出、执行中、已解决、已关闭状态的缺陷数量按日期累积情况,识别缺陷处理工作的瓶颈',img:areaStack }, {rptName:'缺陷每日累积',category:'产品级',ref:'xmQuestionDayAccumulate',desc:'跟踪新提出、执行中、已解决、已关闭状态的缺陷数量按日期累积情况,识别缺陷处理工作的瓶颈',img:areaStack },

Loading…
Cancel
Save