vue列表穿梭框,可进行前端查询

// 这是组件,可以直接用
<template>
    <div class="box">
        <el-row>
            <el-col :span="11">
                <div class="box_left">
                    <SearchContent :queryParams="queryParams" @query="handleQuery" @reset="resetQuery" labelWidth="80px">
                        <el-col :span="12">
                            <el-form-item label="用户账号:" prop="userName">
                                <el-input v-model="queryParams.userName" clearable placeholder="请输入用户账号"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="12">
                            <el-form-item label="用户姓名:" prop="nickName">
                                <el-input v-model="queryParams.nickName" clearable placeholder="请输入用户姓名"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="12">
                            <el-form-item label="组织名称:" prop="deptName">
                                <el-input v-model="queryParams.deptName" clearable placeholder="请输入组织名称"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="12">
                            <el-form-item label="岗位:" prop="postName">
                                <el-input v-model="queryParams.postName" clearable placeholder="请输入岗位"></el-input>
                            </el-form-item>
                        </el-col>
                    </SearchContent>
                    <el-table  :row-key="(row) => row.userId" ref="multipleTable"  :data="allDataList"  @selection-change="selectionChange" border>
                            <el-table-column type="selection" width="45"></el-table-column>   
                            <el-table-column label="用户账户" align="center" prop="userName"
                                show-overflow-tooltip />
                            <el-table-column label="用户姓名" align="center" prop="nickName" 
                                show-overflow-tooltip />
                            <el-table-column label="组织名称" align="center" prop="deptName" 
                                show-overflow-tooltip />
                            <el-table-column label="岗位" align="center" prop="postName" 
                                show-overflow-tooltip />
                            <el-table-column label="手机号码" align="center" prop="phonenumber" 
                                show-overflow-tooltip />   
                    </el-table>
                </div>
            </el-col>
            <el-col :span="2">
                <div class="box_center">
                    <div class="box_btn">
                        <el-button type="primary" icon="el-icon-arrow-right" @click="inputAdd"></el-button>
                        <el-button type="primary" icon="el-icon-arrow-left" @click="inputDelet"></el-button>
                    </div> 
                </div>
            </el-col>
            <el-col :span="11">
                <div class="box_left">
                    <SearchContent :queryParams="queryParams1" @query="handleQuery1" @reset="resetQuery1" labelWidth="80px">
                        <el-col :span="12">
                            <el-form-item label="用户账号:" prop="userName">
                                <el-input v-model="queryParams1.userName" clearable placeholder="请输入用户账号"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="12">
                            <el-form-item label="用户姓名:" prop="nickName">
                                <el-input v-model="queryParams1.nickName" clearable placeholder="请输入用户姓名"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="12">
                            <el-form-item label="组织名称:" prop="deptName">
                                <el-input v-model="queryParams1.deptName" clearable placeholder="请输入组织名称"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="12">
                            <el-form-item label="岗位:" prop="postName">
                                <el-input v-model="queryParams1.postName" clearable placeholder="请输入岗位"></el-input>
                            </el-form-item>
                        </el-col>
                    </SearchContent>
                    <el-table  :row-key="(row) => row.userId" ref="multipleTable1"  :data="allDataList1"  @selection-change="selectionChange1" border>
                            <el-table-column type="selection" width="45"></el-table-column>     
                            <el-table-column label="用户账户" align="center" prop="userName"
                                show-overflow-tooltip />
                            <el-table-column label="用户姓名" align="center" prop="nickName" 
                                show-overflow-tooltip />
                            <el-table-column label="组织名称" align="center" prop="deptName" 
                                show-overflow-tooltip />
                            <el-table-column label="岗位" align="center" prop="postName" 
                                show-overflow-tooltip />
                            <el-table-column label="手机号码" align="center" prop="phonenumber" 
                                show-overflow-tooltip />   
                    </el-table>
                </div>
            </el-col>
        </el-row>     
    </div>
