vue-element 表格组合查询 - fc-table-search 组件封装

news2024/9/30 12:15:39

开发目的

解决搜索form参数读取,配合异步请求,更新渲染数据;支持自适应高度,分页查询,搜索查询/重置。
额外提供formater类型:标签定义,金额,时间格式化,跨页勾选,静态分页等。
只需三个条件属性,满足大部分场景表格,搜索,分页组合业务场景和统一UI风格规范。
提高开发效率,代码优雅,可读性,方便维护。

示例效果:

代码:

<template>
  <div class="fc-table-search-demo">
    <fc-table-search
      className="searchListPage"
      ref='tableSearch'
      :form-items='formItems'
      :table-columns='tableColumns'
      v-model="formData"
      @requestMethod="getTableData"
      v-bind="searchOptions"
    >
      <!-- 搜索按钮区域-表单自定义 -->
      <template #propName="{form, attrs}">
        <el-form-item v-bind="attrs">
          <el-input v-model="form.ceshi"/>
        </el-form-item>
      </template>
      <template #handleLeft>
        <el-button @click="() => $refs.tableSearch.onRefresh()">通过ref调用onRefresh()重置刷新</el-button>
        <el-button @click="() => $refs.tableSearch.onRefresh(true)">通过ref调用onRefresh(true)当前刷新</el-button>
      </template>
      <!-- 操作表格区域 -->
      <template #handleRight>
      <el-button>导出</el-button>
      </template>
  </fc-table-search>
  </div>
</template>

<script>
export default {
  name: 'fc-table-search-demo',
  data () {
    return {
      formData: { date: [new Date(), new Date()],desc: { aa: { bb: { cc: '111' } } }, result: { code: '' }, resultType: null } // 收集查询
    }
  },
  computed: {
    // 搜索表单定义
    formItems () {
      return [
        { comp: 'date', prop: 'date', label: '日期范围', type: 'datetimerange', dateRangeKeys:['starts','ends'] },
        { comp: 'input', prop: 'result.code', label: '对账结果' },
        { comp: 'date', prop: 'date', label: '对账日期', type: 'datetimerange', dateRangeKeys:['starts','ends'], itemAttrs: {labelWidth: ''} },
        { comp: 'input', prop: 'desc.aa.bb.cc', label: '业务描述' },
        { comp: 'cascader', prop: 'cascader', label: '城市地区' },
        { comp: 'select', prop: 'resultType', label: '对账类型', placeholder: '自定义', options: [{label: '对账差异', value: 1}, {label: '对账1', value: 4}] }
      ]
    },
    // 表格定义
    tableColumns() {
      return [
        { type: 'selection'},
        { label: '对账结果', slotName: 'ceshi' },
        { prop: 'date', label: '对账日期', formatter: 'date' },
        { prop: 'status', label: '对账金额', formatter: 'money' },
        { prop: 'desc', label: '对账描述', width: 150, formatter: () => '213213业务/类型描述文本,业务类型/描述文本,业务类型描述文本,业务类型描述文本,' },
        {
          label: '操作',
          fixed: 'right',
          width: 100,
          render: (h, {row}) => {
            return <div>
              <el-button size="mini" type="text">详情</el-button>
            </div>
          }
        }
      ]
    },
    // 额外自定义配置
    searchOptions() {
      return {
        // 自定义表格配置
        'table-config': {
          height: 300,
          isPaging: false, // 是否启用静态分页
          isCrossCheck: true, // 是否启用跨页勾选
          'show-summary': true,
          'summary-method': () => {
            return ['', '合计']
          }
        },
        // 自定义分页配置
        'pagination-config': {},
        // 自定义form搜索配置
        'form-config': {
          'label-width': '70px'
        },
        // 是否自动高度
        autoHeight: false
        // 是否隐藏分页
        // pageHide: false,
        // 展示几行
        // formLine: 1
        // 自定义展示个数
        // formSpan: 4
        // 定义每个col的响应布局
        // formCol: { xl: '12' }
        // 是否包含折叠功能
        // isToggle: true
        // 自定义loading
        // setLoading: true
        // 标示key,用于跨页勾选
        // columnKey: 'id'
      }
    }
  },

  methods: {
    // 请求数据
    async getTableData ({ current, size, total, ...formData }, fn, options) {
      try {
        let { date, ...use } = formData
        const [start = '', end = ''] = date || []
        use.startDate = start
        use.endDate = end
        use.pageNum = current
        use.pageSize = size
        console.log('查询结果:', { current, size, total, ...formData }, 'options', options)
        setTimeout(() => {
          fn({
            data: Array(10).fill({status: 0, date: '2020-08-10', status: '9992342.448423', desc: '业务类型描述文本,业务类型描述文本,业务类型描述文本,业务类型描述文本,'}),
            total: 100
          })
        }, 1000)
      } catch (error) {
        fn({message: error.message})
      }
    }
  }
}
</script>

