From ba6fee0f21e926339108925df98b4a4def3956a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Mon, 28 Mar 2022 23:06:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/js/treeTool.js | 69 ++-- src/views/xm/core/xmMenu/XmMenuEdit.vue | 227 +++++------ src/views/xm/core/xmMenu/XmMenuMng.vue | 52 +-- src/views/xm/core/xmWorkItem/XmSubBugList.vue | 375 ++++++++++++++++++ .../xm/core/xmWorkItem/XmSubMenuList.vue | 134 +++++++ .../xm/core/xmWorkItem/XmSubTaskList.vue | 129 ++++++ .../xm/core/xmWorkItem/XmSubWorkItem.vue | 207 +++------- 7 files changed, 874 insertions(+), 319 deletions(-) create mode 100644 src/views/xm/core/xmWorkItem/XmSubBugList.vue create mode 100644 src/views/xm/core/xmWorkItem/XmSubMenuList.vue create mode 100644 src/views/xm/core/xmWorkItem/XmSubTaskList.vue diff --git a/src/common/js/treeTool.js b/src/common/js/treeTool.js index 69f97268..27700662 100644 --- a/src/common/js/treeTool.js +++ b/src/common/js/treeTool.js @@ -1,21 +1,22 @@ - + export default { - reloadAllChildren: function(table,maps, rows,parentIdName,loadChildren,idMaps) { - + reloadAllChildren: function(table,maps, rows,parentIdName,loadChildren,idMaps) { + debugger; + if(!rows||rows.length==0){ return; } if(!maps || maps.length==0){ return; } - + if(!table){ return; } var lazyTreeNodeMap=table.store.states.lazyTreeNodeMap - var parentIds=rows.map(i=>i[parentIdName]) + var parentIds=rows.map(i=>i[parentIdName]) if(idMaps==null){ idMaps=new Map(); } @@ -26,47 +27,47 @@ export default { if(!idMaps.has(k)){ idMaps.set(k,k); if (maps.get(k)) { - const { tree, treeNode, resolve } = maps.get(k) + const { tree, treeNode, resolve } = maps.get(k) lazyTreeNodeMap[k]=[] if (tree) { // 重新执行父节点加载子级操作 loadChildren(tree, treeNode, resolve) - if(tree[parentIdName]){ + if(tree[parentIdName]){ this.reloadAllChildren(table,maps, [tree],parentIdName,loadChildren,idMaps) } } - } - } - }); + } + } + }); }, - - reloadChildren: function(table,maps, parentId,parentIdName,loadChildren) { + + reloadChildren: function(table,maps, parentId,parentIdName,loadChildren) { var params={}; params[parentIdName]=parentId; - this.reloadAllChildren(table,maps, [params],parentIdName,loadChildren) - }, - reloadChildrenByOpType: function(table,maps, parentId,parentIdName,loadChildren,opType) { + this.reloadAllChildren(table,maps, [params],parentIdName,loadChildren) + }, + reloadChildrenByOpType: function(table,maps, parentId,parentIdName,loadChildren,opType) { var lazyTreeNodeMap=table.store.states.lazyTreeNodeMap if (maps.get(parentId)) { - const { tree, treeNode, resolve } = maps.get(parentId) + const { tree, treeNode, resolve } = maps.get(parentId) if (tree) { // 重新执行父节点加载子级操作 var oldDatas=lazyTreeNodeMap[parentId] - loadChildren(tree, treeNode, resolve,oldDatas,opType) + loadChildren(tree, treeNode, resolve,oldDatas,opType) } - } - - }, - clearOpType: function(table,maps,parentId,parentIdName,loadChildren) { + } + + }, + clearOpType: function(table,maps,parentId,parentIdName,loadChildren) { var lazyTreeNodeMap=table.store.states.lazyTreeNodeMap if (maps.get(parentId)) { - const { tree, treeNode, resolve } = maps.get(parentId) + const { tree, treeNode, resolve } = maps.get(parentId) if (tree) { // 重新执行父节点加载子级操作 var oldDatas=lazyTreeNodeMap[parentId] - loadChildren(tree, treeNode, resolve,oldDatas,"clearOpType") + loadChildren(tree, treeNode, resolve,oldDatas,"clearOpType") } - } - - }, + } + + }, /** * 将类表数据转换为如下树状结构的数据 * { @@ -81,12 +82,12 @@ export default { * @param {*} pidName 上级字段名称,如 pmenId * @param {*} idName 本条数据主键字段名称 如 menuId * @param {*} rowCallBack(data),如果需要对部分字段进行转换,可以传入这个回调函数。比如需要将 name:'陈天财' => label:'陈天财' - * @returns + * @returns */ - translateDataToTree: function(data2,pidName,idName,rowCallBack) { + translateDataToTree: function(data2,pidName,idName,rowCallBack) { var data=JSON.parse(JSON.stringify(data2)); let parents = data.filter(value =>{ - //如果我的上级为空,则我是最上级 + //如果我的上级为空,则我是最上级 if(value[pidName] == 'undefined' || value[pidName] == null || value[pidName] == ''|| value[pidName] == '0'){ return true; @@ -96,15 +97,15 @@ export default { }else { return true } - - }) + + }) let children = data.filter(value =>{ if(data.some(i=>value[pidName]==i[idName])){ return true; }else{ return false; - } - }) + } + }) let translator = (parents, children) => { parents.forEach((parent) => { if(rowCallBack){ @@ -127,6 +128,6 @@ export default { translator(parents, children) return parents - }, + }, } diff --git a/src/views/xm/core/xmMenu/XmMenuEdit.vue b/src/views/xm/core/xmMenu/XmMenuEdit.vue index a727c803..d4c075ef 100644 --- a/src/views/xm/core/xmMenu/XmMenuEdit.vue +++ b/src/views/xm/core/xmMenu/XmMenuEdit.vue @@ -1,27 +1,27 @@ + + + - + - + {{editForm.productName?editForm.productName:editForm.productId}} @@ -30,168 +30,168 @@ 无 - - - + + +
-
+
-
- {{editForm.pmenuName?editForm.pmenuName:editForm.pmenuId}} -
-
+ + {{editForm.pmenuName?editForm.pmenuName:editForm.pmenuId}} +
+
- {{editForm.mmUsername}} + {{editForm.mmUsername}} 选跟进人 - + -
- +
+ - + - + - + - - + + - + - + - + - - + + - - + + - {{editForm.proposerName}} + {{editForm.proposerName}} 选提出人 - + - + - - + + - + - - + + - + - - - + + + - + - - + + - + - - - + + + - - + + - + - 提交 + 提交 - - - - + + + + - + 下级往上级汇总 - 由任务汇总 + 由任务汇总 手工填报 - + - +  h - +  h - +  h - + 控制规则:
下级往上汇总:指工时数据按  用户故事->特性->史诗  这样的汇总关系将数据逐级往上汇总。
由任务汇总: 指用户故事的工时数据由任务汇总。
手工填报: 指用户故事的工时数据来自手工填报,无论是否关联了任务,都不从任务汇总。
- + - 提交 + 提交
- + - 元 - + 元 + - 元 - - + 元 + + - 提交 + 提交 - - - - + + + + - - + + - - + + - - - + + + - 提交 + 提交 - + 关联知识库 - + 上传附件
@@ -199,18 +199,18 @@ - + - + - - + + @@ -243,7 +243,7 @@ import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue'; } } }, - calcMenuLabel(){ + calcMenuLabel(){ var params={label:'工作项',icon:'',color:''}; if(this.editForm.dclass==='1'){ params={label:'史诗',icon:'el-icon-s-promotion',color:'rgb(255, 153, 51)'}; @@ -251,9 +251,9 @@ import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue'; params={label:'特性',icon:'el-icon-s-flag',color:'rgb(0, 153, 51)'}; }else if(this.editForm.dclass==='3'){ params={label:'故事',icon:'el-icon-document',color:' rgb(79, 140, 255)'}; - } + } return params; - }, + }, }, props:['xmMenu','visible','parentMenu','product','dclass'], watch: { @@ -263,11 +263,11 @@ import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue'; 'visible':function(visible) { if(visible==true){ if(this.editForm.startTime && this.editForm.endTime){ - this.dateRanger.push(this.editForm.startTime) + this.dateRanger.push(this.editForm.startTime) this.dateRanger.push(this.editForm.endTime) } } - }, + }, 'editForm.mactWorkload':function(val,oldVal){ if(!this.editForm.budgetWorkload){ return; @@ -320,7 +320,7 @@ import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue'; mmUserSelectVisible:false, dicts:{ menuStatus:[ - + {id:"0", name:"初始"}, {id:"1", name:"待评审"}, {id:"2", name:"待设计"}, @@ -330,7 +330,7 @@ import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue'; {id:"6", name:"待上线"}, {id:"7", name:"运行中"}, {id:"8", name:"已下线"}, - {id:"9", name:"已删除"}, + {id:"9", name:"已删除"}, ] }, tagSelectVisible:false, @@ -350,7 +350,7 @@ import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue'; this.$emit('cancel'); }, //新增提交XmMenu 项目需求表 父组件监听@submit="afterAddSubmit" - editSubmit: function () { + editSubmit: function () { this.$refs.editForm.validate((valid) => { if (valid) { @@ -408,8 +408,8 @@ import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue'; this.editForm.status=status; }, onTagSelected(tags) { - this.tagSelectVisible = false; - if(tags && tags.length>0){ + this.tagSelectVisible = false; + if(tags && tags.length>0){ this.editForm.tagIds=tags.map(i=>i.tagId).join(",") this.editForm.tagNames=tags.map(i=>i.tagName).join(",") }else{ @@ -455,13 +455,14 @@ import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue'; params[fieldName]=$event }else{ params={...params,...$event} - } + } } editXmMenuSomeFields(params).then(res=>{ var tips = res.data.tips; if(tips.isOk){ - Object.assign(row,params) + Object.assign(row,params) + this.$emit("edit-fields",params); if(fieldName==='remark'||fieldName==='link'){ this.$notify({showClose:true,message:tips.msg,type:tips.isOk?'success':'error'}) } @@ -470,6 +471,10 @@ import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue'; } }) }, + onAddSubMenu(menu){ + debugger; + this.$emit("add-sub-menu",menu) + } },//end method components: { //在下面添加其它组件 'xm-menu-edit':XmMenuEdit @@ -480,14 +485,14 @@ import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue'; XmSubWorkItem, }, mounted() { - - + + initSimpleDicts('all',['demandSource','demandLvl','demandType','priority','menuStatus'] ).then(res=>{ this.dicts=res.data.data; }) this.editForm=Object.assign(this.editForm, this.xmMenu); if(this.editForm.startTime && this.editForm.endTime){ - this.dateRanger.push(this.editForm.startTime) + this.dateRanger.push(this.editForm.startTime) this.dateRanger.push(this.editForm.endTime) } /**在下面写其它函数***/ @@ -509,5 +514,5 @@ import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue'; font-size: 14px; display: inline-block; margin-right: 5px; -} +} diff --git a/src/views/xm/core/xmMenu/XmMenuMng.vue b/src/views/xm/core/xmMenu/XmMenuMng.vue index 764a49b2..bc95f6dc 100644 --- a/src/views/xm/core/xmMenu/XmMenuMng.vue +++ b/src/views/xm/core/xmMenu/XmMenuMng.vue @@ -199,7 +199,7 @@ - + @@ -271,7 +271,7 @@ - +