Browse Source

优化

master
陈裕财 4 years ago
parent
commit
4881349824
  1. 4
      src/views/xm/core/components/XmProjectSelect.vue
  2. 5
      src/views/xm/core/xmGroup/XmGroupMng.vue
  3. 6
      src/views/xm/core/xmProduct/XmProductForLinkComplex.vue
  4. 6
      src/views/xm/core/xmProduct/XmProductMng.vue
  5. 10
      src/views/xm/core/xmProject/XmProjectForLink.vue
  6. 293
      src/views/xm/core/xmProject/XmProjectList.vue
  7. 20
      src/views/xm/core/xmProject/XmProjectMng.vue
  8. 198
      src/views/xm/core/xmProject/XmProjectSelect.vue
  9. 28
      src/views/xm/core/xmProjectState/XmProjectStateMng.vue
  10. 18
      src/views/xm/core/xmQuestion/XmQuestionAdd.vue
  11. 52
      src/views/xm/core/xmQuestion/XmQuestionMng.vue
  12. 12
      src/views/xm/core/xmTestCase/XmTestCaseMng.vue
  13. 72
      src/views/xm/core/xmTestCaseExec/XmTestCaseExecMng.vue

4
src/views/xm/core/components/XmProjectSelect.vue

@ -74,7 +74,9 @@
</el-table>
<el-pagination layout="total, prev, 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>
<slot name="reference"><el-link title="项目,点击选择、清除选择" @click="projectVisible=!projectVisible" type="warning" slot="reference" icon="el-icon-search"><font style="font-size:14px;"><slot name="title">{{editForm && editForm.id?editForm.name:'选择项目'}}</slot></font></el-link> </slot>
<span slot="reference" @click="projectVisible=!projectVisible">
<slot name="reference"><el-link title="项目,点击选择、清除选择" type="warning" icon="el-icon-search"><font style="font-size:14px;"><slot name="title">{{editForm && editForm.id?editForm.name:'选择项目'}}</slot></font></el-link> </slot>
</span>
</el-popover>
<el-drawer title="选择员工" :visible.sync="selectFiltersPmUserVisible" size="60%" append-to-body>
<users-select @confirm="onFiltersPmUserSelected" ref="usersSelect"></users-select>

5
src/views/xm/core/xmGroup/XmGroupMng.vue

@ -208,8 +208,7 @@
import UsersSelect from "@/views/mdp/sys/user/UsersSelect";
import XmGroupStateMng from '../xmGroupState/XmGroupStateMng';//
import XmGroupUserMng from '../xmGroupUser/XmGroupUserMng';//
import XmProjectList from '../xmProject/XmProjectList';
import XmGroupUserMng from '../xmGroupUser/XmGroupUserMng';//
import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';
import XmProductSelect from '@/views/xm/core/components/XmProductSelect.vue'
@ -217,7 +216,7 @@
export default {
name:'xmGroupMng',
components: {
XmGroupEdit,VueOkrTree,UsersSelect,XmGroupStateMng,XmGroupUserMng,XmProjectList,
XmGroupEdit,VueOkrTree,UsersSelect,XmGroupStateMng,XmGroupUserMng,
XmProductSelect,XmProjectSelect,
},
props:["visible","selProject" ,"isSelectSingleUser","isSelectMultiUser",'xmProduct','xmIteration','pgClass'],

6
src/views/xm/core/xmProduct/XmProductForLinkComplex.vue

@ -66,8 +66,7 @@
import { mapGetters } from 'vuex'
import XmProductMng from './XmProductMng.vue';
import XmTaskMng from '../xmTask/XmTaskMng.vue';
import XmQuestionMng from '../xmQuestion/XmQuestionMng.vue';
import XmProjectList from '../xmProject/XmProjectList.vue';
import XmQuestionMng from '../xmQuestion/XmQuestionMng.vue';
import XmProjectForLink from '../xmProject/XmProjectForLink.vue';
import XmProductSelect from '@/views/xm/core/components/XmProductSelect.vue';
@ -132,8 +131,7 @@ import XmProductEdit from './XmProductEdit.vue';
XmProductMng,
XmTaskMng,
XmQuestionMng,
XmProductSelect,
XmProjectList,
XmProductSelect,
XmProjectForLink,
XmProductProjectForLink,
XmProductOverview,

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

@ -308,8 +308,7 @@
import XmIterationMng from '../xmIteration/XmIterationSelect';//
import XmProductStateMng from '../xmProductState/XmProductStateMng';//
import UsersSelect from "@/views/mdp/sys/user/UsersSelect";
import XmProjectList from '../xmProject/XmProjectList.vue';
import UsersSelect from "@/views/mdp/sys/user/UsersSelect";
import XmIterationSelect from '../xmIteration/XmIterationSelect.vue';
import XmProductSelect from '@/views/xm/core/components/XmProductSelect.vue';
@ -718,8 +717,7 @@
'xm-product-edit':XmProductEdit,
XmIterationMng,
XmProductStateMng,
UsersSelect,
XmProjectList,
UsersSelect,
XmIterationSelect,
XmProductSelect,
XmProductTplMng,

10
src/views/xm/core/xmProject/XmProjectForLink.vue

@ -5,9 +5,9 @@
<el-input v-model="filters.key" style="width:30%;" placeholder="请输入关键字进行查找项目" v-if="!xmIteration && !xmProduct">
</el-input>
<el-button @click="searchXmProjects" icon="el-icon-search" v-if="!xmIteration && !xmProduct"></el-button>
<el-button icon="el-icon-plus" @click="xmProjectListVisible=true" v-if="!xmIteration">
更多项目到产品中
</el-button>
<xm-project-select @row-click="onXmProjectSelect">
<font slot="title">加更多项目到产品中</font>
</xm-project-select>
</el-row>
<el-row class="page-main ">
<el-table ref="table" :height="tableHeight" stripe :data="xmProjects" highlight-current-row v-loading="load.list" style="width: 100%;">
@ -43,7 +43,7 @@
import { listXmProject, } from '@/api/xm/core/xmProject';
import { mapGetters } from 'vuex'
import { delXmProductProjectLink, addXmProductProjectLink,batchDelXmProductProjectLink } from '@/api/xm/core/xmProductProjectLink';
import XmProjectList from './XmProjectList.vue';
import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect.vue';
@ -206,7 +206,7 @@ import XmProjectList from './XmProjectList.vue';
},//end methods
components: {
XmProjectList
XmProjectSelect
//
},

