Ant Design Vue的cascader级联组件动态加载数据,不同类型获取不同接口,二级和三级

文章介绍了在Vue应用中,如何使用Cascader组件实现异步加载患者类型数据的功能,通过`loadData`方法根据选择的层级动态调用接口获取不同级别的组织列表。
摘要由CSDN通过智能技术生成

        

不同类型,异步获取数据,患者类型没有三级。

<a-cascader
 v-model="itemType"
 :load-data="loadData"
 change-on-select
 class="input-width"
 :options="ItemTypeOptions"
  placeholder="请选择"
   @change="handleSelectItemType"
/>


ItemTypeOptions = [
    {
      value: 1,
      label: '患者',
      isLeaf: false
    },
    {
      value: 2,
      label: '标本',
      isLeaf: false
    },
    {
      value: 3,
      label: '物品',
      isLeaf: false
    },
  ];



async loadData(selectedOptions) {
    console.log(selectedOptions)
    const targetOption = selectedOptions[selectedOptions.length - 1];
    this.levelIndex = selectedOptions.length+1
    const type = selectedOptions[0].value
    targetOption.loading = true;
  // setTimeout(() => {
    if(selectedOptions.length<2){
      await this.getItemTypeList(targetOption.value,type);//这个方法是掉接口,二级数据
    }else{
      await this.getItemTypesList(targetOption.value,type);//这个方法是掉接口,三级数据
    }
    targetOption.loading = false;
    if(this.levelIndex<=3){
      targetOption.children = this.roleTwoList;
    }
    this.ItemTypeOptions = [...this.ItemTypeOptions];
    // }, 1000);
  }
   
  //根据父id获取2级组织列表
  async getItemTypeList(id,type){
    console.log(this.levelIndex==3||type==1)
    try {
      // let par={
      //   parentId:id
      // }
      // const res = await getOrgOneList(par)//掉接口,获取下一层级数据
      this.roleTwoList=[]
      const query = {
        pageNum: 1,
        pageSize: 1000,
        attributeType: id,
      }
      await transportApi.getTransportTypeList(query).then(res => {
        res.data.list.forEach(item=>{
          let temp={
            value:item.id,
            label:item.typeName,
            isLeaf: this.levelIndex==3||type==1?true:false//判断是否是叶子节点
          }
          this.roleTwoList.push(temp)
        })
      });
      
    } catch (error) {
      console.log(error)
    }
  }
  //根据父id获取3级组织列表
  async getItemTypesList(id,type){
    try {
      this.roleTwoList=[]
      const query = {
        pageNum: 1,
        pageSize: 1000,
        typeId: id,
        current: 1
      }
      if(type==2){
        await transportApi.getTransportSampleList(query).then(res => {
          res.data.list.forEach(item=>{
            let temp={
              value:item.id,
              label:item.name,
              isLeaf: this.levelIndex==3?true:false//判断是否是叶子节点
            }
            this.roleTwoList.push(temp)
          })
        });
      }else{
        await transportApi.getTransportGoodsList(query).then(res => {
          res.data.list.forEach(item=>{
            let temp={
              value:item.id,
              label:item.name,
              isLeaf: this.levelIndex==3?true:false//判断是否是叶子节点
            }
            this.roleTwoList.push(temp)
          })
        });
      }
    } catch (error) {
      console.log(error)
    }
  }

抱歉,我不太理解您的问题。您是想在使用 Ant Design Vue 的情况下,如何使用 Diamante 实现动态加载二级菜单吗?如果是这样的话,您可以参考以下步骤: 1. 在 Ant Design Vue 中使用 Cascader 组件,该组件可以实现级联选择功能。 2. 在 Cascader 组件中使用 loadData 方法,该方法可以在选择某个选项时动态加载下一级菜单的数据。 3. 在 loadData 方法中使用 Diamante 的 API,从后端获取下一级菜单的数据,并将其设置为 Cascader 组件的 options 属性。 您可以参考以下代码,其中假设您的后端 API 地址为 http://example.com/api/menu,且返回的数据格式为: ```json [ { "label": "Option 1", "value": "1", "children": [ { "label": "Sub-option 1-1", "value": "1-1" }, { "label": "Sub-option 1-2", "value": "1-2" } ] }, { "label": "Option 2", "value": "2", "children": [ { "label": "Sub-option 2-1", "value": "2-1" }, { "label": "Sub-option 2-2", "value": "2-2" } ] } ] ``` ```vue <template> <a-cascader :options="options" :load-data="loadData" @change="handleChange" /> </template> <script> import { Cascader } from 'ant-design-vue' import axios from 'axios' export default { components: { ACascader: Cascader, }, data() { return { options: [ { label: 'Option 1', value: '1', isLeaf: false, }, { label: 'Option 2', value: '2', isLeaf: false, }, ], } }, methods: { async loadData(selectedOptions) { const targetOption = selectedOptions[selectedOptions.length - 1] targetOption.loading = true const response = await axios.get('http://example.com/api/menu', { params: { parentId: targetOption.value, }, }) targetOption.loading = false const { data } = response if (data && data.length > 0) { targetOption.children = data.map((item) => ({ label: item.label, value: item.value, isLeaf: !item.children, })) } else { targetOption.isLeaf = true } }, handleChange(value, selectedOptions) { console.log(value, selectedOptions) }, }, } </script> ``` 希望这能够回答您的问题。如果您还有疑问,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值