Browse Source

故事改成需求

master
陈裕财 4 years ago
parent
commit
2baeef014f
  1. 2
      src/api/xm/core/xmBranchState.js
  2. 2
      src/api/xm/core/xmIterationMenu.js
  3. 2
      src/api/xm/core/xmIterationState.js
  4. 2
      src/api/xm/core/xmTestCase.js
  5. 2
      src/api/xm/core/xmTestCaseExec.js
  6. 6
      src/router/routes_xm.js
  7. 2
      src/views/datav/xm/branch/digitalFlop.vue
  8. 2
      src/views/datav/xm/branch/index.vue
  9. 2
      src/views/datav/xm/project/digitalFlop.vue
  10. 2
      src/views/datav/xm/project/index.vue
  11. 2
      src/views/xm/core/xmBranchState/XmBranchStateAdd.vue
  12. 2
      src/views/xm/core/xmBranchState/XmBranchStateEdit.vue
  13. 2
      src/views/xm/core/xmBranchState/XmBranchStateMng.vue
  14. 14
      src/views/xm/core/xmExchange/XmExchangeAdd.vue
  15. 14
      src/views/xm/core/xmExchange/XmExchangeEdit.vue
  16. 6
      src/views/xm/core/xmExchange/XmExchangeMng.vue
  17. 4
      src/views/xm/core/xmIteration/XmIterationForProjectComplex.vue
  18. 26
      src/views/xm/core/xmIteration/XmIterationInfo.vue
  19. 2
      src/views/xm/core/xmIteration/XmIterationMng.vue
  20. 2
      src/views/xm/core/xmIteration/XmIterationOverviewComplex.vue
  21. 2
      src/views/xm/core/xmIteration/XmIterationSelect.vue
  22. 4
      src/views/xm/core/xmIterationMenu/XmIterationMenuAdd.vue
  23. 4
      src/views/xm/core/xmIterationMenu/XmIterationMenuEdit.vue
  24. 6
      src/views/xm/core/xmIterationMenu/XmIterationMenuMng.vue
  25. 2
      src/views/xm/core/xmIterationState/XmIterationStateAdd.vue
  26. 2
      src/views/xm/core/xmIterationState/XmIterationStateEdit.vue
  27. 2
      src/views/xm/core/xmIterationState/XmIterationStateMng.vue
  28. 2
      src/views/xm/core/xmIterationState/XmIterationStateShow.vue
  29. 20
      src/views/xm/core/xmMenu/XmMenuAdd.vue
  30. 16
      src/views/xm/core/xmMenu/XmMenuEdit.vue
  31. 54
      src/views/xm/core/xmMenu/XmMenuMng.vue
  32. 50
      src/views/xm/core/xmMenu/XmMenuMngBatch.vue
  33. 6
      src/views/xm/core/xmMenu/XmMenuOverview.vue
  34. 8
      src/views/xm/core/xmMenu/XmMenuRichDetail.vue
  35. 26
      src/views/xm/core/xmMenu/XmMenuSelect.vue
  36. 10
      src/views/xm/core/xmMenu/XmMenuWithPlan.vue
  37. 12
      src/views/xm/core/xmMenuExchange/XmMenuExchangeMng.vue
  38. 6
      src/views/xm/core/xmMenuState/XmMenuStateMng.vue
  39. 16
      src/views/xm/core/xmMenuTemplate/XmMenuTemplateAdd.vue
  40. 14
      src/views/xm/core/xmMenuTemplate/XmMenuTemplateEdit.vue
  41. 14
      src/views/xm/core/xmMenuTemplate/XmMenuTemplateMng.vue
  42. 4
      src/views/xm/core/xmProduct/XmProductForProjectComplex.vue
  43. 26
      src/views/xm/core/xmProduct/XmProductInfo.vue
  44. 2
      src/views/xm/core/xmProduct/XmProductMng.vue
  45. 4
      src/views/xm/core/xmProject/XmProjectComplex.vue
  46. 26
      src/views/xm/core/xmProject/XmProjectInfo.vue
  47. 14
      src/views/xm/core/xmProjectGroupFormwork/XmProjectGroupFormwork.vue
  48. 2
      src/views/xm/core/xmProjectPhase/XmProjectPhaseBatch.vue
  49. 10
      src/views/xm/core/xmProjectPhase/XmProjectPhaseMng.vue
  50. 2
      src/views/xm/core/xmProjectPhase/XmProjectPhaseSelect.vue
  51. 2
      src/views/xm/core/xmProjectState/XmProjectStateAdd.vue
  52. 2
      src/views/xm/core/xmProjectState/XmProjectStateEdit.vue
  53. 4
      src/views/xm/core/xmQuestion/XmQuestionAdd.vue
  54. 6
      src/views/xm/core/xmQuestion/XmQuestionEdit.vue
  55. 10
      src/views/xm/core/xmQuestion/XmQuestionMng.vue
  56. 10
      src/views/xm/core/xmTask/XmTaskAdd.vue
  57. 4
      src/views/xm/core/xmTask/XmTaskAgileKanban.vue
  58. 10
      src/views/xm/core/xmTask/XmTaskEdit.vue
  59. 2
      src/views/xm/core/xmTask/XmTaskList.vue
  60. 2
      src/views/xm/core/xmTask/XmTaskListForMenu.vue
  61. 26
      src/views/xm/core/xmTask/XmTaskMng.vue
  62. 10
      src/views/xm/core/xmTestCase/XmTestCaseAdd.vue
  63. 10
      src/views/xm/core/xmTestCase/XmTestCaseEdit.vue
  64. 12
      src/views/xm/core/xmTestCase/XmTestCaseMng.vue
  65. 4
      src/views/xm/core/xmTestCaseExec/XmTestCaseExecAdd.vue
  66. 4
      src/views/xm/core/xmTestCaseExec/XmTestCaseExecEdit.vue
  67. 12
      src/views/xm/core/xmTestCaseExec/XmTestCaseExecMng.vue

2
src/api/xm/core/xmBranchState.js

@ -8,7 +8,7 @@ let base = config.getCoreBasePath();
/** /**
* 机构内所有项目指标汇总 * 机构内所有项目指标汇总
*1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉 *1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉
*2 查询新增修改的参数格式 params={id:'主键 主键',bizDate:'统计日期yyyy-mm-dd类型',totalFileCnt:'文件数据',totalBugCnt:'bug数目',totalTaskCnt:'任务数',totalBudgetNouserAmount:'项目总非人力预算-来自项目表',totalStaffCnt:'总参与人数',calcTime:'统计执行日期',calcStatus:'0-暂时的1稳定的,暂时的可以被覆盖,稳定的不允许覆盖',totalCostNouserAmount:'项目总非人力成本',totalClosedBugCnt:'已关闭bug总数',totalResolvedBugCnt:'已解决bug总数',totalCompleteTaskCnt:'已完成任务总数-来自任务表',totalPhaseCnt:'项目阶段计划数',totalCompletePhaseCnt:'项目阶段计划已完成数',totalNeedPayAmount:'待付款总金额',totalFinishPayAmount:'已付款总金额',totalNeedColAmount:'待收款总金额',totalFinishColAmount:'已收款总金额',totalCostUserAmount:'项目总人力成本',totalBudgetInnerUserAmount:'项目总内部人力预算-来自项目表',totalPlanWorkload:'项目总预算工作量-来自项目表',totalRiskCnt:'项目风险总数',totalCompleteRiskCnt:'已完成风险总数',branchId:'机构编号',branchName:'机构名称',totalBudgetOutUserAmount:'项目总外购人力预算-来自项目表',totalCompleteWorkload:'已完成工作量-来自计划中实际完成工作量',totalCostInnerUserAmount:'项目总内部人力成本金额',totalCostOutUserAmount:'项目总外购人力成本金额',totalProgress:'项目进度0~100之间,来自任务表',totalActiveBugCnt:'激活的bug总数',totalConfirmedBugCnt:'已解决bug总数',projectStatus:'项目状态,0-初始,1-立项中,2-执行中,3-已结项,4-暂停',totalActWorkload:'实际总工作量,来自任务表',totalActOutWorkload:'实际外购总工作量,来自任务表',totalActInnerWorkload:'实际内部总工作量,来自任务表',totalTaskBudgetCostAt:'已经分配到任务的总预算',totalTaskOutCnt:'外购任务数,来自任务表',totalNeedPayCnt:'待付款笔数',totalFinishPayCnt:'完成付款总比数',totalFinishPayUserCnt:'已付款总人数',totalNeedPayUserCnt:'待付款总人数',totalPlanInnerUserWorkload:'内部人力总工作量-应该大于或等于阶段计划内部人力总成本',totalPlanOutUserWorkload:'外购人力总工作量-应该大于或等于阶段计划外购人力总成本',testCases:'测试案例总数',execCases:'测试中案例总数',designCases:'设计中案例总数',finishCases:'完成案例总数',iterationCnt:'迭代数',productCnt:'产品数',menuCnt:'故事数'}
*2 查询新增修改的参数格式 params={id:'主键 主键',bizDate:'统计日期yyyy-mm-dd类型',totalFileCnt:'文件数据',totalBugCnt:'bug数目',totalTaskCnt:'任务数',totalBudgetNouserAmount:'项目总非人力预算-来自项目表',totalStaffCnt:'总参与人数',calcTime:'统计执行日期',calcStatus:'0-暂时的1稳定的,暂时的可以被覆盖,稳定的不允许覆盖',totalCostNouserAmount:'项目总非人力成本',totalClosedBugCnt:'已关闭bug总数',totalResolvedBugCnt:'已解决bug总数',totalCompleteTaskCnt:'已完成任务总数-来自任务表',totalPhaseCnt:'项目阶段计划数',totalCompletePhaseCnt:'项目阶段计划已完成数',totalNeedPayAmount:'待付款总金额',totalFinishPayAmount:'已付款总金额',totalNeedColAmount:'待收款总金额',totalFinishColAmount:'已收款总金额',totalCostUserAmount:'项目总人力成本',totalBudgetInnerUserAmount:'项目总内部人力预算-来自项目表',totalPlanWorkload:'项目总预算工作量-来自项目表',totalRiskCnt:'项目风险总数',totalCompleteRiskCnt:'已完成风险总数',branchId:'机构编号',branchName:'机构名称',totalBudgetOutUserAmount:'项目总外购人力预算-来自项目表',totalCompleteWorkload:'已完成工作量-来自计划中实际完成工作量',totalCostInnerUserAmount:'项目总内部人力成本金额',totalCostOutUserAmount:'项目总外购人力成本金额',totalProgress:'项目进度0~100之间,来自任务表',totalActiveBugCnt:'激活的bug总数',totalConfirmedBugCnt:'已解决bug总数',projectStatus:'项目状态,0-初始,1-立项中,2-执行中,3-已结项,4-暂停',totalActWorkload:'实际总工作量,来自任务表',totalActOutWorkload:'实际外购总工作量,来自任务表',totalActInnerWorkload:'实际内部总工作量,来自任务表',totalTaskBudgetCostAt:'已经分配到任务的总预算',totalTaskOutCnt:'外购任务数,来自任务表',totalNeedPayCnt:'待付款笔数',totalFinishPayCnt:'完成付款总比数',totalFinishPayUserCnt:'已付款总人数',totalNeedPayUserCnt:'待付款总人数',totalPlanInnerUserWorkload:'内部人力总工作量-应该大于或等于阶段计划内部人力总成本',totalPlanOutUserWorkload:'外购人力总工作量-应该大于或等于阶段计划外购人力总成本',testCases:'测试案例总数',execCases:'测试中案例总数',designCases:'设计中案例总数',finishCases:'完成案例总数',iterationCnt:'迭代数',productCnt:'产品数',menuCnt:'需求数'}
**/ **/
//普通查询 条件之间and关系 //普通查询 条件之间and关系

2
src/api/xm/core/xmIterationMenu.js

@ -8,7 +8,7 @@ let base = config.getCoreBasePath();
/** /**
* 迭代定义 * 迭代定义
*1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉 *1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉
*2 查询新增修改的参数格式 params={id:'主键 主键',iterationId:'对应的迭代编号',menuId:'故事编号',productId:'产品编号',ctime:'关联时间',relStatus:'关联状态0不再关联1正常关联'}
*2 查询新增修改的参数格式 params={id:'主键 主键',iterationId:'对应的迭代编号',menuId:'需求编号',productId:'产品编号',ctime:'关联时间',relStatus:'关联状态0不再关联1正常关联'}
**/ **/
//普通查询 条件之间and关系 //普通查询 条件之间and关系

2
src/api/xm/core/xmIterationState.js

@ -8,7 +8,7 @@ let base = config.getCoreBasePath();
/** /**
* 迭代定义 * 迭代定义
*1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉 *1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉
*2 查询新增修改的参数格式 params={id:'迭代编码 主键',distBudgetCost:'已分配到任务的预算从任务表汇总而来',distBudgetWorkload:'已分配到任务的预算工作量从任务表汇总而来',actCost:'实际成本从任务表汇总而来',actWorkload:'实际工作量从任务表汇总而来',actStaffNum:'实际投入人员数',finishRate:'进度',testCases:'测试案例总数',execCases:'测试中案例总数',designCases:'设计中案例总数',finishCases:'完成案例总数',projectCnt:'关联项目数',productCnt:'关联产品数',menuCnt:'关联故事数',taskCnt:'关联任务数',finishTaskCnt:'已完成的任务数',calcTime:'计算日期',iterationName:'迭代名称',budgetCost:'预算成本',budgetWorkload:'预算工作量',iterationId:'迭代编号'}
*2 查询新增修改的参数格式 params={id:'迭代编码 主键',distBudgetCost:'已分配到任务的预算从任务表汇总而来',distBudgetWorkload:'已分配到任务的预算工作量从任务表汇总而来',actCost:'实际成本从任务表汇总而来',actWorkload:'实际工作量从任务表汇总而来',actStaffNum:'实际投入人员数',finishRate:'进度',testCases:'测试案例总数',execCases:'测试中案例总数',designCases:'设计中案例总数',finishCases:'完成案例总数',projectCnt:'关联项目数',productCnt:'关联产品数',menuCnt:'关联需求数',taskCnt:'关联任务数',finishTaskCnt:'已完成的任务数',calcTime:'计算日期',iterationName:'迭代名称',budgetCost:'预算成本',budgetWorkload:'预算工作量',iterationId:'迭代编号'}
**/ **/
//普通查询 条件之间and关系 //普通查询 条件之间and关系

2
src/api/xm/core/xmTestCase.js

@ -8,7 +8,7 @@ let base = config.getCoreBasePath();
/** /**
* 测试用例 * 测试用例
*1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉 *1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉
*2 查询新增修改的参数格式 params={id:'主键 主键',caseName:'标题',caseRemark:'备注',testStep:'测试步骤',expectResult:'期望结果',menuId:'关联的故事',menuName:'关联故事名',ctime:'创建时间',ltime:'更新时间',luserid:'更新人编号',lusername:'更新人姓名',cbranchId:'创建机构',moduleId:'模块编号',moduleName:'模块名称',caseStatus:'用例状态1正常0废弃'}
*2 查询新增修改的参数格式 params={id:'主键 主键',caseName:'标题',caseRemark:'备注',testStep:'测试步骤',expectResult:'期望结果',menuId:'关联的需求',menuName:'关联需求名',ctime:'创建时间',ltime:'更新时间',luserid:'更新人编号',lusername:'更新人姓名',cbranchId:'创建机构',moduleId:'模块编号',moduleName:'模块名称',caseStatus:'用例状态1正常0废弃'}
**/ **/
//普通查询 条件之间and关系 //普通查询 条件之间and关系

2
src/api/xm/core/xmTestCaseExec.js

@ -8,7 +8,7 @@ let base = config.getCoreBasePath();
/** /**
* xm_test_case_exec * xm_test_case_exec
*1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉 *1 默认只开放普通查询所有查询只要上传 分页参数 {currentPage:当前页码从1开始,pageSize:每页记录数,total:总记录数如果是0后台会自动计算总记录数非0不会自动计算}后台都会自动按分页查询 其它 api用到再打开没用到的api请注释掉
*2 查询新增修改的参数格式 params={id:'执行编号 主键',execUserid:'执行人',startTime:'开始时间',projectId:'项目编号',projectName:'项目名称',caseId:'测试案例编号',caseName:'测试案例名称',endTime:'到期时间',remark:'问题描述',createUserid:'问题创建人编号',createUsername:'问题创建人',createTime:'创建时间',execStatus:'0新建1测试中2已完成',iterationId:'迭代编号',iterationName:'迭代名称',execUsername:'执行人姓名',taskId:'归属测试任务编号',taskName:'归属测试任务名称',menuId:'故事编号'}
*2 查询新增修改的参数格式 params={id:'执行编号 主键',execUserid:'执行人',startTime:'开始时间',projectId:'项目编号',projectName:'项目名称',caseId:'测试案例编号',caseName:'测试案例名称',endTime:'到期时间',remark:'问题描述',createUserid:'问题创建人编号',createUsername:'问题创建人',createTime:'创建时间',execStatus:'0新建1测试中2已完成',iterationId:'迭代编号',iterationName:'迭代名称',execUsername:'执行人姓名',taskId:'归属测试任务编号',taskName:'归属测试任务名称',menuId:'需求编号'}
**/ **/
//普通查询 条件之间and关系 //普通查询 条件之间and关系

6
src/router/routes_xm.js

@ -103,9 +103,9 @@ export default {
{ 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: '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: '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: 'xmMenuTemplate/XmMenuTemplateMng', component: _import('xm/core/xmMenuTemplate/XmMenuTemplateMng'), name: 'XmMenuTemplateMng', meta: { title: '需求模板' }},
] ]
}, },
{ {
@ -131,7 +131,7 @@ export default {
// leaf: true,//只有一个节点 // leaf: true,//只有一个节点
children: [ children: [
{ 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: '故事迭代' }},
{ path: 'xmIterationMenu/XmIterationMenuMng', component: _import('xm/core/xmIterationMenu/XmIterationMenuMng'), name: 'XmIterationMenuMng', meta: { title: '需求迭代' }},
] ]
} }
] ]

2
src/views/datav/xm/branch/digitalFlop.vue