293
src/views/xm/core/xmProject/XmProjectList.vue

@ -1,293 +0,0 @@
<template>
<section class="padding">
<el-row>
<el-input v-model="filters.key" style="width:60%;" placeholder="项目名称模糊查询">
</el-input>
<el-button @click="searchXmProjects" icon="el-icon-search"></el-button>
</el-row>
<el-row class="page-main ">
<el-table ref="table" :height="tableHeight" stripe :data="xmProjects" highlight-current-row v-loading="load.list" style="width: 100%;">
<el-table-column type="index" label="序号" width="55" ></el-table-column>
<el-table-column prop="id" label="项目编码" min-width="80" ></el-table-column>
<el-table-column prop="name" label="项目名称" min-width="120" ></el-table-column>
<el-table-column label="操作" width="100" fixed="right">
<template slot-scope="scope">
<el-button-group>
<el-button type="primary" @click.stop="selectProject(scope.row)" >选中</el-button>
</el-button-group>
<!-- <el-button style="width:100%;" slot="reference" class="see-more" type="text" icon="el-icon-more"></el-button>
</el-popover> -->
</template>
</el-table-column>
</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-row>
</section>
</template>
<script>
import Vue from 'vue'
import util from '@/common/js/util';//
//import Sticky from '@/components/Sticky' // header
import config from "@/common/config"; //
//import { initSimpleDicts } from '@/api/mdp/meta/item';//
import { listXmProject, } from '@/api/xm/core/xmProject';
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters([
'userInfo','roles'
]),
},
data() {
return {
filters: {
key: ''
},
xmProjects: [],//
pageInfo:{//
total:0,//0>0
pageSize:10,//
count:false,//
pageNum:1,//1
orderFields:['create_time'],// ['sex','student_id']
orderDirs:['desc']// asc,desc ['asc','desc']
},
load:{ list: false, edit: false, del: false, add: false },//...
sels: [],//
dicts:{},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
addFormVisible: false,//xmProject
//xmProject
addForm: {
id:'',code:'',name:'',xmType:'',startTime:'',endTime:'',urgent:'',priority:'',description:'',createUserid:'',createUsername:'',createTime:'',assess:'',assessRemarks:'',status:'',branchId:'',planTotalCost:'',bizProcInstId:'',bizFlowState:'',planNouserAt:'',planIuserAt:'',planOuserAt:'',locked:'',baseTime:'',baseRemark:'',baselineId:'',planWorkload:'',totalReceivables:'',budgetMarginRate:'',contractAmt:'',planIuserPrice:'',budgetOuserPrice:'',planOuserCnt:'',planIuserCnt:'',planWorkingHours:''
},
editFormVisible: false,//
tableHeight:300,
//xmProject
editForm: {
id:'',code:'',name:'',xmType:'',startTime:'',endTime:'',urgent:'',priority:'',description:'',createUserid:'',createUsername:'',createTime:'',assess:'',assessRemarks:'',status:'',branchId:'',planTotalCost:'',bizProcInstId:'',bizFlowState:'',planNouserAt:'',planIuserAt:'',planOuserAt:'',locked:'',baseTime:'',baseRemark:'',baselineId:'',planWorkload:'',totalReceivables:'',budgetMarginRate:'',contractAmt:'',planIuserPrice:'',budgetOuserPrice:'',planOuserCnt:'',planIuserCnt:'',planWorkingHours:''
},
/**end 自定义属性请在上面加 请加备注**/
}
},//end data
methods: {
handleSizeChange(pageSize) {
this.pageInfo.pageSize=pageSize;
this.getXmProjects();
},
handleCurrentChange(pageNum) {
this.pageInfo.pageNum = pageNum;
this.getXmProjects();
},
// obj.order=ascending/descending, asc/desc ; obj.prop=,
sortChange( obj ){
var dir='asc';
if(obj.order=='ascending'){
dir='asc'
}else{
dir='desc';
}
if(obj.prop=='xxx'){
this.pageInfo.orderFields=['xxx'];
this.pageInfo.orderDirs=[dir];
}
this.getXmProjects();
},
searchXmProjects(){
this.pageInfo.count=true;
this.getXmProjects();
},
// XmProject xm_project
getXmProjects() {
let params = {
pageSize: this.pageInfo.pageSize,
pageNum: this.pageInfo.pageNum,
total: this.pageInfo.total,
count:this.pageInfo.count,
};
if(this.filters.key){
params.key='%'+this.filters.key+'%'
}
this.load.list = true;
if(this.pageInfo.orderFields!=null && this.pageInfo.orderFields.length>0){
let orderBys=[];
for(var i=0;i<this.pageInfo.orderFields.length;i++){
orderBys.push(this.pageInfo.orderFields[i]+" "+this.pageInfo.orderDirs[i])
}
params.orderBy= orderBys.join(",")
}
params.branchId = this.userInfo.branchId;
listXmProject(params).then((res) => {
var tips=res.data.tips;
if(tips.isOk){
console.log(res.data);
this.pageInfo.total = res.data.total;
this.pageInfo.count=false;
this.xmProjects = res.data.data;
}else{
this.$notify({showClose: true, message: tips.msg, type: 'error' });
}
this.load.list = false;
}).catch( err => this.load.list = false );
},
selectProject:function(row){
this.editForm=row
this.$emit('project-confirm',this.editForm);
}
/**end 自定义函数请在上面加**/
},//end methods
components: {
//
},
mounted() {
this.$nextTick(() => {
this.tableHeight = util.calcTableMaxHeight(this.$refs.table.$el);
this.showInfo = false;
this.getXmProjects();
});
}
}
</script>
<style scoped>
* >>> .sub-navbar{
background: #fafbfc;
}
.changebtn{
float: right;
padding: 0 10px;
display: flex;
align-items: center;
line-height: 0;
height: 100%;
}
.changebtn > button{
padding: 0;
border: 0;
color: #333;
}
.changebtn >>> i::before{
font-size:20px;
}
.changebtn-active{
color: #409EFF !important;
}
.app-container{
padding: 10px;
}
.el-menu-demo{
border: 0 !important;
height: 50px;
background-color: #fafbfc;
}
.el-menu-demo>.el-menu-item,
.el-menu-demo>.el-submenu >>> .el-submenu__title{
height: 100%;
line-height: 50px;
color: #909399;
}
.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,
.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,
.el-menu--horizontal>.el-submenu .el-submenu__title:hover{
background-color: transparent;
}
.project-card{
font-size: 12px;
color: #999;
margin: 10px 12px;
}
.project-card:hover{
border-color: #00abfc;
}
.project-card >>> .el-card__body{
padding: 20px 15px 10px;
}
.project-name{
font-size: 16px;
font-weight: 700;
color: #333;
height: 24px;
}
.project-id{
margin-top: 4px;
height: 18px;
}
.project-info{
display: flex;
margin-top: 8px;
}
.project-info>div{
display: flex;
flex-direction: column;
}
.info-item{
width: 15%;
text-align: center;
}
.info-item >>> span{
display: block;
}
.item-total{
font-size: 18px;
color: #666;
}
.info-task{
padding-left: 20px;
width: 70%;
border-left: 1px solid #efefef;
}
.finish-task{
color: #00abfc !important;
}
.project-rate{
margin: 15px 0;
}
.project-rate>.el-progress{
display: flex;
align-items: center;
}
.project-rate >>> .el-progress-bar{
padding-right: 0;
margin-right: 0;
}
.project-rate >>> .el-progress__text{
margin-left: 5px;
}
.project-footer{
display: flex;
}
.project-footer>div{
width: 30%;
}
.project-footer>div:not(:first-child){
width: 70%;
}
.project-period{
text-align: right;
}
.see-more > i{
background:#000;
}
/* 超过宽度则用...代替 */
.truncate{
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
[v-cloak]{
display: none;
}
</style>

20
src/views/xm/core/xmProject/XmProjectMng.vue

@ -8,6 +8,7 @@
</el-col>
<el-col :span="templateVisible?18:24" class="border padding-top padding-right">
<el-row class="padding-left">
<xm-product-select style="display:inline;" class="hidden-md-and-down" :auto-select="false" @row-click="onProductSelected" @clear-select="onProductClose"></xm-product-select>
<el-select v-model="menukey" @change="handleSelect" clearable>
<el-option value="all" label="全部"></el-option>
<el-option value="compete" label="我参与"></el-option>
@ -28,8 +29,8 @@
<el-select v-model="filters.status" clearable placeholder="项目状态">
<el-option v-for="(item,index) in dicts['projectStatus']" :value="item.id" :label="item.name" :key="index"></el-option>
</el-select>
<el-input class="hidden-md-and-down" placeholder="选择产品" v-model="filters.productName" @click.native="productSelectVisible=true" clearable @clear="onProductClose" style="width:15%;"></el-input>
<el-input v-model="filters.key" style="width:15%;" placeholder="项目名称模糊查询" clearable>
<el-input v-model="filters.key" style="width:15%;" placeholder="项目名称模糊查询" clearable>
</el-input>
<el-button type="primary" icon="el-icon-search" @click="searchXmProjects">查询</el-button>
<el-popover
@ -301,14 +302,7 @@
<el-button @click="copyToVisible = false;load.add=false"> </el-button>
<el-button type="primary" @click="onCopyToConfirm" :disabled="load.add" v-loading="load.add"> </el-button>
</span>
</el-dialog>
<el-drawer
append-to-body
title="产品"
:visible.sync="productSelectVisible"
width="80%">
<xm-product-mng :is-select-product="true" @selected="onProductSelected"></xm-product-mng>
</el-drawer>
</el-dialog>
</section>
</template>
@ -329,7 +323,7 @@
import xmTaskMng from '../xmTask/XmTaskMng';
import xmProjectInfo from './XmProjectInfo';
import XmProjectTplMng from './XmProjectTplMng';
import XmProductMng from '@/views/xm/core/components/XmProductSelect';
import XmProductSelect from '@/views/xm/core/components/XmProductSelect';
if(!Vue.component("xm-project-info")){
@ -475,7 +469,7 @@
params = this.menuFilter(params);
if(this.filters.productId){
params.productId = this.filters.productId
params.linkProductId = this.filters.productId
}
if(this.filters.status){
params.status = this.filters.status
@ -866,7 +860,7 @@
'xm-project-add':XmProjectAdd,
'xm-project-edit':XmProjectEdit,
XmProductMng,
XmProductSelect,
xmTaskMng,
XmProjectTplMng,
//

198
src/views/xm/core/xmProject/XmProjectSelect.vue

@ -1,198 +0,0 @@
<template>
<section>
<el-row class="page-main padding-left">
<el-table ref="table" border :height="maxTableHeight" stripe :data="xmProjects" highlight-current-row v-loading="load.list" @selection-change="selsChange" @row-click="rowClick" style="width: 100%;" >
<el-table-column type="index" label="序号" >
</el-table-column>
<el-table-column prop="name" label="项目名称" >
<template slot="header">
项目名称 <el-button type="text" @click="clearSelect">清空所选</el-button><el-button type="text" @click="close">关闭</el-button>
</template>
<template slot-scope="scope">
{{scope.row.name}}&nbsp;&nbsp;
<font :color="scope.row.totalProgress==100?'green':'#FF8C00'">{{parseInt(scope.row.totalProgress)}}%</font>
</template>
</el-table-column>
</el-table>
<el-pagination layout="total, prev, 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>
</section>
</template>
<script>
import Vue from 'vue'
import util from '@/common/js/util';//
//import Sticky from '@/components/Sticky' // header
import config from "@/common/config"; //
//import { initSimpleDicts } from '@/api/mdp/meta/item';//
import { listXmProject, } from '@/api/xm/core/xmProject';
import { mapGetters } from 'vuex'
export default {
props:["xmIteration","xmProduct",'autoSelect'],
computed: {
...mapGetters([
'userInfo','roles'
]),
},
watch:{
"xmIteration.id":function(val){
this.getXmProjects();
},
"xmProduct.id":function(val){
this.getXmProjects();
}
},
data() {
return {
filters: {
key: ''
},
xmProjects: [],//
pageInfo:{//
total:0,//0>0
pageSize:10,//
count:false,//
pageNum:1,//1
orderFields:['create_time'],// ['sex','student_id']
orderDirs:['desc']// asc,desc ['asc','desc']
},
load:{ list: false, edit: false, del: false, add: false },//...
sels: [],//
dicts:{},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
addFormVisible: false,//xmProject
//xmProject
addForm: {
id:'',code:'',name:'',xmType:'',startTime:'',endTime:'',urgent:'',priority:'',description:'',createUserid:'',createUsername:'',createTime:'',assess:'',assessRemarks:'',status:'',branchId:'',planTotalCost:'',bizProcInstId:'',bizFlowState:'',planNouserAt:'',planIuserAt:'',planOuserAt:'',locked:'',baseTime:'',baseRemark:'',baselineId:'',planWorkload:'',totalReceivables:'',budgetMarginRate:'',contractAmt:'',planIuserPrice:'',budgetOuserPrice:'',planOuserCnt:'',planIuserCnt:'',planWorkingHours:''
},
editFormVisible: false,//
maxTableHeight:300,
//xmProject
editForm: {
id:'',code:'',name:'',xmType:'',startTime:'',endTime:'',urgent:'',priority:'',description:'',createUserid:'',createUsername:'',createTime:'',assess:'',assessRemarks:'',status:'',branchId:'',planTotalCost:'',bizProcInstId:'',bizFlowState:'',planNouserAt:'',planIuserAt:'',planOuserAt:'',locked:'',baseTime:'',baseRemark:'',baselineId:'',planWorkload:'',totalReceivables:'',budgetMarginRate:'',contractAmt:'',planIuserPrice:'',budgetOuserPrice:'',planOuserCnt:'',planIuserCnt:'',planWorkingHours:''
},
/**end 自定义属性请在上面加 请加备注**/
}
},//end data
methods: {
handleSizeChange(pageSize) {
this.pageInfo.pageSize=pageSize;
this.getXmProjects();
},
handleCurrentChange(pageNum) {
this.pageInfo.pageNum = pageNum;
this.getXmProjects();
},
// obj.order=ascending/descending, asc/desc ; obj.prop=,
sortChange( obj ){
var dir='asc';
if(obj.order=='ascending'){
dir='asc'
}else{
dir='desc';
}
if(obj.prop=='xxx'){
this.pageInfo.orderFields=['xxx'];
this.pageInfo.orderDirs=[dir];
}
this.getXmProjects();
},
//xmProject
selsChange: function (sels) {
this.sels = sels;
},
searchXmProjects(){
this.pageInfo.count=true;
this.getXmProjects();
},
rowClick(row){
this.editForm=row;
this.$emit("row-click",row);
},
// XmProject xm_project
getXmProjects() {
let params = {
pageSize: this.pageInfo.pageSize,
pageNum: this.pageInfo.pageNum,
total: this.pageInfo.total,
count:this.pageInfo.count,
};
if(this.filters.key){
params.key='%'+this.filters.key+'%'
}
this.load.list = true;
if(this.pageInfo.orderFields!=null && this.pageInfo.orderFields.length>0){
let orderBys=[];
for(var i=0;i<this.pageInfo.orderFields.length;i++){
orderBys.push(this.pageInfo.orderFields[i]+" "+this.pageInfo.orderDirs[i])
}
params.orderBy= orderBys.join(",")
}
if(this.xmIteration&&this.xmIteration.id){
params.iterationId=this.xmIteration.id
}
if(this.xmProduct&&this.xmProduct.id){
params.productId=this.xmProduct.id
}
params.branchId = this.userInfo.branchId;
listXmProject(params).then((res) => {
var tips=res.data.tips;
if(tips.isOk){
this.pageInfo.total = res.data.total;
this.pageInfo.count=false;
this.xmProjects = res.data.data;
if(this.autoSelect===true&&this.xmProjects.length>0){
var row=this.xmProjects[0];
this.$refs.table.setCurrentRow(row);
this.rowClick(row);
}
}else{
this.$notify({showClose: true, message: tips.msg, type: 'error' });
}
this.load.list = false;
}).catch( err => this.load.list = false );
},
selectProject:function(row){
this.editForm=row
this.$emit('project-confirm',this.editForm);
}
/**end 自定义函数请在上面加**/
,
clearSelect(){
this.$refs.table.setCurrentRow();
this.$emit("clear-select");
},
close(){
this.$emit("close");
}
},//end methods
components: {
//
},
mounted() {
this.$nextTick(() => {
this.maxTableHeight = util.calcTableMaxHeight(this.$refs.table.$el);
this.showInfo = false;
this.getXmProjects();
});
}
}
</script>
<style scoped>
.align-right{
float: right;
}
</style>

28
src/views/xm/core/xmProjectState/XmProjectStateMng.vue

@ -1,12 +1,14 @@
<template>
<section class="page-container padding border">
<el-row>
<el-input style="width:20%;" v-model="filters.selProject.name" @click.native="onProjectInputClick" clearable @clear="closeSelectProject" placeholder="点击选择项目"></el-input>
<el-row>
<el-input v-model="filters.key" style="width: 20%;" placeholder="项目名称模糊查询"> </el-input>
<el-button v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmProjectStates" icon="el-icon-search"></el-button>
<el-button type="success" @click="loadTasksToXmProjectState" icon="el-icon-s-data">刷新数据</el-button>
<el-button type="success" @click="loadTasksSettleToXmProjectState" icon="el-icon-s-data">刷新结算数据</el-button>
<xm-project-select :auto-select="false" @row-click="onPorjectConfirm(loadTasksToXmProjectState,$event)">
<font slot="title">刷新任务统计数据</font>
</xm-project-select>
<xm-project-select :auto-select="false" @row-click="onPorjectConfirm(loadTasksSettleToXmProjectState,$event)">
<font slot="title">刷新结算数据</font>
</xm-project-select>
</el-row>
<el-row class="page-main">
<!--列表 XmProjectState 项目指标日统计表-->
@ -104,10 +106,7 @@
<!--新增 XmProjectState 项目指标日统计表界面-->
<el-drawer title="新增项目指标日统计表" :visible.sync="addFormVisible" size="50%" append-to-body :close-on-click-modal="false">
<xm-project-state-add :xm-project-state="addForm" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-project-state-add>
</el-drawer>
<el-drawer title="选中项目" :visible.sync="selectProjectVisible" size="80%" append-to-body :close-on-click-modal="false" @close="nextCommand=null">
<xm-project-list @project-confirm="onPorjectConfirm"></xm-project-list>
</el-drawer>
</el-drawer>
</el-row>
</section>
</template>
@ -119,8 +118,8 @@
import { listXmProjectState,loadProjectToXmProjectState, loadBugsToXmProjectState, loadTasksToXmProjectState , loadTasksSettleToXmProjectState} from '@/api/xm/core/xmProjectState';
import XmProjectStateAdd from './XmProjectStateAdd';//
import XmProjectStateEdit from './XmProjectStateEdit';//
import { mapGetters } from 'vuex'
import XmProjectList from '../xmProject/XmProjectList';
import { mapGetters } from 'vuex'
import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect.vue';
export default {
computed: {
@ -376,10 +375,9 @@
},
/**begin 自定义函数请在下面加**/
onPorjectConfirm:function(project){
onPorjectConfirm:function(nextCommand,project){
this.filters.selProject={...project}
this.selectProjectVisible=false;
if(this.nextCommand){
if(nextCommand){
this.nextCommand();
}else{
this.searchXmProjectStates();
@ -429,7 +427,7 @@
},//end methods
components: {
'xm-project-state-add':XmProjectStateAdd,
'xm-project-state-edit':XmProjectStateEdit, XmProjectList
'xm-project-state-edit':XmProjectStateEdit,XmProjectSelect,
//
},
mounted() {

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

@ -21,7 +21,8 @@
<el-row>
<el-col :span="12">
<el-form-item label="归属项目" prop="projectId">
<el-tag :closable="!selProject" @click="showProjectList" @close.stop="clearProject">{{this.filters.selProject?this.filters.selProject.name:'未关联项目'}}</el-tag>
<font v-if="filters.selProject">{{this.filters.selProject?this.filters.selProject.name:''}}</font>
<xm-project-select v-if="!selProject" @row-click="onPorjectConfirm"></xm-project-select>
</el-form-item>
</el-col>
<el-col :span="12">
@ -131,11 +132,7 @@
<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>
</el-drawer>
<el-drawer title="选中项目" :visible.sync="selectProjectVisible" size="70%" append-to-body :close-on-click-modal="false">
<xm-project-list @project-confirm="onPorjectConfirm"></xm-project-list>
</el-drawer>
</el-drawer>
</el-row>
<el-row>
<el-button @click.native="handleCancel">取消</el-button>
@ -155,7 +152,7 @@
import XmGroupMng from '../xmGroup/XmGroupSelect';
import xmMenuSelect from '../xmMenu/XmMenuSelect';
import XmProjectList from '../xmProject/XmProjectList';
import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';
import XmTaskList from '../xmTask/XmTaskList';
@ -398,10 +395,7 @@
sendToAsk(){
this.addForm.handlerUsername=this.addForm.askUsername
this.addForm.handlerUserid=this.addForm.askUserid
},
showProjectList:function(){
this.selectProjectVisible=true;
},
},
onPorjectConfirm:function(project){
this.filters.selProject=project
this.addForm.projectId=project.id
@ -433,7 +427,7 @@
},//end method
components: {
// 'xm-question-edit':XmQuestionEdit
'upload': AttachmentUpload,XmGroupMng,VueEditor,XmTaskList,xmMenuSelect,XmProjectList
'upload': AttachmentUpload,XmGroupMng,VueEditor,XmTaskList,xmMenuSelect,XmProjectSelect
},
mounted() {
console.log("question_add");

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

@ -1,7 +1,10 @@
<template>
<section class="padding">
<el-row>
<el-select v-model="filters.bugStatus" placeholder="状态" style="width:100px;" clearable @change="changeBugStatus">
<xm-product-select v-if="!xmProduct" style="display:inline;" :auto-select="false" :link-project-id="selProject?selProject.id:null" @row-click="onProductSelected" @clear-select="clearProduct"></xm-product-select>
<xm-project-select v-if="!selProject" style="display:inline;" ref="xmProjectSelect" :auto-select="false" :link-product-id="xmProduct?xmProduct.id:null" @row-click="onProjectConfirm" @clear-select="clearProject"></xm-project-select>
<el-select v-model="filters.bugStatus" placeholder="状态" style="width:100px;" clearable @change="changeBugStatus">
<el-option v-for="(b,index) in dicts['bugStatus']" :value="b.id" :key="index" :label="b.name">{{b.name}}
</el-option>
</el-select>
@ -25,16 +28,7 @@
title="更多查询条件或操作"
width="600"
trigger="click" >
<el-row>
<el-col :span="24" style="padding-top:5px;">
<font class="more-label-font" v-if="!xmProduct">产品:</font>
<xm-product-select :link-project-id="selProject?selProject.id:null" @row-click="onProductSelected"></xm-product-select>
</el-col>
<el-col :span="24" style="padding-top:12px;" v-if="!selProject">
<font class="more-label-font">项目:</font>
<el-tag v-if="filters.selProject && !selProject" closable @close="clearProject" @click="showProjectList(true)">{{ filters.selProject.name }}</el-tag>
<el-button v-else @click="showProjectList(true)" >选择项目</el-button>
</el-col>
<el-row>
<el-col :span="24" style="padding-top:12px;">
<font class="more-label-font">需求:</font>
<el-button v-if=" !filters.menus || filters.menus.length==0" @click="showMenu"> 需求</el-button>
@ -120,8 +114,7 @@
<el-button slot="reference" icon="el-icon-more"></el-button>
</el-popover>
<span style="float:right;">
<el-button type="primary" icon="el-icon-plus" @click="showAdd" round>
</el-button>
<el-button type="primary" icon="el-icon-plus" @click="showAdd" round> </el-button>
</span>
</el-row>
<el-row class="padding-top">
@ -188,10 +181,8 @@
<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>
<el-drawer title="选中项目" :visible.sync="selectProjectVisible" size="70%" append-to-body :close-on-click-modal="false">
<xm-project-list @project-confirm="onPorjectConfirm"></xm-project-list>
</el-drawer>
<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>
</el-drawer>
@ -216,7 +207,7 @@
import xmMenuSelect from '../xmMenu/XmMenuSelect';
import XmGroupMng from '../xmGroup/XmGroupMng';
import XmProjectList from '../xmProject/XmProjectList';
import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';
import XmProductSelect from '@/views/xm/core/components/XmProductSelect';//
import TagMng from "@/views/mdp/arc/tag/TagMng";
@ -528,12 +519,11 @@
this.editForm = Object.assign({}, row);
},
// XmQuestion xm_question
showAdd: function () {
if(this.filters.selProject==null){
showAdd: function () {
if(!this.filters.selProject){
this.$notify({showClose: true, message: "请先选中项目", type: 'warning' });
this.nextAction="showAdd"
this.showProjectList();
this.$refs.xmProjectSelect.projectVisible=true;
this.nextAction="showAdd"
return;
}
this.addFormVisible = true;
@ -764,20 +754,14 @@
this.selectUserVisible=false
this.searchXmQuestions();
},
showProjectList:function(clear){
if(clear){
this.nextAction="";
}
this.selectProjectVisible=true;
},
onPorjectConfirm:function(project){
},
onProjectConfirm:function(project){
this.filters.selProject=project
this.selectProjectVisible=false;
if(this.nextAction=='showAdd'){
if( this.nextAction=='showAdd'){
this.showAdd()
}else if(this.nextAction=='showGroupUsers'){
}else if( this.nextAction=='showGroupUsers'){
this.showGroupUsers(this.userType)
}else{
this.searchXmQuestions();
@ -930,7 +914,7 @@
components: {
'xm-question-add':XmQuestionAdd,
'xm-question-edit':XmQuestionEdit,
XmGroupMng,XmProjectList,xmMenuSelect,XmProductSelect,TagMng,
XmGroupMng,XmProjectSelect,xmMenuSelect,XmProductSelect,TagMng,
//
},
mounted() {

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

@ -3,7 +3,7 @@
<el-row>
<div>
<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>
<xm-product-select v-else :link-project-id="filters.selProject?filters.selProject.id:null" @row-click="onProductSelected"></xm-product-select>
<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-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询">
@ -26,8 +26,7 @@
<xm-product-select :link-project-id="filters.selProject?filters.selProject.id:null" @row-click="onProductSelected"></xm-product-select>
</el-col>
<el-col :span="24" style="padding-top:5px;" v-if="!selProject" >
<font class="more-label-font">项目:</font><el-tag v-if=" filters.selProject " closable @close="clearProject">{{this.filters.selProject.name}}</el-tag>
<el-button v-else @click="showProjectList" type="plian">选项目</el-button>
<xm-project-select :link-product-id="filters.product?filters.product.id:null" @row-click="onPorjectConfirm"></xm-project-select>
</el-col>
<el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">需求:</font>
@ -107,9 +106,6 @@
<!--新增 XmTestCase 测试用例界面-->
<el-drawer title="新增测试用例" :visible.sync="addFormVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-test-case-add :xm-test-case="addForm" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-test-case-add>
</el-drawer>
<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>
</el-drawer>
<el-drawer title="选中用户" :visible.sync="selectUserForFiltersVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-group-mng v-if="filters.selProject" :sel-project=" filters.selProject " :is-select-single-user="1" @user-confirm="onFiltersUserConfirm"></xm-group-mng>
@ -132,7 +128,7 @@
import xmMenuSelect from '../xmMenu/XmMenuSelect';
import XmProductSelect from '@/views/xm/core/components/XmProductSelect';//
import XmProjectList from '../xmProject/XmProjectList';
import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';
import XmGroupMng from '../xmGroup/XmGroupMng';
export default {
@ -444,7 +440,7 @@
components: {
'xm-test-case-add':XmTestCaseAdd,
'xm-test-case-edit':XmTestCaseEdit,
xmMenuSelect,XmProductSelect,XmProjectList,XmGroupMng
xmMenuSelect,XmProductSelect,XmProjectSelect,XmGroupMng
//
},
mounted() {

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

@ -2,8 +2,8 @@
<section class="page-container padding border">
<el-row v-if="!batchEditVisible">
<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-button v-if="!this.filters.selProject" @click="showProjectList">选择项目</el-button>
<xm-product-select :auto-select="false" :link-project-id="filters.selProject" @row-click="onProductSelected"></xm-product-select>
<xm-project-select :auto-select="false" :link-product-id="filters.product?filters.product.id:null" @row-click="onPorjectConfirm"></xm-project-select>
<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-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询">
@ -20,12 +20,10 @@
trigger="click" >
<el-row>
<el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">产品:</font><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>
<xm-product-select :auto-select="false" :link-project-id="filters.selProject" @row-click="onProductSelected"></xm-product-select>
</el-col>
<el-col :span="24" style="padding-top:5px;" v-if="!selProject" >
<font class="more-label-font">项目:</font><el-tag v-if=" filters.selProject " closable @close="clearProject">{{this.filters.selProject.name}}</el-tag>
<el-button v-else @click="showProjectList" type="plian">选项目</el-button>
<xm-project-select :auto-select="false" :link-product-id="filters.product?filters.product.id:null" @row-click="onPorjectConfirm"></xm-project-select>
</el-col>
<el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">需求:</font>
@ -168,10 +166,7 @@
</el-drawer>
<el-drawer title="选择用例" :visible.sync="xmTestCaseMngVisible" size="60%" append-to-body :close-on-click-modal="false">
<xm-test-case-mng :multi-select="true" :visible="xmTestCaseMngVisible" @selected="onCaseSelected"></xm-test-case-mng>
</el-drawer>
<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>
</el-drawer>
</el-drawer>
<el-drawer append-to-body title="需求选择" :visible.sync="menuVisible" fullscreen size="80%" :close-on-click-modal="false">
<xm-menu-select :visible="menuVisible" :is-select-menu="true" :multi="true" @menus-selected="onSelectedMenus" ></xm-menu-select>
</el-drawer>
@ -193,11 +188,7 @@
</el-drawer>
<el-drawer title="缺陷列表" :visible.sync="bugsVisible" size="80%" append-to-body fullscreen :close-on-click-modal="false">
<xm-question-mng :xm-test-case="xmTestCase" :xm-test-case-exec="editForm" :sel-project="filters.selProject" :visible="bugsVisible" @cancel="bugsVisible=false" ></xm-question-mng>
</el-drawer>
<el-drawer title="选择产品" :visible.sync="productSelectVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-product-select :isSelectProduct="true" :selProject="filters.selProject" :visible="productSelectVisible" @cancel="productSelectVisible=false" @selected="onProductSelected"></xm-product-select>
</el-drawer>
</el-drawer>
<!--新增 XmQuestion xm_question界面-->
<el-drawer title="新增缺陷" :visible.sync="addBugVisible" size="60%" append-to-body :close-on-click-modal="false">
<xm-question-add :xm-test-case-exec="editForm" :xm-test-case="xmTestCase" :qtype="'bug'" :sel-project=" filters.selProject " :visible="addBugVisible" @cancel="addBugVisible=false"></xm-question-add>
@ -218,7 +209,7 @@
import XmTestCaseExecAdd from './XmTestCaseExecAdd';//
import XmTestCaseExecEdit from './XmTestCaseExecEdit';//
import XmTestCaseMng from '../xmTestCase/XmTestCaseMng';//
import XmProjectList from '../xmProject/XmProjectList';
import XmProjectSelect from '@/views/xm/core/components/XmProjectSelect';
import xmMenuSelect from '../xmMenu/XmMenuSelect';
import XmGroupMng from '../xmGroup/XmGroupMng';
import XmTaskList from '../xmTask/XmTaskList';
@ -229,7 +220,7 @@
import XmGantt from '../components/xm-gantt';
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters([
@ -502,7 +493,7 @@
showCase(){
if(!this.filters.selProject){
this.$notify({showClose: true,message:"请先选择项目",type:"warning"});
this.nextAction="showCase"
nextAction="showCase"
this.showProjectList();
return;
}
@ -516,28 +507,28 @@
showProjectList:function(){
this.selectProjectVisible=true;
},
onPorjectConfirm:function(project){
onPorjectConfirm:function(nextAction,project){
this.filters.selProject=project
this.selectProjectVisible=false;
this.getXmTestCaseExecs();
if(this.nextAction=="showBatchEdit"){
if(nextAction=="showBatchEdit"){
this.showBatchEdit();
this.nextAction=""
}else if(this.nextAction=="showCase"){
nextAction=""
}else if(nextAction=="showCase"){
this.showCase();
this.nextAction=""
}else if(this.nextAction=="showAddBug"){
nextAction=""
}else if(nextAction=="showAddBug"){
this.showAddBug(this.editForm);
this.nextAction=""
}else if(this.nextAction=="showBugs"){
nextAction=""
}else if(nextAction=="showBugs"){
this.showBugs(this.editForm);
this.nextAction=""
}else if(this.nextAction=="showSelectTask"){
nextAction=""
}else if(nextAction=="showSelectTask"){
this.showSelectTask(this.editForm);
this.nextAction=""
}else if(this.nextAction=="showExecUsersForFilters"){
nextAction=""
}else if(nextAction=="showExecUsersForFilters"){
this.showExecUsersForFilters();
this.nextAction=""
nextAction=""
}
},
formatterExecStatus(row,column,cellValue, index){
@ -589,7 +580,7 @@
}
if( !this.filters.selProject ){
this.$notify({showClose: true, message:"请先选择项目", type: 'warning'});
this.nextAction="showBatchEdit"
nextAction="showBatchEdit"
this.showProjectList();
return ;
}
@ -641,7 +632,7 @@
},
showExecUsersForFilters:function(){
if(!this.filters.selProject){
this.nextAction="showExecUsersForFilters"
nextAction="showExecUsersForFilters"
this.showProjectList();
}else{
this.selectUserForFiltersVisible=true;
@ -654,8 +645,8 @@
}else{
this.filters.execUser=groupUsers[0]
}
if(this.nextAction=="showExecUsersForFilters"){
this.nextAction=""
if(nextAction=="showExecUsersForFilters"){
nextAction=""
}
this.selectUserForFiltersVisible=false
this.searchXmTestCaseExecs();
@ -677,7 +668,7 @@
this.editForm=row
if(this.filters.selProject==null){
this.$notify({showClose: true, message: "请先选项目", type: 'success' });
this.nextAction="showSelectTask"
nextAction="showSelectTask"
this.showProjectList();
return ;
@ -707,7 +698,7 @@
if(!this.filters.selProject){
this.$notify({showClose: true, message: "请先选项目", type: 'success' });
this.showProjectList();
this.nextAction="showBugs"
nextAction="showBugs"
return ;
}
if(row.caseId){
@ -724,7 +715,7 @@
if(!this.filters.selProject){
this.$notify({showClose: true, message: "请先选项目", type: 'success' });
this.nextAction="showAddBug"
nextAction="showAddBug"
this.showProjectList();
return ;
}
@ -747,10 +738,11 @@
components: {
'xm-test-case-exec-add':XmTestCaseExecAdd,
'xm-test-case-exec-edit':XmTestCaseExecEdit,
XmTestCaseMng,XmProjectList,xmMenuSelect,XmGroupMng,XmTaskList,XmTestCaseEdit,XmQuestionMng,XmQuestionAdd, XmGantt,XmProductSelect
XmTestCaseMng,XmProjectSelect,xmMenuSelect,XmGroupMng,XmTaskList,XmTestCaseEdit,XmQuestionMng,XmQuestionAdd, XmGantt,XmProductSelect
//
},
mounted() {
XmProjectSelectmounted() {
this.filters.selProject=this.selProject;
this.filters.execUser=this.userInfo;
this.$nextTick(() => {

Loading…
Cancel
Save