陈裕财 5 years ago
parent
commit
853b11d5fe
  1. 81
      src/views/xm/core/xmProject/XmProjectOverview.vue
  2. 128
      src/views/xm/core/xmProject/XmProjectOverviewComplex.vue

81
src/views/xm/core/xmProject/XmProjectOverview.vue

@ -75,7 +75,7 @@
<i class="el-icon-star-off"></i>
</div>
<div class="info">
<div class="title"> 需求数 {{this.xmProjectState.menuCnt}}</div>
<div class="title"> 需求数 {{this.selProject.menuCnt}}</div>
</div>
</div>
</el-row>
@ -85,7 +85,7 @@
<i class="el-icon-refresh"></i>
</div>
<div class="info">
<div class="title"> 迭代数 {{(this.xmProjectState.iterationCnt==null?0:this.xmProjectState.iterationCnt)}} </div>
<div class="title"> 迭代数 {{(this.selProject.iterationCnt==null?0:this.selProject.iterationCnt)}} </div>
</div>
</div>
</el-row>
@ -120,7 +120,7 @@
<span>缺陷情况</span>
</div>
<div>
<div id="bugPieChart" :style="{width: '440px', height: '400px'}"></div>
<div id="bugPieChart" :style="{width: '425px', height: '400px'}"></div>
</div>
</el-card>
</el-col>
@ -147,7 +147,7 @@
<el-col :span="8">
<div>
<div style="text-align:center;">
<span style="font-size:24px;" v-text="this.xmProjectState.totalPlanWorkload"></span>
<span style="font-size:24px;" v-text="this.selProject.totalPlanWorkload"></span>
<span style="font-size:5px;">h</span>
</div>
<div style="text-align:center;font-size:5px;">预估工时</div>
@ -156,7 +156,7 @@
<el-col :span="8">
<div>
<div style="text-align:center;">
<span style="font-size:24px;" v-text="this.xmProjectState.totalActWorkload"></span>
<span style="font-size:24px;" v-text="this.selProject.totalActWorkload"></span>
<span style="font-size:5px;">h</span>
</div>
<div style="text-align:center;font-size:5px;">登记工时</div>
@ -244,24 +244,22 @@
import util from "@/common/js/util"; //
//import Sticky from "@/components/Sticky"; // header
import { mapGetters } from "vuex";
import { listXmProjectState } from '@/api/xm/core/xmProjectState';
import { listOption } from '@/api/mdp/meta/itemOption';//
export default {
computed: {
...mapGetters(["userInfo"]),
finish: function (){
return this.xmProjectState.totalCompleteTaskCnt;
return this.selProject.totalCompleteTaskCnt;
},
notStart: function() {
return this.xmProjectState.totalTaskCnt-this.xmProjectState.totalCompleteTaskCnt;
return this.selProject.totalTaskCnt-this.selProject.totalCompleteTaskCnt;
},
totalTask: function() {
return this.xmProjectState.totalTaskCnt;
return this.selProject.totalTaskCnt;
},
progress1: function (){
return Math.round(this.xmProjectState.totalCompleteTaskCnt/this.xmProjectState.totalTaskCnt*100);
return Math.round(this.selProject.totalCompleteTaskCnt/this.selProject.totalTaskCnt*100);
},
taskStartTime: function (){
return this.selProject.startTime.substring(0,10);
@ -273,7 +271,7 @@ export default {
return this.selProject.createUsername;
},
workloadProgress:function (){
return Math.round(this.xmProjectState.totalActWorkload/this.xmProjectState.totalPlanWorkload*100);
return Math.round(this.selProject.totalActWorkload/this.selProject.totalPlanWorkload*100);
},
deviation:function (){
let now = new Date();
@ -281,16 +279,16 @@ export default {
let taskEndTime = new Date(this.selProject.endTime);
if(now<=taskEndTime){
let allDays=taskEndTime-taskStartTime;
return this.xmProjectState.totalActWorkload - Math.round((now-taskStartTime)/allDays*this.xmProjectState.totalPlanWorkload)
return this.selProject.totalActWorkload - Math.round((now-taskStartTime)/allDays*this.selProject.totalPlanWorkload)
}else{
return this.xmProjectState.totalActWorkload - this.xmProjectState.totalPlanWorkload;
return this.selProject.totalActWorkload - this.selProject.totalPlanWorkload;
}
},
deviationRate:function (){
return Math.round(this.deviation/this.xmProjectState.totalPlanWorkload*100);
return Math.round(this.deviation/this.selProject.totalPlanWorkload*100);
},
remainWorkload:function (){
return this.xmProjectState.totalPlanWorkload - this.xmProjectState.totalActWorkload;
return this.selProject.totalPlanWorkload - this.selProject.totalActWorkload;
},
planProgress:function (){
let now = new Date();
@ -304,14 +302,14 @@ export default {
}
},
realProgress:function (){
if(this.xmProjectState.totalActWorkload < this.xmProjectState.totalPlanWorkload){
return Math.round(this.xmProjectState.totalActWorkload/this.xmProjectState.totalPlanWorkload*100)
if(this.selProject.totalActWorkload < this.selProject.totalPlanWorkload){
return Math.round(this.selProject.totalActWorkload/this.selProject.totalPlanWorkload*100)
}else{
return 100;
}
},
xmProjectStateCpd(){
return this.xmProjectState
return this.selProject
},
calcProjectStatusStep(){
if(this.options['projectStatus'] && this.selProject){
@ -342,7 +340,8 @@ export default {
return {
isActive: true,
load:{ list: false},
xmProjectState: [],//
selProject:[],
//xmProjectState: [],//
options:{
projectType:[],
urgencyLevel:[],
@ -354,7 +353,7 @@ export default {
methods:{
//xmProjectsTate
getXmProjectState(){
/*getXmProjectState(){
let params = {
projectId:this.selProject.id,
branchId:this.userInfo.branchId
@ -369,7 +368,7 @@ export default {
}
this.load.list = false;
}).catch( err => this.load.list = false );
},
},*/
drawAllBar() {
// domecharts
@ -398,7 +397,7 @@ export default {
{
data: [
{
value: this.xmProjectState.menuCnt,
value: this.selProject.menuCnt,
itemStyle: {
normal:{
color: '#99CCFF'
@ -406,7 +405,7 @@ export default {
}
},
{
value: this.xmProjectState.totalTaskCnt,
value: this.selProject.totalTaskCnt,
itemStyle: {
normal:{
color: '#99CCFF'
@ -414,7 +413,7 @@ export default {
}
},
{
value: this.xmProjectState.totalBugCnt,
value: this.selProject.totalBugCnt,
itemStyle: {
normal:{
color: '#99CCFF'
@ -511,32 +510,46 @@ export default {
},
series: [
{
center:['55%','40%'],
center:['55%','40%'],//
type: 'pie',
radius: '68%',
radius: '68%',//
label:{ //
normal:{
show:true,
position:'inner', //:
textStyle : {
fontWeight : 120 ,
fontSize: document.body.clientWidth / 150, //
color: "#000000"
},
formatter:'{b} : {c} ({d}%)',//bname,c:value,d:
alignTo:'edge',
margin:10
}
},
data: [
{value: this.xmProjectState.totalClosedBugCnt,
{value: this.selProject.totalClosedBugCnt,
itemStyle: {
normal:{
color: '#5470C6'
}
},
name: '已关闭'},
{value: this.xmProjectState.totalResolvedBugCnt,
{value: this.selProject.totalResolvedBugCnt,
itemStyle: {
normal:{
color: '#91CC75'
}
},
name: '已解决'},
{value: this.xmProjectState.totalActiveBugCnt,
{value: this.selProject.totalActiveBugCnt,
itemStyle: {
normal:{
color: '#FAC858'
}
},
name: '已激活'},
{value: this.xmProjectState.totalConfirmedBugCnt,
{value: this.selProject.totalConfirmedBugCnt,
itemStyle: {
normal:{
color: '#EE6666'
@ -562,17 +575,19 @@ export default {
mounted() {
this.$nextTick(() => {
this.getXmProjectState();
//this.getXmProjectState();
});
listOption([{categoryId:'all',itemCode:'projectType'},{categoryId:'all',itemCode:'urgencyLevel'},{categoryId:'all',itemCode:'priority'},{categoryId:'all',itemCode:'projectStatus'}] ).then(res=>{
if(res.data.tips.isOk){
this.options['projectType']=res.data.data.projectType
this.options['urgencyLevel']=res.data.data.urgencyLevel
this.options['priority']=res.data.data.priority
this.options['projectStatus']=res.data.data.projectStatus
}
});
this.drawAllBar();
this.drawTaskByDate();
this.drawPieBug();
},

128
src/views/xm/core/xmProject/XmProjectOverviewComplex.vue

@ -1,87 +1,87 @@
<template>
<section class="page-container page-height-90 padding-left padding-right">
<el-menu mode="horizontal" default-active="overiew" @select="onMenuToolBarSelect">
<el-menu-item index="overiew">
<section class="page-container page-height-90 padding-left padding-right">
<el-menu mode="horizontal" default-active="overview" @select="onMenuToolBarSelect">
<el-menu-item index="overview">
<span slot="title">项目概览</span>
</el-menu-item>
<el-menu-item index="detail">
<el-menu-item index="detail">
<span slot="title">项目详情</span>
</el-menu-item>
<el-submenu index="project-change">
<template slot="title">
<template slot="title">
<span slot="title">项目变更</span>
</template>
</template>
<el-menu-item index="project-change-base-info">
<span slot="title">基础信息修改</span>
</el-menu-item>
<el-menu-item index="project-change-start">
<span slot="title">立项申请</span>
<span slot="title">基础信息修改</span>
</el-menu-item>
<el-menu-item index="project-change-budget">
<span slot="title">预算+-</span>
<el-menu-item index="project-change-start">
<span slot="title">立项申请</span>
</el-menu-item>
<el-menu-item index="project-change-cost">
<span slot="title">成本+-</span>
<el-menu-item index="project-change-budget">
<span slot="title">预算+-</span>
</el-menu-item>
<el-menu-item index="project-change-collection">
<span slot="title">收款</span>
<el-menu-item index="project-change-cost">
<span slot="title">成本+-</span>
</el-menu-item>
<el-menu-item index="project-change-conclusion">
<span slot="title">结项申请</span>
<el-menu-item index="project-change-collection">
<span slot="title">收款</span>
</el-menu-item>
<el-menu-item index="project-change-suspend">
<span slot="title">暂停申请</span>
<el-menu-item index="project-change-conclusion">
<span slot="title">结项申请</span>
</el-menu-item>
<el-menu-item index="project-change-activation">
<span slot="title">激活申请</span>
<el-menu-item index="project-change-suspend">
<span slot="title">暂停申请</span>
</el-menu-item>
<el-menu-item index="project-change-to-after-sales">
<el-menu-item index="project-change-activation">
<span slot="title">激活申请</span>
</el-menu-item>
<el-menu-item index="project-change-to-after-sales">
<span slot="title">转售后申请</span>
</el-menu-item>
<el-menu-item index="project-change-new-pm">
</el-menu-item>
<el-menu-item index="project-change-new-pm">
<span slot="title">项目经理变更申请</span>
</el-menu-item>
<el-menu-item index="project-change-new-leader">
</el-menu-item>
<el-menu-item index="project-change-new-leader">
<span slot="title">组长变更申请</span>
</el-menu-item>
</el-submenu>
</el-menu-item>
</el-submenu>
<el-submenu index="menu-change">
<template slot="title">
<template slot="title">
<span slot="title">需求变更</span>
</template>
</template>
<el-menu-item index="menu-change-review">
<span slot="title">需求评审</span>
</el-menu-item>
<el-menu-item index="menu-change-border-review">
<span slot="title">需求边界异动</span>
</el-menu-item>
</el-submenu>
<span slot="title">需求评审</span>
</el-menu-item>
<el-menu-item index="menu-change-border-review">
<span slot="title">需求边界异动</span>
</el-menu-item>
</el-submenu>
<el-submenu index="iteration-change">
<template slot="title">
<template slot="title">
<span slot="title">迭代变更</span>
</template>
</template>
<el-menu-item index="iteration-change-review">
<span slot="title">迭代计划评审</span>
</el-menu-item>
<el-menu-item index="iteration-change-border-review">
<span slot="title">迭代上线申请</span>
</el-menu-item>
</el-submenu>
<span slot="title">迭代计划评审</span>
</el-menu-item>
<el-menu-item index="iteration-change-border-review">
<span slot="title">迭代上线申请</span>
</el-menu-item>
</el-submenu>
<el-submenu index="phase-change">
<template slot="title">
<template slot="title">
<span slot="title">阶段计划变更</span>
</template>
</template>
<el-menu-item index="phase-change-review">
<span slot="title">计划评审</span>
</el-menu-item>
<el-menu-item index="phase-change-border-review">
<span slot="title">预算变更</span>
</el-menu-item>
</el-submenu>
</el-menu>
<xm-project-overview v-if="showPanelName=='overiew'" :sel-project="selProject"></xm-project-overview>
<span slot="title">计划评审</span>
</el-menu-item>
<el-menu-item index="phase-change-border-review">
<span slot="title">预算变更</span>
</el-menu-item>
</el-submenu>
</el-menu>
<xm-project-overview v-if="showPanelName=='overview'" :sel-project="selProject"></xm-project-overview>
<xm-project-detail v-if="showPanelName=='detail'" :sel-project="selProject"></xm-project-detail>
</section>
</template>
@ -98,27 +98,27 @@ import XmProjectDetail from './XmProjectDetail.vue';
export default {
components: { XmProjectOverview, XmProjectDetail },
computed: {
...mapGetters(["userInfo"]),
...mapGetters(["userInfo"]),
},
props:['selProject'],
watch:{
watch:{
},
data() {
return {
showPanelName:'overiew'
return {
showPanelName:'overview'
};
},
methods:{
onMenuToolBarSelect(menuIndex){
this.showPanelName=menuIndex;
}
},
mounted() {
this.$nextTick(() => {
this.$nextTick(() => {
});
},
@ -126,5 +126,5 @@ export default {
</script>
<style scoped lang="scss">
</style>
Loading…
Cancel
Save