vue3封装表格嵌套表单问题汇总

news2024/11/27 11:52:03

1.插槽嵌套多层数据ui组件怎么使用
思路:插槽具名【区分】后暴露传递,这个为神魔要区分,因为封装组件表格列表项也有插槽
步骤一:表单插槽暴露

    <ElForm
      class="form-search"
      :model="formParams"
      ref="formRef"
      :style="fixedStyle"
    >
      <div
        :class="['form-serach-item-box']"
        v-for="(item, index) of (disposeFormItemList || []).slice(
          0,
          formItemNum
        )"
        :key="index"
        v-show="!item.show"
        :grid="fiexedNum"
      >
        <!-- 搜索插槽 -->
        <ElFormItem
          class="form-item-input"
          v-if="item.type !== '%' && item.type == 'slot'"
          colon
          :label="item.label"
          :prop="item.prop"
        >
          <!-- 插槽自定义检索组件 -->
          <slot
            v-if="item.slotName"
            :name="item.slotName"
            v-bind="{
              field: item.prop,
              model: formParams,
            }"
          ></slot>
        </ElFormItem>
      </div>
    </ElForm>

步骤2:表格组件区分暴露插槽

  <div class="table-warpper_lat" :style="fixedTableHeight">
    <C_BasicFormSearch
      ref="_formSearchRef"
      v-if="formItemList"
      :id="_searchFormUuid"
      :formParams="initFormParams!"
      :formItemList="list"
      @e_dispatchGetDataFn="e_dispatchGetDataFn"
      @e_changeParms="emits('e_changeParams', $event)"
      @changeFlodSearch="calcTableClientHeight"
      @reset="emits('reset')"
      :formSearchInputHistoryString="formSearchInputHistoryString"
      :class="_isShowSearch ? 'show-search' : 'none-search'"
      :formItemNum="formItemNum"
      :fiexedNum="fiexedNum"
      :isShowSearchMore="isShowSearchMore"
      :cardBorder="cardBorder"
      :useOutReset="useOutReset"
      :drawerSize="drawerSize"
      :searchFormJustify="searchFormJustify"
      :searchFormLabelPosition="searchFormLabelPosition"
    >
      <template
        #[replaceFormSlotKey(item)]="data"
        v-for="item in getFormSlotKeys"
      >
        <slot :name="item" v-bind="data || {}"></slot>
      </template>
    </C_BasicFormSearch>
    <ElCard
      :shadow="shadow"
      :class="{ 'table-warpper': true, 'table-no-border': !cardBorder }"
      :id="_tableUuid"
    >
      <!-- TODO: 表格 -->
      <ElTable
        :row-key="rowkey"
        v-bind="$attrs"
        ref="_tableRef"
        :border="border"
        :data="_tableData"
        :tree-props="props.treeProps"
        :class="props.className"
        :header-cell-style="setHeaderStyle"
        v-loading="_isLoading"
        @selection-change="selectChange"
        @select="select"
        @select-all="selectAll"
        @cell-mouse-enter="cellMouseEnter"
        @cell-mouse-leave="cellMouseLeave"
        @cell-click="cellClick"
        @cell-dblclick="cellDblclick"
        @cell-contextmenu="cellContextmenu"
        @row-click="rowClick"
        @row-contextmenu="rowContextmenu"
        @row-dblclick="rowDblclick"
        @header-click="headerClick"
        @header-contextmenu="headerContextmenu"
        @sort-change="sortChange"
        @filter-change="filterChange"
        @current-change="currentChange"
        @header-dragend="headerDragend"
        @expand-change="expandChange"
        @clearSelection="() => (_selectedAllRows = [])"
        v-waterMarker="waterMarker"
      >
        <el-table-column
          fixed="left"
          :width="25"
          type=""
          v-if="getIsDraggable()"
          ><el-icon class="dragIcon" title="拖拽"><Rank /></el-icon>
        </el-table-column>
        <el-table-column
          fixed="left"
          v-if="isSelect"
          v-bind="selectConfig"
          type="selection"
          align="center"
        />
        <el-table-column
          type="index"
          :width="indexWidth"
          fixed="left"
          :index="props.indexFn"
          label="序号"
          v-if="showIndex"
          align="center"
          class-name="index"
        >
          <template #header v-if="indexHeaderSlots">
            <component :is="indexHeaderSlots" />
          </template>
        </el-table-column>
        <template v-for="item of tableColumns" :key="item">
          <tableColumn :item="item" v-bind="omit(item, ['children'])">
            <template #[item]="scope" v-for="item in getTableColumnSlots">
              <slot
                :name="item"
                :column="scope.column"
                :row="scope.row"
                :index="scope.$index"
              />
            </template>
          </tableColumn>
        </template>
        <el-table-column
          fixed="right"
          label="操作"
          :width="actionWidth"
          align="center"
          v-if="$slots.action"
        >
          <template #default="scope">
            <slot
              name="action"
              :column="scope.column"
              :row="scope.row"
              :index="scope.$index"
            />
          </template>
        </el-table-column>
      </ElTable>
      <div class="table-footer-wrapper">
        <div class="table-footer-left">
          <slot name="table-footer-tool" />
        </div>
        <!-- TODO: 分页器 -->
        <div
          v-if="isShowPage && total > 0"
          class="table-footer-right"
          :style="{
            justifyContent: pageAlignJustifyContent,
          }"
        >
          <ElPagination
            v-model:currentPage="page"
            v-model:page-size="pageSize"
            :page-sizes="pageSizes"
            :small="'small'"
            :disabled="false"
            :background="true"
            layout="total, sizes, prev, pager, next, jumper"
            :total="total"
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
          />
        </div>
      </div>
    </ElCard>
  </div>

