扩展容器组件
容器组件允许你将其他组件嵌套在其中,提供了更灵活的布局能力。在以下示例中,我们定义了一个容器组件 Col,并说明如何在设计器中使用它。
定义组件
首先,我们定义一个简单的 Col 容器组件,它可以容纳其他组件,并显示一个说明信息。
vue
<template>
<div class="col">
<div>
<slot></slot>
</div>
<span>slot是拖入组件的回显区域</span>
</div>
</template>
<script setup>
import { defineProps } from 'vue';
const props = defineProps({
span: {
type: Number,
default: 12
}
});
</script>
<style scoped>
.col {
border: 1px solid #ddd;
padding: 10px;
box-sizing: border-box;
position: relative;
}
</style>
- : 插槽用于放置拖入的组件。
- props: span 属性用于控制容器的宽度。
导入并挂载自定义组件
接下来,我们需要将自定义组件导入到 FcDesigner 中,并进行挂载。
js
//导入自定义组件
import Col from './Col.Vue';
import FcDesigner from '@form-create/designer';
//挂载自定义组件
FcDesigner.component('Col', Col);
//或者全局挂载
app.component('Col', Col);
定义组件的拖拽规则
我们为 Col 容器组件定义拖拽规则,以便它可以在设计器中被拖拽和配置。
js
const colRule = {
//插入菜单位置
menu: 'layout',
//图标
icon: 'icon-col',
//名称
label: '格子',
//id,唯一!
name: 'col',
//可以向内部拖入组件
drag: true,
//组件操作按钮生成在组件的内部还是外部
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}
}];
}
};
配置说明
- menu: 定义组件在左侧菜单中的位置,这里设置为 layout。
- icon: 组件在菜单中的图标。
- label: 组件的名称。
- name: 组件的唯一 ID。
- drag: 允许拖拽该组件。
- inside: 设置为 true,表示组件操作按钮将显示在组件内部。
- mask: 设置为 false,表示容器组件不会显示遮罩。
- rule: 组件的生成规则,包括类型、属性和子组件。
- props: 定义组件的属性配置项,这里使用 slider 组件来调整宽度(span)。
挂载组件的拖拽规则
js
//挂载拖拽规则
this.$refs.designer.addComponent(colRule);
通过上述步骤,你可以创建一个容器组件,并将其添加到设计器中。这样可以灵活地管理和布局其他组件,使设计更加高效和有序。如果你需要更复杂的功能或样式,可以在组件中进一步扩展和定制。