parent
6de6dcdfa9
commit
0165c01d75
7 changed files with 856 additions and 15 deletions
File diff suppressed because one or more lines are too long
@ -0,0 +1,139 @@ |
||||
import request from '@/router/axios' |
||||
|
||||
const prefix = '/api/blade-workflow/ops' |
||||
|
||||
/** |
||||
* 所有待办任务 |
||||
*/ |
||||
export const getList = (current, size, params) => { |
||||
return request({ |
||||
url: `${prefix}/list`, |
||||
method: 'get', |
||||
params: { |
||||
...params, |
||||
current, |
||||
size, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
/** |
||||
* 完成任务 |
||||
*/ |
||||
export const completeTask = (data) => { |
||||
return request({ |
||||
url: `${prefix}/completeTask`, |
||||
method: 'post', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
/** |
||||
* 变更任务状态 |
||||
*/ |
||||
export const changeTaskStatus = (data) => { |
||||
return request({ |
||||
url: `${prefix}/changeTaskStatus`, |
||||
method: 'post', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
/** |
||||
* 变更任务审核人 |
||||
*/ |
||||
export const changeTaskAssignee = (data) => { |
||||
return request({ |
||||
url: `${prefix}/changeTaskAssignee`, |
||||
method: 'post', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
/** |
||||
* 转办任务 |
||||
*/ |
||||
export const transferTask = (data) => { |
||||
return request({ |
||||
url: `${prefix}/transferTask`, |
||||
method: 'post', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
/** |
||||
* 委托任务 |
||||
*/ |
||||
export const delegateTask = (data) => { |
||||
return request({ |
||||
url: `${prefix}/delegateTask`, |
||||
method: 'post', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
/** |
||||
* 抄送任务 |
||||
*/ |
||||
export const copyTask = (data) => { |
||||
return request({ |
||||
url: `${prefix}/copyTask`, |
||||
method: 'post', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
/** |
||||
* 催办任务 |
||||
*/ |
||||
export const urgeTask = (data) => { |
||||
return request({ |
||||
url: `${prefix}/urgeTask`, |
||||
method: 'post', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
/** |
||||
* 终止流程 |
||||
*/ |
||||
export const terminateProcess = (data) => { |
||||
return request({ |
||||
url: `${prefix}/terminateProcess`, |
||||
method: 'post', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
/** |
||||
* 流程节点 |
||||
*/ |
||||
export const processNodes = (params) => { |
||||
return request({ |
||||
url: `${prefix}/processNodes`, |
||||
method: 'get', |
||||
params |
||||
}) |
||||
} |
||||
|
||||
/** |
||||
* 指定回退 |
||||
*/ |
||||
export const rollbackTask = (data) => { |
||||
return request({ |
||||
url: `${prefix}/rollbackTask`, |
||||
method: 'post', |
||||
data |
||||
}) |
||||
} |
||||
|
||||
/** |
||||
* 调度任务 |
||||
*/ |
||||
export const dispatchTask = (data) => { |
||||
return request({ |
||||
url: `${prefix}/dispatchTask`, |
||||
method: 'post', |
||||
data |
||||
}) |
||||
} |
||||
@ -0,0 +1,129 @@ |
||||
<template> |
||||
<el-tabs v-model="activeName"> |
||||
<el-tab-pane label="申请信息" |
||||
name="first"> |
||||
<el-card shadow="never"> |
||||
<div ref="printBody"> |
||||
<avue-form v-if="option && ((option.column && option.column.length > 0) || (option.group && option.group.length > 0))" |
||||
v-model="form" |
||||
ref="form" |
||||
:option="option"> |
||||
</avue-form> |
||||
</div> |
||||
</el-card> |
||||
</el-tab-pane> |
||||
<el-tab-pane label="流转信息" |
||||
name="second"> |
||||
<el-card shadow="never" |
||||
style="margin-top: 5px;"> |
||||
<wf-flow :flow="flow"></wf-flow> |
||||
</el-card> |
||||
</el-tab-pane> |
||||
<el-tab-pane label="流程跟踪" |
||||
name="third"> |
||||
<template v-if="activeName == 'third'"> |
||||
<el-card shadow="never" |
||||
style="margin-top: 5px;"> |
||||
<wf-design ref="bpmn" |
||||
style="height: 500px;" |
||||
:options="bpmnOption"></wf-design> |
||||
</el-card> |
||||
</template> |
||||
</el-tab-pane> |
||||
</el-tabs> |
||||
</template> |
||||
|
||||
<script> |
||||
import WfFlow from '../process/components/flow.vue' |
||||
|
||||
import exForm from '../mixins/ex-form' |
||||
|
||||
export default { |
||||
mixins: [exForm], |
||||
components: { WfFlow }, |
||||
props: { |
||||
processInstanceId: String, |
||||
taskId: String |
||||
}, |
||||
watch: { |
||||
processInstanceId: { |
||||
handler() { |
||||
const { taskId, processInstanceId } = this |
||||
if (taskId && processInstanceId) this.getDetail(taskId, processInstanceId) |
||||
}, |
||||
immediate: true |
||||
} |
||||
}, |
||||
data() { |
||||
return { |
||||
activeName: 'first', |
||||
form: {}, |
||||
option: {}, |
||||
vars: [], // 需要提交的字段 |
||||
submitLoading: false, // 提交时按钮loading |
||||
} |
||||
}, |
||||
methods: { |
||||
// 获取任务详情 |
||||
getDetail(taskId, processInsId) { |
||||
this.getTaskDetail(taskId, processInsId).then(res => { |
||||
const { process, form } = res |
||||
const { variables } = process |
||||
|
||||
let { allForm } = form |
||||
if (allForm) { |
||||
const option = eval('(' + allForm + ')') |
||||
option.menuBtn = false |
||||
const { column, group } = option |
||||
option.detail = true |
||||
if (column && column.length > 0) { // 处理column |
||||
column.forEach(col => { |
||||
if (col.type == 'dynamic') col.children.column.forEach(cc => delete cc.value) |
||||
else delete col.value |
||||
}) |
||||
} |
||||
|
||||
if (group && group.length > 0) { // 处理group |
||||
group.forEach(gro => { |
||||
if (gro.column && gro.column.length > 0) { |
||||
gro.column.forEach(col => { |
||||
if (col.type == 'dynamic') col.children.column.forEach(cc => delete cc.value) |
||||
else delete col.value |
||||
}) |
||||
} |
||||
}) |
||||
} |
||||
for (let key in variables) { |
||||
if (!variables[key]) delete variables[key] |
||||
} |
||||
if (process.variables && process.variables.serialNumber) { |
||||
column.unshift({ |
||||
label: '流水号', |
||||
prop: 'serialNumber', |
||||
span: 24, |
||||
detail: true, |
||||
}) |
||||
} |
||||
option.column = column |
||||
option.group = group |
||||
|
||||
this.option = option |
||||
this.form = variables |
||||
} |
||||
}) |
||||
}, |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
.header { |
||||
width: 100%; |
||||
height: 50px; |
||||
background: #fff; |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: space-between; |
||||
padding: 0 10px 10px 0; |
||||
} |
||||
</style> |
||||
@ -0,0 +1,558 @@ |
||||
<template> |
||||
<basic-container> |
||||
<avue-crud ref="crud" |
||||
:option="option" |
||||
:table-loading="loading" |
||||
:data="data" |
||||
:page.sync="page" |
||||
v-model="form" |
||||
@search-change="searchChange" |
||||
@search-reset="searchReset" |
||||
@selection-change="selectionChange" |
||||
@current-change="currentChange" |
||||
@size-change="sizeChange" |
||||
@refresh-change="onLoad(page, query)" |
||||
@on-load="onLoad"> |
||||
<template #menuLeft> |
||||
<el-button v-if="permission.wf_ops_pass" |
||||
:disabled="loading" |
||||
size="mini" |
||||
type="success" |
||||
icon="el-icon-check" |
||||
@click="handleCompleteTask(null, true)">通过</el-button> |
||||
<el-button v-if="permission.wf_ops_reject" |
||||
:disabled="loading" |
||||
size="mini" |
||||
type="danger" |
||||
icon="el-icon-close" |
||||
@click="handleCompleteTask(null, false)">驳回</el-button> |
||||
<el-button v-if="permission.wf_ops_change_assignee" |
||||
:disabled="loading" |
||||
size="mini" |
||||
type="warning" |
||||
icon="el-icon-user" |
||||
@click="handleUserSelect({type: 'assignee', checkType: 'radio'})">变更审核人</el-button> |
||||
<el-button v-if="permission.wf_ops_transfer" |
||||
:disabled="loading" |
||||
size="mini" |
||||
type="primary" |
||||
icon="el-icon-user" |
||||
@click="handleUserSelect({type: 'transfer', checkType: 'radio'})">转办</el-button> |
||||
<el-button v-if="permission.wf_ops_delegate" |
||||
:disabled="loading" |
||||
size="mini" |
||||
type="success" |
||||
icon="el-icon-user" |
||||
@click="handleUserSelect({type: 'delegate', checkType: 'radio'})">委托</el-button> |
||||
<el-button v-if="permission.wf_ops_copy" |
||||
:disabled="loading" |
||||
size="mini" |
||||
type="info" |
||||
icon="el-icon-s-promotion" |
||||
@click="handleUserSelect({type: 'copy', checkType: 'checkbox'})">抄送</el-button> |
||||
<el-button v-if="permission.wf_ops_urge" |
||||
:disabled="loading" |
||||
size="mini" |
||||
type="warning" |
||||
icon="el-icon-warning" |
||||
@click="handleUrgeTask(null)">催办</el-button> |
||||
<el-button v-if="permission.wf_ops_terminate" |
||||
:disabled="loading" |
||||
size="mini" |
||||
type="danger" |
||||
icon="el-icon-s-opportunity" |
||||
@click="handleTerminateProcess(null)">终止</el-button> |
||||
</template> |
||||
<template #processDefinitionName="{row}"> |
||||
<el-link v-if="permission.wf_ops_detail" |
||||
style="font-size: 12px;" |
||||
type="primary" |
||||
@click="handleDetail(row)">{{row.processDefinitionName}}</el-link> |
||||
<span v-else>{{row.processDefinitionName}}</span> |
||||
</template> |
||||
<template #isSuspended="{row}"> |
||||
<el-tag v-if="row.isSuspended" |
||||
size="mini" |
||||
type="danger">挂起</el-tag> |
||||
<el-tag v-else |
||||
size="mini">激活</el-tag> |
||||
</template> |
||||
<template #menu="{row}"> |
||||
<el-button v-if="permission.wf_ops_follow" |
||||
type="text" |
||||
size="small" |
||||
icon="el-icon-search" |
||||
@click="handleFlow(row)">流程图</el-button> |
||||
<el-dropdown style="margin-left: 5px;"> |
||||
<el-button size="mini" |
||||
type="text">更多操作<i class="el-icon-arrow-down el-icon--right"></i></el-button> |
||||
<template #dropdown> |
||||
<el-dropdown-menu> |
||||
<el-dropdown-item v-if="permission.wf_ops_pass" |
||||
@click.native="handleCompleteTask(row.taskId, true)">通过</el-dropdown-item> |
||||
<el-dropdown-item v-if="permission.wf_ops_reject" |
||||
@click.native="handleCompleteTask(row.taskId, false)">驳回</el-dropdown-item> |
||||
<el-dropdown-item v-if="permission.wf_ops_transfer" |
||||
@click.native="handleUserSelect({type: 'transfer', checkType: 'radio'}, row)">转办</el-dropdown-item> |
||||
<el-dropdown-item v-if="permission.wf_ops_delegate" |
||||
@click.native="handleUserSelect({type: 'delegate', checkType: 'radio'}, row)">委托</el-dropdown-item> |
||||
<el-dropdown-item v-if="permission.wf_ops_dispatch" |
||||
@click.native="getProcessNodes(row.taskId, row.processInstanceId, 'dispatch')">调度</el-dropdown-item> |
||||
<el-dropdown-item v-if="permission.wf_ops_rollback" |
||||
@click.native="getProcessNodes(row.taskId, row.processInstanceId, 'rollback')">指定回退</el-dropdown-item> |
||||
<el-dropdown-item v-if="permission.wf_ops_terminate" |
||||
@click.native="handleTerminateProcess(row.taskId)">终止</el-dropdown-item> |
||||
<el-dropdown-item v-if="permission.wf_ops_copy" |
||||
@click.native="handleUserSelect({type: 'copy', checkType: 'checkbox'}, row)">抄送</el-dropdown-item> |
||||
<el-dropdown-item v-if="permission.wf_ops_urge" |
||||
@click.native="handleUrgeTask(row.taskId)">催办</el-dropdown-item> |
||||
<el-dropdown-item v-if="permission.wf_ops_active && row.isSuspended" |
||||
@click.native="handleChangeStatus(row, false)">激活</el-dropdown-item> |
||||
<el-dropdown-item v-if="permission.wf_ops_suspend && !row.isSuspended" |
||||
@click.native="handleChangeStatus(row, true)">挂起</el-dropdown-item> |
||||
</el-dropdown-menu> |
||||
</template> |
||||
</el-dropdown> |
||||
</template> |
||||
</avue-crud> |
||||
|
||||
<el-dialog :visible.sync="bpmnVisible" |
||||
append-to-body |
||||
destroy-on-close |
||||
title="流程图"> |
||||
<wf-design ref="bpmn" |
||||
style="height: 500px;" |
||||
:options="bpmnOption"></wf-design> |
||||
</el-dialog> |
||||
<!-- 人员选择弹窗 --> |
||||
<user-select ref="user-select" |
||||
:check-type="checkType" |
||||
@onConfirm="handleUserSelectConfirm"></user-select> |
||||
<!-- 选择节点弹窗 --> |
||||
<el-dialog :visible.sync="nodeVisible" |
||||
append-to-body |
||||
title="选择节点"> |
||||
<avue-form v-if="nodeVisible" |
||||
v-model="nodeForm" |
||||
:option="nodeOption" |
||||
@submit="handleNodeSubmit"></avue-form> |
||||
</el-dialog> |
||||
<el-drawer :visible.sync="detailVisible" |
||||
:title="form.processDefinitionName" |
||||
custom-class="wf-drawer" |
||||
size="60%" |
||||
append-to-body> |
||||
<task-detail v-if="detailVisible" |
||||
:taskId="form.taskId" |
||||
:processInstanceId="form.processInstanceId"></task-detail> |
||||
</el-drawer> |
||||
</basic-container> |
||||
|
||||
</template> |
||||
|
||||
<script> |
||||
import { detail } from '@/api/plugin/workflow/process' |
||||
import { |
||||
getList, completeTask, changeTaskStatus, changeTaskAssignee, transferTask, delegateTask, copyTask, urgeTask, terminateProcess, processNodes, rollbackTask, dispatchTask |
||||
} from "@/api/plugin/workflow/ops"; |
||||
import { userList } from "@/api/plugin/workflow/process"; |
||||
import { mapGetters } from "vuex"; |
||||
|
||||
import UserSelect from '../process/components/user-select.vue' |
||||
import TaskDetail from './detail.vue' |
||||
import exForm from '../mixins/ex-form' |
||||
|
||||
export default { |
||||
mixins: [exForm], |
||||
components: { |
||||
UserSelect, TaskDetail |
||||
}, |
||||
data() { |
||||
return { |
||||
checkType: 'radio', |
||||
form: {}, |
||||
query: {}, |
||||
loading: true, |
||||
page: { |
||||
pageSize: 10, |
||||
currentPage: 1, |
||||
total: 0 |
||||
}, |
||||
selectionList: [], |
||||
option: { |
||||
size: 'mini', |
||||
height: 'auto', |
||||
calcHeight: 30, |
||||
tip: false, |
||||
border: true, |
||||
selection: true, |
||||
dialogType: 'drawer', |
||||
addBtn: false, |
||||
editBtn: false, |
||||
delBtn: false, |
||||
align: 'center', |
||||
searchSize: 'mini', |
||||
searchMenuSpan: 6, |
||||
// searchIndex: 3, |
||||
// searchIcon: true, |
||||
column: [ |
||||
{ |
||||
label: '流程名称', |
||||
prop: 'processDefinitionName', |
||||
search: true, |
||||
overHidden: true |
||||
}, |
||||
{ |
||||
label: '流程标识', |
||||
prop: 'processDefinitionKey', |
||||
search: true, |
||||
overHidden: true |
||||
}, |
||||
{ |
||||
label: '流水号', |
||||
prop: 'serialNumber', |
||||
search: true, |
||||
overHidden: true |
||||
}, |
||||
{ |
||||
label: "流程分类", |
||||
row: true, |
||||
type: 'tree', |
||||
dicUrl: '/api/blade-workflow/design/category/tree', |
||||
props: { |
||||
label: 'name', |
||||
value: 'id' |
||||
}, |
||||
prop: "category", |
||||
search: true, |
||||
}, |
||||
{ |
||||
label: '当前节点', |
||||
prop: 'taskName', |
||||
search: true |
||||
}, |
||||
{ |
||||
label: '审核人', |
||||
prop: 'assignee', |
||||
search: true |
||||
}, |
||||
{ |
||||
label: '申请人', |
||||
prop: 'applyUserName', |
||||
search: true |
||||
}, |
||||
{ |
||||
label: '创建时间', |
||||
prop: 'createTime', |
||||
type: 'datetime', |
||||
format: 'yyyy-MM-dd HH:mm', |
||||
width: 165, |
||||
}, |
||||
{ |
||||
label: '状态', |
||||
prop: 'isSuspended', |
||||
type: 'select', |
||||
dicData: [{ |
||||
label: '挂起', |
||||
value: true |
||||
}, { |
||||
label: '激活', |
||||
value: false |
||||
}], |
||||
search: true |
||||
}, |
||||
{ |
||||
label: '时间范围', |
||||
prop: 'date', |
||||
type: 'date', |
||||
dataType: 'string', |
||||
format: 'yyyy-MM-dd', |
||||
valueFormat: 'yyyy-MM-dd', |
||||
hide: true, |
||||
search: true, |
||||
searchRange: true, |
||||
} |
||||
] |
||||
}, |
||||
data: [], |
||||
bpmnVisible: false, |
||||
bpmnOption: {}, |
||||
nodeVisible: false, |
||||
nodeForm: {}, |
||||
nodeOption: { |
||||
column: [{ |
||||
label: '节点', |
||||
prop: 'nodeId', |
||||
type: 'select', |
||||
props: { |
||||
label: 'nodeName', |
||||
value: 'nodeId' |
||||
}, |
||||
span: 24, |
||||
rules: [{ required: true, message: '请选择节点', trigger: 'change' }] |
||||
}] |
||||
}, |
||||
nodeType: '', |
||||
detailVisible: false |
||||
}; |
||||
}, |
||||
computed: { |
||||
...mapGetters(["permission"]), |
||||
ids() { |
||||
let ids = []; |
||||
this.selectionList.forEach(ele => { |
||||
ids.push(ele.taskId); |
||||
}); |
||||
return ids.join(","); |
||||
} |
||||
}, |
||||
methods: { |
||||
handleDetail(row) { |
||||
this.form = { ...row } |
||||
this.detailVisible = true |
||||
}, |
||||
rollbackTask, |
||||
dispatchTask, |
||||
handleNodeSubmit(form, done) { |
||||
const { nodeId, taskId } = form |
||||
const param = { nodeId, taskId } |
||||
this.loading = true |
||||
this[`${this.nodeType}Task`](param).then(() => { |
||||
this.$message.success('操作成功') |
||||
this.form = {} |
||||
done() |
||||
this.nodeVisible = false |
||||
this.onLoad(this.page, this.query) |
||||
}).catch(() => { |
||||
done() |
||||
this.loading = false |
||||
}) |
||||
}, |
||||
getProcessNodes(taskId, processInstanceId, type) { |
||||
this.nodeType = type |
||||
const param = { processInstanceId } |
||||
if (type == 'rollback') param.taskId = taskId |
||||
processNodes(param).then(res => { |
||||
this.findObject(this.nodeOption.column, 'nodeId').dicData = res.data.data |
||||
this.nodeVisible = true |
||||
this.nodeForm = { |
||||
...this.nodeForm, |
||||
taskId, processInstanceId |
||||
} |
||||
}) |
||||
}, |
||||
handleCompleteTask(taskId, pass) { |
||||
if (!taskId) { |
||||
if (this.selectionList.length === 0) { |
||||
this.$message.warning("请选择至少一条数据") |
||||
return |
||||
} |
||||
taskId = this.ids |
||||
} |
||||
this.$confirm(`确定要将选中的任务全部<span style='color: red;'> ${pass ? '通过' : '驳回'} </span>吗?`, '警告', { |
||||
type: 'warning', |
||||
dangerouslyUseHTMLString: true, |
||||
}).then(() => { |
||||
this.loading = true |
||||
completeTask({ taskId, pass }).then(() => { |
||||
this.$message.success('操作成功') |
||||
this.onLoad(this.page, this.query) |
||||
}).catch(() => { |
||||
this.loading = false |
||||
}) |
||||
}).catch(() => { }) |
||||
}, |
||||
handleUrgeTask(taskId) { |
||||
if (!taskId) { |
||||
if (this.selectionList.length === 0) { |
||||
this.$message.warning("请选择至少一条数据") |
||||
return |
||||
} |
||||
taskId = this.ids |
||||
} |
||||
this.$confirm(`确定要将催办选中的任务吗?若任务没有审核人此操作无效`, '警告', { |
||||
type: 'warning', |
||||
}).then(() => { |
||||
this.loading = true |
||||
urgeTask({ taskId }).then(() => { |
||||
this.$message.success('催办成功') |
||||
this.onLoad(this.page, this.query) |
||||
}).catch(() => { |
||||
this.loading = false |
||||
}) |
||||
}).catch(() => { }) |
||||
}, |
||||
handleTerminateProcess(taskId) { |
||||
if (!taskId) { |
||||
if (this.selectionList.length === 0) { |
||||
this.$message.warning("请选择至少一条数据") |
||||
return |
||||
} |
||||
taskId = this.ids |
||||
} |
||||
this.$confirm(`确定要将选中的任务流程终止吗?`, '警告', { |
||||
type: 'warning', |
||||
}).then(() => { |
||||
this.loading = true |
||||
terminateProcess({ taskId }).then(() => { |
||||
this.$message.success('终止成功') |
||||
this.onLoad(this.page, this.query) |
||||
}).catch(() => { |
||||
this.loading = false |
||||
}) |
||||
}).catch(() => { }) |
||||
}, |
||||
handleChangeStatus(row, isSuspended) { |
||||
this.loading = true |
||||
changeTaskStatus({ taskId: row.taskId, isSuspended }).then(() => { |
||||
this.$message.success('操作成功') |
||||
this.onLoad(this.page, this.query) |
||||
}).catch(() => { |
||||
this.loading = false |
||||
}) |
||||
}, |
||||
// 人员选择弹窗 |
||||
handleUserSelect({ type, checkType }, row) { |
||||
if (row) this.selectionList = [row] |
||||
if (this.selectionList.length === 0) { |
||||
this.$message.warning("请选择至少一条数据") |
||||
return |
||||
} |
||||
this.$refs['user-select'].visible = true |
||||
this.userSelectType = type |
||||
this.checkType = checkType |
||||
}, |
||||
handleUserSelectConfirm(id, name) { |
||||
switch (this.userSelectType) { |
||||
case 'assignee': |
||||
this.$confirm(`确定要将选中的任务审核人变更为<span style='color: red;'> ${name} </span>吗?`, '提示', { |
||||
type: 'warning', |
||||
dangerouslyUseHTMLString: true, |
||||
}).then(() => { |
||||
this.$refs['user-select'].visible = false |
||||
this.loading = true |
||||
changeTaskAssignee({ taskId: this.ids, assignee: id }).then(() => { |
||||
this.$message.success('操作成功') |
||||
this.onLoad(this.page, this.query) |
||||
this.selectionList = [] |
||||
}).catch(() => { |
||||
this.loading = false |
||||
}) |
||||
}).catch(() => { }) |
||||
break; |
||||
case 'transfer': |
||||
this.$confirm(`确定要将选中的任务转办给<span style='color: red;'> ${name} </span>吗?`, '提示', { |
||||
type: 'warning', |
||||
dangerouslyUseHTMLString: true, |
||||
}).then(() => { |
||||
this.$refs['user-select'].visible = false |
||||
this.loading = true |
||||
transferTask({ taskId: this.ids, assignee: id }).then(() => { |
||||
this.$message.success('转办成功') |
||||
this.onLoad(this.page, this.query) |
||||
this.selectionList = [] |
||||
}).catch(() => { |
||||
this.loading = false |
||||
}) |
||||
}).catch(() => { }) |
||||
break; |
||||
case 'delegate': |
||||
this.$confirm(`确定要将选中的任务委托给<span style='color: red;'> ${name} </span>吗?`, '提示', { |
||||
type: 'warning', |
||||
dangerouslyUseHTMLString: true, |
||||
}).then(() => { |
||||
this.$refs['user-select'].visible = false |
||||
this.loading = true |
||||
delegateTask({ taskId: this.ids, assignee: id }).then(() => { |
||||
this.$message.success('委托成功') |
||||
this.onLoad(this.page, this.query) |
||||
this.selectionList = [] |
||||
}).catch(() => { |
||||
this.loading = false |
||||
}) |
||||
}).catch(() => { }) |
||||
break; |
||||
case 'copy': |
||||
this.$confirm(`确定要将选中的任务抄送给<span style='color: red;'> ${name} </span>吗?`, '提示', { |
||||
type: 'warning', |
||||
dangerouslyUseHTMLString: true, |
||||
}).then(() => { |
||||
this.$refs['user-select'].visible = false |
||||
copyTask({ taskId: this.ids, assignee: id }).then(() => { |
||||
this.$refs.crud.toggleSelection() |
||||
this.$message.success('抄送成功') |
||||
}).catch(() => { |
||||
this.loading = false |
||||
}) |
||||
}).catch(() => { }) |
||||
break; |
||||
} |
||||
}, |
||||
handleFlow(row) { |
||||
const { taskId, processInstanceId } = row |
||||
detail({ taskId, processInsId: processInstanceId }).then(res => { |
||||
const { process, flow } = res.data.data |
||||
|
||||
this.bpmnOption = { |
||||
mode: 'view', |
||||
xml: process.xml, |
||||
flows: this.handleResolveFlows(flow) |
||||
} |
||||
|
||||
this.bpmnVisible = true |
||||
}) |
||||
}, |
||||
searchReset() { |
||||
this.query = {}; |
||||
this.onLoad(this.page); |
||||
}, |
||||
searchChange(params, done) { |
||||
this.query = params; |
||||
this.page.currentPage = 1; |
||||
this.onLoad(this.page, params); |
||||
done(); |
||||
}, |
||||
selectionChange(list) { |
||||
this.selectionList = list; |
||||
}, |
||||
currentChange(currentPage) { |
||||
this.page.currentPage = currentPage; |
||||
}, |
||||
sizeChange(pageSize) { |
||||
this.page.pageSize = pageSize; |
||||
}, |
||||
async onLoad(page, params = {}) { |
||||
this.loading = true; |
||||
const param = Object.assign(params, this.query) |
||||
const { assignee } = param |
||||
if (assignee) { |
||||
const res = await userList(1, -1, { name: assignee }) |
||||
if (res.data.data.records && res.data.data.records.length > 0) { |
||||
param.assignee = res.data.data.records.map(d => d.id).join(',') |
||||
} else { |
||||
this.page.total = 0 |
||||
this.data = [] |
||||
this.loading = false |
||||
} |
||||
} |
||||
getList(page.currentPage, page.pageSize, param).then(res => { |
||||
const data = res.data.data |
||||
this.page.total = data.total |
||||
this.data = data.records |
||||
this.loading = false |
||||
}).catch(() => { |
||||
this.loading = false |
||||
}) |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style lang="scss"> |
||||
.wf-drawer { |
||||
.el-drawer__body { |
||||
padding: 0 20px; |
||||
overflow: auto; |
||||
} |
||||
} |
||||
</style> |
||||
Loading…
Reference in new issue