Cascader 级联选择器如何实现自定义数据?所有的数据都由请求后端而来?

前提:

最近得了一个 需求,在下拉框变为级联选择器,数据由后端请求而来,同时间后端的接口是分别单独请求的,并没有给我任何类似于树结构的是否叶子节点的东西,故不管是父级子集或者孙级,都得走分别的请求接口,他们之间唯一的联系就是孙级的pid是子级的id,同理,子级的pid是父级的id

思路:

既然是分别给我的不同的接口返回的,那就先全部请求出来,再逐级循环,分别把pid和相对应父级id做对应

代码:

html:

<template>
	<div class="tbMachineinfo-container">
		<el-dialog v-model="isShowDialog" :title="props.title" :width="700" draggable="">
			<el-form :model="ruleForm" ref="ruleFormRef" size="default" label-width="100px" :rules="rules">
				<el-row :gutter="35">
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
						<el-form-item label="XL名称" readonly="true">
							<el-cascader  v-model="Linevalue" :options="options" @change="handleChange" />
						</el-form-item>
					</el-col>
</el-row>
</el-form>
</el-dialog>
	</div>
</template>

js:

const Linevalue = ref([])
const options = ref([])as any
const handleChange = (value:any) => {
	console.log(value);
}
const tableParams = ref({
  page: 1,
  pageSize: 10000,
  total: 0,
});
//获取运维信息
const gettbBureau1 = async () => {
  const levedata = await getLevel();
  const Linelist = await getLineInfoList();
//这是我自己的请求接口,你们只需要换成你们自己的即可
  pagetbBureau({}).then((res: any) => {
    const tempOptions: { value: any; label: any; children: any[]; }[] = []; // 临时存储options数据的数组
    res.data.result.items.forEach((item: any) => {
      const children: { value: any; label: any; children: any[]; }[] = []; // 存储子级数据的数组
      levedata.forEach((item1: any) => {
        if (item1.pid == item.id) {
          const subChildren: { value: any; label: any; }[] = []; // 存储子级的子级数据的数组
          Linelist.forEach((item2: any) => {
            if (item2.pid == item1.id) {
              subChildren.push({ value: item2.id, label: item2.name });
            }
          });
          children.push({ value: item1.value, label: item1.level, children: subChildren });
        }
      });
      tempOptions.push({ value: item.value, label: item.bureauName, children: children });
    });
    options.value = tempOptions; // 更新options数据
  });
};
// 获取层级信息
const getLevel = async () => {
	try {
//这是我自己的请求接口,你们只需要换成你们自己的即可
	const res = await pagetbLinegrade({});
	return res.data.result.items;
	} catch (error) {
		console.error('Error:', error);
		return [];
	}
	
}
// 获取XL信息
const getLineInfoList = async () => {
	try {
//这是我自己的请求接口,你们只需要换成你们自己的即可
		const res = await pageTbLineInfo(Object.assign(tableParams.value));
		return res.data.result.items;
	} catch (error) {
		console.error('Error:', error);
		return [];
	}
};

这样出来的options就都是后端给的数据啦,2024.4.10特此记录

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值