//表格搜索插槽-开始
function replaceFormSlotKey(key: string) {
  if (!key) return ''
  return key?.replace?.(/form\-/, '') ?? ''
}
const getFormSlotKeys = computed(() => {
  const that = getCurrentInstance()
  const keys = Object.keys(that!.slots)
  return keys
    .map((item) => (item.startsWith('form-') ? item : null))
    .filter((item) => !!item) as string[]
})
//表格搜索插槽-结束
// 列设置
const tableColumns = ref<I_TableColumns[]>(props.columns)
// 表格列中的插槽
const getTableColumnSlots = computed(() => {
  const that = getCurrentInstance()
  const slotsList: string[] = []
  Object.keys(that!.slots).forEach((item) => {
    if (!item.startsWith('form-')) {
      slotsList.push(item)
    }
  })
  return [
    ...tableColumns.value.filter((item) => item.slot).map((item) => item.slot),
    'expandSlot', // 兼容列 type 为 'expand' 的列
    ...slotsList,
  ]
})


步骤3页面使用姿势

    <template #form-contractCode1="{ model, field }">
      <el-input type="number" v-model="model[field]" placeholder="请输入">
        <template #append>元</template>
      </el-input>
    </template>
    配置项
      // // 表格搜索插槽-步骤1

{
type: ‘slot’,
prop: ‘overhaulCode1’,
label: ‘单号1’,
placeholder: ‘请输入1’,
slotName: ‘contractCode1’,
},
成果展示
在这里插入图片描述

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

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

相关文章

MS5208T/MS5208N——2.7V 到 5.5V、 12Bit、8 通道轨到轨输出数模转换器

MS5208T/MS5208N 是一款 12Bit 、 8 通道输出的电压型 DAC &#xff0c;内部集成上电复位电路、轨到轨输出 Buffer 。接口采用 三线串口模式&#xff0c;最高工作频率可以到 40MHz &#xff0c;兼容 SPI 、 QSPI 、 DSP 接口和 Microwire 串口。输出接到一个轨到轨…

