使用element中el-cascader级联选择器动态懒加载以及回显 (单选)

<template>
    <!-- 新增||修改弹框 -->
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="title" :visible.sync="open"
        width="800px" append-to-body>
        <el-form ref="form" :model="form" label-width="80px">
            <el-form-item label="地址:" prop="addressId">
                <el-cascader v-if="open" v-model="form.addressId" :props="props" :options="options"
                    :placeholder="addressName" />
            </el-form-item>
        </el-form>
        <div slot="footer" class="dialog-footer">
            <el-button type="primary" @click="submitForm">确 定</el-button>
            <el-button @click="cancel">取 消</el-button>
        </div>
    </el-dialog>
</template>
<script>
// 导入接口 (根基实际项目,自定义)
import { lazyList, getUser, updateUser, addUser } from '@/api/manager/user'
var uploadingClick = 0
export default {
    data() {
        return {
            title: '',
            open: false,
            options: [],
            //     options:[  // 级联选择器的数据格式
            // 		{
            // 		"ancestors": "0,100", // 上级的deptId以逗号分割形成的字符串
            // 		"deptName": "测试1",
            // 		"deptId": 25438,
            // 		"parentId": 100,
            // 		"parentName": "测试",
            // 		"existSub": true  
            // 	},
            // 	{
            // 		"ancestors": "0,100",
            // 		"deptName": "测试2",
            // 		"deptId": 25441,
            // 		"parentId": 100,
            // 		"parentName": "测试",
            // 		"existSub": false
            // 	},
            //    ],
            addressName: '请选择',  //当前选中的name
            form: {
                addressId: [], //选中的上下级deptId所组成的数组:比如:  [100, 25438, 25519, 25652, 25604] ,
            },
            // 表单校验
            rules: {
                addressId: [
                    {
                        required: true,
                        message: '地址不能为空',
                        trigger: 'blur'
                    }
                ],
            },
            props: {
                //是否动态加载子节点,需与 lazyLoad 方法结合使用
                lazy: true,
                value: 'deptId',
                label: 'deptName',
                children: 'children',
                //在选中节点改变时,是否返回由该节点所在的各级菜单的值所组成的数组,若设置 false,则只返回该节点的值
                emitPath: false,
                //是否严格的遵守父子节点不互相关联
                checkStrictly: true,
                //加载动态数据的方法,仅在 lazy 为 true 时有效
                //function(node, resolve),node为当前点击的节点,resolve为数据加载完成的回调(必须调用)
                lazyLoad(node, resolve) {
                    const queryParams = {}
                    queryParams.parentId = node.value
                    //根据parentId 查询下级的数据
                    lazyList(queryParams).then(res => {
                        res.data.forEach(item => { // 是否存在下级,是否禁用
                            item.leaf = !item.existSub
                            item.disabled = false
                        })
                        resolve(res.data)
                    })
                }
            },
        }
    },

    methods: {
        // 表单重置
        reset() {
            this.form = {
                addressId: [],
            }
            this.resetForm('form')
        },
        /** 新增操作 */
        handleAdd() {
            this.reset()
            this.open = true
            this.title = '添加'
        },
        /** 修改操作 */
        handleUpdate(row) {
            this.reset()
            const id = row.id
            // 调用详情的接口
            getUser(id).then(response => {
                this.form = response.data
                // 处理addressId ,用来获取所有上下级deptId组成的数组
                this.form.addressId = this.dataEchoHandle(response.data)
                this.open = true
                this.title = '修改'
            })
        },

        // Cascader 级联选择器 懒加载  数据回显
        dataEchoHandle(row) { // 
            // 获取到当前的addressId
            let ancestors = row.addressId // 当前的id,比如:25604
            if (row.ancestors && row.ancestors != '') { // 格式:'0,100, 25438, 25519, 25652'
                // 对数据进行回显(获取所有父级的addressId,加上当前的addressId,组成的数组。)
                ancestors = row.ancestors.split(',')
                ancestors.shift() //去掉0
                ancestors = ancestors.map(Number) // 数组的每个元素由string转为number类型
                ancestors.push(row.addressId) // 将当前的id加入
                console.log(ancestors, 'ancestors')  // 获取到所有的id组成的数组  [100, 25438, 25519, 25652, 25604] 
            }
            return ancestors
        },
        // 取消按钮
        cancel() {
            this.open = false
            this.reset()
        },
        /** 提交按钮 */
        submitForm: function () {
            if (uploadingClick == 0) {
                uploadingClick = 1
                this.$refs['form'].validate(valid => {
                    if (valid) {
                        console.log('this.form', this.form)
                        const params = JSON.parse(JSON.stringify(this.form))
                        // return;
                        if (this.form.id != undefined) {
                            if (params.addressId instanceof Array) {
                                // 数组类型
                                params.addressId = params.addressId[params.addressId.length - 1]
                            }
                            console.log('params修改', params)
                            // return;
                            updateUser(params).then(response => {
                                this.$modal.msgSuccess('修改成功')
                                this.open = false
                            })
                        } else {
                            addUser(params).then(response => {
                                this.$modal.msgSuccess('新增成功')
                                this.open = false
                            })
                        }
                    }
                })
                setTimeout(function () {
                    uploadingClick = 0
                }, 3000)
            } else {
                this.$modal.msgError('请勿重复点击')
            }
        },
    }
}
</script>

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

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

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

