浏览代码

fix: iframe页面的审批流节点人员类型配置,只允许选择‘外部指定(SCRM)’

wuwenyi 2 周之前
父节点
当前提交
5d898b9454

+ 13 - 4
src/views/flow/designer/DesignerPropertyPanel.vue

@@ -17,8 +17,8 @@
               style="width: 100%"
               @change="onAssigneeTypeChange"
             >
-              <el-option label="审批角色" value="ROLE" />
-              <el-option label="发起人自己" value="SELF" />
+              <el-option label="审批角色" value="ROLE" :disabled="embedded" />
+              <el-option label="发起人自己" value="SELF" :disabled="embedded" />
               <el-option label="外部指定(SCRM)" value="EXTERNAL" />
             </el-select>
           </el-form-item>
@@ -90,7 +90,7 @@
 
         <!-- 子节点配置 -->
         <el-form-item label="启用子节点">
-          <el-switch v-model="nodeProps.subNodesEnabled" active-text="是" inactive-text="否" @change="onSubNodesEnabledChange" />
+          <el-switch v-model="nodeProps.subNodesEnabled" :disabled="embedded" active-text="是" inactive-text="否" @change="onSubNodesEnabledChange" />
         </el-form-item>
         <template v-if="nodeProps.subNodesEnabled">
           <el-form-item label="执行方式">
@@ -311,6 +311,7 @@ const props = defineProps<{
   generateSubNodeId: () => string
   selectedSubNodeIndex: number | null
   drawerVisible: boolean
+  embedded: boolean
   saveCurrentNodeProps?: () => void
 }>()
 
@@ -320,7 +321,15 @@ const emit = defineEmits<{
   (e: 'deleteNode'): void
 }>()
 
-const { selectedNode, outgoingEdges, roleList, nodeProps, selectedSubNodeIndex, drawerVisible } = toRefs(props)
+const {
+  selectedNode,
+  outgoingEdges,
+  roleList,
+  nodeProps,
+  selectedSubNodeIndex,
+  drawerVisible,
+  embedded,
+} = toRefs(props)
 const { getEdgeTargetName, updateNodeName, onDefaultChange, onBranchBlur, generateSubNodeId, saveCurrentNodeProps } = props
 
 const nodeName = computed({

+ 5 - 3
src/views/flow/designer/index.vue

@@ -42,6 +42,7 @@
         :save-current-node-props="saveCurrentNodeProps"
         :selected-sub-node-index="selectedSubNodeIndex"
         :drawer-visible="drawerVisible"
+        :embedded="embedded"
         @update:selected-sub-node-index="selectedSubNodeIndex = $event"
         @update:drawer-visible="drawerVisible = $event"
         @delete-node="deleteSelectedNode"
@@ -85,6 +86,9 @@ function setContainer(el: Element | ComponentPublicInstance | null) {
   lfContainer.value = el as HTMLDivElement | undefined
 }
 
+// 被 SCRM 等宿主 iframe 内嵌时,顶部导航和左侧菜单都被隐藏,高度计算要去掉 Navbar
+const embedded = new URLSearchParams(window.location.search).get('embed') === '1' || isEmbedded()
+
 const {
   mode,
   flowInfoVisible,
@@ -123,12 +127,10 @@ const {
   addOption,
   removeOption,
   saveOptions
-} = useFlowDesigner(lfContainer)
+} = useFlowDesigner(lfContainer, embedded)
 
 const selectedSubNodeIndex = ref<number | null>(null)
 const drawerVisible = ref(false)
-// 被 SCRM 等宿主 iframe 内嵌时,顶部导航和左侧菜单都被隐藏,高度计算要去掉 Navbar
-const embedded = new URLSearchParams(window.location.search).get('embed') === '1' || isEmbedded()
 
 function addSubNodeFromCanvas() {
   if (!Array.isArray(nodeProps.subNodes)) {

+ 3 - 2
src/views/flow/designer/useFlowDesigner.ts

@@ -19,7 +19,7 @@ import type { Role } from '@/types/system'
 import type { FlowDefinition, FormField, FormFieldOption } from '@/types/flow'
 
 /* eslint-disable @typescript-eslint/no-explicit-any */
-export function useFlowDesigner(lfContainer: Ref<HTMLDivElement | undefined>) {
+export function useFlowDesigner(lfContainer: Ref<HTMLDivElement | undefined>, embedded: boolean) {
   const route = useRoute()
   const router = useRouter()
 
@@ -130,7 +130,8 @@ export function useFlowDesigner(lfContainer: Ref<HTMLDivElement | undefined>) {
   function getDefaultProps(type: string) {
     if (type === 'approval-node')
       return {
-        assigneeType: 'ROLE',
+        // 内嵌到 SCRM 时审批对象只允许「外部指定」,新节点默认即为 EXTERNAL
+        assigneeType: embedded ? 'EXTERNAL' : 'ROLE',
         assigneeValue: '',
         nodeKey: '',
         approveMode: 'or',