【zabbix】zabbix四大监控方式

zabbix四大监控方式 zabbix四大监控方式1、 Agent2、 SNMP3、IPMI4、JMX 设置 zabbix-snmp 监控 zabbix监控tomcat的jvm内存1.介绍Zabbix Java Gateway 主要功能使用场景 2.Zabbix Java Gateway 配置步骤**3.在被控端的tomcat上开启jvm监控**4.在zabbix-server上添加监控4.1.添…

贾英才主任的中医探索之路

在北京崇文门中医医院&#xff0c;贾英才主任在中医领域的钻研从未停歇。他对药理的探究和药物搭配的研究&#xff0c;展现出了非凡的专注与执着。 贾英才主任常常埋首于浩瀚的中医典籍之中&#xff0c;逐字逐句地研读古代名医的论述&#xff0c;试图从那些古老的智慧中汲取精…

R语言 | 使用ggplot绘制柱状图,在柱子中显示数值和显著性

原文链接&#xff1a;使用ggplot绘制柱状图&#xff0c;在柱子中显示数值和显著性 本期教程 获得本期教程示例数据&#xff0c;后台回复关键词&#xff1a;20240628。&#xff08;PS&#xff1a;在社群中&#xff0c;可获得往期和未来教程所有数据和代码&#xff09; 往期教程…

一文弄懂线性回归模型

1、引言 今天&#xff0c;我们将深入探讨机器学习中的三个关键概念&#xff1a;线性回归、代价函数和梯度下降。这些概念构成了许多机器学习算法的基础。起初&#xff0c;我决定不写一篇关于这些主题的文章&#xff0c;因为它们已经被广泛涉及。不过&#xff0c;我改变了主意&…

安卓开发app-基础的java项目构建补充知识

安卓开发app-基础的java项目构建补充知识&#xff01;上一次分享了基础的项目构建&#xff0c;但是还遗漏了一些基础的内容。今天补充完整。 首先&#xff0c;是关于项目的一些配置文件的信息。 第一个配置文件&#xff1a;{setting.gradle} 国内阿里云仓库地址信息&#xff1…

