element的el-select组件数据过多使用分页

news2024/11/28 8:45:53

一、代码实现

1. 单个下拉框

<template>
    <div>
        <!-- 为了启用远程搜索,需要将filterable和remote设置为true,同时传入一个remote-method。
        remote-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。需要注意的是,
        如果el-option是通过v-for指令渲染出来的,此时需要为el-option添加key属性,且其值需具有唯一性,比如此例中的cell.userId -->
        <el-select v-model="obj" value-key="userId" :placeholder="userName ? userName : '请选择'" filterable :remote-method="getData"  remote
            @change="change($event)" style="width: 100%">
            <el-option v-for="cell in dataList" :key="cell.userId" :label="(cell.nickName + '(' + cell.deptName + ')')"
                :value="cell">
            </el-option>
            <div class="pagination-css">
                <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageNum"
                    :page-sizes="[2, 5, 10, 15]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper"
                    :total="total">
                </el-pagination>
            </div>

        </el-select>
    </div>
</template>
  
<script>

export default {
    name: "pageSelect",
    data() {
        return {
            obj: {},
            userName: '',
            // 数据
            dataList: [
                {
                    userId: 1,
                    nickName: '张三',
                    deptId: 1,
                    deptName: '测试1'
                },
                {
                    userId: 2,
                    nickName: '李四',
                    deptId: 2,
                    deptName: '测试2'
                },
                {
                    userId: 3,
                    nickName: '王五',
                    deptId: 3,
                    deptName: '测试3'
                },
                {
                    userId: 4,
                    nickName: '赵六',
                    deptId: 4,
                    deptName: '测试4'
                }, {
                    userId: 5,
                    nickName: '小米',
                    deptId: 5,
                    deptName: '测试5'
                },
                {
                    userId: 6,
                    nickName: '小明',
                    deptId: 6,
                    deptName: '测试6'
                },
                {
                    userId: 7,
                    nickName: '小张',
                    deptId: 7,
                    deptName: '测试7'
                },
            ],
            pageNum: 1,
            pageSize: 10,
            total: 7,
            search:'',

        };
    },
    methods: {
        //获取数据(远程搜索)
        getData(search){
            console.log(search,'search')
            if (typeof search == "string") {
                this.search = search;
            }
            // 根据实际项目调用
            // getList({
            //     pageNum: this.pageNum,
            //     pageSize: this.pageSize,
            //     nickName:  this.search,
            // }).then((response) => {
            //     this.dataList = response.rows;
            //     this.total = response.total;
            // });
        }, 
        //选择
        change(event) {
            console.log(event,'event')
            // 如果有多个下拉框,需要判断数据不重复选择,可以获取选中的数据列表的唯一值组成的数组
            // 然后判断唯一值有没有重复(数组去重,判断前后数组长度是否变化),有则是提示不能重复选择。
        },
        // 分页相关
        handleSizeChange(val) {
            console.log(`每页 ${val} 条`);
            this.pageSize = val;
        },
        handleCurrentChange(val) {
            console.log(`当前页: ${val}`);
            this.pageNum = val;
        },
    },
};
</script>
<style>
.pagination-css {
    width: 100%;
    display: flex;
    justify-content: flex-end;
}
</style>
  

2. 多个下拉框

<template>
    <div class="person-box">
        <div class="add-css">
            <el-button size="mini" type="success" plain @click="add">
                添加
            </el-button>
        </div>

        <el-form ref="form" :inline="false" :model="form" :rules="rules" label-position="right" label-suffix=":"
            label-width="120px">
            <div class="person-list">
                <div class="person-item" v-for="(item, index) in form.list" :key="item.id">
                    <div class="num-box">{{ index + 1 }}.</div>
                    <el-row :gutter="20" type="flex">
                        <el-col :span="20">
                            <el-form-item label="" :prop="`list.${index}.personObj`" :rules="rules.personObj">
                                <el-select v-model="item.personObj" value-key="userId"
                                    :placeholder="item.userName ? item.userName : '请选择'" filterable
                                    :remote-method="getPersonList" remote @change="personChange($event, item)"
                                    style="width: 100%">
                                    <el-option v-for="cell in personData" :key="cell.userId"
                                        :label="cell.nickName + '(' + cell.deptName + ')'" :value="cell">
                                    </el-option>

                                    <div class="pagination-css">
                                        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
                                            :current-page="pageNum" :page-sizes="[2, 5, 10, 15]" :page-size="pageSize"
                                            layout="total, sizes, prev, pager, next, jumper" :total="total">
                                        </el-pagination>
                                    </div>

                                </el-select>
                            </el-form-item>
                        </el-col>
                        <el-col :span="4">
                            <el-button size="mini" type="danger" plain @click="del(item)"
                                style="margin-bottom: 22px; margin-left: 20px">
                                删除
                            </el-button>
                        </el-col>
                    </el-row>
                </div>
            </div>
        </el-form>
        <span slot="footer" class="dialog-footer">
            <el-button @click="handleClose('close')">取 消</el-button>
            <el-button type="primary" @click="submitHandle">确 定</el-button>
        </span>
        <!-- 
        1.安装  npm install uuid --save
        2.调用
            import { v4 as uuidv4 } from 'uuid';
            uuidv4(); 
         -->
    </div>
