vue3使用Cascader联级选择器的懒加载+回显

2023-12-26 15:28:01

效果图
在这里插入图片描述
页面代码

// separator是改变文字链接的方式,
<el-cascader
	separator="-"
	v-model="currentRegionList"
	:props="DeptRegionList"
	:options="getRegionList"
	@change="handleRegionListFun"
	ref="deptRegionListRef"
	clearable
/>

逻辑代码

let deptRegionListRef = ref();
const getRegionList = ref([]);
const currentRegionList = ref([]);
const DeptRegionList = {
	lazy: true,
	async lazyLoad(node, resolve) {
		const { level } = node;
		const nodes = [];
		// 当他层级是第一层的时候 发送的接口
		if (level == 0) {
			let res: any = await regionListPage({ current: 1, size: 100 });
			res.data.records.map(item => {
			// 这棵树这一层渲染的数据,根据需求来
				let obj = {
					value: item.code,
					label: item.name,
					hasChild: 1,
					// 有子集就是false  最后一层就是true
					leaf: false
				};
				nodes.push(obj);
			});
			resolve(nodes);
		} else {
		// 判断如果第二层的时候
			if (node.data.hasChild == "1") {
				let res: any = await regionListPage({ current: 1, size: 100, code: node.data.value });
				res.data.records.map(item => {
					let obj = {
						value: item.code,
						label: item.name,
						hasChild: item.hasChild,
						leaf: false
					};
					nodes.push(obj);
				});
				resolve(nodes);
			} else {
				let res: any = await regionListPage({ current: 1, size: 100, code: node.data.value });
				res.data.records.map(item => {
					let obj = {
						value: item.code,
						label: item.name,
						leaf: true
					};
					nodes.push(obj);
				});
				resolve(nodes);
			}
		}
	}
};
// 当他改变选中的值的时候
const handleRegionListFun = value => {
	// 树的ref(deptRegionListRef)  cascaderPanelRef(element自带的方法)
	deptRegionListRef.value.cascaderPanelRef.menuList.forEach((element, index) => {
		element.nodes.map(item => {
			if (item.data.value == value[index]) {
			// 后端需要这些数据,根据需求来
				formLabelAlign.value.placeVisitingRelativesName += item.data.label;
				formLabelAlign.value.placeVisitingRelatives += index == value.length - 1 ? item.data.value : item.data.value + ",";
			}
		});
	});
	
};

回显

回显的内容要根据value里面的内容回显的,通过数组组合在一起(value里面是什么,就组合什么样的数组),比如我item.code是51000这个数,每一层的item.code不一样,那么要给这个v-model的currentRegionList赋值[51000,510001… ],这样去赋值

在这里插入图片描述

文章来源:https://blog.csdn.net/qq_46131497/article/details/135221007
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。