</template>
<script>
import SearchContent from "@/components/SearchContent/index.vue";
import * as apis from "@/api/messageManagement/index.js";
import { create } from "lodash";
    export default{
        name:'NoticeModle',
        components: {
            SearchContent,
        },
        props:{
            info:{
                type: Array,
                default: () => [], 
            }
        },
        data(){
            return{
                queryParams:{ 
                    userName:'',
                    nickName:'',
                    deptName:'',
                    postName:'',},
                // 所有数据
                allDataList:[],
                queryParams1:{
                    userName:'',
                    nickName:'',
                    deptName:'',
                    postName:'',
                },
                // 选中所有数据
                allDataList1:[],
                //暂存选中数据
                list:[],
                list1:[],
                olderList:[],
            }
        },
        mounted(){
            this.getList()
        },
        methods:{
            handleQuery(){
                this.getList()
            },
            resetQuery(){
                this.queryParams={
                    userName:'',
                    nickName:'',
                    deptName:'',
                    postName:'',
                }
            },
            handleQuery1(){
                this.olderList = JSON.parse(JSON.stringify(this.allDataList1))
                const obj ={
                    userName:this.queryParams1.userName,
                    nickName:this.queryParams1.nickName,
                    deptName:this.queryParams1.deptName,
                    postName:this.queryParams1.postName,
                }
                let arr = JSON.parse(JSON.stringify(this.allDataList1))
                for (const item in obj) {
                    arr = arr.filter((row) =>{ 
                        return obj[item]?row[item].includes(obj[item]):true;
                    })
                    this.allDataList1 = arr
                } 
            },
            resetQuery1(){
                this.queryParams1={
                    userName:'',
                    nickName:'',
                    deptName:'',
                    postName:'',
                }
                this.allDataList1 = this.olderList
            },
            // 获取人员
            getList(){
                apis.getNoticePersion(this.queryParams).then((res)=>{
                    if(res.code==200){
                        this.allDataList = res.data
                        // 回显选中的人员
                        if(this.info){
                            this.info.map((res)=>{
                                res.data.map((item)=>{
                                    if(res.userId==item.userId){
                                        this.allDataList1.push(item)
                                    }
                                })
                                
                            })
                        }
                    }
                })
            },
            // 左侧人员选中
            selectionChange(id){
                this.list = []
                console.log(id,'selectionChangeselectionChangeselectionChange')
                this.list = id
            },
            // 右侧人员选中
            selectionChange1(id){
                console.log(id,'111111')
                this.list1 = []
                this.list1 = id
            },
            // 添加通知人员
            inputAdd(){
                 let jsonArray = [...this.list,...this.allDataList1]
                 this.allDataList1 = Array.from(new Set(jsonArray.map(JSON.stringify)), JSON.parse);
                 this.$refs.multipleTable.clearSelection()
                 this.$emit('valueChanged', this.allDataList1)
            },
            // 删除通知人员
            inputDelet(){
                if(this.list1){
                    this.list1.map((res)=>{
                    this.allDataList1.map((item,index)=>{
                        if(res.userId==item.userId){
                            this.allDataList1.splice(index,1)
                            this.$refs.multipleTable1.clearSelection()
                        }
                    })
                })
                }    
            },

        },
    }
</script>
<style scoped lang="scss">
    .box{
        width: 100%;
        display: flex;
        .box_left{
            width: 100%;
            height: 500px;
            overflow-y: auto;
        }
        .box_center{
            width: 100%;
            height: 500px;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            .box_btn{
                display: flex;
                flex-direction: column;
                align-items: center;
                justify-content:space-between;
                height: 80px;
            }
            .el-button + .el-button{
                margin: 0 !important;
            }
        }
    }
</style>
//父页面
<el-col :span="20">
   <el-form-item label="通知人员:" prop="receiveId">
         <span class="noticeColor">已添加(</span>
         <span class="noticeColor">{{ noticeNum }}</span>
         <span class="notice noticeColor">)</span>
         <span class="notice noticeColor" @click="addNotice">添加通知人员</span>
         <span class="notice noticeColor" @click="clearNotice">清空</span>
     </el-form-item>
 </el-col>
 //弹框
 <el-dialog
  width="60%"
     title="通知人员"
     :visible.sync="noticeState"
     append-to-body>
         <NoticeModle :info="noticeInfo" @valueChanged="handleValueChange" />
     <div slot="footer">
         <el-button @click="noticeCancel">取消</el-button>
         <el-button :loading="buttonLoading" type="primary" @click="noticeSubmitForm" >确 定</el-button>
     </div>
 </el-dialog>
 //事件
  //选中通知人员
    handleValueChange(val){
         this.noticeInfo = val
      },
  //选择通知人员弹框-关闭
        noticeSubmitForm(){
            this.noticeState = false
            let list =[]
            if(this.noticeInfo){
                this.noticeInfo.map((res)=>{
                    list.push(res.userId)
                })
                this.noticeNum = this.noticeInfo?.length
            }
            this.$set(this.form,'receiveId',list.join(','))
        },
  

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rtthread 使用 scons 生成的项目

