根据后台接口动态生成表单

根据后台接口动态生成表单

在这里插入图片描述

接口数据tempoa.js

const controls = {
	"code": 200,
	"data": {
		"res": [{
				"id": "Text-1680072241433",
				"control": "Text",
				"required": 0,
				"filed_name": "text",
				"filed_lable": "文本",
				"type": "",
				"option_key": []
			},
			{
				"id": "Textarea-1680072243015",
				"control": "Textarea",
				"required": 0,
				"filed_name": "text_area",
				"filed_lable": "多行文本",
				"type": "",
				"option_key": []
			},
			{
				"id": "Number-1680072245132",
				"control": "Number",
				"required": 0,
				"filed_name": "number",
				"filed_lable": "数字",
				"type": "",
				"option_key": []
			},
			{
				"id": "Money-1680072247162",
				"control": "Money",
				"required": 0,
				"filed_name": "amount",
				"filed_lable": "金额",
				"type": "",
				"option_key": []
			},
			{
				"id": "Date-1680072249182",
				"control": "Date",
				"required": 0,
				"filed_name": "date",
				"filed_lable": "日期",
				"type": "day",
				"option_key": []
			},
			{
				"id": "Date-1680072251129",
				"control": "Date",
				"required": 0,
				"filed_name": "datetime",
				"filed_lable": "日期+时间",
				"type": "hour",
				"option_key": []
			},
			{
				"id": "Selector-1680072254525",
				"control": "Selector",
				"required": 0,
				"filed_name": "select",
				"filed_lable": "单选",
				"type": "single",
				"option_key": [{
						"key": "option-1680072254525",
						"value": "选项1",
						"en_value": ""
					},
					{
						"key": "option-1680072254526",
						"value": "选项2",
						"en_value": ""
					}
				]
			}
		],
		"template_name": "测试获取模版详情"
	},
	"msg": "获取成功"
}
export default controls

使用实例

<template>
	<div class="app-container">
		<el-form :model="ruleForm" ref="ruleForm" label-width="100px" class="demo-ruleForm">
			<template v-for="(item, index) in ruleForm.form">
				<el-card class="box-card" :key="index" style="margin-bottom:12px;">
					<template v-for="(subitem,subindex) in item.table">
						{{subitem.type}}
						<el-form-item :label="`${subitem.label}`" :key="index+''+subindex"
							:prop="`${ruleForm.form[index].table[subindex].value}`">
							<el-input v-model="subitem.value" :placeholder="subitem.placeholder"></el-input>
						</el-form-item>
					</template>
					<el-col :span="24" style="display: flex;justify-content: center;margin-bottom:12px;"
						v-if="index > 0">
						<el-button type="danger" icon="el-icon-delete" circle
							@click="subtractHandle(index)"></el-button>
					</el-col>
				</el-card>
			</template>
			<el-form-item>
				<el-button type="primary" @click="plusHandle">新增</el-button>
			</el-form-item>
			<el-form-item>
				<el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
				<el-button @click="resetForm('ruleForm')">重置</el-button>
			</el-form-item>
		</el-form>
	</div>
</template>

<script>
	import controls from '@/utils/tempoa.js';
	export default {
		components: {

		},
		data() {
			return {
				ruleForm: {
					form: []
				},
			};
		},
		mounted() {
			const dataList = controls.data.res;
			console.log("[]", dataList)
			this.dealwithDataAPI(dataList).then(response => {
				console.log("[--]", response);
				this.ruleForm["form"] = response;
			})
		},
		methods: {
			/**
			 * 表单提交
			 * **/
			submitForm(formName) {
				this.$refs[formName].validate(valid => {
					if (valid) {
						console.log(this.ruleForm);
					}
				});
			},
			/**
			 * 重置表单
			 * **/
			resetForm(formName) {
				this.$refs[formName].resetFields();
			},
			/**
			 * 新增明细
			 * **/
			plusHandle() {
				const dataList = controls.data.res;
				let tempTable = dataList.map(item => ({
					type: item.control,
					value: '',
					label: item.filed_lable,
					key: item.id,
					placeholder: item.filed_lable,
					config: item
				}))

				this.ruleForm["form"].push({
					label: "表单",
					table: tempTable
				})
			},
			/**
			 * 删除明显子项
			 * **/
			subtractHandle(subIndex) {
				console.log(subIndex);
				this.ruleForm.form.splice(subIndex, 1);
			},
			/**
			 * 处理数据用于页面展示
			 * **/
			dealwithDataAPI(dataList) {
				return new Promise((resolve, reject) => {
					if (dataList.length > 0) {
						const tempTable = dataList.map(item => ({
							type: item.control,
							value: '',
							label: item.filed_lable,
							key: item.id,
							placeholder: item.filed_lable,
							config: item
						}));

						const tempForm = [{
							label: '表单',
							table: tempTable
						}];
						resolve(tempForm)
					} else {
						reject([])
					}
				})
			}
		}
	};