相关文章

2023年高级软考系统架构师考题参考

对于一些有实践经验的同学来说&#xff0c;感觉不难&#xff0c;但是落笔到纸面上&#xff0c;就差强人意了&#xff0c;平时这方面要多练习&#xff0c;所想所思要落到纸面上&#xff0c;或者表达清晰让别人听懂&#xff0c;不仅是工作中的一个基本素质&#xff0c;也是个非常…

跟小德学C++之配置文件(形式)

嗨&#xff0c;大家好&#xff0c;我是出生在达纳苏斯的一名德鲁伊&#xff0c;我是要立志成为海贼王&#xff0c;啊不&#xff0c;是立志成为科学家的德鲁伊。最近&#xff0c;我发现我们所处的世界是一个虚拟的世界&#xff0c;并由此开始&#xff0c;我展开了对我们这个世界…

C/C++转WebAssembly及微信小程序调用

上一篇文章讲了C/C如何转WebAssembly&#xff0c;并测试了在Web端调用。本篇内容和上篇一样&#xff0c;介绍C/C包转的.wasm包如何在小程序中调用。 说明 本篇是在上一篇步骤1-4的基础上&#xff0c;再做修改&#xff0c;供微信小程序端调用的方法和步骤。 本篇操作手册可以…

再见2023,你好2024

再见2023&#xff0c;你好2024 生活1月 悲伤与治愈2~4月 运动与偏爱5月 体验与美食6月 婚礼与热爱7~8月 就医与别离9~11月 陪伴与暖房12月 体验&新生 运动追剧读书总结 生活 生活是一个修罗场&#xff0c;来世间一场&#xff0c;要经历丰腴有趣的人生。去体验各种滋味&…

线性代数——(期末突击)行列式(上)-行列式计算、行列式的性质

目录 行列式 行列式计算 逆序数 行列式的性质 转置 两行&#xff08;列&#xff09;互换 两行&#xff08;列&#xff09;对应相等 提公因子 两行&#xff08;列&#xff09;对应成比例 某行&#xff08;列&#xff09;为零 行列式分裂 行列式变换及三角行列式 行…

MySQL 数值函数,字符串函数与多表查询

MySQL像其他语言一样,也提供了很多库函数,分为单行函数和分组函数(聚合函数),我们这里先简易介绍一些函数,熟悉就行,知道怎么使用即可. 数值函数 三角函数 指数与对数函数 进制间的转换函数 字符串函数 注:LPAD函数是右对齐,RPAD函数是左对齐 多表查询 注:如果为表起了别名,就…

听GPT 讲Rust源代码--src/tools(34)

File: rust/src/tools/clippy/clippy_lints/src/collection_is_never_read.rs 文件"collection_is_never_read.rs"位于Rust源代码中的clippy_lints工具中&#xff0c;其作用是检查在集合类型&#xff08;如Vec、HashMap等&#xff09;的实例上执行的操作是否被忽略了…

大模型系列:OpenAI使用技巧_使用OpenAI进行K-means聚类

文章目录 1. 使用K-means算法找到聚类2. 聚类中的文本样本和聚类的命名让我们展示每个聚类中的随机样本。 我们使用一个简单的k-means算法来演示如何进行聚类。聚类可以帮助发现数据中有价值的隐藏分组。数据集是在 Get_embeddings_from_dataset Notebook中创建的。 # 导入必要…