<style lang="less" scoped>
.fc-table-search-demo{
  width: 100%;
  background: #f6f6f6;
  padding:16px
}
</style>

 

 

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

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

相关文章

Minstrel自动生成结构化提示,让AI为AI写提示词的多代理提示生成框架

在人工智能快速发展的今天&#xff0c;如何有效利用大型语言模型&#xff08;LLMs&#xff09;成为了一个普遍关注的话题。这是9月份的一篇论文&#xff0c;提出了LangGPT结构化提示框架和Minstrel多代理提示生成系统&#xff0c;为非AI专家使用LLMs提供了强大支持。 对于非人…

PHP人才机遇桥梁招聘求职全能系统小程序源码

人才机遇桥梁 —— 招聘求职全能系统全解析 &#x1f4bc;&#x1f680; &#x1f309; 搭建人才与机遇的桥梁 在这个竞争激烈的职场环境中&#xff0c;找到一份心仪的工作或招募到合适的人才&#xff0c;往往不是一件容易的事。但幸运的是&#xff0c;我们有了“人才机遇桥梁…

Hello-Java-Sec靶场搭建

安装环境&#xff1a;宝塔Linux面板 1.将靶场克隆到本地 git clone https://github.com/j3ers3/Hello-Java-Sec 2.安装maven yum install maven &#xff08;kali&#xff1a;apt install maven&#xff09; 3.安装成功后 mvn -v验证⼀下 4. 配置数据库连接&#xff0c;数据…

SysML图例-悬架作动器(Suspension Aactuator)

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>>

【Android】获取备案所需的公钥以及签名MD5值

目录 重要前提 获取签名MD5值 获取公钥 重要前提 生成jks文件以及gradle配置应用该文件。具体步骤请参考我这篇文章&#xff1a;【Android】配置Gradle打包apk的环境_generate signed bundle or apk-CSDN博客 你只需要从头看到该文章的配置build.gradle&#xff08;app&…

【议题征集 】上海站 nMeetup 将于十月份开启!

上海&#xff0c;作为我国的经济和金融中心&#xff0c;正迅速发展成为全球领先的科技创新城市。这座城市不仅拥有深厚的文化底蕴&#xff0c;还积极拥抱数字化转型&#xff0c;推动着数据库和人工智能基础设施的快速发展。第三站 nMeetup 我们将走进上海&#xff0c;本次活动由…

面向未来的设计:数字化转型时代的企业架构与建模革新

在数字化转型浪潮席卷全球的今天&#xff0c;企业架构&#xff08;Enterprise Architecture, EA&#xff09;与建模技术正成为引领未来业务发展的核心工具。企业如何设计面向未来的架构&#xff0c;不仅关乎技术的部署&#xff0c;更直接影响业务的战略定位和市场竞争力。《面向…

【PCL】Ubuntu22.04 安装 PCL 库

文章目录 前言一、更新系统软件包二、安装依赖项三、下载 PCL 源码四、编译和安装 PCL五、测试安装成功1、 pcd_write.cpp2、CMakeLists.txt3、build 前言 PCL&#xff08;Point Cloud Library&#xff09;是一个开源的大型项目&#xff0c;专注于2D/3D图像和点云处理。PCL为点…

创客匠人第二期“老蒋面对面”交流会圆满收官!

磅礴的大雨浇不灭奋斗的激情。9月24日&#xff0c;创客匠人第二期老蒋面对面—“创客匠人让知识变现不走弯路”内部大会在集美隆重举行。 本次内部大会旨在传递公司战略精神&#xff0c;深度探讨公司品牌传播的价值、方向和策略。这不仅是一次内部的交流与分享&#xff0c;更是…