</script>

<style lang="scss" scoped></style>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我理解你的要求了。首先,你需要先引入Bootstrap3的CSS和JS文件,以及jQuery和Bootstrap3的JS依赖文件,代码如下: ```html <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> ``` 然后,你需要创建一个表单,代码如下: ```html <div class="container"> <h2>接口配置</h2> <form class="form-horizontal" id="interface-form"> <div class="form-group"> <label class="control-label col-sm-2" for="interface-id">接口ID:</label> <div class="col-sm-10"> <input type="text" class="form-control" id="interface-id" name="interface-id" placeholder="请输入接口ID"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="interface-name">接口名称:</label> <div class="col-sm-10"> <input type="text" class="form-control" id="interface-name" name="interface-name" placeholder="请输入接口名称"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="interface-class">接口类名称:</label> <div class="col-sm-10"> <input type="text" class="form-control" id="interface-class" name="interface-class" placeholder="请输入接口类名称"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="interface-path">接口路径:</label> <div class="col-sm-10"> <input type="text" class="form-control" id="interface-path" name="interface-path" placeholder="请输入接口路径"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="is-valid">有效标志:</label> <div class="col-sm-10"> <label class="checkbox-inline"><input type="checkbox" id="is-valid" name="is-valid" value="1">是</label> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="create-time">创建时间:</label> <div class="col-sm-10"> <input type="text" class="form-control" id="create-time" name="create-time" placeholder="请输入创建时间"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="update-time">修改时间:</label> <div class="col-sm-10"> <input type="text" class="form-control" id="update-time" name="update-time" placeholder="请输入修改时间"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="operator">操作人:</label> <div class="col-sm-10"> <input type="text" class="form-control" id="operator" name="operator" placeholder="请输入操作人"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default">提交</button> </div> </div> </form> </div> ``` 接下来,你需要编写一个AJAX请求,将表单数据提交到后台,代码如下: ```javascript $(document).ready(function() { // 提交表单 $('#interface-form').submit(function(e) { e.preventDefault(); var formData = $(this).serialize(); $.ajax({ url: '/api/interface', type: 'POST', data: formData, dataType: 'json', success: function(data) { alert('提交成功!'); }, error: function() { alert('提交失败!'); } }); }); }); ``` 最后,你需要编写一个查询接口的AJAX请求,将查询条件提交到后台,并将返回的数据渲染到页面中,代码如下: ```javascript $(document).ready(function() { // 查询接口 $('#search-btn').click(function() { var interfaceId = $('#interface-id-search').val(); var interfaceName = $('#interface-name-search').val(); var interfaceClass = $('#interface-class-search').val(); var interfacePath = $('#interface-path-search').val(); var createTime = $('#create-time-search').val(); var updateTime = $('#update-time-search').val(); $.ajax({ url: '/api/interface', type: 'GET', data: { 'interfaceId': interfaceId, 'interfaceName': interfaceName, 'interfaceClass': interfaceClass, 'interfacePath': interfacePath, 'createTime': createTime, 'updateTime': updateTime }, dataType: 'json', success: function(data) { // 渲染数据到页面 }, error: function() { alert('查询失败!'); } }); }); }); ``` 以上就是基于Bootstrap3生成一个form表单配置页面的代码,你可以根据需要进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值