封装一个带el-form的,带el-table的,带分页的,带搜索查询的dialog组件,很使用的二次封装组件。

news2024/9/28 3:23:46

#封装dialog小案例

提示:这是我工作中封装的代码,很使用,需要的可以拿去,
在我们的代码中往往会出现点击按钮出现弹窗进行操作,那么我们就需要对dialog进行一个二次封装。
下边是大概的一个样式。
在这里插入图片描述

##对组件进行二次封装

<template>
  <el-dialog
    title="客户账号查询"
    :visible.sync="dialogVisible"
    :append-to-body="true"
    :close-on-click-modal="false"
    width="900px"
    @close="closeClick"
  >
        
        
 //   :inline="true"  这个是是否行内模式    label-position="right" 提示的内容在右侧显示
        
 //   
    <div class="filter_assert_account_comp">
      <el-form
        v-if="this.dialogQuery && dialogQuery.length > 0"
        ref="ruleForm"
        :inline="true"
        label-position="right"
        class="ruleForm"
        style="margin-bottom: 10px"
      >
        <el-row>
          <el-col v-for="item in this.dialogQuery" :key="item.label" :span="10">
            <el-form-item :label="item.label">
                //本身queryParams是一个对象,我们需要知道的是通过对象才能够去作为接口的传参
              <el-input v-model="queryParams[item.value]" clearable />
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item>
              //:loading="searchLoading"  是否加载中状态   type="primary"
              <el-button icon="el-icon-search" :loading="searchLoading" type="primary" @click="queryAcct">查询</el-button>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>

      <tableList
        ref="table"
        :options="options"
        :pagination="dialogPageInfo"
        :header-data="dialogColumns"
        :table-data="tableData"
        :select-one="true"
        @requestList="dialogDoPage"
        @rowClick="getRowClick"
        @handleSelectionChange="handleSelectionChange"
        @handleRowSelect="handleRowSelect"
      />
    </div>

    <div v-if="isMultiSelect" slot="footer" class="dialog-footer" style="padding-top: 0px;margin-top: -16px;">
      <el-button type="primary" @click="getMulRows()">确 定</el-button>
      <el-button @click="closeClick()">取 消</el-button>
    </div>
  </el-dialog>
</template>

<script>
import TableList from '@/components/TableList'
import CommonApi from '@api/modules/smartTransactionList'

export default {
  // name: "corpCustTabDialog",
  components: {
    TableList
  },
  props: {
    isRowClick: {
      type: Boolean,
      default: true
    },
    dialogVisible: {
      type: Boolean,
      default: false
    },
    showObj: {
      type: Object
    },
    position: {
      type: [String, Number]
    },
    isMultiSelect: {
      type: Boolean,
      default: false
    },
    // 表格配置项
    options: {
      type: Object,
      default: () => {
        return {
          multiSelect: false, // boolean 是否多选
          isindex: false, // boolean 是否展示序列号
          stripe: true, // boolean 斑马纹
          border: true, // boolean 纵向边框
          size: 'medium', // String  medium / small / mini  table尺寸
          fit: true, // 自动撑开
          pagination: true // 是否有分页
        }
      }
    },
    // 分页配置项
    dialogPageInfo: {
      type: Object,
      default: () => {
        return {
          page: 1,
          sizes: [10, 20, 30],
          size: 10,
          total: 0
        }
      }
    },
    // 表格数据
    dialogTableData: {
      type: Array,
      default: () => {
        return []
      }
    }
  },
  data() {
    return {
      searchLoading: false,
      corpCustTabDialog: this.dialogVisible,
      dialogQuery: [
        { label: '客户账号: ', value: 'counterpartyAcctNo' },
        { label: '客户名称: ', value: 'counterpartyName' }
      ],
      queryParams: {
        acctState: '01'
      },
      api: CommonApi.selectRosterPageInfo,
      dialogColumns: [
        {
          prop: 'counterpartyAcctNo',
          'label': '客户账号'
        }, {
          prop: 'counterpartyName',
          'label': '客户名称'
        }, {
          prop: 'counterpartyAcctBankNo',
          'label': '开户行行号'
        }, {
          prop: 'counterpartyAcctBankName',
          'label': '开户行行名'
        }],
      tableData: this.dialogTableData,

      multipleSelections: [],
      selectItem: [],
      multipleList: []
    }
  },
  mounted() {
    if (this.dialogQuery && this.dialogQuery.length > 0) {
      this.dialogQuery.forEach(item => {
        this.$set(this.queryParams, item.value, '')
      })
    }
    this.dialogDoPage()
  },
  methods: {
    dialogDoPage() {
      this.searchLoading = true
      const param = { dto: { ...this.queryParams }, size: this.dialogPageInfo.size, page: this.dialogPageInfo.page }
      this.api(param).then(({ code, data }) => {
        console.log(0)
        if (code === 200) {
          console.log(1)
          if (Array.isArray(data)) {
            this.tableData = data
            console.log(2)
          } else {
            this.tableData = data.records
            this.dialogPageInfo.total = data.total
            console.log(3)
          }
          this.setCheckedRows()
        }
      }).finally(() => {
        this.searchLoading = false
      })
    },
    queryAcct() {
      this.dialogPageInfo.page = 1
      this.dialogDoPage()
    },
    getRowClick(row) {
      if (this.isRowClick) {
        this.closeClick(row)
      }
    },
    // 多选
    getMulRows() {
      const list = []
      this.multipleList.forEach(item => {
        if (item.rows) {
          list.push(...item.rows)
        }
      })
      this.closeClick(list)
    },
    closeClick(row) {
      // position: 有多个的弹框需要展示的时候 用position 区分
      this.$emit('closeHandler', row, this.position)
    },
    handleSelectionChange(row) {
      this.multipleSelections = row
    },
    handleRowSelect(row) {
      let index, object
      this.multipleList.forEach((item, i) => {
        if (item.page === this.dialogPageInfo.page) {
          index = i
          object = item
          return
        }
      })
      if (object) {
        object.rows = [...row]
        this.multipleList[index].rows = [...new Set(object.rows)]
      } else {
        const params = { 'page': this.dialogPageInfo.page, 'rows': [...row] }
        this.multipleList.push(params)
        this.multipleList = [...new Set(this.multipleList)]
      }
    },
    setCheckedRows() {
      this.selectItem = []
      if (this.tableData.length === 0 || this.multipleList.length === 0) return
      const index = this.multipleList.find(item => {
        return item.page === this.dialogPageInfo.page
      })
      if (!index) return
      this.tableData.forEach(item => {
        index.rows.forEach(mItem => {
          if (item.pkId === mItem.pkId) {
            this.selectItem.push(item)
          }
        })
      })
      if (this.selectItem.length > 0) {
        this.$nextTick(() => {
          this.selectItem.forEach(item => {
            this.$refs.table.toggleRowSelection(item)
          })
        })
      }
    }
  }
}
</script>

