首页 > 其他分享 >Vue3——基于tdesign封装一个通用的查询组件

Vue3——基于tdesign封装一个通用的查询组件

时间:2023-05-24 14:34:30浏览次数:44  
标签:tdesign const formData value label Vue3 组件 封装

前言

基于Vue3+TS+tdesign封装一个通用的查询组件;

临时写的一个demo

内容

组件代码

<template>
  <t-form ref="form" :model="formData" inline>
    <t-form-item v-for="item in formConfig" :key="item.name" :label="item.label">
      <component :is="item.type" v-model="formData[item.name]" :options="item.options"> </component>
    </t-form-item>
    <t-form-item>
      <t-space size="small">
        <t-button theme="primary" @click="submitForm">提交</t-button>
        <t-button theme="default" variant="base" @click="resetForm">重置</t-button>
      </t-space>
    </t-form-item>
  </t-form>
</template>
<script setup lang="ts">
import { defineProps, ref } from 'vue';

interface Props {
  formConfig: Array<{
    type: string;
    label: string;
    name: string;
    options?: any[];
  }>;
}

defineProps<Props>();

const emit = defineEmits(['submit']);

const formData = ref({});
const form = ref(null);

const submitForm = () => {
  emit('submit', formData);
};

const resetForm = () => {
  formData.value = {};
  emit('submit', formData);
};
</script>

使用

<template>
  <search-form :form-config="formConfig" @submit="onSubmit"></search-form>
</template>
<script setup lang="ts">
import searchForm from '@/components/form/search/index.vue';

const formConfig = [
  {
    type: 't-input',
    label: 'Name',
    name: 'name',
  },
  {
    type: 't-select',
    label: 'Gender',
    name: 'gender',
    options: [
      { label: 'Male', value: 'male' },
      { label: 'Female', value: 'female' },
    ],
  },
];

const onSubmit = (formData) => {
  console.log('父组件', formData.value);
};
</script>

标签:tdesign,const,formData,value,label,Vue3,组件,封装
From: https://www.cnblogs.com/wangyang0210/p/17428199.html

相关文章

  • 直播app开发,基于van-uploader封装的文件上传图片压缩组件
    直播app开发,基于van-uploader封装的文件上传图片压缩组件1、调用<template>  <div>    <compress-uploaderv-model="fileList":compressSwitch="true":quality="0.5":maxCount="3"/>  </div></template> <......
  • Spring Boot 我随手封装了一个万能的 Excel 导出工具,传什么都能导出!
    前言如题,这个小玩意,就是不限制你查的是哪张表,用的是什么类。我直接一把梭,嘎嘎给你一顿导出。我知道,这是很多人都想过的,至少我就收到很多人问过我这个类似的问题。我也跟他们说了,但是他们就是不动手,其实真的很简单。不动手怎么办?我出手呗。不多说开搞。正文玩法很简单。......
  • 关于c#原生sql的封装
     //1将实体对象动态转换为原生sql语句(增,删,改,查),查暂时只有单表查询,多实体的动态生成暂时还没想出来usingMicrosoft.EntityFrameworkCore;usingMicrosoft.EntityFrameworkCore.Metadata.Internal;usingMicrosoft.Extensions.Hosting;usingMISSION.Entitys;usingMISSION......
  • vue3.0组件封装
    组件全局祖册1.建立公共文件夹my-ui2.index.js文件导出全局祖册组件的install方法3.main.js中impotindex.js导入install方法使用并useimportmyUifrom'./components/my-ui'createApp(App).use(myUi).mount('#app')......
  • Cesium结合GIS天地图 加载倾斜摄影3dtile + vue3
    实现思路将倾斜摄影OSGB数据转换为3dtile(转换方式很多,可以利用第三方工具cesiumlab)利用Cesium加载GIS地图,我这里使用的是天地图,可以加载其他地图都行加载3dtile数据到地图中展示安装插件npminstallcesium加载地图以加载天地图为例,需要先到天地图官网去申请开发者,获取......
  • Uni-app 封装 API 请求
    一、在文件夹API下创建api.jsconstBASE_URL="";//封装请求方法constrequest=(url,method,data)=>{ wx.showLoading({ title:'加载中'//数据请求前loading }) returnnewPromise((resolve,reject)=>{ wx.request({ url:BASE_URL+url,......
  • 直播app开发搭建,scroll-view封装自定义下拉刷新
    直播app开发搭建,scroll-view封装自定义下拉刷新完整代码 <!--container.vue--><template><view><scroll-viewscroll-y="true"class="scroll-view":refresher-enabled="refresh":refresher-triggered="triggered":refresher-t......
  • Vue2 到 Vue3 升级插件gogocode-plugin-vue
    配合gogocode-cli使用开始迁移​Vue3的到来为我们带来了许多惊喜的变化,但是由于Vue3对于Vue2在Api层面存在诸多兼容问题,并不能做到平滑升级。所以我们根据v3迁移指南利用gogocode这个代码转换利器,利用它操作AST,开发了一套Vue2升级工具。利用这套工具能够快速地把你的Vue2代码升......
  • vue3遇到的问题集合
    1.vue3打包设置 2.vue3路由配置history 3.vue3屏蔽eslint ......
  • vue3 左侧菜单栏默认展开关闭
    <el-menuclass="mainMenu"routerbackground-color="transparent"active-text-color="#fff":unique-opened="true":collapse-transition="false"......