慢直播
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

205 lines
6.4 KiB

<template>
<basic-container>
<avue-affix id="avue-view"
:offset-top="116">
<div class="header">
<avue-title :value="process.processDefinitionName"></avue-title>
</div>
</avue-affix>
<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-card shadow="never"
style="margin-top: 20px"
v-if="process.status == 'todo'">
<wf-examine-form ref="examineForm"
:comment.sync="comment"
:process="process"
@user-select="handleUserSelect"></wf-examine-form>
</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 v-if="process.status == 'todo'">
<wf-button :loading="submitLoading"
:button-list="buttonList"
:process="process"
:comment="comment"
@examine="handleExamine"
@user-select="handleUserSelect"
@print="handlePrint"
@rollback="handleRollbackTask"
@terminate="handleTerminateProcess"></wf-button>
</template>
<!-- 人员选择弹窗 -->
<user-select ref="user-select"
:check-type="checkType"
@onConfirm="handleUserSelectConfirm"></user-select>
</basic-container>
</template>
<script>
import WfExamineForm from './examForm.vue'
import WfButton from './button.vue'
import WfFlow from './flow.vue'
import userSelect from './user-select'
import exForm from '../../mixins/ex-form'
export default {
mixins: [exForm],
components: { userSelect, WfExamineForm, WfButton, WfFlow },
watch: {
'$route.params.params': {
handler(val) {
if (val) {
const param = JSON.parse(Buffer.from(val, 'base64').toString())
const { taskId, processInsId } = param
if (taskId && processInsId) this.getDetail(taskId, processInsId)
}
},
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, status } = process
let { allForm, taskForm } = form
if (allForm) {
const option = eval('(' + allForm + ')')
option.menuBtn = false
const { column, group } = option
if (status != 'todo') { // 已办,删除字段默认值
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
})
}
})
}
} else {
const columnFilter = this.filterAvueColumn(column, taskForm)
const columnArr = columnFilter.column
let vars = columnFilter.vars || []
const groupArr = []
if (group && group.length > 0) { // 处理group
group.forEach(gro => {
const groupFilter = this.filterAvueColumn(gro.column, taskForm)
gro.column = groupFilter.column
vars = vars.concat(groupFilter.vars)
if (gro.column.length > 0) groupArr.push(gro)
})
}
if (process.variables && process.variables.serialNumber) {
columnArr.unshift({
label: '流水号',
prop: 'serialNumber',
span: 24,
detail: true,
})
}
option.column = columnArr
option.group = groupArr
this.vars = vars
}
for (let key in variables) {
if (!variables[key]) delete variables[key]
}
this.option = option
this.form = variables
}
})
},
// 审核
handleExamine(pass) {
this.submitLoading = true
this.$refs.form.validate((valid, done) => {
if (valid) {
const variables = {}
this.vars.forEach(v => {
if (v != 'comment' && this.form[v]) variables[v] = this.form[v]
})
this.handleCompleteTask(pass, variables).then(() => {
this.$message.success("处理成功")
this.handleCloseTag('/plugin/workflow/process/todo')
}).catch(() => {
done()
this.submitLoading = false
})
} else {
done()
this.submitLoading = false
}
})
},
}
}
</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>