Env 工具 Env 是 RT-Thread 推出的开发辅助工具&#xff0c;针对基于 RT-Thread 操作系统的项目工程&#xff0c;提供编译构建环境、图形化系统配置及软件包管理功能。 其内置的 menuconfig 提供了简单易用的配置剪裁工具&#xff0c;可对内核、组件和软件包进行自由裁剪&…

【Linux】学习记录_14_线程

14 线程 14.1 线程和进程 进程是资源管理的最小单位&#xff0c;每个进程都有数据段、代码段和堆栈段&#xff0c;进程切换时都有复杂的上下文切换等动作。进程切换上下文时&#xff0c; 需要重新映射虚拟地址空间、进出OS内核、寄存器切换&#xff0c;还会干扰处理器的缓存机…

2010年认证杯SPSSPRO杯数学建模C题(第一阶段)高校图书馆的智能服务全过程文档及程序

2010年认证杯SPSSPRO杯数学建模 C题 高校图书馆的智能服务 原题再现&#xff1a; 图书馆源于保存记事的习惯。图书馆是为读者在馆内使用文献而提供的专门场所。而高校的图书馆为教学和科研服务&#xff0c;具有服务性和学术性强的特点。   现在的高校图书馆存在着许多不良的…

华为交换机重置密码

1.进入bootrom 加电后&#xff0c;18S左右&#xff0c;在启动菜单按 CtrlB 进入bootrom&#xff08;3s内&#xff09; 注意&#xff1a;本步骤属于高危操作&#xff0c;一定小心切勿删除系统或修改bootrom密码&#xff01; 输入bootrom密码&#xff0c;按6 看到提示成功后按…

Java基础之JVM基础调优与常见问题

常见命令 以下命令的介绍&#xff0c;全部在jdk8环境下运行的&#xff1b; jps ☆☆☆☆☆ 查看当前运行的进程号&#xff1b; jmap ☆☆☆ jmap命令可以查看jvm的内存信息&#xff0c;class对应的实例个数以及占用的内存大小 jmap -histo 查看当前java进程 [rdVM-8-12-c…

网动统一通信平台(Active UC) downloadDocument.action 任意文件读取漏洞复现

0x01 产品简介 网动统一通信平台(Active UC) 是一个涵盖了多种通信功能的综合平台&#xff0c;通常包括文字、语音、视频通讯等功能&#xff0c;并且可能提供了一系列的通讯工具和服务。这样的平台通常旨在提升用户的沟通效率和便利性&#xff0c;为用户提供一个统一的通信环境…

Tomcat源码解析——一次请求的处理流程

在上一篇文章中&#xff0c;我们知道Tomcat在启动后&#xff0c;会在Connector中开启一个Acceptor(接收器)绑定线程然后用于监听socket的连接&#xff0c;那么当我们发出请求时&#xff0c;第一步也就是建立TCP连接&#xff0c;则会从Acceptor的run方法处进入。 Acceptor&…

用户体验至上:独立站脱颖而出的关键要素解析

在数字化时代&#xff0c;独立站成为了许多品牌和企业展示自身形象、推广产品、建立客户联系的重要平台。然而&#xff0c;要想在众多的独立站中脱颖而出&#xff0c;吸引并留住用户&#xff0c;良好的用户体验至关重要。本文Nox聚星将和大家探讨如何做好独立站的用户体验&…

antDesignPro ProForm表单里使用dependencies属性