详解 JDBC和连接池

目录 一.JDBC概述 1.介绍 2.好处 3.JDBC API 二.数据库连接 1.前置工作 2.方法一 3.方法二 4.方法三 5.方法四 6.方式五(配置文件) 三.ResultSet&#xff08;结果集&#xff09; 1.介绍 2.代码演示 3.底层原理 四.预处理 1.SQL注入 2.PreparedStatement 接口 …

一个很好的例子说明均值平滑滤波器有旁瓣泄漏效应

禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》P89

【C/C++】错题记录(二)

题目一 题目二 x是int型&#xff0c;当x被赋值为1.2浮点型时&#xff0c;x实际赋值为1&#xff0c;所以4.8/5.0由于/是整除&#xff0c;结果为小于1的小数&#xff0c;所以y被赋值为0。 题目三 题目四 题目五 题目六 在这段代码中&#xff0c;定义了一个联合体union X&#xf…

创建Vue项目的时出现:无法加载文件 E:\software\node\node_global\vue.ps1,因为在此系统上禁止运行脚本

创建Vue项目的时出现的问题:出现&#xff1a;无法加载文件 E:\software\node\node_global\vue.ps1&#xff0c;因为在此系统上禁止运行脚本 解决方法&#xff1a; .PowerShelll的执行政策阻止了该操作,用 get-ExecutionPolicy 查看执行策略的状态为受限 输入Set-ExecutionPo…

中关村环球时尚产业联盟 东晟时尚产业创新中心成立

2024年9月6日&#xff0c;中关村环球时尚产业联盟与东晟时尚创新科技&#xff08;北京&#xff09;有限公司于中关村科技园东城园举行了隆重的战略合作签约仪式。 中关村科技园东城园领导发表了致辞&#xff0c;并表示东城区作为首都北京的核心区域&#xff0c;拥有深厚的历史…

书生大模型实战训练营 第三期 入门岛

1.Linux 任务一 完成SSH连接与端口映射并运行hello_world.py vscode自带的端口设置功能很方便 2.Python 任务一 实现wordcount函数 任务二 vscode 单步调试

Android开发 使用platform.pk8和platform.x509.pem文件生成platform.jks文件

文章目录 Android开发 使用platform.pk8和platform.x509.pem文件生成platform.jks文件环境准备使用OpenSSL工具进行格式转换1.将platform.pk8转换为PEM格式&#xff1a;2.使用platform.pem和platform.x509.pem生成PKCS#12格式的PFX文件&#xff08;platform.p12&#xff09;&am…

k8s部署考试系统

一、配置nfs 二、配置前端 1.部署deployment清单 2.补充&#xff1a; 3.访问测试pod 三、后端 1.在pes目录中找到docker文件&#xff0c;创建镜像 从nfs服务器上复制一个pes/java/目录到一个有docker环境的主机(master)上生成java镜像 [rootnfs ~]# scp -r pes/java root192…

废品回收小程序/环保垃圾回收/收二手垃圾小程序/分类资源回收系统/独立版系统源码

>>>系统简述&#xff1a; 1.以微信小程序为基础进行开发&#xff0c;体验好&#xff0c;操作方便 2.从用户下单到回收员接单&#xff0c;在到回收站接收&#xff0c;在到代理全流程通过手机端管理 3.支持废品分类下单&#xff0c;并支持分类数据统计 4.独创回收员多个…

mysql—半同步模式

mysql的并行复制 在172.25.254.20(slave)主机上 默认情况下slave中使用的是sql单线程回放 在master中时多用户读写&#xff0c;如果使用sql单线程回放那么会造成组从延迟严重 开启MySQL的多线程回放可以解决上述问题 mysql> show processlist; 在配置文件中进行编辑 [root…

LVS+keepalived整合负载均衡配置

准备三台服务器&#xff1b;负载均衡服务器192.168.45.136&#xff0c;后端机器1&#xff0c;92.168.45.135&#xff0c;后端机器2&#xff0c;192.168.45.138 在两台后端机器上安装nginx服务&#xff0c;yum install -y nginx,并且启动nginx服务&#xff0c;systemctl start …