antd-vue - - - - - select自定义渲染[封装select组件]

文章介绍了如何在Vue中封装AntDesign的Select组件,实现标签值与option的不一致显示,并展示了代码实例。着重于模板渲染和API交互的定制化处理。

select自定义渲染[封装select组件]

1. 期望效果

标签值和option展示不一致!
在这里插入图片描述

2. 代码展示

官网地址:【antd-vue select】

封装的select组件:

<template>
  <a-form ref="refForm" :model="selectConfig" :labelCol="_labelCol">
    <a-form-item label="管理员" name="list" :rules="selectConfig.rules">
      <a-select
        popupClassName="custom-search"
        v-model:value="selectConfig.list"
        mode="multiple"
        style="width: 100%"
        placeholder="请选择管理员"
        show-search
        :default-active-first-option="false"
        :filter-option="false"
        :not-found-content="null"
        @search="searchAdminList"
        :options="selectConfig.options"
      >
        <!-- 下拉option渲染 -->
        <template #option="{ label, dept_name }">
          &nbsp;&nbsp;{{ label }} {{ !!dept_name ? `(${dept_name})` : '' }}
        </template>
        <!-- value标签渲染 -->
        <template #tagRender="{ label, closable, onClose }">
          <a-tag :closable="closable" style="margin-right: 3px" @close="onClose">
            {{ label }}&nbsp;
          </a-tag>
        </template>
      </a-select>
    </a-form-item>
  </a-form>
</template>
<script setup lang="ts">
import { searchAdmin } from '@/api/common';

const props = defineProps({
  _rules: {
    type: Boolean,
    default: () => {
      return false;
    },
  },
  _options: {
    type: Array,
    default: () => {
      return [];
    },
  },
  _list: {
    type: Array,
    default: () => {
      return [];
    },
  },
  _labelCol: {
    type: Object,
    default: () => ({
      style: {
        width: '90px',
      },
    }),
  },
});

const refForm = ref(null);

const selectConfig = reactive({
  rules: props._rules ? [{ required: true, message: '请选择管理员' }] : [],
  options: [],
  list: [],
});

watch(
  props,
  val => {
    selectConfig.options = val._options;
    selectConfig.list = val._list;
  },
  {
    deep: true,
    immediate: true,
  },
);

/**
 * 搜索管理员
 */
function searchAdminList(e) {
  if (!e) return;
  searchAdmin({ keyword: e }).then(res => {
    if (res.code === 0) {
      const options = res.data.users.reduce((pre, cur) => {
        return [
          ...pre,
          {
            label: cur.name,
            value: cur.momoid,
            dept_name: cur.dept_name,
          },
        ];
      }, []);
      selectConfig.options = [].concat(options);
    }
  });
}

/**
 * 表单校验
 */
function formRules() {
  return refForm.value
    .validate()
    .then(() => {
      return true;
    })
    .catch(() => {
      return false;
    });
}

/**
 * 获取value值
 */
function getValue() {
  return selectConfig.list;
}

/**
 * 将子组件方法暴露给父组件
 */
defineExpose({
  formRules,
  getValue,
});
</script>

