mirror of
https://gitee.com/hhyykk/ipms-sjy-ui.git
synced 2025-02-01 19:24:58 +08:00
【功能完善】 Simple 设计器,发起节点权限展示
【缺陷修复】流程表单字段变化时,节点字段权限不会变化
This commit is contained in:
parent
6f724d9d52
commit
732b1741c1
@ -54,6 +54,11 @@ const props = defineProps({
|
|||||||
modelName: {
|
modelName: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false
|
required: false
|
||||||
|
},
|
||||||
|
// 可发起流程的人员编号
|
||||||
|
startUserIds : {
|
||||||
|
type: Array,
|
||||||
|
required: false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -74,6 +79,7 @@ provide('userList', userOptions)
|
|||||||
provide('deptList', deptOptions)
|
provide('deptList', deptOptions)
|
||||||
provide('userGroupList', userGroupOptions)
|
provide('userGroupList', userGroupOptions)
|
||||||
provide('deptTree', deptTreeOptions)
|
provide('deptTree', deptTreeOptions)
|
||||||
|
provide('startUserIds', props.startUserIds)
|
||||||
|
|
||||||
const message = useMessage() // 国际化
|
const message = useMessage() // 国际化
|
||||||
const processNodeTree = ref<SimpleFlowNode | undefined>()
|
const processNodeTree = ref<SimpleFlowNode | undefined>()
|
||||||
@ -185,6 +191,7 @@ onMounted(async () => {
|
|||||||
if (formType.value === 10) {
|
if (formType.value === 10) {
|
||||||
const bpmnForm = (await getForm(bpmnModel.formId)) as unknown as FormVO
|
const bpmnForm = (await getForm(bpmnModel.formId)) as unknown as FormVO
|
||||||
formFields.value = bpmnForm?.fields
|
formFields.value = bpmnForm?.fields
|
||||||
|
console.log('formFields.value', formFields.value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ import {
|
|||||||
NODE_DEFAULT_NAME,
|
NODE_DEFAULT_NAME,
|
||||||
AssignStartUserHandlerType,
|
AssignStartUserHandlerType,
|
||||||
AssignEmptyHandlerType,
|
AssignEmptyHandlerType,
|
||||||
FieldPermissionType,
|
FieldPermissionType
|
||||||
} from './consts'
|
} from './consts'
|
||||||
import { parseFormFields } from '@/components/FormCreate/src/utils/index'
|
import { parseFormFields } from '@/components/FormCreate/src/utils/index'
|
||||||
export function useWatchNode(props: { flowNode: SimpleFlowNode }): Ref<SimpleFlowNode> {
|
export function useWatchNode(props: { flowNode: SimpleFlowNode }): Ref<SimpleFlowNode> {
|
||||||
@ -52,9 +52,33 @@ export function useFormFieldsPermission(defaultPermission: FieldPermissionType)
|
|||||||
|
|
||||||
const getNodeConfigFormFields = (nodeFormFields?: Array<Record<string, string>>) => {
|
const getNodeConfigFormFields = (nodeFormFields?: Array<Record<string, string>>) => {
|
||||||
nodeFormFields = toRaw(nodeFormFields)
|
nodeFormFields = toRaw(nodeFormFields)
|
||||||
fieldsPermissionConfig.value =
|
if (!nodeFormFields || nodeFormFields.length === 0) {
|
||||||
cloneDeep(nodeFormFields) || getDefaultFieldsPermission(unref(formFields))
|
fieldsPermissionConfig.value = getDefaultFieldsPermission(unref(formFields))
|
||||||
|
} else {
|
||||||
|
fieldsPermissionConfig.value = mergeFieldsPermission(nodeFormFields, unref(formFields))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
// 合并已经设置的表单字段权限,当前流程表单字段 (可能新增,或删除了字段)
|
||||||
|
const mergeFieldsPermission = (
|
||||||
|
formFieldsPermisson: Array<Record<string, string>>,
|
||||||
|
formFields?: string[]
|
||||||
|
) => {
|
||||||
|
let mergedFieldsPermission: Array<Record<string, any>> = []
|
||||||
|
if (formFields) {
|
||||||
|
mergedFieldsPermission = parseFormCreateFields(formFields).map((item) => {
|
||||||
|
const found = formFieldsPermisson.find(
|
||||||
|
(fieldPermission) => fieldPermission.field == item.field
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
field: item.field,
|
||||||
|
title: item.title,
|
||||||
|
permission: found ? found.permission : defaultPermission
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return mergedFieldsPermission
|
||||||
|
}
|
||||||
|
|
||||||
// 默认的表单权限: 获取表单的所有字段,设置字段默认权限为只读
|
// 默认的表单权限: 获取表单的所有字段,设置字段默认权限为只读
|
||||||
const getDefaultFieldsPermission = (formFields?: string[]) => {
|
const getDefaultFieldsPermission = (formFields?: string[]) => {
|
||||||
let defaultFieldsPermission: Array<Record<string, any>> = []
|
let defaultFieldsPermission: Array<Record<string, any>> = []
|
||||||
|
@ -25,7 +25,20 @@
|
|||||||
</template>
|
</template>
|
||||||
<el-tabs type="border-card" v-model="activeTabName">
|
<el-tabs type="border-card" v-model="activeTabName">
|
||||||
<el-tab-pane label="权限" name="user">
|
<el-tab-pane label="权限" name="user">
|
||||||
<div> 待实现 </div>
|
<el-text v-if="!startUserIds || startUserIds.length === 0"> 全部成员可以发起流程 </el-text>
|
||||||
|
<el-text v-else-if="startUserIds.length == 1">
|
||||||
|
{{ getUserNicknames(startUserIds) }} 可发起流程
|
||||||
|
</el-text>
|
||||||
|
<el-text v-else>
|
||||||
|
<el-tooltip
|
||||||
|
class="box-item"
|
||||||
|
effect="dark"
|
||||||
|
placement="top"
|
||||||
|
:content="getUserNicknames(startUserIds)"
|
||||||
|
>
|
||||||
|
{{ getUserNicknames(startUserIds.slice(0,2)) }} 等 {{ startUserIds.length }} 人可发起流程
|
||||||
|
</el-tooltip>
|
||||||
|
</el-text>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="表单字段权限" name="fields" v-if="formType === 10">
|
<el-tab-pane label="表单字段权限" name="fields" v-if="formType === 10">
|
||||||
<div class="field-setting-pane">
|
<div class="field-setting-pane">
|
||||||
@ -86,7 +99,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { SimpleFlowNode, NodeType, FieldPermissionType, START_USER_BUTTON_SETTING } from '../consts'
|
import { SimpleFlowNode, NodeType, FieldPermissionType, START_USER_BUTTON_SETTING } from '../consts'
|
||||||
import { useWatchNode, useDrawer, useNodeName, useFormFieldsPermission } from '../node'
|
import { useWatchNode, useDrawer, useNodeName, useFormFieldsPermission } from '../node'
|
||||||
|
import * as UserApi from '@/api/system/user'
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: 'StartUserNodeConfig'
|
name: 'StartUserNodeConfig'
|
||||||
})
|
})
|
||||||
@ -96,6 +109,10 @@ const props = defineProps({
|
|||||||
required: true
|
required: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
// 可发起流程的用户编号
|
||||||
|
const startUserIds = inject<Ref<any[]>>('startUserIds')
|
||||||
|
// 用户列表
|
||||||
|
const userOptions = inject<Ref<UserApi.UserVO[]>>('userList')
|
||||||
// 抽屉配置
|
// 抽屉配置
|
||||||
const { settingVisible, closeDrawer, openDrawer } = useDrawer()
|
const { settingVisible, closeDrawer, openDrawer } = useDrawer()
|
||||||
// 当前节点
|
// 当前节点
|
||||||
@ -108,12 +125,23 @@ const activeTabName = ref('user')
|
|||||||
const { formType, fieldsPermissionConfig, getNodeConfigFormFields } = useFormFieldsPermission(
|
const { formType, fieldsPermissionConfig, getNodeConfigFormFields } = useFormFieldsPermission(
|
||||||
FieldPermissionType.WRITE
|
FieldPermissionType.WRITE
|
||||||
)
|
)
|
||||||
|
const getUserNicknames = (userIds: number[]): string => {
|
||||||
|
if (!userIds || userIds.length === 0) {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
const nicknames: string[] = []
|
||||||
|
userIds.forEach((userId) => {
|
||||||
|
const found = userOptions?.value.find((item) => item.id === userId)
|
||||||
|
if (found && found.nickname) {
|
||||||
|
nicknames.push(found.nickname)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return nicknames.join(',')
|
||||||
|
}
|
||||||
// 保存配置
|
// 保存配置
|
||||||
const saveConfig = async () => {
|
const saveConfig = async () => {
|
||||||
activeTabName.value = 'user'
|
activeTabName.value = 'user'
|
||||||
currentNode.value.name = nodeName.value!
|
currentNode.value.name = nodeName.value!
|
||||||
// TODO 暂时写死。后续可以显示谁有权限可以发起
|
|
||||||
currentNode.value.showText = '已设置'
|
currentNode.value.showText = '已设置'
|
||||||
// 设置表单权限
|
// 设置表单权限
|
||||||
currentNode.value.fieldsPermission = fieldsPermissionConfig.value
|
currentNode.value.fieldsPermission = fieldsPermissionConfig.value
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
:model-id="modelData.id"
|
:model-id="modelData.id"
|
||||||
:model-key="modelData.key"
|
:model-key="modelData.key"
|
||||||
:model-name="modelData.name"
|
:model-name="modelData.name"
|
||||||
:value="modelData.bpmnXml"
|
:start-user-ids="modelData.startUserIds"
|
||||||
ref="simpleEditorRef"
|
ref="simpleEditorRef"
|
||||||
@success="handleDesignSuccess"
|
@success="handleDesignSuccess"
|
||||||
/>
|
/>
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
:model-id="modelId"
|
:model-id="modelId"
|
||||||
:model-key="modelKey"
|
:model-key="modelKey"
|
||||||
:model-name="modelName"
|
:model-name="modelName"
|
||||||
|
:start-user-ids="startUserIds"
|
||||||
@success="handleSuccess"
|
@success="handleSuccess"
|
||||||
ref="designerRef"
|
ref="designerRef"
|
||||||
/>
|
/>
|
||||||
@ -20,6 +21,7 @@ const props = defineProps<{
|
|||||||
modelId?: string
|
modelId?: string
|
||||||
modelKey?: string
|
modelKey?: string
|
||||||
modelName?: string
|
modelName?: string
|
||||||
|
startUserIds?: number[]
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const emit = defineEmits(['success'])
|
const emit = defineEmits(['success'])
|
||||||
|
Loading…
Reference in New Issue
Block a user