Skip to content

Commit 732b174

Browse files
committed
【功能完善】 Simple 设计器,发起节点权限展示
【缺陷修复】流程表单字段变化时,节点字段权限不会变化
1 parent 6f724d9 commit 732b174

File tree

5 files changed

+69
-8
lines changed

5 files changed

+69
-8
lines changed

src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ const props = defineProps({
5454
modelName: {
5555
type: String,
5656
required: false
57+
},
58+
// 可发起流程的人员编号
59+
startUserIds : {
60+
type: Array,
61+
required: false
5762
}
5863
})
5964
@@ -74,6 +79,7 @@ provide('userList', userOptions)
7479
provide('deptList', deptOptions)
7580
provide('userGroupList', userGroupOptions)
7681
provide('deptTree', deptTreeOptions)
82+
provide('startUserIds', props.startUserIds)
7783
7884
const message = useMessage() // 国际化
7985
const processNodeTree = ref<SimpleFlowNode | undefined>()
@@ -185,6 +191,7 @@ onMounted(async () => {
185191
if (formType.value === 10) {
186192
const bpmnForm = (await getForm(bpmnModel.formId)) as unknown as FormVO
187193
formFields.value = bpmnForm?.fields
194+
console.log('formFields.value', formFields.value)
188195
}
189196
}
190197
}

src/components/SimpleProcessDesignerV2/src/node.ts

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
NODE_DEFAULT_NAME,
1515
AssignStartUserHandlerType,
1616
AssignEmptyHandlerType,
17-
FieldPermissionType,
17+
FieldPermissionType
1818
} from './consts'
1919
import { parseFormFields } from '@/components/FormCreate/src/utils/index'
2020
export function useWatchNode(props: { flowNode: SimpleFlowNode }): Ref<SimpleFlowNode> {
@@ -52,9 +52,33 @@ export function useFormFieldsPermission(defaultPermission: FieldPermissionType)
5252

5353
const getNodeConfigFormFields = (nodeFormFields?: Array<Record<string, string>>) => {
5454
nodeFormFields = toRaw(nodeFormFields)
55-
fieldsPermissionConfig.value =
56-
cloneDeep(nodeFormFields) || getDefaultFieldsPermission(unref(formFields))
55+
if (!nodeFormFields || nodeFormFields.length === 0) {
56+
fieldsPermissionConfig.value = getDefaultFieldsPermission(unref(formFields))
57+
} else {
58+
fieldsPermissionConfig.value = mergeFieldsPermission(nodeFormFields, unref(formFields))
59+
}
5760
}
61+
// 合并已经设置的表单字段权限,当前流程表单字段 (可能新增,或删除了字段)
62+
const mergeFieldsPermission = (
63+
formFieldsPermisson: Array<Record<string, string>>,
64+
formFields?: string[]
65+
) => {
66+
let mergedFieldsPermission: Array<Record<string, any>> = []
67+
if (formFields) {
68+
mergedFieldsPermission = parseFormCreateFields(formFields).map((item) => {
69+
const found = formFieldsPermisson.find(
70+
(fieldPermission) => fieldPermission.field == item.field
71+
)
72+
return {
73+
field: item.field,
74+
title: item.title,
75+
permission: found ? found.permission : defaultPermission
76+
}
77+
})
78+
}
79+
return mergedFieldsPermission
80+
}
81+
5882
// 默认的表单权限: 获取表单的所有字段,设置字段默认权限为只读
5983
const getDefaultFieldsPermission = (formFields?: string[]) => {
6084
let defaultFieldsPermission: Array<Record<string, any>> = []

src/components/SimpleProcessDesignerV2/src/nodes-config/StartUserNodeConfig.vue

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,20 @@
2525
</template>
2626
<el-tabs type="border-card" v-model="activeTabName">
2727
<el-tab-pane label="权限" name="user">
28-
<div> 待实现 </div>
28+
<el-text v-if="!startUserIds || startUserIds.length === 0"> 全部成员可以发起流程 </el-text>
29+
<el-text v-else-if="startUserIds.length == 1">
30+
{{ getUserNicknames(startUserIds) }} 可发起流程
31+
</el-text>
32+
<el-text v-else>
33+
<el-tooltip
34+
class="box-item"
35+
effect="dark"
36+
placement="top"
37+
:content="getUserNicknames(startUserIds)"
38+
>
39+
{{ getUserNicknames(startUserIds.slice(0,2)) }} 等 {{ startUserIds.length }} 人可发起流程
40+
</el-tooltip>
41+
</el-text>
2942
</el-tab-pane>
3043
<el-tab-pane label="表单字段权限" name="fields" v-if="formType === 10">
3144
<div class="field-setting-pane">
@@ -86,7 +99,7 @@
8699
<script setup lang="ts">
87100
import { SimpleFlowNode, NodeType, FieldPermissionType, START_USER_BUTTON_SETTING } from '../consts'
88101
import { useWatchNode, useDrawer, useNodeName, useFormFieldsPermission } from '../node'
89-
102+
import * as UserApi from '@/api/system/user'
90103
defineOptions({
91104
name: 'StartUserNodeConfig'
92105
})
@@ -96,6 +109,10 @@ const props = defineProps({
96109
required: true
97110
}
98111
})
112+
// 可发起流程的用户编号
113+
const startUserIds = inject<Ref<any[]>>('startUserIds')
114+
// 用户列表
115+
const userOptions = inject<Ref<UserApi.UserVO[]>>('userList')
99116
// 抽屉配置
100117
const { settingVisible, closeDrawer, openDrawer } = useDrawer()
101118
// 当前节点
@@ -108,12 +125,23 @@ const activeTabName = ref('user')
108125
const { formType, fieldsPermissionConfig, getNodeConfigFormFields } = useFormFieldsPermission(
109126
FieldPermissionType.WRITE
110127
)
111-
128+
const getUserNicknames = (userIds: number[]): string => {
129+
if (!userIds || userIds.length === 0) {
130+
return ''
131+
}
132+
const nicknames: string[] = []
133+
userIds.forEach((userId) => {
134+
const found = userOptions?.value.find((item) => item.id === userId)
135+
if (found && found.nickname) {
136+
nicknames.push(found.nickname)
137+
}
138+
})
139+
return nicknames.join(',')
140+
}
112141
// 保存配置
113142
const saveConfig = async () => {
114143
activeTabName.value = 'user'
115144
currentNode.value.name = nodeName.value!
116-
// TODO 暂时写死。后续可以显示谁有权限可以发起
117145
currentNode.value.showText = '已设置'
118146
// 设置表单权限
119147
currentNode.value.fieldsPermission = fieldsPermissionConfig.value

src/views/bpm/model/form/ProcessDesign.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
:model-id="modelData.id"
2020
:model-key="modelData.key"
2121
:model-name="modelData.name"
22-
:value="modelData.bpmnXml"
22+
:start-user-ids="modelData.startUserIds"
2323
ref="simpleEditorRef"
2424
@success="handleDesignSuccess"
2525
/>

src/views/bpm/simple/SimpleModelDesign.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
:model-id="modelId"
55
:model-key="modelKey"
66
:model-name="modelName"
7+
:start-user-ids="startUserIds"
78
@success="handleSuccess"
89
ref="designerRef"
910
/>
@@ -20,6 +21,7 @@ const props = defineProps<{
2021
modelId?: string
2122
modelKey?: string
2223
modelName?: string
24+
startUserIds?: number[]
2325
}>()
2426
2527
const emit = defineEmits(['success'])

0 commit comments

Comments
 (0)