Pre Merge pull request !368 from Jason/master

pull/368/MERGE
Jason 2026-06-20 17:29:33 +00:00 committed by Gitee
commit 0971eaeaf1
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
6 changed files with 24 additions and 12 deletions

View File

@ -354,7 +354,8 @@ async function initNextAssigneesFormField() {
BpmCandidateStrategyEnum.START_USER_SELECT === BpmCandidateStrategyEnum.START_USER_SELECT ===
node.candidateStrategy) || node.candidateStrategy) ||
// 情况二:当前节点是审批人自选 // 情况二:当前节点是审批人自选
BpmCandidateStrategyEnum.APPROVE_USER_SELECT === node.candidateStrategy (isEmpty(node.candidateUsers) &&
BpmCandidateStrategyEnum.APPROVE_USER_SELECT === node.candidateStrategy)
) { ) {
nextAssigneesActivityNode.value.push(node); nextAssigneesActivityNode.value.push(node);
} }
@ -396,7 +397,7 @@ function validateNextAssignees() {
} }
// 如果需要自选审批人,则校验每个节点是否都已配置审批人 // 如果需要自选审批人,则校验每个节点是否都已配置审批人
for (const item of nextAssigneesActivityNode.value) { for (const item of nextAssigneesActivityNode.value) {
if (isEmpty(approveReasonForm.nextAssignees[item.id])) { if (isEmpty(item.candidateUsers) && isEmpty(approveReasonForm.nextAssignees[item.id])) {
message.warning('下一个节点的审批人不能为空!'); message.warning('下一个节点的审批人不能为空!');
return false; return false;
} }
@ -875,9 +876,10 @@ defineExpose({ loadTodoTask });
name="nextAssignees" name="nextAssignees"
v-if="nextAssigneesActivityNode.length > 0" v-if="nextAssigneesActivityNode.length > 0"
> >
<div class="-mb-8 -mt-3.5 ml-2.5"> <div class="ml-2.5 mt-2.5">
<ProcessInstanceTimeline <ProcessInstanceTimeline
ref="nextAssigneesTimelineRef" ref="nextAssigneesTimelineRef"
embedded
:activity-nodes="nextAssigneesActivityNode" :activity-nodes="nextAssigneesActivityNode"
:show-status-icon="false" :show-status-icon="false"
:enable-approve-user-select="true" :enable-approve-user-select="true"

View File

@ -23,12 +23,14 @@ defineOptions({ name: 'BpmProcessInstanceTimeline' });
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
activityNodes: BpmProcessInstanceApi.ApprovalNodeInfo[]; // 审批节点信息 activityNodes: BpmProcessInstanceApi.ApprovalNodeInfo[]; // 审批节点信息
embedded?: boolean; // 是否嵌入表单使用(缩小顶部内边距,避免与表单项 label 间距过大)
enableApproveUserSelect?: boolean; // 是否开启审批人自选功能 enableApproveUserSelect?: boolean; // 是否开启审批人自选功能
showStatusIcon?: boolean; // 是否显示头像右下角状态图标 showStatusIcon?: boolean; // 是否显示头像右下角状态图标
}>(), }>(),
{ {
showStatusIcon: true, // 默认值为 true showStatusIcon: true, // 默认值为 true
enableApproveUserSelect: false, // 默认值为 false enableApproveUserSelect: false, // 默认值为 false
embedded: false, // 默认值为 false
}, },
); );
@ -246,7 +248,7 @@ defineExpose({ setCustomApproveUsers, batchSetCustomApproveUsers });
<template> <template>
<div> <div>
<Timeline class="pt-5"> <Timeline :class="embedded ? 'pt-2' : 'pt-5'">
<!-- 遍历每个审批节点 --> <!-- 遍历每个审批节点 -->
<Timeline.Item <Timeline.Item
v-for="(activity, index) in activityNodes" v-for="(activity, index) in activityNodes"

View File