@ -108,7 +108,7 @@ export default {
unit: '个' unit: '个'
}, },
{ {
title: '故事',
title: '需求',
number: { number: {
number: [randomExtend(5000, 100000)], number: [randomExtend(5000, 100000)],
content: '{nt}', content: '{nt}',

2
src/views/datav/xm/branch/index.vue

@ -137,7 +137,7 @@ export default {
unit: '个' unit: '个'
}, },
{ {
title: '故事',
title: '需求',
number: { number: {
number: [this.xmBranchState.menuCnt], number: [this.xmBranchState.menuCnt],
content: '{nt}', content: '{nt}',

2
src/views/datav/xm/project/digitalFlop.vue

@ -108,7 +108,7 @@ export default {
unit: '个' unit: '个'
}, },
{ {
title: '故事',
title: '需求',
number: { number: {
number: [randomExtend(5000, 100000)], number: [randomExtend(5000, 100000)],
content: '{nt}', content: '{nt}',

2
src/views/datav/xm/project/index.vue

@ -137,7 +137,7 @@ export default {
unit: '个' unit: '个'
}, },
{ {
title: '故事',
title: '需求',
number: { number: {
number: [this.xmProjectState.menuCnt], number: [this.xmProjectState.menuCnt],
content: '{nt}', content: '{nt}',

2
src/views/xm/core/xmBranchState/XmBranchStateAdd.vue

@ -156,7 +156,7 @@
<el-form-item label="产品数" prop="productCnt"> <el-form-item label="产品数" prop="productCnt">
<el-input-number v-model="addForm.productCnt" :min="0" :max="200"></el-input-number> <el-input-number v-model="addForm.productCnt" :min="0" :max="200"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="故事数" prop="menuCnt">
<el-form-item label="需求数" prop="menuCnt">
<el-input-number v-model="addForm.menuCnt" :min="0" :max="200"></el-input-number> <el-input-number v-model="addForm.menuCnt" :min="0" :max="200"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>

2
src/views/xm/core/xmBranchState/XmBranchStateEdit.vue

@ -156,7 +156,7 @@
<el-form-item label="产品数" prop="productCnt"> <el-form-item label="产品数" prop="productCnt">
<el-input-number v-model="editForm.productCnt" :min="0" :max="200"></el-input-number> <el-input-number v-model="editForm.productCnt" :min="0" :max="200"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="故事数" prop="menuCnt">
<el-form-item label="需求数" prop="menuCnt">
<el-input-number v-model="editForm.menuCnt" :min="0" :max="200"></el-input-number> <el-input-number v-model="editForm.menuCnt" :min="0" :max="200"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>

2
src/views/xm/core/xmBranchState/XmBranchStateMng.vue

@ -30,7 +30,7 @@
<el-table-column prop="totalStaffCnt" label="总参与人数" min-width="80" ></el-table-column> <el-table-column prop="totalStaffCnt" label="总参与人数" min-width="80" ></el-table-column>
<el-table-column prop="productCnt" label="产品数" min-width="80" ></el-table-column> <el-table-column prop="productCnt" label="产品数" min-width="80" ></el-table-column>
<el-table-column prop="menuCnt" label="故事数" min-width="80" ></el-table-column>
<el-table-column prop="menuCnt" label="需求数" min-width="80" ></el-table-column>
<el-table-column prop="iterationCnt" label="迭代数" min-width="80" ></el-table-column> <el-table-column prop="iterationCnt" label="迭代数" min-width="80" ></el-table-column>
<el-table-column prop="testCases" label="测试案例总数" min-width="80" ></el-table-column> <el-table-column prop="testCases" label="测试案例总数" min-width="80" ></el-table-column>
<el-table-column prop="totalBugCnt" label="bug数目" min-width="80" ></el-table-column> <el-table-column prop="totalBugCnt" label="bug数目" min-width="80" ></el-table-column>

14
src/views/xm/core/xmExchange/XmExchangeAdd.vue

@ -1,13 +1,13 @@
<template> <template>
<section class="page-container page-full-height padding border"> <section class="page-container page-full-height padding border">
<el-row> <el-row>
<!--新增界面 XmExchange 故事-->
<!--新增界面 XmExchange 需求-->
<el-form :model="addForm" label-width="120px" :rules="addFormRules" ref="addForm"> <el-form :model="addForm" label-width="120px" :rules="addFormRules" ref="addForm">
<el-form-item label="故事编号" prop="taskId">
<el-input v-model="addForm.taskId" placeholder="故事编号" ></el-input>
<el-form-item label="需求编号" prop="taskId">
<el-input v-model="addForm.taskId" placeholder="需求编号" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="故事名称" prop="taskName">
<el-input v-model="addForm.taskName" placeholder="故事名称" ></el-input>
<el-form-item label="需求名称" prop="taskName">
<el-input v-model="addForm.taskName" placeholder="需求名称" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="归属产品编号" prop="projectId"> <el-form-item label="归属产品编号" prop="projectId">
<el-input v-model="addForm.projectId" placeholder="归属产品编号" ></el-input> <el-input v-model="addForm.projectId" placeholder="归属产品编号" ></el-input>
@ -115,7 +115,7 @@
//{ required: true, message: '', trigger: 'blur' } //{ required: true, message: '', trigger: 'blur' }
] ]
}, },
//
//
addForm: { addForm: {
taskId:'',taskName:'',projectId:'',remark:'',id:'',pid:'',cuserid:'',cusername:'',ctime:'',cbranchId:'',adopt:'',adoptUserid:'',adoptUsername:'',adoptTime:'',closed:'',puserid:'',pusername:'',premark:'',notifyUserids:'',notifyChannels:'',notifyUsernames:'',cuserHeadImg:'',replyType:'' taskId:'',taskName:'',projectId:'',remark:'',id:'',pid:'',cuserid:'',cusername:'',ctime:'',cbranchId:'',adopt:'',adoptUserid:'',adoptUsername:'',adoptTime:'',closed:'',puserid:'',pusername:'',premark:'',notifyUserids:'',notifyChannels:'',notifyUsernames:'',cuserHeadImg:'',replyType:''
} }
@ -130,7 +130,7 @@
this.$refs['addForm'].resetFields(); this.$refs['addForm'].resetFields();
this.$emit('cancel'); this.$emit('cancel');
}, },
//XmExchange @submit="afterAddSubmit"
//XmExchange @submit="afterAddSubmit"
addSubmit: function () { addSubmit: function () {
this.$refs.addForm.validate((valid) => { this.$refs.addForm.validate((valid) => {

14
src/views/xm/core/xmExchange/XmExchangeEdit.vue

@ -1,13 +1,13 @@
<template> <template>
<section class="page-container page-full-height padding border"> <section class="page-container page-full-height padding border">
<el-row> <el-row>
<!--编辑界面 XmExchange 故事-->
<!--编辑界面 XmExchange 需求-->
<el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editForm"> <el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editForm">
<el-form-item label="故事编号" prop="taskId">
<el-input v-model="editForm.taskId" placeholder="故事编号"></el-input>
<el-form-item label="需求编号" prop="taskId">
<el-input v-model="editForm.taskId" placeholder="需求编号"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="故事名称" prop="taskName">
<el-input v-model="editForm.taskName" placeholder="故事名称"></el-input>
<el-form-item label="需求名称" prop="taskName">
<el-input v-model="editForm.taskName" placeholder="需求名称"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="归属产品编号" prop="projectId"> <el-form-item label="归属产品编号" prop="projectId">
<el-input v-model="editForm.projectId" placeholder="归属产品编号"></el-input> <el-input v-model="editForm.projectId" placeholder="归属产品编号"></el-input>
@ -115,7 +115,7 @@
//{ required: true, message: '', trigger: 'blur' } //{ required: true, message: '', trigger: 'blur' }
] ]
}, },
// XmExchange
// XmExchange
editForm: { editForm: {
taskId:'',taskName:'',projectId:'',remark:'',id:'',pid:'',cuserid:'',cusername:'',ctime:'',cbranchId:'',adopt:'',adoptUserid:'',adoptUsername:'',adoptTime:'',closed:'',puserid:'',pusername:'',premark:'',notifyUserids:'',notifyChannels:'',notifyUsernames:'',cuserHeadImg:'',replyType:'' taskId:'',taskName:'',projectId:'',remark:'',id:'',pid:'',cuserid:'',cusername:'',ctime:'',cbranchId:'',adopt:'',adoptUserid:'',adoptUsername:'',adoptTime:'',closed:'',puserid:'',pusername:'',premark:'',notifyUserids:'',notifyChannels:'',notifyUsernames:'',cuserHeadImg:'',replyType:''
} }
@ -130,7 +130,7 @@
this.$refs['editForm'].resetFields(); this.$refs['editForm'].resetFields();
this.$emit('cancel'); this.$emit('cancel');
}, },
//XmExchange @submit="afterEditSubmit"
//XmExchange @submit="afterEditSubmit"
editSubmit: function () { editSubmit: function () {
this.$refs.editForm.validate((valid) => { this.$refs.editForm.validate((valid) => {
if (valid) { if (valid) {

6
src/views/xm/core/xmExchange/XmExchangeMng.vue

@ -124,7 +124,7 @@
this.pageInfo.count=true; this.pageInfo.count=true;
this.getXmExchanges(); this.getXmExchanges();
}, },
// XmExchange
// XmExchange
getXmExchanges() { getXmExchanges() {
let params = { let params = {
pageSize: this.pageInfo.pageSize, pageSize: this.pageInfo.pageSize,
@ -160,12 +160,12 @@
}).catch( err => this.load.list = false ); }).catch( err => this.load.list = false );
}, },
// XmExchange
// XmExchange
showEdit: function ( row,index ) { showEdit: function ( row,index ) {
this.editFormVisible = true; this.editFormVisible = true;
this.editForm = Object.assign({}, row); this.editForm = Object.assign({}, row);
}, },
// XmExchange
// XmExchange
showAdd: function () { showAdd: function () {
this.addFormVisible = true; this.addFormVisible = true;
//this.addForm=Object.assign({}, this.editForm); //this.addForm=Object.assign({}, this.editForm);

4
src/views/xm/core/xmIteration/XmIterationForProjectComplex.vue

@ -18,7 +18,7 @@
<el-tab-pane label="项目" name="projects" v-if="!selProject"> <el-tab-pane label="项目" name="projects" v-if="!selProject">
<xm-project-for-link v-if="xmIteration && showPanel=='projects'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject"></xm-project-for-link> <xm-project-for-link v-if="xmIteration && showPanel=='projects'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject"></xm-project-for-link>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="故事" lazy name="menus" >
<el-tab-pane label="需求" lazy name="menus" >
<xm-menu-mng v-if="xmIteration && showPanel=='menus'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject" :disabled-mng="false"></xm-menu-mng> <xm-menu-mng v-if="xmIteration && showPanel=='menus'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject" :disabled-mng="false"></xm-menu-mng>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="任务" lazy name="tasks" > <el-tab-pane label="任务" lazy name="tasks" >
@ -91,7 +91,7 @@
moduleType : '1' // 1- 2- moduleType : '1' // 1- 2-
}, },
{ {
moduleName:"故事",
moduleName:"需求",
topModuleId:'xm', topModuleId:'xm',
link:"/xm/core/xmMenu/XmMenuMng", link:"/xm/core/xmMenu/XmMenuMng",
icon: require("@/assets/image/platform/module-intelligentForms.png"), icon: require("@/assets/image/platform/module-intelligentForms.png"),

26
src/views/xm/core/xmIteration/XmIterationInfo.vue

@ -18,8 +18,8 @@
<el-menu-item index="产品"> <el-menu-item index="产品">
<span slot="title"><i class="el-icon-s-flag"></i>产品</span> <span slot="title"><i class="el-icon-s-flag"></i>产品</span>
</el-menu-item> </el-menu-item>
<el-menu-item label="故事" index="用户故事">
<span slot="title"><i class="el-icon-document"></i>故事</span>
<el-menu-item label="需求" index="需求">
<span slot="title"><i class="el-icon-document"></i>需求</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="任务"> <el-menu-item index="任务">
<span slot="title"><i class="el-icon-s-operation"></i>任务</span> <span slot="title"><i class="el-icon-s-operation"></i>任务</span>
@ -50,8 +50,8 @@
<el-menu-item index="项目监控" class="hidden-lg-and-down"> <el-menu-item index="项目监控" class="hidden-lg-and-down">
<span slot="title"><i class="el-icon-video-camera"></i>项目监控</span> <span slot="title"><i class="el-icon-video-camera"></i>项目监控</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="故事监控" class="hidden-lg-and-down">
<span slot="title"><i class="el-icon-video-camera"></i>故事监控</span>
<el-menu-item index="需求监控" class="hidden-lg-and-down">
<span slot="title"><i class="el-icon-video-camera"></i>需求监控</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="合同管理" class="hidden-md-and-down"> <el-menu-item index="合同管理" class="hidden-md-and-down">
@ -86,8 +86,8 @@
</el-menu-item> </el-menu-item>
<el-submenu index="更多"> <el-submenu index="更多">
<template slot="title">更多 </template> <template slot="title">更多 </template>
<el-menu-item index="故事监控" >
<span slot="title"><i class="el-icon-video-camera"></i>故事监控</span>
<el-menu-item index="需求监控" >
<span slot="title"><i class="el-icon-video-camera"></i>需求监控</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="项目监控"> <el-menu-item index="项目监控">
<span slot="title"><i class="el-icon-video-camera"></i>项目监控</span> <span slot="title"><i class="el-icon-video-camera"></i>项目监控</span>
@ -140,14 +140,14 @@
<xm-iteration-overview-complex v-if="infotype=='迭代概览'" :xm-iteration="xmIteration"></xm-iteration-overview-complex> <xm-iteration-overview-complex v-if="infotype=='迭代概览'" :xm-iteration="xmIteration"></xm-iteration-overview-complex>
<xm-project-complex v-if="infotype=='项目'" ref="xmProjectComplex" :xm-iteration="xmIteration"></xm-project-complex> <xm-project-complex v-if="infotype=='项目'" ref="xmProjectComplex" :xm-iteration="xmIteration"></xm-project-complex>
<xm-product-for-project-complex v-if="infotype=='产品'" ref="xmProductComplex" :xm-iteration="xmIteration"></xm-product-for-project-complex> <xm-product-for-project-complex v-if="infotype=='产品'" ref="xmProductComplex" :xm-iteration="xmIteration"></xm-product-for-project-complex>
<xm-menu-mng v-if="infotype=='用户故事'" :xm-iteration="xmIteration" :disabled-mng="false"></xm-menu-mng>
<xm-menu-mng v-if="infotype=='需求'" :xm-iteration="xmIteration" :disabled-mng="false"></xm-menu-mng>
<xm-task-mng v-if="infotype=='任务'" ref="xmTaskMng" :xm-iteration="xmIteration" ></xm-task-mng> <xm-task-mng v-if="infotype=='任务'" ref="xmTaskMng" :xm-iteration="xmIteration" ></xm-task-mng>
<xm-question v-if="infotype=='缺陷'" :qtype="'bug'" :xm-iteration='xmIteration' ref="xmQuestion"></xm-question> <xm-question v-if="infotype=='缺陷'" :qtype="'bug'" :xm-iteration='xmIteration' ref="xmQuestion"></xm-question>
<xm-group-mng v-if="infotype=='团队'" :xm-iteration="xmIteration"></xm-group-mng> <xm-group-mng v-if="infotype=='团队'" :xm-iteration="xmIteration"></xm-group-mng>
<xm-file-mng v-if="infotype=='文档'" :xm-iteration="xmIteration"></xm-file-mng> <xm-file-mng v-if="infotype=='文档'" :xm-iteration="xmIteration"></xm-file-mng>
<xm-project-phase-mng v-if="infotype=='阶段计划及里程碑'" ref="xmProjectPhaseMng" :xm-iteration="xmIteration" ></xm-project-phase-mng> <xm-project-phase-mng v-if="infotype=='阶段计划及里程碑'" ref="xmProjectPhaseMng" :xm-iteration="xmIteration" ></xm-project-phase-mng>
<xm-test-case-exec-mng v-if="infotype=='测试计划'" :visible="infotype=='测试计划'" :xm-iteration='xmIteration' ref="xmQuestion"></xm-test-case-exec-mng> <xm-test-case-exec-mng v-if="infotype=='测试计划'" :visible="infotype=='测试计划'" :xm-iteration='xmIteration' ref="xmQuestion"></xm-test-case-exec-mng>
<xm-menu-with-plan v-if="infotype=='故事监控'" ref="xmMenuWithPlan" :xm-iteration="xmIteration"></xm-menu-with-plan>
<xm-menu-with-plan v-if="infotype=='需求监控'" ref="xmMenuWithPlan" :xm-iteration="xmIteration"></xm-menu-with-plan>
<xm-project-state-mng v-if="infotype=='项目监控'" :xm-iteration="xmIteration"></xm-project-state-mng> <xm-project-state-mng v-if="infotype=='项目监控'" :xm-iteration="xmIteration"></xm-project-state-mng>
<xm-budget v-if="infotype=='预算'" :xm-iteration="xmIteration"></xm-budget> <xm-budget v-if="infotype=='预算'" :xm-iteration="xmIteration"></xm-budget>
<xm-cost v-if="infotype=='费用'" :xm-iteration="xmIteration"></xm-cost> <xm-cost v-if="infotype=='费用'" :xm-iteration="xmIteration"></xm-cost>
@ -221,7 +221,7 @@
infotype:"迭代概览", infotype:"迭代概览",
load:{list:false,edit:false}, load:{list:false,edit:false},
groupUserVisible:false, groupUserVisible:false,
exportArr: ['任务', '阶段计划', '故事监控']
exportArr: ['任务', '阶段计划', '需求监控']
/**end 自定义属性请在上面加 请加备注**/ /**end 自定义属性请在上面加 请加备注**/
} }
},//end data },//end data
@ -288,7 +288,7 @@
let pageNum = 1; let pageNum = 1;
let infotypeKey = ''; let infotypeKey = '';
if (this.infotype === '任务') { if (this.infotype === '任务') {
header = ['序号', '任务名称', '故事', '预算(万)', '工作量(人时)', '执行人', '进度', '任务开始时间', '任务结束时间', '任务技能需求'];
header = ['序号', '任务名称', '需求', '预算(万)', '工作量(人时)', '执行人', '进度', '任务开始时间', '任务结束时间', '任务技能需求'];
keyList = ['sortLevel', 'name', 'menuName', 'budgetCost', 'budgetWorkload', 'exeUsernames', 'rate', 'startTime', 'endTime', 'taskSkillNames']; keyList = ['sortLevel', 'name', 'menuName', 'budgetCost', 'budgetWorkload', 'exeUsernames', 'rate', 'startTime', 'endTime', 'taskSkillNames'];
list = this.$refs.xmTaskMng.tasksTreeData; list = this.$refs.xmTaskMng.tasksTreeData;
pageNum = this.$refs.xmTaskMng.pageInfo.pageNum; pageNum = this.$refs.xmTaskMng.pageInfo.pageNum;
@ -298,8 +298,8 @@
list = this.$refs.xmProjectPhaseMng.projectPhaseTreeData; list = this.$refs.xmProjectPhaseMng.projectPhaseTreeData;
pageNum = this.$refs.xmProjectPhaseMng.pageInfo.pageNum; pageNum = this.$refs.xmProjectPhaseMng.pageInfo.pageNum;
} else if (this.infotype === '故事监控') {
header = ['序号', '故事名称', '计划状态', '负责人', '上线时间', '计划开始时间', '实际开始时间', '计划结束时间', '实际结束时间', '计划工作量(人时)', '实际工作量(人时)', '计划成本(元)', '实际成本(元)', '总体完成比例%', '需求完成比例%', '设计完成比例%', '开发完成比例%', 'sit完成比例%', 'uat完成比例%', '上线状态'];
} else if (this.infotype === '需求监控') {
header = ['序号', '需求名称', '计划状态', '负责人', '上线时间', '计划开始时间', '实际开始时间', '计划结束时间', '实际结束时间', '计划工作量(人时)', '实际工作量(人时)', '计划成本(元)', '实际成本(元)', '总体完成比例%', '需求完成比例%', '设计完成比例%', '开发完成比例%', 'sit完成比例%', 'uat完成比例%', '上线状态'];
keyList = ['seqNo', 'menuName', 'planStatus', 'chargeUsername', 'onlineTime', 'planStartTime', 'actStartTime', 'planEndTime', 'actEndTime', 'planWorkload', 'actWorkload', 'planCostAmount', 'actCostAmount', 'finishRate', 'demandRate', 'designRate', 'devRate', 'sitRate', 'uatRate', 'onlineStatus']; keyList = ['seqNo', 'menuName', 'planStatus', 'chargeUsername', 'onlineTime', 'planStartTime', 'actStartTime', 'planEndTime', 'actEndTime', 'planWorkload', 'actWorkload', 'planCostAmount', 'actCostAmount', 'finishRate', 'demandRate', 'designRate', 'devRate', 'sitRate', 'uatRate', 'onlineStatus'];
list = this.$refs.xmMenuWithPlan.xmMenusTreeData; list = this.$refs.xmMenuWithPlan.xmMenusTreeData;
pageNum = this.$refs.xmMenuWithPlan.pageInfo.pageNum; pageNum = this.$refs.xmMenuWithPlan.pageInfo.pageNum;
@ -356,7 +356,7 @@
} }
}) })
return dataList; return dataList;
} else if (this.infotype == '故事监控') {
} else if (this.infotype == '需求监控') {
jsonData.forEach(v => { jsonData.forEach(v => {
const row = filterVal.map(j => { const row = filterVal.map(j => {
let key = ''; let key = '';

2
src/views/xm/core/xmIteration/XmIterationMng.vue

@ -61,7 +61,7 @@
<font class="more-label-font">迭代名称:</font><el-input v-model="filters.key" style="width: 60%;" placeholder="模糊查询"></el-input> <font class="more-label-font">迭代名称:</font><el-input v-model="filters.key" style="width: 60%;" placeholder="模糊查询"></el-input>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-tag>默认只能查询本人创建的迭代本人作为故事责任人参与的迭代</el-tag>
<el-tag>默认只能查询本人创建的迭代本人作为需求责任人参与的迭代</el-tag>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-button type="primary" icon="el-icon-search" @click="getXmIterations">查询</el-button> <el-button type="primary" icon="el-icon-search" @click="getXmIterations">查询</el-button>

2
src/views/xm/core/xmIteration/XmIterationOverviewComplex.vue

@ -11,7 +11,7 @@
<span slot="title">配置可见产品</span> <span slot="title">配置可见产品</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="iterationMenuMng"> <el-menu-item index="iterationMenuMng">
<span slot="title">配置可见故事</span>
<span slot="title">配置可见需求</span>
</el-menu-item> </el-menu-item>
<el-submenu index="project-change"> <el-submenu index="project-change">
<template slot="title"> <template slot="title">

2
src/views/xm/core/xmIteration/XmIterationSelect.vue

@ -46,7 +46,7 @@
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-tag>默认只能查询本人创建的迭代本人作为故事责任人参与的迭代</el-tag>
<el-tag>默认只能查询本人创建的迭代本人作为需求责任人参与的迭代</el-tag>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-button type="primary" icon="el-icon-search" @click="getXmIterations">查询</el-button> <el-button type="primary" icon="el-icon-search" @click="getXmIterations">查询</el-button>

4
src/views/xm/core/xmIterationMenu/XmIterationMenuAdd.vue

@ -9,8 +9,8 @@
<el-form-item label="对应的迭代编号" prop="iterationId"> <el-form-item label="对应的迭代编号" prop="iterationId">
<el-input v-model="addForm.iterationId" placeholder="对应的迭代编号" ></el-input> <el-input v-model="addForm.iterationId" placeholder="对应的迭代编号" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="故事编号" prop="menuId">
<el-input v-model="addForm.menuId" placeholder="故事编号" ></el-input>
<el-form-item label="需求编号" prop="menuId">
<el-input v-model="addForm.menuId" placeholder="需求编号" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="产品编号" prop="productId"> <el-form-item label="产品编号" prop="productId">
<el-input v-model="addForm.productId" placeholder="产品编号" ></el-input> <el-input v-model="addForm.productId" placeholder="产品编号" ></el-input>

4
src/views/xm/core/xmIterationMenu/XmIterationMenuEdit.vue

@ -9,8 +9,8 @@
<el-form-item label="对应的迭代编号" prop="iterationId"> <el-form-item label="对应的迭代编号" prop="iterationId">
<el-input v-model="editForm.iterationId" placeholder="对应的迭代编号"></el-input> <el-input v-model="editForm.iterationId" placeholder="对应的迭代编号"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="故事编号" prop="menuId">
<el-input v-model="editForm.menuId" placeholder="故事编号"></el-input>
<el-form-item label="需求编号" prop="menuId">
<el-input v-model="editForm.menuId" placeholder="需求编号"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="产品编号" prop="productId"> <el-form-item label="产品编号" prop="productId">
<el-input v-model="editForm.productId" placeholder="产品编号"></el-input> <el-input v-model="editForm.productId" placeholder="产品编号"></el-input>

6
src/views/xm/core/xmIterationMenu/XmIterationMenuMng.vue

@ -10,13 +10,13 @@
<el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询"> <el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询">
</el-input> </el-input>
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmIterationMenus" icon="el-icon-search"></el-button> <el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmIterationMenus" icon="el-icon-search"></el-button>
<el-button type="primary" @click="showAdd" icon="el-icon-plus">加入更多故事到迭代计划</el-button>
<el-button type="primary" @click="showAdd" icon="el-icon-plus">加入更多需求到迭代计划</el-button>
</el-row> </el-row>
<el-row class="page-main padding-top padding-left"> <el-row class="page-main padding-top padding-left">
<!--列表 XmIterationMenu 迭代定义--> <!--列表 XmIterationMenu 迭代定义-->
<el-table ref="table" :height="tableHeight" :data="xmIterationMenusTreeData" default-expand-all row-key="menuId" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;"> <el-table ref="table" :height="tableHeight" :data="xmIterationMenusTreeData" default-expand-all row-key="menuId" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="45"></el-table-column> <el-table-column type="selection" width="45"></el-table-column>
<el-table-column prop="menuName" label="故事名称" min-width="140" >
<el-table-column prop="menuName" label="需求名称" min-width="140" >
<template slot-scope="scope"> <template slot-scope="scope">
<el-link type="primary" :icon="scope.row.ntype=='1'?'el-icon-folder-opened':''">{{scope.row.seqNo}}&nbsp;&nbsp;{{scope.row.menuName}}</el-link> <el-link type="primary" :icon="scope.row.ntype=='1'?'el-icon-folder-opened':''">{{scope.row.seqNo}}&nbsp;&nbsp;{{scope.row.menuName}}</el-link>
</template> </template>
@ -32,7 +32,7 @@
<el-pagination layout="total, sizes, prev, pager, next" @current-change="handleCurrentChange" @size-change="handleSizeChange" :page-sizes="[10,20, 50, 100, 500]" :current-page="pageInfo.pageNum" :page-size="pageInfo.pageSize" :total="pageInfo.total" style="float:right;"></el-pagination> <el-pagination layout="total, sizes, prev, pager, next" @current-change="handleCurrentChange" @size-change="handleSizeChange" :page-sizes="[10,20, 50, 100, 500]" :current-page="pageInfo.pageNum" :page-size="pageInfo.pageSize" :total="pageInfo.total" style="float:right;"></el-pagination>
</el-row> </el-row>
</el-col> </el-col>
<el-drawer append-to-body title="故事选择" :visible.sync="menuVisible" size="60%" :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="menuVisible" size="60%" :close-on-click-modal="false">
<xm-menu-select :xm-iteration="xmIteration" :visible="menuVisible" :is-select-menu="true" :multi="true" :exclude-iteration-id="iteration?iteration.id:''" @menus-selected="onSelectedMenus" ></xm-menu-select> <xm-menu-select :xm-iteration="xmIteration" :visible="menuVisible" :is-select-menu="true" :multi="true" :exclude-iteration-id="iteration?iteration.id:''" @menus-selected="onSelectedMenus" ></xm-menu-select>
</el-drawer> </el-drawer>
</el-row> </el-row>

2
src/views/xm/core/xmIterationState/XmIterationStateAdd.vue

@ -42,7 +42,7 @@
<el-form-item label="关联产品数" prop="productCnt"> <el-form-item label="关联产品数" prop="productCnt">
<el-input-number v-model="addForm.productCnt" :min="0" :max="200"></el-input-number> <el-input-number v-model="addForm.productCnt" :min="0" :max="200"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="关联故事数" prop="menuCnt">
<el-form-item label="关联需求数" prop="menuCnt">
<el-input-number v-model="addForm.menuCnt" :min="0" :max="200"></el-input-number> <el-input-number v-model="addForm.menuCnt" :min="0" :max="200"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="关联任务数" prop="taskCnt"> <el-form-item label="关联任务数" prop="taskCnt">

2
src/views/xm/core/xmIterationState/XmIterationStateEdit.vue

@ -42,7 +42,7 @@
<el-form-item label="关联产品数" prop="productCnt"> <el-form-item label="关联产品数" prop="productCnt">
<el-input-number v-model="editForm.productCnt" :min="0" :max="200"></el-input-number> <el-input-number v-model="editForm.productCnt" :min="0" :max="200"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="关联故事数" prop="menuCnt">
<el-form-item label="关联需求数" prop="menuCnt">
<el-input-number v-model="editForm.menuCnt" :min="0" :max="200"></el-input-number> <el-input-number v-model="editForm.menuCnt" :min="0" :max="200"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="关联任务数" prop="taskCnt"> <el-form-item label="关联任务数" prop="taskCnt">

2
src/views/xm/core/xmIterationState/XmIterationStateMng.vue

@ -28,7 +28,7 @@
<el-table-column prop="finishCases" label="完成用例总数" min-width="80" ></el-table-column> <el-table-column prop="finishCases" label="完成用例总数" min-width="80" ></el-table-column>
<el-table-column prop="projectCnt" label="关联项目数" min-width="80" ></el-table-column> <el-table-column prop="projectCnt" label="关联项目数" min-width="80" ></el-table-column>
<el-table-column prop="productCnt" label="关联产品数" min-width="80" ></el-table-column> <el-table-column prop="productCnt" label="关联产品数" min-width="80" ></el-table-column>
<el-table-column prop="menuCnt" label="关联故事数" min-width="80" ></el-table-column>
<el-table-column prop="menuCnt" label="关联需求数" min-width="80" ></el-table-column>
<el-table-column prop="taskCnt" label="关联任务数" min-width="80" ></el-table-column> <el-table-column prop="taskCnt" label="关联任务数" min-width="80" ></el-table-column>
<el-table-column prop="finishTaskCnt" label="已完成的任务数" min-width="80" ></el-table-column> <el-table-column prop="finishTaskCnt" label="已完成的任务数" min-width="80" ></el-table-column>
</el-table> </el-table>

2
src/views/xm/core/xmIterationState/XmIterationStateShow.vue

@ -28,7 +28,7 @@
<el-table-column prop="finishCases" label="完成用例总数" min-width="80" ></el-table-column> <el-table-column prop="finishCases" label="完成用例总数" min-width="80" ></el-table-column>
<el-table-column prop="projectCnt" label="关联项目数" min-width="80" ></el-table-column> <el-table-column prop="projectCnt" label="关联项目数" min-width="80" ></el-table-column>
<el-table-column prop="productCnt" label="关联产品数" min-width="80" ></el-table-column> <el-table-column prop="productCnt" label="关联产品数" min-width="80" ></el-table-column>
<el-table-column prop="menuCnt" label="关联故事数" min-width="80" ></el-table-column>
<el-table-column prop="menuCnt" label="关联需求数" min-width="80" ></el-table-column>
<el-table-column prop="taskCnt" label="关联任务数" min-width="80" ></el-table-column> <el-table-column prop="taskCnt" label="关联任务数" min-width="80" ></el-table-column>
<el-table-column prop="finishTaskCnt" label="已完成的任务数" min-width="80" ></el-table-column> <el-table-column prop="finishTaskCnt" label="已完成的任务数" min-width="80" ></el-table-column>
</el-table> </el-table>

20
src/views/xm/core/xmMenu/XmMenuAdd.vue

@ -1,20 +1,20 @@
<template> <template>
<section class="page-container page-full-height padding border"> <section class="page-container page-full-height padding border">
<el-row class="page-main page-height-90"> <el-row class="page-main page-height-90">
<!--新增界面 XmMenu 项目故事-->
<!--新增界面 XmMenu 项目需求-->
<el-form :model="addForm" label-width="120px" :rules="addFormRules" ref="addForm"> <el-form :model="addForm" label-width="120px" :rules="addFormRules" ref="addForm">
<el-form-item v-if="parentMenu" label="上级故事" prop="pmenuId">
<el-form-item v-if="parentMenu" label="上级需求" prop="pmenuId">
{{parentMenu.seqNo}} &nbsp; &nbsp; {{parentMenu.menuName}} {{parentMenu.seqNo}} &nbsp; &nbsp; {{parentMenu.menuName}}
</el-form-item> </el-form-item>
<el-form-item v-if="!parentMenu" label="上级故事" prop="pmenuId">
<el-form-item v-if="!parentMenu" label="上级需求" prop="pmenuId">
无上级 无上级
</el-form-item> </el-form-item>
<el-form-item label="序号" prop="seqNo"> <el-form-item label="序号" prop="seqNo">
<el-input v-model="addForm.seqNo" placeholder="如1.0 , 1.1 , 1.1.1等" ></el-input> <el-input v-model="addForm.seqNo" placeholder="如1.0 , 1.1 , 1.1.1等" ></el-input>
<span v-if="parentMenu" style="color:red;">建议{{parentMenu.seqNo}}.{{parentMenu.children?parentMenu.children.length+1:1}} </span> <span v-if="parentMenu" style="color:red;">建议{{parentMenu.seqNo}}.{{parentMenu.children?parentMenu.children.length+1:1}} </span>
</el-form-item> </el-form-item>
<el-form-item label="故事名称" prop="menuName">
<el-input v-model="addForm.menuName" placeholder="故事名称" ></el-input>
<el-form-item label="需求名称" prop="menuName">
<el-input v-model="addForm.menuName" placeholder="需求名称" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="负责人" prop="mmUserid"> <el-form-item label="负责人" prop="mmUserid">
<el-tag v-if="addForm.mmUserid" closable @close="clearPmUser">{{addForm.mmUsername}}</el-tag> <el-tag v-if="addForm.mmUserid" closable @close="clearPmUser">{{addForm.mmUsername}}</el-tag>
@ -91,10 +91,10 @@
load:{ list: false, edit: false, del: false, add: false },//... load:{ list: false, edit: false, del: false, add: false },//...
addFormRules: { addFormRules: {
menuId: [ menuId: [
//{ required: true, message: '', trigger: 'blur' }
//{ required: true, message: '', trigger: 'blur' }
], ],
menuName: [ menuName: [
{ required: true, message: '故事名称不能为空', trigger: 'blur' }
{ required: true, message: '需求名称不能为空', trigger: 'blur' }
], ],
seqNo: [ seqNo: [
{ required: true, message: '序号不能为空', trigger: 'blur' } { required: true, message: '序号不能为空', trigger: 'blur' }
@ -103,7 +103,7 @@
{ required: true, message: '负责人不能为空', trigger: 'blur' } { required: true, message: '负责人不能为空', trigger: 'blur' }
], ],
}, },
//
//
addForm: { addForm: {
menuId:'',menuName:'',pmenuId:'',productId:'',remark:'',status:'',online:'',demandUrl:'',codeUrl:'',designUrl:'',docUrl:'',helpUrl:'',operDocUrl:'',seqNo:'1',mmUserid:'',mmUsername:'' menuId:'',menuName:'',pmenuId:'',productId:'',remark:'',status:'',online:'',demandUrl:'',codeUrl:'',designUrl:'',docUrl:'',helpUrl:'',operDocUrl:'',seqNo:'1',mmUserid:'',mmUsername:''
}, },
@ -118,10 +118,10 @@
handleCancel:function(){ handleCancel:function(){
this.$emit('cancel'); this.$emit('cancel');
}, },
//XmMenu @submit="afterAddSubmit"
//XmMenu @submit="afterAddSubmit"
addSubmit: function () { addSubmit: function () {
if(this.parentMenu==null && this.product ==null ){ if(this.parentMenu==null && this.product ==null ){
this.$message({showClose: true, message: '请选择产品/或者上级故事进行新增', type:'error' });
this.$message({showClose: true, message: '请选择产品/或者上级需求进行新增', type:'error' });
return; return;
} }
this.$refs.addForm.validate((valid) => { this.$refs.addForm.validate((valid) => {

16
src/views/xm/core/xmMenu/XmMenuEdit.vue

@ -2,7 +2,7 @@
<section class="page-container border padding"> <section class="page-container border padding">
<el-row class="page-main page-height-90"> <el-row class="page-main page-height-90">
<el-tabs> <el-tabs>
<el-tab-pane label="故事详情">
<el-tab-pane label="需求详情">
<el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editForm"> <el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editForm">
<el-row class="padding-bottom"> <el-row class="padding-bottom">
<el-steps :active="parseInt(editForm.status)" simple finish-status="success" align-center> <el-steps :active="parseInt(editForm.status)" simple finish-status="success" align-center>
@ -19,8 +19,8 @@
<el-form-item label="序号" prop="seqNo"> <el-form-item label="序号" prop="seqNo">
<el-input v-model="editForm.seqNo" placeholder="如1.0 , 1.1 , 1.1.1等" ></el-input> <el-input v-model="editForm.seqNo" placeholder="如1.0 , 1.1 , 1.1.1等" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="故事名称" prop="menuName">
<el-input v-model="editForm.menuName" placeholder="故事名称" ></el-input>
<el-form-item label="需求名称" prop="menuName">
<el-input v-model="editForm.menuName" placeholder="需求名称" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="负责人" prop="mmUserid"> <el-form-item label="负责人" prop="mmUserid">
<el-tag v-if="editForm.mmUserid" closable @close="clearPmUser">{{editForm.mmUsername}}</el-tag> <el-tag v-if="editForm.mmUserid" closable @close="clearPmUser">{{editForm.mmUsername}}</el-tag>
@ -91,10 +91,10 @@ import XmMenuOverview from './XmMenuOverview.vue';
load:{ list: false, add: false, del: false, edit: false },//... load:{ list: false, add: false, del: false, edit: false },//...
editFormRules: { editFormRules: {
menuId: [ menuId: [
//{ required: true, message: '', trigger: 'blur' }
//{ required: true, message: '', trigger: 'blur' }
], ],
menuName: [ menuName: [
{ required: true, message: '故事名称不能为空', trigger: 'blur' }
{ required: true, message: '需求名称不能为空', trigger: 'blur' }
], ],
seqNo: [ seqNo: [
{ required: true, message: '序号不能为空', trigger: 'blur' } { required: true, message: '序号不能为空', trigger: 'blur' }
@ -103,7 +103,7 @@ import XmMenuOverview from './XmMenuOverview.vue';
{ required: true, message: '负责人不能为空', trigger: 'blur' } { required: true, message: '负责人不能为空', trigger: 'blur' }
], ],
}, },
//
//
editForm: { editForm: {
menuId:'',menuName:'',pmenuId:'',productId:'',remark:'',status:'',online:'',demandUrl:'',codeUrl:'',designUrl:'',docUrl:'',helpUrl:'',operDocUrl:'',seqNo:'1',mmUserid:'',mmUsername:'' menuId:'',menuName:'',pmenuId:'',productId:'',remark:'',status:'',online:'',demandUrl:'',codeUrl:'',designUrl:'',docUrl:'',helpUrl:'',operDocUrl:'',seqNo:'1',mmUserid:'',mmUsername:''
}, },
@ -118,11 +118,11 @@ import XmMenuOverview from './XmMenuOverview.vue';
handleCancel:function(){ handleCancel:function(){
this.$emit('cancel'); this.$emit('cancel');
}, },
//XmMenu @submit="afterAddSubmit"
//XmMenu @submit="afterAddSubmit"
editSubmit: function () { editSubmit: function () {
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
this.$refs.editForm.validate((valid) => { this.$refs.editForm.validate((valid) => {

54
src/views/xm/core/xmMenu/XmMenuMng.vue

@ -7,14 +7,14 @@
<el-col :span="xmProduct?24:19" class="padding-left"> <el-col :span="xmProduct?24:19" class="padding-left">
<el-row> <el-row>
<el-select v-model="filters.taskFilterType" placeholder="是否分配了任务?" clearable > <el-select v-model="filters.taskFilterType" placeholder="是否分配了任务?" clearable >
<el-option value="not-join" label="未分配任何任务的故事"></el-option>
<el-option value="join" label="已分配任务的故事"></el-option>
<el-option value="not-join" label="未分配任何任务的需求"></el-option>
<el-option value="join" label="已分配任务的需求"></el-option>
</el-select> </el-select>
<el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询" clearable> <el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询" clearable>
</el-input> </el-input>
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmMenus" icon="el-icon-search"></el-button> <el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmMenus" icon="el-icon-search"></el-button>
<el-button v-if="!selProject&&!xmIteration&&disabledMng!=false" type="primary" @click="showAdd" icon="el-icon-plus">故事</el-button>
<el-button v-if="!selProject&&!xmIteration&&disabledMng!=false" type="primary" @click="showAdd" icon="el-icon-plus">需求</el-button>
<el-button v-if="!selProject&&!xmIteration&&disabledMng!=false" @click="toBatchEdit" icon="el-icon-edit">修改</el-button> <el-button v-if="!selProject&&!xmIteration&&disabledMng!=false" @click="toBatchEdit" icon="el-icon-edit">修改</el-button>
<el-button v-if=" batchEditVisible==false&&disabledMng!=false " @click="loadTasksToXmMenuState" icon="el-icon-s-marketing">进度</el-button> <el-button v-if=" batchEditVisible==false&&disabledMng!=false " @click="loadTasksToXmMenuState" icon="el-icon-s-marketing">进度</el-button>
@ -26,14 +26,14 @@
<el-row> <el-row>
<el-col :span="24" style="padding-top:5px;" > <el-col :span="24" style="padding-top:5px;" >
<el-select v-model="filters.iterationFilterType" placeholder="是否加入过迭代?" clearable > <el-select v-model="filters.iterationFilterType" placeholder="是否加入过迭代?" clearable >
<el-option value="not-join" label="未加入任何迭代的故事"></el-option>
<el-option value="join" label="已加入迭代的故事"></el-option>
<el-option value="not-join" label="未加入任何迭代的需求"></el-option>
<el-option value="join" label="已加入迭代的需求"></el-option>
</el-select> </el-select>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-select v-model="filters.taskFilterType" placeholder="是否分配了任务?" clearable > <el-select v-model="filters.taskFilterType" placeholder="是否分配了任务?" clearable >
<el-option value="not-join" label="未分配任何任务的故事"></el-option>
<el-option value="join" label="已分配任务的故事"></el-option>
<el-option value="not-join" label="未分配任何任务的需求"></el-option>
<el-option value="join" label="已分配任务的需求"></el-option>
</el-select> </el-select>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
@ -61,9 +61,9 @@
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<font class="more-label-font"> <font class="more-label-font">
故事名称:
需求名称:
</font> </font>
<el-input v-model="filters.key" style="width:100%;" placeholder="输入故事名字关键字" clearable>
<el-input v-model="filters.key" style="width:100%;" placeholder="输入需求名字关键字" clearable>
</el-input> </el-input>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
@ -86,13 +86,13 @@
<el-row class="padding-top"> <el-row class="padding-top">
<el-table lazy :load="loadMenusLazy" stripe fit border ref="table" :max-height="tableHeight" :data="xmMenusTreeData" row-key="menuId" :tree-props="{children: 'children', hasChildren: 'childrenCnt'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" @selection-change="selsChange" @row-click="rowClick"> <el-table lazy :load="loadMenusLazy" stripe fit border ref="table" :max-height="tableHeight" :data="xmMenusTreeData" row-key="menuId" :tree-props="{children: 'children', hasChildren: 'childrenCnt'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" @selection-change="selsChange" @row-click="rowClick">
<el-table-column sortable type="selection" width="40"></el-table-column> <el-table-column sortable type="selection" width="40"></el-table-column>
<el-table-column prop="menuName" label="故事名称" min-width="160" show-overflow-tooltip>
<el-table-column prop="menuName" label="需求名称" min-width="160" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<el-link type="primary" @click="showEdit(scope.row)" :icon="scope.row.ntype=='1'?'el-icon-folder-opened':''">{{scope.row.seqNo}}&nbsp;&nbsp;{{scope.row.menuName}}</el-link> <el-link type="primary" @click="showEdit(scope.row)" :icon="scope.row.ntype=='1'?'el-icon-folder-opened':''">{{scope.row.seqNo}}&nbsp;&nbsp;{{scope.row.menuName}}</el-link>
<font class="align-right"> <font class="align-right">
<el-popover <el-popover
placement="top-start" placement="top-start"
title="故事备注"
title="需求备注"
width="400" width="400"
trigger="click" > trigger="click" >
<div v-html="scope.row.remark"> <div v-html="scope.row.remark">
@ -126,10 +126,10 @@
trigger="click" > trigger="click" >
<el-row> <el-row>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-button @click="showSubAdd( scope.row,scope.$index)" icon="el-icon-plus">直接添加子故事</el-button>
<el-button @click="showSubAdd( scope.row,scope.$index)" icon="el-icon-plus">直接添加子需求</el-button>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-button @click="showImportFromMenuTemplate(scope.row)" icon="el-icon-upload2">由模板快速导入子故事</el-button>
<el-button @click="showImportFromMenuTemplate(scope.row)" icon="el-icon-upload2">由模板快速导入子需求</el-button>
</el-col> </el-col>
</el-row> </el-row>
<el-button type="primary" :disabled="scope.row.ntype!='1'" slot="reference" icon="el-icon-plus"></el-button> <el-button type="primary" :disabled="scope.row.ntype!='1'" slot="reference" icon="el-icon-plus"></el-button>
@ -148,19 +148,19 @@
</el-row> </el-row>
<!--编辑 XmMenu xm_project_menu界面--> <!--编辑 XmMenu xm_project_menu界面-->
<el-drawer title="编辑故事" :visible.sync="editFormVisible" :with-header="false" size="50%" append-to-body :close-on-click-modal="false">
<el-drawer title="编辑需求" :visible.sync="editFormVisible" :with-header="false" size="50%" append-to-body :close-on-click-modal="false">
<xm-menu-edit :xm-menu="editForm" :visible="editFormVisible" @cancel="editFormVisible=false" @submit="afterEditSubmit"></xm-menu-edit> <xm-menu-edit :xm-menu="editForm" :visible="editFormVisible" @cancel="editFormVisible=false" @submit="afterEditSubmit"></xm-menu-edit>
</el-drawer> </el-drawer>
<!--新增 XmMenu xm_project_menu界面--> <!--新增 XmMenu xm_project_menu界面-->
<el-drawer title="新增故事" :visible.sync="addFormVisible" :with-header="false" size="50%" append-to-body :close-on-click-modal="false">
<el-drawer title="新增需求" :visible.sync="addFormVisible" :with-header="false" size="50%" append-to-body :close-on-click-modal="false">
<xm-menu-add :product="filters.product" :parent-menu="parentMenu" :xm-menu="addForm" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-menu-add> <xm-menu-add :product="filters.product" :parent-menu="parentMenu" :xm-menu="addForm" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-menu-add>
</el-drawer> </el-drawer>
<el-drawer title="故事模板" :visible.sync="menuTemplateVisible" size="80%" append-to-body :close-on-click-modal="false">
<el-drawer title="需求模板" :visible.sync="menuTemplateVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-menu-template-mng :is-select-menu="true" :visible="menuTemplateVisible" @cancel="menuTemplateVisible=false" @selected-menus="onSelectedMenuTemplates"></xm-menu-template-mng> <xm-menu-template-mng :is-select-menu="true" :visible="menuTemplateVisible" @cancel="menuTemplateVisible=false" @selected-menus="onSelectedMenuTemplates"></xm-menu-template-mng>
</el-drawer> </el-drawer>
<el-drawer title="故事谈论" :visible.sync=" menuDetailVisible" size="80%" append-to-body :close-on-click-modal="false">
<el-drawer title="需求谈论" :visible.sync=" menuDetailVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-menu-rich-detail :visible="menuDetailVisible" :reload="false" :xm-menu="editForm" ></xm-menu-rich-detail> <xm-menu-rich-detail :visible="menuDetailVisible" :reload="false" :xm-menu="editForm" ></xm-menu-rich-detail>
</el-drawer> </el-drawer>
@ -183,7 +183,7 @@
</el-drawer> </el-drawer>
<el-drawer <el-drawer
append-to-body append-to-body
title="故事关联的迭代查询"
title="需求关联的迭代查询"
:with-header="false" :with-header="false"
size="80%" size="80%"
:visible.sync="iterationVisible" :visible.sync="iterationVisible"
@ -473,7 +473,7 @@
// XmMenu xm_project_menu // XmMenu xm_project_menu
showAdd: function () { showAdd: function () {
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
if(this.filters.product==null){ if(this.filters.product==null){
@ -486,7 +486,7 @@
}, },
showSubAdd:function(row){ showSubAdd:function(row){
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
this.editForm=row this.editForm=row
@ -520,7 +520,7 @@
//xmMenu //xmMenu
handleDel: function (row,index) { handleDel: function (row,index) {
if(row.mmUserid!=this.userInfo.userid){ if(row.mmUserid!=this.userInfo.userid){
this.$message({showClose: true, message: "只能操作你负责的故事", type: 'error'});
this.$message({showClose: true, message: "只能操作你负责的需求", type: 'error'});
return false; return false;
} }
this.$confirm('确认删除该记录吗?', '提示', { this.$confirm('确认删除该记录吗?', '提示', {
@ -543,7 +543,7 @@
batchDel: function () { batchDel: function () {
var mmSels=this.sels.filter(i=>i.mmUserid!=this.userInfo.userid) var mmSels=this.sels.filter(i=>i.mmUserid!=this.userInfo.userid)
if(mmSels.length>0){ if(mmSels.length>0){
this.$message({showClose: true, message: "只能操作你负责的故事", type: 'error'});
this.$message({showClose: true, message: "只能操作你负责的需求", type: 'error'});
return false; return false;
} }
this.$confirm('确认删除选中记录吗?', '提示', { this.$confirm('确认删除选中记录吗?', '提示', {
@ -568,9 +568,9 @@
handleExport() { handleExport() {
this.downloadLoading = true this.downloadLoading = true
const pageNum = this.pageInfo.pageNum; const pageNum = this.pageInfo.pageNum;
const header = ['故事名称', '负责人', '总体进度', '描述'];
const header = ['需求名称', '负责人', '总体进度', '描述'];
const keyList = ['menuName', 'mmUsername', 'finishRate', 'remark']; const keyList = ['menuName', 'mmUsername', 'finishRate', 'remark'];
const filename = `故事管理_${this.filters.product.productName}_第${pageNum}`;
const filename = `需求管理_${this.filters.product.productName}_第${pageNum}`;
const data = this.formatJson(keyList, this.xmMenusTreeData); const data = this.formatJson(keyList, this.xmMenusTreeData);
import('@/vendor/Export2Excel').then(excel => { import('@/vendor/Export2Excel').then(excel => {
excel.export_json_to_excel({ excel.export_json_to_excel({
@ -653,7 +653,7 @@
showImportFromMenuTemplate(row){ showImportFromMenuTemplate(row){
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
if(!this.filters.product){ if(!this.filters.product){
@ -731,7 +731,7 @@
toBatchEdit(){ toBatchEdit(){
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
this.batchEditVisible=true; this.batchEditVisible=true;
@ -745,7 +745,7 @@
showTaskList(row){ showTaskList(row){
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
this.editForm=row this.editForm=row

50
src/views/xm/core/xmMenu/XmMenuMngBatch.vue

@ -3,8 +3,8 @@
<el-row> <el-row>
<el-row > <el-row >
<el-select class="hidden-lg-and-down" v-model="filters.taskFilterType" placeholder="是否分配了任务?" clearable > <el-select class="hidden-lg-and-down" v-model="filters.taskFilterType" placeholder="是否分配了任务?" clearable >
<el-option value="not-join" label="未分配任何任务的故事"></el-option>
<el-option value="join" label="已分配任务的故事"></el-option>
<el-option value="not-join" label="未分配任何任务的需求"></el-option>
<el-option value="join" label="已分配任务的需求"></el-option>
</el-select> </el-select>
<el-date-picker <el-date-picker
v-model="dateRanger" v-model="dateRanger"
@ -27,7 +27,7 @@
<el-button type="warning" @click="batchSaveMenu" icon="el-icon-finished">保存</el-button> <el-button type="warning" @click="batchSaveMenu" icon="el-icon-finished">保存</el-button>
<el-button type="success" @click="handlePopover(null,'add')" icon="el-icon-plus">故事</el-button>
<el-button type="success" @click="handlePopover(null,'add')" icon="el-icon-plus">需求</el-button>
<el-button @click="noBatchEdit" icon="el-icon-back">返回</el-button> <el-button @click="noBatchEdit" icon="el-icon-back">返回</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true" icon="el-icon-delete"></el-button> <el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true" icon="el-icon-delete"></el-button>
@ -40,14 +40,14 @@
<el-row> <el-row>
<el-col :span="24" style="padding-top:5px;" > <el-col :span="24" style="padding-top:5px;" >
<el-select v-model="filters.iterationFilterType" placeholder="是否加入过迭代?" clearable > <el-select v-model="filters.iterationFilterType" placeholder="是否加入过迭代?" clearable >
<el-option value="not-join" label="未加入任何迭代的故事"></el-option>
<el-option value="join" label="已加入迭代的故事"></el-option>
<el-option value="not-join" label="未加入任何迭代的需求"></el-option>
<el-option value="join" label="已加入迭代的需求"></el-option>
</el-select> </el-select>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-select v-model="filters.taskFilterType" placeholder="是否分配了任务?" clearable > <el-select v-model="filters.taskFilterType" placeholder="是否分配了任务?" clearable >
<el-option value="not-join" label="未分配任何任务的故事"></el-option>
<el-option value="join" label="已分配任务的故事"></el-option>
<el-option value="not-join" label="未分配任何任务的需求"></el-option>
<el-option value="join" label="已分配任务的需求"></el-option>
</el-select> </el-select>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
@ -75,9 +75,9 @@
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<font class="more-label-font"> <font class="more-label-font">
故事名称:
需求名称:
</font> </font>
<el-input v-model="filters.key" style="width:100%;" placeholder="输入故事名字关键字" clearable>
<el-input v-model="filters.key" style="width:100%;" placeholder="输入需求名字关键字" clearable>
</el-input> </el-input>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
@ -115,7 +115,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="menuName" label="故事名称" min-width="140" show-overflow-tooltip>
<el-table-column prop="menuName" label="需求名称" min-width="140" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<el-input v-model="scope.row.menuName" @change="fieldChange(scope.row,'menuName')"></el-input> <el-input v-model="scope.row.menuName" @change="fieldChange(scope.row,'menuName')"></el-input>
</template> </template>
@ -138,19 +138,19 @@
</el-row> </el-row>
<!--编辑 XmMenu xm_project_menu界面--> <!--编辑 XmMenu xm_project_menu界面-->
<el-drawer title="编辑故事" :visible.sync="editFormVisible" size="50%" append-to-body :close-on-click-modal="false">
<el-drawer title="编辑需求" :visible.sync="editFormVisible" size="50%" append-to-body :close-on-click-modal="false">
<xm-menu-edit :xm-menu="editForm" :visible="editFormVisible" @cancel="editFormVisible=false" @submit="afterEditSubmit"></xm-menu-edit> <xm-menu-edit :xm-menu="editForm" :visible="editFormVisible" @cancel="editFormVisible=false" @submit="afterEditSubmit"></xm-menu-edit>
</el-drawer> </el-drawer>
<!--新增 XmMenu xm_project_menu界面--> <!--新增 XmMenu xm_project_menu界面-->
<el-drawer title="新增故事" :visible.sync="addFormVisible" size="50%" append-to-body :close-on-click-modal="false">
<el-drawer title="新增需求" :visible.sync="addFormVisible" size="50%" append-to-body :close-on-click-modal="false">
<xm-menu-add :product="filters.product" :parent-menu="parentMenu" :xm-menu="addForm" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-menu-add> <xm-menu-add :product="filters.product" :parent-menu="parentMenu" :xm-menu="addForm" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-menu-add>
</el-drawer> </el-drawer>
<el-drawer title="故事模板" :visible.sync="menuTemplateVisible" size="80%" append-to-body :close-on-click-modal="false">
<el-drawer title="需求模板" :visible.sync="menuTemplateVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-menu-template-mng :is-select-menu="true" :visible="menuTemplateVisible" @cancel="menuTemplateVisible=false" @selected-menus="onSelectedMenuTemplates"></xm-menu-template-mng> <xm-menu-template-mng :is-select-menu="true" :visible="menuTemplateVisible" @cancel="menuTemplateVisible=false" @selected-menus="onSelectedMenuTemplates"></xm-menu-template-mng>
</el-drawer> </el-drawer>
<el-drawer title="故事谈论" :visible.sync=" menuDetailVisible" size="80%" append-to-body :close-on-click-modal="false">
<el-drawer title="需求谈论" :visible.sync=" menuDetailVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-menu-rich-detail :visible="menuDetailVisible" :reload="false" :xm-menu="editForm" ></xm-menu-rich-detail> <xm-menu-rich-detail :visible="menuDetailVisible" :reload="false" :xm-menu="editForm" ></xm-menu-rich-detail>
</el-drawer> </el-drawer>
@ -169,7 +169,7 @@
</el-drawer> </el-drawer>
<el-drawer <el-drawer
append-to-body append-to-body
title="故事关联的迭代查询"
title="需求关联的迭代查询"
:visible.sync="iterationVisible" :visible.sync="iterationVisible"
> >
<xm-iteration-mng :visible="iterationVisible" :product-id="editForm.productId" :menu-id="editForm.menuId" ></xm-iteration-mng> <xm-iteration-mng :visible="iterationVisible" :product-id="editForm.productId" :menu-id="editForm.menuId" ></xm-iteration-mng>
@ -398,7 +398,7 @@
// XmMenu xm_project_menu // XmMenu xm_project_menu
showAdd: function () { showAdd: function () {
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
if(this.filters.product==null){ if(this.filters.product==null){
@ -411,7 +411,7 @@
}, },
showSubAdd:function(row){ showSubAdd:function(row){
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
this.editForm=row this.editForm=row
@ -442,7 +442,7 @@
//xmMenu //xmMenu
handleDel: function (row,index) { handleDel: function (row,index) {
if(row.mmUserid!=this.userInfo.userid){ if(row.mmUserid!=this.userInfo.userid){
this.$message({showClose: true, message: "只能操作你负责的故事", type: 'error'});
this.$message({showClose: true, message: "只能操作你负责的需求", type: 'error'});
return false; return false;
} }
this.$confirm('确认删除该记录吗?', '提示', { this.$confirm('确认删除该记录吗?', '提示', {
@ -465,7 +465,7 @@
batchDel: function () { batchDel: function () {
var mmSels=this.sels.filter(i=>i.mmUserid!=this.userInfo.userid) var mmSels=this.sels.filter(i=>i.mmUserid!=this.userInfo.userid)
if(mmSels.length>0){ if(mmSels.length>0){
this.$message({showClose: true, message: "只能操作你负责的故事", type: 'error'});
this.$message({showClose: true, message: "只能操作你负责的需求", type: 'error'});
return false; return false;
} }
this.$confirm('确认删除选中记录吗?', '提示', { this.$confirm('确认删除选中记录吗?', '提示', {
@ -643,9 +643,9 @@
handleExport() { handleExport() {
this.downloadLoading = true this.downloadLoading = true
const pageNum = this.pageInfo.pageNum; const pageNum = this.pageInfo.pageNum;
const header = ['故事名称', '负责人', '总体进度', '描述'];
const header = ['需求名称', '负责人', '总体进度', '描述'];
const keyList = ['menuName', 'mmUsername', 'finishRate', 'remark']; const keyList = ['menuName', 'mmUsername', 'finishRate', 'remark'];
const filename = `故事管理_${this.filters.product.productName}_第${pageNum}`;
const filename = `需求管理_${this.filters.product.productName}_第${pageNum}`;
const data = this.formatJson(keyList, this.xmMenusTreeData); const data = this.formatJson(keyList, this.xmMenusTreeData);
import('@/vendor/Export2Excel').then(excel => { import('@/vendor/Export2Excel').then(excel => {
excel.export_json_to_excel({ excel.export_json_to_excel({
@ -756,7 +756,7 @@
showImportFromMenuTemplate(row){ showImportFromMenuTemplate(row){
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
if(!this.filters.product){ if(!this.filters.product){
@ -834,7 +834,7 @@
toBatchEdit(){ toBatchEdit(){
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
this.valueChangeRows=[]; this.valueChangeRows=[];
@ -849,7 +849,7 @@
batchSaveMenu(){ batchSaveMenu(){
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
if(this.valueChangeRows.length==0){ if(this.valueChangeRows.length==0){
@ -898,7 +898,7 @@
showTaskList(row){ showTaskList(row){
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
this.editForm=row this.editForm=row

6
src/views/xm/core/xmMenu/XmMenuOverview.vue

@ -23,14 +23,14 @@
<el-col :span="12" > <el-col :span="12" >
<el-card class="box-card" style="padding:0px ;height:425px"> <el-card class="box-card" style="padding:0px ;height:425px">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>故事信息</span>
<span>需求信息</span>
</div> </div>
<el-row style="margin-bottom:18px"> <el-row style="margin-bottom:18px">
<el-row> <el-row>
<span v-text="this.xmMenu.mmUsername"></span> <span v-text="this.xmMenu.mmUsername"></span>
</el-row> </el-row>
<el-row> <el-row>
<span>故事管理员</span>
<span>需求管理员</span>
</el-row> </el-row>
</el-row> </el-row>
<el-row style="margin-bottom:18px"> <el-row style="margin-bottom:18px">
@ -78,7 +78,7 @@
<div class="info"> <div class="info">
<div v-text="menuStartTime+'~'+menuEndTime"> <div v-text="menuStartTime+'~'+menuEndTime">
</div> </div>
<div class="title">故事计划周期</div>
<div class="title">需求计划周期</div>
</div> </div>
</div> </div>
</el-row> </el-row>

8
src/views/xm/core/xmMenu/XmMenuRichDetail.vue

@ -80,10 +80,10 @@
load:{ list: false, edit: false, del: false, add: false },//... load:{ list: false, edit: false, del: false, add: false },//...
editFormRules: { editFormRules: {
menuId: [ menuId: [
{ required: true, message: '故事编号不能为空', trigger: 'blur' }
{ required: true, message: '需求编号不能为空', trigger: 'blur' }
], ],
menuName: [ menuName: [
{ required: true, message: '故事编号不能为空', trigger: 'blur' }
{ required: true, message: '需求编号不能为空', trigger: 'blur' }
], ],
productId: [ productId: [
{ required: true, message: '产品编号不能为空', trigger: 'blur' } { required: true, message: '产品编号不能为空', trigger: 'blur' }
@ -92,7 +92,7 @@
{ required: true, message: '序号不能为空', trigger: 'blur' } { required: true, message: '序号不能为空', trigger: 'blur' }
], ],
}, },
// XmMenu
// XmMenu
editForm: { editForm: {
menuId:'',menuName:'',pmenuId:'',productId:'',remark:'',status:'',online:'',demandUrl:'',codeUrl:'',designUrl:'',docUrl:'',helpUrl:'',operDocUrl:'',seqNo:'',mmUserid:'',mmUsername:'' menuId:'',menuName:'',pmenuId:'',productId:'',remark:'',status:'',online:'',demandUrl:'',codeUrl:'',designUrl:'',docUrl:'',helpUrl:'',operDocUrl:'',seqNo:'',mmUserid:'',mmUsername:''
}, },
@ -109,7 +109,7 @@
this.$refs['editForm'].resetFields(); this.$refs['editForm'].resetFields();
this.$emit('cancel'); this.$emit('cancel');
}, },
//XmMenu @submit="afterEditSubmit"
//XmMenu @submit="afterEditSubmit"
editSubmit: function () { editSubmit: function () {
this.$refs.editForm.validate((valid) => { this.$refs.editForm.validate((valid) => {
if (valid) { if (valid) {

26
src/views/xm/core/xmMenu/XmMenuSelect.vue

@ -9,14 +9,14 @@
<el-col :span="18" style="padding-left:12px;" > <el-col :span="18" style="padding-left:12px;" >
<el-row > <el-row >
<el-select class="hidden-md-and-down" v-if="excludeIterationId" v-model="filters.iterationFilterType" placeholder="是否加入过迭代?" clearable > <el-select class="hidden-md-and-down" v-if="excludeIterationId" v-model="filters.iterationFilterType" placeholder="是否加入过迭代?" clearable >
<el-option value="not-join" label="未加入任何迭代的故事"></el-option>
<el-option value="join" label="已加入迭代的故事"></el-option>
<el-option value="not-join" label="未加入任何迭代的需求"></el-option>
<el-option value="join" label="已加入迭代的需求"></el-option>
</el-select> </el-select>
<el-select class="hidden-md-and-down" v-else v-model="filters.taskFilterType" placeholder="是否分配了任务?" clearable > <el-select class="hidden-md-and-down" v-else v-model="filters.taskFilterType" placeholder="是否分配了任务?" clearable >
<el-option value="not-join" label="未分配任何任务的故事"></el-option>
<el-option value="join" label="已分配任务的故事"></el-option>
<el-option value="not-join" label="未分配任何任务的需求"></el-option>
<el-option value="join" label="已分配任务的需求"></el-option>
</el-select> </el-select>
<el-input v-model="filters.key" closable style="width: 20%;" placeholder="故事名查询">
<el-input v-model="filters.key" closable style="width: 20%;" placeholder="需求名查询">
</el-input> </el-input>
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmMenus" icon="el-icon-search"></el-button> <el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmMenus" icon="el-icon-search"></el-button>
<el-popover <el-popover
@ -27,14 +27,14 @@
<el-row> <el-row>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-select v-model="filters.iterationFilterType" placeholder="是否加入过迭代?" clearable > <el-select v-model="filters.iterationFilterType" placeholder="是否加入过迭代?" clearable >
<el-option value="not-join" label="未加入任何迭代的故事"></el-option>
<el-option value="join" label="已加入迭代的故事"></el-option>
<el-option value="not-join" label="未加入任何迭代的需求"></el-option>
<el-option value="join" label="已加入迭代的需求"></el-option>
</el-select> </el-select>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-select v-model="filters.taskFilterType" placeholder="是否分配了任务?" clearable > <el-select v-model="filters.taskFilterType" placeholder="是否分配了任务?" clearable >
<el-option value="not-join" label="未分配任何任务的故事"></el-option>
<el-option value="join" label="已分配任务的故事"></el-option>
<el-option value="not-join" label="未分配任何任务的需求"></el-option>
<el-option value="join" label="已分配任务的需求"></el-option>
</el-select> </el-select>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
@ -62,9 +62,9 @@
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<font class="more-label-font"> <font class="more-label-font">
故事名称:
需求名称:
</font> </font>
<el-input v-model="filters.key" style="width:100%;" placeholder="输入故事名字关键字" clearable>
<el-input v-model="filters.key" style="width:100%;" placeholder="输入需求名字关键字" clearable>
</el-input> </el-input>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
@ -78,7 +78,7 @@
<el-row style="padding-top:12px;"> <el-row style="padding-top:12px;">
<el-table ref="table" lazy :load="loadMenusLazy" :height="tableHeight" :data="xmMenusTreeData" default-expand-all row-key="menuId" :tree-props="{children: 'children', hasChildren: 'childrenCnt'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;"> <el-table ref="table" lazy :load="loadMenusLazy" :height="tableHeight" :data="xmMenusTreeData" default-expand-all row-key="menuId" :tree-props="{children: 'children', hasChildren: 'childrenCnt'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column v-if="multi" type="selection" width="50"></el-table-column> <el-table-column v-if="multi" type="selection" width="50"></el-table-column>
<el-table-column prop="menuName" label="故事名称" min-width="140" >
<el-table-column prop="menuName" label="需求名称" min-width="140" >
<template slot-scope="scope"> <template slot-scope="scope">
<el-link :icon="scope.row.ntype=='1'?'el-icon-folder-opened':''" @click="toMenu(scope.row)">{{scope.row.seqNo}}&nbsp;&nbsp;{{scope.row.menuName}}</el-link> <el-link :icon="scope.row.ntype=='1'?'el-icon-folder-opened':''" @click="toMenu(scope.row)">{{scope.row.seqNo}}&nbsp;&nbsp;{{scope.row.menuName}}</el-link>
</template> </template>
@ -100,7 +100,7 @@
<el-drawer title="选择员工" :visible.sync="selectFiltersMmUserVisible" size="60%" append-to-body> <el-drawer title="选择员工" :visible.sync="selectFiltersMmUserVisible" size="60%" append-to-body>
<users-select @confirm="onFiltersMmUserSelected" ref="selectFiltersMmUser"></users-select> <users-select @confirm="onFiltersMmUserSelected" ref="selectFiltersMmUser"></users-select>
</el-drawer> </el-drawer>
<el-drawer title="故事谈论" :visible.sync=" menuDetailVisible" size="80%" append-to-body :close-on-click-modal="false">
<el-drawer title="需求谈论" :visible.sync=" menuDetailVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-menu-rich-detail :visible="menuDetailVisible" :reload="false" :xm-menu="editForm" ></xm-menu-rich-detail> <xm-menu-rich-detail :visible="menuDetailVisible" :reload="false" :xm-menu="editForm" ></xm-menu-rich-detail>
</el-drawer> </el-drawer>
</el-row> </el-row>

10
src/views/xm/core/xmMenu/XmMenuWithPlan.vue

@ -16,7 +16,7 @@
<el-row class="page-main" v-show="!batchEditVisible"> <el-row class="page-main" v-show="!batchEditVisible">
<el-table ref="table" :height="tableHeight" v-if="!gstcVisible" :data="xmMenusTreeData" default-expand-all row-key="menuId" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;"> <el-table ref="table" :height="tableHeight" v-if="!gstcVisible" :data="xmMenusTreeData" default-expand-all row-key="menuId" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column> <el-table-column sortable type="selection" width="40"></el-table-column>
<el-table-column prop="menuName" label="故事名称" min-width="150" >
<el-table-column prop="menuName" label="需求名称" min-width="150" >
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.seqNo}}&nbsp;<el-link type="primary" @click="toMenu(scope.row)"> {{scope.row.menuName}} </el-link> {{scope.row.seqNo}}&nbsp;<el-link type="primary" @click="toMenu(scope.row)"> {{scope.row.menuName}} </el-link>
</template> </template>
@ -96,7 +96,7 @@
<el-row v-show="batchEditVisible"> <el-row v-show="batchEditVisible">
<el-table lazy :load="loadMenusLazy" :height="tableHeight" :data="xmMenusTreeData" row-key="menuId" :tree-props="{children: 'children', hasChildren: 'childrenCnt'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;"> <el-table lazy :load="loadMenusLazy" :height="tableHeight" :data="xmMenusTreeData" row-key="menuId" :tree-props="{children: 'children', hasChildren: 'childrenCnt'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column prop="menuName" label="故事名称" min-width="150" >
<el-table-column prop="menuName" label="需求名称" min-width="150" >
<template slot-scope="scope"> <template slot-scope="scope">
<el-link :icon="scope.row.ntype=='1'?'el-icon-folder-opened':''">{{scope.row.seqNo}}&nbsp;&nbsp;{{scope.row.menuName}}</el-link> <el-link :icon="scope.row.ntype=='1'?'el-icon-folder-opened':''">{{scope.row.seqNo}}&nbsp;&nbsp;{{scope.row.menuName}}</el-link>
</template> </template>
@ -155,7 +155,7 @@
<xm-task-mng :sel-project="selProject" :menu-id="editForm.menuId"></xm-task-mng> <xm-task-mng :sel-project="selProject" :menu-id="editForm.menuId"></xm-task-mng>
</el-drawer> </el-drawer>
<el-drawer title="故事谈论" :visible.sync=" menuDetailVisible" size="80%" append-to-body :close-on-click-modal="false">
<el-drawer title="需求谈论" :visible.sync=" menuDetailVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-menu-rich-detail :visible="menuDetailVisible" :reload="false" :xm-menu="editForm" ></xm-menu-rich-detail> <xm-menu-rich-detail :visible="menuDetailVisible" :reload="false" :xm-menu="editForm" ></xm-menu-rich-detail>
</el-drawer> </el-drawer>
</section> </section>
@ -401,7 +401,7 @@
//xmMenu //xmMenu
batchDel: function () { batchDel: function () {
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
@ -495,7 +495,7 @@
}, },
showBatchEdit:function(){ showBatchEdit:function(){
if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){ if(!this.roles.some(i=>i.roleid=='productAdmin') && !this.roles.some(i=>i.roleid=='productTeamAdmin')){
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改故事", type: 'error'});
this.$message({showClose: true, message: "只有产品经理、产品组长能够修改需求", type: 'error'});
return false; return false;
} }
if(this.xmMenus.length==0 ){ if(this.xmMenus.length==0 ){

12
src/views/xm/core/xmMenuExchange/XmMenuExchangeMng.vue

@ -7,7 +7,7 @@
<el-divider></el-divider> <el-divider></el-divider>
</el-row> </el-row>
<el-row class="page-main" v-if="!xmMenu && !simple"> <el-row class="page-main" v-if="!xmMenu && !simple">
<h1 v-if="filters.xmMenu">{{filters.xmMenu.menuName}}</h1> <el-button @click="showSelectMenu">选择用户故事</el-button>
<h1 v-if="filters.xmMenu">{{filters.xmMenu.menuName}}</h1> <el-button @click="showSelectMenu">选择需求</el-button>
<el-divider v-if="filters.xmMenu"></el-divider> <el-divider v-if="filters.xmMenu"></el-divider>
<div v-if="filters.xmMenu" v-html="filters.xmMenu.remark"></div> <div v-if="filters.xmMenu" v-html="filters.xmMenu.remark"></div>
<el-divider></el-divider> <el-divider></el-divider>
@ -52,7 +52,7 @@
</div> </div>
<el-drawer append-to-body title="故事选择" :visible.sync="xmMenuVisible" fullscreen :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="xmMenuVisible" fullscreen :close-on-click-modal="false">
<xm-menu-select :is-select-menu="true" @selected="onMenuSelected"></xm-menu-select> <xm-menu-select :is-select-menu="true" @selected="onMenuSelected"></xm-menu-select>
</el-drawer> </el-drawer>
</el-row> </el-row>
@ -148,7 +148,7 @@
this.pageInfo.count=true; this.pageInfo.count=true;
this.getXmMenuExchanges(); this.getXmMenuExchanges();
}, },
// XmMenuExchange
// XmMenuExchange
getXmMenuExchanges() { getXmMenuExchanges() {
let params = { let params = {
pageSize: this.pageInfo.pageSize, pageSize: this.pageInfo.pageSize,
@ -194,12 +194,12 @@
}).catch( err => this.load.list = false ); }).catch( err => this.load.list = false );
}, },
// XmMenuExchange
// XmMenuExchange
showEdit: function ( row,index ) { showEdit: function ( row,index ) {
this.editFormVisible = true; this.editFormVisible = true;
this.editForm = Object.assign({}, row); this.editForm = Object.assign({}, row);
}, },
// XmMenuExchange
// XmMenuExchange
showAdd: function () { showAdd: function () {
this.addFormVisible = true; this.addFormVisible = true;
//this.addForm=Object.assign({}, this.editForm); //this.addForm=Object.assign({}, this.editForm);
@ -263,7 +263,7 @@
params.remark=editor.content; params.remark=editor.content;
if(!parentXmMenuExchange && !this.xmMenu && !this.filters.xmMenu){ if(!parentXmMenuExchange && !this.xmMenu && !this.filters.xmMenu){
this.$message.error("请选择用户故事再发表评论")
this.$message.error("请选择需求再发表评论")
return; return;
} }
params.id=sn() params.id=sn()

6
src/views/xm/core/xmMenuState/XmMenuStateMng.vue

@ -11,7 +11,7 @@
<el-row class="page-main" v-show="!batchEditVisible"> <el-row class="page-main" v-show="!batchEditVisible">
<el-table ref="table" :height="tableHeight" :data="xmMenusTreeData" default-expand-all row-key="menuId" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;"> <el-table ref="table" :height="tableHeight" :data="xmMenusTreeData" default-expand-all row-key="menuId" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column> <el-table-column sortable type="selection" width="40"></el-table-column>
<el-table-column prop="menuName" label="故事名称" min-width="150" >
<el-table-column prop="menuName" label="需求名称" min-width="150" >
<template slot-scope="scope"> <template slot-scope="scope">
<el-link @click="toMenu(scope.row)"> {{scope.row.seqNo}}&nbsp;&nbsp;{{scope.row.menuName}} </el-link> <el-link @click="toMenu(scope.row)"> {{scope.row.seqNo}}&nbsp;&nbsp;{{scope.row.menuName}} </el-link>
</template> </template>
@ -91,7 +91,7 @@
<el-row v-show="batchEditVisible"> <el-row v-show="batchEditVisible">
<el-table :data="xmMenusTreeData" row-key="menuId" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;"> <el-table :data="xmMenusTreeData" row-key="menuId" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column prop="menuName" label="故事名称" min-width="150" >
<el-table-column prop="menuName" label="需求名称" min-width="150" >
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.seqNo}}&nbsp;&nbsp;{{scope.row.menuName}} <el-button v-if="scope.row.projectId" type="text" @click="showTasks(scope.row)">任务</el-button><el-tag v-else type="warning">未关联任务</el-tag> {{scope.row.seqNo}}&nbsp;&nbsp;{{scope.row.menuName}} <el-button v-if="scope.row.projectId" type="text" @click="showTasks(scope.row)">任务</el-button><el-tag v-else type="warning">未关联任务</el-tag>
</template> </template>
@ -144,7 +144,7 @@
<xm-task-mng :sel-project="selProject" :menu-id="editForm.menuId"></xm-task-mng> <xm-task-mng :sel-project="selProject" :menu-id="editForm.menuId"></xm-task-mng>
</el-drawer> </el-drawer>
<el-drawer title="故事谈论" :visible.sync=" menuDetailVisible" size="80%" append-to-body :close-on-click-modal="false">
<el-drawer title="需求谈论" :visible.sync=" menuDetailVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-menu-rich-detail :visible="menuDetailVisible" :reload="false" :xm-menu="editForm" ></xm-menu-rich-detail> <xm-menu-rich-detail :visible="menuDetailVisible" :reload="false" :xm-menu="editForm" ></xm-menu-rich-detail>
</el-drawer> </el-drawer>
</section> </section>

16
src/views/xm/core/xmMenuTemplate/XmMenuTemplateAdd.vue

@ -1,13 +1,13 @@
<template> <template>
<section class="page-container page-full-height padding border"> <section class="page-container page-full-height padding border">
<el-row> <el-row>
<!--新增界面 XmMenuTemplate 项目故事-->
<!--新增界面 XmMenuTemplate 项目需求-->
<el-form :model="addForm" label-width="120px" :rules="addFormRules" ref="addForm"> <el-form :model="addForm" label-width="120px" :rules="addFormRules" ref="addForm">
<el-form-item label="序号" prop="seqNo"> <el-form-item label="序号" prop="seqNo">
<el-input v-model="addForm.seqNo" placeholder="如1.0 , 1.1 , 1.1.1等" ></el-input> <el-input v-model="addForm.seqNo" placeholder="如1.0 , 1.1 , 1.1.1等" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="故事名称" prop="menuName">
<el-input v-model="addForm.menuName" placeholder="故事名称" ></el-input>
<el-form-item label="需求名称" prop="menuName">
<el-input v-model="addForm.menuName" placeholder="需求名称" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input type="textarea" v-model="addForm.remark" placeholder="什么人?做什么事?,为什么?如: 作为招聘专员,我需要统计员工半年在职/离职人数,以便我能够制定招聘计划" ></el-input> <el-input type="textarea" v-model="addForm.remark" placeholder="什么人?做什么事?,为什么?如: 作为招聘专员,我需要统计员工半年在职/离职人数,以便我能够制定招聘计划" ></el-input>
@ -52,16 +52,16 @@
load:{ list: false, edit: false, del: false, add: false },//... load:{ list: false, edit: false, del: false, add: false },//...
addFormRules: { addFormRules: {
menuId: [ menuId: [
//{ required: true, message: '', trigger: 'blur' }
//{ required: true, message: '', trigger: 'blur' }
], ],
menuName: [ menuName: [
{ required: true, message: '故事名称不能为空', trigger: 'blur' }
{ required: true, message: '需求名称不能为空', trigger: 'blur' }
], ],
seqNo: [ seqNo: [
{ required: true, message: '序号不能为空', trigger: 'blur' } { required: true, message: '序号不能为空', trigger: 'blur' }
], ],
}, },
//
//
addForm: { addForm: {
menuId:'',menuName:'',pmenuId:'',productId:'',remark:'',status:'',online:'',demandUrl:'',codeUrl:'',designUrl:'',docUrl:'',helpUrl:'',operDocUrl:'' menuId:'',menuName:'',pmenuId:'',productId:'',remark:'',status:'',online:'',demandUrl:'',codeUrl:'',designUrl:'',docUrl:'',helpUrl:'',operDocUrl:''
} }
@ -76,10 +76,10 @@
this.$refs['addForm'].resetFields(); this.$refs['addForm'].resetFields();
this.$emit('cancel'); this.$emit('cancel');
}, },
//XmMenuTemplate @submit="afterAddSubmit"
//XmMenuTemplate @submit="afterAddSubmit"
addSubmit: function () { addSubmit: function () {
if(this.parentMenu==null && this.product ==null ){ if(this.parentMenu==null && this.product ==null ){
this.$message({showClose: true, message: '请选择产品/或者上级故事进行新增', type:'error' });
this.$message({showClose: true, message: '请选择产品/或者上级需求进行新增', type:'error' });
return; return;
} }
this.$refs.addForm.validate((valid) => { this.$refs.addForm.validate((valid) => {

14
src/views/xm/core/xmMenuTemplate/XmMenuTemplateEdit.vue

@ -1,13 +1,13 @@
<template> <template>
<section class="page-container page-full-height padding border"> <section class="page-container page-full-height padding border">
<el-row> <el-row>
<!--编辑界面 XmMenuTemplate 项目故事-->
<!--编辑界面 XmMenuTemplate 项目需求-->
<el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editForm"> <el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editForm">
<el-form-item label="序号" prop="seqNo"> <el-form-item label="序号" prop="seqNo">
<el-input v-model="editForm.seqNo" placeholder="如1.0 , 1.1 , 1.1.1等" ></el-input> <el-input v-model="editForm.seqNo" placeholder="如1.0 , 1.1 , 1.1.1等" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="故事名称" prop="menuName">
<el-input v-model="editForm.menuName" placeholder="故事名称" ></el-input>
<el-form-item label="需求名称" prop="menuName">
<el-input v-model="editForm.menuName" placeholder="需求名称" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input type="textarea" v-model="editForm.remark" placeholder="什么人?做什么事?,为什么?如: 作为招聘专员,我需要统计员工半年在职/离职人数,以便我能够制定招聘计划" ></el-input> <el-input type="textarea" v-model="editForm.remark" placeholder="什么人?做什么事?,为什么?如: 作为招聘专员,我需要统计员工半年在职/离职人数,以便我能够制定招聘计划" ></el-input>
@ -52,10 +52,10 @@
load:{ list: false, edit: false, del: false, add: false },//... load:{ list: false, edit: false, del: false, add: false },//...
editFormRules: { editFormRules: {
menuId: [ menuId: [
{ required: true, message: '故事编号不能为空', trigger: 'blur' }
{ required: true, message: '需求编号不能为空', trigger: 'blur' }
], ],
menuName: [ menuName: [
{ required: true, message: '故事编号不能为空', trigger: 'blur' }
{ required: true, message: '需求编号不能为空', trigger: 'blur' }
], ],
productId: [ productId: [
{ required: true, message: '产品编号不能为空', trigger: 'blur' } { required: true, message: '产品编号不能为空', trigger: 'blur' }
@ -64,7 +64,7 @@
{ required: true, message: '序号不能为空', trigger: 'blur' } { required: true, message: '序号不能为空', trigger: 'blur' }
], ],
}, },
// XmMenuTemplate
// XmMenuTemplate
editForm: { editForm: {
menuId:'',menuName:'',pmenuId:'',productId:'',remark:'',status:'',online:'',demandUrl:'',codeUrl:'',designUrl:'',docUrl:'',helpUrl:'',operDocUrl:'' menuId:'',menuName:'',pmenuId:'',productId:'',remark:'',status:'',online:'',demandUrl:'',codeUrl:'',designUrl:'',docUrl:'',helpUrl:'',operDocUrl:''
} }
@ -79,7 +79,7 @@
this.$refs['editForm'].resetFields(); this.$refs['editForm'].resetFields();
this.$emit('cancel'); this.$emit('cancel');
}, },
//XmMenuTemplate @submit="afterEditSubmit"
//XmMenuTemplate @submit="afterEditSubmit"
editSubmit: function () { editSubmit: function () {
this.$refs.editForm.validate((valid) => { this.$refs.editForm.validate((valid) => {
if (valid) { if (valid) {

14
src/views/xm/core/xmMenuTemplate/XmMenuTemplateMng.vue

@ -3,7 +3,7 @@
<el-row> <el-row>
<el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询"></el-input> <el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询"></el-input>
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmMenuTemplates">查询</el-button> <el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmMenuTemplates">查询</el-button>
<el-button v-if="isSelectMenu!=true" type="primary" @click="showProdcutAdd">+产品</el-button> <el-button type="primary" @click="showAdd">+顶级故事</el-button>
<el-button v-if="isSelectMenu!=true" type="primary" @click="showProdcutAdd">+产品</el-button> <el-button type="primary" @click="showAdd">+顶级需求</el-button>
<el-button v-if="isSelectMenu!=true" type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button> <el-button v-if="isSelectMenu!=true" type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
<el-button v-if="isSelectMenu" type="primary" v-loading="load.del" @click="selectedMenusConfirm" :disabled="this.sels.length===0 || load.del==true">确认选择</el-button> <el-button v-if="isSelectMenu" type="primary" v-loading="load.del" @click="selectedMenusConfirm" :disabled="this.sels.length===0 || load.del==true">确认选择</el-button>
<el-button v-if="isSelectMenu!=true && batchEditVisible==false" type="primary" @click="toBatchEdit">批量修改</el-button> <el-button v-if="isSelectMenu!=true && batchEditVisible==false" type="primary" @click="toBatchEdit">批量修改</el-button>
@ -17,7 +17,7 @@
<el-col v-show="!batchEditVisible" :span="batchEditVisible?24:18"> <el-col v-show="!batchEditVisible" :span="batchEditVisible?24:18">
<el-table :data="xmMenuTemplatesTreeData" default-expand-all row-key="menuId" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;"> <el-table :data="xmMenuTemplatesTreeData" default-expand-all row-key="menuId" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column> <el-table-column sortable type="selection" width="40"></el-table-column>
<el-table-column prop="menuName" label="故事名称" min-width="120" >
<el-table-column prop="menuName" label="需求名称" min-width="120" >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag >{{scope.row.seqNo}} &nbsp;&nbsp;{{scope.row.menuName}}</el-tag> <el-tag >{{scope.row.seqNo}} &nbsp;&nbsp;{{scope.row.menuName}}</el-tag>
</template> </template>
@ -31,7 +31,7 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" width="300" fixed="right" v-if="isSelectMenu!=true"> <el-table-column label="操作" width="300" fixed="right" v-if="isSelectMenu!=true">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button @click="showSubAdd( scope.row,scope.$index)">+故事</el-button>
<el-button @click="showSubAdd( scope.row,scope.$index)">+需求</el-button>
<el-button @click="showEdit( scope.row,scope.$index)"></el-button> <el-button @click="showEdit( scope.row,scope.$index)"></el-button>
<el-button type="danger" @click="handleDel(scope.row,scope.$index)"></el-button> <el-button type="danger" @click="handleDel(scope.row,scope.$index)"></el-button>
@ -60,7 +60,7 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="menuName" label="故事名称" min-width="120" >
<el-table-column prop="menuName" label="需求名称" min-width="120" >
<template slot-scope="scope"> <template slot-scope="scope">
<el-input v-model="scope.row.menuName" @change="fieldChange(scope.row,'menuName')"></el-input> <el-input v-model="scope.row.menuName" @change="fieldChange(scope.row,'menuName')"></el-input>
</template> </template>
@ -76,12 +76,12 @@
</el-col> </el-col>
<!--编辑 XmMenuTemplate xm_project_menu界面--> <!--编辑 XmMenuTemplate xm_project_menu界面-->
<el-drawer title="编辑故事" :visible.sync="editFormVisible" size="50%" append-to-body :close-on-click-modal="false">
<el-drawer title="编辑需求" :visible.sync="editFormVisible" size="50%" append-to-body :close-on-click-modal="false">
<xm-menu-template-edit :xm-menu-template="editForm" :visible="editFormVisible" @cancel="editFormVisible=false" @submit="afterEditSubmit"></xm-menu-template-edit> <xm-menu-template-edit :xm-menu-template="editForm" :visible="editFormVisible" @cancel="editFormVisible=false" @submit="afterEditSubmit"></xm-menu-template-edit>
</el-drawer> </el-drawer>
<!--新增 XmMenuTemplate xm_project_menu界面--> <!--新增 XmMenuTemplate xm_project_menu界面-->
<el-drawer title="新增故事" :visible.sync="addFormVisible" size="50%" append-to-body :close-on-click-modal="false">
<el-drawer title="新增需求" :visible.sync="addFormVisible" size="50%" append-to-body :close-on-click-modal="false">
<xm-menu-template-add :product="filters.product" :parent-menu="parentMenu" :xm-menu="addForm" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-menu-template-add> <xm-menu-template-add :product="filters.product" :parent-menu="parentMenu" :xm-menu="addForm" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-menu-template-add>
</el-drawer> </el-drawer>
</el-row> </el-row>
@ -362,7 +362,7 @@
}, },
selectedMenusConfirm:function(){ selectedMenusConfirm:function(){
if(this.sels.length==0){ if(this.sels.length==0){
this.$message.error("请选择故事");
this.$message.error("请选择需求");
return; return;
} }
this.$emit("selected-menus",this.sels) this.$emit("selected-menus",this.sels)

4
src/views/xm/core/xmProduct/XmProductForProjectComplex.vue

@ -18,7 +18,7 @@
<el-tab-pane label="项目" lazy name="projects" v-if="!selProject"> <el-tab-pane label="项目" lazy name="projects" v-if="!selProject">
<xm-product-project-for-link v-if="xmProduct && showPanel=='projects'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject"></xm-product-project-for-link> <xm-product-project-for-link v-if="xmProduct && showPanel=='projects'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject"></xm-product-project-for-link>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="故事" lazy name="menus" >
<el-tab-pane label="需求" lazy name="menus" >
<xm-menu-mng v-if="xmProduct && showPanel=='menus'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject" :disabled-mng="false"></xm-menu-mng> <xm-menu-mng v-if="xmProduct && showPanel=='menus'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject" :disabled-mng="false"></xm-menu-mng>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="任务" lazy name="tasks" > <el-tab-pane label="任务" lazy name="tasks" >
@ -93,7 +93,7 @@ import XmProductOverview from "./XmProductOverview";
moduleType : '1' // 1- 2- moduleType : '1' // 1- 2-
}, },
{ {
moduleName:"故事",
moduleName:"需求",
topModuleId:'xm', topModuleId:'xm',
link:"/xm/core/xmMenu/XmMenuMng", link:"/xm/core/xmMenu/XmMenuMng",
icon: require("@/assets/image/platform/module-intelligentForms.png"), icon: require("@/assets/image/platform/module-intelligentForms.png"),

26
src/views/xm/core/xmProduct/XmProductInfo.vue

@ -20,8 +20,8 @@
<el-menu-item label="项目" index="项目"> <el-menu-item label="项目" index="项目">
<span slot="title"><i class="el-icon-document" ></i>项目</span> <span slot="title"><i class="el-icon-document" ></i>项目</span>
</el-menu-item> </el-menu-item>
<el-menu-item label="故事" index="用户故事">
<span slot="title"><i class="el-icon-document" ></i>故事</span>
<el-menu-item label="需求" index="需求">
<span slot="title"><i class="el-icon-document" ></i>需求</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="任务"> <el-menu-item index="任务">
<span slot="title"><i class="el-icon-s-operation"></i>任务</span> <span slot="title"><i class="el-icon-s-operation"></i>任务</span>
@ -48,8 +48,8 @@
<el-menu-item index="项目监控" class="hidden-lg-and-down"> <el-menu-item index="项目监控" class="hidden-lg-and-down">
<span slot="title"><i class="el-icon-video-camera" ></i>项目监控</span> <span slot="title"><i class="el-icon-video-camera" ></i>项目监控</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="故事监控" class="hidden-lg-and-down">
<span slot="title"><i class="el-icon-video-camera" ></i>故事监控</span>
<el-menu-item index="需求监控" class="hidden-lg-and-down">
<span slot="title"><i class="el-icon-video-camera" ></i>需求监控</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="合同管理" class="hidden-md-and-down"> <el-menu-item index="合同管理" class="hidden-md-and-down">
@ -84,8 +84,8 @@
</el-menu-item> </el-menu-item>
<el-submenu index="更多"> <el-submenu index="更多">
<template slot="title">更多 </template> <template slot="title">更多 </template>
<el-menu-item index="故事监控" >
<span slot="title"><i class="el-icon-video-camera" ></i>故事监控</span>
<el-menu-item index="需求监控" >
<span slot="title"><i class="el-icon-video-camera" ></i>需求监控</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="项目监控"> <el-menu-item index="项目监控">
<span slot="title"><i class="el-icon-video-camera" ></i>项目监控</span> <span slot="title"><i class="el-icon-video-camera" ></i>项目监控</span>
@ -138,14 +138,14 @@
<xm-product-overview-complex v-if="infotype=='产品概览'" :xm-product="xmProduct"></xm-product-overview-complex> <xm-product-overview-complex v-if="infotype=='产品概览'" :xm-product="xmProduct"></xm-product-overview-complex>
<xm-iteration-for-project-complex v-if="infotype=='迭代'" ref="xmIterationMng" :xm-product="xmProduct"></xm-iteration-for-project-complex> <xm-iteration-for-project-complex v-if="infotype=='迭代'" ref="xmIterationMng" :xm-product="xmProduct"></xm-iteration-for-project-complex>
<xm-project-complex v-if="infotype=='项目'" ref="xmProjectForLink" :xm-product="xmProduct"></xm-project-complex> <xm-project-complex v-if="infotype=='项目'" ref="xmProjectForLink" :xm-product="xmProduct"></xm-project-complex>
<xm-menu-mng v-if="infotype=='用户故事'" :xm-product="xmProduct"></xm-menu-mng>
<xm-menu-mng v-if="infotype=='需求'" :xm-product="xmProduct"></xm-menu-mng>
<xm-task-mng v-if="infotype=='任务'" ref="xmTaskMng" :xm-product="xmProduct" ></xm-task-mng> <xm-task-mng v-if="infotype=='任务'" ref="xmTaskMng" :xm-product="xmProduct" ></xm-task-mng>
<xm-question v-if="infotype=='缺陷'" :qtype="'bug'" :xm-product='xmProduct' ref="xmQuestion"></xm-question> <xm-question v-if="infotype=='缺陷'" :qtype="'bug'" :xm-product='xmProduct' ref="xmQuestion"></xm-question>
<xm-group-mng v-if="infotype=='团队'" :xm-product="xmProduct"></xm-group-mng> <xm-group-mng v-if="infotype=='团队'" :xm-product="xmProduct"></xm-group-mng>
<xm-file-mng v-if="infotype=='文档'" :xm-product="xmProduct"></xm-file-mng> <xm-file-mng v-if="infotype=='文档'" :xm-product="xmProduct"></xm-file-mng>
<xm-project-phase-mng v-if="infotype=='阶段计划及里程碑'" ref="xmProjectPhaseMng" :xm-product="xmProduct" ></xm-project-phase-mng> <xm-project-phase-mng v-if="infotype=='阶段计划及里程碑'" ref="xmProjectPhaseMng" :xm-product="xmProduct" ></xm-project-phase-mng>
<xm-test-case-exec-mng v-if="infotype=='测试计划'" :visible="infotype=='测试计划'" :xm-product='xmProduct' ref="xmQuestion"></xm-test-case-exec-mng> <xm-test-case-exec-mng v-if="infotype=='测试计划'" :visible="infotype=='测试计划'" :xm-product='xmProduct' ref="xmQuestion"></xm-test-case-exec-mng>
<xm-menu-with-plan v-if="infotype=='故事监控'" ref="xmMenuWithPlan" :xm-product="xmProduct"></xm-menu-with-plan>
<xm-menu-with-plan v-if="infotype=='需求监控'" ref="xmMenuWithPlan" :xm-product="xmProduct"></xm-menu-with-plan>
<xm-project-state-mng v-if="infotype=='项目监控'" :xm-product="xmProduct"></xm-project-state-mng> <xm-project-state-mng v-if="infotype=='项目监控'" :xm-product="xmProduct"></xm-project-state-mng>
<xm-budget v-if="infotype=='预算'" :xm-product="xmProduct"></xm-budget> <xm-budget v-if="infotype=='预算'" :xm-product="xmProduct"></xm-budget>
<xm-cost v-if="infotype=='费用'" :xm-product="xmProduct"></xm-cost> <xm-cost v-if="infotype=='费用'" :xm-product="xmProduct"></xm-cost>
@ -222,7 +222,7 @@ import XmProjectForLink from '../xmProject/XmProjectForLink.vue';
infotype:"产品概览", infotype:"产品概览",
load:{list:false,edit:false}, load:{list:false,edit:false},
groupUserVisible:false, groupUserVisible:false,
exportArr: ['任务', '阶段计划', '故事监控']
exportArr: ['任务', '阶段计划', '需求监控']
/**end 自定义属性请在上面加 请加备注**/ /**end 自定义属性请在上面加 请加备注**/
} }
},//end data },//end data
@ -288,7 +288,7 @@ import XmProjectForLink from '../xmProject/XmProjectForLink.vue';
let pageNum = 1; let pageNum = 1;
let infotypeKey = ''; let infotypeKey = '';
if (this.infotype === '任务') { if (this.infotype === '任务') {
header = ['序号', '任务名称', '故事', '预算(万)', '工作量(人时)', '执行人', '进度', '任务开始时间', '任务结束时间', '任务技能需求'];
header = ['序号', '任务名称', '需求', '预算(万)', '工作量(人时)', '执行人', '进度', '任务开始时间', '任务结束时间', '任务技能需求'];
keyList = ['sortLevel', 'name', 'menuName', 'budgetCost', 'budgetWorkload', 'exeUsernames', 'rate', 'startTime', 'endTime', 'taskSkillNames']; keyList = ['sortLevel', 'name', 'menuName', 'budgetCost', 'budgetWorkload', 'exeUsernames', 'rate', 'startTime', 'endTime', 'taskSkillNames'];
list = this.$refs.xmTaskMng.tasksTreeData; list = this.$refs.xmTaskMng.tasksTreeData;
pageNum = this.$refs.xmTaskMng.pageInfo.pageNum; pageNum = this.$refs.xmTaskMng.pageInfo.pageNum;
@ -298,8 +298,8 @@ import XmProjectForLink from '../xmProject/XmProjectForLink.vue';
list = this.$refs.xmProjectPhaseMng.projectPhaseTreeData; list = this.$refs.xmProjectPhaseMng.projectPhaseTreeData;
pageNum = this.$refs.xmProjectPhaseMng.pageInfo.pageNum; pageNum = this.$refs.xmProjectPhaseMng.pageInfo.pageNum;
} else if (this.infotype === '故事监控') {
header = ['序号', '故事名称', '计划状态', '负责人', '上线时间', '计划开始时间', '实际开始时间', '计划结束时间', '实际结束时间', '计划工作量(人时)', '实际工作量(人时)', '计划成本(元)', '实际成本(元)', '总体完成比例%', '需求完成比例%', '设计完成比例%', '开发完成比例%', 'sit完成比例%', 'uat完成比例%', '上线状态'];
} else if (this.infotype === '需求监控') {
header = ['序号', '需求名称', '计划状态', '负责人', '上线时间', '计划开始时间', '实际开始时间', '计划结束时间', '实际结束时间', '计划工作量(人时)', '实际工作量(人时)', '计划成本(元)', '实际成本(元)', '总体完成比例%', '需求完成比例%', '设计完成比例%', '开发完成比例%', 'sit完成比例%', 'uat完成比例%', '上线状态'];
keyList = ['seqNo', 'menuName', 'planStatus', 'chargeUsername', 'onlineTime', 'planStartTime', 'actStartTime', 'planEndTime', 'actEndTime', 'planWorkload', 'actWorkload', 'planCostAmount', 'actCostAmount', 'finishRate', 'demandRate', 'designRate', 'devRate', 'sitRate', 'uatRate', 'onlineStatus']; keyList = ['seqNo', 'menuName', 'planStatus', 'chargeUsername', 'onlineTime', 'planStartTime', 'actStartTime', 'planEndTime', 'actEndTime', 'planWorkload', 'actWorkload', 'planCostAmount', 'actCostAmount', 'finishRate', 'demandRate', 'designRate', 'devRate', 'sitRate', 'uatRate', 'onlineStatus'];
list = this.$refs.xmMenuWithPlan.xmMenusTreeData; list = this.$refs.xmMenuWithPlan.xmMenusTreeData;
pageNum = this.$refs.xmMenuWithPlan.pageInfo.pageNum; pageNum = this.$refs.xmMenuWithPlan.pageInfo.pageNum;
@ -356,7 +356,7 @@ import XmProjectForLink from '../xmProject/XmProjectForLink.vue';
} }
}) })
return dataList; return dataList;
} else if (this.infotype == '故事监控') {
} else if (this.infotype == '需求监控') {
jsonData.forEach(v => { jsonData.forEach(v => {
const row = filterVal.map(j => { const row = filterVal.map(j => {
let key = ''; let key = '';

2
src/views/xm/core/xmProduct/XmProductMng.vue

@ -532,7 +532,7 @@ import XmProductSelect from './XmProductSelect.vue';
doDelXmIterationProductLink(row){ doDelXmIterationProductLink(row){
var xmIteration=this.xmIteration; var xmIteration=this.xmIteration;
var xmProduct=row; var xmProduct=row;
this.$confirm('确认将产品【'+xmProduct.productName+'】与迭代【'+xmIteration.iterationName+'】进行脱钩吗?脱钩后,产品下的所有故事将从本迭代计划一并移出。', '提示', {
this.$confirm('确认将产品【'+xmProduct.productName+'】与迭代【'+xmIteration.iterationName+'】进行脱钩吗?脱钩后,产品下的所有需求将从本迭代计划一并移出。', '提示', {
type: 'warning' type: 'warning'
}).then(()=>{ }).then(()=>{
delXmIterationProductLink({iterationId:xmIteration.id,productId:xmProduct.id}).then(res=>{ delXmIterationProductLink({iterationId:xmIteration.id,productId:xmProduct.id}).then(res=>{

4
src/views/xm/core/xmProject/XmProjectComplex.vue

@ -20,7 +20,7 @@
<el-tab-pane label="项目" lazy name="projects" v-if="!selProject"> <el-tab-pane label="项目" lazy name="projects" v-if="!selProject">
<xm-product-project-for-link v-if="selProject && showPanel=='projects'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject"></xm-product-project-for-link> <xm-product-project-for-link v-if="selProject && showPanel=='projects'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject"></xm-product-project-for-link>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="故事" lazy name="menus" >
<el-tab-pane label="需求" lazy name="menus" >
<xm-menu-mng v-if="selProject && showPanel=='menus'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject" :disabled-mng="false"></xm-menu-mng> <xm-menu-mng v-if="selProject && showPanel=='menus'" :xm-product="xmProduct" :xm-iteration="xmIteration" :sel-project="selProject" :disabled-mng="false"></xm-menu-mng>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="任务" lazy name="tasks" > <el-tab-pane label="任务" lazy name="tasks" >
@ -95,7 +95,7 @@ import XmProjectOverview from "./XmProjectOverview";
moduleType : '1' // 1- 2- moduleType : '1' // 1- 2-
}, },
{ {
moduleName:"故事",
moduleName:"需求",
topModuleId:'xm', topModuleId:'xm',
link:"/xm/core/xmMenu/XmMenuMng", link:"/xm/core/xmMenu/XmMenuMng",
icon: require("@/assets/image/platform/module-intelligentForms.png"), icon: require("@/assets/image/platform/module-intelligentForms.png"),

26
src/views/xm/core/xmProject/XmProjectInfo.vue

@ -21,8 +21,8 @@
<span slot="title"><i class="el-icon-s-flag"></i>产品</span> <span slot="title"><i class="el-icon-s-flag"></i>产品</span>
</el-menu-item> </el-menu-item>
<el-menu-item label="故事" index="用户故事">
<span slot="title"><i class="el-icon-document"></i>故事</span>
<el-menu-item label="需求" index="需求">
<span slot="title"><i class="el-icon-document"></i>需求</span>
</el-menu-item> </el-menu-item>
@ -55,8 +55,8 @@
<el-menu-item index="项目监控" class="hidden-lg-and-down"> <el-menu-item index="项目监控" class="hidden-lg-and-down">
<span slot="title"><i class="el-icon-video-camera"></i>项目监控</span> <span slot="title"><i class="el-icon-video-camera"></i>项目监控</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="故事监控" class="hidden-lg-and-down">
<span slot="title"><i class="el-icon-video-camera"></i>故事监控</span>
<el-menu-item index="需求监控" class="hidden-lg-and-down">
<span slot="title"><i class="el-icon-video-camera"></i>需求监控</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="合同管理" class="hidden-md-and-down"> <el-menu-item index="合同管理" class="hidden-md-and-down">
@ -91,8 +91,8 @@
</el-menu-item> </el-menu-item>
<el-submenu index="更多"> <el-submenu index="更多">
<template slot="title">更多 </template> <template slot="title">更多 </template>
<el-menu-item index="故事监控" >
<span slot="title"><i class="el-icon-video-camera"></i>故事监控</span>
<el-menu-item index="需求监控" >
<span slot="title"><i class="el-icon-video-camera"></i>需求监控</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="项目监控"> <el-menu-item index="项目监控">
<span slot="title"><i class="el-icon-video-camera"></i>项目监控</span> <span slot="title"><i class="el-icon-video-camera"></i>项目监控</span>
@ -145,14 +145,14 @@
<xm-project-overview-complex v-if="infotype=='项目概览'" :sel-project="selProject"></xm-project-overview-complex> <xm-project-overview-complex v-if="infotype=='项目概览'" :sel-project="selProject"></xm-project-overview-complex>
<xm-iteration-for-project-complex v-if="infotype=='迭代'" ref="xmIterationMng" :sel-project="selProject"></xm-iteration-for-project-complex> <xm-iteration-for-project-complex v-if="infotype=='迭代'" ref="xmIterationMng" :sel-project="selProject"></xm-iteration-for-project-complex>
<xm-product-for-project-complex v-if="infotype=='产品'" ref="xmProductComplex" :sel-project="selProject"></xm-product-for-project-complex> <xm-product-for-project-complex v-if="infotype=='产品'" ref="xmProductComplex" :sel-project="selProject"></xm-product-for-project-complex>
<xm-menu-mng v-if="infotype=='用户故事'" :sel-project="selProject" :disabled-mng="false"></xm-menu-mng>
<xm-menu-mng v-if="infotype=='需求'" :sel-project="selProject" :disabled-mng="false"></xm-menu-mng>
<xm-task-mng v-if="infotype=='任务'" ref="xmTaskMng" :sel-project="selProject" ></xm-task-mng> <xm-task-mng v-if="infotype=='任务'" ref="xmTaskMng" :sel-project="selProject" ></xm-task-mng>
<xm-question v-if="infotype=='缺陷'" :qtype="'bug'" :sel-project='selProject' ref="xmQuestion"></xm-question> <xm-question v-if="infotype=='缺陷'" :qtype="'bug'" :sel-project='selProject' ref="xmQuestion"></xm-question>
<xm-group-mng v-if="infotype=='团队'" :sel-project="selProject"></xm-group-mng> <xm-group-mng v-if="infotype=='团队'" :sel-project="selProject"></xm-group-mng>
<xm-file-mng v-if="infotype=='文档'" :sel-project="selProject"></xm-file-mng> <xm-file-mng v-if="infotype=='文档'" :sel-project="selProject"></xm-file-mng>
<xm-project-phase-mng v-if="infotype=='阶段计划及里程碑'" ref="xmProjectPhaseMng" :sel-project="selProject" ></xm-project-phase-mng> <xm-project-phase-mng v-if="infotype=='阶段计划及里程碑'" ref="xmProjectPhaseMng" :sel-project="selProject" ></xm-project-phase-mng>
<xm-test-case-exec-mng v-if="infotype=='测试计划'" :visible="infotype=='测试计划'" :sel-project='selProject' ref="xmQuestion"></xm-test-case-exec-mng> <xm-test-case-exec-mng v-if="infotype=='测试计划'" :visible="infotype=='测试计划'" :sel-project='selProject' ref="xmQuestion"></xm-test-case-exec-mng>
<xm-menu-with-plan v-if="infotype=='故事监控'" ref="xmMenuWithPlan" :sel-project="selProject"></xm-menu-with-plan>
<xm-menu-with-plan v-if="infotype=='需求监控'" ref="xmMenuWithPlan" :sel-project="selProject"></xm-menu-with-plan>
<xm-project-state-mng v-if="infotype=='项目监控'" :sel-project="selProject"></xm-project-state-mng> <xm-project-state-mng v-if="infotype=='项目监控'" :sel-project="selProject"></xm-project-state-mng>
<xm-budget v-if="infotype=='预算'" :sel-project="selProject"></xm-budget> <xm-budget v-if="infotype=='预算'" :sel-project="selProject"></xm-budget>
<xm-cost v-if="infotype=='费用'" :sel-project="selProject"></xm-cost> <xm-cost v-if="infotype=='费用'" :sel-project="selProject"></xm-cost>
@ -225,7 +225,7 @@
infotype:"项目概览", infotype:"项目概览",
load:{list:false,edit:false}, load:{list:false,edit:false},
groupUserVisible:false, groupUserVisible:false,
exportArr: ['任务', '阶段计划', '故事监控']
exportArr: ['任务', '阶段计划', '需求监控']
/**end 自定义属性请在上面加 请加备注**/ /**end 自定义属性请在上面加 请加备注**/
} }
},//end data },//end data
@ -292,7 +292,7 @@
let pageNum = 1; let pageNum = 1;
let infotypeKey = ''; let infotypeKey = '';
if (this.infotype === '任务') { if (this.infotype === '任务') {
header = ['序号', '任务名称', '故事', '预算(万)', '工作量(人时)', '执行人', '进度', '任务开始时间', '任务结束时间', '任务技能需求'];
header = ['序号', '任务名称', '需求', '预算(万)', '工作量(人时)', '执行人', '进度', '任务开始时间', '任务结束时间', '任务技能需求'];
keyList = ['sortLevel', 'name', 'menuName', 'budgetCost', 'budgetWorkload', 'exeUsernames', 'rate', 'startTime', 'endTime', 'taskSkillNames']; keyList = ['sortLevel', 'name', 'menuName', 'budgetCost', 'budgetWorkload', 'exeUsernames', 'rate', 'startTime', 'endTime', 'taskSkillNames'];
list = this.$refs.xmTaskMng.tasksTreeData; list = this.$refs.xmTaskMng.tasksTreeData;
pageNum = this.$refs.xmTaskMng.pageInfo.pageNum; pageNum = this.$refs.xmTaskMng.pageInfo.pageNum;
@ -302,8 +302,8 @@
list = this.$refs.xmProjectPhaseMng.projectPhaseTreeData; list = this.$refs.xmProjectPhaseMng.projectPhaseTreeData;
pageNum = this.$refs.xmProjectPhaseMng.pageInfo.pageNum; pageNum = this.$refs.xmProjectPhaseMng.pageInfo.pageNum;
} else if (this.infotype === '故事监控') {
header = ['序号', '故事名称', '计划状态', '负责人', '上线时间', '计划开始时间', '实际开始时间', '计划结束时间', '实际结束时间', '计划工作量(人时)', '实际工作量(人时)', '计划成本(元)', '实际成本(元)', '总体完成比例%', '需求完成比例%', '设计完成比例%', '开发完成比例%', 'sit完成比例%', 'uat完成比例%', '上线状态'];
} else if (this.infotype === '需求监控') {
header = ['序号', '需求名称', '计划状态', '负责人', '上线时间', '计划开始时间', '实际开始时间', '计划结束时间', '实际结束时间', '计划工作量(人时)', '实际工作量(人时)', '计划成本(元)', '实际成本(元)', '总体完成比例%', '需求完成比例%', '设计完成比例%', '开发完成比例%', 'sit完成比例%', 'uat完成比例%', '上线状态'];
keyList = ['seqNo', 'menuName', 'planStatus', 'chargeUsername', 'onlineTime', 'planStartTime', 'actStartTime', 'planEndTime', 'actEndTime', 'planWorkload', 'actWorkload', 'planCostAmount', 'actCostAmount', 'finishRate', 'demandRate', 'designRate', 'devRate', 'sitRate', 'uatRate', 'onlineStatus']; keyList = ['seqNo', 'menuName', 'planStatus', 'chargeUsername', 'onlineTime', 'planStartTime', 'actStartTime', 'planEndTime', 'actEndTime', 'planWorkload', 'actWorkload', 'planCostAmount', 'actCostAmount', 'finishRate', 'demandRate', 'designRate', 'devRate', 'sitRate', 'uatRate', 'onlineStatus'];
list = this.$refs.xmMenuWithPlan.xmMenusTreeData; list = this.$refs.xmMenuWithPlan.xmMenusTreeData;
pageNum = this.$refs.xmMenuWithPlan.pageInfo.pageNum; pageNum = this.$refs.xmMenuWithPlan.pageInfo.pageNum;
@ -360,7 +360,7 @@
} }
}) })
return dataList; return dataList;
} else if (this.infotype == '故事监控') {
} else if (this.infotype == '需求监控') {
jsonData.forEach(v => { jsonData.forEach(v => {
const row = filterVal.map(j => { const row = filterVal.map(j => {
let key = ''; let key = '';

14
src/views/xm/core/xmProjectGroupFormwork/XmProjectGroupFormwork.vue

@ -95,7 +95,7 @@
<div>任务建立任务删除任务指派责任人任务预算变更任务提交测试测试结果反馈任务结算</div> <div>任务建立任务删除任务指派责任人任务预算变更任务提交测试测试结果反馈任务结算</div>
<div>质量审核测试方案定时查看质量报告</div> <div>质量审核测试方案定时查看质量报告</div>
<div>风险风险预测风险应对措施管理等</div> <div>风险风险预测风险应对措施管理等</div>
<div>需求确保任务与用户故事的关联关系正确范围正确及时跟进用户故事的变化 </div>
<div>需求确保任务与需求的关联关系正确范围正确及时跟进需求的变化 </div>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="项目管理者: 项目经理、技术经理、项目副经理、技术副经理等具有全项目范围管理权限的管理人员。由项目经理指派。" name="4"> <el-collapse-item title="项目管理者: 项目经理、技术经理、项目副经理、技术副经理等具有全项目范围管理权限的管理人员。由项目经理指派。" name="4">
<div>团队建立项目管理组建立业务组指定组长组员管理加人减人指派组长</div> <div>团队建立项目管理组建立业务组指定组长组员管理加人减人指派组长</div>
@ -103,7 +103,7 @@
<div>任务建立任务删除任务指派责任人任务预算变更任务提交测试测试结果反馈任务结算</div> <div>任务建立任务删除任务指派责任人任务预算变更任务提交测试测试结果反馈任务结算</div>
<div>质量审核测试方案定时查看质量报告等</div> <div>质量审核测试方案定时查看质量报告等</div>
<div>风险风险预测风险应对措施管理等</div> <div>风险风险预测风险应对措施管理等</div>
<div>需求确保任务与用户故事的关联关系正确范围正确及时跟进用户故事的变化</div>
<div>需求确保任务与需求的关联关系正确范围正确及时跟进需求的变化</div>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="组长:每个小组的组长,由项目管理者指定" name="5"> <el-collapse-item title="组长:每个小组的组长,由项目管理者指定" name="5">
<div>团队组员管理加人减人</div> <div>团队组员管理加人减人</div>
@ -111,7 +111,7 @@
<div>任务建立任务删除任务指派责任人任务预算变更任务提交测试测试结果反馈任务结算</div> <div>任务建立任务删除任务指派责任人任务预算变更任务提交测试测试结果反馈任务结算</div>
<div>质量审核测试方案定时查看质量报告等</div> <div>质量审核测试方案定时查看质量报告等</div>
<div>风险风险预测风险应对措施管理等</div> <div>风险风险预测风险应对措施管理等</div>
<div>需求确保任务与用户故事的关联关系正确范围正确及时跟进用户故事的变化</div>
<div>需求确保任务与需求的关联关系正确范围正确及时跟进需求的变化</div>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="任务责任人:每个任务的责任人,由组长、项目管理者指定" name="6"> <el-collapse-item title="任务责任人:每个任务的责任人,由组长、项目管理者指定" name="6">
<div> 团队对任务的候选人执行人进行统一管理跟踪</div> <div> 团队对任务的候选人执行人进行统一管理跟踪</div>
@ -119,25 +119,25 @@
<div>任务任务预算变更任务提交测试测试结果反馈任务结算</div> <div>任务任务预算变更任务提交测试测试结果反馈任务结算</div>
<div>质量审核测试方案定时查看质量报告等</div> <div>质量审核测试方案定时查看质量报告等</div>
<div>风险风险预测风险应对措施管理等</div> <div>风险风险预测风险应对措施管理等</div>
<div>需求确保任务与用户故事的关联关系正确范围正确及时跟进用户故事的变化</div>
<div>需求确保任务与需求的关联关系正确范围正确及时跟进需求的变化</div>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="任务候选人:每个任务的候选人,由任务责任人、组长、项目管理者指定或者由用户自行加入。" name="7"> <el-collapse-item title="任务候选人:每个任务的候选人,由任务责任人、组长、项目管理者指定或者由用户自行加入。" name="7">
<div> 团队查看团队成员加入任务候选人队列退出任务候选人队列不能加入具体的小组</div> <div> 团队查看团队成员加入任务候选人队列退出任务候选人队列不能加入具体的小组</div>
<div>进度计划定期查看已关注的任务的进度情况</div> <div>进度计划定期查看已关注的任务的进度情况</div>
<div>任务关注任务取消关注任务查询任务加入任务候选人队列退出候选人队列等 </div> <div>任务关注任务取消关注任务查询任务加入任务候选人队列退出候选人队列等 </div>
<div>需求查看相关的故事及其滚动信息</div>
<div>需求查看相关的需求及其滚动信息</div>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="任务执行人:每个任务的具体执行人,由任务责任人、组长、项目管理者指定。" name="8"> <el-collapse-item title="任务执行人:每个任务的具体执行人,由任务责任人、组长、项目管理者指定。" name="8">
<div> 团队查看团队成员加入业务小组退出小组</div> <div> 团队查看团队成员加入业务小组退出小组</div>
<div>进度计划定期查看已执行的任务的进度情况</div> <div>进度计划定期查看已执行的任务的进度情况</div>
<div>任务关注任务取消关注任务查询任务加入任务候选人队列退出候选人队列提交测试提交结算申请等</div> <div>任务关注任务取消关注任务查询任务加入任务候选人队列退出候选人队列提交测试提交结算申请等</div>
<div>需求查看相关的故事及其滚动信息</div>
<div>需求查看相关的需求及其滚动信息</div>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="产品经理" name="9"> <el-collapse-item title="产品经理" name="9">
<div> 团队查看团队成员加入业务小组退出小组</div> <div> 团队查看团队成员加入业务小组退出小组</div>
<div>进度计划定期查看已执行的任务的进度情况</div> <div>进度计划定期查看已执行的任务的进度情况</div>
<div>任务关注任务取消关注任务查询任务加入任务候选人队列退出候选人队列提交测试提交结算申请等</div> <div>任务关注任务取消关注任务查询任务加入任务候选人队列退出候选人队列提交测试提交结算申请等</div>
<div>需求查看相关的故事及其滚动信息</div>
<div>需求查看相关的需求及其滚动信息</div>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="测试经理" name="10"> <el-collapse-item title="测试经理" name="10">

2
src/views/xm/core/xmProjectPhase/XmProjectPhaseBatch.vue

@ -279,7 +279,7 @@
xmRecordVisible:false, xmRecordVisible:false,
valueChangeRows:[], valueChangeRows:[],
batchEditVisible:false, batchEditVisible:false,
menuVisible:false,//
menuVisible:false,//
tableHeight:300, tableHeight:300,
pickerOptions: util.pickerOptions('date'), pickerOptions: util.pickerOptions('date'),
gstcVisible:false, gstcVisible:false,

10
src/views/xm/core/xmProjectPhase/XmProjectPhaseMng.vue

@ -22,7 +22,7 @@
<el-button type="primary" @click="showPhaseTemplate" v-loading="load.add" icon="el-icon-plus">由模板导入计划</el-button> <el-button type="primary" @click="showPhaseTemplate" v-loading="load.add" icon="el-icon-plus">由模板导入计划</el-button>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-button type="primary" @click="showMenu" v-loading="load.add" icon="el-icon-plus">故事批量创建</el-button>
<el-button type="primary" @click="showMenu" v-loading="load.add" icon="el-icon-plus">需求批量创建</el-button>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-button type="warning" @click="loadTasksToXmProjectPhase(sels)" v-loading="load.edit" icon="el-icon-s-data">由任务汇总实际数据</el-button> <el-button type="warning" @click="loadTasksToXmProjectPhase(sels)" v-loading="load.edit" icon="el-icon-s-data">由任务汇总实际数据</el-button>
@ -46,7 +46,7 @@
<el-row> <el-row>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-button type="primary" @click="showMenu" v-loading="load.add" icon="el-icon-plus">故事批量创建(推荐)</el-button>
<el-button type="primary" @click="showMenu" v-loading="load.add" icon="el-icon-plus">需求批量创建(推荐)</el-button>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-button @click="showAdd" v-loading="load.add" icon="el-icon-plus">直接新建</el-button> <el-button @click="showAdd" v-loading="load.add" icon="el-icon-plus">直接新建</el-button>
@ -84,7 +84,7 @@
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'showSubAdd',data:scope.row}">+子阶段</el-dropdown-item> <el-dropdown-item :command="{type:'showSubAdd',data:scope.row}">+子阶段</el-dropdown-item>
<el-dropdown-item :command="{type:'showPhaseTemplate',data:scope.row}">+从模板批量导入子阶段</el-dropdown-item> <el-dropdown-item :command="{type:'showPhaseTemplate',data:scope.row}">+从模板批量导入子阶段</el-dropdown-item>
<el-dropdown-item :command="{type:'showMenu',data:scope.row}">+故事创建子阶段</el-dropdown-item>
<el-dropdown-item :command="{type:'showMenu',data:scope.row}">+需求创建子阶段</el-dropdown-item>
<el-dropdown-item :command="{type:'showEdit',data:scope.row}">编辑</el-dropdown-item> <el-dropdown-item :command="{type:'showEdit',data:scope.row}">编辑</el-dropdown-item>
<el-dropdown-item :command="{type:'loadTasksToXmProjectPhase',data:scope.row}" >从任务汇总实际数据</el-dropdown-item> <el-dropdown-item :command="{type:'loadTasksToXmProjectPhase',data:scope.row}" >从任务汇总实际数据</el-dropdown-item>
@ -183,7 +183,7 @@
<xm-project-group-select :visible="groupUserSelectVisible" :sel-project="selProject" :isSelectSingleUser="1" @user-confirm="groupUserSelectConfirm"></xm-project-group-select> <xm-project-group-select :visible="groupUserSelectVisible" :sel-project="selProject" :isSelectSingleUser="1" @user-confirm="groupUserSelectConfirm"></xm-project-group-select>
</el-drawer> </el-drawer>
<el-drawer append-to-body title="故事选择" :visible.sync="menuVisible" fullscreen :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="menuVisible" fullscreen :close-on-click-modal="false">
<xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" @menus-selected="onSelectedMenus" ></xm-menu-select> <xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" @menus-selected="onSelectedMenus" ></xm-menu-select>
</el-drawer> </el-drawer>
</el-row> </el-row>
@ -361,7 +361,7 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
xmRecordVisible:false, xmRecordVisible:false,
valueChangeRows:[], valueChangeRows:[],
batchEditVisible:false, batchEditVisible:false,
menuVisible:false,//
menuVisible:false,//
tableHeight:200, tableHeight:200,
pickerOptions: util.pickerOptions('date'), pickerOptions: util.pickerOptions('date'),
gstcVisible:false, gstcVisible:false,

2
src/views/xm/core/xmProjectPhase/XmProjectPhaseSelect.vue

@ -108,7 +108,7 @@
xmRecordVisible:false, xmRecordVisible:false,
valueChangeRows:[], valueChangeRows:[],
batchEditVisible:false, batchEditVisible:false,
menuVisible:false,//
menuVisible:false,//
pickerOptions: util.pickerOptions('date'), pickerOptions: util.pickerOptions('date'),
gstcVisible:false, gstcVisible:false,
tableHeight:300, tableHeight:300,

2
src/views/xm/core/xmProjectState/XmProjectStateAdd.vue

@ -162,7 +162,7 @@
<el-form-item label="产品数" prop="productCnt"> <el-form-item label="产品数" prop="productCnt">
<el-input-number v-model="addForm.productCnt" :min="0" :max="200"></el-input-number> <el-input-number v-model="addForm.productCnt" :min="0" :max="200"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="故事数" prop="menuCnt">
<el-form-item label="需求数" prop="menuCnt">
<el-input-number v-model="addForm.menuCnt" :min="0" :max="200"></el-input-number> <el-input-number v-model="addForm.menuCnt" :min="0" :max="200"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="任务数" prop="taskCnt"> <el-form-item label="任务数" prop="taskCnt">

2
src/views/xm/core/xmProjectState/XmProjectStateEdit.vue

@ -162,7 +162,7 @@
<el-form-item label="产品数" prop="productCnt"> <el-form-item label="产品数" prop="productCnt">
<el-input-number v-model="editForm.productCnt" :min="0" :max="200"></el-input-number> <el-input-number v-model="editForm.productCnt" :min="0" :max="200"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="故事数" prop="menuCnt">
<el-form-item label="需求数" prop="menuCnt">
<el-input-number v-model="editForm.menuCnt" :min="0" :max="200"></el-input-number> <el-input-number v-model="editForm.menuCnt" :min="0" :max="200"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="任务数" prop="taskCnt"> <el-form-item label="任务数" prop="taskCnt">

4
src/views/xm/core/xmQuestion/XmQuestionAdd.vue

@ -18,7 +18,7 @@
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
<el-tooltip content="隶属任务"><el-tag closable @click="showSelectTask" @close.stop="handleCloseTaskTag">{{addForm.taskName?addForm.taskName:'未关联任务'}}</el-tag> </el-tooltip> <el-tooltip content="隶属任务"><el-tag closable @click="showSelectTask" @close.stop="handleCloseTaskTag">{{addForm.taskName?addForm.taskName:'未关联任务'}}</el-tag> </el-tooltip>
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
<el-tooltip content="隶属故事"><el-tag closable @click="showSelectMenu" @close.stop="handleCloseMenuTag">{{addForm.menuName?addForm.menuName:"未关联故事"}}</el-tag></el-tooltip>
<el-tooltip content="隶属需求"><el-tag closable @click="showSelectMenu" @close.stop="handleCloseMenuTag">{{addForm.menuName?addForm.menuName:"未关联需求"}}</el-tag></el-tooltip>
</el-form-item> </el-form-item>
<el-form-item label="缺陷属性" prop="priority"> <el-form-item label="缺陷属性" prop="priority">
<el-col :span="24"> <el-col :span="24">
@ -87,7 +87,7 @@
<xm-task-list :sel-project="filters.selProject" @task-selected="onSelectedTask"></xm-task-list> <xm-task-list :sel-project="filters.selProject" @task-selected="onSelectedTask"></xm-task-list>
</el-drawer> </el-drawer>
<el-drawer append-to-body title="故事选择" :visible.sync="selectMenuVisible" size="70%" :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="selectMenuVisible" size="70%" :close-on-click-modal="false">
<xm-menu-select :is-select-menu="true" @selected="onSelectedMenu" :sel-project="filters.selProject"></xm-menu-select> <xm-menu-select :is-select-menu="true" @selected="onSelectedMenu" :sel-project="filters.selProject"></xm-menu-select>
</el-drawer> </el-drawer>

6
src/views/xm/core/xmQuestion/XmQuestionEdit.vue

@ -20,10 +20,10 @@
</el-row> </el-row>
<el-row class="page-main page-height-70"> <el-row class="page-main page-height-70">
<el-form :model="editForm" :rules="editFormRules" ref="editForm"> <el-form :model="editForm" :rules="editFormRules" ref="editForm">
<el-form-item label="隶属任务\故事" prop="taskName">
<el-form-item label="隶属任务\需求" prop="taskName">
<el-tooltip content="隶属任务"><el-tag closable @click="showSelectTask" @close.stop="handleCloseTaskTag">{{editForm.taskName?editForm.taskName:'未关联任务'}}</el-tag> </el-tooltip> <el-tooltip content="隶属任务"><el-tag closable @click="showSelectTask" @close.stop="handleCloseTaskTag">{{editForm.taskName?editForm.taskName:'未关联任务'}}</el-tag> </el-tooltip>
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
<el-tooltip content="隶属故事"><el-tag closable @click="showSelectMenu" @close.stop="handleCloseMenuTag">{{editForm.menuName?editForm.menuName:"未关联故事"}}</el-tag></el-tooltip>
<el-tooltip content="隶属需求"><el-tag closable @click="showSelectMenu" @close.stop="handleCloseMenuTag">{{editForm.menuName?editForm.menuName:"未关联需求"}}</el-tag></el-tooltip>
</el-form-item> </el-form-item>
<el-form-item label="缺陷属性" prop="priority"> <el-form-item label="缺陷属性" prop="priority">
<el-col :span="24"> <el-col :span="24">
@ -119,7 +119,7 @@
<xm-task-list :sel-project="selProject" @task-selected="onSelectedTask"></xm-task-list> <xm-task-list :sel-project="selProject" @task-selected="onSelectedTask"></xm-task-list>
</el-drawer> </el-drawer>
<el-drawer append-to-body title="故事选择" :visible.sync="selectMenuVisible" size="70%" :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="selectMenuVisible" size="70%" :close-on-click-modal="false">
<xm-menu-select :is-select-menu="true" @selected="onSelectedMenu" :sel-project="selProject"></xm-menu-select> <xm-menu-select :is-select-menu="true" @selected="onSelectedMenu" :sel-project="selProject"></xm-menu-select>
</el-drawer> </el-drawer>
</el-row> </el-row>

10
src/views/xm/core/xmQuestion/XmQuestionMng.vue

@ -15,7 +15,7 @@
</el-select> </el-select>
<el-tag v-if=" filters.product " closable @close="clearProduct">{{this.filters.product.productName}}</el-tag> <el-tag v-if=" filters.product " closable @close="clearProduct">{{this.filters.product.productName}}</el-tag>
<el-button v-else @click="showProductVisible" type="plian">选产品</el-button> <el-button v-else @click="showProductVisible" type="plian">选产品</el-button>
<el-button v-if=" !filters.menus || filters.menus.length==0" @click="showMenu"> 选择故事</el-button>
<el-button v-if=" !filters.menus || filters.menus.length==0" @click="showMenu"> 选择需求</el-button>
<el-tag v-else closable @close="clearFiltersMenu(filters.menus[0])">{{filters.menus[0].menuName.substr(0,5)}}({{filters.menus.length}})</el-tag> <el-tag v-else closable @close="clearFiltersMenu(filters.menus[0])">{{filters.menus[0].menuName.substr(0,5)}}({{filters.menus.length}})</el-tag>
<el-input style="width:200px;" v-model="filters.key" placeholder="缺陷名称"> <el-input style="width:200px;" v-model="filters.key" placeholder="缺陷名称">
<template slot="append"> <template slot="append">
@ -64,11 +64,11 @@
</el-select> </el-select>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">故事:</font>
<font class="more-label-font">需求:</font>
<font v-if=" filters.menus && filters.menus.length>0"> <font v-if=" filters.menus && filters.menus.length>0">
<el-tag v-for="(item,index) in filters.menus" :key="index" closable @close="clearFiltersMenu(item)">{{item.menuName.substr(0,10)}}</el-tag> <el-tag v-for="(item,index) in filters.menus" :key="index" closable @close="clearFiltersMenu(item)">{{item.menuName.substr(0,10)}}</el-tag>
</font> </font>
<el-button v-else @click="showMenu" type="plian">故事</el-button>
<el-button v-else @click="showMenu" type="plian">需求</el-button>
</el-col> </el-col>
<el-col :span="24" class="hidden-lg-and-up" style="padding-top:12px;"> <el-col :span="24" class="hidden-lg-and-up" style="padding-top:12px;">
<el-select v-model="filters.priority" placeholder="请选择紧急程度" clearable @change="changePriority"> <el-select v-model="filters.priority" placeholder="请选择紧急程度" clearable @change="changePriority">
@ -169,7 +169,7 @@
</el-table-column> </el-table-column>
<el-table-column prop="handlerUsername" label="指派给" width="100" show-overflow-tooltip> <el-table-column prop="handlerUsername" label="指派给" width="100" show-overflow-tooltip>
</el-table-column> </el-table-column>
<el-table-column prop="menuName" label="故事" width="100" show-overflow-tooltip></el-table-column>
<el-table-column prop="menuName" label="需求" width="100" show-overflow-tooltip></el-table-column>
</el-table> </el-table>
<el-pagination layout="total, sizes, prev, pager, next" @current-change="handleCurrentChange" @size-change="handleSizeChange" :page-sizes="[10,20, 50, 100, 500]" :current-page="pageInfo.pageNum" :page-size="pageInfo.pageSize" :total="pageInfo.total" style="float:right;"></el-pagination> <el-pagination layout="total, sizes, prev, pager, next" @current-change="handleCurrentChange" @size-change="handleSizeChange" :page-sizes="[10,20, 50, 100, 500]" :current-page="pageInfo.pageNum" :page-size="pageInfo.pageSize" :total="pageInfo.total" style="float:right;"></el-pagination>
</el-row> </el-row>
@ -189,7 +189,7 @@
<xm-project-list @project-confirm="onPorjectConfirm"></xm-project-list> <xm-project-list @project-confirm="onPorjectConfirm"></xm-project-list>
</el-drawer> </el-drawer>
<el-drawer append-to-body title="故事选择" :visible.sync="menuVisible" size="70%" :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="menuVisible" size="70%" :close-on-click-modal="false">
<xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" @menus-selected="onSelectedMenus" ></xm-menu-select> <xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" @menus-selected="onSelectedMenus" ></xm-menu-select>
</el-drawer> </el-drawer>

10
src/views/xm/core/xmTask/XmTaskAdd.vue

@ -6,7 +6,7 @@
<el-link type="text" @click="goAnchor('planInfo')">&nbsp;&nbsp;&nbsp;进度计划&nbsp;&nbsp;&nbsp;</el-link> <el-link type="text" @click="goAnchor('planInfo')">&nbsp;&nbsp;&nbsp;进度计划&nbsp;&nbsp;&nbsp;</el-link>
<el-link type="text" @click="goAnchor('costInfo')">&nbsp;&nbsp;&nbsp;工作量与成本&nbsp;&nbsp;&nbsp;</el-link> <el-link type="text" @click="goAnchor('costInfo')">&nbsp;&nbsp;&nbsp;工作量与成本&nbsp;&nbsp;&nbsp;</el-link>
<el-link type="text" @click="goAnchor('settleInfo')">&nbsp;&nbsp;&nbsp;结算信息&nbsp;&nbsp;&nbsp;</el-link> <el-link type="text" @click="goAnchor('settleInfo')">&nbsp;&nbsp;&nbsp;结算信息&nbsp;&nbsp;&nbsp;</el-link>
<el-link type="text" @click="goAnchor('menuInfo')">&nbsp;&nbsp;&nbsp;故事明细&nbsp;&nbsp;&nbsp;</el-link>
<el-link type="text" @click="goAnchor('menuInfo')">&nbsp;&nbsp;&nbsp;需求明细&nbsp;&nbsp;&nbsp;</el-link>
<el-link type="text" @click="goAnchor('taskOut')">&nbsp;&nbsp;&nbsp;众包&nbsp;&nbsp;&nbsp;</el-link> <el-link type="text" @click="goAnchor('taskOut')">&nbsp;&nbsp;&nbsp;众包&nbsp;&nbsp;&nbsp;</el-link>
</el-row> </el-row>
<el-row> <el-row>
@ -54,8 +54,8 @@
</el-select> </el-select>
</el-tooltip> </el-tooltip>
</el-form-item> </el-form-item>
<el-form-item label="所属故事" prop="menuId" id="menuInfoAdd">
{{addForm.menuName}} <el-button @click="menuVisible=true" round>选择归属故事</el-button>
<el-form-item label="所属需求" prop="menuId" id="menuInfoAdd">
{{addForm.menuName}} <el-button @click="menuVisible=true" round>选择归属需求</el-button>
</el-form-item> </el-form-item>
<el-form-item prop="skill" label="技能要求"> <el-form-item prop="skill" label="技能要求">
<el-button class="useradd-icon" type="text" @click.stop="showSkill()" icon="el-icon-circle-plus-outline">增加</el-button> <el-button class="useradd-icon" type="text" @click.stop="showSkill()" icon="el-icon-circle-plus-outline">增加</el-button>
@ -177,7 +177,7 @@
<skill-mng :task-skills="taskSkills" :jump="true" @select-confirm="onTaskSkillsSelected"></skill-mng> <skill-mng :task-skills="taskSkills" :jump="true" @select-confirm="onTaskSkillsSelected"></skill-mng>
</el-drawer> </el-drawer>
<el-drawer append-to-body title="故事选择" :visible.sync="menuVisible" fullscreen :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="menuVisible" fullscreen :close-on-click-modal="false">
<xm-menu-select :is-select-menu="true" @selected="onMenuSelected" :sel-project="xmProject"></xm-menu-select> <xm-menu-select :is-select-menu="true" @selected="onMenuSelected" :sel-project="xmProject"></xm-menu-select>
</el-drawer> </el-drawer>
@ -185,7 +185,7 @@
<xm-task-list :sel-project="xmProject" @task-selected="onSelectedTask"></xm-task-list> <xm-task-list :sel-project="xmProject" @task-selected="onSelectedTask"></xm-task-list>
</el-drawer> </el-drawer>
<el-drawer append-to-body title="故事明细" :visible.sync="menuDetailVisible" size="80%" :close-on-click-modal="false">
<el-drawer append-to-body title="需求明细" :visible.sync="menuDetailVisible" size="80%" :close-on-click-modal="false">
<xm-menu-rich-detail :visible="menuDetailVisible" :reload="true" :xm-menu="{menuId:addForm.menuId,menuName:addForm.menuName}" ></xm-menu-rich-detail> <xm-menu-rich-detail :visible="menuDetailVisible" :reload="true" :xm-menu="{menuId:addForm.menuId,menuName:addForm.menuName}" ></xm-menu-rich-detail>
</el-drawer> </el-drawer>
</section> </section>

4
src/views/xm/core/xmTask/XmTaskAgileKanban.vue

@ -6,7 +6,7 @@
border border
:height="tableHeight" :height="tableHeight"
style="width: 100%"> style="width: 100%">
<el-table-column :label="'故事 ('+menus.length + ')'" class-name="menu-name" width="200">
<el-table-column :label="'需求 ('+menus.length + ')'" class-name="menu-name" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="menu">{{scope.row.name}}</div> <div class="menu">{{scope.row.name}}</div>
</template> </template>
@ -65,7 +65,7 @@
</template> </template>
</el-table> </el-table>
<!-- <div class="row head-row"> <!-- <div class="row head-row">
<div class="item">故事({{ menus.length }})</div>
<div class="item">需求({{ menus.length }})</div>
<template v-for="(type, tt) in taskType"> <template v-for="(type, tt) in taskType">
<div class="item status" :key="tt">{{type.label}} ({{ type.number }})</div> <div class="item status" :key="tt">{{type.label}} ({{ type.number }})</div>
</template> </template>

10
src/views/xm/core/xmTask/XmTaskEdit.vue

@ -6,7 +6,7 @@
<el-link type="text" @click="goAnchor('planInfo')">&nbsp;&nbsp;&nbsp;进度计划&nbsp;&nbsp;&nbsp;</el-link> <el-link type="text" @click="goAnchor('planInfo')">&nbsp;&nbsp;&nbsp;进度计划&nbsp;&nbsp;&nbsp;</el-link>
<el-link type="text" @click="goAnchor('costInfo')">&nbsp;&nbsp;&nbsp;工作量与成本&nbsp;&nbsp;&nbsp;</el-link> <el-link type="text" @click="goAnchor('costInfo')">&nbsp;&nbsp;&nbsp;工作量与成本&nbsp;&nbsp;&nbsp;</el-link>
<el-link type="text" @click="goAnchor('settleInfo')">&nbsp;&nbsp;&nbsp;结算信息&nbsp;&nbsp;&nbsp;</el-link> <el-link type="text" @click="goAnchor('settleInfo')">&nbsp;&nbsp;&nbsp;结算信息&nbsp;&nbsp;&nbsp;</el-link>
<el-link type="text" @click="goAnchor('menuInfo')">&nbsp;&nbsp;&nbsp;故事明细&nbsp;&nbsp;&nbsp;</el-link>
<el-link type="text" @click="goAnchor('menuInfo')">&nbsp;&nbsp;&nbsp;需求明细&nbsp;&nbsp;&nbsp;</el-link>
<el-link type="text" @click="goAnchor('taskOut')">&nbsp;&nbsp;&nbsp;众包&nbsp;&nbsp;&nbsp;</el-link> <el-link type="text" @click="goAnchor('taskOut')">&nbsp;&nbsp;&nbsp;众包&nbsp;&nbsp;&nbsp;</el-link>
</el-row> </el-row>
<el-row> <el-row>
@ -52,8 +52,8 @@
</el-select> </el-select>
</el-tooltip> </el-tooltip>
</el-form-item> </el-form-item>
<el-form-item label="所属故事" prop="menuId" id="menuInfo">
{{editForm.menuName}} &nbsp;&nbsp;&nbsp; <el-link @click="menuVisible=true" type="primary">{{editForm.menuName?'更改归属故事':'设置归属故事'}}</el-link>&nbsp;&nbsp;&nbsp;<el-link v-if="editForm.menuName" @click="toMenu" type="primary"></el-link>
<el-form-item label="所属需求" prop="menuId" id="menuInfo">
{{editForm.menuName}} &nbsp;&nbsp;&nbsp; <el-link @click="menuVisible=true" type="primary">{{editForm.menuName?'更改归属需求':'设置归属需求'}}</el-link>&nbsp;&nbsp;&nbsp;<el-link v-if="editForm.menuName" @click="toMenu" type="primary"></el-link>
</el-form-item> </el-form-item>
<el-form-item prop="skill" label="技能要求"> <el-form-item prop="skill" label="技能要求">
<el-button class="useradd-icon" type="text" @click.stop="showSkill()" icon="el-icon-circle-plus-outline">增加</el-button> <el-button class="useradd-icon" type="text" @click.stop="showSkill()" icon="el-icon-circle-plus-outline">增加</el-button>
@ -180,7 +180,7 @@
<skill-mng :task-skills="taskSkills" :jump="true" @select-confirm="onTaskSkillsSelected"></skill-mng> <skill-mng :task-skills="taskSkills" :jump="true" @select-confirm="onTaskSkillsSelected"></skill-mng>
</el-drawer> </el-drawer>
<el-drawer append-to-body title="故事选择" :visible.sync="menuVisible" size="80%" :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="menuVisible" size="80%" :close-on-click-modal="false">
<xm-menu-select :is-select-menu="true" @selected="onMenuSelected" :sel-project="xmProject"></xm-menu-select> <xm-menu-select :is-select-menu="true" @selected="onMenuSelected" :sel-project="xmProject"></xm-menu-select>
</el-drawer> </el-drawer>
@ -192,7 +192,7 @@
<xm-execuser-mng :visible="execUserVisible" :xm-task="editForm" @after-add-submit="afterAddExecSubmit" @after-edit-submit="afterEditExecSubmit" @after-delete-submit="afterEditExecSubmit" ref="execuserMng"></xm-execuser-mng> <xm-execuser-mng :visible="execUserVisible" :xm-task="editForm" @after-add-submit="afterAddExecSubmit" @after-edit-submit="afterEditExecSubmit" @after-delete-submit="afterEditExecSubmit" ref="execuserMng"></xm-execuser-mng>
</el-drawer> </el-drawer>
<el-drawer append-to-body title="故事明细" :visible.sync="menuDetailVisible" size="80%" :close-on-click-modal="false">
<el-drawer append-to-body title="需求明细" :visible.sync="menuDetailVisible" size="80%" :close-on-click-modal="false">
<xm-menu-rich-detail :visible="menuDetailVisible" :reload="true" :xm-menu="{menuId:editForm.menuId,menuName:editForm.menuName}" ></xm-menu-rich-detail> <xm-menu-rich-detail :visible="menuDetailVisible" :reload="true" :xm-menu="{menuId:editForm.menuId,menuName:editForm.menuName}" ></xm-menu-rich-detail>
</el-drawer> </el-drawer>
</section> </section>

2
src/views/xm/core/xmTask/XmTaskList.vue

@ -54,7 +54,7 @@
{{scope.row.sortLevel}}&nbsp;{{scope.row.name}} {{scope.row.sortLevel}}&nbsp;{{scope.row.name}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="menuName" min-width="150" label="故事" show-overflow-tooltip></el-table-column>
<el-table-column prop="menuName" min-width="150" label="需求" show-overflow-tooltip></el-table-column>
<el-table-column prop="startTime" label="任务起止时间" min-width="260" show-overflow-tooltip> <el-table-column prop="startTime" label="任务起止时间" min-width="260" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">

2
src/views/xm/core/xmTask/XmTaskListForMenu.vue

@ -29,7 +29,7 @@
{{scope.row.sortLevel}}&nbsp;{{scope.row.name}} {{scope.row.sortLevel}}&nbsp;{{scope.row.name}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="menuName" label="故事名" min-width="160" show-overflow-tooltip> </el-table-column>
<el-table-column prop="menuName" label="需求名" min-width="160" show-overflow-tooltip> </el-table-column>
<el-table-column prop="projectName" label="项目名称" min-width="160" show-overflow-tooltip> <el-table-column prop="projectName" label="项目名称" min-width="160" show-overflow-tooltip>
</el-table-column> </el-table-column>

26
src/views/xm/core/xmTask/XmTaskMng.vue

@ -45,7 +45,7 @@
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-button v-if=" isTaskCenter!='1' && isMy!='1'" @click="showMenu" icon="el-icon-plus">故事快速创建任务(推荐)</el-button>
<el-button v-if=" isTaskCenter!='1' && isMy!='1'" @click="showMenu" icon="el-icon-plus">需求快速创建任务(推荐)</el-button>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<el-button v-if=" isTaskCenter!='1' && isMy!='1'" @click="showTaskTemplate" icon="el-icon-plus">从模板快速导入任务</el-button> <el-button v-if=" isTaskCenter!='1' && isMy!='1'" @click="showTaskTemplate" icon="el-icon-plus">从模板快速导入任务</el-button>
@ -73,11 +73,11 @@
<el-button v-else @click="showProjectList" type="plian">选项目</el-button> <el-button v-else @click="showProjectList" type="plian">选项目</el-button>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">故事:</font>
<font class="more-label-font">需求:</font>
<font v-if=" filters.menus && filters.menus.length>0"> <font v-if=" filters.menus && filters.menus.length>0">
<el-tag v-for="(item,index) in filters.menus" :key="index" closable @close="clearFiltersMenu(item)">{{item.menuName.substr(0,10)}}</el-tag> <el-tag v-for="(item,index) in filters.menus" :key="index" closable @close="clearFiltersMenu(item)">{{item.menuName.substr(0,10)}}</el-tag>
</font> </font>
<el-button v-else @click="showMenuStory" type="plian">故事</el-button>
<el-button v-else @click="showMenuStory" type="plian">需求</el-button>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">责任人:</font> <font class="more-label-font">责任人:</font>
@ -200,12 +200,12 @@
--> -->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="menuId" label="故事" width="120" show-overflow-tooltip>
<el-table-column prop="menuId" label="需求" width="120" show-overflow-tooltip>
<template slot="header"> <template slot="header">
故事
需求
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<el-link @click.stop="toMenu(scope.row)">{{scope.row.menuName?scope.row.menuName:'去关联故事'}}</el-link>
<el-link @click.stop="toMenu(scope.row)">{{scope.row.menuName?scope.row.menuName:'去关联需求'}}</el-link>
</template> </template>
</el-table-column> </el-table-column>
@ -216,7 +216,7 @@
<el-button ><i class="el-icon-plus"></i></el-button> <el-button ><i class="el-icon-plus"></i></el-button>
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'showMenu',data:scope.row}">+故事创建子任务(推荐)</el-dropdown-item>
<el-dropdown-item :command="{type:'showMenu',data:scope.row}">+需求创建子任务(推荐)</el-dropdown-item>
<el-dropdown-item :command="{type:'showSubAdd',data:scope.row}">+子任务</el-dropdown-item> <el-dropdown-item :command="{type:'showSubAdd',data:scope.row}">+子任务</el-dropdown-item>
<el-dropdown-item :command="{type:'showTaskTemplate',data:scope.row}">+从模板批量导入子任务</el-dropdown-item> <el-dropdown-item :command="{type:'showTaskTemplate',data:scope.row}">+从模板批量导入子任务</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
@ -261,7 +261,7 @@
</div> </div>
<div class="exector extra"> <div class="exector extra">
<div class="field-label">用户故事</div><el-tag v-if="editForm.menuName" style="margin-left:10px;border-radius:30px;" >{{editForm.menuName}}</el-tag>
<div class="field-label">需求</div><el-tag v-if="editForm.menuName" style="margin-left:10px;border-radius:30px;" >{{editForm.menuName}}</el-tag>
</div> </div>
@ -374,10 +374,10 @@
<xm-project-list class="padding-left" @project-confirm="onPorjectConfirm"></xm-project-list> <xm-project-list class="padding-left" @project-confirm="onPorjectConfirm"></xm-project-list>
</el-drawer> </el-drawer>
<el-drawer append-to-body title="故事选择" :visible.sync="menuVisible" size="70%" :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="menuVisible" size="70%" :close-on-click-modal="false">
<xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" @menus-selected="onSelectedMenus" ></xm-menu-select> <xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" @menus-selected="onSelectedMenus" ></xm-menu-select>
</el-drawer> </el-drawer>
<el-drawer append-to-body title="故事选择" :visible.sync="menuStory" size="70%" :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="menuStory" size="70%" :close-on-click-modal="false">
<xm-menu-select :visible="menuStory" :is-select-menu="true" :multi="true" @menus-selected="onSelectedStory"></xm-menu-select> <xm-menu-select :visible="menuStory" :is-select-menu="true" :multi="true" @menus-selected="onSelectedStory"></xm-menu-select>
</el-drawer> </el-drawer>
@ -387,7 +387,7 @@
<el-drawer append-to-body title="选择执行人" :visible.sync="menuExecutor" :size="650" :close-on-click-modal="false"> <el-drawer append-to-body title="选择执行人" :visible.sync="menuExecutor" :size="650" :close-on-click-modal="false">
<xm-project-group-select :visible="menuExecutor" :sel-project="selProject" :isSelectSingleUser="1" @user-confirm="seleExecutor" ></xm-project-group-select> <xm-project-group-select :visible="menuExecutor" :sel-project="selProject" :isSelectSingleUser="1" @user-confirm="seleExecutor" ></xm-project-group-select>
</el-drawer> </el-drawer>
<el-drawer append-to-body title="故事明细" :visible.sync="menuDetailVisible" :size="650" :close-on-click-modal="false">
<el-drawer append-to-body title="需求明细" :visible.sync="menuDetailVisible" :size="650" :close-on-click-modal="false">
<xm-menu-rich-detail :visible="menuDetailVisible" :reload="true" :xm-menu="{menuId:editForm.menuId,menuName:editForm.menuName}" ></xm-menu-rich-detail> <xm-menu-rich-detail :visible="menuDetailVisible" :reload="true" :xm-menu="{menuId:editForm.menuId,menuName:editForm.menuName}" ></xm-menu-rich-detail>
</el-drawer> </el-drawer>
<el-drawer append-to-body title="选择负责人" :visible.sync="groupUserSelectVisible" size="60%" :close-on-click-modal="false"> <el-drawer append-to-body title="选择负责人" :visible.sync="groupUserSelectVisible" size="60%" :close-on-click-modal="false">
@ -665,7 +665,7 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
menuDetailVisible:false, menuDetailVisible:false,
pickerOptions: util.pickerOptions(), pickerOptions: util.pickerOptions(),
displayType:'table', displayType:'table',
menuStory:false,//
menuStory:false,//
menuGroupUser:false,// menuGroupUser:false,//
menuExecutor:false,// menuExecutor:false,//
groupUserSelectVisible:false,// groupUserSelectVisible:false,//
@ -1110,7 +1110,7 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
this.menuVisible=false; this.menuVisible=false;
}, },
onSelectedStory(menus){//
onSelectedStory(menus){//
if(menus==null || menus.length==0){ if(menus==null || menus.length==0){
this.menuStory=false; this.menuStory=false;

10
src/views/xm/core/xmTestCase/XmTestCaseAdd.vue

@ -9,10 +9,10 @@
<el-form-item label="模块名称" prop="moduleName"> <el-form-item label="模块名称" prop="moduleName">
<el-input v-model="addForm.moduleName" placeholder="模块名称" ></el-input> <el-input v-model="addForm.moduleName" placeholder="模块名称" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="关联的故事" prop="menuId">
<el-form-item label="关联的需求" prop="menuId">
<el-tag v-if="addForm.menuName && addForm.menuName!=''" closable @close="clearFiltersMneu">{{addForm.menuName}}</el-tag> <el-tag v-if="addForm.menuName && addForm.menuName!=''" closable @close="clearFiltersMneu">{{addForm.menuName}}</el-tag>
<el-tag v-else>还没关联任何故事</el-tag>
<el-button @click="showMenu">关联故事</el-button>
<el-tag v-else>还没关联任何需求</el-tag>
<el-button @click="showMenu">关联需求</el-button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -33,7 +33,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-drawer append-to-body title="故事选择" :visible.sync="menuVisible" fullscreen :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="menuVisible" fullscreen :close-on-click-modal="false">
<xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" :exclude-iteration-id="iteration?iteration.id:''" @menus-selected="onSelectedMenus" ></xm-menu-select> <xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" :exclude-iteration-id="iteration?iteration.id:''" @menus-selected="onSelectedMenus" ></xm-menu-select>
</el-drawer> </el-drawer>
</el-row> </el-row>
@ -73,7 +73,7 @@
load:{ list: false, edit: false, del: false, add: false },//... load:{ list: false, edit: false, del: false, add: false },//...
addFormRules: { addFormRules: {
menuId: [ menuId: [
{ required: true, message: '故事不能为空', trigger: 'blur' }
{ required: true, message: '需求不能为空', trigger: 'blur' }
], ],
caseName: [ caseName: [
{ required: true, message: '标题不能为空', trigger: 'blur' } { required: true, message: '标题不能为空', trigger: 'blur' }

10
src/views/xm/core/xmTestCase/XmTestCaseEdit.vue

@ -9,10 +9,10 @@
<el-form-item label="模块名称" prop="moduleName"> <el-form-item label="模块名称" prop="moduleName">
<el-input v-model="editForm.moduleName" placeholder="模块名称" ></el-input> <el-input v-model="editForm.moduleName" placeholder="模块名称" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="关联的故事" prop="menuId">
<el-form-item label="关联的需求" prop="menuId">
<el-tag v-if="editForm.menuId && editForm.menuId!=''" @close="clearFiltersMneu">{{editForm.menuName}}</el-tag> <el-tag v-if="editForm.menuId && editForm.menuId!=''" @close="clearFiltersMneu">{{editForm.menuName}}</el-tag>
<el-tag v-else>还没关联任何故事</el-tag>
<el-button v-if="!editForm.menuId" @click="showMenu">关联故事</el-button>
<el-tag v-else>还没关联任何需求</el-tag>
<el-button v-if="!editForm.menuId" @click="showMenu">关联需求</el-button>
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="moduleName"> <el-form-item label="状态" prop="moduleName">
<el-radio v-model="editForm.caseStatus" label="1" placeholder="状态" >正常</el-radio> <el-radio v-model="editForm.caseStatus" label="1" placeholder="状态" >正常</el-radio>
@ -35,7 +35,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-drawer append-to-body title="故事选择" :visible.sync="menuVisible" fullscreen :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="menuVisible" fullscreen :close-on-click-modal="false">
<xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" :exclude-iteration-id="iteration?iteration.id:''" @menus-selected="onSelectedMenus" ></xm-menu-select> <xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" :exclude-iteration-id="iteration?iteration.id:''" @menus-selected="onSelectedMenus" ></xm-menu-select>
</el-drawer> </el-drawer>
</el-row> </el-row>
@ -73,7 +73,7 @@
load:{ list: false, add: false, del: false, edit: false },//... load:{ list: false, add: false, del: false, edit: false },//...
editFormRules: { editFormRules: {
menuId: [ menuId: [
{ required: true, message: '故事不能为空', trigger: 'blur' }
{ required: true, message: '需求不能为空', trigger: 'blur' }
], ],
caseName: [ caseName: [
{ required: true, message: '标题不能为空', trigger: 'blur' } { required: true, message: '标题不能为空', trigger: 'blur' }

12
src/views/xm/core/xmTestCase/XmTestCaseMng.vue

@ -4,7 +4,7 @@
<div> <div>
<el-tag v-if=" filters.product " closable @close="clearProduct">{{this.filters.product.productName}}</el-tag> <el-tag v-if=" filters.product " closable @close="clearProduct">{{this.filters.product.productName}}</el-tag>
<el-button v-else @click="showProductVisible" type="plian">选产品</el-button> <el-button v-else @click="showProductVisible" type="plian">选产品</el-button>
<el-button v-if=" !filters.menus || filters.menus.length==0" @click="showMenu"> 选择故事</el-button>
<el-button v-if=" !filters.menus || filters.menus.length==0" @click="showMenu"> 选择需求</el-button>
<el-tag v-else closable @close=" clearFiltersMenu(filters.menus[0])">{{filters.menus[0].menuName.substr(0,5)}}({{filters.menus.length}})</el-tag> <el-tag v-else closable @close=" clearFiltersMenu(filters.menus[0])">{{filters.menus[0].menuName.substr(0,5)}}({{filters.menus.length}})</el-tag>
<el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询"> <el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询">
<template slot="append"> <template slot="append">
@ -30,11 +30,11 @@
<el-button v-else @click="showProjectList" type="plian">选项目</el-button> <el-button v-else @click="showProjectList" type="plian">选项目</el-button>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">故事:</font>
<font class="more-label-font">需求:</font>
<font v-if=" filters.menus && filters.menus.length>0"> <font v-if=" filters.menus && filters.menus.length>0">
<el-tag v-for="(item,index) in filters.menus" :key="index" closable @close="clearFiltersMenu(item)">{{item.menuName.substr(0,10)}}</el-tag> <el-tag v-for="(item,index) in filters.menus" :key="index" closable @close="clearFiltersMenu(item)">{{item.menuName.substr(0,10)}}</el-tag>
</font> </font>
<el-button v-else @click="showMenu" type="plian">故事</el-button>
<el-button v-else @click="showMenu" type="plian">需求</el-button>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">更新人:</font> <font class="more-label-font">更新人:</font>
@ -77,9 +77,9 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="caseRemark" label="备注" min-width="80" show-overflow-tooltip></el-table-column> <el-table-column prop="caseRemark" label="备注" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column prop="menuName" label="故事名" min-width="80" show-overflow-tooltip>
<el-table-column prop="menuName" label="需求名" min-width="80" show-overflow-tooltip>
<template slot="header"> <template slot="header">
故事<el-button @click="showMenu" icon="el-icon-search" ></el-button>
需求<el-button @click="showMenu" icon="el-icon-search" ></el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column v-if="!multiSelect" prop="ctime" label="创建时间" min-width="80" show-overflow-tooltip></el-table-column> <el-table-column v-if="!multiSelect" prop="ctime" label="创建时间" min-width="80" show-overflow-tooltip></el-table-column>
@ -115,7 +115,7 @@
<xm-group-mng v-if="filters.selProject" :sel-project=" filters.selProject " :is-select-single-user="1" @user-confirm="onFiltersUserConfirm"></xm-group-mng> <xm-group-mng v-if="filters.selProject" :sel-project=" filters.selProject " :is-select-single-user="1" @user-confirm="onFiltersUserConfirm"></xm-group-mng>
</el-drawer> </el-drawer>
</el-row> </el-row>
<el-drawer append-to-body title="故事选择" :visible.sync="menuVisible" size="80%" :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="menuVisible" size="80%" :close-on-click-modal="false">
<xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" @menus-selected="onSelectedMenus" ></xm-menu-select> <xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" @menus-selected="onSelectedMenus" ></xm-menu-select>
</el-drawer> </el-drawer>

4
src/views/xm/core/xmTestCaseExec/XmTestCaseExecAdd.vue

@ -57,8 +57,8 @@
<el-form-item label="归属测试任务名称" prop="taskName"> <el-form-item label="归属测试任务名称" prop="taskName">
<el-input v-model="addForm.taskName" placeholder="归属测试任务名称" ></el-input> <el-input v-model="addForm.taskName" placeholder="归属测试任务名称" ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="故事编号" prop="menuId">
<el-input v-model="addForm.menuId" placeholder="故事编号" ></el-input>
<el-form-item label="需求编号" prop="menuId">
<el-input v-model="addForm.menuId" placeholder="需求编号" ></el-input>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-col :span="24" :offset="8"> <el-col :span="24" :offset="8">

4
src/views/xm/core/xmTestCaseExec/XmTestCaseExecEdit.vue

@ -57,8 +57,8 @@
<el-form-item label="归属测试任务名称" prop="taskName"> <el-form-item label="归属测试任务名称" prop="taskName">
<el-input v-model="editForm.taskName" placeholder="归属测试任务名称"></el-input> <el-input v-model="editForm.taskName" placeholder="归属测试任务名称"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="故事编号" prop="menuId">
<el-input v-model="editForm.menuId" placeholder="故事编号"></el-input>
<el-form-item label="需求编号" prop="menuId">
<el-input v-model="editForm.menuId" placeholder="需求编号"></el-input>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-col :span="24" :offset="8"> <el-col :span="24" :offset="8">

12
src/views/xm/core/xmTestCaseExec/XmTestCaseExecMng.vue

@ -4,7 +4,7 @@
<el-checkbox v-model="gstcVisible" >甘特图</el-checkbox> <el-checkbox v-model="gstcVisible" >甘特图</el-checkbox>
<el-tag type="primary" v-if="this.filters.selProject && !selProject " closable @close="clearProject" @click="showProjectList">{{ this.filters.selProject.name }}</el-tag> <el-tag type="primary" v-if="this.filters.selProject && !selProject " closable @close="clearProject" @click="showProjectList">{{ this.filters.selProject.name }}</el-tag>
<el-button v-if="!this.filters.selProject" @click="showProjectList">选择项目</el-button> <el-button v-if="!this.filters.selProject" @click="showProjectList">选择项目</el-button>
<el-button v-if=" !filters.menus || filters.menus.length==0" @click="showMenu"> 选择故事</el-button>
<el-button v-if=" !filters.menus || filters.menus.length==0" @click="showMenu"> 选择需求</el-button>
<el-tag v-else closable @close="clearFiltersMenu(filters.menus[0])">{{filters.menus[0].menuName.substr(0,5)}}({{filters.menus.length}})</el-tag> <el-tag v-else closable @close="clearFiltersMenu(filters.menus[0])">{{filters.menus[0].menuName.substr(0,5)}}({{filters.menus.length}})</el-tag>
<el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询"> <el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询">
<template slot="append"> <template slot="append">
@ -28,11 +28,11 @@
<el-button v-else @click="showProjectList" type="plian">选项目</el-button> <el-button v-else @click="showProjectList" type="plian">选项目</el-button>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">故事:</font>
<font class="more-label-font">需求:</font>
<font v-if=" filters.menus && filters.menus.length>0"> <font v-if=" filters.menus && filters.menus.length>0">
<el-tag v-for="(item,index) in filters.menus" :key="index" closable @close="clearFiltersMenu(item)">{{item.menuName.substr(0,10)}}</el-tag> <el-tag v-for="(item,index) in filters.menus" :key="index" closable @close="clearFiltersMenu(item)">{{item.menuName.substr(0,10)}}</el-tag>
</font> </font>
<el-button v-else @click="showMenu" type="plian">故事</el-button>
<el-button v-else @click="showMenu" type="plian">需求</el-button>
</el-col> </el-col>
<el-col :span="24" style="padding-top:5px;"> <el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">执行人:</font> <font class="more-label-font">执行人:</font>
@ -91,9 +91,9 @@
{{scope.row.caseId}}&nbsp;<el-link type="primary" @click="showCaseDetail(scope.row)">{{scope.row.caseName}}</el-link> {{scope.row.caseId}}&nbsp;<el-link type="primary" @click="showCaseDetail(scope.row)">{{scope.row.caseName}}</el-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="menuName" label="故事" min-width="100" show-overflow-tooltip>
<el-table-column prop="menuName" label="需求" min-width="100" show-overflow-tooltip>
<template slot="header" slot-scope="scope"> <template slot="header" slot-scope="scope">
故事<el-button @click="showMenu" icon="el-icon-search" ></el-button>
需求<el-button @click="showMenu" icon="el-icon-search" ></el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -172,7 +172,7 @@
<el-drawer title="选中项目" :visible.sync="selectProjectVisible" size="80%" append-to-body :close-on-click-modal="false"> <el-drawer title="选中项目" :visible.sync="selectProjectVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-project-list @project-confirm="onPorjectConfirm"></xm-project-list> <xm-project-list @project-confirm="onPorjectConfirm"></xm-project-list>
</el-drawer> </el-drawer>
<el-drawer append-to-body title="故事选择" :visible.sync="menuVisible" fullscreen :close-on-click-modal="false">
<el-drawer append-to-body title="需求选择" :visible.sync="menuVisible" fullscreen :close-on-click-modal="false">
<xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" @menus-selected="onSelectedMenus" ></xm-menu-select> <xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" @menus-selected="onSelectedMenus" ></xm-menu-select>
</el-drawer> </el-drawer>
<el-drawer title="选中用户" :visible.sync="selectUserForFiltersVisible" size="80%" append-to-body :close-on-click-modal="false"> <el-drawer title="选中用户" :visible.sync="selectUserForFiltersVisible" size="80%" append-to-body :close-on-click-modal="false">

Loading…
Cancel
Save