|
|
@@ -9,71 +9,80 @@
|
|
|
<el-input v-model="nodeName" @blur="updateNodeName" />
|
|
|
</el-form-item>
|
|
|
<template v-if="selectedNode.type === 'approval-node'">
|
|
|
- <el-form-item label="审批对象类型">
|
|
|
- <el-select
|
|
|
- v-model="nodeProps.assigneeType"
|
|
|
- placeholder="请选择审批对象类型"
|
|
|
- style="width: 100%"
|
|
|
- @change="nodeProps.assigneeValue = ''"
|
|
|
- >
|
|
|
- <el-option label="审批角色" value="ROLE" />
|
|
|
- <el-option label="发起人自己" value="SELF" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item v-if="nodeProps.assigneeType === 'ROLE'" label="审批角色">
|
|
|
- <el-select
|
|
|
- v-model="nodeProps.assigneeValue"
|
|
|
- filterable
|
|
|
- clearable
|
|
|
- placeholder="请选择审批角色"
|
|
|
- style="width: 100%"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="role in roleList"
|
|
|
- :key="role.id"
|
|
|
- :label="role.roleName"
|
|
|
- :value="role.roleCode"
|
|
|
+ <template v-if="!nodeProps.subNodesEnabled">
|
|
|
+ <el-form-item label="审批对象类型">
|
|
|
+ <el-select
|
|
|
+ v-model="nodeProps.assigneeType"
|
|
|
+ placeholder="请选择审批对象类型"
|
|
|
+ style="width: 100%"
|
|
|
+ @change="nodeProps.assigneeValue = ''"
|
|
|
+ >
|
|
|
+ <el-option label="审批角色" value="ROLE" />
|
|
|
+ <el-option label="发起人自己" value="SELF" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="nodeProps.assigneeType === 'ROLE'" label="审批角色">
|
|
|
+ <el-select
|
|
|
+ v-model="nodeProps.assigneeValue"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ placeholder="请选择审批角色"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="role in roleList"
|
|
|
+ :key="role.id"
|
|
|
+ :label="role.roleName"
|
|
|
+ :value="role.roleCode"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="审批方式">
|
|
|
+ <el-select v-model="nodeProps.approveMode" placeholder="请选择" style="width: 100%">
|
|
|
+ <el-option label="或签(一人通过即可)" value="or" />
|
|
|
+ <el-option label="会签(全部通过)" value="and" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <template #label>
|
|
|
+ 审批时限
|
|
|
+ <el-tooltip placement="top" content="单位:小时,为空则不计算超时">
|
|
|
+ <el-icon style="margin-left: 4px; cursor: help;"><QuestionFilled /></el-icon>
|
|
|
+ </el-tooltip>
|
|
|
+ </template>
|
|
|
+ <el-input-number
|
|
|
+ v-model="nodeProps.timeoutHours"
|
|
|
+ :min="1"
|
|
|
+ :max="720"
|
|
|
+ :precision="0"
|
|
|
+ placeholder="不填表示无限制"
|
|
|
+ controls-position="right"
|
|
|
+ style="width: 100%"
|
|
|
/>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="审批方式">
|
|
|
- <el-select v-model="nodeProps.approveMode" placeholder="请选择" style="width: 100%">
|
|
|
- <el-option label="或签(一人通过即可)" value="or" />
|
|
|
- <el-option label="会签(全部通过)" value="and" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <template #label>
|
|
|
- 审批时限
|
|
|
- <el-tooltip placement="top" content="单位:小时,为空则不计算超时">
|
|
|
- <el-icon style="margin-left: 4px; cursor: help;"><QuestionFilled /></el-icon>
|
|
|
- </el-tooltip>
|
|
|
- </template>
|
|
|
- <el-input-number
|
|
|
- v-model="nodeProps.timeoutHours"
|
|
|
- :min="1"
|
|
|
- :max="720"
|
|
|
- :precision="0"
|
|
|
- placeholder="不填表示无限制"
|
|
|
- controls-position="right"
|
|
|
- style="width: 100%"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="超时动作">
|
|
|
- <el-select v-model="nodeProps.timeoutAction" placeholder="请选择" style="width: 100%">
|
|
|
- <el-option label="提醒" value="remind" />
|
|
|
- <el-option label="无" value="" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <template #label>
|
|
|
- 审批时间字段
|
|
|
- <el-tooltip placement="top" content="导入时按此字段的值作为该节点的审批时间,Excel 列名需与此一致">
|
|
|
- <el-icon style="margin-left: 4px; cursor: help;"><QuestionFilled /></el-icon>
|
|
|
- </el-tooltip>
|
|
|
- </template>
|
|
|
- <el-input v-model="nodeProps.approveTimeField" placeholder="如:审批时间" />
|
|
|
- </el-form-item>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="超时动作">
|
|
|
+ <el-select v-model="nodeProps.timeoutAction" placeholder="请选择" style="width: 100%">
|
|
|
+ <el-option label="提醒" value="remind" />
|
|
|
+ <el-option label="无" value="" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <template #label>
|
|
|
+ 审批时间字段
|
|
|
+ <el-tooltip placement="top" content="导入时按此字段的值作为该节点的审批时间,Excel 列名需与此一致">
|
|
|
+ <el-icon style="margin-left: 4px; cursor: help;"><QuestionFilled /></el-icon>
|
|
|
+ </el-tooltip>
|
|
|
+ </template>
|
|
|
+ <el-input v-model="nodeProps.approveTimeField" placeholder="如:审批时间" />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <el-alert type="info" :closable="false" show-icon style="margin-bottom: 12px;">
|
|
|
+ <template #title>
|
|
|
+ 已启用子节点,该节点的审批由子节点完成,无需配置审批对象。
|
|
|
+ </template>
|
|
|
+ </el-alert>
|
|
|
+ </template>
|
|
|
|
|
|
<!-- 子节点配置 -->
|
|
|
<el-form-item label="启用子节点">
|
|
|
@@ -116,7 +125,7 @@
|
|
|
<div class="row-info">
|
|
|
<div class="row-name">{{ sub.name || `子节点 ${index + 1}` }}</div>
|
|
|
<div class="row-role">
|
|
|
- {{ getRoleName(sub.assigneeValue) || '未设置审批角色' }}
|
|
|
+ {{ getSubNodeAssigneeDisplay(sub) }}
|
|
|
<span v-if="sub.approveMode === 'and'"> · 会签</span>
|
|
|
<span v-else> · 或签</span>
|
|
|
</div>
|
|
|
@@ -150,7 +159,18 @@
|
|
|
<el-form-item label="子节点名称">
|
|
|
<el-input v-model="nodeProps.subNodes[selectedSubNodeIndex].name" placeholder="如:初审" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="审批角色">
|
|
|
+ <el-form-item label="审批对象类型">
|
|
|
+ <el-select
|
|
|
+ v-model="nodeProps.subNodes[selectedSubNodeIndex].assigneeType"
|
|
|
+ placeholder="请选择审批对象类型"
|
|
|
+ style="width: 100%"
|
|
|
+ @change="nodeProps.subNodes[selectedSubNodeIndex].assigneeValue = ''"
|
|
|
+ >
|
|
|
+ <el-option label="审批角色" value="ROLE" />
|
|
|
+ <el-option label="发起人自己" value="SELF" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="nodeProps.subNodes[selectedSubNodeIndex].assigneeType === 'ROLE'" label="审批角色">
|
|
|
<el-select
|
|
|
v-model="nodeProps.subNodes[selectedSubNodeIndex].assigneeValue"
|
|
|
filterable
|
|
|
@@ -321,6 +341,13 @@ function getRoleName(roleCode?: string): string {
|
|
|
return role ? role.roleName : roleCode
|
|
|
}
|
|
|
|
|
|
+function getSubNodeAssigneeDisplay(sub: any): string {
|
|
|
+ const type = sub.assigneeType || 'ROLE'
|
|
|
+ if (type === 'SELF') return '发起人自己'
|
|
|
+ if (type === 'USER') return sub.assigneeValue ? `指定用户:${sub.assigneeValue}` : '未设置指定用户'
|
|
|
+ return getRoleName(sub.assigneeValue) || '未设置审批角色'
|
|
|
+}
|
|
|
+
|
|
|
function onSubNodesEnabledChange(enabled: boolean | string | number) {
|
|
|
if (enabled && !Array.isArray(nodeProps.value.subNodes)) {
|
|
|
nodeProps.value.subNodes = []
|
|
|
@@ -338,6 +365,7 @@ function addSubNode() {
|
|
|
nodeProps.value.subNodes.push({
|
|
|
id: generateSubNodeId(),
|
|
|
name: '',
|
|
|
+ assigneeType: 'ROLE',
|
|
|
assigneeValue: '',
|
|
|
approveMode: 'or',
|
|
|
timeoutHours: undefined,
|