记录el-select+el-tree复选框,支持模糊查询,懒加载,树父子节点不关联,不全选

需求:一个机构下拉菜单,一个人员下拉菜单,默认带入当前登录用户的机构和人员。机构下拉菜单为两个接口,模糊查询为一个接口不包含懒加载,默认非模糊查询情况下为一个接口,点击节点懒加载。机构下拉菜单数据变动更新人员下拉菜单数据。日期默认为当天

<template><div class="app-container"><div id="app" class="mb82 grid-content pd20"><div><el-row :gutter="20"><el-col id="tittle">检查信息</el-col></el-row><el-divider ></el-divider></div><div class="center"><el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"><el-form-item label="检查时间:" prop="checkTime"><el-date-pickerclass="width100"v-model="ruleForm.checkTime"type="date"value-format="yyyy-MM-dd HH:mm:ss"placeholder="选择日期"></el-date-picker></el-form-item><el-form-item label="检查机构:" prop="selectOrg"><el-selectclass="el-input-search width100"v-model="ruleForm.selectOrg"ref="refSelectOrg":multiple="true"@remove-tag="removetagOrg"@clear="clearallOrg"clearable@change ="$forceUpdate();"><el-optionvalue=""style="height:auto;background-color: #fff;"><el-input:validate-event="false"v-model="filterTextOrg"ref="refSelectOrgSearch"placeholder="请输入"@click.stop.nativeclearable@clear="clearallOrgSearch"style="margin-bottom:8px;"></el-input><el-tree:show-checkbox="true"style="padding:20px 10px;":data="orgList":props="defaultPropsOrg"node-key="orgId"check-strictlyhighlight-current:expand-on-click-node="true"ref="refTreeOrg":default-expanded-keys="expandedKeysOrgData":default-checked-keys="checkedKeysOrgData"@check-change="handleNodeCheckOrg"@node-click="handleNodeClick"></el-tree></el-option></el-select></el-form-item><el-form-item label="检查人员:" prop="selectUser"><el-selectclass="el-input-search width100"v-model="ruleForm.selectUser"ref="refSelectOrg":multiple="true"@remove-tag="removetagUser"@clear="clearallUser"clearable@change ="$forceUpdate();"><el-optionvalue=""style="height:auto;background-color: #fff;"><el-input:validate-event="false"v-model="filterTextUser"ref="refSelectUserSearch"placeholder="请输入"@click.stop.nativeclearable@clear="clearallUserSearch"style="margin-bottom:8px;"></el-input><el-tree:show-checkbox="true"style="padding:20px 10px;":data="userList":props="defaultPropsUser"node-key="userId"check-strictlyhighlight-current:expand-on-click-node="true"ref="refTreeUser":default-expanded-keys="expandedKeysUserData":default-checked-keys="checkedKeysUserData"@check-change="handleNodeCheckUser"></el-tree></el-option></el-select></el-form-item><el-form-item label="检查结果:" prop="checkResult"><el-input type="textarea" v-model="ruleForm.checkResult"></el-input></el-form-item></el-form></div></div><div class="footerBtn bg"><el-divider></el-divider><el-row class="pd20"><el-col :span="23" style="text-align: right;"><el-button size="small" @click="goback">返回</el-button><el-button type="primary" size="small" @click="submitBtn('ruleForm')">提交</el-button></el-col></el-row></div></div>
</template><script>
import axios from "axios";
import {warnView,getInfo,childNode,childNodeFuzzyQuery,getUserListByOrg,saveCheck} from "../../../../api/warning"
export default {data() {return {// 检察机构startfilterTextOrg:'',orgList:[],defaultPropsOrg: {children: 'childNodeList',label: 'orgName',value:'orgId',isLeaf: 'leaf'},expandedKeysOrgData:['792394093041156096'],checkedKeysOrgData:[],nodeCheckedOrgData:[],// 检察机构end// 检察人员startfilterTextUser:'',userList:[],defaultPropsUser: {children: 'userList',label: 'realName',value:'userId',isLeaf: 'leaf'},expandedKeysUserData:[],checkedKeysUserData:[],nodeCheckedUserData:[],// 检察人员endruleForm: {checkTime: '',selectOrg: [],selectUser: [],checkResult: '',},rules: {checkTime: [{ required: true, message: '检查时间不能为空', trigger: 'change' },],selectOrg: [{ type: 'array', required: true, message: '检查机构不能为空', trigger: 'change' },],selectUser: [{ type: 'array', required: true, message: '检查人员不能为空', trigger: 'change' },],checkResult: [{ required: true, message: '检查结果不能为空', trigger: 'blur' },],},orgId:'',orgName:'',}},watch: {// 检察机构start// 监听输入值filterTextOrg(val) {if(val){this.childNodeFuzzyQueryChange(val)}else{this.childNodeChangeAll(this.orgId)}},'ruleForm.selectOrg': {handler: function (newVal, oldVal) {let that = thisif(newVal){// this.$refs.refTreeOrg.filter(newVal);}else{console.log('newVal1111111',newVal)}},deep: true},// 检察机构end// 检察人员startfilterTextUser(val) {this.getUserListByOrgChange(val)},// 检察人员end},created() {getInfo("").then((res) => {this.userId = res.data.userId;this.realName = res.data.realName;this.orgId = res.data.orgId;this.orgName = res.data.orgName;this.nodeCheckedOrgData = [{orgId:this.orgId,orgName:this.orgName,}]this.ruleForm.selectOrg.push(this.orgName)this.checkedKeysOrgData.push(this.orgId)this.childNodeChangeAll('792394093041156096')this.nodeCheckedUserData = [{userId:this.userId,realName:this.realName,}]this.ruleForm.selectUser.push(this.realName)this.checkedKeysUserData.push(this.userId)this.getUserListByOrgChange();})},mounted() {this.ruleForm.superviseId = this.$route.query.superviseId; // 监管idDate().getTime(); // 检查编号this.ruleForm.checkTime = this.dateTypeFormat('YYYY-mm-dd HH:MM:SS', new Date())},methods: {// 去重unique(arr){return Array.from(new Set(arr))},// 返回上一页goback() {this.$router.go(-1);},// 格式化日期dateTypeFormat(fmt, date) {let retconst opt = {'Y+': date.getFullYear().toString(), // 年'm+': (date.getMonth() + 1).toString(), // 月'd+': date.getDate().toString(), // 日'H+': date.getHours().toString(), // 时'M+': date.getMinutes().toString(), // 分'S+': date.getSeconds().toString() // 秒// 有其他格式化字符需求可以继续添加,必须转化成字符串}for (const k in opt) {ret = new RegExp('(' + k + ')').exec(fmt)if (ret) {fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))}}return fmt},
// 检察机构start// 获取模糊查询机构树childNodeFuzzyQueryChange(val){let data = {orgId:'',value:val}childNodeFuzzyQuery(data).then((res) => {this.orgList = res.data || [];})},// 获取机构树非模糊查询childNodeChangeAll(id){let orgId = id || ''childNode(orgId).then((res) => {res.data.node.childNodeList = res.data.childOrgListthis.orgList = []this.orgList.push(res.data.node);})},// 删除机构单个下拉菜单标签removetagOrg(val){this.nodeCheckedOrgData.forEach((item, index, arr) => {if(item.orgName === val) {arr.splice(index, 1)this.checkedKeysOrgData = this.checkedKeysOrgData.filter(i => i !== item.orgId)}})this.checkedKeysOrgData = this.unique(this.checkedKeysOrgData)this.$nextTick(() => {this.$refs.refTreeOrg.setCheckedKeys(this.checkedKeysOrgData,true)})// 数据变动更改人员树this.nodeCheckedUserData=[];this.ruleForm.selectUser=[];this.checkedKeysUserData=[];this.getUserListByOrgChange('')},// 清空机构下拉菜单clearallOrg(){},// 清空机构模糊查询clearallOrgSearch(){},// 点击机构树复选框handleNodeCheckOrg(data,checked){if(checked === true) {this.ruleForm.selectOrg.push(data.orgName)this.checkedKeysOrgData.push(data.orgId)this.nodeCheckedOrgData.push(data)if(this.ruleForm.selectOrg)this.ruleForm.selectOrg = this.unique(this.ruleForm.selectOrg)this.checkedKeysOrgData = this.unique(this.checkedKeysOrgData)const map = new Map();this.nodeCheckedOrgData.filter(i => !map.has(i.orgId) && map.set(i.orgId, i));this.$refs.refTreeOrg.setChecked(data.orgId, true)}else{this.nodeCheckedOrgData.forEach((item, index, arr) => {if(item.orgId === data.orgId) {arr.splice(index, 1)this.checkedKeysOrgData = this.checkedKeysOrgData.filter(i => i !== item.orgId)}})if(this.ruleForm.selectOrg.includes(data.orgName)) {this.ruleForm.selectOrg.forEach((item, index, arr) => {if(item === data.orgName) {arr.splice(index, 1)}})this.$refs.refTreeOrg.setChecked(data.orgId, false)}}// 数据变动更改人员树this.nodeCheckedUserData=[];this.ruleForm.selectUser=[];this.checkedKeysUserData=[];this.getUserListByOrgChange('')},// 点击机构树节点handleNodeClick(data,node){console.log(data)console.log(node)let that = thislet orgId = '';if (node.level >= 1) {orgId = node.data.orgId;}childNode(orgId).then((res) =>{if(res.code == 20000){let parentData = [];let data;if (node.level === 0) {parentData[0] = res.data.nodedata = parentData;}if (node.level >= 1) {data = res.data.childOrgList;}//TODO 追加数据 append datathis.$refs.refTreeOrg.updateKeyChildren(orgId,res.data.childOrgList);setTimeout(()=>{if(res.data.childOrgList){ node.expanded = true}},300)} else {this.$message({message: res.message,type: "error"});}})},
// 检查机构end
// 检察人员start// 获取模糊查询人员树getUserListByOrgChange(val){this.checkedKeysOrgData = this.unique(this.checkedKeysOrgData)let data = {orgIds:this.checkedKeysOrgData,searchValue:val || ''}getUserListByOrg(data).then((res) => {this.userList = res.data || [];})},// 删除人员单个下拉菜单标签removetagUser(val){this.nodeCheckedUserData.forEach((item, index, arr) => {if(item.realName === val) {arr.splice(index, 1)this.checkedKeysUserData = this.checkedKeysUserData.filter(i => i !== item.userId)}})this.checkedKeysUserData = this.unique(this.checkedKeysUserData)this.$nextTick(() => {this.$refs.refTreeUser.setCheckedKeys(this.checkedKeysUserData,true)})},// 清空人员下拉菜单clearallUser(){},// 清空人员模糊查询clearallUserSearch(){},// 点击人员树复选框handleNodeCheckUser(data,checked){if(checked === true) {this.ruleForm.selectUser.push(data.realName)this.checkedKeysUserData.push(data.userId)this.nodeCheckedUserData.push(data)if(this.ruleForm.selectUser)this.ruleForm.selectUser = this.unique(this.ruleForm.selectUser)this.checkedKeysUserData = this.unique(this.checkedKeysUserData)const map = new Map();this.nodeCheckedUserData.filter(i => !map.has(i.userId) && map.set(i.userId, i));this.$refs.refTreeUser.setChecked(data.userId, true)}else{this.nodeCheckedUserData.forEach((item, index, arr) => {if(item.userId === data.userId) {arr.splice(index, 1)this.checkedKeysUserData = this.checkedKeysUserData.filter(i => i !== item.userId)}})if(this.ruleForm.selectUser.includes(data.realName)) {this.ruleForm.selectUser.forEach((item, index, arr) => {if(item === data.realName) {arr.splice(index, 1)}})this.$refs.refTreeUser.setChecked(data.userId, false)}}},// 检查人员end// 表单提交弹窗submitBtn(formName){this.$refs[formName].validate((valid) => {if (valid) {this.$confirm('确定提交吗?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {this.submitChange();}).catch(() => {this.$message({type: 'info',message: '已取消'});});} else {return false;}});},// 提交表单submitChange(){const map = new Map();this.nodeCheckedOrgData = this.nodeCheckedOrgData.filter(i => !map.has(i.orgId) && map.set(i.orgId, i));this.nodeCheckedUserData = this.nodeCheckedUserData.filter(i => !map.has(i.userId) && map.set(i.userId, i));this.ruleForm.orgList = this.nodeCheckedOrgData;this.ruleForm.userList = this.nodeCheckedUserData;let data = {superviseId:this.ruleForm.superviseId,orgList:this.ruleForm.orgList,userList:this.ruleForm.userList,checkResult:this.ruleForm.checkResult,checkTime:this.ruleForm.checkTime,}console.log('data',data)saveCheck(data).then((res) => {if(res.code == '20000'){this.$message({message: '提交成功',type: 'success'});this.$router.go(-1);}else{this.$message({message: res.message,type: 'error'});}})},}
}
</script><style scoped lang="less">
.app-container {margin: 10px;
}
#app {/* padding: 15px; */background-color: #fff;font-size: 14px;
}.title{text-align: center;color: #0066FF;font-weight:800;font-size: 16px;}.chart-container{position: relative;width: 100%;height: calc(100vh - 84px);}.description{font-size: 12px;padding-left: 20px;color: #555;}.mt10{margin-top: 10px;}.mg15-0{margin: 15px 0;}.mt30{margin-top: 30px;}.mt26{margin-top: 26px;}.state-box{width: 10px;height: 10px;margin-right: 5px;margin-bottom: 1px;display: inline-block;}.state-box-max {width: 19px;height: 16px;text-align: center;line-height: 16px;color: #fff;margin-right: 10px;margin-top: 1px;display: inline-block;}.violet{background: #9933FF;}.yellow{background: #e6a23c;}.blue{background: #0066FF;}.footerBtn{position: fixed;bottom: 0;right: 0;z-index: 9;width: calc(100%);-webkit-transition: width 0.28s;transition: width 0.28s;}.el-divider--horizontal{margin: 0px 15px;}.bg{background: #fff;}.el-col{margin:0 24px;}.pdt10{padding-top: 10px;}.mb15{margin-bottom: 15px;}.mb82{margin-bottom: 82px;}.mb60{margin-bottom: 60px;}.mb10{margin-bottom: 10px;margin-top: 10px;}.diaglogClas{margin-bottom: 15px;}.grid-content {/*  padding-top: 15px; */border-radius: 4px;min-height: 36px;background: #fff;}.bg-purple {/* background: #dddfe6; */width: 100%;height: 55px;line-height: 55px;font-size: 12px;/* font-weight:800; */text-align: center;border: 1px solid #d3dce6;}.expClas{float: right;position: initial;margin-top: 30px;}.footCenter{text-align: center;}
/deep/.el-autocomplete-suggestion{display: inline-table;
}
.width100{width: 100%;}
.center{width: 700px;margin: 0 auto;padding-top: 20px;padding-bottom: 20px;
}
.footerBtn{position: fixed;bottom: 0;right: 0;z-index: 9;width: calc(100%);-webkit-transition: width 0.28s;transition: width 0.28s;
}
.bg{background: #fff;}
.pd20{padding: 15px;padding-right: 0;}
</style>

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

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

相关文章

【STM32】HAL库的STOP低功耗模式UART串口唤醒,解决首字节出错的问题(全网第一解决方案)

【STM32】HAL库的STOP低功耗模式UART串口唤醒&#xff0c;解决首字节出错的问题&#xff08;全网第一解决方案&#xff09; 前文&#xff1a; 【STM32】HAL库的STOP低功耗模式UART串口唤醒&#xff0c;第一个接收字节出错的问题&#xff08;疑难杂症&#xff09; 目前已解决 …

docker swarm 常用命令简介以及使用案例

docker swarm Docker Swarm 是Docker官⽅的跨节点的容器编排⼯具。⽤户只需要在单⼀的管理节点上操作&#xff0c;即可管理集群下的所有节点和容器 解决的问题 解决docker server的集群化管理和部署Swarm通过对Docker宿主机上添加的标签信息来将宿主机资源进⾏细粒度分区&am…

【源码阅读】事件订阅包v2

1、Feed Feed 实现一对多订阅&#xff0c;其中事件的载体是通道。发送到 Feed 的值会同时传送到所有订阅的通道。 与Typemux的对比 链接: link TypeMux是一个同步的事件框架&#xff0c;当有一个被订阅的事件发生的时候&#xff0c;会遍历该事件对应的订阅者通道&#xff0c;…

redis源码之:事件驱动epoll

一、aeEventLoop初始化 从server.c的main方法中进入initServer&#xff0c;在initServer方法中&#xff0c;server.el aeCreateEventLoop(server.maxclientsCONFIG_FDSET_INCR);创建eventloop&#xff1a;&#xff08;注意fileevent与epollevent的区分fileEvent是标识往epoll…

day13 滑动窗口最大值 前K个高频元素

题目1&#xff1a;239 滑动窗口最大值 题目链接&#xff1a;239 滑动窗口最大值 题意 长度为K的滑动窗口从整数数组的最左侧移动到最右侧&#xff0c;每次只移动1位&#xff0c;求滑动窗口中的最大值 不能使用优先级队列&#xff0c;如果使用大顶堆&#xff0c;最终要pop的…

获取进行逗号分隔的id值 Split的使用

获取进行逗号分隔的id值,Split的使用 后台实现对有逗号进行分割的字符串 使用这行代码就不会有一个空数组值,直接过滤调数组中的空值 var ids = key.Split(,).Where(s => !string.IsNullOrEmpty(s

如何实现IOS APP被杀掉后依然可以接收到个推消息通知

背景 项目已经集成了个推SDK&#xff0c;但是在离线场景下无法收到推送消息&#xff0c;离线场景主要分2种情况&#xff0c;一种是用户将APP切换到了后台&#xff0c;一种是用户将APP杀掉了。 针对场景一&#xff1a;我们可以将APP支持后台运行&#xff0c;比如项目中使用到了…

WPF实现右键选定TreeViewItem

在WPF中&#xff0c;TreeView默认情况是不支持右键选定的&#xff0c;也就是说&#xff0c;当右键点击某节点时&#xff0c;是无法选中该节点的。当我们想在TreeViewItem中实现右键菜单时&#xff0c;往往希望在弹出菜单的同时选中该节点&#xff0c;以使得菜单针对选中的节点生…

GBASE南大通用提问:如果程序检索到 NULL 值,该怎么办?

可在数据库中存储 NULL 值&#xff0c;但编程语言支持的数据类型不识别 NULL 状态。程序必须 采用某种方式来识别 NULL 项&#xff0c;以免将它作为数据来处理。 在 SQL API 中&#xff0c;指示符变量满足此需要。指示符变量是与可能收到 NULL 项的主变量相 关联的一个附加的变…

协作共生:数字孪生与智慧城市的共赢之路

引言 随着科技的飞速发展&#xff0c;数字孪生和智慧城市的概念逐渐融入现代城市的规划和建设中。数字孪生技术为智慧城市的建设提供了强大的支持&#xff0c;而智慧城市则为数字孪生的应用提供了广阔的舞台。本文将深入探讨数字孪生与智慧城市之间的相互影响与协作&#xff0…

系列七、Spring Security中基于Jdbc的用户认证 授权

一、Spring Security中基于Jdbc的用户认证 & 授权 1.1、概述 前面的系列文章介绍了基于内存定义用户的方式&#xff0c;其实Spring Security中还提供了基于Jdbc的用户认证 & 授权&#xff0c;再说基于Jdbc的用户认证 & 授权之前&#xff0c;不得不说一下Spring Se…

【局域网window10系统搭建共享文件夹或与手机共享】

局域网window10系统搭建共享文件夹或与手机共享 1、Window 10之间搭建共享文件夹1.1 ping通两台window 10 电脑1.2 创建共享账号&#xff08;window 10专业版&#xff09;1.3 创建共享文件夹以及配置1.4访问共享文件夹 2、手机访问window10 共享文件夹&#xff08;结合步骤一&a…

Linux内存管理:(八)页面迁移

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 可迁移页面 页面迁移机制支持两…

基于集成学习算法XGBoost农作物产量可视化分析预测系统

文章目录 基于集成学习算法XGBoost农作物产量可视化分析预测系统一、项目简介二、开发环境三、项目技术四、功能结构五、功能实现模型构建封装类用于网格调参训练模型系统可视化数据请求接口模型评分 0.5*mse 六、系统实现七、总结 基于集成学习算法XGBoost农作物产量可视化分析…

Netty通信中的粘包半包问题(一)

前言 我们在日常开发过程中&#xff0c;客户端和服务端的连接大多使用的是TCP协议,因为我们要保证数据的可靠传输&#xff0c; 当网络中出现丢包时要求&#xff0c;要求数据包的发送端重传给接收端。而TCP是一种面向连接的传输层协议&#xff0c; 当使用TCP进行传输时&#xf…

vue前端开发自学,插槽练习第二次,name属性的使用

vue前端开发自学,插槽练习第二次,name属性的使用!可以使用name属性&#xff0c;来自定义一个名字&#xff0c;这样&#xff0c;就可以在一个组件内同时出现多个插槽的内容了。在子组件内接收的时候&#xff0c;很简答&#xff0c;只需要在slot标签里面加上name“mz”&#xff1…

业务向——基于多多进宝平台的CPS

业务向——基于多多进宝平台的CPS 导读小试牛刀商品活动推广商品详情获取频道推广订单获取及和用户绑定小结 导读 多多进宝是拼多多的开放平台&#xff0c;为广大商家和推广者提供了一个机会&#xff0c;通过推广拼多多的商品来实现收益。多多进宝的CPS&#xff08;按效果付费…

[JAVA数据结构] 认识 Iterable、Collection、List 的常见方法签名以及含义

目录 (一)Iterable 1. 介绍 2. 常见方法 (二)Collection 1. 介绍 2. 常见方法 (三) List 1. 介绍 2. 常见方法 总结 (一) Iterable 1. 介绍 Iterable接口是Java中的一个接口&#xff0c;它是集合框架中的根接口之一。Iterable接口表示实现了迭代功能&#xff0c;即可以通过迭…

鸿蒙HarmonyOS兼容JS的类Web开发

鸿蒙HarmonyOS兼容JS的类Web开发 文章目录 鸿蒙HarmonyOS兼容JS的类Web开发文件组织目录结构文件访问规则媒体文件格式 js标签配置pageswindow示例 app.js应用生命周期应用对象6 HML语法参考页面结构数据绑定普通事件绑定冒泡事件绑定5捕获事件绑定5列表渲染条件渲染逻辑控制块…

HTML5 画布绘制海报

需求&#xff1a; 1、根据用户填写的联系人信息&#xff1a;姓名、手机号及微信二维码&#xff0c;生成海报&#xff0c;并下载保存到本地&#xff1b; 2、可多个海报切换供用户选择 实现&#xff1a;使用html5实现&#xff0c;为方便用户&#xff0c;做的手机网站的样式&am…