前端人员选择组件封装

功能:

  • 人员选择,返回人员参数,以及人员参数id数组
  • 支持单选,多选人员
  • 支持重新选择回显上次选中人员
    <!-- 弹窗 --><a-modal v-model="modalVisible" :footer="null" :bodyStyle="{ padding: 0 }" :width="800" :closable="true":centered="true" :destroyOnClose="true"><!-- 角色 --><template v-if="type === 'role'"><choose-role @chooseRole="commonChoose" :single="single" :pSelectIds="selectIds" :pSelectList="selectList":modalTitle="modalTitle ? modalTitle : '选择角色'" /></template><!-- 其他类似组件... --></a-modal>
<template><div class="common-modal-container"><div class="title-container"><p class="title">{{ modalTitle }}</p></div><div class="choose-content-container"><div class="choose-content-left-container"><div class="left-container"><p class="title">选择:</p></div><div class="common-content-container"><div style="margin:12px 0 16px"><a-input v-model="searchParams.name" placeholder="搜索" @change="search" class="common-modal-input"allowClear><img slot="prefix"src="https://hs-pro-server.oss-cn-hangzhou.aliyuncs.com/saas/saaspc/assets/images/icon_search.png"style="width:14px" /></a-input></div><div class="scroll-container"><template v-if="loading"><a-spin /></template><vuescroll :ops="ops" ref="vs" @handle-scroll="handleScroll"><template v-if="single === 1"><a-radio :style="radioStyle" :checked="item.checked" :value="item.id" v-for="item, index in choiceList":key="index" @click="onChange(item, 1)"><span>{{ item.roleName }}</span></a-radio></template><template v-else><a-checkbox :style="radioStyle" :checked="item.checked" :value="item.id"v-for="item, index in choiceList" :key="index" @click="onChange(item, 1)"><span>{{ item.roleName }}</span></a-checkbox></template><div v-if="!loading && choiceList.length === 0" class="no-data-modal-container"><img slot="prefix"src="https://hs-pro-server.oss-cn-hangzhou.aliyuncs.com/saas/saaspc/assets/images/train/icon_no_data_modal.png"style="width:86px" /><p>暂无数据~</p></div></vuescroll></div></div></div><div class="choose-content-left-container"><div class="left-container" style="margin-bottom:8px"><p class="title">已选:</p></div><div class="common-content-container"><vuescroll :ops="ops"><div class="content-list-container"><div class="content-container" v-for="item, index in selectList" :key="index"><span v-text="item.roleName"></span><i class="iconfont icon-quxiao" @click.stop="onChange(item, 2)" /></div></div></vuescroll></div></div></div><div class="choose-footer-container"><a-button class="reset-btn" @click="submit(1)">取消</a-button><a-button class="submit-btn" type="primary" @click="submit(2)">确定</a-button></div></div>
</template>
<script>
import vuescroll from "vuescroll";
import { getRoleList } from "@/api/member/member";
import _ from "lodash";
import moment from "moment";
export default {name: "chooseRole",components: {vuescroll,},props: {pSelectIds: {type: Array,default: () => [],},pSelectList: {type: Array,default: () => [],},modalTitle: {type: String,default: '请选择人员',},single: Number, //1-单选 2-多选},data () {return {ops: {bar: {background: "#2E5BFF",},},searchParams: {current: 1,size: 10,name: "",},choiceList: [],loading: true,searchContent: "",selectList: [],selectIds: [],radioStyle: {margin: "0",padding: "6px 20px",display: "block",lineHeight: "20px",position: "relative",},};},created () {this.selectList = this.pSelectList;this.selectIds = this.pSelectIds;this.getList();},mounted () { },computed: {},methods: {getList () {// 获取用户let params = this.searchParams;this.loading = true;this.searchTime = moment().valueOf();params.searchTime = this.searchTime;getRoleList(params).then((res) => {const { searchTime } = res.config.params;const { records, current, total } = res.data.data;if (this.searchTime === searchTime) {this.loading = false;let selectIds = this.selectIds;if (params.current == 1) this.choiceList = []; //如果是第一页需手动制空列表this.choiceList = this.choiceList.concat(records.map((a) => {a.checked = selectIds.indexOf(a.id) > -1;return a;})); //追加新数据this.finish = records.length < params.size;}});},handleSubmit () {this.searchParams.current = 1;this.getList();},handleScroll (vertical, horizontal, nativeEvent) {console.log(vertical, horizontal, nativeEvent);const { v, h } = this.$refs["vs"].getScrollProcess();console.log(v, h);if (v >= 0.9) {if (!this.loading && !this.finish) {this.searchParams.current++;this.getList();}}},search: _.throttle(function() {this.handleSubmit();}, 100),onChange (item, type) {if (this.single === 1) {if (type === 1) {this.choiceList = this.choiceList.map((a) => {if (a.id === item.id) {a.checked = true;} else {a.checked = false;}return a;});} else {this.choiceList = this.choiceList.map((a) => {a.checked = false;return a;});}this.selectList = this.choiceList.filter((a) => a.checked);} else {this.choiceList = this.choiceList.map((a) => {if (a.id === item.id) {a.checked = !a.checked;}return a;});if (type === 1) {let selectList = this.selectList.filter((a) => a.id === item.id);if (selectList.length > 0) {this.selectList = this.selectList.filter((a) => a.id !== item.id);} else {this.selectList = this.selectList.concat(this.choiceList.filter((a) => a.id === item.id));}console.log(item.id);} else if (type === 2) {this.selectList = this.selectList.filter((a) => a.id !== item.id);}}this.selectIds = this.selectList.map((a) => a.id);},submit (type) {if (type === 1) {this.$emit("chooseRole", type);} else if (type === 2) {this.$emit("chooseRole", type, this.selectList, this.selectIds);}},},watch: {},
};
</script><style lang="less" scoped>
.common-modal-container {display: flex;flex-direction: column;align-items: center;.title-container {width: 100%;height: 60px;border-bottom: 1px solid rgba(153, 153, 153, 0.5);display: flex;align-items: center;justify-content: center;.title {font-size: 16px;color: #1a1a1a;font-weight: 500;}}
}
</style>

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

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

相关文章

react中子传父信息

思路是&#xff1a; 在父组件定义一个函数接受参数&#xff0c;接收的参数用于接收子组件的信息&#xff0c;把函数传给子组件&#xff0c;子组件调用父亲传来的函数并把要告诉父亲的话传到函数中&#xff0c;就实现了子传父消息 import { useState } from reactimport { use…

OpenWrt 安装Quagga 支持ospf Bgp等动态路由协议 软路由实测 系列四

1 Quagga 是一个路由软件套件, 提供 OSPFv2,OSPFv3,RIP v1 和 v2,RIPng 和 BGP-4 的实现. 2 web 登录安装 #或者ssh登录安装 opkg install quagga quagga-zebra quagga-bgpd quagga-watchquagga quagga-vtysh # reboot 3 ssh 登录 #重启服务 /etc/init.d/quagga restart #…

使用kubesphere部署微服务的时候,节点的镜像不是最新的导致部署到旧版本问题

我使用kubesphere部署微服务的时候&#xff0c;发现有很多次&#xff0c;我修改了配置文件&#xff0c;但是部署完才发现部署的是旧版本。 然后我查看了该微服务部署在哪个节点上&#xff1a; kubectl get pods --all-namespaces -o wide例如 gulimall-gateway 这个服务&…

韭菜的自我总结

韭菜的自我总结 股市技术面量价关系左侧右侧右侧技术左侧技术洗盘 韭菜的自我修养虚拟货币的启示韭菜的买入时机韭菜的心理压力成为优秀玩家的关键 股市技术面 技术面分析可以作为买卖时机判定的工具&#xff0c;但是投资还是需要基本面的分析作为支撑。也就是基本面选股&…

langchain进阶一:特殊的chain,轻松实现对话,与数据库操作,抽取数据,以及基于本地知识库的问答

特殊的chain langchain中的Chain有很多,能够轻松实现部分需求,极致简化代码,但是实现效果与模型智慧程度有关 会话链 效果与LLMChain大致相同 javascript 复制代码 from langchain.chains import ConversationChain from langchain_community.llms import OpenAI conversat…

Spring Boot中如何实现定时任务?

在项目开发中&#xff0c;经常需要编写定时任务来实现一些功能&#xff1a; 定时备份数据库、定时发送邮件、定时清理数据、定时提醒或通知、信用卡每月还款提醒 未支付的订单15分钟之后自动取消、未确认收货的订单7天之后自动确认收货 定时任务的实现&#xff1a; Spring T…

Redis 实战 - 缓存异常及解决方案

文章目录 概述一、缓存穿透1.1 缓存穿透是什么1.2 解决方案 二、缓存击穿2.1 缓存击穿是什么2.2 解决方案 三、缓存雪崩3.1 缓存雪崩是什么3.2 解决方案 四、拓展4.1 缓存预热4.2 缓存降级 五、结语 把今天最好的表现当作明天最新的起点……&#xff0e;&#xff5e; 概述 在实…

YoloV8改进策略:Neck层改进、注意力改进|HCANet全局与局部的注意力模块CAFM|二次创新|即插即用

yolov9-c summary: 620 layers, 52330674 parameters, 0 gradients, 245.5 GFLOPsClass Images Instances P R mAP50 mAP50-95: 100%|██████████| 15/15 00:06all 230 1412 0.917 0.985 0.99 0.735…

实现自动化巡检多台交换机并将输出信息保存到文本文件中

为了实现自动化巡检多台交换机并将输出信息保存到文本文件中,可以扩展之前的 SSHInspectionTool 类,使其能够处理多台交换机的连接和命令执行。我们可以使用多线程来并行处理多个 SSH 连接,以提高效率。 目录 一、导入依赖包 二、编写Java类 (1)SSH.java (2)SSHIns…

LeetCode 第131场双周赛个人题解

100309. 求出出现两次数字的 XOR 值 原题链接 求出出现两次数字的 XOR 值 - 力扣 (LeetCode) 竞赛 思路分析 签到题&#xff0c;一次遍历 AC代码 class Solution:def duplicateNumbersXOR(self, nums: List[int]) -> int:cnt Counter(nums)res 0st set(nums)for x …

Python基础学习笔记(七)——元组

目录 一、一维元组的介绍、创建与修改二、组合的基本操作1. 遍历2. 取长度3. 取最值4. 打包5. 批处理5.1 map()函数5.2 lambda 表达式5.3 lambda 表达式 map()函数 一、一维元组的介绍、创建与修改 元组&#xff08;tuple&#xff09;&#xff0c;一种不可变、有序、可重复的数…

SpringBoot如何开启注解的形式,使用Redis Cache

Spring Cache 是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单的添加注解&#xff0c;就能实现缓存功能。 Spring Cache 提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff0c;例如&#xff1a;Redis、EHCache、Caffeine等 步骤&#xf…

【大模型】Spring AI对接ChatGpt使用详解

目录 一、前言 二、spring ai介绍 2.1 什么是Spring AI 2.2 Spring AI 特点 2.3 Spring AI 为开发带来的便利 2.4 Spring AI应用领域 2.4.1 聊天模型 2.4.2 文本到图像模型 2.4.3 音频转文本 2.4.4 嵌入大模型使用 2.4.5 矢量数据库支持 2.4.6 用于数据工程ETL框架 …

2024-05-22 VS2022使用modules

点击 <C 语言编程核心突破> 快速C语言入门 VS2022使用modules 前言一、准备二、使用其一, 用VS installer 安装模块:第二个选项就是, 与你的代码一同编译std模块, 这个非常简单, 但是也有坑. 总结 前言 要解决问题: 使用VS2022开启modules. 想到的思路: 跟着官方文档整…

Java进阶学习笔记19——内部类

1、 内部类&#xff1a; 是类中五大成分之一&#xff08;成员变量、方法、构造函数、内部类、代码块&#xff09;&#xff0c;如果一个类定义在另一个 类的内部&#xff0c;这个类就是内部类。 场景&#xff1a;当一个类的内部&#xff0c;包含了一个完整的事物&#xff0c;且…

Android ART 虚拟机简析

源码基于&#xff1a;Android U 1. prop 名称选项名称heap 变量名称功能 dalvik.vm.heapstartsize MemoryInitialSize initial_heap_size_ 虚拟机在启动时&#xff0c;向系统申请的起始内存 dalvik.vm.heapgrowthlimit HeapGrowthLimit growth_limit_ 应用可使用的 max…

Scikit-Learn朴素贝叶斯

Scikit-Learn朴素贝叶斯 1、朴素贝叶斯1.1、贝叶斯分类1.2、贝叶斯定理1.3、贝叶斯定理的推导1.4、朴素贝叶斯及原理1.5、朴素贝叶斯的优缺点2、Scikit-Learn朴素贝叶斯2.1、Sklearn中的贝叶斯分类器2.2、Scikit-Learn朴素贝叶斯API2.3、Scikit-Learn朴素贝叶斯实践(新闻分类与…

Python——文件操作相关

1. 读文件方式 第一种 有规律的名称 第二种 无规律的名称 2. 文件名称 用 “{:05d}” 来规范输出数字所占位数&#xff0c;例如&#xff1a; for i in range(100):gt_file Reference/ image "{:05d}".format(i) .jpgprint(gt_file)输出&#xff1a; ... Re…

爬山算法的详细介绍

目录 &#x1f349;概述 &#x1f349; 步骤 &#x1f349; 优缺点 &#x1f348;优点 &#x1f348;缺点 &#x1f348;应对策略 &#x1f349;示例 &#x1f348;旅行商问题 &#x1f34d;步骤 &#x1f34d;分解代码 &#x1f34e;包含头文件 &#x1f34e;定义函…

Cortex-M3的SysTick 定时器

目录 概述 1 SysTick 定时器 1.1 SysTick 定时器功能介绍 1.2 SysTick 定时器功能实现 1.3 SysTick在系统中的作用 2 SysTick应用的实例 2.1 建立异常服务例程 2.2 使能异常 2.3 闹钟功能 2.4 重定位向量表 2.5 消灭二次触发 3 SysTick在FreeRTOS中的应用 3.1 STM…