From cd20c597a1c734a906d10886645488b73cc5000d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Mon, 19 Jul 2021 02:23:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A1=B9=E7=9B=AE=E8=AF=95?= =?UTF-8?q?=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/routes_xm.js | 28 +- ...x.vue => XmIterationForProjectComplex.vue} | 19 +- .../xm/core/xmIteration/XmIterationInfo.vue | 444 ++++++++ .../core/xmIteration/XmIterationInfoRoute.vue | 61 + src/views/xm/core/xmMenu/XmMenuMng.vue | 6 +- ...lex.vue => XmProductForProjectComplex.vue} | 0 src/views/xm/core/xmProduct/XmProductInfo.vue | 445 ++++++++ .../xm/core/xmProduct/XmProductInfoRoute.vue | 61 + src/views/xm/core/xmProduct/XmProductMng.vue | 158 ++- .../xm/core/xmProduct/XmProductOverview.vue | 1010 +++++++++++------ .../xmProduct/XmProductOverviewComplex.vue | 130 +++ .../xm/core/xmProject/XmProjectForLink.vue | 65 +- src/views/xm/core/xmProject/XmProjectInfo.vue | 14 +- src/views/xm/core/xmTask/XmTaskMng.vue | 2 +- 14 files changed, 2090 insertions(+), 353 deletions(-) rename src/views/xm/core/xmIteration/{XmIterationComplex.vue => XmIterationForProjectComplex.vue} (83%) create mode 100644 src/views/xm/core/xmIteration/XmIterationInfo.vue create mode 100644 src/views/xm/core/xmIteration/XmIterationInfoRoute.vue rename src/views/xm/core/xmProduct/{XmProductComplex.vue => XmProductForProjectComplex.vue} (100%) create mode 100644 src/views/xm/core/xmProduct/XmProductInfo.vue create mode 100644 src/views/xm/core/xmProduct/XmProductInfoRoute.vue create mode 100644 src/views/xm/core/xmProduct/XmProductOverviewComplex.vue diff --git a/src/router/routes_xm.js b/src/router/routes_xm.js index bd1037ec..0babb3fa 100644 --- a/src/router/routes_xm.js +++ b/src/router/routes_xm.js @@ -77,6 +77,17 @@ export default { ] }, + { + path: '/xm/core/xmProduct/XmProductInfoRoute', + component: _import('xm/core/xmProduct/XmProductInfoRoute'), + name: 'XmProductInfoRoute', + iconCls: 'fa el-icon-menu', + meta: { + title: '产品管理', + icon: 'project', + hidden:true + }, + }, { path: '/xm/core', component: Layout, @@ -89,13 +100,23 @@ export default { // leaf: true,//只有一个节点 children: [ - { path: 'xmProduct/XmProductComplex', component: _import('xm/core/xmProduct/XmProductComplex'), name: 'XmProductComplex', meta: { title: '产品总览' }}, - { path: 'xmProduct/XmProductMng', component: _import('xm/core/xmProduct/XmProductMng'), name: 'XmProductMng', meta: { title: '产品管理' }}, + { path: 'xmProduct/XmProductMng', component: _import('xm/core/xmProduct/XmProductMng'), name: 'XmProductMng', meta: { title: '产品管理' }}, { path: 'xmMenu/XmMenuMng', component: _import('xm/core/xmMenu/XmMenuMng'), name: 'XmMenuMng', meta: { title: '故事管理' }}, { path: 'xmMenuExchange/XmMenuExchangeMng', component: _import('xm/core/xmMenuExchange/XmMenuExchangeMng'), name: 'XmMenuExchangeMng', meta: { title: '互动评论' }}, { path: 'xmMenuTemplate/XmMenuTemplateMng', component: _import('xm/core/xmMenuTemplate/XmMenuTemplateMng'), name: 'XmMenuTemplateMng', meta: { title: '故事模板' }}, ] + },, + { + path: '/xm/core/xmIteration/XmIterationInfoRoute', + component: _import('xm/core/xmIteration/XmIterationInfoRoute'), + name: 'XmIterationInfoRoute', + iconCls: 'fa el-icon-menu', + meta: { + title: '迭代管理', + icon: 'project', + hidden:true + }, }, { path: '/xm/core', @@ -108,8 +129,7 @@ export default { }, // leaf: true,//只有一个节点 children: [ - { path: 'xmIteration/XmIterationComplex', component: _import('xm/core/xmIteration/XmIterationComplex'), name: 'XmIterationComplex', meta: { title: '迭代总览' }}, - { path: 'xmIteration/XmIterationMng', component: _import('xm/core/xmIteration/XmIterationMng'), name: 'XmIterationMng', meta: { title: '迭代管理' }}, + { path: 'xmIteration/XmIterationMng', component: _import('xm/core/xmIteration/XmIterationMng'), name: 'XmIterationMng', meta: { title: '迭代管理' }}, { path: 'xmIterationMenu/XmIterationMenuMng', component: _import('xm/core/xmIterationMenu/XmIterationMenuMng'), name: 'XmIterationMenuMng', meta: { title: '故事迭代' }}, ] } diff --git a/src/views/xm/core/xmIteration/XmIterationComplex.vue b/src/views/xm/core/xmIteration/XmIterationForProjectComplex.vue similarity index 83% rename from src/views/xm/core/xmIteration/XmIterationComplex.vue rename to src/views/xm/core/xmIteration/XmIterationForProjectComplex.vue index 7db348bf..57de3866 100644 --- a/src/views/xm/core/xmIteration/XmIterationComplex.vue +++ b/src/views/xm/core/xmIteration/XmIterationForProjectComplex.vue @@ -12,17 +12,20 @@ 迭代概览 - - + + + + + - + - + - + @@ -45,6 +48,7 @@ import XmIterationStateShow from '../xmIterationState/XmIterationStateShow.vue' import { mapGetters } from 'vuex' import XmProductMng from '../xmProduct/XmProductMng.vue'; +import XmProjectForLink from '../xmProject/XmProjectForLink.vue'; import XmTaskMng from '../xmTask/XmTaskMng.vue'; import XmQuestionMng from '../xmQuestion/XmQuestionMng.vue'; @@ -55,7 +59,7 @@ import XmQuestionMng from '../xmQuestion/XmQuestionMng.vue'; 'userInfo','roles' ]), }, - props:['visible','selProject'], + props:['visible','selProject','xmProduct'], watch:{ visible:function(visible){ if(visible==true){ @@ -143,7 +147,8 @@ import XmQuestionMng from '../xmQuestion/XmQuestionMng.vue'; XmIterationStateShow, XmProductMng, XmTaskMng, - XmQuestionMng + XmQuestionMng, + XmProjectForLink, }, mounted() { this.$nextTick(() => { diff --git a/src/views/xm/core/xmIteration/XmIterationInfo.vue b/src/views/xm/core/xmIteration/XmIterationInfo.vue new file mode 100644 index 00000000..12ba0dce --- /dev/null +++ b/src/views/xm/core/xmIteration/XmIterationInfo.vue @@ -0,0 +1,444 @@ + + + + + diff --git a/src/views/xm/core/xmIteration/XmIterationInfoRoute.vue b/src/views/xm/core/xmIteration/XmIterationInfoRoute.vue new file mode 100644 index 00000000..2b790321 --- /dev/null +++ b/src/views/xm/core/xmIteration/XmIterationInfoRoute.vue @@ -0,0 +1,61 @@ + + + + + \ No newline at end of file diff --git a/src/views/xm/core/xmMenu/XmMenuMng.vue b/src/views/xm/core/xmMenu/XmMenuMng.vue index 03d40451..c154ea10 100644 --- a/src/views/xm/core/xmMenu/XmMenuMng.vue +++ b/src/views/xm/core/xmMenu/XmMenuMng.vue @@ -27,8 +27,8 @@ - 故事 - 修改 + 故事 + 修改 描述 - + +
+ + + + + + + + {{xmProduct.productName.substring(0,10)}} + {{xmProduct.productName}} + 概览 + + + + 迭代 + + + + 项目 + + + 故事 + + + + + 任务 + + + + + 缺陷 + + + + + 团队 + + + 文档 + + + + + 阶段计划及里程碑 + + + 测试计划 + + + + + 项目监控 + + + 故事监控 + + + + 合同管理 + + + 预算 + + + + + 费用 + + + + + 考核 + + + + + 日志 + + + + + 环境清单 + + + + 风险 + + + + + 故事监控 + + + 项目监控 + + + 预算 + + + + + 费用 + + + + + 考核 + + + + + 日志 + + + + + 合同管理 + + + + + 环境清单 + + + + 风险 + + + 论坛 + + + 即聊 + + + 客服 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + diff --git a/src/views/xm/core/xmProduct/XmProductInfoRoute.vue b/src/views/xm/core/xmProduct/XmProductInfoRoute.vue new file mode 100644 index 00000000..72cd1ee6 --- /dev/null +++ b/src/views/xm/core/xmProduct/XmProductInfoRoute.vue @@ -0,0 +1,61 @@ + + + + + \ No newline at end of file diff --git a/src/views/xm/core/xmProduct/XmProductMng.vue b/src/views/xm/core/xmProduct/XmProductMng.vue index 8653e1f6..df96fd93 100644 --- a/src/views/xm/core/xmProduct/XmProductMng.vue +++ b/src/views/xm/core/xmProduct/XmProductMng.vue @@ -8,6 +8,7 @@ + - 产品 + 将更多产品加入迭代{{xmIteration.iterationName}} + 产品 查询条件 @@ -104,6 +106,42 @@
+ + + + + +
{{p.productName}}
+
{{p.code}}
+
+
+ {{p.totalBugCnt==null?0:p.totalBugCnt}} + 缺陷 +
+
+ {{p.totalFileCnt==null?0:p.totalFileCnt}} + 文档 +
+
+ + {{p.totalCompleteTaskCnt==null?0:p.totalCompleteTaskCnt}} + / + {{p.totalTaskCnt==null?0:p.totalTaskCnt}} + + 任务完成 +
+
+
+ +
+ +
+
+
+
@@ -273,6 +311,7 @@ import XmProductSelect from './XmProductSelect.vue'; pickerOptions: util.pickerOptions('datarange'), projectVisible:false, productSelectVisible:false, + showType:true, /**begin 自定义属性请在下面加 请加备注**/ /**end 自定义属性请在上面加 请加备注**/ @@ -411,6 +450,13 @@ import XmProductSelect from './XmProductSelect.vue'; this.editFormVisible=false; this.getXmProducts() }, + + //进入info界面 + intoInfo(row) { + this.editForm = row; + this.$router.push({ name:'XmProductInfoRoute', params: row }) + //this.showInfo = true; + }, //选择行xmProduct selsChange: function (sels) { this.sels = sels; @@ -504,6 +550,9 @@ import XmProductSelect from './XmProductSelect.vue'; }, onProjectSelected(projects){ + }, + onXmIterationSelect(){ + }, /**end 自定义函数请在上面加**/ onXmProductSelect:function(row){ @@ -547,7 +596,7 @@ import XmProductSelect from './XmProductSelect.vue'; UsersSelect, XmProjectList, XmIterationSelect, -XmProductSelect, + XmProductSelect, //在下面添加其它组件 }, mounted() { @@ -574,4 +623,107 @@ XmProductSelect, .align-right{ float: right; } + + + \ No newline at end of file diff --git a/src/views/xm/core/xmProduct/XmProductOverview.vue b/src/views/xm/core/xmProduct/XmProductOverview.vue index e369c2f5..4eaf08ad 100644 --- a/src/views/xm/core/xmProduct/XmProductOverview.vue +++ b/src/views/xm/core/xmProduct/XmProductOverview.vue @@ -1,331 +1,699 @@ - + + \ No newline at end of file + diff --git a/src/views/xm/core/xmProduct/XmProductOverviewComplex.vue b/src/views/xm/core/xmProduct/XmProductOverviewComplex.vue new file mode 100644 index 00000000..7413173c --- /dev/null +++ b/src/views/xm/core/xmProduct/XmProductOverviewComplex.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/src/views/xm/core/xmProject/XmProjectForLink.vue b/src/views/xm/core/xmProject/XmProjectForLink.vue index f6627291..ab6c29da 100644 --- a/src/views/xm/core/xmProject/XmProjectForLink.vue +++ b/src/views/xm/core/xmProject/XmProjectForLink.vue @@ -6,6 +6,10 @@ + + + 加入更多项目到产品中 + @@ -15,9 +19,8 @@ @@ -25,6 +28,10 @@ + + + + @@ -37,11 +44,13 @@ //import { listOption } from '@/api/mdp/meta/itemOption';//下拉框数据查询 import { listXmProject, } from '@/api/xm/core/xmProject'; import { mapGetters } from 'vuex' - + import { delXmProductProjectLink, addXmProductProjectLink,batchDelXmProductProjectLink } from '@/api/xm/core/xmProductProjectLink'; +import XmProjectList from './XmProjectList.vue'; + export default { - props:['xmProduct'], + props:['xmProduct','xmIteration'], computed: { ...mapGetters([ 'userInfo','roles' @@ -50,6 +59,9 @@ watch:{ xmProduct:function(){ this.getXmProjects(); + }, + xmIteration:function(){ + this.getXmProjects(); } }, data() { @@ -82,7 +94,7 @@ editForm: { id:'',code:'',name:'',xmType:'',startTime:'',endTime:'',urgent:'',priority:'',description:'',createUserid:'',createUsername:'',createTime:'',assess:'',assessRemarks:'',status:'',branchId:'',planTotalCost:'',bizProcInstId:'',bizFlowState:'',planNouserAt:'',planInnerUserAt:'',planOutUserAt:'',locked:'',baseTime:'',baseRemark:'',baselineId:'',planWorkload:'',totalReceivables:'',budgetMarginRate:'',contractAmt:'',planInnerUserPrice:'',budgetOutUserPrice:'',planOutUserCnt:'',planInnerUserCnt:'',planWorkingHours:'' }, - + xmProjectListVisible:false, /**end 自定义属性请在上面加 请加备注**/ } @@ -125,6 +137,10 @@ if(this.xmProduct){ params.productId=this.xmProduct.id } + + if(this.xmIteration){ + params.iterationId=this.xmIteration.id + } if(this.filters.key){ params.key='%'+this.filters.key+'%' } @@ -153,11 +169,46 @@ selectProject:function(row){ this.editForm=row this.$emit('project-confirm',this.editForm); + }, + /**end 自定义函数请在上面加**/ + onXmProjectSelect:function(row){ + var xmProject=row; + var xmProduct=this.xmProduct; + this.$confirm('确认将项目【'+xmProject.name+'】加入产品【'+xmProduct.productName+'】吗?', '提示', { + type: 'warning' + }).then(()=>{ + addXmProductProjectLink({projectId:xmProject.id,productId:xmProduct.id}).then(res=>{ + var tips =res.data.tips; + if(tips.isOk){ + this.getXmProjects(); + } + this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error'}); + }) + }) + }, + doDelXmProductProjectLink(row){ + + var xmProduct=this.xmProduct; + var selProject=row; + this.$confirm('确认将项目【'+selProject.projectName+'】从产品【'+xmProduct.productName+'】移出吗?移出后,项目试图中将看不到该产品信息', '提示', { + type: 'warning' + }).then(()=>{ + var params={productId:xmProduct.id,projectId:selProject.id} + delXmProductProjectLink(params).then(res=>{ + var tips = res.data.tips; + if(tips.isOk){ + this.getXmProjects(); + this.$message({showClose: true, message: "移出成功", type: 'success' }); + } + }); + }) + } /**end 自定义函数请在上面加**/ },//end methods - components: { + components: { +XmProjectList //在下面添加其它组件 }, diff --git a/src/views/xm/core/xmProject/XmProjectInfo.vue b/src/views/xm/core/xmProject/XmProjectInfo.vue index e89c43e7..6bd08dd2 100644 --- a/src/views/xm/core/xmProject/XmProjectInfo.vue +++ b/src/views/xm/core/xmProject/XmProjectInfo.vue @@ -141,9 +141,9 @@ - - - + + + @@ -194,9 +194,9 @@ import xmMenuWithPlan from '../xmMenu/XmMenuWithPlan'; import xmProjectStateMng from '../xmProjectState/XmProjectStateMng'; import xmTestCaseExecMng from '../xmTestCaseExec/XmTestCaseExecMng'; - import XmIterationComplex from '../xmIteration/XmIterationComplex.vue'; + import XmIterationForProjectComplex from '../xmIteration/XmIterationForProjectComplex.vue'; import XmProjectOverviewComplex from './XmProjectOverviewComplex.vue'; -import XmProductComplex from '../xmProduct/XmProductComplex.vue'; + import XmProductForProjectComplex from '../xmProduct/XmProductForProjectComplex.vue'; export default { @@ -416,9 +416,9 @@ import XmProductComplex from '../xmProduct/XmProductComplex.vue'; xmProjectStateMng, xmTestCaseExecMng, xmProjectGroupSelect, - XmIterationComplex, + XmIterationForProjectComplex, XmProjectOverviewComplex, - XmProductComplex, + XmProductForProjectComplex, //在下面添加其它组件 }, mounted() { diff --git a/src/views/xm/core/xmTask/XmTaskMng.vue b/src/views/xm/core/xmTask/XmTaskMng.vue index 67199e95..a28d0a88 100644 --- a/src/views/xm/core/xmTask/XmTaskMng.vue +++ b/src/views/xm/core/xmTask/XmTaskMng.vue @@ -56,7 +56,7 @@ 直接创建 - +