</template>


    
<script>
// import { getUuid } from "@/utils/helper";
import { v4 as getUuid } from 'uuid';
export default {
    name: "pageSelect2",
    components: {},
    props: {
        // 默认选中的数据
        personList: {
            type: Array,
            default: () => {
                return [];
            },
        },
        taskId: {
            type: String,
            default: "",
        },
    },
    data() {
        return {
            form: {
                // 人员信息
                list: [
                    {
                        uuid: getUuid(),
                        personObj: null,
                        userId: null,
                        nickName: null,
                        userName: null,
                        deptName: null
                    },
                ],
            },
            rules: {
                personObj: [
                    {
                        required: true,
                        message: "人员不能为空",
                        trigger: ["blur", "change"],
                    },
                ],
            },
            // 模糊查询人员
            personData: [
                {
                    userId: 1,
                    nickName: '张三',
                    deptId: 1,
                    deptName: '测试1'
                },
                {
                    userId: 2,
                    nickName: '李四',
                    deptId: 2,
                    deptName: '测试2'
                },
                {
                    userId: 3,
                    nickName: '王五',
                    deptId: 3,
                    deptName: '测试3'
                },
                {
                    userId: 4,
                    nickName: '赵六',
                    deptId: 4,
                    deptName: '测试4'
                }, {
                    userId: 5,
                    nickName: '小米',
                    deptId: 5,
                    deptName: '测试5'
                },
                {
                    userId: 6,
                    nickName: '小明',
                    deptId: 6,
                    deptName: '测试6'
                },
                {
                    userId: 7,
                    nickName: '小张',
                    deptId: 7,
                    deptName: '测试7'
                },
            ],
            total: 0,
            pageNum: 1,
            pageSize: 1000,
            search: "",
        };
    },
    computed: {
    },
    watch: {
        personList: {
            handler(val) {
                if (val && val != "") {
                    this.form.list = JSON.parse(JSON.stringify(val));
                    if (this.form.list && this.form.list != "") {
                        this.form.list.forEach((item) => {
                            item.uuid = getUuid();
                            item.personObj = item;
                        });
                    }
                } else {
                    this.form.list = [
                        {
                            uuid: getUuid(),
                            personObj: null,
                            userId: null,
                            nickName: null,
                            userName: null,
                            deptName: null
                        },
                    ];
                }
            },
            deep: true,
            immediate: true,
        },
        $route: {
            handler() {
                this.getPersonList();
            },
            immediate: true,
            deep: true,
        },
    },
    methods: {
        // 分页相关
        handleSizeChange(val) {
            console.log(`每页 ${val} 条`);
            this.pageSize = val;
            this.getPersonList();
        },
        handleCurrentChange(val) {
            console.log(`当前页: ${val}`);
            this.pageNum = val;
            this.getPersonList();
        },

        // 查询人员数据
        getPersonList(value) {
            //console.log(value,"查询", typeof value);
            if (typeof value == "string") {
                this.search = value;
            }

            // listUser({
            //     pageNum: this.pageNum,
            //     pageSize: this.pageSize,
            //      search:this.search,
            // }).then((response) => {
            //     this.personData = response.rows;
            //     this.total = response.total;
            // });
        },

        //选中,值改变
        personChange(data, row) {
            this.form.list.forEach((item) => {
                if (item.uuid == row.uuid) {
                    item.userId = data.userId;
                    item.userName = data.nickName;
                    item.deptName = data.deptName;
                }
            });
        },

        // 添加人员
        add() {
            this.form.list.push({
                uuid: getUuid(),
                personObj: null,
                userId: null,
                nickName: null,
                userName: null,
                deptName: null
            });
        },
        //编辑-删除人员
        del(row) {
            this.form.list = this.form.list.filter((ele) => {
                return ele.uuid != row.uuid;
            });
        },

        // 取消
        handleClose(type = "") {
            this.$emit("handleClose", type);
        },
        // 提交
        submitHandle() {
            //判断是否重复,重复的话需要去重,给一个提示
            let isReturn = this.judgeRepeatHandle(this.form.list);
            if (!isReturn) {
                let userIds = [];
                if (this.form.list) {
                    this.form.list.forEach((item) => {
                        if (item.userId) {
                            userIds.push(item.userId);
                        }
                    });
                }
                console.log(this.form, 'this.form')
                console.log(userIds, 'userIds')
                this.$refs["form"].validate((valid) => {
                    if (valid) {
                        // ......................
                    }
                });
            }

        },

        //判断是否重复,重复的话需要去重,给一个提示
        judgeRepeatHandle(list) {
            let isReturn = false
            console.log(list)
            let userIdList = list.map(item => item.userId)
            let userIdList2 = [... new Set(userIdList)]
            console.log(userIdList, 'userIdList')
            console.log(userIdList2, 'userIdList2')
            if (userIdList.length != userIdList2.length) {
                this.$message("人员不能重复选择!")
                isReturn = true
            }
            return isReturn
        },
    },
};
</script>
    
