抄送人表单字段权限

This commit is contained in:
caixiaofeng 2023-11-24 23:11:29 +08:00
parent 196409aa9e
commit d1b1855074
4 changed files with 98 additions and 4 deletions

View File

@ -148,7 +148,17 @@ const useNode = (node: Ref<FlowNode>, fields: Ref<Field[]>) => {
type: 'cc',
name: '抄送人',
child: child,
users: []
users: [],
formProperties: fields.value.map(item => {
return {
id: item.id,
name: item.title,
readable: true,
writeable: false,
hidden: false,
required: false
} as FormProperty
})
} as CcNode
if (child) {
child.pid = id

View File

@ -1,4 +1,7 @@
import { FlowNode } from '../Node/index'
import {FormProperty} from "~/views/flowDesign/index";
export interface CcNode extends FlowNode {
users: string[]
// 表单字段
formProperties: FormProperty[]
}

View File

@ -2,7 +2,7 @@
import Segmented from '~/components/Segmented'
import {useVModels} from '@vueuse/core'
import {ApprovalNode} from '../nodes/Approval/index'
import {computed, inject, Ref, ref} from "vue";
import {computed, inject, Ref, ref, watchEffect} from "vue";
import {CircleCheck, CircleClose, Switch, Plus, Minus} from "@element-plus/icons-vue";
import {Field} from "~/components/Render/index";
import {FormProperty} from "~/views/flowDesign/index";
@ -123,6 +123,26 @@ const changeHidden = (row: FormProperty) => {
row.required = false
}
}
watchEffect(() => {
const formProperties = node.value.formProperties
node.value.formProperties = fields.value.filter(e => e.value !== undefined).map(e => ({
id: e.id,
name: e.title,
readable: e.props.disabled || false,
writeable: !e.props.disabled || false,
hidden: e.props.hidden || false,
required: (e.props.required && !e.props.disabled) || false
}))
node.value.formProperties.forEach(item => {
const properties = formProperties.find(f => f.id === item.id)
if (properties) {
item.readable = properties.readable
item.writeable = properties.writeable
item.hidden = properties.hidden
item.required = properties.required
}
})
})
</script>
<template>

View File

@ -2,7 +2,8 @@
import Segmented from '~/components/Segmented'
import {useVModels} from '@vueuse/core'
import {CcNode} from '../nodes/Cc/index'
import {ref} from "vue";
import {computed, inject, Ref, ref, watchEffect} from "vue";
import {Field} from "~/components/Render/index";
const activeName = ref('properties')
@ -15,6 +16,48 @@ const $emits = defineEmits<{
(e: 'update:node', modelValue: CcNode): void
}>()
const {node} = useVModels($props, $emits)
const {fields} = inject<{
fields: Ref<Field[]>
}>('nodeHooks')!
const allReadable = computed({
get() {
return node.value.formProperties.every(e => e.readable)
},
set(val) {
node.value.formProperties.forEach(e => e.readable = val)
allHidden.value = !val
}
})
const allHidden = computed({
get() {
return node.value.formProperties.every(e => e.hidden)
},
set(val) {
node.value.formProperties.forEach(e => e.hidden = val)
allReadable.value = !val
}
})
watchEffect(() => {
const formProperties = node.value.formProperties
node.value.formProperties = fields.value.filter(e => e.value !== undefined).map(e => ({
id: e.id,
name: e.title,
readable: true,
writeable: false,
required: false,
hidden: e.props.hidden || false,
}))
node.value.formProperties.forEach(item => {
const properties = formProperties.find(f => f.id === item.id)
if (properties) {
item.readable = properties.readable
item.writeable = properties.writeable
item.hidden = properties.hidden
item.required = properties.required
}
})
})
</script>
<template>
@ -27,7 +70,25 @@ const {node} = useVModels($props, $emits)
</el-form>
</el-tab-pane>
<el-tab-pane label="表单权限" name="formPermissions">
待添加...
<el-table :data="node.formProperties" style="width: 100%">
<el-table-column prop="name" label="字段"/>
<el-table-column prop="readable">
<template #header>
<el-checkbox v-model="allReadable" label="可读"/>
</template>
<template #default="{row}">
<el-checkbox v-model="row.readable" @change="row.hidden=!$event"/>
</template>
</el-table-column>
<el-table-column prop="hidden">
<template #header>
<el-checkbox v-model="allHidden" label="隐藏"/>
</template>
<template #default="{row}">
<el-checkbox v-model="row.hidden" @change="row.readable=!$event"/>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</segmented>
</template>