Browse Source

优化

master
陈裕财 4 years ago
parent
commit
6a990eb300
  1. 98
      src/views/xm/core/components/XmTableConfig.vue
  2. 2
      src/views/xm/core/xmMenu/XmMenuEdit.vue
  3. 57
      src/views/xm/core/xmMenu/XmMenuMng.vue
  4. 17
      src/views/xm/core/xmMenu/XmMenuSelect.vue

98
src/views/xm/core/components/XmTableConfig.vue

@ -0,0 +1,98 @@
<template>
<section>
<el-popover
placement="bottom"
width="500"
v-model="formVisible"
trigger="manual" > <el-form :model="editForm" label-width="100px" ref="editForm">
<el-form-item :label="item.label" :prop="item.property" v-for="(item,index) in columnsConfig" :key="index">
<el-checkbox v-model="item.isShow" @change="onCheckboxChange(item,$event)">是否显示</el-checkbox>
</el-form-item>
<el-form-item label="" class="padding">
<el-button type="text" @click="cancel">关闭</el-button>
<el-button :disabled="editForm.calcType!=='2' && editForm.ntype==='1'" type="primary" @click="submit">确认</el-button>
</el-form-item>
</el-form>
<el-button title="点击修改表格配置" @click="showConfig" slot="reference" icon="el-icon-setting"><font style="font-size:14px;"></font></el-button>
</el-popover>
</section>
</template>
<script>
import util from '@/common/js/util';//
import config from '@/common/config';//
import { initSimpleDicts } from '@/api/mdp/meta/item';//
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters([
'userInfo','roles'
]),
},
props:['table'],
watch:{
},
data() {
return {
columnsConfig:[],
editForm:{},
formVisible:false,
}
},//end data
methods: {
cancel(){
this.formVisible=false;
this.$emit("cancel")
},
submit(){
this.$emit("submit");
this.formVisible=false;
},
showConfig(){
if(this.columnsConfig.length>0){
this.formVisible=true;
return;
}
if(this.table){
var columns=this.table.$children.filter(i=>i.columnConfig&&i.columnConfig.label)
columns=columns.map((column)=>{
if(column && column.columnConfig){
return {
label:column.columnConfig.label,
property:column.columnConfig.property,
isShow:true,
id:column.columnConfig.id,
}
}
});
this.columnsConfig=columns
this.formVisible=true;
}
},
onCheckboxChange(column,newVal){
var doc=this.table.$el;
var eles=doc.querySelectorAll("."+column.id);
eles.forEach(i=>{
i.style.display=newVal?"":"none";
})
this.table.doLayout();
}
},//end methods
components: {
//
},
mounted() {
}
}
</script>
<style lang="scss" scoped>
</style>

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

@ -111,7 +111,7 @@
</el-form-item>
<el-form-item label="当前进度" prop="mactRate" >
<el-progress style="width:80%;" :stroke-width="26" :percentage="editForm.mactRate?addForm.mactRate:0"></el-progress>
<el-progress style="width:80%;" :stroke-width="26" :percentage="editForm.mactRate?editForm.mactRate:0"></el-progress>
</el-form-item>
<el-form-item label="预估工期" prop="budgetHours">
<el-input-number :disabled="editForm.calcType!=='2' && editForm.ntype==='1'" style="width:200px;" v-model="editForm.budgetHours" :precision="2" :step="8" :min="0" placeholder="预计工期(小时)"></el-input-number>&nbsp;h

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

