!695 BPM-办理人

Merge pull request !695 from Lesan/feature/bpm-办理人
This commit is contained in:
芋道源码 2025-02-15 00:33:43 +00:00 committed by Gitee
commit f91868b4f6
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
7 changed files with 41 additions and 18 deletions

View File

@ -0,0 +1 @@
<svg t="1739406626368" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1300" width="200" height="200"><path d="M803.221 925.573H224.356c-68.568 0-124.352-55.784-124.352-124.353V222.356c0-68.568 55.784-124.352 124.352-124.352h355.311v64H224.356c-33.278 0-60.352 27.074-60.352 60.352V801.22c0 33.278 27.074 60.353 60.352 60.353H803.22c33.278 0 60.353-27.074 60.353-60.353V448.208h64V801.22c0 68.569-55.784 124.353-124.352 124.353z" fill="#ffffff" p-id="1301"></path><path d="M300.357 756.916l35.024-195.867L770.117 84.404c10.05-11.02 25.015-18.052 41.058-19.293 16.017-1.247 31.987 3.379 43.841 12.667l83.662 65.549c21.643 16.956 24.254 45.964 5.942 66.038l-437.613 479.8-206.65 67.751z m104.994-170.751l-13.14 73.487 69.671-22.842 415.465-455.517-59.909-46.939-412.087 451.811z" fill="#ffffff" p-id="1302"></path><path d="M732.25 220.897l41.144-49.023 81.151 68.11-41.145 49.023z" fill="#ffffff" p-id="1303"></path></svg>

After

Width:  |  Height:  |  Size: 964 B

View File

@ -15,10 +15,9 @@
</div>
<div class="handler-item-text">审批人</div>
</div>
<!-- TODO @lesan办理人增加自定义 icon 可以换 jason 怎么弄 -->
<div class="handler-item" @click="addNode(NodeType.TRANSACTOR_NODE)">
<div class="approve handler-item-icon">
<span class="iconfont icon-approve icon-size"></span>
<div class="transactor handler-item-icon">
<span class="iconfont icon-transactor icon-size"></span>
</div>
<div class="handler-item-text">办理人</div>
</div>

View File