<style scoped>
.person-box {
    width: 100%;
    display: flex;
    flex-direction: column;
}

.add-css {
    width: 100%;
    display: flex;
    justify-content: flex-start;
    align-items: center;
}

.dialog-footer {
    width: 95%;
    display: flex;
    justify-content: center;
    margin-top: 20px;
}

::v-deep .el-form-item__content {
    margin-left: 0px !important;
}

::v-deep .el-row--flex {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    align-items: center;
    justify-content: flex-end;
}

.person-list::-webkit-scrollbar {
    display: none;
}

.person-list {
    width: 100%;
    margin-top: 20px;
    max-height: 60vh;
    overflow-y: auto;
}

.person-item {
    width: 95%;
    margin-left: 5%;
    box-sizing: border-box;
    position: relative;
    box-sizing: border-box;
}

.num-box {
    position: absolute;
    top: 15%;
    left: -3%;
}

.pagination-css {
    width: 100%;
    display: flex;
    justify-content: flex-end;
}
</style>
    

二、效果图

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Ceph应用管理

目录 资源池 Pool 管理 创建 CephFS 文件系统 MDS 接口 服务端操作 客户端操作 创建 Ceph 块存储系统 RBD 接口 创建 Ceph 对象存储系统 RGW 接口 OSD 故障模拟与恢复 资源池 Pool 管理 我们如何向 Ceph 中存储数据呢&#xff1f;首先我们需要在 Ceph 中定义一个 Pool…

代码随想录算法训练营29期|day 21 任务以及具体安排

530.二叉搜索树的最小绝对差 力扣题目链接(opens new window) 给你一棵所有节点为非负值的二叉搜索树&#xff0c;请你计算树中任意两节点的差的绝对值的最小值。 示例&#xff1a; 提示&#xff1a;树中至少有 2 个节点。 class Solution {TreeNode pre;// 记录上一个遍历的…

C++ 数论相关题目(约数)

1、试除法求约数 主要还是可以成对的求约数进行优化&#xff0c;不然会超时。 时间复杂度根号n #include <iostream> #include <vector> #include <algorithm>using namespace std;int n;vector<int> solve(int a) {vector<int> res;for(int i…

力扣714. 买卖股票的最佳时机含手续费(java 动态规划)

Problem: 714. 买卖股票的最佳时机含手续费 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 1.构建多阶段决策模型&#xff1a;n天对应n个阶段&#xff0c;每个阶段决策&#xff1a;买股票、卖股票、不操作&#xff1b;买股票只有当前不持有股票才行&#xff0c;卖股票…

IntelliJ IDEA 拉取gitlab项目

一、准备好Gitlab服务器及项目 http://192.168.31.104/root/com.saas.swaggerdemogit 二、打开 IntelliJ IDEA安装插件 打开GitLab上的项目&#xff0c;输入项目地址 http://192.168.31.104/root/com.saas.swaggerdemogit 弹出输入登录用户名密码&#xff0c;完成。 操作Comm…

【数据结构】二叉树-堆(top-k问题,堆排序,时间复杂度)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​​ 目录 堆排序 第一种 ​编辑 第二种 …

Linux开发工具:yum、vim、gcc/g++、makefile

文章目录 一. Linux软件包管理器-yum使用1. Linux 安装软件的方式2. yum 三板斧yum listyum installyum remove 二. Linux编辑器-vim使用1. vim 的基本概念2. vim 的基本操作3. vim 的命令模式命令集4. vim 底行模式命令集 三. Linux编译器-gcc/g使用1. 快速使用2. 程序翻译过程…

【Linux】文件系统与软硬连接

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;【LeetCode】winter vacation training 目录 &#x1f449;&#x1f3fb; 磁盘HDD的物理存储结构磁盘的逻辑抽象…

element-ui Vue 封装组件按钮工具栏,使用slot插槽

