|
@@ -160,6 +160,39 @@
|
|
|
</el-form>
|
|
|
</div>
|
|
|
</el-tab-pane>
|
|
|
+ <el-tab-pane label="表单字段权限" v-if ="formType === 10">
|
|
|
+ <div class="field-setting-pane">
|
|
|
+ <div class="field-setting-desc">字段权限</div>
|
|
|
+ <div class="field-permit-title">
|
|
|
+ <div class="setting-title-label first-title">
|
|
|
+ 字段名称
|
|
|
+ </div>
|
|
|
+ <div class="other-titles">
|
|
|
+ <span class="setting-title-label">可编辑</span>
|
|
|
+ <span class="setting-title-label">只读</span>
|
|
|
+ <span class="setting-title-label">隐藏</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ class="field-setting-item"
|
|
|
+ v-for="(item, index) in currentNode.attributes.fieldsPermission"
|
|
|
+ :key="index"
|
|
|
+ >
|
|
|
+ <div class="field-setting-item-label"> {{ item.title }} </div>
|
|
|
+ <el-radio-group class="field-setting-item-group" v-model="item.permission">
|
|
|
+ <div class="item-radio-wrap">
|
|
|
+ <el-radio value="1" size="large" label="1"><span></span></el-radio>
|
|
|
+ </div>
|
|
|
+ <div class="item-radio-wrap">
|
|
|
+ <el-radio value="2" size="large" label="2"><span></span></el-radio>
|
|
|
+ </div>
|
|
|
+ <div class="item-radio-wrap">
|
|
|
+ <el-radio value="3" size="large" label="3"><span></span></el-radio>
|
|
|
+ </div>
|
|
|
+ </el-radio-group>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
</el-tabs>
|
|
|
<template #footer>
|
|
|
<el-divider />
|
|
@@ -174,6 +207,7 @@
|
|
|
<script setup lang="ts">
|
|
|
import { SimpleFlowNode, APPROVE_METHODS, CandidateStrategy, NodeType, NODE_DEFAULT_NAME } from '../consts'
|
|
|
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
|
|
+import { getDefaultFieldsPermission } from '../utils'
|
|
|
import { defaultProps } from '@/utils/tree'
|
|
|
import * as RoleApi from '@/api/system/role'
|
|
|
import * as DeptApi from '@/api/system/dept'
|
|
@@ -190,11 +224,9 @@ const props = defineProps({
|
|
|
required: true
|
|
|
}
|
|
|
})
|
|
|
-const emits = defineEmits<{
|
|
|
- 'update:modelValue': [node: SimpleFlowNode]
|
|
|
-}>()
|
|
|
+
|
|
|
const notAllowedMultiApprovers = ref(false)
|
|
|
-const currentNode = ref<SimpleFlowNode>(props.flowNode)
|
|
|
+const currentNode = ref<SimpleFlowNode>(props.flowNode);
|
|
|
const settingVisible = ref(false)
|
|
|
const roleOptions = inject<Ref<RoleApi.RoleVO[]>>('roleList') // 角色列表
|
|
|
const postOptions = inject<Ref<PostApi.PostVO[]>>('postList') // 岗位列表
|
|
@@ -202,6 +234,8 @@ const userOptions = inject<Ref<UserApi.UserVO[]>>('userList') // 用户列表
|
|
|
const deptOptions = inject<Ref<DeptApi.DeptVO[]>>('deptList') // 部门列表
|
|
|
const userGroupOptions = inject<Ref<UserGroupApi.UserGroupVO[]>>('userGroupList') // 用户组列表
|
|
|
const deptTreeOptions = inject('deptTree') // 部门树
|
|
|
+const formType = inject('formType') // 表单类型
|
|
|
+const formFields = inject<Ref<string[]>>('formFields')
|
|
|
const candidateParamArray = ref<any[]>([])
|
|
|
|
|
|
const closeDrawer = () => {
|
|
@@ -210,8 +244,6 @@ const closeDrawer = () => {
|
|
|
const saveConfig = () => {
|
|
|
currentNode.value.attributes.candidateParam = candidateParamArray.value?.join(',')
|
|
|
currentNode.value.showText = getShowText()
|
|
|
- console.log('currentNode value is ', currentNode.value)
|
|
|
- emits('update:modelValue', currentNode.value)
|
|
|
settingVisible.value = false
|
|
|
}
|
|
|
const getShowText = () : string => {
|
|
@@ -225,7 +257,6 @@ const getShowText = () : string => {
|
|
|
candidateNames.push(item.nickname)
|
|
|
}
|
|
|
})
|
|
|
- console.log("candidateNames is ", candidateNames)
|
|
|
showText = `指定成员:${candidateNames.join(',')}`
|
|
|
}
|
|
|
}
|
|
@@ -300,7 +331,23 @@ const getShowText = () : string => {
|
|
|
const open = () => {
|
|
|
settingVisible.value = true
|
|
|
}
|
|
|
-defineExpose({ open }) // 提供 open 方法,用于打开抽屉
|
|
|
+// 修改当前编辑的节点, 由父组件传过来
|
|
|
+const setCurrentNode = (node:SimpleFlowNode) => {
|
|
|
+ currentNode.value = node;
|
|
|
+ currentNode.value.attributes.fieldsPermission = node.attributes.fieldsPermission || getDefaultFieldsPermission(formFields?.value)
|
|
|
+ const strCandidateParam = node.attributes?.candidateParam
|
|
|
+ if(strCandidateParam) {
|
|
|
+ candidateParamArray.value = strCandidateParam.split(',').map(item=> +item)
|
|
|
+ }
|
|
|
+ if (currentNode.value.attributes?.candidateStrategy === CandidateStrategy.USER && candidateParamArray.value?.length <= 1) {
|
|
|
+ notAllowedMultiApprovers.value = true
|
|
|
+ } else {
|
|
|
+ notAllowedMultiApprovers.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+defineExpose({ open, setCurrentNode }) // 暴露方法给父组件
|
|
|
+
|
|
|
const changeCandidateStrategy = () => {
|
|
|
candidateParamArray.value = []
|
|
|
currentNode.value.attributes.approveMethod = 1
|
|
@@ -330,15 +377,6 @@ const blurEvent = () => {
|
|
|
showInput.value = false
|
|
|
currentNode.value.name = currentNode.value.name || NODE_DEFAULT_NAME.get(NodeType.USER_TASK_NODE) as string
|
|
|
}
|
|
|
-onMounted(async () => {
|
|
|
- candidateParamArray.value = currentNode.value.attributes?.candidateParam?.split(',').map(item=> +item)
|
|
|
- console.log('candidateParamArray.value', candidateParamArray.value)
|
|
|
- if (currentNode.value.attributes?.candidateStrategy === CandidateStrategy.USER && candidateParamArray.value?.length <= 1) {
|
|
|
- notAllowedMultiApprovers.value = true
|
|
|
- } else {
|
|
|
- notAllowedMultiApprovers.value = false
|
|
|
- }
|
|
|
-})
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|