[开源]低代码表单FormCreate中教你如何扩展业务组件

内容分享3个月前发布
2 0 0

开源项目低代码表单 支持可视化设计的低代码表单组件|FormCreate 支持在表单中生成并使用任何 Vue 组件。无论是简单的 UI 组件,还是复杂的自定义逻辑,都可以通过以下方式轻松集成到表单中。

源码地址: 「链接」

[开源]低代码表单FormCreate中教你如何扩展业务组件

注意事项

  • 挂载与注册: 在自定义组件渲染之前,必须通过全局或局部的方式挂载或注册自定义组件,详见挂载或注册
  • 获取组件规则: 只要在生成规则中定义 ​name​​​ 属性,就可以通过 ​​fApi.component(name)​​ 方法获取组件规则,方便在表单中动态操作该组件。

组件挂载方式

通过 FormCreate 生成的自定义组件需要先进行挂载。挂载方式有两种:全局挂载和局部挂载。

全局挂载

全局挂载适用于整个 Vue 应用。通过这种方式,组件在应用的任何地方都可以使用。

app.component('TestComponent', TestComponent);

局部挂载

局部挂载适用于特定的表单实例。这种方法使得组件只在特定表单中可用,使用 ​​formCreate.component()​​ 方法进行挂载。

formCreate.component('TestComponent', TestComponent);

扩展表单组件教程

在 FormCreate 中,您可以轻松地将自定义的 Vue 组件转换为表单组件,甚至可以与内置表单组件一样使用。以下指南将协助您理解如何生成自定义表单组件,并展示实际业务场景中的用法。

预定义组件属性和事件

要让您的自定义组件在 ​​FormCreate​​​ 中充当表单组件,您需要确保组件实现了 ​​v-model​​​ 的基本功能。这意味着组件需要接收和管理 ​​modelValue​​​ 以及 ​​disabled​​​ 状态,并在值变化时触发 ​​update:modelValue​​ 事件。

Props 接收 在自定义组件内部,确保通过 props 接收以下属性:

// vue 组件示例
{
  props: {
    modelValue: String, // 绑定的表单值
    disabled: Boolean   // 组件的禁用状态      
  }
}

触发事件 当组件内部的值发生变化时,通过 update:modelValue 事件通知外部值的更新:

this.$emit('update:modelValue', newValue);

挂载表单组件

在生成表单之前,您需要确保自定义组件已通过全局或局部方式挂载。

全局挂载

全局挂载适用于整个 Vue 应用。通过这种方式,组件在应用的任何地方都可以使用。

app.component('TestComponent', TestComponent);

局部挂载

局部挂载适用于特定的表单实例。这种方法使得组件只在特定表单中可用,使用 ​​formCreate.component()​​ 方法进行挂载。

formCreate.component('TestComponent', TestComponent);

生成表单组件

要在表单中生成自定义表单组件,您需要在生成规则中定义 ​​field​​ 属性,这是表单组件的必需属性。

{
    type:'TestComponent',
    value:'test',
    field:'testField',
    title:'自定义组件'
}

参数自动注入

FormCreate 在生成自定义组件时,会自动向组件注入一些有用的参数。这些参数可以协助你更好地管理组件与表单的交互。

  • ​formCreateInject​
  • ​formCreateInject.api​​ 表单 API 对象,用于操作表单。
  • ​formCreateInject.options​​ 表单组件的全局配置。
  • ​formCreateInject.rule​​ 生成规则对象,定义了组件的所有配置。
  • ​formCreateInject.field​​ 字段名称,与表单数据绑定。

[开源]低代码表单FormCreate中教你如何扩展业务组件

示例

简单输入框组件

这是一个基本的自定义输入框组件。

<template>
  <input :value="modelValue" @input="updateValue" :disabled="disabled" />
</template>

<script setup>
import { defineProps, defineEmits } from 'vue';
const props = defineProps({
  modelValue: String,
  disabled: Boolean
});
const emit = defineEmits(['update:modelValue']);
const updateValue = (event) => {
  emit('update:modelValue', event.target.value);
};
</script>

自定义选择器组件

这是一个自定义选择器组件,允许用户从给定的选项中选择一个值。

<template>
    <select :value="modelValue" @change="onChange" :disabled="disabled">
        <option v-for="option in options" :key="option.value" :value="option.value">
            {{ option.label }}
        </option>
    </select>
</template>

