Browse Source

工作项

master
陈裕财 4 years ago
parent
commit
ba6fee0f21
  1. 1
      src/common/js/treeTool.js
  2. 9
      src/views/xm/core/xmMenu/XmMenuEdit.vue
  3. 12
      src/views/xm/core/xmMenu/XmMenuMng.vue
  4. 375
      src/views/xm/core/xmWorkItem/XmSubBugList.vue
  5. 134
      src/views/xm/core/xmWorkItem/XmSubMenuList.vue
  6. 129
      src/views/xm/core/xmWorkItem/XmSubTaskList.vue
  7. 159
      src/views/xm/core/xmWorkItem/XmSubWorkItem.vue

1
src/common/js/treeTool.js

@ -3,6 +3,7 @@ export default {
reloadAllChildren: function(table,maps, rows,parentIdName,loadChildren,idMaps) {
debugger;
if(!rows||rows.length==0){
return;

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

@ -60,7 +60,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="进度" prop="finishRate">
<el-progress :percentage="editForm.finishRate"></el-progress>
<el-progress :percentage="editForm.finishRate?editForm.finishRate:0"></el-progress>
</el-form-item>
</el-col>
<el-col :span="8">
@ -128,7 +128,7 @@
</el-row>
</el-tab-pane>
<el-tab-pane :label="'子工作项'+(subWorkItemNum>=0?'('+subWorkItemNum+')':'')" name="6">
<xm-sub-work-item :parent-xm-menu="editForm" @sub-work-item-num="setSubWorkItemNum"></xm-sub-work-item>
<xm-sub-work-item :parent-xm-menu="editForm" @sub-work-item-num="setSubWorkItemNum" @add-sub-menu="onAddSubMenu"></xm-sub-work-item>
</el-tab-pane>
<el-tab-pane :label="'工时('+editForm.mactWorkload+' h)'" name="2">
<el-form-item label="数据收集方式" prop="calcType">
@ -462,6 +462,7 @@ import XmMenuExchangeMng from '../xmMenuExchange/XmMenuExchangeMng.vue';
var tips = res.data.tips;
if(tips.isOk){
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

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

@ -339,8 +339,8 @@
</el-row>
<!--编辑 XmMenu xm_project_menu界面-->
<el-dialog title="编辑需求" :visible.sync="editFormVisible" :with-header="false" width="80%" top="20px" center append-to-body :close-on-click-modal="false">
<xm-menu-edit :xm-menu="editForm" :visible="editFormVisible" @cancel="editFormVisible=false" @submit="afterEditSubmit"></xm-menu-edit>
<el-dialog title="编辑需求" :visible.sync="editFormVisible" :with-header="false" width="80%" top="20px" center append-to-body :close-on-click-modal="false" >
<xm-menu-edit :xm-menu="editForm" :visible="editFormVisible" @cancel="editFormVisible=false" @submit="afterEditSubmit" @add-sub-menu="onAddSubMenu" @edit-fields="onEditSomeFields"></xm-menu-edit>
</el-dialog>
<!--新增 XmMenu xm_project_menu界面-->
@ -708,7 +708,7 @@
// XmMenu xm_project_menu
showEdit: function ( row,index ) {
this.editForm = Object.assign({}, row);
this.editForm =row
this.editFormVisible = true;
},
// XmMenu xm_project_menu
@ -1294,6 +1294,12 @@
}
},
onEditSomeFields(params){
Object.assign(this.editForm,params)
},
onAddSubMenu(row){
treeTool.reloadAllChildren(this.$refs.table,this.maps,[this.editForm,row],'pmenuId',this.loadXmMenusLazy)
}
},//end methods
components: {

375
src/views/xm/core/xmWorkItem/XmSubBugList.vue

@ -0,0 +1,375 @@
<template>
<el-row v-show="parentXmMenu.dclass==='3' && xmBugs.length>0">
<el-row>
<div class="icon" style="background-color: #F56C6C;">
<i class="el-icon-warning"></i>
</div>
缺陷
<span style="float:right;">
<el-button @click="batchDel" type="danger" icon="el-icon-delete" plain></el-button>
</span>
</el-row>
<el-row>
<el-table :data="xmBugs" :max-height="400" @selection-change="selsChange" @row-click="rowClick">
<el-table-column type="selection" label="全选"></el-table-column>
<el-table-column prop="id" label="缺陷编号" width="100px" show-overflow-tooltip="">
</el-table-column>
<el-table-column prop="name" label="名称" min-width="150px">
</el-table-column>
<el-table-column prop="bugStatus" label="状态" width="100">
<template slot-scope="scope">
<div class="cell-text">
<el-button style="display:block;" :type="item.className" plain round v-for="(item,index) in [formatterBugStatusDicts(scope.row.bugStatus)]" :key="index">{{item.name}}</el-button>
</div>
<span class="cell-bar">
<el-select v-model="scope.row.bugStatus" placeholder="类型" style="display:block;" @change="editXmQuestionSomeFields(scope.row,'bugStatus',$event)">
<el-option :value="item.id" :label="item.name" v-for="(item,index) in dicts.bugStatus" :key="index"></el-option>
</el-select>
</span>
</template>
</el-table-column>
<el-table-column prop="priority" label="优先级" width="100">
<template slot-scope="scope">
<div class="cell-text">
<el-button style="display:block;" :type="item.className" plain round v-for="(item,index) in [formatterPriorityDicts(scope.row.priority)]" :key="index">{{item.name}}</el-button>
</div>
<span class="cell-bar">
<el-select v-model="scope.row.priority" placeholder="优先级" style="display:block;" @change="editXmQuestionSomeFields(scope.row,'priority',$event)">
<el-option :value="item.id" :label="item.name" v-for="(item,index) in dicts.priority" :key="index"></el-option>
</el-select>
</span>
</template>
</el-table-column>
<el-table-column prop="solution" label="解决方案" width="100">
<template slot-scope="scope">
<div class="cell-text">
{{formaterByDicts(scope.row,'solution',scope.row.solution)}}
</div>
<span class="cell-bar">
<el-select v-model="scope.row.solution" placeholder="类型" style="display:block;" @change="editXmQuestionSomeFields(scope.row,'solution',$event)">
<el-option :value="item.id" :label="item.name" v-for="(item,index) in dicts.bugSolution" :key="index"></el-option>
</el-select>
</span>
</template>
</el-table-column>
<el-table-column prop="handlerUsername" label="负责人" width="100" show-overflow-tooltip>
<template slot-scope="scope">
<div class="cell-text">
{{ scope.row.handlerUsername}}
</div>
<span class="cell-bar">
<el-button @click="showGroupUsers('editHandlerUserid',scope.row)">负责人</el-button>
</span>
</template>
</el-table-column>
</el-table>
</el-row>
<xm-group-dialog ref="xmGroupDialog" :sel-project=" {id:linkProjectId} " :is-select-single-user="1" @user-confirm="onUserConfirm"></xm-group-dialog>
</el-row>
</template>
<script>
import Vue from "vue";
import util from "@/common/js/util"; //
import treeTool from "@/common/js/treeTool"; //
import { initSimpleDicts } from '@/api/mdp/meta/item'; //
import { listXmQuestion ,addXmQuestion,batchDelXmQuestion,editXmQuestionSomeFields} from '@/api/xm/core/xmQuestion';
import XmGroupDialog from '../xmGroup/XmGroupDialog';
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters(["userInfo", "roles"]),
calcMenuLabel(){
var params={label:'工作项',icon:'',color:''};
if(this.parentXmMenu.dclass==='0'){
params={label:'史诗',icon:'el-icon-s-promotion',color:'rgb(255, 153, 51)'};
}else if(this.parentXmMenu.dclass==='1'){
params={label:'特性',icon:'el-icon-s-flag',color:'rgb(0, 153, 51)'};
}else if(this.parentXmMenu.dclass==='2'){
params={label:'故事',icon:'el-icon-document',color:' rgb(79, 140, 255)'};
}
return params;
},
},
props: [
'parentXmMenu','linkProjectId'
],
watch: {
'parentXmMenu.menuId':function(){
this.initData();
},
'xmBugs':function(){
this.$emit("bugs-change",this.xmBugs)
}
},
data() {
return{
load:{edit:false,list:false,add:false,del:false,},
xmBugs:[],
editForm:null,
sels:[],
dicts:{
priority:[],
bugSeverity:[],
bugSolution:[],
bugStatus:[],
bugType:[],
},
}
}, //end data
methods: {
showGroupUsers:function(userType,row){
this.$refs.xmGroupDialog.open({data:row,action:userType})
},
rowClick: function(row, event, column){
this.editForm=row;
},
//xmQuestion
selsChange: function (sels) {
this.sels = sels;
},
getXmBugs(){
listXmQuestion({menuId:this.parentXmMenu.menuId}).then(res=>{
var tips = res.data.tips;
if(tips.isOk){
this.xmBugs=res.data.data
}else{
this.xmBugs=[];
}
})
},
initData(){
this.xmBugs=[]
if(!this.parentXmMenu || !this.parentXmMenu.menuId){
return;
}
var dclass=this.parentXmMenu.dclass;
if(dclass==='3'){
this.getXmBugs();
}
},
addXmBug(name){
var question={name:name,menuId:this.parentXmMenu.menuId,menuName:this.parentXmMenu.menuName,productId:this.parentXmMenu.productId,iterationId:this.parentXmMenu.iterationId,iterationName:this.parentXmMenu.iterationName}
question.priority='3'
question.verNum=this.parentXmMenu.sinceVersion;
question.pverNum=this.parentXmMenu.sinceVersion;
question.askUserid=this.userInfo.userid
question.askUsername=this.userInfo.username
question.qtype="1"
question.id=null;
question.name=name
question.projectId=this.linkProjectId
question.bugStatus="1"
addXmQuestion(question).then((res) => {
this.load.edit=false
var tips=res.data.tips;
if(tips.isOk){
this.$emit('submit',res.data.data);// @submit="afterAddSubmit"
this.xmBugs.push(res.data.data)
}
this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.edit=false);
},
showAdd() {
this.$prompt('请输入缺陷标题', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({ value }) => {
this.addXmBug(value);
}).catch(() => {
});
},
batchDel: function () {
if(this.sels.length<=0){
this.$notify({showClose: true, message:"请选择要删除的缺陷", type: "error"});
return ;
}
this.$confirm('确认删除选中记录吗?', '提示', {
type: 'warning'
}).then(() => {
this.load.del=true;
batchDelXmQuestion(this.sels).then((res) => {
this.load.del=false;
var tips=res.data.tips;
if( tips.isOk ){
this.getXmBugs();
}
this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error'});
}).catch( err => this.load.del=false );
});
},
editXmQuestionSomeFields(row,fieldName,$event){
debugger;
var params={ids:[row.id]};
if(this.sels.length>0){
if(!this.sels.some(k=>k.id==row.id)){
this.$notify({showClose:true,message:'请操作选中的行或者取消选中的行再操作其它行',type:'warning'})
return;
}
params.ids=this.sels.map(i=>i.id)
}
if(fieldName==='handlerUserid'){
if($event){
params[fieldName]=$event[0].userid;
params.handlerUsername=$event[0].username
}else{
return;
}
}else if(fieldName==='tagIds'){
if($event){
params[fieldName]=$event.map(i=>i.tagId).join(",");
params.tagNames=$event.map(i=>i.tagName).join(",");
}else{
return;
}
}else if(fieldName==='workload'){
params={...params,...$event}
}else if(fieldName==='projectId'){
params.projectId=$event.id
}else if(fieldName==='productId'){
params.productId=$event.id
}else{
params[fieldName]=$event
}
editXmQuestionSomeFields(params).then(res=>{
var tips = res.data.tips;
if(tips.isOk){
if(this.sels.length>0){
this.sels.forEach(i=>{
Object.assign(i,params)
})
}else{
Object.assign(row,params)
}
}else{
this.$notify({showClose:true,message:tips.msg,type:tips.isOk?'success':'error'})
}
})
},
onUserConfirm:function(groupUsers,option){
if(option.action=='editHandlerUserid'){
this.editXmQuestionSomeFields(option.data,"handlerUserid",groupUsers)
return;
}
this.getXmBugs();
},
formatterPriorityDicts(cellValue){
var key="priority";
if(this.dicts[key]==undefined || this.dicts[key]==null || this.dicts[key].length==0 ){
return {id:cellValue,name:cellValue,className:'primary'};
}
var list=this.dicts[key].filter(i=>i.id==cellValue)
if(list.length>0){
var data= {...list[0],className:'primary'}
if(data.id=='0'){
data.className='danger'
}else if(data.id=='1'){
data.className='warning'
}else if(data.id=='2'){
data.className='success'
}else if(data.id=='3'){
data.className='primary'
}else if(data.id=='4'){
data.className='info'
}else{
data.className='primary'
}
return data;
}else{
return {id:cellValue,name:cellValue,className:'primary'}
}
},
formatterBugStatusDicts: function(cellValue){
var key="bugStatus";
if(this.dicts[key]==undefined || this.dicts[key]==null || this.dicts[key].length==0 ){
return {id:cellValue,name:cellValue,className:'primary'};
}
var list=this.dicts[key].filter(i=>i.id==cellValue)
if(list.length>0){
var data= {...list[0],className:'primary'}
if(data.id=='1'){
data.className='primary'
}else if(data.id=='2'){
data.className='primary'
}else if(data.id=='3'){
data.className='success'
}else if(data.id=='4'){
data.className='warning'
}else if(data.id=='5'){
data.className='success'
}else if(data.id=='6'){
data.className='info'
}else if(data.id=='7'){
data.className='info'
}else{
data.className='danger'
}
return data;
}else{
return {id:cellValue,name:cellValue,className:'primary'}
}
},
/**
* 'bugSeverity','bugSolution','bugStatus','bugType','priority'bugRepRate
*/
formaterByDicts(row,property,cellValue){
var property=property
var dict=null;
if(property=='bugSeverity'){
dict=this.dicts['bugSeverity']
}else if(property=='solution'){
dict=this.dicts['bugSolution']
}else if(property=='bugStatus'){
dict=this.dicts['bugStatus']
}else if(property=='priority'){
dict=this.dicts['priority']
}else if(property=='bugType'){
dict=this.dicts['bugType']
}else if(property=='repRate'){
dict=this.dicts['bugRepRate']
}
if(!dict){
return cellValue;
}else{
var item=dict.find(i=>i.id==cellValue)
return item?item.name:cellValue;
}
},
}, //end methods
components: {
XmGroupDialog,
},
mounted() {
this.initData();
initSimpleDicts('all',['bugSeverity','bugSolution','bugStatus','bugType','priority','bugRepRate']).then(res=>{
if(res.data.tips.isOk){
this.dicts=res.data.data;
}
});
},
};
</script>
<style scoped>
</style>

134
src/views/xm/core/xmWorkItem/XmSubMenuList.vue

@ -0,0 +1,134 @@
<template>
<section>
<el-row v-if="parentXmMenu.dclass<'3' && xmMenus.length>0">
<el-row v-if="parentXmMenu.dclass==='1'">
<div class="icon" style="background-color: rgb(0, 153, 51);">
<i class="el-icon-s-flag"></i>
</div>特性
</el-row>
<el-row v-if="parentXmMenu.dclass==='2'">
<div class="icon" :style="{backgroundColor: calcMenuLabel.color }">
<i :class="calcMenuLabel.icon"></i>
</div>
用户故事
</el-row>
<el-row>
<el-table :data="xmMenus" :show-header="false" :max-height="400">
<el-table-column type="index" label="序号"></el-table-column>
<el-table-column prop="menuName" label="名称"></el-table-column>
</el-table>
</el-row>
</el-row>
</section>
</template>
<script>
import Vue from "vue";
import util from "@/common/js/util"; //
import treeTool from "@/common/js/treeTool"; //
import { initSimpleDicts } from '@/api/mdp/meta/item'; //
import { listXmMenu,addXmMenu } from '@/api/xm/core/xmMenu';
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters(["userInfo", "roles"]),
calcMenuLabel(){
var params={label:'工作项',icon:'',color:''};
if(this.parentXmMenu.dclass==='0'){
params={label:'史诗',icon:'el-icon-s-promotion',color:'rgb(255, 153, 51)'};
}else if(this.parentXmMenu.dclass==='1'){
params={label:'特性',icon:'el-icon-s-flag',color:'rgb(0, 153, 51)'};
}else if(this.parentXmMenu.dclass==='2'){
params={label:'故事',icon:'el-icon-document',color:' rgb(79, 140, 255)'};
}
return params;
},
},
props: [
'parentXmMenu'
],
watch: {
'parentXmMenu.menuId':function(){
this.initData();
},
'xmMenus':function(){
this.$emit('menus-change',this.xmMenus);
}
},
data() {
return{
load:{edit:false,list:false,add:false},
xmMenus:[],
}
}, //end data
methods: {
getXmMenus(){
listXmMenu({pmenuId:this.parentXmMenu.menuId}).then(res=>{
var tips = res.data.tips;
if(tips.isOk){
this.xmMenus=res.data.data
}else{
this.xmMenus=[];
}
})
},
initData(){
this.xmMenus=[]
if(!this.parentXmMenu || !this.parentXmMenu.menuId){
return;
}
var dclass=this.parentXmMenu.dclass;
if(dclass<3){
this.getXmMenus();
}
},
addXmMenu(name){
var menu={...this.parentXmMenu}
menu.mmUserid=this.userInfo.userid
menu.mmUsername=this.userInfo.username
menu.seqNo=this.parentXmMenu.seqNo+"."+(parseInt(this.parentXmMenu.childrenCnt)+1)
menu.pmenuId=this.parentXmMenu.menuId
menu.pmenuName=this.parentXmMenu.menuName
menu.dclass=(parseInt(this.parentXmMenu.dclass)+1)+'';
menu.menuId=null;
menu.menuName=name
addXmMenu(menu).then((res) => {
this.load.edit=false
var tips=res.data.tips;
if(tips.isOk){
this.$emit('add-submit',res.data.data);// @submit="afterAddSubmit"
this.xmMenus.push(res.data.data)
}
this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.edit=false);
},
showAdd() {
this.$prompt('请输入标题', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({ value }) => {
this.addXmMenu(value);
}).catch(() => {
});
},
}, //end methods
components: {
},
mounted() {
this.initData();
},
};
</script>
<style scoped>
</style>

