From da81f86057095ad504f17af18fd66369cd223520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Sat, 5 Mar 2022 02:46:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/xm/core/xmProject/XmProjectAdd.vue | 98 ++++++++++++++----- src/views/xm/core/xmProject/XmProjectEdit.vue | 81 +++++++++++++-- src/views/xm/core/xmProject/XmProjectMng.vue | 43 ++++---- .../xm/core/xmProject/XmProjectTplMng.vue | 42 ++++---- 4 files changed, 198 insertions(+), 66 deletions(-) diff --git a/src/views/xm/core/xmProject/XmProjectAdd.vue b/src/views/xm/core/xmProject/XmProjectAdd.vue index d3932c3a..a90b78f5 100644 --- a/src/views/xm/core/xmProject/XmProjectAdd.vue +++ b/src/views/xm/core/xmProject/XmProjectAdd.vue @@ -1,6 +1,6 @@ @@ -153,9 +169,9 @@ import { listOption } from '@/api/mdp/meta/itemOption';//下拉框数据查询 import { addXmProject,createProjectCode } from '@/api/xm/core/xmProject'; - import { mapGetters } from 'vuex'; - - import { getGroups } from '@/api/xm/core/xmProjectGroup'; + import { mapGetters } from 'vuex'; + + import UsersSelect from "@/views/mdp/sys/user/UsersSelect"; export default { computed: { @@ -297,25 +313,31 @@ load:{ list: false, add: false, del: false, edit: false },//查询中... addFormRules: { name: [{ - required: true, message: '项目名称不可为空' , trigger: 'blur' + required: true, message: '项目名称不可为空' , trigger: 'change' }], code: [{ - required: true, message: '项目编号不可为空', trigger: 'blur' + required: true, message: '项目代号不可为空', trigger: 'change' }], xmType: [{ - required: true, message: '项目类型不可为空', trigger: 'blur' + required: true, message: '项目类型不可为空', trigger: 'change' }], urgent: [{ - required: true, message: '紧急程度不可为空', trigger: 'blur' + required: true, message: '紧急程度不可为空', trigger: 'change' }], priority: [{ - required: true, message: '优先程度不可为空', trigger: 'blur' + required: true, message: '优先程度不可为空', trigger: 'change' + }], + admUserid: [{ + required: true, message: '项目总控不能为空', trigger: 'change' + }], + pmUserid: [{ + required: true, message: '项目经理不能为空', trigger: 'change' }], }, //编辑界面数据 XmProject xm_project addForm: { - id:'',code:'',name:'',xmType:'',startTime:'',endTime:'',urgent:'',priority:'',description:'',createUserid:'',createUsername:'',createTime:'',assess:'',assessRemarks:'',status:'',branchId:'',planTotalCost:0,bizProcInstId:'',bizFlowState:'',taxRate:0.06,planNouserAt:0,planInnerUserAt:0,planOutUserAt:0,locked:'',baseTime:'',baseRemark:'',baselineId:'',planWorkload:0,totalReceivables:0,budgetMarginRate:0.13,contractAmt:0,planInnerUserPrice:85,planOutUserPrice:100,planOutUserCnt:1,planInnerUserCnt:1,planWorkingHours:0,planInnerUserWorkload:0,planOutUserWorkload:0,budgetCtrl:'0', + id:'',code:'',name:'',xmType:'',startTime:'',endTime:'',urgent:'',priority:'',description:'',createUserid:'',createUsername:'',createTime:'',assess:'',assessRemarks:'',status:'',branchId:'',planTotalCost:0,bizProcInstId:'',bizFlowState:'',taxRate:0.06,planNouserAt:0,planInnerUserAt:0,planOutUserAt:0,locked:'',baseTime:'',baseRemark:'',baselineId:'',planWorkload:0,totalReceivables:0,budgetMarginRate:0.13,contractAmt:0,planInnerUserPrice:85,planOutUserPrice:100,planOutUserCnt:1,planInnerUserCnt:1,planWorkingHours:0,planInnerUserWorkload:0,planOutUserWorkload:0,budgetCtrl:'0',admUserid:'',admUsername:'',pmUserid:'',pmUsername:'',assUserid:'',assUsername:'' }, /**begin 在下面加自定义属性,记得补上面的一个逗号**/ xmProjectGroups:[], @@ -325,6 +347,10 @@ /**begin 在下面加自定义属性,记得补上面的一个逗号**/ dateRanger: [ ], pickerOptions: util.pickerOptions('datarange'), + + currUserType:'', + userSelectVisible:false, + maxTableHeight:300, /**end 在上面加自定义属性**/ }//end return },//end data @@ -380,6 +406,8 @@ this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' }); }).catch( err =>this.load.add=false); }); + }else{ + this.$notify({showClose: true, message: "表单检查不通过,请修改后提交", type:'error'}); } }); }, @@ -446,14 +474,40 @@ } this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' }); }) - } + }, + showUserVisible(userType){ + this.currUserType=userType + this.userSelectVisible=true; + }, + //选择人员 + onUserSelected: function(users) { + this.userSelectVisible = false; + var user={userid:'',username:''}; + if(users && users.length>0){ + user=users[0] + } + + if(this.currUserType=='admUserid'){ + this.addForm.admUserid=user.userid + this.addForm.admUsername=user.username + }else if(this.currUserType=='assUserid'){ + this.addForm.assUserid=user.userid + this.addForm.assUsername=user.username + }else if(this.currUserType=='pmUserid'){ + this.addForm.pmUserid=user.userid + this.addForm.pmUsername=user.username + } + this.currUserType=""; + + }, /**end 在上面加自定义方法**/ },//end method components: { - //在下面添加其它组件 'xm-project-add':XmProjectEdit + UsersSelect, }, - mounted() { - this.addForm.id=sn(); + mounted() { + + this.maxTableHeight=util.calcTableMaxHeight(this.$refs.table.$el); listOption([{categoryId:'all',itemCode:'projectType'},{categoryId:'all',itemCode:'urgencyLevel'},{categoryId:'all',itemCode:'priority'},{categoryId:'all',itemCode:'projectStatus'}] ).then(res=>{ if(res.data.tips.isOk){ this.options['projectType']=res.data.data.projectType diff --git a/src/views/xm/core/xmProject/XmProjectEdit.vue b/src/views/xm/core/xmProject/XmProjectEdit.vue index 3e8210f6..5a4f3a4e 100644 --- a/src/views/xm/core/xmProject/XmProjectEdit.vue +++ b/src/views/xm/core/xmProject/XmProjectEdit.vue @@ -39,7 +39,27 @@ 每条计划实际金额不能大于预算金额;每条计划的预算金额必须大于其关联的任务的实际金额合计。 - + + + + + + + + + + + + + + + + + + + + + 项目重新启动申请 + + + + + @@ -150,6 +175,8 @@ import { getGroups } from '@/api/xm/core/xmProjectGroup'; import html2canvas from 'html2canvas' + import UsersSelect from "@/views/mdp/sys/user/UsersSelect"; + export default { computed: { ...mapGetters([ @@ -296,27 +323,27 @@ if(this.selProject.planWorkingHours!=this.editForm.planWorkingHours){ var distance=this.selProject.planWorkingHours-this.editForm.planWorkingHours var operType=distance>0?"-":"+"; - this.changeTips.push("预计总工期: "+ this.selProject.planWorkingHours+" > " +this.editForm.planWorkingHours+"   "+operType+Math.abs(distance)+"小时"); + this.changeTips.push("预计总工期: "+ this.selProject.planWorkingHours+" > " +this.editForm.planWorkingHours+"   "+operType+Math.abs(distance).toFixed(2)+"小时"); } if(this.selProject.planTotalCost!=this.editForm.planTotalCost){ var distance=this.selProject.planTotalCost-this.editForm.planTotalCost var operType=distance>0?"-":"+"; - this.changeTips.push("预计总成本: "+ this.selProject.planTotalCost+" > " +this.editForm.planTotalCost+"   "+operType+Math.abs(distance)+"元"); + this.changeTips.push("预计总成本: "+ this.selProject.planTotalCost+" > " +this.editForm.planTotalCost+"   "+operType+Math.abs(distance).toFixed(2)+"元"); } if(this.selProject.budgetMarginRate!=this.editForm.budgetMarginRate){ var distance=this.selProject.budgetMarginRate-this.editForm.budgetMarginRate var operType=distance>0?"-":"+"; - this.changeTips.push("毛利率: "+ this.selProject.budgetMarginRate+" > " +this.editForm.budgetMarginRate+"   "+operType+Math.abs(distance)+"%"); + this.changeTips.push("毛利率: "+ this.selProject.budgetMarginRate+" > " +this.editForm.budgetMarginRate+"   "+operType+Math.abs(distance).toFixed(2)+"%"); } if(this.selProject.totalReceivables!=this.editForm.totalReceivables){ var distance=this.selProject.totalReceivables-this.editForm.totalReceivables var operType=distance>0?"-":"+"; - this.changeTips.push("预计总收款: "+ this.selProject.totalReceivables+" > " +this.editForm.totalReceivables+"   "+operType+Math.abs(distance)+"元"); + this.changeTips.push("预计总收款: "+ this.selProject.totalReceivables+" > " +this.editForm.totalReceivables+"   "+operType+Math.abs(distance).toFixed(2)+"元"); } if(this.selProject.contractAmt!=this.editForm.contractAmt){ var distance=this.selProject.contractAmt-this.editForm.contractAmt var operType=distance>0?"-":"+"; - this.changeTips.push("合同金额: "+ this.selProject.contractAmt+" > " +this.editForm.contractAmt+"   "+operType+Math.abs(distance)+"元"); + this.changeTips.push("合同金额: "+ this.selProject.contractAmt+" > " +this.editForm.contractAmt+"   "+operType+Math.abs(distance).toFixed(2)+"元"); } if(this.changeTips.length==0){ @@ -353,7 +380,7 @@ }], code: [{ - required: true, message: '项目编号不可为空', trigger: 'blur' + required: true, message: '项目代号不可为空', trigger: 'blur' }], xmType: [{ required: true, message: '项目类型不可为空', trigger: 'blur' @@ -363,11 +390,17 @@ }], priority: [{ required: true, message: '优先程度不可为空', trigger: 'blur' + }], + admUserid: [{ + required: true, message: '项目总控不能为空', trigger: 'change' + }], + pmUserid: [{ + required: true, message: '项目经理不能为空', trigger: 'change' }], }, //编辑界面数据 XmProject xm_project editForm: { - id:'',code:'',name:'',xmType:'',startTime:'',endTime:'',urgent:'',priority:'',description:'',createUserid:'',createUsername:'',createTime:'',assess:'',assessRemarks:'',status:'',branchId:'',planTotalCost:0,bizProcInstId:'',bizFlowState:'',taxRate:0.06,planNouserAt:0,planInnerUserAt:0,planOutUserAt:0,locked:'',baseTime:'',baseRemark:'',baselineId:'',planWorkload:0,totalReceivables:0,budgetMarginRate:0.13,contractAmt:0,planInnerUserPrice:85,planOutUserPrice:100,planOutUserCnt:1,planInnerUserCnt:1,planWorkingHours:0,planInnerUserWorkload:0,planOutUserWorkload:0,budgetCtrl:'0', + id:'',code:'',name:'',xmType:'',startTime:'',endTime:'',urgent:'',priority:'',description:'',createUserid:'',createUsername:'',createTime:'',assess:'',assessRemarks:'',status:'',branchId:'',planTotalCost:0,bizProcInstId:'',bizFlowState:'',taxRate:0.06,planNouserAt:0,planInnerUserAt:0,planOutUserAt:0,locked:'',baseTime:'',baseRemark:'',baselineId:'',planWorkload:0,totalReceivables:0,budgetMarginRate:0.13,contractAmt:0,planInnerUserPrice:85,planOutUserPrice:100,planOutUserCnt:1,planInnerUserCnt:1,planWorkingHours:0,planInnerUserWorkload:0,planOutUserWorkload:0,budgetCtrl:'0',admUserid:'',admUsername:'',pmUserid:'',pmUsername:'',assUserid:'',assUsername:'' }, /**begin 在下面加自定义属性,记得补上面的一个逗号**/ xmProjectGroups:[], @@ -381,6 +414,7 @@ activateName:'planWorkload', changeTips:[],//变化日志列表 maxTableHeight:300, + currUserType:'', /**end 在上面加自定义属性**/ }//end return },//end data @@ -440,6 +474,8 @@ this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' }); }).catch( err =>this.load.edit=false); }); + }else{ + this.$notify({showClose: true, message: "表单检查不通过,请修改后提交", type:'error'}); } }); }, @@ -672,11 +708,36 @@ btns[i].style.display='' } } - } + }, + showUserVisible(userType){ + this.currUserType=userType + this.userSelectVisible=true; + }, + //选择人员 + onUserSelected: function(users) { + this.userSelectVisible = false; + var user={userid:'',username:''}; + if(users && users.length>0){ + user=users[0] + } + + if(this.currUserType=='admUserid'){ + this.editForm.admUserid=user.userid + this.editForm.admUsername=user.username + }else if(this.currUserType=='assUserid'){ + this.editForm.assUserid=user.userid + this.editForm.assUsername=user.username + }else if(this.currUserType=='pmUserid'){ + this.editForm.pmUserid=user.userid + this.editForm.pmUsername=user.username + } + this.currUserType=""; + + }, /**end 在上面加自定义方法**/ },//end method - components: { html2canvas + components: { html2canvas,UsersSelect, //在下面添加其它组件 'xm-project-add':XmProjectEdit }, mounted() { diff --git a/src/views/xm/core/xmProject/XmProjectMng.vue b/src/views/xm/core/xmProject/XmProjectMng.vue index ad022a44..5f830ac8 100644 --- a/src/views/xm/core/xmProject/XmProjectMng.vue +++ b/src/views/xm/core/xmProject/XmProjectMng.vue @@ -193,10 +193,10 @@ - + - + @@ -485,22 +485,31 @@ this.sels = sels; }, //删除xmProject - handleDel: function (row,index) { - this.$confirm('确认删除该记录吗?', '提示', { - type: 'warning' - }).then(() => { - this.load.del=true; - let params = { id: row.id }; - delXmProject(params).then((res) => { - this.load.del=false; - var tips=res.data.tips; - if(tips.isOk){ - this.pageInfo.count=true; - this.getXmProjects(); - } - this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' }); - }).catch( err => this.load.del=false ); + handleDel: function (row,index) { + this.$prompt('将同步删除计划、组织、任务等,慎重起见,请输入项目代号:'+row.code, '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + }).then(({ value }) => { + if(value==row.code){ + this.load.del=true; + let params = { id: row.id }; + delXmProject(params).then((res) => { + this.load.del=false; + var tips=res.data.tips; + if(tips.isOk){ + this.pageInfo.count=true; + this.getXmProjects(); + } + this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' }); + }).catch( err => this.load.del=false ); + }else{ + this.$notify({showClose: true, message: "项目代号不正确", type: 'error' }); + } + }).catch(() => { + return; }); + + }, //批量删除xmProject batchDel: function () { diff --git a/src/views/xm/core/xmProject/XmProjectTplMng.vue b/src/views/xm/core/xmProject/XmProjectTplMng.vue index 583f7295..58be5f01 100644 --- a/src/views/xm/core/xmProject/XmProjectTplMng.vue +++ b/src/views/xm/core/xmProject/XmProjectTplMng.vue @@ -301,24 +301,32 @@ //选择行xmProject selsChange: function (sels) { this.sels = sels; - }, - //删除xmProject - handleDel: function (row,index) { - this.$confirm('确认删除该记录吗?', '提示', { - type: 'warning' - }).then(() => { - this.load.del=true; - let params = { id: row.id }; - delXmProject(params).then((res) => { - this.load.del=false; - var tips=res.data.tips; - if(tips.isOk){ - this.pageInfo.count=true; - this.getXmProjects(); - } - this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' }); - }).catch( err => this.load.del=false ); + }, + handleDel: function (row,index) { + this.$prompt('将同步删除计划、组织、任务等,慎重起见,请输入项目代号:'+row.code, '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + }).then(({ value }) => { + if(value==row.code){ + this.load.del=true; + let params = { id: row.id }; + delXmProject(params).then((res) => { + this.load.del=false; + var tips=res.data.tips; + if(tips.isOk){ + this.pageInfo.count=true; + this.getXmProjects(); + } + this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' }); + }).catch( err => this.load.del=false ); + }else{ + this.$notify({showClose: true, message: "项目代号不正确", type: 'error' }); + } + }).catch(() => { + return; }); + + }, //批量删除xmProject batchDel: function () {