开源项目低代码表单FormCreate中通过接口加载远程数据选项

在开源项目低代码表单 FormCreate 中,fetch 属性提供了强大的功能,允许从远程 API 加载数据并将其应用到表单组件中。通过灵活的配置,fetch 可以在多种场景下发挥作用,从简单的选项加载到复杂的动态数据处理。

源码地址: Github | Gitee

低代码表单FormCreate

类型

以下是 fetch 属性的详细类型定义:

type Fetch = {//接口地址action: String;//数据插入的位置,例如 'options' 或 'props.options'to?: String;//解析接口返回的数据,返回最终需要的结果,默认取 `res.data`parse?: String | ((body: any, rule:Rule, fapi:fApi) => any);//请求方式,默认值为 'GET'method?: String;//请求时附带的数据data?: Object;//调用接口附带数据的提交方式,默认为 `formData`dataType?: 'json';//自定义请求头信息headers?: Object;//请求失败时的回调函数onError?: (e: Error | ProgressEvent) => void;}

在请求前,可以通过 options.beforeFetch 方法处理规则,例如设置 token。

自定义请求方法

在一些高级场景中,您可能需要自定义请求方式。通过重写 formCreate.fetch 方法,您可以自由定义请求的逻辑。

formCreate.fetch = (options) => {fetch(options.action, {headers: options.headers,method: options.method,}).then(res=>{res.json().then(data=>{options.onSuccess(data);})}).catch(e=>{options.onError(e);})
}

低代码表单FormCreate

示例

通过接口加载数据

<template><div><form-create :rule="rule" v-model:api="fApi" :option="options"/></div>
</template><script>
export default {data() {return {fApi: {},options: {onSubmit: (formData) => {alert(JSON.stringify(formData))}},rule: [{type: 'select',field: 'city',title: '城市',value: '陕西省',options: [],effect: {fetch: {action: 'http://datavmap-public.oss-cn-hangzhou.aliyuncs.com/areas/csv/100000_province.json',to: 'options',method: 'GET',parse(res) {return res.rows.map(row => {return {label: row.name,value: row.adcode}})}}}}]}}
}
</script>

通过自定义方法加载数据

<template><div><form-create :rule="rule" v-model:api="fApi" :option="options"/></div>
</template><script>
export default {data() {return {fApi: {},options: {onSubmit: (formData) => {alert(JSON.stringify(formData))}},rule: [{type: 'cascader',field: 'city',title: '省市',value: ['陕西省', '西安市'],props: {options: []},effect: {fetch: {//自定义请求action: () => {function tidy(list) {return list.map(val => {return {value: val.name,label: val.name,children: val.children ? tidy(val.children) : undefined}})}return new Promise((resolve) => {fetch('https://cdn.jsdelivr.net/gh/modood/Administrative-divisions-of-China@2.4.0/dist/pc-code.json').then(res => {console.log(res)res.json().then(res => {resolve(tidy(res));})})})},to: 'props.options',}}}]}}
}
</script>

自定义请求头信息

const rules = [{type: 'select',field: 'product',title: '选择产品',fetch: {action: '/api/products',to: 'options',headers: {Authorization: 'Bearer your-auth-token'},parse: (res) => res.data.map(product => ({ label: product.name, value: product.id })),onError: (error) => console.error('加载产品数据失败:', error)}}
]

在请求前设置 Token

在发送 API 请求之前,动态添加 Authorization token 到请求头中。

// 配置表单创建的全局选项
const formOptions = {// 在请求发送前的钩子beforeFetch: (options) => {// 动态设置请求头中的 Authorization tokenconst token = 'your-auth-token'; // 这里的 token 可以从任何存储中获取options.headers = {Authorization: `Bearer ${token}`};}
};
// 创建表单
const rules = [{type: 'select',field: 'product',title: '选择产品',fetch: {action: '/api/products',to: 'options',parse: (res) => res.data.map(product => ({ label: product.name, value: product.id })),onError: (error) => console.error('加载产品数据失败:', error)}}
];

详细步骤

  1. 设置全局 formOptions: 通过设置全局的 beforeFetch 方法,可以确保在所有带有 fetch 的组件中,都会执行这个钩子。

  2. 动态获取 token: 在 beforeFetch 中,我们可以从存储、Vuex 或其他来源动态获取 token,然后将其添加到请求头中。

  3. 创建表单并使用 fetch: 表单组件中的 fetch 会自动触发 beforeFetch 方法,附加上设置的 Authorization token。

重写内置请求方法并设置 Token

在表单的所有 API 请求中,自动附加 Authorization token 到请求头中,以确保所有请求都携带有效的身份验证信息。

import formCreate from '@form-create/element-ui'; // 假设使用 Element UI// 重写 formCreate 的内置 fetch 方法
formCreate.fetch = (options) => {// 获取或生成 Tokenconst token = 'your-auth-token'; // 这里的 token 可以从 Vuex、localStorage 或其他地方获取// 设置请求头,附加 Authorization tokenconst headers = {...options.headers,Authorization: `Bearer ${token}`,};// 发起请求fetch(options.action, {method: options.method || 'GET', // 默认请求方法为 GETheaders: headers,                 // 包含 Authorization 的请求头body: options.method !== 'GET' ? JSON.stringify(options.data) : null, // 如果是 POST 或其他方法,添加请求体}).then(response => response.json())  // 解析响应为 JSON.then(data => {if (options.onSuccess) {options.onSuccess(data);  // 成功回调}}).catch(error => {if (options.onError) {options.onError(error);  // 失败回调}});
};// 创建表单
const fApi = formCreate.create([{type: 'select',field: 'product',title: '选择产品',fetch: {action: '/api/products',to: 'options',parse: (res) => res.data.map(product => ({ label: product.name, value: product.id })),onError: (error) => console.error('加载产品数据失败:', error),},},
], {// 其他表单配置
});

详细步骤

  1. 重写 fetch 方法: 在初始化时,重写 formCreate.fetch 方法,确保所有请求都使用这个自定义的方法。

  2. 设置 Authorization token: 在每次请求中,从存储中获取或生成 token,并将其附加到 headers 中。

  3. 发起请求并处理响应: 根据 options 中的 method、action、data 等参数,发起请求并处理响应数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1534498.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

再次进阶 舞台王者 第八季完美童模全球赛代言人【刘诗乐】赛场秀场超燃合集!

7月20-23日&#xff0c;2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上&#xff0c;一位才能出众的少女——刘诗乐迎来了她舞台生涯的璀璨时刻。 代言人——刘诗乐&#xff0c;以璀璨童星之姿&#xff0c;优雅地踏上完美童模盛宴的绚丽舞台&#xff0c;作为开…

WebGL系列教程八(GLSL着色器基础语法)

目录 1 前言2 基本原则3 基本数据类型4 顶点着色器和片元着色器4.1 声明4.2 初始化项目4.3 赋值 5 结构体5.1 声明5.2 赋值 6 函数6.1 基本结构6.2 自定义函数6.3 常用内置函数 7 精度8 其他9 总结 1 前言 通过前七讲&#xff0c;我们已经见过了WebGL中的部分基础语法&#xff…

性能诊断的方法(三):异常信息诊断方法

关于性能诊断的方法&#xff0c;我们可以按照“问题现象—直接原因—问题根源”这样一个思路去归纳。我们先从问题的现象去入手&#xff0c;包括时间的分析、资源的分析和异常信息的分析。接下来再去分析产生问题现象的直接原因是什么&#xff0c;这里我们归纳了自上而下的资源…

胤娲科技:一场前所未有的运维革命

嘿&#xff0c;朋友们&#xff0c;你们有没有想过&#xff0c;如果电信网络里突然来了位“超级大脑”&#xff0c;我们的生活会是啥样&#xff1f; 以前啊&#xff0c;网络一有点小情绪&#xff0c;运维小哥就得像侦探一样&#xff0c;层层抽丝剥茧找问题。但现在&#xff0c;大…

无需基础轻松学!三步到位,教你亲手构建个性化AI大模型!

众所周知&#xff0c;我们已经有很多免费的大模型工具可以用&#xff0c;比如&#xff1a; 文心一言&#xff1a;https://yiyan.baidu.com/ 通义千问&#xff1a;https://tongyi.aliyun.com/qianwen/ kimi&#xff1a;https://kimi.moonshot.cn/ 以及众多手机APP&#xff1…

CAPL_构建基于UDS的刷写学习—01 Hex文件的解析

前言&#xff1a; 打算写一个系列&#xff1a;CAPL_构建基于UDS的刷写学习&#xff0c;大致写一下写作的思路 1&#xff1a;本文是第1篇首先讲解基础。首先搞清楚&#xff0c;各种不同文件&#xff08;常见的S19,hex,bin,以及汽车行业主机厂自己的各种文件CBF(奇瑞特有),VBF&…

FTP传输太不靠谱了,怎么去找替代FTP软件呢?

在当今这个数据驱动的时代&#xff0c;企业对于文件传输的需求日益增长&#xff0c;而传统的FTP协议由于其在安全性、传输效率、管理便利性等方面的局限性&#xff0c;已经无法满足现代企业的需求。因此&#xff0c;寻找一种可靠的FTP替代方案成为了企业亟待解决的问题。 FTP的…

HRSC2016绘制Ground Truth

利用DOTA的脚本绘制HRSC数据集的真实框&#xff0c;首先将HRSC的标注文件转换为DOTA格式&#xff0c;然后利用DOTA的脚本绘制目标框 新建文件 进入到HRSC2016的Test目录&#xff0c;新建两个文件夹&#xff1a; mkdir DOTA_labels DOTA_labels_drawed新建3个py文件 dota_ut…

【TabBar嵌套Navigation案例-cell重用 Objective-C语言】

一、我们来说这个cell重用(重复使用)的问题啊 1.我们这个比分直播推送页面, 这个里边呢,现在这个cell,涉及到两个样式,上面呢,是Default的,下面呢,是Value1的,然后,我们在这个里边啊,我们每一组就一个cell啊,然后呢,我把这个组,多给它复制几份儿,现在是三个组…

Linux-Makefile的编写、以及编写第一个Linux程序:进度条(模拟方便下载的同时,更新图形化界面)

目录 一、Linux项目自动化构建工具-make/Makefile ​编辑 背景&#xff1a; makefile小技巧&#xff1a; 二、Linux第一个小程序&#xff0d;进度条 先导&#xff1a; 1.如何利用/r,fflush(stdout)来实现我们想要的效果&#xff1b; 2.写一个倒计时&#xff1a; 进度条…

恭喜!龙蜥社区2024年中三大奖项评选名单新鲜出炉

近日&#xff0c;在 2024 龙蜥操作系统大会上&#xff0c;龙蜥社区公布了 2024 年中三大奖项评选名单——“最佳合作伙伴奖”“最佳用户案例奖”“最佳应用实践奖&#xff08;个人&#xff09;”&#xff0c;并邀请清华大学计算机系教授、龙蜥社区高级顾问史元春&#xff0c;海…

地市专利申请及授权数据集合(2000-2023年)xlsx+dta格式

包括发明专利、实用新型、外观专利的申请和授权等。专利作为衡量一个地区科技创新能力和水平的重要指标&#xff0c;不仅反映了地方企业在技术研发、产品创新方面的活跃程度&#xff0c;也是推动产业升级、促进经济高质量发展的关键力量 一、数据介绍 数据名称&#xff1a;地…

ImportError: DLL load failed while importing _ssl: 找不到指定的模块的解决方法

ImportError: DLL load failed while importing _ssl: 找不到指定的模块的解决方法 现象解决办法 现象 在命令行中&#xff0c;可以正常导入_ssl模块&#xff0c;如下&#xff1a; Python 3.9.0 (default, Nov 15 2020, 08:30:55) [MSC v.1916 64 bit (AMD64)] :: Anaconda, …

落地扶持丨云微客山西临汾落地会销圆满收官

2024年9月6日&#xff0c;云微客落地扶持走进山西临汾红星美凯龙《助力家居行业营销数智化研讨会》&#xff0c;活动吸引了近百家家居品牌商户的参与&#xff0c;现场气氛热烈&#xff0c;签约不断&#xff0c;为当地家居行业打开短视频矩阵营销新思路。 短视频成为全行业必争…

界面控件DevExpress中文教程:如何PDF图形对象的可见性?

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 近期重要版本v24.1已正式发布&#xff0c;该版本拥有众多新产…

单机快速部署开源、免费的分布式任务调度系统——Apache DolphinScheduler

本文主要为大家介绍Apache DolphinScheduler的单机部署方式&#xff0c;方便大家快速体验。 环境准备 需要Java环境&#xff0c;这是一个老生常谈的问题&#xff0c;关于Java环境的安装与配置期望大家都可以熟练掌握。 验证java环境 java -version 下载安装包并解压 使用wg…

现代 Web 开发工具箱:Element-UI 表单组件全攻略(一)

现代 Web 开发工具箱&#xff1a;Element-UI 表单组件全攻略&#xff08;一&#xff09; 一 . Radio 单选框1.1 创建 Radio 按钮① 注册路由② 创建 radio 组件 1.2 Radio 的相关属性① 是否禁用② 是否显示边框③ 原生 name 属性④ 按钮的样式 1.3 Radio 相关事件1.4 Radio 按…

从 TF卡升级 f1c100s spinand

开发GUI 便宜好用的ARM 不多见了&#xff0c;f1c100s 作为首选&#xff0c;搜索相关spinand 启动支持 的uboot 帖子大多相当久远&#xff0c;随着uboot的升级 已经支持spinand 启动&#xff0c;但是spl 部分支持任然需要查询相关资料才行&#xff1b; 参考该博主文章&#xff…

Kubernetes从零到精通(07-工作负载-StatefulSet)

StatefulSet示例 正如Deployment管理无状态应用程序的资源&#xff0c;StatefulSet用来管理有状态应用程序&#xff08;如kafka、redis、zookeeper集群等&#xff09;的资源&#xff0c;它为每个 Pod 分配一个固定的名称和存储&#xff0c;以确保它们可以保留状态&#xff0c;无…

PHP仓库物资出入库管理系统小程序源码

仓库物资出入库管理系统&#xff1a;让库存管理变得井井有条 **&#x1f4e6; 开篇&#xff1a;告别混乱&#xff0c;拥抱智能库存时代 还在为仓库里堆积如山的物资和繁琐的出入库记录而头疼吗&#xff1f;是时候告别那些混乱的日子了&#xff01;“仓库物资出入库管理系统”应…