场景&#xff1a;ProForm表单里前一个下拉框选择的值带出后面下拉框的枚举值 <script><ProFormformRef{formRef}onFinish{{}}><ProForm.Group><ProFormSelectname"projectId"label"项目"width"sm"request{projectList}plac…

echerts饼图分割操作

在饼图制作中遇到了一个难点就是饼图中间是分散的 试了很多方法&#xff0c;最后选择了给每个值中间再加一节的处理方式&#xff0c;并把颜色设置为透明就能达到相同效果。 处理后的样式&#xff1a; 代码&#xff1a; let list this.data.list;/饼图内部展示数据// let _t…

文心一言 VS 讯飞星火 VS chatgpt (242)-- 算法导论17.4 1题

一、假定我们希望实现一个动态的开地址散列表。为什么我们需要当装载因子达到一个严格小于 1 的值 a 时就认为表满&#xff1f;简要描述如何为动态开地址散列表设计一个插入算法&#xff0c;使得每个插入操作的摊还代价的期望值为 O(1) 。为什么每个插入操作的实际代价的期望值…

React基础知识大汇总

函数组件和类组件 函数组件与类组件有什么区别呢&#xff1f; function getName(params:{name:string}){const count 0;return params.name -count; } getName({name:"test"}) getName({name:"哈哈哈"})getName是一个纯函数&#xff0c;不产生任何副作用…

54、图论-实现Trie前缀树

思路&#xff1a; 主要是构建一个trie前缀树结构。如果构建呢&#xff1f;看题意&#xff0c;应该当前节点对象下有几个属性&#xff1a; 1、next节点数组 2、是否为结尾 3、当前值 代码如下&#xff1a; class Trie {class Node {boolean end;Node[] nexts;public Node(…

nginx配置挂载html

目标 很多软件的官方文档&#xff0c;在国内打开很慢&#xff0c;每次都得等很久&#xff0c;看到官方同时提供了html的包&#xff0c;所以想着挂载到本地nginx下&#xff0c;查看会方便很多。 下载官方html文档包&#xff0c;解压到documentation_htmls下 想添加新的文档也是…

Sql Server 数据库:查询表结构脚本

查询脚本: SELECT CASE WHEN col.colorder 1 THEN obj.name ELSE END AS 表名, col.colorder AS 序号 , col.name AS 列名 , ISNULL(ep.[value], ) AS 列说明 , t.name AS 数据类型 , col.length AS 长度 , ISNULL(COLUMNPROPERTY(col.id, col.name, Scale), 0) AS 小数位数…

<开源> 轮廓内缩外扩算法

轮廓内缩外扩算法 项目是论文A new offset algorithm for closed 2D lines with Islands的JAVA实现。 项目的GitHub地址&#xff1a;https://github.com/Lee-0o0/polygon-offset-algorithm。 参考博客 https://blog.csdn.net/qq_41261251/article/details/114462696

设计模式 -- 行为型模式

1. 行为型模式概述 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式&#xff0c;前者采用继承机制在类…

java开发之路——node.js安装

1. 安装node.js 最新Node.js安装详细教程及node.js配置 (1)默认的全局的安装路径和缓存路径 npm安装模块或库(可以统称为包)常用的两种命令形式&#xff1a; 本地安装(local)&#xff1a;npm install 名称全局安装(global)&#xff1a;npm install 名称 -g本地安装和全局安装…

input的type=‘radio‘设置只读属性颜色为灰色,如何修改

目录 1.设置input和label的样式为不可点击。 2.设置input的readonly属性。 3.若想变回可修改&#xff0c;用js实现 4.如何自定义radio的颜色。 5.完整代码 input的单选框有时候需要实现只读&#xff0c;两个办法&#xff0c;一个disabled&#xff0c;一个是readonly. 但d…

前期Hadoop学习总结

前期Hadoop学习总结 1.Linux&#xff1a;操作系统 ​ 2.虚拟机&#xff1a;主机 3.SecureCRT &#xff08;客户端&#xff09;&#xff1a;连接Linux 方便操作 4.Hadoop&#xff1a;软件 这个软件要装在Linux里面 5.Hadoop是干嘛的&#xff1a; Hadoop是一个开源的分布式计…