<script setup>
    import { defineProps, defineEmits } from 'vue';
    const props = defineProps({
        modelValue: [String, Number],
        disabled: Boolean,
        options: {
            type: Array,
            required: true,
        },
    });
    const emit = defineEmits(['update:modelValue']);
    const onChange = (event) => {
        emit('update:modelValue', event.target.value);
    };
</script>

带前缀和后缀的输入框组件

这个组件展示了如何在输入框中添加前缀和后缀。

<template>
    <div>
        <span>{{ prefix }}</span>
        <input :value="modelValue" @input="onInput" :disabled="disabled" />
        <span>{{ suffix }}</span>
    </div>
</template>

<script setup>
    import { defineProps, defineEmits } from 'vue';
    const props = defineProps({
        modelValue: String,
        disabled: Boolean,
        prefix: String,
        suffix: String,
    });
    const emit = defineEmits(['update:modelValue']);
    const onInput = (event) => {
        emit('update:modelValue', event.target.value);
    };
</script>

自定义复合输入组件

这是一个复合组件,结合了输入框和选择器,适用于如选择国家和输入电话号码的场景。

<template>
    <div>
        <select :value="selectedCountry" @change="onCountryChange" :disabled="disabled">
            <option v-for="country in countries" :key="country.value" :value="country.value">
                {{ country.label }}
            </option>
        </select>
        <input :value="modelValue" @input="onInput" :disabled="disabled" placeholder="请输入电话号码" />
    </div>
</template>

<script setup>
    import { defineProps, defineEmits, ref } from 'vue';
    const props = defineProps({
        modelValue: String,
        disabled: Boolean,
        countries: {
            type: Array,
            required: true,
        },
    });
    const emit = defineEmits(['update:modelValue']);
    const selectedCountry = ref(props.countries[0].value);
    const onCountryChange = (event) => {
        selectedCountry.value = event.target.value;
        emit('update:modelValue', ''); // 选择国家后,清空电话号码
    };
    const onInput = (event) => {
        emit('update:modelValue', event.target.value);
    };
</script>

依赖于外部数据源的选择器

这个组件会从远程 API 获取数据并填充到下拉选择框中,用户可以选择一个选项,选择的结果将会影响表单的其他部分。

<template>
    <div>
        <label>
            请选择国家:
            <select :value="selectedCountry" @change="onCountryChange">
                <option v-for="country in countries" :key="country.id" :value="country.id">{{ country.name }}</option>
            </select>
        </label>

        <label v-if="cities.length > 0">
            请选择城市:
            <select :value="selectedCity" @change="onCityChange">
                <option v-for="city in cities" :key="city.id" :value="city.id">{{ city.name }}</option>
            </select>
        </label>
    </div>
</template>

<script setup>
    import { ref, onMounted, watch } from 'vue';
    import axios from 'axios';
    // 接收 props 并定义 emits
    const props = defineProps({
        modelValue: {
            type: Object,
            default: () => ({ country: '', city: '' }),
        },
    });
    const emit = defineEmits(['update:modelValue']);
    // 定义状态
    const countries = ref([]);
    const cities = ref([]);
    const selectedCountry = ref(props.modelValue.country);
    const selectedCity = ref(props.modelValue.city);
    // 监听 selectedCountry 的变化
    watch(selectedCountry, async (newCountry) => {
        // 当国家变化时,触发获取城市列表的操作
        await fetchCities(newCountry);
        // 当国家变化时,重置城市选择
        selectedCity.value = '';
        emit('update:modelValue', { country: newCountry, city: '' });
    });
    // 监听 selectedCity 的变化
    watch(selectedCity, (newCity) => {
        emit('update:modelValue', { country: selectedCountry.value, city: newCity });
    });
    // 获取国家列表
    onMounted(async () => {
        const response = await axios.get('/api/countries');
        countries.value = response.data;
        if (selectedCountry.value) {
            await fetchCities(selectedCountry.value);
        }
    });
    // 获取城市列表
    const fetchCities = async (countryId) => {
        const response = await axios.get(`/api/countries/${countryId}/cities`);
        cities.value = response.data;
    };
    // 国家选择事件处理
    const onCountryChange = (event) => {
        selectedCountry.value = event.target.value;
    };
    // 城市选择事件处理
    const onCityChange = (event) => {
        selectedCity.value = event.target.value;
    };
</script>

[开源]低代码表单FormCreate中教你如何扩展业务组件

