|
|
|
@ -1,14 +1,5 @@ |
|
|
|
<template> |
|
|
|
<section class="page-container padding"> |
|
|
|
<el-row class="padding"> |
|
|
|
快速导航: |
|
|
|
<el-link type="text" @click="goAnchor('baseInfo')"> 基础信息 </el-link> |
|
|
|
<el-link type="text" @click="goAnchor('planInfo')"> 进度计划 </el-link> |
|
|
|
<el-link type="text" @click="goAnchor('costInfo')"> 工作量与成本 </el-link> |
|
|
|
<el-link type="text" @click="goAnchor('settleInfo')"> 结算信息 </el-link> |
|
|
|
<el-link type="text" @click="goAnchor('menuInfo')"> 需求明细 </el-link> |
|
|
|
<el-link type="text" @click="goAnchor('taskOut')"> 众包 </el-link> |
|
|
|
</el-row> |
|
|
|
<section class="page-container padding"> |
|
|
|
<el-row> |
|
|
|
<el-steps :active="calcTaskStep" finish-status="success" simple> |
|
|
|
<el-step title="发布" description="任务创建成功后即发布"></el-step> |
|
|
|
@ -24,24 +15,29 @@ |
|
|
|
<!--新增界面 XmTask xm_task--> |
|
|
|
<el-form :model="addForm" label-width="100px" :rules="addFormRules" ref="addForm"> |
|
|
|
<el-card class="box-card" header="基础信息" id="baseInfoAdd" shadow="hover"> |
|
|
|
<el-form-item label="类型" prop="ntype"> |
|
|
|
<el-radio :disabled="parentTask&&parentTask.id&&parentTask.ntype==='0'" v-model="addForm.ntype" label="1">计划项</el-radio> |
|
|
|
<el-radio v-model="addForm.ntype" label="0">任务</el-radio> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="名称" prop="name"> |
|
|
|
<el-row> |
|
|
|
<el-col :span="24" style="padding-left:10px;"> |
|
|
|
<el-input v-model="addForm.name" placeholder="名称" ></el-input> |
|
|
|
<el-col :span="24" style="padding-left:10px;"> |
|
|
|
<el-input style="width:100%;" v-model="addForm.name" placeholder="名称" ></el-input> |
|
|
|
<br> |
|
|
|
<el-divider direction="vertical"></el-divider> |
|
|
|
<el-tooltip content="归属项目"><el-tag>{{addForm.projectName}}</el-tag></el-tooltip> |
|
|
|
<el-divider direction="vertical"></el-divider> |
|
|
|
<el-tooltip content="上级" > |
|
|
|
<el-tag v-if="parentTask!=null"><span >{{parentTask.sortLevel}}</span> <span>{{parentTask.name}}</span></el-tag> |
|
|
|
<el-tag v-else>无上级</el-tag> |
|
|
|
</el-tooltip> |
|
|
|
<el-tag v-if="parentTask!=null"><span >{{parentTask.sortLevel}}</span> <span>{{parentTask.name}}</span></el-tag> |
|
|
|
<el-tag v-else>无上级</el-tag> |
|
|
|
</el-tooltip> |
|
|
|
</el-col> |
|
|
|
</el-row> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="排序号" prop="sortLevel"> |
|
|
|
<el-input v-model="addForm.sortLevel" style="width:30%;" placeholder="如1.0或者1.2.3等" ></el-input> <font style="color:red;">如1.0或者1.2.3等</font> |
|
|
|
<el-checkbox v-model="addForm.milestone" :true-label="1" :false-label="0">标记为里程碑</el-checkbox> |
|
|
|
<el-form-item label="序号" prop="sortLevel"> |
|
|
|
<el-input v-model="addForm.sortLevel" style="width:30%;" placeholder="如1.0或者1.2.3等" ></el-input> <el-checkbox v-model="addForm.milestone" :true-label="1" :false-label="0">里程碑</el-checkbox> |
|
|
|
</el-form-item> |
|
|
|
<div v-if="addForm.ntype!='1'"> |
|
|
|
<div> |
|
|
|
<el-form-item label="前置任务"> |
|
|
|
<el-tag v-if="addForm.preTaskid" @close="clearPreTask" closable >{{addForm.preTaskname}}</el-tag> |
|
|
|
<el-button @click.stop="selectTaskVisible=true" >选前置任务</el-button> |
|
|
|
@ -94,48 +90,30 @@ |
|
|
|
:default-time="['00:00:00','23:59:59']" |
|
|
|
:picker-options="pickerOptions" |
|
|
|
></el-date-picker> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="实际时间" prop="actStartTime"> |
|
|
|
<el-date-picker |
|
|
|
v-model="actDateRanger" |
|
|
|
class="hidden-sm-and-down" |
|
|
|
type="daterange" |
|
|
|
align="right" |
|
|
|
unlink-panels |
|
|
|
range-separator="至" |
|
|
|
start-placeholder="实际开始日期" |
|
|
|
end-placeholder="实际完成日期" |
|
|
|
value-format="yyyy-MM-dd HH:mm:ss" |
|
|
|
:default-time="['00:00:00','23:59:59']" |
|
|
|
:picker-options="pickerOptions" |
|
|
|
></el-date-picker> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="实际进度" prop="rate"> |
|
|
|
<el-slider |
|
|
|
v-model="addForm.rate" |
|
|
|
show-input> |
|
|
|
</el-slider> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
</el-form-item> |
|
|
|
</el-card> |
|
|
|
|
|
|
|
<el-card class="box-card" header="工作量、成本" id="costInfoAdd"> |
|
|
|
<el-form-item label="预估工作量" prop="budgetWorkload"> |
|
|
|
<el-input-number v-model="addForm.budgetWorkload" @change="onBudgetWorkloadChange" :precision="2" :step="8" :min="0" placeholder="预计总工作量(人时,不包括下一级)"></el-input-number> <el-tag>人时,{{this.toFixed(addForm.budgetWorkload/8/20)}}人月</el-tag> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="预估金额" prop="taskOut"> |
|
|
|
<el-input-number style="width:200px;" v-model="addForm.budgetWorkload" @change="onBudgetWorkloadChange" :precision="2" :step="8" :min="0" placeholder="预计总工作量(人时,不包括下一级)"></el-input-number> <el-tag>人时,{{this.toFixed(addForm.budgetWorkload/8/20)}}人月</el-tag> |
|
|
|
<br/> |
|
|
|
<el-checkbox v-model="addForm.taskOut" @change="onTaskOutChange" true-label="1" false-label="0">是否为众包任务</el-checkbox> |
|
|
|
<el-input-number v-model="addForm.budgetCost" :precision="2" :step="1000" :min="0" placeholder="预算金额"></el-input-number> 元 |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="实际工作量" prop="actWorkload" shadow="hover"> |
|
|
|
<el-input-number disabled v-model="addForm.actWorkload" :precision="2" :step="8" :min="0" placeholder="实际工作量"></el-input-number> <el-tag>由后台自动计算,无需填写</el-tag> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="实际金额" prop="actCost"> |
|
|
|
<el-input-number disabled v-model="addForm.actCost" :precision="2" :step="1000" :min="0" placeholder="实际金额"></el-input-number> <el-tag>由后台自动计算,无需填写</el-tag> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="预估金额" prop="taskOut"> |
|
|
|
<el-row v-if="addForm.taskOut!=='1'"> |
|
|
|
工时单价 <el-input-number style="width:200px;" v-model="addForm.uniInnerPrice" :precision="2" :step="10" :min="0" placeholder="工时单价"></el-input-number> 元/人时 |
|
|
|
</el-row> |
|
|
|
<el-row v-if="addForm.taskOut==='1'"> |
|
|
|
工时单价 <el-input-number style="width:200px;" v-if="addForm.taskOut==='1'" v-model="addForm.uniOutPrice" :precision="2" :step="10" :min="0" placeholder="外发工时单价"></el-input-number> 元/人时 |
|
|
|
</el-row> |
|
|
|
<el-row> |
|
|
|
预估金额 <el-input-number style="width:200px;" v-model="addForm.budgetCost" :precision="2" :step="100" :min="0" placeholder="预算金额"></el-input-number> 元 |
|
|
|
</el-row> |
|
|
|
</el-form-item> |
|
|
|
</el-card> |
|
|
|
<el-card class="box-card" header="结算信息" id="settleInfoAdd" shadow="hover" v-if="addForm.ntype!='1'"> |
|
|
|
<el-form-item label="是否结算" prop="taskClass"> |
|
|
|
<el-form-item label="" prop="taskClass"> |
|
|
|
<el-checkbox v-model="addForm.taskClass" true-label="1" false-label="0">是否需要结算</el-checkbox> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item v-if="addForm.taskClass=='1'" label="结算方案" prop="settlSchemel"> |
|
|
|
@ -146,11 +124,8 @@ |
|
|
|
</el-card> |
|
|
|
|
|
|
|
<el-card class="box-card" header="众包" id="taskOutAdd" v-if="addForm.ntype!='1'"> |
|
|
|
<el-form-item label="众包配置" prop="taskOut"> |
|
|
|
<el-checkbox v-model="addForm.taskOut" @change="onTaskOutChange" true-label="1" false-label="0">外包任务</el-checkbox> |
|
|
|
<el-checkbox v-model="addForm.toTaskCenter" true-label="1" false-label="0" id="taskOut">发布到互联网任务大厅</el-checkbox> |
|
|
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-checkbox v-model="addForm.toTaskCenter" true-label="1" false-label="0" id="taskOut">发布到互联网任务大厅</el-checkbox> |
|
|
|
<el-form-item label="众包流程" prop="taskOut"> |
|
|
|
<el-steps :active="calcTaskStep" align-center> |
|
|
|
<el-step title="发布" description="任务创建成功后即发布"></el-step> |
|
|
|
@ -168,13 +143,9 @@ |
|
|
|
<el-row class="page-bottom padding"> |
|
|
|
<el-button @click.native="handleCancel">取消</el-button> |
|
|
|
<el-button v-loading="load.add" type="primary" @click.native="addSubmit" :disabled="load.add==true">提交</el-button> |
|
|
|
</el-row> |
|
|
|
|
|
|
|
<!-- <el-drawer append-to-body :title="'技能要求'" :visible.sync="skillVisible" size="80%" append-to-body :close-on-click-modal="false"> |
|
|
|
<xm-skill-mng :visible="skillVisible" :task-id="addForm.id" @cancel="skillVisible=false" @getSkill="getSkill"></xm-skill-mng> |
|
|
|
</el-drawer> --> |
|
|
|
</el-row> |
|
|
|
<el-drawer append-to-body title="选择负责人" :visible.sync="groupUserSelectVisible" size="60%" :close-on-click-modal="false"> |
|
|
|
<xm-project-group-select :visible="groupUserSelectVisible" :sel-project="xmProject" :isSelectSingleUser="1" @user-confirm="groupUserSelectConfirm"></xm-project-group-select> |
|
|
|
<xm-group-select :visible="groupUserSelectVisible" :sel-project="xmProject" :isSelectSingleUser="1" @user-confirm="groupUserSelectConfirm"></xm-group-select> |
|
|
|
</el-drawer> |
|
|
|
<el-drawer append-to-body title="新增技能" :visible.sync="skillVisible" size="60%" :close-on-click-modal="false"> |
|
|
|
<skill-mng :task-skills="taskSkills" :jump="true" @select-confirm="onTaskSkillsSelected"></skill-mng> |
|
|
|
@ -238,26 +209,7 @@ |
|
|
|
'visible':function(visible) { |
|
|
|
this.fileVisible = visible; |
|
|
|
if(visible==true){ |
|
|
|
if(this.parentTask){ |
|
|
|
this.addForm=Object.assign(this.addForm, this.parentTask); |
|
|
|
this.addForm.parentTaskid=this.parentTask.id |
|
|
|
this.addForm.parentTaskname=this.parentTask.name; |
|
|
|
} else{ |
|
|
|
this.addForm.taskType=this.projectPhase.taskType |
|
|
|
} |
|
|
|
this.addForm.projectId=this.xmProject.id |
|
|
|
this.addForm.projectName=this.xmProject.name |
|
|
|
this.addForm.projectPhaseId=this.projectPhase.id |
|
|
|
this.addForm.projectPhaseName=this.projectPhase.phaseName |
|
|
|
if(this.parentTask ){ |
|
|
|
if(this.parentTask.children){ |
|
|
|
this.addForm.sortLevel=this.parentTask.sortLevel+"."+(this.parentTask.children.length+1) |
|
|
|
}else{ |
|
|
|
this.addForm.sortLevel=this.parentTask.sortLevel+"."+1 |
|
|
|
} |
|
|
|
} |
|
|
|
this.addForm.id = sn(); |
|
|
|
//从新打开页面时某些数据需要重新加载,可以在这里添加 |
|
|
|
this.initData(); |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
@ -276,22 +228,22 @@ |
|
|
|
load:{ list: false, edit: false, del: false, add: false },//查询中... |
|
|
|
addFormRules: { |
|
|
|
name: [ |
|
|
|
{ required: true, message: '任务名称不能为空', trigger: 'blur' } |
|
|
|
{ required: true, message: '任务名称不能为空', trigger: 'change' } |
|
|
|
], |
|
|
|
taskState: [ |
|
|
|
{ required: true, message: '请选择任务状态', trigger: 'blur' } |
|
|
|
{ required: true, message: '请选择任务状态', trigger: 'change' } |
|
|
|
], |
|
|
|
taskType: [ |
|
|
|
{ required: true, message: '请选择任务类型', trigger: 'blur' } |
|
|
|
{ required: true, message: '请选择任务类型', trigger: 'change' } |
|
|
|
], |
|
|
|
taskClass: [ |
|
|
|
{ required: true, message: '请选择是否结算', trigger: 'blur' } |
|
|
|
{ required: true, message: '请选择是否结算', trigger: 'change' } |
|
|
|
], |
|
|
|
toTaskCenter: [ |
|
|
|
{ required: true, message: '请选择是否发布', trigger: 'blur' } |
|
|
|
{ required: true, message: '请选择是否发布', trigger: 'change' } |
|
|
|
], |
|
|
|
sortLevel: [ |
|
|
|
{ required: true, message: '排序号不能为空', trigger: 'blur' } |
|
|
|
{ required: true, message: '排序号不能为空', trigger: 'change' } |
|
|
|
], |
|
|
|
// execuser:[{ |
|
|
|
// validator: validateExec, trigger: 'blur' |
|
|
|
@ -332,9 +284,7 @@ |
|
|
|
this.$refs.addForm.validate((valid) => { |
|
|
|
if (valid) { |
|
|
|
this.$confirm('确认提交吗?', '提示', {}).then(() => { |
|
|
|
let params = Object.assign({}, this.addForm); |
|
|
|
params.projectPhaseId=this.projectPhase.id |
|
|
|
params.projectPhaseName=this.projectPhase.phaseName |
|
|
|
let params = Object.assign({}, this.addForm); |
|
|
|
if(this.budgetDateRanger.length>=2){ |
|
|
|
params.startTime=this.budgetDateRanger[0] |
|
|
|
params.endTime=this.budgetDateRanger[1] |
|
|
|
@ -346,13 +296,14 @@ |
|
|
|
addTask(params).then((res) => { |
|
|
|
this.load.add=false |
|
|
|
var tips=res.data.tips; |
|
|
|
if(tips.isOk){ |
|
|
|
//this.$refs['addForm'].resetFields(); |
|
|
|
if(tips.isOk){ |
|
|
|
this.$emit('submit',res.data.data);// @submit="afterAddSubmit" |
|
|
|
} |
|
|
|
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' }); |
|
|
|
} |
|
|
|
}); |
|
|
|
}, |
|
|
|
@ -376,24 +327,15 @@ |
|
|
|
onTaskSkillsSelected(skills) { |
|
|
|
let taskSkill = []; |
|
|
|
skills.forEach(i=>{ |
|
|
|
let obj = { |
|
|
|
taskId: this.addForm.id, |
|
|
|
let obj = { |
|
|
|
taskSkillId: i.skillId, |
|
|
|
taskSkillName: i.skillName, |
|
|
|
skillRemarks: '', |
|
|
|
}; |
|
|
|
taskSkill.push(obj); |
|
|
|
}); |
|
|
|
this.taskSkills = taskSkill; |
|
|
|
batchAddSkill(taskSkill).then((res) => { |
|
|
|
this.load.add=false |
|
|
|
var tips=res.data.tips; |
|
|
|
if(tips.isOk){ |
|
|
|
this.skillVisible = false; |
|
|
|
// this.getXmTasks(); |
|
|
|
} |
|
|
|
this.$notify({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' }); |
|
|
|
}).catch( err => this.load.add=false); |
|
|
|
this.taskSkills = taskSkill; |
|
|
|
this.skillVisible=false; |
|
|
|
}, |
|
|
|
|
|
|
|
getWeekday(first, last) { |
|
|
|
@ -439,20 +381,11 @@ |
|
|
|
this.addForm.budgetCost=this.addForm.budgetWorkload * price |
|
|
|
}, |
|
|
|
onBudgetWorkloadChange(){ |
|
|
|
var price=80; |
|
|
|
if(this.addForm.taskOut=='1'){ |
|
|
|
if( this.projectPhase && this.projectPhase.phaseBudgetOutUserPrice){ |
|
|
|
price=this.projectPhase.phaseBudgetOutUserPrice |
|
|
|
}else if( this.xmProject && this.xmProject.planOutUserPrice){ |
|
|
|
price=this.xmProject.planOutUserPrice |
|
|
|
} |
|
|
|
}else{ |
|
|
|
if( this.projectPhase && this.projectPhase.phaseBudgetInnerUserPrice){ |
|
|
|
price=this.projectPhase.phaseBudgetInnerUserPrice |
|
|
|
}else if( this.xmProject && this.xmProject.planInnerUserPrice){ |
|
|
|
price=this.xmProject.planInnerUserPrice |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var price=this.addForm.uniInnerPrice?this.addForm.uniInnerPrice:80; |
|
|
|
if(this.addForm.taskOut=='1'){ |
|
|
|
price=this.addForm.uniOutPrice? this.addForm.uniOutPrice:80; |
|
|
|
} |
|
|
|
this.addForm.budgetCost=this.addForm.budgetWorkload * price |
|
|
|
}, |
|
|
|
onTaskOutChange(){ |
|
|
|
@ -517,7 +450,37 @@ |
|
|
|
this.groupUserSelectVisible=false; |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
initData(){ |
|
|
|
if(this.parentTask){ |
|
|
|
this.addForm=Object.assign(this.addForm, this.parentTask); |
|
|
|
this.addForm.parentTaskid=this.parentTask.id |
|
|
|
this.addForm.parentTaskname=this.parentTask.name; |
|
|
|
this.addForm.taskType=this.parentTask.taskType |
|
|
|
this.addForm.planType=this.parentTask.planType |
|
|
|
} |
|
|
|
if(this.xmProject){ |
|
|
|
this.addForm.projectId=this.xmProject.id |
|
|
|
this.addForm.projectName=this.xmProject.name |
|
|
|
} |
|
|
|
|
|
|
|
if(this.parentTask ){ |
|
|
|
if(this.parentTask.childrenCnt){ |
|
|
|
this.addForm.sortLevel=this.parentTask.sortLevel+"."+(this.parentTask.childrenCnt+1) |
|
|
|
}else{ |
|
|
|
this.addForm.sortLevel=this.parentTask.sortLevel+"."+1 |
|
|
|
} |
|
|
|
} |
|
|
|
if(!this.addForm.uniInnerPrice){ |
|
|
|
this.addForm.uniInnerPrice=80 |
|
|
|
} |
|
|
|
if(this.addForm.taskOut!='1'){ |
|
|
|
this.addForm.taskOut='0' |
|
|
|
} |
|
|
|
if(!this.addForm.uniOutPrice){ |
|
|
|
this.addForm.uniOutPrice=100 |
|
|
|
} |
|
|
|
this.addForm.id=null; |
|
|
|
}, |
|
|
|
toMenu(){ |
|
|
|
this.menuDetailVisible=true |
|
|
|
}, |
|
|
|
@ -527,37 +490,9 @@ |
|
|
|
skillMng,xmMenuSelect,XmTaskList,XmGroupSelect |
|
|
|
//在下面添加其它组件 'xm-task-edit':XmTaskEdit |
|
|
|
}, |
|
|
|
mounted() { |
|
|
|
console.log("taskAdd_mount"); |
|
|
|
if(this.parentTask){ |
|
|
|
this.addForm=Object.assign(this.addForm, this.parentTask); |
|
|
|
this.addForm.parentTaskid=this.parentTask.id |
|
|
|
this.addForm.parentTaskname=this.parentTask.name; |
|
|
|
this.addForm.taskType=this.parentTask.taskType |
|
|
|
this.addForm.planType=this.parentTask.planType |
|
|
|
}else{ |
|
|
|
if(this.projectPhase){ |
|
|
|
this.addForm.taskType=this.projectPhase.taskType |
|
|
|
} |
|
|
|
} |
|
|
|
if(this.xmProject){ |
|
|
|
this.addForm.projectId=this.xmProject.id |
|
|
|
this.addForm.projectName=this.xmProject.name |
|
|
|
} |
|
|
|
if(this.projectPhase){ |
|
|
|
this.addForm.projectPhaseId=this.projectPhase.id |
|
|
|
this.addForm.projectPhaseName=this.projectPhase.phaseName |
|
|
|
} |
|
|
|
|
|
|
|
if(this.parentTask ){ |
|
|
|
if(this.parentTask.childrenCnt){ |
|
|
|
this.addForm.sortLevel=this.parentTask.sortLevel+"."+(this.parentTask.childrenCnt.length+1) |
|
|
|
}else{ |
|
|
|
this.addForm.sortLevel=this.parentTask.sortLevel+"."+1 |
|
|
|
} |
|
|
|
} |
|
|
|
this.addForm.id = sn(); |
|
|
|
listOption([{categoryId:'all',itemCode:'planType'},{categoryId:'all',itemCode:'taskType'},{categoryId:'all',itemCode:'urgencyLevel'},{categoryId:'all',itemCode:'priority'},{categoryId:'all',itemCode:'xmTaskSettleSchemel'}]).then(res=>{ |
|
|
|
mounted() { |
|
|
|
this.initData(); |
|
|
|
listOption([{categoryId:'all',itemCode:'planType'},{categoryId:'all',itemCode:'taskType'},{categoryId:'all',itemCode:'urgencyLevel'},{categoryId:'all',itemCode:'priority'},{categoryId:'all',itemCode:'xmTaskSettleSchemel'}]).then(res=>{ |
|
|
|
this.options=res.data.data; |
|
|
|
}) |
|
|
|
/**在下面写其它函数***/ |
|
|
|
|