129
src/views/xm/core/xmWorkItem/XmSubTaskList.vue

@ -0,0 +1,129 @@
<template>
<el-row v-if="parentXmMenu.dclass==='3' && xmTasks.length>0">
<el-row>
<div class="icon" style="background-color: #1CC7EA;">
<i class="el-icon-s-operation"></i>
</div>
任务
</el-row>
<el-row>
<el-table :data="xmTasks" :show-header="false" :max-height="400">
<el-table-column type="index" label="序号"></el-table-column>
<el-table-column prop="name" label="名称"></el-table-column>
</el-table>
</el-row>
</el-row>
</template>
<script>
import Vue from "vue";
import util from "@/common/js/util"; //
import treeTool from "@/common/js/treeTool"; //
import { initSimpleDicts } from '@/api/mdp/meta/item'; //
import { listXmTask ,addTask } from '@/api/xm/core/xmTask';
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters(["userInfo", "roles"]),
calcMenuLabel(){
var params={label:'工作项',icon:'',color:''};
if(this.parentXmMenu.dclass==='0'){
params={label:'史诗',icon:'el-icon-s-promotion',color:'rgb(255, 153, 51)'};
}else if(this.parentXmMenu.dclass==='1'){
params={label:'特性',icon:'el-icon-s-flag',color:'rgb(0, 153, 51)'};
}else if(this.parentXmMenu.dclass==='2'){
params={label:'故事',icon:'el-icon-document',color:' rgb(79, 140, 255)'};
}
return params;
},
},
props: [
'parentXmMenu','linkProjectId'
],
watch: {
'parentXmMenu.menuId':function(){
this.initData();
},
'xmTasks':function(){
this.$emit("bugs-change",this.xmTasks)
}
},
data() {
return{
load:{edit:false,list:false,add:false},
xmTasks:[],
}
}, //end data
methods: {
getXmTasks(){
listXmTask({menuId:this.parentXmMenu.menuId}).then(res=>{
var tips = res.data.tips;
if(tips.isOk){
this.xmTasks=res.data.data
}else{
this.xmTasks=[];
}
})
},
initData(){
this.xmTasks=[]
if(!this.parentXmMenu || !this.parentXmMenu.menuId){
return;
}
var dclass=this.parentXmMenu.dclass;
if(dclass==='3'){
this.getXmTasks();
}
},
addXmTask(name){
var task={name:name,menuId:this.parentXmMenu.menuId,menuName:this.parentXmMenu.menuName,productId:this.parentXmMenu.productId,iterationId:this.parentXmMenu.iterationId,iterationName:this.parentXmMenu.iterationName}
task.priority='3'
task.verNum=this.parentXmMenu.sinceVersion;
task.pverNum=this.parentXmMenu.sinceVersion;
task.askUserid=this.userInfo.userid
task.askUsername=this.userInfo.username
task.qtype="1"
task.ntype="0"
task.ptype="0"
task.id=null;
task.name=name
task.projectId=this.linkProjectId
addTask(task).then((res) => {
this.load.edit=false
var tips=res.data.tips;
if(tips.isOk){
this.$emit('submit',res.data.data);// @submit="afterAddSubmit"
this.xmTasks.push(res.data.data)
}
this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.edit=false);
},
showAdd() {
this.$prompt('请输入任务标题', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({ value }) => {
this.addXmTask(value);
}).catch(() => {
});
},
}, //end methods
components: {
},
mounted() {
this.initData();
},
};
</script>
<style scoped>
</style>

