Browse Source

优化

master
陈裕财 4 years ago
parent
commit
2d2c5cc4ea
  1. 4
      src/api/xm/core/xmQuestion.js
  2. 66
      src/views/mdp/arc/tag/TagDialog.vue
  3. 66
      src/views/xm/core/xmGroup/XmGroupDialog.vue
  4. 4
      src/views/xm/core/xmGroup/XmGroupSelect.vue
  5. 53
      src/views/xm/core/xmQuestion/XmQuestionEdit.vue
  6. 300
      src/views/xm/core/xmQuestion/XmQuestionMng.vue

4
src/api/xm/core/xmQuestion.js

@ -30,3 +30,7 @@ export const editXmQuestion = params => { return axios.post(`${base}/xm/core/xmQ
export const addXmQuestion = params => { return axios.post(`${base}/xm/core/xmQuestion/add`, params); }; export const addXmQuestion = params => { return axios.post(`${base}/xm/core/xmQuestion/add`, params); };
export const editStatus = params => { return axios.post(`${base}/xm/core/xmQuestion/editStatus`, params); }; export const editStatus = params => { return axios.post(`${base}/xm/core/xmQuestion/editStatus`, params); };
export const editXmQuestionSomeFields = params => { return axios.post(`${base}/xm/core/xmQuestion/editSomeFields`, params); };

66
src/views/mdp/arc/tag/TagDialog.vue

@ -0,0 +1,66 @@
<template>
<section>
<el-drawer title="选择标签" :visible.sync="visible" show-close append-to-body size="50%" @close="option=null">
<tag-mng :jump="jump" :tagIds="tagIds" :visible="visible" @select-confirm="onSelectConfirm"></tag-mng>
</el-drawer>
</section>
</template>
<script>
import util from '@/common/js/util'; //
import {
mapGetters
} from 'vuex'
import TagMng from "./TagMng.vue"
export default {
name:"tagDialog",
computed: {
...mapGetters([
'workShop', 'userInfo'
])
},
//
props: ['jump', 'tagIds'],
watch: {
},
data() {
return {
visible:false,
option:null/**{data:'',action:''} */,
}
}, //end data
methods: {
open(option){
this.visible=true;
this.option=option;
},
close(){
this.visible=false;
this.option=null;
},
/**
* @select-confirm
*
*
*/
onSelectConfirm(selectTags){
this.$emit('select-confirm',selectTags,{...this.option})
this.visible=false;
this.option=null;
}
}, //end methods
components: {
TagMng,
},
mounted() {
}
}
</script>
<style scoped>
</style>

66
src/views/xm/core/xmGroup/XmGroupDialog.vue

@ -0,0 +1,66 @@
<template>
<section>
<el-drawer title="选择组员" :visible.sync="visible" show-close append-to-body size="50%" @close="option=null">
<xm-group-select :xm-product="xmProduct" :sel-project="selProject" :isSelectSingleUser="isSelectSingleUser" :visible="visible" @user-confirm="onUserConfirm"></xm-group-select>
</el-drawer>
</section>
</template>
<script>
import util from '@/common/js/util'; //
import {
mapGetters
} from 'vuex'
import XmGroupSelect from "./XmGroupSelect.vue"
export default {
name:"tagDialog",
computed: {
...mapGetters([
'workShop', 'userInfo'
])
},
//
props: ['selProject', 'xmProduct','isSelectSingleUser'],
watch: {
},
data() {
return {
visible:false,
option:null/**{data:'',action:''} */,
}
}, //end data
methods: {
open(option){
this.visible=true;
this.option=option;
},
close(){
this.visible=false;
this.option=null;
},
/**
* @select-confirm
*
*
*/
onUserConfirm(users){
this.$emit('user-confirm',users,{...this.option})
this.visible=false;
this.option=null;
}
}, //end methods
components: {
XmGroupSelect,
},
mounted() {
}
}
</script>
<style scoped>
</style>

4
src/views/xm/core/xmGroup/XmGroupSelect.vue

@ -2,9 +2,9 @@
<section class="border padding-left"> <section class="border padding-left">
<el-row class="padding-top"> <el-row class="padding-top">
<xm-project-select :auto-select="true" :xm-product="xmProduct" @row-click="onProjectRowClick" @clear-select="onProjectClose"></xm-project-select>
<xm-project-select style="display:inline;" v-if="!selProject" :auto-select="false" :xm-product="xmProduct" @row-click="onProjectRowClick" @clear-select="onProjectClose"></xm-project-select>
<xm-product-select :auto-select="true" :link-project-id="selProject?selProject.id:null" @row-click="onProductRowClick" @clear-select="onProductClose"></xm-product-select>
<xm-product-select style="display:inline;" v-if="!xmProduct" :auto-select="false" :link-project-id="selProject?selProject.id:null" @row-click="onProductRowClick" @clear-select="onProductClose"></xm-product-select>
<el-button type="primary" @click="userConfirm" icon="el-icon-finished">确认选择</el-button> <el-button type="primary" @click="userConfirm" icon="el-icon-finished">确认选择</el-button>
</el-row> </el-row>

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

@ -2,11 +2,19 @@
<section class="page-container padding border"> <section class="page-container padding border">
<el-row class="padding-bottom"> <el-row class="padding-bottom">
<el-steps :active="calcBugStep" simple finish-status="success">
<el-step title="已激活,待确认" description="创建后自动激活、关闭后重新激活)"></el-step>
<el-step title="已确认,待解决" description="业务确认缺陷后变为已确认"></el-step>
<el-step title="已解决,待关闭" description="开发修复缺陷后,变成已解决"></el-step>
<el-step title="已关闭(可重新激活)" description="测试通过后变为已关闭,已关闭缺陷可以重新激活"></el-step>
<!--1|新提交
2|处理中
3|已修复
4|重新打开
5|已发布
6|已拒绝
7|挂起 -->
<el-steps :active="calcBugStep" simple finish-status="success" >
<el-step v-for="(item,index) in dicts['bugStatus']" :title="item.name" :key="index" @click.native.stop="editForm.bugStatus=item.id">
<el-link slot="title" @click="editForm.bugStatus=item.id">
{{item.name}}
</el-link>
</el-step>
</el-steps> </el-steps>
</el-row> </el-row>
<el-row class="page-main "> <el-row class="page-main ">
@ -137,22 +145,13 @@
</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" checkScope="0" @selected="onSelectedMenu" :sel-project="selProject"></xm-menu-select>
</el-drawer> </el-drawer>
</el-row> </el-row>
</el-row> </el-row>
<el-row class="page-bottom"> <el-row class="page-bottom">
<el-button @click.native="handleCancel">取消</el-button> <el-button @click.native="handleCancel">取消</el-button>
<el-button v-if="editForm.bugStatus !='closed'" v-loading="load.edit" type="primary" @click.native="handleQuestion(editForm.bugStatus)" :disabled="load.edit==true">保存</el-button>
<el-button v-if="editForm.bugStatus=='active'" v-loading="load.edit" type="primary" @click.native="handleQuestion('confirmed')" :disabled="load.edit==true">确认</el-button>
<el-button v-if="editForm.bugStatus=='active'" v-loading="load.edit" type="primary" @click.native="handleQuestion('active')" :disabled="load.edit==true">不是缺陷</el-button>
<el-button v-if="editForm.bugStatus=='active'" v-loading="load.edit" type="primary" @click.native="handleQuestion('resolved')" :disabled="load.edit==true">直接解决</el-button>
<el-button v-if="editForm.bugStatus=='active'" v-loading="load.edit" type="primary" @click.native="handleQuestion('closed')" :disabled="load.edit==true">直接关闭</el-button>
<el-button v-if="editForm.bugStatus=='confirmed'" v-loading="load.edit" type="primary" @click.native="handleQuestion('resolved')" :disabled="load.edit==true">解决</el-button>
<el-button v-if="editForm.bugStatus=='confirmed'" v-loading="load.edit" type="primary" @click.native="handleQuestion('closed')" :disabled="load.edit==true">关闭</el-button>
<el-button v-if="editForm.bugStatus=='resolved'" v-loading="load.edit" type="primary" @click.native="handleQuestion('closed')" :disabled="load.edit==true">关闭</el-button>
<el-button v-if="editForm.bugStatus=='resolved'" v-loading="load.edit" type="primary" @click.native="handleQuestion('active')" :disabled="load.edit==true">重新激活</el-button>
<el-button v-if="editForm.bugStatus=='closed'" v-loading="load.edit" type="primary" @click.native="handleQuestion('active')" :disabled="load.edit==true">重新激活</el-button>
<el-button v-loading="load.edit" type="primary" @click.native="handleQuestion(editForm.bugStatus)" :disabled="load.edit==true">保存</el-button>
</el-row> </el-row>
@ -190,17 +189,19 @@
]), ]),
calcBugStep(){ calcBugStep(){
if(this.editForm.bugStatus=='active'){
return 1
}else if(this.editForm.bugStatus=='confirmed'){
return 2
}else if(this.editForm.bugStatus=='resolved'){
return 3
}else if(this.editForm.bugStatus=='closed'){
return 4
if(this.dicts['bugStatus'] && this.editForm){
var index=this.dicts['bugStatus'].findIndex(i=>{
if(i.id==this.editForm.bugStatus){
return true;
}else{
return false;
}
})
return index+1;
}else{ }else{
return 1;
return 0;
} }
} }
}, },
props:['xmQuestion','visible',"selProject"], props:['xmQuestion','visible',"selProject"],
@ -241,7 +242,7 @@
}, },
// xm_question // xm_question
editForm: { editForm: {
id:'',name:'',projectId:'',projectName:'',taskId:'',taskName:'',endTime:'',askUserid:'',askUsername:'',handlerUserid:'',handlerUsername:'',priority:'',solution:'',processTime:'',receiptMessage:'',receiptTime:'',description:'',createUserid:'',createUsername:'',createTime:'',status:'',receiptMessage:'',
id:'',name:'',projectId:'',projectName:'',taskId:'',taskName:'',endTime:'',askUserid:'',askUsername:'',handlerUserid:'',handlerUsername:'',priority:'',solution:'',processTime:'',receiptMessage:'',receiptTime:'',description:'',createUserid:'',createUsername:'',createTime:'',bugStatus:'',receiptMessage:'',
attachment: [],iterationId:'',iterationName:'',productId:'', attachment: [],iterationId:'',iterationName:'',productId:'',
}, },
/**begin 在下面加自定义属性,记得补上面的一个逗号**/ /**begin 在下面加自定义属性,记得补上面的一个逗号**/

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

@ -17,8 +17,8 @@
</el-option> </el-option>
</el-select> </el-select>
<el-button v-if="!filters.tags||filters.tags.length==0" @click.native="tagSelectVisible=true">标签</el-button>
<el-tag v-else @click="tagSelectVisible=true" closable @close="clearFiltersTag(filters.tags[0])">{{filters.tags[0].tagName.substr(0,5)}}({{filters.tags.length}})</el-tag>
<el-button v-if="!filters.tags||filters.tags.length==0" @click.native="$refs.tagDialog.open()">标签</el-button>
<el-tag v-else @click="$refs.tagDialog.open()" closable @close="clearFiltersTag(filters.tags[0])">{{filters.tags[0].tagName.substr(0,5)}}({{filters.tags.length}})</el-tag>
<el-input style="width:200px;" v-model="filters.key" placeholder="缺陷名称" clearable> <el-input style="width:200px;" v-model="filters.key" placeholder="缺陷名称" clearable>
</el-input> </el-input>
@ -124,28 +124,57 @@
<el-table-column prop="id" label="缺陷编号" width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="id" label="缺陷编号" width="100" show-overflow-tooltip></el-table-column>
<el-table-column prop="name" label="缺陷名称" min-width="150"> <el-table-column prop="name" label="缺陷名称" min-width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<span class="vlink" @click="showEdit(scope.row)" :title="scope.row.name">
<el-tag type="info" v-if="scope.row.bugSeverity=='4' ">{{formatterOption(scope.row,{property:'bugSeverity'},scope.row.bugSeverity)}}</el-tag>
<el-tag type="primary" v-else-if="scope.row.bugSeverity=='3'">{{formatterOption(scope.row,{property:'bugSeverity'},scope.row.bugSeverity)}}</el-tag>
<el-tag type="warning" v-else-if="scope.row.bugSeverity=='2'">{{formatterOption(scope.row,{property:'bugSeverity'},scope.row.bugSeverity)}}</el-tag>
<el-tag type="danger" v-else-if="scope.row.bugSeverity=='1'">{{formatterOption(scope.row,{property:'bugSeverity'},scope.row.bugSeverity)}}</el-tag>
<el-tag v-else>{{formatterOption(scope.row,{property:'bugSeverity'},scope.row.bugSeverity)}}</el-tag>
&nbsp;&nbsp;{{scope.row.name}}
</span>
<span class="vlink" @click="showEdit(scope.row)" :title="scope.row.name">
{{scope.row.name}}
</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="bugStatus" label="状态" width="100"> <el-table-column prop="bugStatus" label="状态" width="100">
<template slot-scope="scope">
<el-tag type="info" v-if="scope.row.bugStatus=='create' ">创建</el-tag>
<el-tag type="primary" v-else-if="scope.row.bugStatus=='active'">已激活</el-tag>
<el-tag type="warning" v-else-if="scope.row.bugStatus=='confirm'">确认</el-tag>
<el-tag type="warning" v-else-if="scope.row.bugStatus=='confirmed'">已确认</el-tag>
<el-tag type="success" v-else-if="scope.row.bugStatus=='solve'">解决</el-tag>
<el-tag type="success" v-else-if="scope.row.bugStatus=='resolved'">已解决</el-tag>
<el-tag type="success" v-else-if="scope.row.bugStatus=='close'">关闭</el-tag>
<el-tag type="success" v-else-if="scope.row.bugStatus=='closed'">已关闭</el-tag>
<el-tag v-else>{{scope.row.bugStatus}}</el-tag>
<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="bugSeverity" label="严重程度" width="100">
<template slot-scope="scope">
<div class="cell-text">
{{formaterByDicts(scope.row,'bugSeverity',scope.row.bugSeverity)}}
</div>
<span class="cell-bar">
<el-select v-model="scope.row.bugSeverity" placeholder="类型" style="display:block;" @change="editXmQuestionSomeFields(scope.row,'bugSeverity',$event)">
<el-option :value="item.id" :label="item.name" v-for="(item,index) in dicts.bugSeverity" :key="index"></el-option>
</el-select>
</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="askUsername" label="创建人" width="100" show-overflow-tooltip> <el-table-column prop="askUsername" label="创建人" width="100" show-overflow-tooltip>
@ -156,16 +185,27 @@
<el-table-column prop="ltime" label="更新时间" sortable width="100" show-overflow-tooltip> <el-table-column prop="ltime" label="更新时间" sortable width="100" show-overflow-tooltip>
</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>
<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-column>
<el-table-column prop="tagNames" label="标签" width="100" show-overflow-tooltip> <el-table-column prop="tagNames" 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-column header-align="center" label="操作" fixed="right" width="100">
<template slot-scope="scope">
<el-button type="primary" @click.stop="showEdit(scope.row)" >编辑</el-button>
<template slot-scope="scope">
<div class="cell-text">
{{ scope.row.tagNames}}
</div>
<span class="cell-bar">
<el-button @click="$refs.tagDialog.open({data:scope.row,action:'editTagIds'})">标签</el-button>
</span>
</template> </template>
</el-table-column> </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>
@ -178,20 +218,13 @@
<el-drawer title="新增缺陷" :visible.sync="addFormVisible" :with-header="false" size="70%" append-to-body :close-on-click-modal="false"> <el-drawer title="新增缺陷" :visible.sync="addFormVisible" :with-header="false" size="70%" append-to-body :close-on-click-modal="false">
<xm-question-add :xm-test-case-exec="xmTestCaseExec" :xm-test-case="xmTestCase" :qtype="qtype" :sel-project=" filters.selProject " :xm-question="addForm" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-question-add> <xm-question-add :xm-test-case-exec="xmTestCaseExec" :xm-test-case="xmTestCase" :qtype="qtype" :sel-project=" filters.selProject " :xm-question="addForm" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-question-add>
</el-drawer> </el-drawer>
<el-drawer title="选中用户" v-if=" filters.selProject " :visible.sync="selectUserVisible" size="70%" append-to-body :close-on-click-modal="false">
<xm-group-mng :sel-project=" filters.selProject " :is-select-single-user="1" @user-confirm="onUserConfirm"></xm-group-mng>
</el-drawer>
<xm-group-dialog ref="xmGroupDialog" :sel-project=" filters.selProject " :is-select-single-user="1" @user-confirm="onUserConfirm"></xm-group-dialog>
<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="tagSelectVisible" :close-on-click-modal="false" size="60%">
<tag-mng :tagIds="filters.tags?filters.tags.map(i=>i.tagId):[]" :jump="true" @select-confirm="onTagSelected">
</tag-mng>
</el-drawer>
</section>
<tag-dialog ref="tagDialog" :tagIds="filters.tags?filters.tags.map(i=>i.tagId):[]" :jump="true" @select-confirm="onTagSelected"></tag-dialog>
</section>
</template> </template>
<script> <script>
@ -200,18 +233,18 @@
import config from '@/common/config';// import config from '@/common/config';//
//import Sticky from '@/components/Sticky' // header //import Sticky from '@/components/Sticky' // header
import { initSimpleDicts } from '@/api/mdp/meta/item';// import { initSimpleDicts } from '@/api/mdp/meta/item';//
import { listXmQuestion, delXmQuestion, batchDelXmQuestion, editStatus } from '@/api/xm/core/xmQuestion';
import { listXmQuestion, delXmQuestion, batchDelXmQuestion, editStatus ,editXmQuestionSomeFields} from '@/api/xm/core/xmQuestion';
import XmQuestionAdd from './XmQuestionAdd';// import XmQuestionAdd from './XmQuestionAdd';//
import XmQuestionEdit from './XmQuestionEdit';// import XmQuestionEdit from './XmQuestionEdit';//
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import xmMenuSelect from '../xmMenu/XmMenuSelect'; import xmMenuSelect from '../xmMenu/XmMenuSelect';
import XmGroupMng from '../xmGroup/XmGroupMng';
import XmGroupDialog from '../xmGroup/XmGroupDialog';
import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect'; import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';
import XmProductSelect from '@/views/xm/core/components/XmProductSelect';// import XmProductSelect from '@/views/xm/core/components/XmProductSelect';//
import TagMng from "@/views/mdp/arc/tag/TagMng";
import TagDialog from '@/views/mdp/arc/tag/TagDialog.vue';
export default { export default {
computed: { computed: {
...mapGetters([ ...mapGetters([
@ -649,27 +682,68 @@
} }
}, },
showSolveName:function(row){
if(row.bugStatus=='active'){
return "去确认"
}else if(row.bugStatus=='confirmed'){
return "去解决"
}else if(row.bugStatus=='resolved'){
return "去关闭"
}else if(row.bugStatus=='closed'){
return "激活"
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'}
} }
}, },
showGroupUsers:function(userType){
this.userType=userType;
if(this.filters.selProject==null || this.filters.selProject.id==''){
this.$notify({showClose: true, message: "请先选中项目", type: 'warning' });
this.nextAction="showGroupUsers"
this.showProjectList();
return;
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'};
} }
this.selectUserVisible=true;
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'}
}
},
showGroupUsers:function(userType,row){
this.$refs.xmGroupDialog.open({data:row,action:userType})
}, },
handleExport() { handleExport() {
this.downloadLoading = true this.downloadLoading = true
let header = []; let header = [];
@ -725,21 +799,24 @@
}, },
/**end 自定义函数请在上面加**/ /**end 自定义函数请在上面加**/
onUserConfirm:function(groupUsers){
if(this.userType=='createUser'){
onUserConfirm:function(groupUsers,option){
if(option.action=='createUser'){
if(groupUsers==null || groupUsers.length==0){ if(groupUsers==null || groupUsers.length==0){
this.filters.createUser=null this.filters.createUser=null
}else{ }else{
var user=groupUsers[0] var user=groupUsers[0]
this.filters.createUser=user this.filters.createUser=user
} }
}else if(this.userType=='hisHandler'){
}else if(option.action=='hisHandler'){
if(groupUsers==null || groupUsers.length==0){ if(groupUsers==null || groupUsers.length==0){
this.filters.hisHandler=null this.filters.hisHandler=null
}else{ }else{
var user=groupUsers[0] var user=groupUsers[0]
this.filters.hisHandler=user this.filters.hisHandler=user
} }
}else if(option.action=='editHandlerUserid'){
this.editXmQuestionSomeFields(option.data,"handlerUserid",groupUsers)
return;
}else{ }else{
if(groupUsers==null || groupUsers.length==0){ if(groupUsers==null || groupUsers.length==0){
this.filters.handlerUserid='' this.filters.handlerUserid=''
@ -900,21 +977,94 @@
return msg; return msg;
}, },
onTagSelected(tags) {
this.tagSelectVisible = false;
if (!tags || tags.length == 0) {
this.filters.tags=[]
onTagSelected(tags,option) {
if(option.action=="editTagIds"){
this.editXmQuestionSomeFields(option.data,"tagIds",tags);
}else{ }else{
this.filters.tags=tags
if (!tags || tags.length == 0) {
this.filters.tags=[]
}else{
this.filters.tags=tags
}
this.searchXmQuestions();
} }
this.searchXmQuestions();
}
},
editXmQuestionSomeFields(row,fieldName,$event){
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{
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'})
}
})
},
/**
* '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 },//end methods
components: { components: {
'xm-question-add':XmQuestionAdd, 'xm-question-add':XmQuestionAdd,
'xm-question-edit':XmQuestionEdit, 'xm-question-edit':XmQuestionEdit,
XmGroupMng,XmProjectSelect,xmMenuSelect,XmProductSelect,TagMng,
XmGroupDialog,XmProjectSelect,xmMenuSelect,XmProductSelect, TagDialog
// //
}, },
mounted() { mounted() {
@ -935,13 +1085,9 @@
this.maxTableHeight = util.calcTableMaxHeight(this.$refs.table.$el); this.maxTableHeight = util.calcTableMaxHeight(this.$refs.table.$el);
this.getXmQuestions(); this.getXmQuestions();
}); });
initSimpleDicts('all',['bugSeverity','bugSolution','bugStatus','bugType','priority']).then(res=>{
if(res.data.tips.isOk){
this.dicts['bugSeverity']=res.data.data.bugSeverity
this.dicts['bugSolution']=res.data.data.bugSolution
this.dicts['bugStatus']=res.data.data.bugStatus
this.dicts['bugType']=res.data.data.bugType
this.dicts['priority']=res.data.data.priority
initSimpleDicts('all',['bugSeverity','bugSolution','bugStatus','bugType','priority','bugRepRate']).then(res=>{
if(res.data.tips.isOk){
this.dicts=res.data.data;
} }
}); });
} }

Loading…
Cancel
Save