[leetcode]avoid-flood-in-the-city 避免洪水泛滥

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> avoidFlood(vector<int>& rains) {vector<int> ans(rains.size(), 1);set<int> st;unordered_map<int, int> mp;for (int i 0; i < rains.size(); i) {i…

java周测总结(3)

1、什么是I0流&#xff1f; 是一串流动的字符,从先进先出的方式要求信息的通道。 2、什么是序列化&#xff1f;什么是反序列化&#xff1f; 序例化是将对象的状态存储到特定的存储介质中的过程反序例化是将特定的有合者公质中数据重新构建对象的过程。 3、Java中线程在哪个包下…

CocosCreator构建IOS的wwise教程

CocosCreator构建IOS教程 添加wwise教程: 1.添加include 2.添加SoundEngine 3.添加Profile-iphoneos下面lib下面的.a 4.导入js调用C++的文件 5.导入这些文件 6.初始化ios绝对路径和TTS语音合成对象 6.获得根目录绝对路径,加载pck需要找到绝对路径。怎么找绝对路径? #impor…

【vue3】【vant】 移动端古诗词句子发布收藏项目

更多项目点击&#x1f446;&#x1f446;&#x1f446;完整项目成品专栏 【vue3】【vant】 移动端古诗词句子发布收藏项目 获取源码方式项目说明&#xff1a;其中功能包括素材包含&#xff1a;项目运行环境运行截图 获取源码方式 加Q群&#xff1a;632562109项目说明&#xf…

wavesummit2024发布飞桨3.0版本

今天网上看了wavesummit2024深度学习开发者大会,本来没有啥期待&#xff0c;结果发现飞桨竟然发布3.0版本了&#xff01; 以下是飞桨框架 3.x 的新特性&#xff1a; 动静统一自动并行&#xff1a; 为了降低大模型的编程难度&#xff0c;飞桨还优化了动静统一的半自动并行编程范…

SD-WAN组网对比传统组网的优势

随着商业环境的迅速变化&#xff0c;企业对网络连接的需求不断增长。传统组网方案已经难以满足现代企业的需求&#xff0c;而作为一种新兴的网络解决方案&#xff0c;SD-WAN正逐渐受到企业的青睐。那么&#xff0c;SD-WAN究竟在哪些方面优于传统组网方案呢&#xff1f; 灵活性 …

力扣SQL50 员工的直属部门 子查询 双重

Problem: 1789. 员工的直属部门 &#x1f468;‍&#x1f3eb; 参考题解 Code select employee_id, department_id from Employee where primary_flag Y # Y 表明是直属部门 or employee_id in (select employee_idfrom Employeegroup by employee_idhaving count(employee…

IDEA SpringBoot整合SpringData JPA(保姆级教程,超详细!!!)

目录 1. 简介 2. 创建SpringBoot项目 3. Maven依赖引入 4. 修改application.properties配置文件 5. Entity实体类编写 6. Dao层接口开发 7. 测试接口开发 8. 程序测试 1. 简介 本博客将详细介绍在IDEA中&#xff0c;如何整合SpringBoot与SpringData JPA&#xff0c;以…

海外注册 | 一分钟看懂美国医疗器械(FDA)注册

摘要 ✨ 在全球化的医疗市场中&#xff0c;美国市场对于医疗器械制造商至关重要。本指南旨在为制造商提供全面的美国市场准入指导&#xff0c;确保产品合规并迅速进入市场。 监管机构 美国食品药品监督管理局&#xff08;FDA&#xff09;负责医疗器械的注册&#xff0c;确保其…

GD32F4时钟配置

1.前言 硬件&#xff1a;GD32F450 最高时钟频率200MHZ(外部晶振8MHZ) 软件&#xff1a;KEIL(V5.35) 固件包&#xff1a;GD32F4xx_Firmware_Library_V3.2.0 2.时钟树 时钟配置大概流程如下图红线指示&#xff0c;GD32F470的最高频率可以到240MHZ&#xff0c;GD32F450最高…

Doris:倒排索引

目录 一、倒排索引介绍 二、倒排索引语法 2.1建表时创建倒排索引 2.2 已有表增加倒排索引 2.3 删除索引 三、使用倒排索引 3.1 创建带有倒排索引的表 3.2 插入数据 3.3利用倒排索引查询 3.4 自定义分词 一、倒排索引介绍 倒排索引&#xff0c;是信息检索领域常用的索…

Python之父推荐!Star 60k!深入CPython内核:揭秘内部实现细节

都说 Python 是人工智能的“天选”语言&#xff0c;为什么呢&#xff1f; 可能很多读者都知道&#xff0c;Python 的解释器是用 C 语言写的&#xff0c;所以其实我们在谈论 “Python” 的时候&#xff0c;99.9% 的情况说的就是 “CPython”&#xff01; CPython 是目前最流行的…

ROS2创建自定义接口

ROS2提供了四种通信方式&#xff1a; 话题-Topics 服务-Services 动作-Action 参数-Parameters 查看系统自定义接口命令 使用ros2 interface package sensor_msgs命令可以查看某一个接口包下所有的接口 除了参数之外&#xff0c;话题、服务和动作(Action)都支持自定义接口&am…

石墨舟氮气柜的特点和使用要求介绍

石墨舟是一种在半导体、太阳能光伏等高科技产业中广泛使用的专用工具&#xff0c;主要由高纯度石墨材料制成。它的形状通常像一只船&#xff0c;因此得名“石墨舟”。石墨舟主要用于承载硅片或其他基板材料通过各种高温处理过程&#xff0c;是制造半导体器件和太阳能电池片的关…