扩展自定义组件教程

通过标签生成自定义组件

以下是通过标签生成 el-button 组件的示例:

{
   type: 'el-button',
   name: 'btn',
   props: {
     type: 'primary',
     loading: true
   },
   children: ['加载中']
}

使用 ​​component​​ 配置项直接生成组件

如果不想提前挂载组件,可以通过 ​​component​​ 配置项在生成规则中直接指定组件。这样无需显式挂载,组件即可在表单中使用。

const rule = {
   type: 'test',
   component: TestComponent
};

动态修改规则

可以使用 fApi.getRule() 方法获取生成规则,并动态修改组件属性:

fApi.getRule('btn').props.loading = false

这种方式超级灵活,适合在运行时根据业务逻辑调整组件行为。

通过掌握以上自定义组件的生成和操作方法,您可以在 FormCreate 中实现几乎任何复杂的表单需求。无论是简单的按钮,还是复杂的动态表单项。

© 版权声明

相关文章

2025 年的 AIGC 浪潮,你赶上了吗?AIGC 技术正以摧枯拉朽之势,重塑各行各业的格局,从内容创作到电商营销,从影视娱乐到智能教育,到处都有它的身影。据权威数据预测,2025 年 AIGC 市场规模将突破万亿,可人才缺口却高达 200 万 +,这意味着什么?这意味着机遇,一个让你逆袭的绝佳机遇!而拿下 AIGC 应用工程师证书,就是抓住这个机遇的关键。【权威认证,行业硬通货】我们考的这个 AIGC 应用工程师证书,由工信部教育与考试中心颁发。工信部的权威性不言而喻,这张证书就是你踏入 AIGC 行业的 “金字招牌”。它是企业招聘 AIGC 岗位的重要筛选标准,在腾讯、字节跳动等大厂,以及众多中小科技企业中,都有着极高的认可度。有了它,你在求职时就能脱颖而出,获得优先录用的机会。【薪资诱人,职业发展无忧】薪资方面,AIGC 应用工程师简直不要太香。初级工程师月薪轻松 1.5 万 – 3 万,随着经验积累和技能提升,资深专家年薪 60 万 – 150 万都不在话下,甚至大模型训练工程师年薪超 200 万。而且职业发展路径十分清晰,从初级工程师起步,逐步晋升为 AIGC 产品经理、技术总监,或者转型成为自由职业者,承接高收益项目,未来晋升空间巨大。【报考条件亲民,零基础可学】很多宝子担心自己基础不够,不敢报考。别慌!中级证书报考条件超宽松,大专学历有 1 年工作经验,或者本科应届生,专业不限都能报考;高级证书要求本科学历 + 2 年 AIGC 相关经验,或者硕士学历。就算你是零基础小白,只要对 AIGC 感兴趣,愿意学习,都有机会拿下这张证书,开启高薪职业之路。【学习内容丰富,紧跟行业前沿】学习内容涵盖了当下最热门、最实用的 AIGC 技术。你将系统学习大模型原理,掌握 Stable Diffusion、Midjourney、GPT – 5 等主流工具链的使用技巧,学会进行大模型微调(LoRA、P – Tuning)、提示词工程优化,了解多模态生成技术以及 AI 版权合规审查等重要知识。这些技能都是企业急需的,学完就能直接应用到工作中。【报考流程简单,拿证快人一步】报考流程也很简单。首先,通过工x部教考中心官网核验,选择正规的授权机构提交报名材料,包括身份证、学历证明、2 寸蓝底照等。然后,开通线上课程,开启系统学习之旅,完成培训并取得合格证明。每年 3 月、6 月、9 月、12 月参加机考,考试时间 120 分钟,线上或线下形式都有。考后 15 天就能查成绩,60 分合格,45 天左右就能拿到官网可查的证书,快人一步踏入 AIGC 高薪赛道。不管你是技术转型者,想从传统编程领域转向 AIGC 工程化方向;还是创意从业者,如设计师、文案策划,希望借助 AI 提升创作效率;亦或是企业管理者,想布局 AIGC 战略,为企业赋能;甚至是大学生,想在毕业时增加就业竞争力,这个证书都非常适合你。别再犹豫了,抓住这波 AIGC 的风口,考下 AIGC 应用工程师证书,让自己的职业发展更上一层楼。#AIGC #考证 #高

暂无评论

none
暂无评论...