@ -139,7 +139,8 @@
</el-col>
<el-col :span="24" style="padding-top:5px;">
<el-button v-if=" batchEditVisible==false " @click="handleExport" icon="el-icon-download">导出</el-button>
<el-button v-if=" batchEditVisible==false&&disabledMng!=false " @click="loadTasksToXmMenuState" icon="el-icon-s-marketing">汇总进度</el-button>
<el-button v-if=" batchEditVisible==false&&disabledMng!=false " @click="loadTasksToXmMenuState" icon="el-icon-s-marketing">汇总进度</el-button>
</el-col>
</el-row>
<el-button slot="reference" icon="el-icon-more"></el-button>
@ -179,13 +180,13 @@
</el-popover>
<el-button @click="showParentMenu" icon="el-icon-top" title="更换上级"></el-button>
<el-button v-if="disabledMng!=false" type="danger" @click="batchDel" icon="el-icon-delete" title="删除"></el-button>
<el-button v-if="disabledMng!=false" type="danger" @click="batchDel" icon="el-icon-delete" title="删除"></el-button>
<el-button class="hidden-md-and-down" v-if=" batchEditVisible==false&&disabledMng!=false " @click="loadTasksToXmMenuState" icon="el-icon-s-marketing" title="汇总进度"></el-button>
<xm-table-config ref="tableConfig" style="display:inline;" :table="$refs.table"></xm-table-config>
</span>
</el-row>
<el-row class="padding-top">
<el-table :row-style="{height:'60px'}" lazy :load="loadXmMenusLazy" stripe fit border ref="table" :height="maxTableHeight" :data="xmMenusTreeData" current-row-key="menuId" row-key="menuId" :tree-props="{children: 'children', hasChildren: 'childrenCnt'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" @selection-change="selsChange" @row-click="rowClick">
<el-table :cell-style="cellStyleCalc" :header-cell-style="cellStyleCalc" :row-style="{height:'60px'}" lazy :load="loadXmMenusLazy" stripe fit border ref="table" :height="maxTableHeight" :data="xmMenusTreeData" current-row-key="menuId" row-key="menuId" :tree-props="{children: 'children', hasChildren: 'childrenCnt'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" @selection-change="selsChange" @row-click="rowClick">
<el-table-column sortable type="selection" width="40"></el-table-column>
<el-table-column prop="menuName" label="需求名称" min-width="300" fixed="left">
@ -225,6 +226,7 @@
</el-table-column>
<template>
<el-table-column prop="productId" label="产品" width="100" show-overflow-tooltip sortable>
</el-table-column>
<el-table-column prop="status" label="状态" min-width="80" sortable>
@ -239,7 +241,7 @@
</span>
</template>
</el-table-column>
<el-table-column prop="dtype" label="类型" width="100" sortable>
<el-table-column prop="dtype" label="类型" width="100" sortable v-if="false">
<template slot-scope="scope">
<div class="cell-text">
{{formaterByDicts(scope.row,'dtype',scope.row.dtype)}}
@ -251,7 +253,7 @@
</span>
</template>
</el-table-column>
<el-table-column prop="source" label="来源" width="100" :formatter="formaterByDicts" show-overflow-tooltip sortable>
<el-table-column prop="source" label="来源" width="100" :formatter="formaterByDicts" show-overflow-tooltip sortable v-if="false">
<template slot-scope="scope">
<div class="cell-text">
{{formaterByDicts(scope.row,'source',scope.row.source)}}
@ -288,21 +290,7 @@
</span>
</template>
</el-table-column>
<el-table-column prop="iterationName" label="迭代" min-width="120" show-overflow-tooltip sortable>
<template slot="header">
迭代
<el-popover
placement="top"
width="300"
v-model="linkIterationPopoverVisible">
<p>将需求加入还是移出迭代 <span v-if="filters.iteration && filters.iteration.id">{{filters.iteration.iterationName}}</span>?</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="doBatchDelXmIterationMenu">移出</el-button>
<el-button type="primary" size="mini" @click="doBatchAddXmIterationMenu">加入</el-button>
</div>
<el-button type="text" slot="reference" icon="el-icon-edit" title="点击设置需求与迭代的关联关系" @click="linkIterationPopoverVisible=true">关联</el-button>
</el-popover>
</template>
<el-table-column prop="iterationName" label="迭代" width="150" show-overflow-tooltip sortable>
<template slot-scope="scope">
<div class="cell-text">
@ -333,7 +321,7 @@
<span v-if="scope.row.mactRate"><el-tag :type="scope.row.mactRate>=100?'success':'warning'">{{scope.row.mactRate}}%</el-tag></span>
</div>
<span class="cell-bar">
<xm-menu-workload :menu="scope.row" placeholder="工时" style="display:block;" @submit="editXmMenuSomeFields(scope.row,'workload',$event)">
<xm-menu-workload :menu="scope.row" placeholder="工时" style="display:block;" @submit="editXmMenuSomeFields(scope.row,'workload',$event)">
</xm-menu-workload>
</span>
</template>
@ -369,7 +357,7 @@
<span>{{scope.row.mmUsername}} </span>
</template>
</el-table-column>
</template>
</el-table>
@ -466,6 +454,7 @@
import XmIterationSelect from '../xmIteration/XmIterationSelect';//
import XmItSelect from '@/views/xm/core/components/XmItSelect';//
import XmMenuWorkload from '@/views/xm/core/components/XmMenuWorkload';//
import XmTableConfig from '@/views/xm/core/components/XmTableConfig';//
import UsersSelect from "@/views/mdp/sys/user/UsersSelect";
import XmMenuSelect from "../xmMenu/XmMenuSelect";
@ -473,7 +462,7 @@
import {sn} from '@/common/js/sequence'
import { mapGetters } from 'vuex'
import { mapGetters } from 'vuex'
export default {
props:['selProject','xmIteration','xmProduct','disabledMng'],
@ -508,6 +497,7 @@
const endDate = new Date();
beginDate.setTime(beginDate.getTime() - 3600 * 1000 * 24 * 7 * 4 * 12 );
return {
columnsConfig:[/**{label:'',property:'',isShow:true} */],
filters: {
key: '',
product:null,
@ -525,7 +515,7 @@
xmMenus: [],//
pageInfo:{//
total:0,//0>0
pageSize:50,//
pageSize:20,//
count:false,//
pageNum:1,//1
orderFields:[],// ['sex','student_id']
@ -745,8 +735,8 @@
// XmMenu xm_project_menu
showEdit: function ( row,index ) {
this.editForm = Object.assign({}, row);
this.editFormVisible = true;
this.editForm = Object.assign({}, row);
},
// XmMenu xm_project_menu
showAdd: function (dclass) {
@ -1279,7 +1269,19 @@
this.$notify({showClose:true,message:tips.msg,type:tips.isOk?'success':'error'})
}
})
},
cellStyleCalc({row, column, rowIndex, columnIndex}){
if(this.$refs.tableConfig && this.$refs.tableConfig.columnsConfig.length>0){
if(this.$refs.tableConfig.columnsConfig.some(i=>i.property==column.property&&i.isShow==false)){
return "display:none;"
}else{
return "";
}
}else{
return "";
}
}
},//end methods
components: {
'xm-menu-add':XmMenuAdd,
@ -1297,6 +1299,7 @@
XmMenuSelect,
XmItSelect,
XmMenuWorkload,
XmTableConfig,
//
},
mounted() {
@ -1318,7 +1321,7 @@
this.$nextTick(() => {
this.maxTableHeight = util.calcTableMaxHeight(this.$refs.table.$el);
this.getXmMenus();
});
});
}
}

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