封装常用按钮工具栏,方便其它页面调用 缺点:工具栏下面div会显示工具栏下面,下面需要使用margin-top:40px(小学生一个没整明白)希望大神能帮解决 运行效果 组件代码 tt-btnBar.vue <template><div><div class"btnbarP"><div class"btnbar…

【C语言】详解文件与文件操作

1.什么是文件 文件是记录在外存上的相关信息的命名组合&#xff0c;但是在程序设计中&#xff0c;我们⼀般谈的文件有两种&#xff1a;程序文件、数据文件&#xff08;从文件功能的角度来分类的&#xff09;。 1.1程序文件 程序文件包括&#xff1a; 源程序文件 &#xff0…

Pytorch基础知识点复习

文章目录 并行计算单卡训练多卡训练单机多卡DP多机多卡DDPDP 与 DDP 的优缺点 PyTorch的主要组成模块Pytorch的主要组成模块包括那些呢&#xff1f;Dataset和DataLoader的作用是什么&#xff0c;我们如何构建自己的Dataset和DataLoader&#xff1f;神经网络的一般构造方法&…

头部姿态估计算法原理

人脸检测 文章目录 人脸检测一、前言二、原理三、代码实现 一、前言 头部姿态估计是通过一幅面部图像来获得头部的姿态角. 在3D空间中&#xff0c;表示物体的旋转可以由三个欧拉角(Euler Angle)来表示&#xff1a;分别计算 pitch(围绕X轴旋转)&#xff0c;yaw(围绕Y轴旋转) 和…

网络新手必读!CentOS 7系统IP配置与防火墙管理攻略

前言 掌握CentOS 7系统的网络配置技能&#xff0c;从IP地址、子网掩码、DNS到防火墙&#xff0c;一篇文章全搞定&#xff01;无论你是网络新手还是寻求深入了解的高手&#xff0c;这篇文章都为你提供了简单易懂的配置指南&#xff0c;助你轻松驾驭系统网络。摆脱繁琐的配置困扰…

C# 图解教程 第5版 —— 第23章 异常

文章目录 23.1 什么是异常23.2 try 语句23.3 异常类23.4 catch 子句23.5 异常过滤器23.6 catch 子句段23.7 finally 块23.8 为异常寻找处理程序23.9 进一步搜索23.9.1 一般法则23.9.2 搜索调用栈的示例&#xff08;*&#xff09; 23.10 抛出异常23.11 不带异常对象的抛出23.12 …

基于变换域的模版匹配

模板匹配原理 图像的空间域与其他域之间的变换&#xff0c;如傅里叶变换&#xff0c;小波变换&#xff0c;轮廓波变换&#xff0c;剪切波变换等&#xff0c;实际上是图像在其他坐标领域中的表现。在空间域中&#xff0c;图像的信息是像素值和坐标位置&#xff1b;在其他域中&a…

快速上手!LLaMa-Factory最新微调实践,轻松实现专属大模型

1.为什么要对Yuan2.0做微调&#xff1f; Yuan2.0&#xff08;https://huggingface.co/IEITYuan&#xff09;是浪潮信息发布的新一代基础语言大模型&#xff0c;该模型拥有优异的数学、代码能力。自发布以来&#xff0c;Yuan2.0已经受到了业界广泛的关注。当前Yuan2.0已经开源…

day19【LeetCode力扣】160.相交链表

day19【LeetCode力扣】160.相交链表 1.题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交**&#xff1a;** 题目数据 保证 整个链…

基于MATLAB计算无线通信覆盖(一)环境准备

一、环境 MATLAB 2022b 注&#xff1a;开始仿真前需部署地理坐标区和地理图&#xff0c;最好采用第三种&#xff0c;直接把底图数据下载到本地&#xff0c;防止连接不上网络时只能显示darkwater的底图。 可用于地理坐标区和地理图的底图如下表所示 二、下载底图并安装 工具&…

Intel开发环境Quartus、Eclipse与WSL的安装

PC &#xff1a;win10 64bit 安装顺序&#xff1a;先安装Quartus 21.4&#xff0c;接着Eclipse或者WSL&#xff08;Windows Subsystem for Linux&#xff09;&#xff0c;Eclipse与WSL的安装不分先后。 为什么要安装Eclipse&#xff1f; 因为Eclipse可以开发基于Nios II的C/…

RabbitMQ使用篇

☆* o(≧▽≦)o *☆嗨~我是小奥&#x1f379; &#x1f4c4;&#x1f4c4;&#x1f4c4;个人博客&#xff1a;小奥的博客 &#x1f4c4;&#x1f4c4;&#x1f4c4;CSDN&#xff1a;个人CSDN &#x1f4d9;&#x1f4d9;&#x1f4d9;Github&#xff1a;传送门 &#x1f4c5;&a…