共享单车之数据分析

文章目录 第1关&#xff1a;统计共享单车每天的平均使用时间第2关&#xff1a;统计共享单车在指定地点的每天平均次数第3关&#xff1a;统计共享单车指定车辆每次使用的空闲平均时间第4关&#xff1a;统计指定时间共享单车使用次数第5关&#xff1a;统计共享单车线路流量 第1关…

RO-NeRF论文笔记

RO-NeRF论文笔记 文章目录 RO-NeRF论文笔记论文概述Abstract1 Introduction2 Related Work3 Method3.1 RGB and depth inpainting network3.2 Background on NeRFs3.3 Confidence-based view selection3.4 Implementation details 4 Experiments4.1 DatasetsReal ObjectsSynthe…

kafka实现延迟消息

背景 我们知道消息中间件mq是支持延迟消息的发送功能的&#xff0c;但是kafka不支持这种直接的用法&#xff0c;所以我们需要独立实现这个功能&#xff0c;以下是在kafka中实现消息延时投递功能的一种方案 kafka实现延时消息 主要的思路是增加一个检测服务&#xff0c;这个检…

2011年AMC8数学竞赛中英文真题典型考题、考点分析和答案解析

今天是2023年12月30日&#xff0c;距离2024年元旦新年还有2天时间&#xff0c;先预祝所有的读者和小读者想今年工作、学习进步&#xff01;幸福平安&#xff01; 今天距离2024年1月19日的AMC8正式比赛只有20天的时间&#xff0c;我们继续来看AMC8竞赛的历年真题典型考题和解析…

Stable Diffusion WebUI安装合成面部说话插件SadTalker

SadTalker可以根据一张图片、一段音频&#xff0c;合成面部说这段语音的视频。图片需要真人或者接近真人。 安装ffmpeg 下载地址&#xff1a; https://www.gyan.dev/ffmpeg/builds/ 下载ffmpeg-git-full.7z 后解压&#xff0c;将解压后的目录\bin添加到环境变量的Path中。 在…

MR实战:统计总分与平均分

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建成绩映射器类5、创建成绩驱动器类6、启…

计算每个月的天数

大家好呀&#xff0c;今天的每日一题来喽。准备好了吗亲。上车上车&#xff01;&#xff01;&#xff01; 文章目录 目录 文章目录 题目重现 输⼊y和m两个整数&#xff0c;y表⽰年份&#xff0c;m表⽰⽉份&#xff0c;计算y年m⽉有多少天&#xff0c;并输出天数。 一、解法思路…

LLM之RAG实战(十一)| 使用Mistral-7B和Langchain搭建基于PDF文件的聊天机器人

在本文中&#xff0c;使用LangChain、HuggingFaceEmbeddings和HuggingFace的Mistral-7B LLM创建一个简单的Python程序&#xff0c;可以从任何pdf文件中回答问题。 一、LangChain简介 LangChain是一个在语言模型之上开发上下文感知应用程序的框架。LangChain使用带prompt和few-…

Transformer(seq2seq、self-attention)学习笔记

在self-attention 基础上记录一篇Transformer学习笔记 Transformer的网络结构EncoderDecoder 模型训练与评估 Transformer的网络结构 Transformer是一种seq2seq 模型。输入一个序列&#xff0c;经过encoder、decoder输出结果也是一个序列&#xff0c;输出序列的长度由模型决定…

基于MINIST的手写数字体识别

一、算法简述 网络结构设计 通过创建MnistNet类&#xff0c;定义了包含两个卷积层和两个全连接层的深度神经网络。这个网络的设计灵感来自于经典的CNN结构&#xff0c;其中卷积层用于提取图像特征&#xff0c;而全连接层则用于将这些特征映射到最终的类别。 卷积与池化 卷…

在 Golang 应用程序中管理多个数据库

掌握在 Golang 项目中处理多个数据库的艺术 在当前软件开发领域中&#xff0c;处理单个应用程序内的多个数据库的需求越来越普遍。具有强大功能的 Golang 是处理此类任务的绝佳解决方案&#xff0c;无论您是与多个数据源合作还是仅为增强组织和可扩展性而分隔数据。在本文中&a…