Browse Source

优化

master
陈裕财 4 years ago
parent
commit
1a3b18cdb6
  1. 148
      src/views/xm/core/xmProjectPhase/XmProjectPhaseMng.vue
  2. 208
      src/views/xm/core/xmProjectPhaseTemplate/XmProjectPhaseTemplateMng.vue
  3. 49
      src/views/xm/core/xmProjectTemplate/XmProjectTemplateList.vue
  4. 5
      src/views/xm/core/xmProjectTemplate/XmProjectTemplateMng.vue

148
src/views/xm/core/xmProjectPhase/XmProjectPhaseMng.vue

@ -465,22 +465,12 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
}, },
// XmProjectPhase xm_project_phase // XmProjectPhase xm_project_phase
showEdit: function ( row,index ) {
if( !this.roles.some(i=>i.roleid=='projectAdmin') && !this.roles.some(i=>i.roleid=='teamAdmin') ){
this.$message({showClose: true, message: "只有项目经理、小组组长可以操作计划", type: 'error' });
return;
}
showEdit: function ( row,index ) {
this.editForm = row; this.editForm = row;
this.editFormVisible = true; this.editFormVisible = true;
}, },
// XmProjectPhase xm_project_phase // XmProjectPhase xm_project_phase
showAdd: function () {
if( !this.roles.some(i=>i.roleid=='projectAdmin') && !this.roles.some(i=>i.roleid=='teamAdmin') ){
this.$message({showClose: true, message: "只有项目经理、小组组长可以操作计划", type: 'error' });
return;
}
showAdd: function () {
this.parentProjectPhase=null; this.parentProjectPhase=null;
this.addForm.projectId=this.selProject.id; this.addForm.projectId=this.selProject.id;
this.addForm.branchId=this.selProject.branchId; this.addForm.branchId=this.selProject.branchId;
@ -488,11 +478,7 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
//this.addForm=Object.assign({}, this.editForm); //this.addForm=Object.assign({}, this.editForm);
}, },
showSubAdd: function (parentProjectPhase) {
if( !this.roles.some(i=>i.roleid=='projectAdmin') && !this.roles.some(i=>i.roleid=='teamAdmin') ){
this.$message({showClose: true, message: "只有项目经理、小组组长可以操作计划", type: 'error' });
return;
}
showSubAdd: function (parentProjectPhase) {
var myrow=JSON.parse(JSON.stringify(parentProjectPhase)) var myrow=JSON.parse(JSON.stringify(parentProjectPhase))
myrow.children=[]; myrow.children=[];
this.parentProjectPhase=myrow this.parentProjectPhase=myrow
@ -596,11 +582,16 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
this.phaseTemplateVisible=false; this.phaseTemplateVisible=false;
this.load.add=false this.load.add=false
var tips =res.data.tips var tips =res.data.tips
if(tips.isOk){ if(tips.isOk){
this.getXmProjectPhases()
if( (this.parentProjectPhase && !this.maps.get(this.parentProjectPhase.id))|| !this.parentProjectPhase){
this.searchXmProjectPhases()
}else{
treeTool.reloadChildren(this.$refs.table,this.maps,this.parentProjectPhase.id,'parentPhaseId',this.loadXmProjectPhaseLazy)
}
}else{ }else{
this.$message({showClose: true, message: tips.msg, type: 'error' }); this.$message({showClose: true, message: tips.msg, type: 'error' });
}
}
}).catch( err => this.load.add=false ); }).catch( err => this.load.add=false );
}, },
//xmProjectPhase //xmProjectPhase
@ -608,21 +599,7 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
this.sels = sels; this.sels = sels;
}, },
//xmProjectPhase //xmProjectPhase
handleDel: function (row,index) {
if( !this.roles.some(i=>i.roleid=='projectAdmin') && !this.roles.some(i=>i.roleid=='teamAdmin') ){
this.$message({showClose: true, message: "只有项目经理、小组组长可以操作计划", type: 'error' });
return;
}
if(!!row.bizFlowState ){
this.$message({showClose: true, message:"初始状态的计划可以直接删除,其它状态请发起审核流程进行删除", type: 'error' });
return;
}
if(command.data.children && command.data.length>0){
this.$message({showClose: true, message: "该计划存在子计划,不允许删除", type: 'error'});
return;
}
handleDel: function (row,index) {
this.$confirm('确认删除该记录吗?', '提示', { this.$confirm('确认删除该记录吗?', '提示', {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
@ -633,19 +610,18 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
var tips=res.data.tips; var tips=res.data.tips;
if(tips.isOk){ if(tips.isOk){
this.pageInfo.count=true; this.pageInfo.count=true;
this.getXmProjectPhases();
if( !this.maps.get(row.parentPhaseId)){
this.searchXmProjectPhases()
}else{
treeTool.reloadChildren(this.$refs.table,this.maps,row.parentPhaseId,'parentPhaseId',this.loadXmProjectPhaseLazy)
}
} }
this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' }); this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.del=false ); }).catch( err => this.load.del=false );
}); });
}, },
//xmProjectPhase //xmProjectPhase
batchDel: function () {
if( !this.roles.some(i=>i.roleid=='projectAdmin') && !this.roles.some(i=>i.roleid=='teamAdmin') ){
this.$message({showClose: true, message: "只有项目经理、小组组长可以操作计划", type: 'error' });
return;
}
batchDel: function () {
var phases=this.sels.filter(i=>{ var phases=this.sels.filter(i=>{
if( i.bizFlowState==''|| i.bizFlowState==null || i.bizFlowState==undefined){ if( i.bizFlowState==''|| i.bizFlowState==null || i.bizFlowState==undefined){
return true; return true;
@ -665,8 +641,21 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
this.load.del=false; this.load.del=false;
var tips=res.data.tips; var tips=res.data.tips;
if( tips.isOk ){ if( tips.isOk ){
debugger;
this.pageInfo.count=true; this.pageInfo.count=true;
this.getXmProjectPhases();
var parents=phases.filter(i=>!phases.some(k=>k.id==i.parentPhaseId));
var isLoadAll=parents.some(i=>i.lvl<=1||!this.maps.get(i.parentPhaseId));
var needLoadChlidList=parents.filter(i=>i.lvl>1)
if(isLoadAll){
this.searchXmProjectPhases()
}
if(needLoadChlidList.length>0){
needLoadChlidList.forEach(i=>{
if( this.maps.get(i.parentPhaseId)){
treeTool.reloadChildren(this.$refs.table,this.maps,i.parentPhaseId,'parentPhaseId',this.loadXmProjectPhaseLazy)
}
})
}
} }
this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error'}); this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error'});
}).catch( err => this.load.del=false ); }).catch( err => this.load.del=false );
@ -674,10 +663,6 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
}, },
showPhaseTemplate: function(parentPhase){ showPhaseTemplate: function(parentPhase){
if( !this.roles.some(i=>i.roleid=='projectAdmin') && !this.roles.some(i=>i.roleid=='teamAdmin') ){
this.$message({showClose: true, message: "只有项目经理、小组组长可以操作计划", type: 'error' });
return;
}
this.parentProjectPhase=parentPhase this.parentProjectPhase=parentPhase
this.phaseTemplateVisible=true; this.phaseTemplateVisible=true;
}, },
@ -692,51 +677,7 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
this.editForm=myrow; this.editForm=myrow;
this.$emit('row-click',myrow, event, column);// @row-click="rowClick" this.$emit('row-click',myrow, event, column);// @row-click="rowClick"
}, },
/**begin 自定义函数请在下面加**/
translateDataToTree(data2) {
var data=JSON.parse(JSON.stringify(data2));
let parents = data.filter(value =>{
//
var calcData=this.getRowSum(value);
value.phaseBudgetAt=calcData.phaseBudgetAt
value.actCostAt=calcData.actCostAt
if(value.parentPhaseId == 'undefined' || value.parentPhaseId == null || value.parentPhaseId == ''){
return true;
//
}else if(data.some(i=>value.parentPhaseId==i.id)){
return false;
}else {
return true
}
})
let children = data.filter(value =>{
if(data.some(i=>value.parentPhaseId==i.id)){
return true;
}else{
return false;
}
})
let translator = (parents, children) => {
parents.forEach((parent) => {
children.forEach((current, index) => {
if (current.parentPhaseId === parent.id) {
let temp = JSON.parse(JSON.stringify(children))
temp.splice(index, 1)
translator([current], temp)
typeof parent.children !== 'undefined' ? parent.children.push(current) : parent.children = [current]
}
}
)
}
)
}
translator(parents, children)
return parents
},
getGanttTreeData(treeData, keys) { getGanttTreeData(treeData, keys) {
return this.handleGanttData(treeData, keys) return this.handleGanttData(treeData, keys)
}, },
@ -777,11 +718,6 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
}, },
sendToProcessApprova:function(row,bizKey){ sendToProcessApprova:function(row,bizKey){
if( !this.roles.some(i=>i.roleid=='projectAdmin') && !this.roles.some(i=>i.roleid=='teamAdmin') ){
this.$message({showClose: true, message: "只有项目经理、小组组长可以操作计划", type: 'error' });
return;
}
if(row.bizFlowState=='1'){ if(row.bizFlowState=='1'){
this.$message.error("审核中,不允许重新发起"); this.$message.error("审核中,不允许重新发起");
return; return;
@ -864,11 +800,6 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
this.$router.push({path:'/mdp/workflow/re/procdef/ProcdefListForBizStart',query:{params:jsonParmas}}); this.$router.push({path:'/mdp/workflow/re/procdef/ProcdefListForBizStart',query:{params:jsonParmas}});
}, },
handleCommand(command) { handleCommand(command) {
if( !this.roles.some(i=>i.roleid=='projectAdmin') && !this.roles.some(i=>i.roleid=='teamAdmin') ){
this.$message({showClose: true, message: "只有项目经理、小组组长可以操作计划", type: 'error' });
return;
}
if(command.type=='sendToProcessApprova'){ if(command.type=='sendToProcessApprova'){
this.sendToProcessApprova(command.data,command.bizKey); this.sendToProcessApprova(command.data,command.bizKey);
}else if(command.type=='showEdit'){ }else if(command.type=='showEdit'){
@ -1044,11 +975,6 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
} }
}, },
saveBatchEdit:function(){ saveBatchEdit:function(){
if( !this.roles.some(i=>i.roleid=='projectAdmin') && !this.roles.some(i=>i.roleid=='teamAdmin') ){
this.$message({showClose: true, message: "只有项目经理、小组组长可以操作计划", type: 'error' });
return;
}
if(this.valueChangeRows.length==0){ if(this.valueChangeRows.length==0){
this.$message({showClose: true, message:"没有改变任何数据,无需保存", type: 'success'}); this.$message({showClose: true, message:"没有改变任何数据,无需保存", type: 'success'});
return; return;
@ -1240,11 +1166,6 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
} }
}, },
showMenu:function(parentPhase){ showMenu:function(parentPhase){
if( !this.roles.some(i=>i.roleid=='projectAdmin') && !this.roles.some(i=>i.roleid=='teamAdmin') ){
this.$message({showClose: true, message: "只有项目经理、小组组长可以操作计划", type: 'error' });
return;
}
this.parentProjectPhase=parentPhase this.parentProjectPhase=parentPhase
this.menuVisible=true; this.menuVisible=true;
}, },
@ -1266,11 +1187,6 @@ import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
}, },
handlePopover:function(row,opType){ handlePopover:function(row,opType){
if( !this.roles.some(i=>i.roleid=='projectAdmin') && !this.roles.some(i=>i.roleid=='teamAdmin') ){
this.$message({showClose: true, message: "只有项目经理、小组组长可以操作计划", type: 'error' });
return;
}
if('add'==opType){ if('add'==opType){
var subRow=JSON.parse(JSON.stringify(this.addForm)); var subRow=JSON.parse(JSON.stringify(this.addForm));
subRow.parentPhaseId=null subRow.parentPhaseId=null

208
src/views/xm/core/xmProjectPhaseTemplate/XmProjectPhaseTemplateMng.vue

@ -2,30 +2,43 @@
<section class="page-container page-full-height padding border"> <section class="page-container page-full-height padding border">
<el-row v-if="!simple"> <el-row v-if="!simple">
<el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询"></el-input> <el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询"></el-input>
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmProjectPhaseTemplates">查询</el-button>
<el-button v-if="!selProjectTemplate" type="primary" @click="showProjectTemplate">选择项目模板</el-button>
<el-button v-if="!isSelect" type="primary" @click="showAdd">+项目计划</el-button>
<el-button v-if="isSelect" type="primary" @click="selectedConfirm">确认选择</el-button>
<el-input v-model="filters.projectName" style="width: 20%;" placeholder="点击选择项目" @click.native="showProjectTemplate"></el-input>
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmProjectPhases">查询</el-button>
<el-button v-if="isSelect" type="primary" @click="selectedConfirm">确认选择</el-button>
</el-row> </el-row>
<el-row class="page-main" v-if="!simple"> <el-row class="page-main" v-if="!simple">
<!--列表 XmProjectPhaseTemplate xm_phase_template--> <!--列表 XmProjectPhaseTemplate xm_phase_template-->
<el-table default-expand-all :data="xmProjectPhaseTemplateTreeData" @sort-change="sortChange" row-key="id" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table lazy :load="loadXmProjectPhaseLazy" :data="xmProjectPhaseTemplateTreeData" @sort-change="sortChange" row-key="id" :tree-props="{children: 'children', hasChildren: 'childrenCnt'}" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column> <el-table-column sortable type="selection" width="40"></el-table-column>
<el-table-column prop="phaseName" label="计划名称" min-width="260" > <el-table-column prop="phaseName" label="计划名称" min-width="260" >
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.seqNo}} &nbsp;&nbsp;{{scope.row.phaseName}}
<span>
<span v-show="scope.row.milestone=='1'">
<i class="el-icon-star-on"></i>
</span>
<span v-show="scope.row.isKeyPath=='1'">
<i class="el-icon-s-help"></i>
</span>
<el-link :icon="scope.row.ntype=='1'?'el-icon-folder-opened':''" type="primary">{{scope.row.seqNo}} &nbsp;&nbsp;
</el-link>
{{scope.row.phaseName}}
</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="备注" min-width="80" ></el-table-column>
<el-table-column prop="phaseBudgetHours" label="工时" min-width="80" ></el-table-column>
<el-table-column prop="phaseBudgetStaffNu" label="投入人员数" min-width="80" ></el-table-column>
<el-table-column prop="projectTypeName" label="项目类型名称" min-width="80" ></el-table-column>
<el-table-column prop="phaseBudgetNouserAt" label="非人力成本总预算" min-width="80" ></el-table-column>
<el-table-column prop="phaseBudgetInnerUserAt" label="内部人力成本总预算" min-width="80" ></el-table-column>
<el-table-column prop="phaseBudgetOutUserAt" label="外购人力成本总预算" min-width="80" ></el-table-column>
<el-table-column prop="phaseBudgetWorkload" label="总工作量单位人时" min-width="80" ></el-table-column>
<el-table-column prop="remark" label="备注" min-width="80" show-overflow-tooltip></el-table-column>
<el-table-column label="预计工作量(人时)" min-width="80" show-overflow-tooltip>
<el-table-column prop="phaseBudgetHours" label="工时" min-width="80" ></el-table-column>
<el-table-column prop="phaseBudgetStaffNu" label="投入人员数" min-width="80" ></el-table-column>
<el-table-column prop="phaseBudgetWorkload" label="总工作量" min-width="80" ></el-table-column>
</el-table-column>
<el-table-column label="成本预算(元)" min-width="80" show-overflow-tooltip>
<el-table-column prop="phaseBudgetAt" label="总预算" min-width="80" ></el-table-column>
<el-table-column prop="phaseBudgetNouserAt" label="非人力" min-width="80" ></el-table-column>
<el-table-column prop="phaseBudgetInnerUserAt" label="内部" min-width="80" ></el-table-column>
<el-table-column prop="phaseBudgetOutUserAt" label="外购" min-width="80" ></el-table-column>
</el-table-column>
<el-table-column label="操作" width="260" fixed="right" v-if="!isSelect" > <el-table-column label="操作" width="260" fixed="right" v-if="!isSelect" >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button @click="showEdit( scope.row,scope.$index)"></el-button> <el-button @click="showEdit( scope.row,scope.$index)"></el-button>
@ -68,11 +81,10 @@
<script> <script>
import util from '@/common/js/util';// import util from '@/common/js/util';//
import treeTool from '@/common/js/treeTool';//
//import Sticky from '@/components/Sticky' // header //import Sticky from '@/components/Sticky' // header
import { listOption } from '@/api/mdp/meta/itemOption';// import { listOption } from '@/api/mdp/meta/itemOption';//
import { listXmProjectPhaseTemplate, delXmProjectPhaseTemplate, batchDelXmProjectPhaseTemplate } from '@/api/xm/core/xmProjectPhaseTemplate';
import XmProjectPhaseTemplateAdd from './XmProjectPhaseTemplateAdd';//
import XmProjectPhaseTemplateEdit from './XmProjectPhaseTemplateEdit';//
import { listXmProjectPhase } from '@/api/xm/core/xmProjectPhase';
import XmProjectTemplateList from '../xmProjectTemplate/XmProjectTemplateList';// import XmProjectTemplateList from '../xmProjectTemplate/XmProjectTemplateList';//
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
@ -84,7 +96,7 @@
'userInfo','roles' 'userInfo','roles'
]), ]),
xmProjectPhaseTemplateTreeData(){ xmProjectPhaseTemplateTreeData(){
return this.translateDataToTree(this.xmProjectPhaseTemplates);
return treeTool.translateDataToTree(this.xmProjectPhases,'parentPhaseId','id');
}, },
}, },
watch:{ watch:{
@ -94,15 +106,19 @@
}else{ }else{
this.filters.projectTemplate=null; this.filters.projectTemplate=null;
} }
this.getXmProjectPhaseTemplates()
this.getXmProjectPhases()
} }
}, },
data() { data() {
return { return {
filters: { filters: {
key: '', key: '',
projectId:'',
projectName:'',
productId:'',
productName:'',
}, },
xmProjectPhaseTemplates: [],//
xmProjectPhases: [],//
pageInfo:{// pageInfo:{//
total:0,//0>0 total:0,//0>0
pageSize:500,// pageSize:500,//
@ -136,11 +152,11 @@
methods: { methods: {
handleSizeChange(pageSize) { handleSizeChange(pageSize) {
this.pageInfo.pageSize=pageSize; this.pageInfo.pageSize=pageSize;
this.getXmProjectPhaseTemplates();
this.getXmProjectPhases();
}, },
handleCurrentChange(pageNum) { handleCurrentChange(pageNum) {
this.pageInfo.pageNum = pageNum; this.pageInfo.pageNum = pageNum;
this.getXmProjectPhaseTemplates();
this.getXmProjectPhases();
}, },
// obj.order=ascending/descending, asc/desc ; obj.prop=, // obj.order=ascending/descending, asc/desc ; obj.prop=,
sortChange( obj ){ sortChange( obj ){
@ -154,14 +170,23 @@
this.pageInfo.orderFields=['xxx']; this.pageInfo.orderFields=['xxx'];
this.pageInfo.orderDirs=[dir]; this.pageInfo.orderDirs=[dir];
} }
this.getXmProjectPhaseTemplates();
this.getXmProjectPhases();
}, },
searchXmProjectPhaseTemplates(){
searchXmProjectPhases(){
this.pageInfo.count=true; this.pageInfo.count=true;
this.getXmProjectPhaseTemplates();
this.getXmProjectPhases();
},
getParams(params){
if( this.filters.projectId ){
params.projectId=this.filters.projectId
}
if( this.filters.productId ){
params.productId=this.filters.productId
}
return params;
}, },
// XmProjectPhaseTemplate xm_phase_template // XmProjectPhaseTemplate xm_phase_template
getXmProjectPhaseTemplates() {
getXmProjectPhases() {
let params = { let params = {
pageSize: this.pageInfo.pageSize, pageSize: this.pageInfo.pageSize,
pageNum: this.pageInfo.pageNum, pageNum: this.pageInfo.pageNum,
@ -175,19 +200,19 @@
} }
params.orderBy= orderBys.join(",") params.orderBy= orderBys.join(",")
} }
if( this.filters.projectTemplate ){
params.projectId=this.filters.projectTemplate.id
}else{
this.$message({showClose: true, message: "请选择项目模板", type: 'error' });
return;
this.getParams(params)
if(!params.projectId && !params.productId){
this.$message({showClose: true, message: "请选择项目模板/产品模板", type: 'error' });
return;
} }
params.isTop="1"
this.load.list = true; this.load.list = true;
listXmProjectPhaseTemplate(params).then((res) => {
listXmProjectPhase(params).then((res) => {
var tips=res.data.tips; var tips=res.data.tips;
if(tips.isOk){ if(tips.isOk){
this.pageInfo.total = res.data.total; this.pageInfo.total = res.data.total;
this.pageInfo.count=false; this.pageInfo.count=false;
this.xmProjectPhaseTemplates = res.data.data;
this.xmProjectPhases = res.data.data;
}else{ }else{
this.$message({showClose: true, message: tips.msg, type: 'error' }); this.$message({showClose: true, message: tips.msg, type: 'error' });
} }
@ -216,7 +241,7 @@
afterAddSubmit(){ afterAddSubmit(){
this.addFormVisible=false; this.addFormVisible=false;
this.pageInfo.count=true; this.pageInfo.count=true;
this.getXmProjectPhaseTemplates();
this.getXmProjectPhases();
}, },
afterEditSubmit(){ afterEditSubmit(){
this.editFormVisible=false; this.editFormVisible=false;
@ -225,115 +250,54 @@
selsChange: function (sels) { selsChange: function (sels) {
this.sels = sels; this.sels = sels;
}, },
//xmProjectPhaseTemplate
handleDel: function (row,index) {
this.$confirm('确认删除该记录吗?', '提示', {
type: 'warning'
}).then(() => {
this.load.del=true;
let params = { id: row.id };
delXmProjectPhaseTemplate(params).then((res) => {
this.load.del=false;
var tips=res.data.tips;
if(tips.isOk){
this.pageInfo.count=true;
this.getXmProjectPhaseTemplates();
}
this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.del=false );
});
},
//xmProjectPhaseTemplate
batchDel: function () {
this.$confirm('确认删除选中记录吗?', '提示', {
type: 'warning'
}).then(() => {
this.load.del=true;
batchDelXmProjectPhaseTemplate(this.sels).then((res) => {
this.load.del=false;
var tips=res.data.tips;
if( tips.isOk ){
this.pageInfo.count=true;
this.getXmProjectPhaseTemplates();
}
this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error'});
}).catch( err => this.load.del=false );
});
},
rowClick: function(row, event, column){ rowClick: function(row, event, column){
this.$emit('row-click',row, event, column);// @row-click="rowClick" this.$emit('row-click',row, event, column);// @row-click="rowClick"
}, },
/**begin 自定义函数请在下面加**/ /**begin 自定义函数请在下面加**/
selectedConfirm(){ selectedConfirm(){
this.$emit("selected-confirm",this.sels); this.$emit("selected-confirm",this.sels);
},
translateDataToTree(data2) {
var data=JSON.parse(JSON.stringify(data2));
let parents = data.filter(value =>{
//
if(value.parentPhaseId == 'undefined' || value.parentPhaseId == null || value.parentPhaseId == ''){
return true;
//
}else if(data.some(i=>value.parentPhaseId==i.id)){
return false;
}else {
return true
}
})
let children = data.filter(value =>{
if(data.some(i=>value.parentPhaseId==i.id)){
return true;
}else{
return false;
}
})
let translator = (parents, children) => {
parents.forEach((parent) => {
children.forEach((current, index) => {
if (current.parentPhaseId === parent.id) {
let temp = JSON.parse(JSON.stringify(children))
temp.splice(index, 1)
translator([current], temp)
typeof parent.children !== 'undefined' ? parent.children.push(current) : parent.children = [current]
}
}
)
}
)
}
translator(parents, children)
return parents
},
},
showProjectTemplate:function(){ showProjectTemplate:function(){
this.projectTemplateVisible=true; this.projectTemplateVisible=true;
}, },
onProjectTemplateSelected:function(projectTemplate){ onProjectTemplateSelected:function(projectTemplate){
this.projectTemplateVisible=false; this.projectTemplateVisible=false;
this.filters.projectTemplate=projectTemplate;
this.filters.projectId=projectTemplate.id;
this.filters.projectName=projectTemplate.name;
this.$emit('selected-project-template',projectTemplate) this.$emit('selected-project-template',projectTemplate)
this.getXmProjectPhaseTemplates();
}
this.getXmProjectPhases();
},
loadXmProjectPhaseLazy(tree, treeNode, resolve) {
var params={parentPhaseId:tree.id}
params=this.getParams(params);
params.isTop=""
this.load.list = true;
var func=listXmProjectPhase
func(params).then(res=>{
this.load.list = false
var tips = res.data.tips;
if(tips.isOk){
resolve(res.data.data)
}else{
resolve([])
}
}).catch( err => this.load.list = false );
},
/**end 自定义函数请在上面加**/ /**end 自定义函数请在上面加**/
},//end methods },//end methods
components: {
'xm-project-phase-template-add':XmProjectPhaseTemplateAdd,
'xm-project-phase-template-edit':XmProjectPhaseTemplateEdit,
XmProjectTemplateList,
//
components: {
XmProjectTemplateList,
}, },
mounted() { mounted() {
if(this.selProjectTemplate){ if(this.selProjectTemplate){
this.filters.projectTemplate=this.selProjectTemplate this.filters.projectTemplate=this.selProjectTemplate
} }
this.$nextTick(() => { this.$nextTick(() => {
this.getXmProjectPhaseTemplates();
this.getXmProjectPhases();
}); });

49
src/views/xm/core/xmProjectTemplate/XmProjectTemplateList.vue

@ -12,18 +12,28 @@
<el-table :data="xmProjectTemplates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;"> <el-table :data="xmProjectTemplates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="45"></el-table-column> <el-table-column type="selection" width="45"></el-table-column>
<el-table-column sortable type="index" width="45"></el-table-column> <el-table-column sortable type="index" width="45"></el-table-column>
<el-table-column prop="name" label="模板名称" min-width="80" ></el-table-column>
<el-table-column prop="tcusername" label="模板创建人姓名" min-width="80" ></el-table-column>
<el-table-column prop="xmType" label="项目类型" min-width="80" ></el-table-column>
<el-table-column prop="description" label="项目描述" min-width="80" ></el-table-column>
<el-table-column prop="name" label="项目名称" min-width="150" ></el-table-column>
<el-table-column prop="tcusername" label="创建人" min-width="80" ></el-table-column>
<el-table-column prop="xmType" label="项目类型" min-width="80" :formatter="formatXmType"></el-table-column>
<el-table-column prop="planWorkload" label="总工作量" min-width="80" ></el-table-column>
<el-table-column prop="taxRate" label="税率" min-width="80" >
<template slot-scope="scope">
{{scope.row.taxRate}}%
</template>
</el-table-column>
<el-table-column prop="budgetMarginRate" label="预估毛利率" min-width="80" >
<template slot-scope="scope">
{{scope.row.budgetMarginRate}}%
</template>
</el-table-column>
<el-table-column label="预算(元)" min-width="80" >
<el-table-column prop="planTotalCost" label="总预算" min-width="80" ></el-table-column> <el-table-column prop="planTotalCost" label="总预算" min-width="80" ></el-table-column>
<el-table-column prop="planNouserAt" label="非人力预算" min-width="80" ></el-table-column>
<el-table-column prop="planInnerUserAt" label="内部预算" min-width="80" ></el-table-column>
<el-table-column prop="planOutUserAt" label="外购预算" min-width="80" ></el-table-column>
<el-table-column prop="planWorkload" label="总工作量" min-width="80" ></el-table-column>
<el-table-column prop="totalReceivables" label="总预计收款金额" min-width="80" ></el-table-column>
<el-table-column prop="budgetMarginRate" label="预估毛利率" min-width="80" ></el-table-column>
<el-table-column prop="taxRate" label="税率" min-width="80" ></el-table-column>
<el-table-column prop="planNouserAt" label="非人力" min-width="80" ></el-table-column>
<el-table-column prop="planInnerUserAt" label="内部" min-width="80" ></el-table-column>
<el-table-column prop="planOutUserAt" label="外购" min-width="80" ></el-table-column>
</el-table-column>
<el-table-column prop="description" label="项目描述" min-width="80" show-overflow-tooltip ></el-table-column>
<el-table-column label="操作" width="160" fixed="right"> <el-table-column label="操作" width="160" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="primary" @click="selectedProject(scope.row,scope.$index)">选中</el-button> <el-button type="primary" @click="selectedProject(scope.row,scope.$index)">选中</el-button>
@ -42,7 +52,7 @@
import util from '@/common/js/util';// import util from '@/common/js/util';//
import config from '@/common/config';// import config from '@/common/config';//
import { listOption } from '@/api/mdp/meta/itemOption';// import { listOption } from '@/api/mdp/meta/itemOption';//
import { listXmProjectTemplate } from '@/api/xm/core/xmProjectTemplate';
import { listXmProject } from '@/api/xm/core/xmProject';
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
export default { export default {
@ -135,8 +145,9 @@
if(this.filters.xmType){ if(this.filters.xmType){
params.xmType=this.filters.xmType params.xmType=this.filters.xmType
} }
params.isTpl="1"
this.load.list = true; this.load.list = true;
listXmProjectTemplate(params).then((res) => {
listXmProject(params).then((res) => {
var tips=res.data.tips; var tips=res.data.tips;
if(tips.isOk){ if(tips.isOk){
this.pageInfo.total = res.data.total; this.pageInfo.total = res.data.total;
@ -180,6 +191,18 @@
}, },
/**begin 自定义函数请在下面加**/ /**begin 自定义函数请在下面加**/
formatXmType(row,column,cellValue){
if(this.options.projectType){
var xmType=this.options.projectType.find(i=>i.optionValue==cellValue)
if(xmType){
return xmType.optionName
}else{
return cellValue;
}
}else{
return cellValue;
}
}
/**end 自定义函数请在上面加**/ /**end 自定义函数请在上面加**/

5
src/views/xm/core/xmProjectTemplate/XmProjectTemplateMng.vue

@ -16,8 +16,7 @@
<el-table-column type="selection" width="45"></el-table-column> <el-table-column type="selection" width="45"></el-table-column>
<el-table-column sortable type="index" width="45"></el-table-column> <el-table-column sortable type="index" width="45"></el-table-column>
<el-table-column prop="name" label="模板名称" min-width="80" ></el-table-column> <el-table-column prop="name" label="模板名称" min-width="80" ></el-table-column>
<el-table-column prop="tcusername" label="模板创建人姓名" min-width="80" ></el-table-column>
<el-table-column prop="xmType" label="项目类型" min-width="80" ></el-table-column>
<el-table-column prop="tcusername" label="模板创建人姓名" min-width="80" ></el-table-column>
<el-table-column prop="description" label="项目描述" min-width="80" ></el-table-column> <el-table-column prop="description" label="项目描述" min-width="80" ></el-table-column>
<el-table-column prop="planTotalCost" label="总预算" min-width="80" ></el-table-column> <el-table-column prop="planTotalCost" label="总预算" min-width="80" ></el-table-column>
<el-table-column prop="planNouserAt" label="非人力预算" min-width="80" ></el-table-column> <el-table-column prop="planNouserAt" label="非人力预算" min-width="80" ></el-table-column>
@ -244,7 +243,7 @@
}, },
changeShowInfo(){ changeShowInfo(){
}
},
/**begin 自定义函数请在下面加**/ /**begin 自定义函数请在下面加**/

Loading…
Cancel
Save