@ -3,13 +3,13 @@
<el-row>
<el-col :span="24" style="padding-left:12px;" >
<el-row>
<el-popover
<el-popover v-if="!xmProduct&&!xmIteration"
placement="bottom"
width="400"
trigger="manual"
v-model="productVisible">
<xm-product-select v-if="!xmProduct" :auto-select="false" :sel-project="selProject" @row-click="onProductSelected" ref="xmProductMng" :xm-iteration="xmIteration" :simple="true" @clear-select="onProductClearSelect" @close="productVisible=false"></xm-product-select>
<el-link title="产品,点击选择、清除选择" @click="productVisible=true" type="warning" slot="reference" v-if="!xmProduct" icon="el-icon-search"><font style="font-size:14px;">{{filters.product?filters.product.productName:'选择产品'}}</font></el-link>
<el-link title="产品,点击选择、清除选择" @click="productVisible=true" type="warning" slot="reference" icon="el-icon-search"><font style="font-size:14px;">{{filters.product?filters.product.productName:'选择产品'}}</font></el-link>
</el-popover>
<el-popover
@ -124,7 +124,7 @@
<div v-if="scope.row.dclass=='3'" class="icon" style="background-color: rgb(79, 140, 255);">
<i class="el-icon-document"></i>
</div>
<span class="vlink" :class="scope.row.ntype==='1'?'el-icon-folder-opened':''" @click="toMenu(scope.row)">{{scope.row.seqNo}}&nbsp;
<span class="vlink" @click="toMenu(scope.row)">{{scope.row.seqNo}}&nbsp;
{{scope.row.menuName}}</span>
</template>
</el-table-column>
@ -385,13 +385,14 @@
if( this.filters.product && this.filters.product.id){
params.productId=this.filters.product.id
}else {
this.$notify({showClose: true, message: "请先选择产品", type: 'warning' });
return;
//params.xxx=xxxxx
}
}
params=this.getParams(params)
if(!params.productId && !params.iterationId && !params.linkIterationId){
this.$notify({showClose: true, message: "请先选择产品", type: 'warning' });
return;
}
params.withParents="1"
this.load.list = true;
listXmMenu(params).then((res) => {

Loading…
Cancel
Save