Skip to content

这个功能仅在 Pro 版本的设计器中提供。 详细了解 Pro 版本功能

变量

设计器中支持定义和绑定变量,可以在表单中动态获取和使用数据。通过变量,您可以轻松地将表单数据与外部数据源进行绑定,并在需要时进行动态更新。

定义全局变量

设计器支持自定义计算变量。您可以在函数中定义变量,并将这些变量绑定到表单中。自定义变量的值可以根据外部数据源或逻辑进行动态计算。当变量发生变化时,绑定到这些变量的组件会自动更新。

自定义变量示例

假设您希望定义一个 token 变量,并从 Cookie 中读取它的值,如果 Cookie 中没有 token,则使用默认值 "default Token":

variable2.png

js
function handle(get, api) {
    return {
        token: get("$cookie.token")||"default Token"
    }
}

在函数中,get 是一个函数,它用于访问内置变量或自定义变量的值。当 token 变量的值发生变化时,所有依赖于 token 的组件将会自动重新渲染,保持数据的实时性和一致性。

定义外部变量

示例 1: 在 main.js 中扩展

例如定义一个全局 globalToken 变量存储用户凭证,表单提交和加载远程数据时可以方便调用。

js
import formCreate from '@form-create/element-ui';
//模拟获取 token 的方法
import useToken from '@/state/token';
//获取 token
const token = useToken().value;
//定义`globalToken`变量, 值为 token
formCreate.setData('globalToken', token);

实例 2: 在组件中扩展

例如定义一个 cityOptions 变量存储城市列表数据,表单组件可以直接使用这些数据作为下拉选项供用户选择。

vue
<template>
    <fc-designer ref="designer"/>
</template>
<script setup>
    import formCreate from '@form-create/element-ui';
    //模拟加载选项数据
    import {getCityOptions} from '@/api';
    getCityOptions().then(options=>{
        //导入 cityOptions 变量
        formCreate.setData('cityOptions', options);
    })
</script>

实例 3: 在事件中扩展

例如定义 OID 变量存储当前 Select 组件选中值,用于后续接口数据获取

variable7.png

使用变量

注意: 读取变量前请确保数据已正确导入,否则可能导致功能异常或报错

通过 API 获取

js
//获取外部变量
api.getData('globalToken');
api.getData('cityOptions');
//获取内置变量
api.getData('$form.userName');
api.getData('$cookie.token');
//获取全局变量
api.getData('$var.var_Fppdlz6gytmzb1c');
//获取全局数据
api.getData('$globalData.merchant');
api.getGlobalData('merchant').then(res=>{
});

在全局变量中获取

js
//获取外部变量
get('globalToken');
get('cityOptions');
//获取内置变量
get('$form.userName');
get('$cookie.token');
//获取全局变量
get('$var.var_Fppdlz6gytmzb1c');
//获取全局数据
get('$globalData.merchant');

在数据请求/绑定变量中使用

js
//获取外部变量
// {{globalToken}}
// {{cityOptions}}
//获取内置变量
// {{$form.userName}}
// {{$cookie.token}}
//获取全局变量
// {{$var.var_Fppdlz6gytmzb1c}}
//获取全局数据
// {{$globalData.merchant}}

实例 1: 全局变量

在全局变量中读取变量 globalToken(参考前文示例)

variable3.png

js
function handle(get, api) {
    return get('globalToken');
}

实例 2: 事件

beforeFetch 事件中注入前文定义的全局变量 var_Fppdlz6gytmzb1c.token 配置请求

variable4.png

js
function beforeFetch (config, data) {
  if(!config.headers) {
      config.headers = {}
  }
  const varData = data.api.getData('$var.var_Fppdlz6gytmzb1c');
  config.headers.token = varData.token;
}

实例 3: 绑定变量

为单选框组件绑定预定义的选项数据: 将 cityOptions 变量赋值为单选框的选项列表

variable5.png

实例 4: 数据请求

在数据请求配置中引用已定义的变量(参考前文示例)

variable6.png

定义请求时,支持通过双大括号语法(如 {{token}})使用变量。在接口请求时会自动读取这些变量。如果变量的值是对象,可以通过 {{variableName.attributeName}} 访问对象的属性值。

内置变量

设计器提供了一些内置变量,用于获取不同来源的数据:

变量名称描述数据来源
$topForm获取外层表单中的数据最外层表单数据
$form获取表单中的数据当前表单数据(在子表单中使用时获取子表单数据)
$options获取表单配置中的数据表单配置对象
$cookie获取cookie中的数据浏览器cookie
$localStorage获取localStorage中的数据浏览器localStorage
$sessionStorage获取sessionStorage中的数据浏览器sessionStorage
$globalData获取全局数据源中的数据全局数据源
$var获取全局变量中的数据全局变量

注意:以 "$" 开头的变量是系统内置的特殊变量,自定义变量请使用普通命名(如 userData),不需要加 "$" 前缀。

variable.png

获取表单数据

通过 $form 变量,您可以访问表单中各个组件的值。例如,要获取当前表单中 userName 组件的值,可以使用以下方式:

js
// 使用 API 获取
api.getData('$form.userName');
// 全局变量中获取
get('$form.userName');
// 在数据请求/绑定变量中使用
//{{$form.userName}}

读取Cookie

使用 $cookie 变量从 Cookie 中获取数据。例如,要读取 token 的值:

js
// 使用 API 获取
api.getData('$cookie.token');
// 全局变量中获取
get('$cookie.token');
// 在数据请求/绑定变量中使用
//{{$cookie.token}}

读取localStorage

通过 $localStorage 变量,可以从 localStorage 中获取数据。例如,获取 user 对象中的 id

js
// 使用 API 获取
api.getData('$localStorage.user.id');
// 全局变量中获取
get('$localStorage.user.id');
// 在数据请求/绑定变量中使用
//{{$localStorage.user.id}}

读取全局数据

使用 $globalData 变量来访问全局数据源中的数据,这些数据可能是从远程服务器获取的。例如,获取 merchantmer_id

variable8.png

js
// 使用 API 获取
api.getData('$globalData.merchant.mer_id');
api.getGlobalData('merchant').then(res=>{
    const mer_id = res.mer_id; 
});
// 全局变量中获取
get('$globalData.merchant.mer_id');
// 在数据请求/绑定变量中使用
//{{$globalData.merchant.mer_id}}

读取全局变量

通过 $var 变量访问全局变量。例如,获取 price 的值:

variable9.png

js
// 使用 API 获取
api.getData('$var.price');
// 全局变量中获取
get('$var.price');
// 在数据请求/绑定变量中使用
//{{$var.price}}

导入全局变量

使用 setGlobalVariable 方法向设计器注入全局变量

vue
<template>
    <fc-designer ref="designer"/>
</template>
<script setup>
    import {onMounted} from "vue";
    const designer = ref(null);
    //注意:需等待组件完成初始化后,方可调用其方法
    onMounted(() => {
        designer.value.setGlobalVariable({
            "var_Fppdlz6gytmzb1c": {
                label: "token",
                deletable: false,
                handle: function (get, api) {
                    return get('$cookie.token') || 'default Token'
                }
            },
            "var_Fzmum8ncpvjrajc": {
                label: "username",
                deletable: false,
                handle: function (get, api) {
                    return get('$form.username')
                }
            },
        });
    });
</script>

导入外部变量描述

通过 config.varList 配置变量描述信息: 该配置用于在变量列表中展示说明文本和选择

variable10.png

variable11.png

vue
<template>
    <fc-designer ref="designer" :config="config"/>
</template>
<script setup>
    import {onMounted} from "vue";
    const designer = ref(null);
    const config = ref([
        //增加cookie中数据的描述
        {
            id: '$cookie',
            children: [
                {
                    id: 'token',
                    label: '用户令牌'
                },
                {
                    id: 'user',
                    label: '用户信息',
                    children: [
                        {
                            id: 'name',
                            label: '用户名称'
                        }
                    ]
                },
            ]
        },
        //增加外部变量的描述
        {
            id: 'globalToken',
            label: '全局 Token'
        },
        {
            id: 'cityOptions',
            label: '城市选择项'
        },
        {
            id: 'role',
            label: '权限信息',
            children: [
                {
                    id: 'ALLOW_CREATE',
                    label: '添加权限'
                },
                {
                    id: 'ALLOW_DLETE',
                    label: '删除权限'
                },
            ]
        },
    ]);
</script>

通过合理使用内置变量和自定义变量,您可以更灵活地控制表单中的数据展示和业务逻辑,实现复杂的数据绑定和动态更新。