159
src/views/xm/core/xmWorkItem/XmSubWorkItem.vue

@ -1,8 +1,9 @@
<template>
<section class="padding">
<el-row>
<font>{{subWorkItemNum}}个子工作项</font>
<font>{{subWorkItemNum}}个子工作项</font> &nbsp;&nbsp;
<span style="float:right;">
<xm-project-select style="display:inline;" v-if="parentXmMenu&&parentXmMenu.menuId && parentXmMenu.dclass==='3' && !linkProjectId" :link-product-id="parentXmMenu.productId" @row-click="xmProject=$event"></xm-project-select>
<el-button v-if="parentXmMenu.dclass==='1'" icon="el-icon-plus" @click="showAdd(2)">
<div class="icon" style="background-color: rgb(0, 153, 51);">
<i class="el-icon-s-flag"></i>
@ -28,54 +29,11 @@
添加缺陷</el-button>
</span>
</el-row>
<el-row v-if="parentXmMenu.dclass<'3' && xmMenus.length>0">
<el-row v-if="parentXmMenu.dclass==='1'">
<div class="icon" style="background-color: rgb(0, 153, 51);">
<i class="el-icon-s-flag"></i>
</div>特性
</el-row>
<el-row v-if="parentXmMenu.dclass==='2'">
<div class="icon" :style="{backgroundColor: calcMenuLabel.color }">
<i :class="calcMenuLabel.icon"></i>
</div>
用户故事
</el-row>
<el-row>
<el-table :data="xmMenus" :show-header="false" :max-height="400">
<el-table-column type="index" label="序号"></el-table-column>
<el-table-column prop="menuName" label="名称"></el-table-column>
</el-table>
</el-row>
</el-row>
<el-row v-if="parentXmMenu.dclass==='3' && xmTasks.length>0">
<el-row>
<div class="icon" style="background-color: #1CC7EA;">
<i class="el-icon-s-operation"></i>
</div>
任务</el-row>
<el-row>
<el-table :data="xmTasks" :show-header="false" :max-height="400">
<el-table-column type="index" label="序号"></el-table-column>
<el-table-column prop="name" label="名称"></el-table-column>
</el-table>
</el-row>
</el-row>
<xm-sub-menu-list ref="menuList" :link-project-id="linkProjectId?linkProjectId:(xmProject?xmProject.id:null)" :parentXmMenu="parentXmMenu" @menus-change="onMenusChange" @add-submit="$emit('add-sub-menu',$event)"></xm-sub-menu-list>
<el-row v-if="parentXmMenu.dclass==='3' && xmBugs.length>0">
<el-row>
<xm-sub-task-list ref="taskList" :link-project-id="linkProjectId?linkProjectId:(xmProject?xmProject.id:null)" :parentXmMenu="parentXmMenu" @tasks-change="onTasksChange"></xm-sub-task-list>
<div class="icon" style="background-color: #F56C6C;">
<i class="el-icon-warning"></i>
</div>
缺陷</el-row>
<el-row>
<el-table :data="xmBugs" :show-header="false" :max-height="400">
<el-table-column type="index" label="序号"></el-table-column>
<el-table-column prop="name" label="名称"></el-table-column>
</el-table>
</el-row>
</el-row>
<xm-sub-bug-list class="padding-top" ref="bugList" :link-project-id="linkProjectId?linkProjectId:(xmProject?xmProject.id:null)" :parentXmMenu="parentXmMenu" @bugs-change="onBugsChange"></xm-sub-bug-list>
</section>
</template>
@ -84,13 +42,12 @@ import Vue from "vue";
import util from "@/common/js/util"; //
import treeTool from "@/common/js/treeTool"; //
import { initSimpleDicts } from '@/api/mdp/meta/item'; //
import {
listXmTask,
} from "@/api/xm/core/xmTask";
import { listXmQuestion} from '@/api/xm/core/xmQuestion';
import { listXmMenu,addXmMenu } from '@/api/xm/core/xmMenu';
import { mapGetters } from 'vuex'
import XmSubMenuList from './XmSubMenuList.vue'
import XmSubTaskList from './XmSubTaskList.vue'
import XmSubBugList from './XmSubBugList.vue'
import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect'
export default {
computed: {
@ -114,7 +71,7 @@ export default {
}
},
props: [
'parentXmMenu'
'parentXmMenu','linkProjectId'
],
watch: {
'parentXmMenu.menuId':function(){
@ -128,98 +85,46 @@ export default {
xmTasks:[],
xmBugs:[],
xmMenus:[],
xmProject:null,
}
}, //end data
methods: {
getXmTasks(){
listXmTask({menuId:this.parentXmMenu.menuId}).then(res=>{
var tips = res.data.tips;
if(tips.isOk){
this.xmTasks=res.data.data
}else{
this.xmTasks=[];
}
})
},
getXmMenus(){
listXmMenu({pmenuId:this.parentXmMenu.menuId}).then(res=>{
var tips = res.data.tips;
if(tips.isOk){
this.xmMenus=res.data.data
}else{
this.xmMenus=[];
}
})
},
getXmBugs(){
listXmQuestion({menuId:this.parentXmMenu.menuId}).then(res=>{
var tips = res.data.tips;
if(tips.isOk){
this.xmBugs=res.data.data
}else{
this.xmBugs=[];
}
})
},
initData(){
this.xmTasks=[]
this.xmMenus=[]
this.xmBugs=[]
if(!this.parentXmMenu || !this.parentXmMenu.menuId){
return;
}
var dclass=this.parentXmMenu.dclass;
if(dclass<3){
this.getXmMenus();
}else{
this.getXmTasks();
this.getXmBugs();
}
},
addXmMenu(name){
debugger;
var menu={...this.parentXmMenu}
menu.mmUserid=this.userInfo.userid
menu.mmUsername=this.userInfo.username
menu.seqNo=this.parentXmMenu.seqNo+"."+(parseInt(this.parentXmMenu.childrenCnt)+1)
menu.pmenuId=this.parentXmMenu.menuId
menu.pmenuName=this.parentXmMenu.menuName
menu.dclass=(parseInt(this.parentXmMenu.dclass)+1)+'';
menu.menuId=null;
menu.menuName=name
addXmMenu(menu).then((res) => {
this.load.edit=false
var tips=res.data.tips;
if(tips.isOk){
this.$emit('submit',res.data.data);// @submit="afterAddSubmit"
this.xmMenus.push(res.data.data)
}
this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.edit=false);
},
showAdd(dclass) {
this.$prompt('请输入标题', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({ value }) => {
if(dclass<4){
this.addXmMenu(value);
this.$refs.menuList.showAdd();
}else if(dclass==='4'){
this.addXmTask(value);
if(!this.linkProjectId && !this.xmProject){
this.$notify({showClose:true,message:'请先选择一个项目',type:'warning'})
return;
}
this.$refs.taskList.showAdd();
}else if(dclass==='5'){
this.addXmQuestion(value);
if(!this.linkProjectId && !this.xmProject){
this.$notify({showClose:true,message:'请先选择一个项目',type:'warning'})
return;
}
}).catch(() => {
});
this.$refs.bugList.showAdd();
}
},
onMenusChange(menus){
this.xmMenus=menus
},
onBugsChange(bugs){
this.xmBugs=bugs
},
onTasksChange(tasks){
this.xmTasks=tasks
}
/**end 自定义函数请在上面加**/
}, //end methods
components: {
XmSubMenuList,XmSubTaskList,XmSubBugList,XmProjectSelect
},
mounted() {
this.initData();

Loading…
Cancel
Save