123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- <template>
- <el-drawer
- :append-to-body="true"
- v-model="settingVisible"
- :show-close="false"
- :size="550"
- :before-close="saveConfig"
- >
- <template #header>
- <div class="config-header">
- <input
- v-if="showInput"
- type="text"
- class="config-editable-input"
- @blur="blurEvent()"
- v-mountedFocus
- v-model="nodeName"
- :placeholder="nodeName"
- />
- <div v-else class="node-name">
- {{ nodeName }} <Icon class="ml-1" icon="ep:edit-pen" :size="16" @click="clickIcon()" />
- </div>
- <div class="divide-line"></div>
- </div>
- </template>
- <el-tabs type="border-card" v-model="activeTabName">
- <el-tab-pane label="权限" name="user">
- <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 label="表单字段权限" name="fields" 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 fieldsPermissionConfig"
- :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="FieldPermissionType.READ"
- size="large"
- :label="FieldPermissionType.READ"
- ><span></span
- ></el-radio>
- </div>
- <div class="item-radio-wrap">
- <el-radio
- :value="FieldPermissionType.WRITE"
- size="large"
- :label="FieldPermissionType.WRITE"
- ><span></span
- ></el-radio>
- </div>
- <div class="item-radio-wrap">
- <el-radio
- :value="FieldPermissionType.NONE"
- size="large"
- :label="FieldPermissionType.NONE"
- ><span></span
- ></el-radio>
- </div>
- </el-radio-group>
- </div>
- </div>
- </el-tab-pane>
- </el-tabs>
- <template #footer>
- <el-divider />
- <div>
- <el-button type="primary" @click="saveConfig">确 定</el-button>
- <el-button @click="closeDrawer">取 消</el-button>
- </div>
- </template>
- </el-drawer>
- </template>
- <script setup lang="ts">
- import { SimpleFlowNode, NodeType, FieldPermissionType, START_USER_BUTTON_SETTING } from '../consts'
- import { useWatchNode, useDrawer, useNodeName, useFormFieldsPermission } from '../node'
- import * as UserApi from '@/api/system/user'
- defineOptions({
- name: 'StartUserNodeConfig'
- })
- const props = defineProps({
- flowNode: {
- type: Object as () => SimpleFlowNode,
- required: true
- }
- })
- // 可发起流程的用户编号
- const startUserIds = inject<Ref<any[]>>('startUserIds')
- // 用户列表
- const userOptions = inject<Ref<UserApi.UserVO[]>>('userList')
- // 抽屉配置
- const { settingVisible, closeDrawer, openDrawer } = useDrawer()
- // 当前节点
- const currentNode = useWatchNode(props)
- // 节点名称
- const { nodeName, showInput, clickIcon, blurEvent } = useNodeName(NodeType.COPY_TASK_NODE)
- // 激活的 Tab 标签页
- const activeTabName = ref('user')
- // 表单字段权限配置
- const { formType, fieldsPermissionConfig, getNodeConfigFormFields } = useFormFieldsPermission(
- 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 () => {
- activeTabName.value = 'user'
- currentNode.value.name = nodeName.value!
- currentNode.value.showText = '已设置'
- // 设置表单权限
- currentNode.value.fieldsPermission = fieldsPermissionConfig.value
- // 设置发起人的按钮权限
- currentNode.value.buttonsSetting = START_USER_BUTTON_SETTING
- settingVisible.value = false
- return true
- }
- // 显示发起人节点配置, 由父组件传过来
- const showStartUserNodeConfig = (node: SimpleFlowNode) => {
- nodeName.value = node.name
- // 表单字段权限
- getNodeConfigFormFields(node.fieldsPermission)
- }
- defineExpose({ openDrawer, showStartUserNodeConfig }) // 暴露方法给父组件
- </script>
- <style lang="scss" scoped></style>
|