@ -335,7 +335,8 @@ async function initNextAssigneesFormField() {
BpmCandidateStrategyEnum.START_USER_SELECT === BpmCandidateStrategyEnum.START_USER_SELECT ===
node.candidateStrategy) || node.candidateStrategy) ||
// 情况二:当前节点是审批人自选 // 情况二:当前节点是审批人自选
BpmCandidateStrategyEnum.APPROVE_USER_SELECT === node.candidateStrategy (isEmpty(node.candidateUsers) &&
BpmCandidateStrategyEnum.APPROVE_USER_SELECT === node.candidateStrategy)
) { ) {
nextAssigneesActivityNode.value.push(node); nextAssigneesActivityNode.value.push(node);
} }
@ -377,7 +378,7 @@ function validateNextAssignees() {
} }
// 如果需要自选审批人,则校验每个节点是否都已配置审批人 // 如果需要自选审批人,则校验每个节点是否都已配置审批人
for (const item of nextAssigneesActivityNode.value) { for (const item of nextAssigneesActivityNode.value) {
if (isEmpty(approveReasonForm.nextAssignees[item.id])) { if (isEmpty(item.candidateUsers) && isEmpty(approveReasonForm.nextAssignees[item.id])) {
message.warning('下一个节点的审批人不能为空!'); message.warning('下一个节点的审批人不能为空!');
return false; return false;
} }
@ -858,9 +859,10 @@ defineExpose({ loadTodoTask });
name="nextAssignees" name="nextAssignees"
v-if="nextAssigneesActivityNode.length > 0" v-if="nextAssigneesActivityNode.length > 0"
> >
<div class="-mb-8 -mt-3.5 ml-2.5"> <div class="ml-2.5">
<ProcessInstanceTimeline <ProcessInstanceTimeline
ref="nextAssigneesTimelineRef" ref="nextAssigneesTimelineRef"
embedded
:activity-nodes="nextAssigneesActivityNode" :activity-nodes="nextAssigneesActivityNode"
:show-status-icon="false" :show-status-icon="false"
:enable-approve-user-select="true" :enable-approve-user-select="true"

View File

@ -30,12 +30,14 @@ defineOptions({ name: 'BpmProcessInstanceTimeline' });
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
activityNodes: BpmProcessInstanceApi.ApprovalNodeInfo[]; // 审批节点信息 activityNodes: BpmProcessInstanceApi.ApprovalNodeInfo[]; // 审批节点信息
embedded?: boolean; // 是否嵌入表单使用(缩小顶部内边距,避免与表单项 label 间距过大)
enableApproveUserSelect?: boolean; // 是否开启审批人自选功能 enableApproveUserSelect?: boolean; // 是否开启审批人自选功能
showStatusIcon?: boolean; // 是否显示头像右下角状态图标 showStatusIcon?: boolean; // 是否显示头像右下角状态图标
}>(), }>(),
{ {
showStatusIcon: true, // 默认值为 true showStatusIcon: true, // 默认值为 true
enableApproveUserSelect: false, // 默认值为 false enableApproveUserSelect: false, // 默认值为 false
embedded: false, // 默认值为 false
}, },
); );
@ -247,7 +249,7 @@ defineExpose({ setCustomApproveUsers, batchSetCustomApproveUsers });
<template> <template>
<div> <div>
<Timeline class="pt-5"> <Timeline :class="embedded ? 'pt-2' : 'pt-5'">
<!-- 遍历每个审批节点 --> <!-- 遍历每个审批节点 -->
<TimelineItem <TimelineItem
v-for="(activity, index) in activityNodes" v-for="(activity, index) in activityNodes"

View File

@ -364,7 +364,8 @@ async function initNextAssigneesFormField() {
BpmCandidateStrategyEnum.START_USER_SELECT === BpmCandidateStrategyEnum.START_USER_SELECT ===
node.candidateStrategy) || node.candidateStrategy) ||
// 情况二:当前节点是审批人自选 // 情况二:当前节点是审批人自选
BpmCandidateStrategyEnum.APPROVE_USER_SELECT === node.candidateStrategy (isEmpty(node.candidateUsers) &&
BpmCandidateStrategyEnum.APPROVE_USER_SELECT === node.candidateStrategy)
) { ) {
nextAssigneesActivityNode.value.push(node); nextAssigneesActivityNode.value.push(node);
} }
@ -406,7 +407,7 @@ function validateNextAssignees() {
} }
// 如果需要自选审批人,则校验每个节点是否都已配置审批人 // 如果需要自选审批人,则校验每个节点是否都已配置审批人
for (const item of nextAssigneesActivityNode.value) { for (const item of nextAssigneesActivityNode.value) {
if (isEmpty(approveReasonForm.nextAssignees[item.id])) { if (isEmpty(item.candidateUsers) && isEmpty(approveReasonForm.nextAssignees[item.id])) {
ElMessage.warning('下一个节点的审批人不能为空!'); ElMessage.warning('下一个节点的审批人不能为空!');
return false; return false;
} }
@ -881,9 +882,10 @@ defineExpose({ loadTodoTask });
prop="nextAssignees" prop="nextAssignees"
v-if="nextAssigneesActivityNode.length > 0" v-if="nextAssigneesActivityNode.length > 0"
> >
<div class="-mb-8 -mt-3.5 ml-2.5"> <div>
<ProcessInstanceTimeline <ProcessInstanceTimeline
ref="nextAssigneesTimelineRef" ref="nextAssigneesTimelineRef"
embedded
:activity-nodes="nextAssigneesActivityNode" :activity-nodes="nextAssigneesActivityNode"
:show-status-icon="false" :show-status-icon="false"
:enable-approve-user-select="true" :enable-approve-user-select="true"

View File

@ -30,12 +30,14 @@ defineOptions({ name: 'BpmProcessInstanceTimeline' });
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
activityNodes: BpmProcessInstanceApi.ApprovalNodeInfo[]; // 审批节点信息 activityNodes: BpmProcessInstanceApi.ApprovalNodeInfo[]; // 审批节点信息
embedded?: boolean; // 是否嵌入表单使用(缩小顶部内边距,避免与表单项 label 间距过大)
enableApproveUserSelect?: boolean; // 是否开启审批人自选功能 enableApproveUserSelect?: boolean; // 是否开启审批人自选功能
showStatusIcon?: boolean; // 是否显示头像右下角状态图标 showStatusIcon?: boolean; // 是否显示头像右下角状态图标
}>(), }>(),
{ {
showStatusIcon: true, // 默认值为 true showStatusIcon: true, // 默认值为 true
enableApproveUserSelect: false, // 默认值为 false enableApproveUserSelect: false, // 默认值为 false
embedded: false, // 默认值为 false
}, },
); );
@ -253,7 +255,7 @@ defineExpose({ setCustomApproveUsers, batchSetCustomApproveUsers });
<template> <template>
<div> <div>
<ElTimeline class="pt-5"> <ElTimeline :class="embedded ? 'pt-2' : 'pt-5'">
<!-- 遍历每个审批节点 --> <!-- 遍历每个审批节点 -->
<ElTimelineItem <ElTimelineItem
v-for="(activity, index) in activityNodes" v-for="(activity, index) in activityNodes"