<style scoped>

</style>

02父组件进行使用子组件

//父组件使用
<el-button slot="append" icon="el-icon-search" @click="endorseeAccClick" />

<counterparty-dialog :dialog-visible="couRateVisible" :position="position" @closeHandler="closeHandler" />

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

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

相关文章

C语言中一维数组及二维数组的运用

1、int arr[] {12,3,4,5,6}; int * p arr; int * q &arr[1]; 其中arr是数组名&#xff0c;代表了整个数组的首元素地址&#xff0c;这个是一个常量&#xff0c;放在常量存储区&#xff0c;所以在给int*p赋值的时候可以不用带&&#xff0c;而下面的arr[1]则代表数…

unidbg或者java层解密方法IDEA中打包成jar包供python调用方法

一、导出jar包方法 &#xff08;1&#xff09;配置jar包参数 &#xff08;2&#xff09;创建生成jar包 成功生成&#xff01; 二、Python代码调用 import jpypejvmPath jpype.getDefaultJVMPath() d unidbg-android.jar # 对应jar地址 jpype.startJVM(jvmPath, "-ea&q…

cloudflared tunnel后台启动

前期视频链接 先前台启动&#xff0c;本文参考 cloudflared tunnel --url localhost:88 run ruoyu 或者 cloudflared tunnel --url localhost:88 --no-chunked-encoding run ruoyu找到你的uuid.json 文件 创建你的config.yaml 或config.yml 内容如下 uuid 配置自己的 url: …

创建员工表并按要求完成数据

mysql> create table employee( id int primary key, name varchar(50), gender enum(男,女) default 男, salary int ); Query OK, 0 rows affected (0.01 sec)mysql> mysql> desc employee; ------------------------------------------------------ | Field | T…

spring重点标签有哪些

<bean>标签 id属性:在容器中Bean实例的唯一标识&#xff0c;不允许重复 class属性:要实例化的Bean的全限定名 scope属性:Bean的作用范围&#xff0c;常用是singleton(默认)和prototype <property>标签:属性注入 name属性:属性名称 value属性:注入的普通属性值 ref属…

Perfetto概览

1、Perfetto 简介 Perfetto是谷歌提供的一个用于性能检测和 trace 文件抓取分析的生产级开源工具包。它可以帮助我们进行应用层面以及系统层面的 trace 文件抓取、native/java 内存剖析。它还提供了一个强大的库能够帮助我们在 web 网页上对抓取的trace 文件进行可视化分析&am…

