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

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

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

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

数据结构

ts 复制代码
//可拖入的组件列表
type AllowDrag = string[] | {
    //可拖入的菜单列表
    menu: string[];
    //可拖入的组件列表
    item: string[];
}
//不可拖入的组件列表
type DenyDrag = string[] | {
    //不可拖入的菜单列表
    menu: string[];
    //不可拖入的组件列表
    item: string[];
}
  • AllowDrag: 定义容器中允许拖拽的组件或菜单。可以是一个组件 name 的数组,或者一个对象,其中 menu 和 item 分别指定允许的菜单和组件。
  • DenyDrag: 定义容器中不允许拖拽的组件或菜单。可以是一个组件 name 的数组,或者一个对象,其中 menu 和 item 分别指定禁止的菜单和组件。
  • 优先级: 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}
        }];
    }
};
相关推荐
风骏时光牛马5 小时前
AI_Coding:智能代码创作引擎
前端
FungLeo5 小时前
成为全栈·Vue管理后台篇·<scriptsetup>:把页面拆成可读、可测的 Vue 组件
前端·javascript·vue.js·typescript·前端组件化·composition api·vue sfc
奶油话梅糖5 小时前
快过 IDM 5 倍、开源免费:4,200 Star 的 Rust 下载器用 7 组对照实验“单挑“行业老大
rust·开源·idm
冬奇Lab16 小时前
一天一个开源项目(第257篇):AI Design Skills —— 把设计规范写成 AI 能执行的规则,落地页与 Figma 两套 Skill
人工智能·开源·claude
卸任16 小时前
Vibe coding工具使用心得
前端·ai编程
brien917 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance17 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Erishen17 小时前
Lume A2A 实战:让 Lume 应用接入分布式 Agent 协作网络
架构·开源·agent
Lank_M17 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端