<think> 我们在引用中看到了一些关于form-create的信息,特别是引用[3]提到了集成form-create源码的方法。根据引用[3]的内容,我们需要将form-create的源码导入到项目中,并安装相关依赖。 步骤如下: 1. 从GitHub或其他地方获取form-create的源码。 2. 在项目的view目录下(或其他合适目录)新建一个文件夹,存放这些源码。 3. 安装所需的依赖:包括@form-create/element-ui, element-ui, vuedraggable, @form-create/component-wangeditor, vue-codemirror等。 此外,引用[5]提供了一个前端源码地址,可以作为参考。 具体操作步骤: 1. 在项目的合适位置(比如src/components)创建文件夹,例如`form-create-src`,然后将下载的form-create源码放入其中。 2. 在需要使用form-create的组件中,引入源码中的组件。 3. 安装所有必需的依赖包。 注意:由于是源码集成,可能需要根据项目实际情况调整导入方式和路径。 下面是一个示例,展示如何在Vue组件中引入form-create的源码组件: ```vue <template> <div> <form-create :rule="rule" :option="option"></form-create> </div> </template> <script> // 假设我们已经将form-create源码放在src/components/form-create-src下 // 导入form-create组件 import FormCreate from '@/components/form-create-src' export default { components: { FormCreate }, data() { return { // 表单生成规则 rule: [], // 表单配置 option: {} } }, mounted() { // 可以在这里动态获取规则,或者静态定义 this.rule = [ // 表单规则 ] } } </script> ``` 同时,我们需要安装依赖,在项目根目录下运行: ```bash npm install @form-create/element-ui element-ui vuedraggable @form-create/component-wangeditor vue-codemirror # 或者 yarn add @form-create/element-ui element-ui vuedraggable @form-create/component-wangeditor vue-codemirror ``` 注意:如果源码中还有其他依赖,请根据错误提示安装。 此外,引用[4]提到了打包指令,如果我们希望将form-create作为库打包,可以配置打包命令,但一般情况下,直接引入源码即可。 如果遇到问题,比如组件未注册等,可能需要检查源码中是否有全局注册组件的代码,或者我们是否需要手动注册某些组件。 最后,引用[5]中的前端项目源码(https://gitee.com/houshixin/form-design-ui)也可以参考,其中可能包含了集成form-create的示例。 [^1]: form-create 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。支持3个UI框架,并且支持生成Vue 组件。内置20种常用表单组件自定义组件,再复杂的表单都可以轻松搞定。 [^2]: antd vue form 手动校验_rc-form源码浅析。最近在react工程中用到了antd,想学习一下其中form表单的实现原理;antd的form组件是在rc-form的基础上进行封装的,因此本文主要就以下几个点针对性的看了一下rc-form的源码。在每次使用form时,为什么必须要用form.create包一层form表单如何实现数据托管,getFieldDeractor干了什么如何实现双向绑定如何强制更新表单的值如何进行校验form的使用方式。 [^3]: form-create(一)。GitHub项目拉取来的代码,标记为核心组件 需要导入到我们的项目中 在自己项目中的 view 新建一个文件夹存放 form-create的源码 运行之后会报错,这是刚刚导入的文件,我们有些依赖没有安装,如下: 安装依赖: yarn add @form-create/element-ui yarn add element-ui yarn add vuedraggable yarn add @form-create/component-wangeditor yarn add vue-codemirror。 [^4]: form-create-designer表单设计器,组件关联字段值。最后,在package.json里边加一段打包指令 "lib": "vue-cli-service build --target lib --name form-create-designer --dest lib src/index.js"。 [^5]: 表单生成器基于(form-create-designer+ant design vue)。1.源码地址: 前端:https://gitee.com/houshixin/form-design-ui 后端:https://gitee.com/houshixin/form-design-web 2.单独使用前端的时候就把请前后台的接口注释就可以 3.都启动的话: 1).先导入数据库 2.表单生成器主要用到俩表 3.前端主要代码。 §§相关问题§§ 1. form-create 支持哪些UI框架? 2. 如何在form-create中使用自定义组件? 3. 如何解决form-create集成过程中的依赖问题? 4. form-create如何实现表单验证? </think> 根据引用内容,以下是在 Vue 项目中集成 form-create 源码的详细步骤: ### 集成步骤 1. **获取源码** 从 GitHub/Gitee 克隆或下载 form-create 核心源码(引用[3][5]): ```bash git clone https://gitee.com/houshixin/form-design-ui.git # 引用[5]提供的前端源码 ``` 2. **导入源码到项目** 在 Vue 项目的 `src` 目录下创建文件夹(如 `form-create-src`),将下载的源码文件复制到该目录(引用[3])。 3. **安装依赖** 根据引用[3][4]的提示安装必需依赖: ```bash yarn add @form-create/element-ui element-ui vuedraggable yarn add @form-create/component-wangeditor vue-codemirror ``` 或使用 npm: ```bash npm install @form-create/element-ui element-ui vuedraggable npm install @form-create/component-wangeditor vue-codemirror ``` 4. **注册组件** 在 Vue 入口文件(如 `main.js`)中全局注册 form-create: ```javascript import formCreate from '@/form-create-src' // 根据实际路径调整 import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) Vue.use(formCreate) ``` 5. **配置打包(可选)** 如需将 form-create 打包为独立库,在 `package.json` 添加(引用[4]): ```json "scripts": { "lib": "vue-cli-service build --target lib --name form-create --dest lib src/form-create-src/index.js" } ``` 运行 `yarn lib` 或 `npm run lib` 生成编译后的组件库。 ### 使用示例 ```vue <template> <form-create :rule="formRule" :option="formOption" @submit="onSubmit" /> </template> <script> export default { data() { return { formRule: [ // 表单规则配置 { type: 'input', field: 'name', title: '姓名' }, { type: 'select', field: 'role', title: '角色', options: [...] } ], formOption: { // 表单配置 onSubmit: (formData) => console.log(formData) } } }, methods: { onSubmit(formData) { // 表单提交处理 } } } </script> ``` ### 注意事项 1. **路径调整** 源码导入后需检查文件路径引用是否正确,修改导入语句中的相对路径。 2. **依赖兼容性** 确保安装的依赖版本与 Vue 项目兼容(引用[3]提到的依赖冲突需手动解决)。 3. **按需引入** 若只需部分功能,可修改源码仅导入必要模块,减少体积。 4. **调试支持** 在 `vue.config.js` 中添加源码映射便于调试: ```javascript module.exports = { configureWebpack: { devtool: 'source-map' } } ``` [^1]: form-create 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。支持3个UI框架,并且支持生成Vue 组件。内置20种常用表单组件自定义组件,再复杂的表单都可以轻松搞定。 [^3]: form-create(一)。GitHub项目拉取来的代码,标记为核心组件 需要导入到我们的项目中 在自己项目中的 view 新建一个文件夹存放 form-create的源码 运行之后会报错,这是刚刚导入的文件,我们有些依赖没有安装。 [^4]: form-create-designer表单设计器,组件关联字段值。最后,在package.json里边加一段打包指令。 [^5]: 表单生成器基于(form-create-designer+ant design vue)。1.源码地址: 前端:https://gitee.com/houshixin/form-design-ui 后端:https://gitee.com/houshixin/form-design-web。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值