@ -1,4 +1,3 @@
<!-- TODO @lesan涉及到审批关键字需要换成办理建议通过一个变量控制哈 -->
<template>
<el-drawer
:append-to-body="true"
@ -40,10 +39,10 @@
</el-radio-group>
</div>
<el-tabs type="border-card" v-model="activeTabName" v-if="approveType === ApproveType.USER">
<el-tab-pane label="审批人" name="user">
<el-tab-pane :label="`${nodeTypeName}人`" name="user">
<div>
<el-form ref="formRef" :model="configForm" label-position="top" :rules="formRules">
<el-form-item label="审批人设置" prop="candidateStrategy">
<el-form-item :label="`${nodeTypeName}人设置`" prop="candidateStrategy">
<el-radio-group
v-model="configForm.candidateStrategy"
@change="changeCandidateStrategy"
@ -226,7 +225,7 @@
style="width: 100%"
/>
</el-form-item>
<el-form-item label="多人审批方式" prop="approveMethod">
<el-form-item :label="`多人${nodeTypeName}方式`" prop="approveMethod">
<el-radio-group v-model="configForm.approveMethod" @change="approveMethodChanged">
<div class="flex-col">
<div
@ -350,7 +349,7 @@
</el-form-item>
</div>
<el-divider content-position="left">审批人为空时</el-divider>
<el-divider content-position="left">{{ nodeTypeName }}人为空时</el-divider>
<el-form-item prop="assignEmptyHandlerType">
<el-radio-group v-model="configForm.assignEmptyHandlerType">
<div class="flex-col">
@ -449,7 +448,6 @@
</div>
</div>
</el-tab-pane>
<!-- TODO @lesan办理时应该还是有字段权限 -->
<el-tab-pane label="表单字段权限" name="fields" v-if="formType === 10">
<div class="field-setting-pane">
<div class="field-setting-desc">字段权限</div>
@ -681,6 +679,11 @@ const {
const userTaskListenerRef = ref()
//
const nodeTypeName = computed(() => {
return currentNode.value.type === NodeType.TRANSACTOR_NODE ? '办理' : '审批'
})
//
const saveConfig = async () => {
// activeTabName.value = 'user'

View File

@ -9,7 +9,13 @@
]"
>
<div class="node-title-container">
<div class="node-title-icon user-task"><span class="iconfont icon-approve"></span></div>
<div
:class="`node-title-icon ${currentNode.type === NodeType.TRANSACTOR_NODE ? 'transactor-task' : 'user-task'}`"
>
<span
:class="`iconfont ${currentNode.type === NodeType.TRANSACTOR_NODE ? 'icon-transactor' : 'icon-approve'}`"
></span>
</div>
<input
v-if="!readonly && showInput"
type="text"

View File

@ -177,6 +177,10 @@
color: #ca3a31
}
.transactor {
color: #330099;
}
.handler-item-text {
margin-top: 4px;
width: 80px;
@ -290,10 +294,14 @@
&.trigger-node {
color: #3373d2;
}
&.router-node {
color: #ca3a31
}
&.transactor-task {
color: #330099;
}
}
.node-title {
@ -777,7 +785,7 @@
content: "\e7eb";
}
.icon-handle:before {
.icon-transactor:before {
content: "\e61c";
}

View File

@ -36,11 +36,10 @@
:rule="approveForm.rule"
/>
</el-card>
<!-- TODO @lesan需要分成审批办理意见包括 labelplaceholderrule 校验 -->
<el-form-item label="审批意见" prop="reason">
<el-form-item :label="`${taskName}意见`" prop="reason">
<el-input
v-model="approveReasonForm.reason"
placeholder="请输入审批意见"
:placeholder="`请输入${taskName}意见`"
type="textarea"
:rows="4"
/>
@ -505,6 +504,7 @@ import * as TaskApi from '@/api/bpm/task'
import * as ProcessInstanceApi from '@/api/bpm/processInstance'
import * as UserApi from '@/api/system/user'
import {
NodeType,
OPERATION_BUTTON_NAME,
OperationButtonType
} from '@/components/SimpleProcessDesignerV2/src/consts'
@ -559,7 +559,9 @@ const approveReasonForm = reactive({
})
const approveReasonRule = computed(() => {
return {
reason: [{ required: reasonRequire.value, message: '审批意见不能为空', trigger: 'blur' }],
reason: [
{ required: reasonRequire.value, message: taskName + '意见不能为空', trigger: 'blur' }
],
signPicUrl: [{ required: true, message: '签名不能为空', trigger: 'change' }]
}
})
@ -968,11 +970,14 @@ const getButtonDisplayName = (btnType: OperationButtonType) => {
return displayName
}
const taskName = ref('审批')
const loadTodoTask = (task: any) => {
approveForm.value = {}
approveFormFApi.value = {}
runningTask.value = task
reasonRequire.value = task?.reasonRequire ?? false
taskName.value = task?.nodeType === NodeType.TRANSACTOR_NODE ? '办理' : '审批'
// approve .
if (task && task.formId && task.formConf) {
const tempApproveForm = {}

View File

@ -180,6 +180,7 @@ import copySvg from '@/assets/svgs/bpm/copy.svg'
import conditionSvg from '@/assets/svgs/bpm/condition.svg'
import parallelSvg from '@/assets/svgs/bpm/parallel.svg'
import finishSvg from '@/assets/svgs/bpm/finish.svg'
import transactorSvg from '@/assets/svgs/bpm/transactor.svg'
defineOptions({ name: 'BpmProcessInstanceTimeline' })
withDefaults(
@ -241,8 +242,8 @@ const nodeTypeSvgMap = {
[NodeType.START_USER_NODE]: { color: '#909398', svg: starterSvg },
//
[NodeType.USER_TASK_NODE]: { color: '#ff943e', svg: auditorSvg },
// TODO @lesan
[NodeType.TRANSACTOR_NODE]: { color: '#ff943e', svg: auditorSvg },
//
[NodeType.TRANSACTOR_NODE]: { color: '#ff943e', svg: transactorSvg },
//
[NodeType.COPY_TASK_NODE]: { color: '#3296fb', svg: copySvg },
//