java项目之农产品供销服务系统(ssm+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的农产品供销服务系统。 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm&#xff0c;mybatis JDK…

关于chrome禁止混合内容造成的问题

混合内容 chrome 对混合内容的定义 是指 存储于http协议下的静态资源与https协议下的资源混用 Chrome官方相关说明 chrome 通过安全策略将 http强制转换为https 这会导致存储于http协议下的 文件出现协议问题从而无法访问 例&#xff1a; 从http文件服务器中引用一张图片到配…

LinearAlgebraMIT2_1_TheColumnSpaceOfAContainsAllVectorsAx

对于Axb&#xff0c;我们要迅速想到线性组合&#xff0c;如下&#xff0c; 我们也可以使用rank秩来反应一个矩阵的特征&#xff0c;如果满秩则可以表示整个向量空间&#xff0c;如上只有两个independent column&#xff0c;它的rank2&#xff0c;表达一个plane平面。 接下来我…

一款玩法十分经典的RPG游戏《QQ宠物大乐斗2》

文章目录 介绍界面介绍游戏主界面&#xff1a;出城界面&#xff1a; 战斗系统主动战斗被动战斗 技能系统主动技能被动技能五神技狂龙傲天拳惊天混元掌灵气寒霜指道威无极真气八卦迷踪腿 道具系统装备系统装备品质装备展示装备获得方式 玩家升级系统通过升级增加属性点使用道具更…

MySQL复习指南

1.数据类型 【数值型】 int或者integer&#xff0c;大小为4个字节&#xff0c;范围&#xff1a;&#xff08;大约&#xff09;-21.5亿~21.5亿&#xff1b; bigint&#xff0c;大小为8个字节&#xff1b; float大小为4个字节&#xff1b; double大小为8个字节&#xff1b; …

为什么要做海外应用市场排名

谷歌和苹果iOS应用商店的算法关键指标&#xff0c;都是基于确保应用商店推荐的应用可以满足大部分用户的需求。基于此&#xff0c;应用覆盖的关键词&#xff0c;应用评分和评论&#xff0c;和应用获取的下载量所体现的用户体验数据&#xff0c;对我们的应用能否获得商店高排名都…

Ajax简介和实例

目录 什么是 AJAX &#xff1f; AJAX实例 ajax-get无参 ajax-get有参 对象和查询字符串的互转 ajax-post ajax-post 表单 AJAX 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。 什么是 AJAX &#xff1f; 菜鸟教程是这样介绍的&#xff1a…

MySQL数据修改和插入数据

1.创建表&#xff1a; 创建员工表employee&#xff0c;字段如下&#xff1a; id&#xff08;员工编号&#xff09;&#xff0c;name&#xff08;员工名字&#xff09;&#xff0c;gender&#xff08;员工性别&#xff09;&#xff0c;salary&#xff08;员工薪资&#xff09; …

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(二)

系列文章目录 个人简介&#xff1a;机电专业在读研究生&#xff0c;CSDN内容合伙人&#xff0c;博主个人首页 Python面试专栏&#xff1a;《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读&#xff0c;一起进步&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; …

Python基础综合案例-数据可视化(柱状图)

今天给大家带来的是Python综合实战开发的数据可视化操作 通过python实现对数据的分析、可视化 数据来源:线上公布数据&#xff0c;需要可私信 前期准备工作&#xff1a;Python可视化准备工作 前期模块安装等前期基础的准备工作大家可以看我之前的文章讲解&#xff0c;有问题可…

ROS-Moveit-ABORTED CONTROL_FAILED

问题 当我使用python程序控制机械臂作笛卡尔空间运动时&#xff0c;让其轨迹在空间中画一个正方形&#xff0c;具体程序如下 #!/usr/bin/env python # -*- coding: utf-8 -*-import rospy, sys import moveit_commander from moveit_commander import MoveGroupCommander fro…

IDEA 2023.1.3最新版安装教程

目录 一、前言 一、下载 二、安装 总结 一、前言 常常学东西都是从头学起&#xff0c;然后学了几天就没然后了。这不久前把电脑重新安装了系统&#xff0c;磁盘的东西也一股脑的全清掉了。心里只想让电脑干干净净的&#xff0c;放的东西也可以做到分门别类&#xff0c;井然…

工频耐压试验装置的产品特点

产品特点&#xff1a; 1、具有高压电压、低压电流、零位指示、电源指示、工作指示、计时指示&#xff1b;过流保护、零位启动保护、声光语言报警提醒等功能。 2、采用新型时间继电器&#xff0c;新型电流继电器 计时范围更广&#xff08;1S&#xff5e;99H&#xff09;更精确、…

Element-UI 时间选择器 el-time-picker 禁用 秒 选项

文章目录 默认格式 HH:mm:ss禁用 秒 选项el-time-picker 设置日期和时间组合自定义时间格式 默认格式 HH:mm:ss 时间选择器 format 标签默认为 HH:mm:ss <el-time-picker v-model"value"is-rangerange-separator"-"format"HH:mm:ss"start-p…