开源设计器 FcDesigner 限制组件是否可以拖入的教程

FcDesigner 是一款基于Vue的开源低代码可视化表单设计器工具,通过数据驱动表单渲染。可以通过拖拽的方式快速创建表单,提高开发者对表单的开发效率,节省开发者的时间。并广泛应用于在政务系统、OA系统、ERP系统、电商系统、流程管理等领域。

源码地址: Github | Gitee | 文档 | 在线演示

通过配置 allowDragdenyDrag,您可以精细控制容器组件允许或禁止拖入的组件。这种控制可以帮助您根据具体的业务需求,定制拖拽功能的行为,确保表单设计的一致性和规范性。

数据结构

ts 复制代码
//可拖入的组件列表
type AllowDrag = string[] | {
    //可拖入的菜单列表
    menu: string[];
    //可拖入的组件列表
    item: string[];
}
//不可拖入的组件列表
type DenyDrag = string[] | {
    //不可拖入的菜单列表
    menu: string[];
    //不可拖入的组件列表
    item: string[];
}
  • AllowDrag: 定义容器中允许拖拽的组件或菜单。可以是一个组件 name 的数组,或者一个对象,其中 menuitem 分别指定允许的菜单和组件。
  • DenyDrag: 定义容器中不允许拖拽的组件或菜单。可以是一个组件 name 的数组,或者一个对象,其中 menuitem 分别指定禁止的菜单和组件。
  • 优先级: AllowDrag 配置优先级高于 DenyDrag

基本示例

在一个"布局"容器中,只允许拖入布局相关的组件,如行和列组件。

vue 复制代码
<template>
    <fc-designer ref="designer" :config="config"/>
</template>
<script setup>
    const config = {
        allowDrag: {
            group: {
                item: ['fcRow']
                menu: ['main']
            }
        }
    }
</script>

限制不能拖入的组件

在一个分组组件中,禁止拖入子表单组件,但允许其他组件。

vue 复制代码
<template>
    <fc-designer ref="designer" :config="config"/>
</template>
<script setup>
    const config = {
        denyDrag: {
            subForm: {
                menu: ['subform']
            }
        }
    }
</script>

通过组件的拖拽规则限制

在一个格子组件中,仅允许拖入基础组件。

js 复制代码
const colRule = {
    menu: 'layout',
    icon: 'icon-col',
    label: '格子',
    name: 'col',
    //可以向内部拖入组件
    drag: true,
    //控制可拖入的组件
    allowDrag: {
        menu: ['main']
    },
    inside: true,
    mask: false,
    rule() {
        return {
            type: 'Col',
            props: {span: 12},
            children: []
        };
    },
    props(_, {t}) {
        return [{
            type: 'slider',
            title: '宽度',
            field: 'span',
            value: 12,
            props: {min: 0, max: 24}
        }];
    }
};
相关推荐
鱼锦0.02 小时前
在vue2中主页面怎么给子页面传递数据
前端·javascript·html
!win !5 小时前
前端跨标签页通信方案(下)
前端·javascript
f***45325 小时前
基于SpringBoot和PostGIS的各省与地级市空间距离分析
android·前端·后端
编码追梦人6 小时前
从 “手忙脚乱“ 到 “行云流水“:华为云 DevUI 与 MateChat 如何让前端开发飞起来
前端·华为云
S***H2836 小时前
前端动画实现经验,性能优化与兼容性
前端
xw57 小时前
前端跨标签页通信方案(下)
前端·javascript
zzlyx997 小时前
IoTSharp前端VUE采用npm run build编译提示require() of ES Module 出错
前端·vue.js·npm
全栈技术负责人7 小时前
拒绝“无法复现”:前端全链路日志排查实战手册
前端·全链路·问题排查思路
加洛斯7 小时前
前端小知识003:JS中 == 与 === 的区别
开发语言·前端·javascript
b***9108 小时前
【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus
android·前端·后端·mybatis