7 changed files with 925 additions and 76 deletions
-
2src/api/xm/core/xmTaskExecuser.js
-
1src/router/routes_xm.js
-
2src/views/xm/core/xmTask/XmTaskEdit.vue
-
2src/views/xm/core/xmTask/XmTaskMng.vue
-
764src/views/xm/core/xmTaskExecuser/XmTaskExecuserForTask.vue
-
227src/views/xm/core/xmTaskExecuser/XmTaskExecuserMng.vue
-
3src/views/xm/core/xmTaskWorkload/XmTaskWorkloadEdit.vue
@ -0,0 +1,764 @@ |
|||||
|
<template> |
||||
|
<section> |
||||
|
<div class="exec-navbar"> |
||||
|
<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="searchXmTaskExecusers">查询</el-button> |
||||
|
<el-button type="primary" @click="toJoin">我要加入</el-button> |
||||
|
<el-button type="primary" @click="showAdd">邀请他人加入</el-button> |
||||
|
<!-- <el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button> --> |
||||
|
</div> |
||||
|
<el-row class="page-main "> |
||||
|
<!--列表 XmTaskExecuser xm_task_execuser--> |
||||
|
<el-table ref="table" :height="tableHeight" :data="xmTaskExecusers" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;"> |
||||
|
<el-table-column type="expand"> |
||||
|
<template slot-scope="props"> |
||||
|
<el-form label-position="left" class="demo-table-expand"> |
||||
|
<el-form-item label="报价"> |
||||
|
工作量:<span>{{ props.row.quoteWorkload }} 人时</span> 金额:<span>{{ props.row.quoteAmount }}元</span> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="报价工期"> |
||||
|
<span>{{ props.row.quoteWeekday }} 天 :{{props.row.quoteStartTime }}~{{props.row.quoteEndTime}}</span> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="匹配指数"> |
||||
|
<span>{{ props.row.matchScore }}</span> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="技能说明"> |
||||
|
<span>{{ props.row.skillRemark }}</span> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="备注说明"> |
||||
|
<span>{{ props.row.remarks }}</span> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="操作"> |
||||
|
<!--结算状态0未结算1已部分结算2无需结算4已申请结算5结算失败6已全部结算--> |
||||
|
<el-button type="primary" v-if="props.row.status=='7' " @click="becomeCandidate(props.row)">成为候选人</el-button> |
||||
|
<el-button type="danger" v-if="props.row.status=='7' " @click="handleDel(props.row)">删除</el-button> |
||||
|
<el-button type="warning" v-if="props.row.status=='0'" @click="showQuotePrice(props.row)">修改报价信息</el-button> |
||||
|
<el-button type="primary" v-if="props.row.status=='0'" @click="execute(props.row)">成为执行人</el-button> |
||||
|
<el-button type="warning" v-if="props.row.status!='7' " @click="leave(props.row)">离开任务</el-button> |
||||
|
|
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="username" label="姓名" min-width="300" > |
||||
|
<template slot-scope="scope"> |
||||
|
<div> |
||||
|
{{scope.row.username}} <el-tag type="info">{{scope.row.quoteStartTime }}~{{scope.row.quoteEndTime}}</el-tag> <el-tooltip content="报价金额"><el-tag type="danger">{{scope.row.quoteAmount}}元</el-tag></el-tooltip> |
||||
|
<el-popover trigger="hover" |
||||
|
width="400" > |
||||
|
<el-row> |
||||
|
<!--结算状态0未结算1已部分结算2无需结算4已申请结算5结算失败6已全部结算--> |
||||
|
<el-button type="primary" v-if="scope.row.status=='7' " @click="becomeCandidate(scope.row)">成为候选人</el-button> |
||||
|
<el-button type="danger" v-if="scope.row.status=='7' " @click="handleDel(scope.row)">删除</el-button> |
||||
|
<el-button type="warning" v-if="scope.row.status=='0'" @click="showQuotePrice(scope.row)">修改报价信息</el-button> |
||||
|
<el-button type="primary" v-if="scope.row.status=='0'" @click="execute(scope.row)">成为执行人</el-button> |
||||
|
<el-button type="warning" v-if="scope.row.status!='7' " @click="leave(scope.row)">离开任务</el-button> |
||||
|
</el-row> |
||||
|
<font slot="reference"> |
||||
|
<el-link type="primary" v-if="scope.row.status=='0'">候选中({{formatToDoByStatus(scope.row)}})</el-link> |
||||
|
<el-link type="success" v-else-if="scope.row.status=='1'">执行中({{formatToDoByStatus(scope.row)}})</el-link> |
||||
|
<el-link type="info" v-else-if="scope.row.status=='7'">已放弃任务({{formatToDoByStatus(scope.row)}})</el-link> |
||||
|
<el-link type="danger" v-else-if="scope.row.status=='8'">黑名单({{formatToDoByStatus(scope.row)}})</el-link> |
||||
|
</font> |
||||
|
|
||||
|
</el-popover> |
||||
|
</div> |
||||
|
</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-drawer append-to-body title="报价" :visible.sync="quotePriceVisible" size="60%" :close-on-click-modal="false"> |
||||
|
<el-form :model="quotePriceForm" label-width="100px" ref="quotePriceForm"> |
||||
|
<el-form-item label="候选人名称"> |
||||
|
<span>{{ quotePriceForm.username }}</span> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="报价工期" prop="quoteWeekday"> |
||||
|
<div> |
||||
|
<el-input v-model="quotePriceForm.quoteWeekday" style="width:30%;" type="number" placeholder="报价工期(不包括周六日)" ></el-input>工作日 |
||||
|
<el-date-picker |
||||
|
v-model="quoteDateRanger" |
||||
|
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> |
||||
|
</div> |
||||
|
<el-tag>原来{{editForm.quoteWeekday}},任务要求{{xmTask.startTime}}~{{xmTask.endTime}}</el-tag> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="报价工作量" prop="quoteWorkload"> |
||||
|
<el-input v-model="quotePriceForm.quoteWorkload" type="number" placeholder="报价工作量(人时)" ></el-input> |
||||
|
<el-tag>原来{{editForm.quoteWorkload}},任务预估{{xmTask.budgetWorkload}}</el-tag> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="报价金额" prop="quoteAmount"> |
||||
|
<el-input v-model="quotePriceForm.quoteAmount" type="number" placeholder="报价金额" ></el-input> |
||||
|
<el-tag>原来{{editForm.quoteAmount}},任务预算{{xmTask.budgetCost}}</el-tag> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="擅长技能" prop="skillRemark"> |
||||
|
<el-input type="textarea" :row="3" v-model="quotePriceForm.skillRemark" placeholder="擅长技能" ></el-input> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button @click.native="quotePriceVisible=false">取消</el-button> |
||||
|
<el-button v-loading="load.edit" @click.native="fillTaskBudgetInfoToQuotePriceForm" :disabled="load.edit==true">按任务预算填充</el-button> |
||||
|
<el-button v-loading="load.edit" type="primary" @click.native="handleQuotePrice" :disabled="load.edit==true">提交</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</el-drawer> |
||||
|
|
||||
|
<!--编辑 XmTaskExecuser xm_task_execuser界面--> |
||||
|
<el-drawer append-to-body title="编辑任务执行人" :visible.sync="editFormVisible" size="50%" :close-on-click-modal="false"> |
||||
|
<xm-task-execuser-edit :exec-user-list="xmTaskExecusers" :xm-task="xmTask" :xm-task-execuser="editForm" :visible="editFormVisible" @cancel="editFormVisible=false" @submit="afterEditSubmit"></xm-task-execuser-edit> |
||||
|
</el-drawer> |
||||
|
|
||||
|
<!--新增 XmTaskExecuser xm_task_execuser界面--> |
||||
|
<el-drawer append-to-body title="新增任务执行人" :visible.sync="addFormVisible" size="50%" :close-on-click-modal="false"> |
||||
|
<xm-task-execuser-add :exec-user-list="xmTaskExecusers" :xm-task="xmTask" :execuser-add-type="execuserAddType" :xm-task-execuser="addForm" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-task-execuser-add> |
||||
|
</el-drawer> |
||||
|
</el-row> |
||||
|
</section> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import util from '@/common/js/util';//全局公共库 |
||||
|
import config from "@/common/config"; //全局公共库 |
||||
|
|
||||
|
//import Sticky from '@/components/Sticky' // 粘性header组件 |
||||
|
import { initSimpleDicts } from '@/api/mdp/meta/item';//下拉框数据查询 |
||||
|
import { listXmTaskExecuser,editXmTaskExecuser,leaveTask,beExecutor,settleExec, delXmTaskExecuser, batchDelXmTaskExecuser,quotePrice,becomeCandidate,toTest,testSuccess,testFail } from '@/api/xm/core/xmTaskExecuser'; |
||||
|
import XmTaskExecuserAdd from './XmTaskExecuserAdd';//新增界面 |
||||
|
import XmTaskExecuserEdit from './XmTaskExecuserEdit';//修改界面 |
||||
|
import XmProjectMCostUserList from '../xmProjectMCostUser/XmProjectMCostUserList'; |
||||
|
import { mapGetters } from 'vuex' |
||||
|
import html2canvas from 'html2canvas' |
||||
|
import { uploadBase64 } from '@/api/mdp/arc/image'; |
||||
|
|
||||
|
export default { |
||||
|
computed: { |
||||
|
...mapGetters([ |
||||
|
'userInfo','roles' |
||||
|
]), |
||||
|
}, |
||||
|
props: ["visible","xmTask","isMy"], |
||||
|
watch: { |
||||
|
'visible': function(val) { |
||||
|
if(val == true){ |
||||
|
console.log("visible"); |
||||
|
this.getXmTaskExecusers(); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
filters: { |
||||
|
key: '' |
||||
|
}, |
||||
|
xmTaskExecusers: [],//查询结果 |
||||
|
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:{ |
||||
|
projectTaskExecuserStatus:[], |
||||
|
projectTaskSettleStatus:[], |
||||
|
},//下拉选择框的所有静态数据 params=[{categoryId:'0001',itemCode:'sex'}] 返回结果 {'sex':[{optionValue:'1',optionName:'男',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'女',seqOrder:'2',fp:'',isDefault:'0'}]} |
||||
|
|
||||
|
addFormVisible: false,//新增xmTaskExecuser界面是否显示 |
||||
|
//新增xmTaskExecuser界面初始化数据 |
||||
|
addForm: { |
||||
|
createTime:'',id:'',taskId:'',userid:'',startTime:'',endTime:'',status:'',remarks:'',settleAmount:'',settleWorkload:'',settleStatus:'',settleTime:'',createUserid:'',createUsername:'',username:'',matchScore:'',quoteWeekday:'',quoteAmount:'',quoteTime:'',bizProcInstId:'',bizFlowState:'',projectId:'',phaseId:'',skillRemark:'',quoteWorkload:'',quoteStartTime:'',quoteEndTime:'',branchId:'',projectPhaseName:'',taskName:'' |
||||
|
}, |
||||
|
|
||||
|
editFormVisible: false,//编辑界面是否显示 |
||||
|
//编辑xmTaskExecuser界面初始化数据 |
||||
|
editForm: { |
||||
|
createTime:'',id:'',taskId:'',userid:'',startTime:'',endTime:'',status:'',remarks:'',settleAmount:'',settleWorkload:'',settleStatus:'',settleTime:'',createUserid:'',createUsername:'',username:'',matchScore:'',quoteWeekday:'',quoteAmount:'',quoteTime:'',bizProcInstId:'',bizFlowState:'',projectId:'',phaseId:'',skillRemark:'',quoteWorkload:'',quoteStartTime:'',quoteEndTime:'',branchId:'',projectPhaseName:'',taskName:'' |
||||
|
}, |
||||
|
/**begin 自定义属性请在下面加 请加备注**/ |
||||
|
|
||||
|
settleVisible: false, |
||||
|
settleForm: { |
||||
|
settleAmount: '',settleWorkload: '', settleStatus: '', |
||||
|
}, |
||||
|
settleListVisible:false, |
||||
|
quotePriceForm: { |
||||
|
quoteAmount: '',quoteWorkload: '', skillRemark: '',quoteStartTime:'',quoteEndTime:'',id:'',userid:'',usernane:'',taskId:'', |
||||
|
}, |
||||
|
quotePriceVisible:false, |
||||
|
readyAdd: [], |
||||
|
quoteDateRanger: [ |
||||
|
], |
||||
|
execuserAddType:'add',//add为新增 join为当前登陆者加入 |
||||
|
pickerOptions: util.pickerOptions('datarange'), |
||||
|
tableHeight:300, |
||||
|
/**end 自定义属性请在上面加 请加备注**/ |
||||
|
} |
||||
|
},//end data |
||||
|
methods: { |
||||
|
handleSizeChange(pageSize) { |
||||
|
this.pageInfo.pageSize=pageSize; |
||||
|
this.getXmTaskExecusers(); |
||||
|
}, |
||||
|
handleCurrentChange(pageNum) { |
||||
|
this.pageInfo.pageNum = pageNum; |
||||
|
this.getXmTaskExecusers(); |
||||
|
}, |
||||
|
// 表格排序 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.getXmTaskExecusers(); |
||||
|
}, |
||||
|
searchXmTaskExecusers(){ |
||||
|
this.pageInfo.count=true; |
||||
|
this.getXmTaskExecusers(); |
||||
|
}, |
||||
|
//获取列表 XmTaskExecuser xm_task_execuser |
||||
|
getXmTaskExecusers() { |
||||
|
let params = { |
||||
|
pageSize: this.pageInfo.pageSize, |
||||
|
pageNum: this.pageInfo.pageNum, |
||||
|
total: this.pageInfo.total, |
||||
|
count:this.pageInfo.count |
||||
|
}; |
||||
|
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.filters.key!==""){ |
||||
|
params.fuzzy = '%'+this.filters.key+'%'; |
||||
|
//params.xxx=this.filters.key |
||||
|
}else{ |
||||
|
//params.xxx=xxxxx |
||||
|
} |
||||
|
if(this.isMy=='1'){ |
||||
|
params.isMy='1' |
||||
|
} |
||||
|
this.load.list = true; |
||||
|
params.taskId = this.xmTask.id; |
||||
|
params.projectId=this.xmTask.projectId |
||||
|
if(this.isMy=='1'){ |
||||
|
params.userid=this.userInfo.userid |
||||
|
} |
||||
|
listXmTaskExecuser(params).then((res) => { |
||||
|
var tips=res.data.tips; |
||||
|
if(tips.isOk){ |
||||
|
this.pageInfo.total = res.data.total; |
||||
|
this.pageInfo.count=false; |
||||
|
this.xmTaskExecusers = res.data.data; |
||||
|
this.$emit("loadExecUserList",this.xmTaskExecusers); |
||||
|
}else{ |
||||
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: 'error' }); |
||||
|
} |
||||
|
this.load.list = false; |
||||
|
}).catch( err => this.load.list = false ); |
||||
|
}, |
||||
|
|
||||
|
//显示编辑界面 XmTaskExecuser xm_task_execuser |
||||
|
showEdit: function ( row,index ) { |
||||
|
this.editFormVisible = true; |
||||
|
this.editForm = Object.assign({}, row); |
||||
|
}, |
||||
|
//显示新增界面 XmTaskExecuser xm_task_execuser |
||||
|
showAdd: function () { |
||||
|
this.execuserAddType=""; |
||||
|
this.addFormVisible = true; |
||||
|
|
||||
|
//this.addForm=Object.assign({}, this.editForm); |
||||
|
}, |
||||
|
toJoin(){ |
||||
|
this.execuserAddType="join" |
||||
|
this.addFormVisible = true; |
||||
|
}, |
||||
|
getWeekday(first, last) { |
||||
|
//计算工作日方法:遍历这两个日期区间的每一个日期,获取他的getDay() |
||||
|
|
||||
|
//分别获取first和last的毫秒数(时间戳) |
||||
|
first = first.getTime(); |
||||
|
last = last.getTime(); |
||||
|
|
||||
|
var count = 0; |
||||
|
for (var i = first; i <= last; i += 24 * 3600 * 1000) { |
||||
|
var d = new Date(i); |
||||
|
if (d.getDay() >= 1 && d.getDay() <= 5) { |
||||
|
count++; |
||||
|
} |
||||
|
} |
||||
|
return count; |
||||
|
}, |
||||
|
showQuotePrice(row){ |
||||
|
this.editForm=row |
||||
|
this.quotePriceForm=Object.assign({},row); |
||||
|
this.quoteDateRanger=[]; |
||||
|
this.quoteDateRanger.push(this.quotePriceForm.quoteStartTime); |
||||
|
this.quoteDateRanger.push(this.quotePriceForm.quoteEndTime); |
||||
|
this.quotePriceVisible=true; |
||||
|
}, |
||||
|
afterAddSubmit(){ |
||||
|
this.addFormVisible=false; |
||||
|
this.pageInfo.count=true; |
||||
|
this.$emit("after-add-submit",this.addForm); |
||||
|
|
||||
|
this.getXmTaskExecusers(); |
||||
|
}, |
||||
|
afterEditSubmit(){ |
||||
|
this.editFormVisible=false; |
||||
|
this.getXmTaskExecusers(); |
||||
|
this.$emit("after-edit-submit",this.editForm); |
||||
|
}, |
||||
|
afterDeleteSubmit(){ |
||||
|
this.getXmTaskExecusers(); |
||||
|
this.$emit("after-delete-submit"); |
||||
|
}, |
||||
|
//选择行xmTaskExecuser |
||||
|
selsChange: function (sels) { |
||||
|
this.sels = sels; |
||||
|
}, |
||||
|
//删除xmTaskExecuser |
||||
|
handleDel: function (row,index) { |
||||
|
this.$confirm('确认删除该记录吗?', '提示', { |
||||
|
type: 'warning' |
||||
|
}).then(() => { |
||||
|
this.load.del=true; |
||||
|
let params = row; |
||||
|
params.taskName=this.xmTask.name; |
||||
|
delXmTaskExecuser(params).then((res) => { |
||||
|
this.load.del=false; |
||||
|
var tips=res.data.tips; |
||||
|
if(tips.isOk){ |
||||
|
this.pageInfo.count=true; |
||||
|
this.afterDeleteSubmit(); |
||||
|
} |
||||
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' }); |
||||
|
}).catch( err => this.load.del=false ); |
||||
|
}); |
||||
|
}, |
||||
|
//批量删除xmTaskExecuser |
||||
|
batchDel: function () { |
||||
|
this.$confirm('确认删除选中记录吗?', '提示', { |
||||
|
type: 'warning' |
||||
|
}).then(() => { |
||||
|
this.load.del=true; |
||||
|
batchDelXmTaskExecuser(this.sels).then((res) => { |
||||
|
this.load.del=false; |
||||
|
var tips=res.data.tips; |
||||
|
if( tips.isOk ){ |
||||
|
this.pageInfo.count=true; |
||||
|
this.afterDeleteSubmit(); |
||||
|
} |
||||
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error'}); |
||||
|
}).catch( err => this.load.del=false ); |
||||
|
}); |
||||
|
}, |
||||
|
rowClick: function(row, event, column){ |
||||
|
this.editForm=row; |
||||
|
this.$emit('row-click',row, event, column);// @row-click="rowClick" |
||||
|
}, |
||||
|
/**begin 自定义函数请在下面加**/ |
||||
|
|
||||
|
checkSelectable(row,index){ |
||||
|
return row.status != 2; |
||||
|
}, |
||||
|
leave(row) { |
||||
|
row.taskName=this.xmTask.name |
||||
|
var selExec = [row].filter(i=>i.status !="7"); |
||||
|
if(selExec.length > 0){ |
||||
|
this.$confirm('确定离开任务吗?', '提示', {}).then(() => { |
||||
|
this.load.edit=true; |
||||
|
leaveTask(selExec).then((res) => { |
||||
|
this.load.edit=false |
||||
|
var tips=res.data.tips; |
||||
|
if(tips.isOk){ |
||||
|
this.afterEditSubmit(); |
||||
|
} |
||||
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' }); |
||||
|
}).catch( err =>this.load.edit=false); |
||||
|
}); |
||||
|
} |
||||
|
}, |
||||
|
execute(row) { |
||||
|
row.taskName=this.xmTask.name |
||||
|
if( row && row.status=="0"){ |
||||
|
this.$confirm('确定变更为执行人吗?', '提示', {}).then(() => { |
||||
|
this.load.edit=true; |
||||
|
beExecutor(row).then((res) => { |
||||
|
this.load.edit=false |
||||
|
var tips=res.data.tips; |
||||
|
if(tips.isOk){ |
||||
|
this.afterEditSubmit(); |
||||
|
} |
||||
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' }); |
||||
|
}).catch( err =>this.load.edit=false); |
||||
|
}); |
||||
|
}else if(row.status=="1"){ |
||||
|
this.$notify.error("已是执行人,无需变更"); |
||||
|
}else if(row.status=="7"){ |
||||
|
this.$notify.error("已离开任务,不允许变更执行人"); |
||||
|
}else if(row.status=="8"){ |
||||
|
this.$notify.error("黑名单,不允许参与该任务"); |
||||
|
}else{ |
||||
|
this.$notify.error("已是执行人,无需变更"); |
||||
|
} |
||||
|
}, |
||||
|
settle(row) { |
||||
|
this.editForm=row |
||||
|
this.settleVisible = true; |
||||
|
}, |
||||
|
|
||||
|
handleSettle() { |
||||
|
var selExec=this.sels; |
||||
|
selExec.forEach(l=>{ |
||||
|
l = Object.assign(l,this.settleForm); |
||||
|
}); |
||||
|
this.$confirm('确定结算吗?', '提示', {}).then(() => { |
||||
|
this.load.edit=true; |
||||
|
settleExec(selExec).then((res) => { |
||||
|
this.load.edit=false |
||||
|
var tips=res.data.tips; |
||||
|
if(tips.isOk){ |
||||
|
this.settleVisible = false; |
||||
|
this.$refs['settleForm'].resetFields(); |
||||
|
this.afterEditSubmit(); |
||||
|
} |
||||
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' }); |
||||
|
}).catch( err =>this.load.edit=false); |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
handleQuotePrice() { |
||||
|
if(this.quoteDateRanger.length==2){ |
||||
|
this.quotePriceForm.quoteStartTime=this.quoteDateRanger[0] |
||||
|
this.quotePriceForm.quoteEndTime=this.quoteDateRanger[1] |
||||
|
} |
||||
|
this.$confirm('确定提交报价吗?', '提示', {}).then(() => { |
||||
|
this.load.edit=true; |
||||
|
quotePrice(this.quotePriceForm).then((res) => { |
||||
|
this.load.edit=false |
||||
|
var tips=res.data.tips; |
||||
|
if(tips.isOk){ |
||||
|
this.quotePriceVisible = false; |
||||
|
this.afterEditSubmit(); |
||||
|
} |
||||
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' }); |
||||
|
}).catch( err =>this.load.edit=false); |
||||
|
}); |
||||
|
}, |
||||
|
fillTaskBudgetInfoToQuotePriceForm(){ |
||||
|
this.quotePriceForm.quoteAmount=this.xmTask.budgetCost |
||||
|
this.quotePriceForm.quoteWorkload=this.xmTask.budgetWorkload |
||||
|
this.quotePriceForm.quoteStartTime=this.xmTask.startTime |
||||
|
this.quotePriceForm.quoteEndTime=this.xmTask.endTime |
||||
|
this.quoteDateRanger=[]; |
||||
|
this.quoteDateRanger.push(this.quotePriceForm.quoteStartTime); |
||||
|
this.quoteDateRanger.push(this.quotePriceForm.quoteEndTime); |
||||
|
if(!this.quotePriceForm.quoteWeekday){ |
||||
|
this.quotePriceForm.quoteWeekday=this.getWeekday(new Date(this.quotePriceForm.quoteStartTime),new Date(this.quotePriceForm.quoteEndTime)); |
||||
|
} |
||||
|
|
||||
|
}, |
||||
|
fillQuotePriceToSettleForm(){ |
||||
|
this.settleForm.settleAmount=this.editForm.quoteAmount |
||||
|
this.settleForm.settleWorkload=this.editForm.quoteWorkload |
||||
|
}, |
||||
|
handleSettleCancel() { |
||||
|
this.settleVisible = false; |
||||
|
this.$refs['settleForm'].resetFields(); |
||||
|
}, |
||||
|
formatterOption: function(row,column,cellValue, index){ |
||||
|
var columnName=column.property; |
||||
|
var key=""; |
||||
|
if(columnName=='status'){ |
||||
|
key="projectTaskExecuserStatus" |
||||
|
}else if(columnName=='settleStatus'){ |
||||
|
key="projectTaskSettleStatus" |
||||
|
}else{ |
||||
|
return cellValue |
||||
|
} |
||||
|
if(this.dicts[key]==undefined || this.dicts[key]==null || this.dicts[key].length==0 ){ |
||||
|
return cellValue; |
||||
|
} |
||||
|
var list=this.dicts[key].filter(i=>i.id==cellValue) |
||||
|
if(list.length>0){ |
||||
|
return list[0].name |
||||
|
}else{ |
||||
|
return cellValue; |
||||
|
} |
||||
|
|
||||
|
}, |
||||
|
toAcceptance:function(){ |
||||
|
|
||||
|
}, |
||||
|
toTest:function(row){ |
||||
|
var params=row; |
||||
|
toTest(params).then(res=>{ |
||||
|
var tips = res.data.tips; |
||||
|
if(tips.isOk){ |
||||
|
this.getXmTaskExecusers(); |
||||
|
} |
||||
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' }); |
||||
|
|
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
testSuccess:function(row){ |
||||
|
var params=row; |
||||
|
testSuccess(params).then(res=>{ |
||||
|
var tips = res.data.tips; |
||||
|
if(tips.isOk){ |
||||
|
this.getXmTaskExecusers(); |
||||
|
} |
||||
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' }); |
||||
|
|
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
testFail:function(row){ |
||||
|
var params=row; |
||||
|
testFail(params).then(res=>{ |
||||
|
var tips = res.data.tips; |
||||
|
if(tips.isOk){ |
||||
|
this.getXmTaskExecusers(); |
||||
|
} |
||||
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' }); |
||||
|
|
||||
|
}) |
||||
|
}, |
||||
|
showSettleList: function(row){ |
||||
|
this.editForm=row; |
||||
|
this.settleListVisible=true; |
||||
|
}, |
||||
|
showApprovaInfo:function(row){ |
||||
|
var msgFields=[]; |
||||
|
if(row.mainTitle!=null && row.mainTitle!=""){ |
||||
|
msgFields.push("流程【"+row.mainTitle+"】"); |
||||
|
} |
||||
|
|
||||
|
if(row.taskName!=null && row.taskName!=""){ |
||||
|
msgFields.push("当前环节【"+row.taskName+"】"); |
||||
|
} |
||||
|
|
||||
|
if(row.assigneeName!=null && row.assigneeName!=""){ |
||||
|
msgFields.push("执行人【"+row.assigneeName+"】"); |
||||
|
} |
||||
|
|
||||
|
if(row.commentMsg!=null && row.commentMsg!=""){ |
||||
|
msgFields.push("审批意见【"+row.commentMsg+"】"); |
||||
|
} |
||||
|
var msg=msgFields.join(","); |
||||
|
return msg; |
||||
|
}, |
||||
|
sendToProcessApprova:function(row,bizKey){ |
||||
|
// 传过来的参数格式 |
||||
|
if(this.settleForm.settleAmount==0||this.settleForm.settleAmount==''){ |
||||
|
this.$notify.error("结算金额为空/0,不允许发审"); |
||||
|
return; |
||||
|
} |
||||
|
if(row.flowState=='1'){ |
||||
|
this.$notify.error("审核中,不允许重复发审"); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
var taskName=this.xmTask.name |
||||
|
var projectId=this.xmTask.projectId |
||||
|
var projectName=this.xmTask.projectName |
||||
|
var taskId=this.xmTask.id |
||||
|
var branchId=this.userInfo.branchId |
||||
|
|
||||
|
let extVars={projectId:projectId,taskId,taskExecuserId:row.id} |
||||
|
let jsonExtVars=JSON.stringify(extVars); |
||||
|
|
||||
|
var currDomain=window.location.protocol+"//"+window.location.host; |
||||
|
var fullPath=this.$route.fullPath; |
||||
|
var bizUrl=currDomain+'/#'+fullPath+'?extVars='+jsonExtVars |
||||
|
|
||||
|
|
||||
|
let params={ |
||||
|
bizKey:bizKey, |
||||
|
bizUrl:bizUrl, |
||||
|
resUrl:'', |
||||
|
bizPkid:row.id, |
||||
|
bizParentPkid:projectId, |
||||
|
mainContext:'', |
||||
|
extVars:extVars, |
||||
|
flowVars:{ |
||||
|
subscribeTaskEvent:'TASK_COMPLETED,TASK_CREATED', |
||||
|
data:{ |
||||
|
projectId:projectId, |
||||
|
taskId:taskId, |
||||
|
userid:row.userid, |
||||
|
settleAmount:this.settleForm.settleAmount, |
||||
|
settleWorkload:this.settleForm.settleWorkload, |
||||
|
id:row.id, |
||||
|
branchId:branchId, |
||||
|
username:row.username |
||||
|
} |
||||
|
}, |
||||
|
} |
||||
|
|
||||
|
if(bizKey=="xm_task_execuser_settle_approva"){ |
||||
|
//延期审核 |
||||
|
params.mainTitle='['+row.username+']发起关于任务【'+projectName+'-'+taskName+"】结算申请"; |
||||
|
params.mainContext='项目编号:'+projectId+','+'项目名称:'+projectName+',任务名称:'+taskName+',结算金额为:'+this.settleForm.settleAmount+',结算工作量为:'+this.settleForm.settleWorkload; |
||||
|
params.restUrl=config.getXmBasePath()+"/xm/core/xmTaskExecuser/processApprova"; |
||||
|
this.$router.push({name:'ProcdefListForBizStart',params:params}); |
||||
|
//this.html2canvas(document.querySelector(".settleForm"),row,params); |
||||
|
}else { |
||||
|
this.$notify.error("不支持的审批事项"); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
//this.$store.dispatch('addVisitedViews', {path:'/mdp/workflow/re/procdef/ProcdefListForBizStart',query:{params:jsonParmas}}) |
||||
|
}, |
||||
|
handleCommand(command) { |
||||
|
if(command.type=='sendToProcessApprova'){ |
||||
|
this.sendToProcessApprova(command.data,command.bizKey); |
||||
|
}else if(command.type=='showQuotePrice'){ |
||||
|
this.showQuotePrice(command.data); |
||||
|
}else if(command.type=='becomeCandidate'){ |
||||
|
this.becomeCandidate(command.data); |
||||
|
}else if(command.type=='setNoLeader'){ |
||||
|
this.setNoLeader(command.data); |
||||
|
}else if(command.type=='execute'){ |
||||
|
this.execute(command.data); |
||||
|
}else if(command.type=='leave'){ |
||||
|
this.leave(command.data); |
||||
|
}else if(command.type=='showSettleList'){ |
||||
|
this.showSettleList(command.data); |
||||
|
}else if(command.type=='handleDel'){ |
||||
|
this.handleDel(command.data); |
||||
|
}else if(command.type=='toJoin'){ |
||||
|
this.editForm=command.data |
||||
|
this.toJoin(); |
||||
|
} |
||||
|
}, |
||||
|
html2canvas(doc,row,params){ |
||||
|
this.load.edit=true; |
||||
|
this.hideAllBtn(doc,true); |
||||
|
html2canvas(doc).then(canvas => { |
||||
|
|
||||
|
let dataURL = canvas.toDataURL("image/png"); |
||||
|
uploadBase64({fileData:dataURL,categoryId:'workflow',storedb:'0',branchId:row.branchId,name:row.name+'.png'}).then(res=>{ |
||||
|
this.hideAllBtn(doc,false); |
||||
|
params.mainContext=params.mainContext+'<br><img style="max-width:100%;" src="'+res.data.data.url+'"/>' |
||||
|
this.$router.push({name:'ProcdefListForBizStart',params:params}); |
||||
|
this.load.edit=false; |
||||
|
}); |
||||
|
|
||||
|
}); |
||||
|
}, |
||||
|
hideAllBtn:function(doc,hide) { |
||||
|
var btns = doc.getElementsByTagName('button'); |
||||
|
for (var i = 0; i < btns.length; i++) { |
||||
|
if(hide==true){ |
||||
|
btns[i].style.display='none' |
||||
|
}else{ |
||||
|
btns[i].style.display='' |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
becomeCandidate(row){ |
||||
|
this.editForm=row |
||||
|
var params=JSON.parse(JSON.stringify(row)); |
||||
|
params.status="0" |
||||
|
becomeCandidate(params).then(res=>{ |
||||
|
var tips = res.data.tips; |
||||
|
if(tips.isOk){ |
||||
|
this.afterEditSubmit(); |
||||
|
} |
||||
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' }); |
||||
|
|
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
setNoLeader(row){ |
||||
|
this.editForm=row |
||||
|
var params=JSON.parse(JSON.stringify(row)); |
||||
|
params.isLeader="0" |
||||
|
becomeCandidate(params).then(res=>{ |
||||
|
var tips = res.data.tips; |
||||
|
if(tips.isOk){ |
||||
|
this.afterEditSubmit(); |
||||
|
} |
||||
|
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: tips.isOk?'success':'error' }); |
||||
|
|
||||
|
}) |
||||
|
}, |
||||
|
formatToDoByStatus(row){ |
||||
|
var status=row.status; |
||||
|
var msg="点我操作" |
||||
|
if(status=='1'){ |
||||
|
msg="请申请验收"; |
||||
|
}else if( row.status=='3' && row.settleStatus!='2' && row.settleStatus!='4' && row.settleStatus!='6' ){ |
||||
|
msg="请申请结算"; |
||||
|
}else if(status=='2' ){ |
||||
|
msg="请给出验收结论"; |
||||
|
}else if(status=='7' ){ |
||||
|
msg="申请成为候选人"; |
||||
|
}else if(status=='0' ){ |
||||
|
msg="申请成为执行人"; |
||||
|
}else if( row.status=='3' || row.status=='6' ){ |
||||
|
msg="查看结算清单"; |
||||
|
} else if( row.status=='4'){ |
||||
|
msg="再次申请验收"; |
||||
|
} |
||||
|
return msg; |
||||
|
} |
||||
|
/**end 自定义函数请在上面加**/ |
||||
|
|
||||
|
},//end methods |
||||
|
components: { |
||||
|
'xm-task-execuser-add':XmTaskExecuserAdd, |
||||
|
'xm-task-execuser-edit':XmTaskExecuserEdit, |
||||
|
|
||||
|
XmProjectMCostUserList, |
||||
|
//在下面添加其它组件 |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.$nextTick(() => { |
||||
|
this.tableHeight = util.calcTableMaxHeight(this.$refs.table.$el); |
||||
|
this.getXmTaskExecusers(); |
||||
|
}); |
||||
|
|
||||
|
initSimpleDicts('all',['projectTaskExecuserStatus','projectTaskSettleStatus']).then(res=>{ |
||||
|
this.dicts=res.data.data; |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
.exec-navbar{ |
||||
|
background: #fafbfc; |
||||
|
padding: 0 20px; |
||||
|
height: 50px; |
||||
|
overflow: auto hidden; |
||||
|
line-height: 50px; |
||||
|
} |
||||
|
.badge { |
||||
|
margin-top: 7px; |
||||
|
padding-bottom: 10px; |
||||
|
} |
||||
|
</style> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue