vue3下拉树(单选) 输入框显示父级和子级 列表的用途联动西药名称

因为这功能比较复杂 为了页面更加美观 所以用弹窗的形式展现下拉树
列表输入框形式
html
代码如下

  
            
          

ytclick打开弹窗方法

 
    
      
      
    

配置树结构

const sjcddefaultProps = {
  children: 'children',
  label: "mc",
};

用途树的点击事件如下

const e = ref({})
function handleNodeClick(item, ee) {
  ytId.value = item.id
  e.value = ee;
  //清空id 这样选择用途去查询西药时就不会出现显示原来的数据
  xyList.value[ytIndex.value].yt2Id = ""
  xyList.value[ytIndex.value].yt1Id = ""
}
//用途树弹窗内容确定按钮
function ytconfirm() {
  if (e.value.parent.data.mc) {//如果是有父级则yt1就拼接显示,并且赋值给 xyList.value[ytIndex.value].yt1
    xyList.value[ytIndex.value].yt1 = e.value.parent.data.mc + "/" + e.value.data.mc
  } else {//yt1直接是 e.value.data.mc
    xyList.value[ytIndex.value].yt1 = e.value.data.mc
  }
  ytdialogVisible.value = false
}

页面展示
vue3下拉树(单选) 输入框显示父级和子级 列表的用途联动西药名称_第1张图片
vue3下拉树(单选) 输入框显示父级和子级 列表的用途联动西药名称_第2张图片
接下来是列表的用药名称 也就是选择西药
html

 
            
          

ypmcClick 打开西药弹窗页面的事件

//列表的用药名称点击事件
function ypmcClick(index) {
  //查询西药时用到的ytid 可能是下面三种情况
  ytId.value = xyList.value[index].yt2Id || xyList.value[index].yt1Id || ytId.value
  clickIndex.value = index;
  ymDialogVisible.value = true;
  ymList.value = [];
  loadXyList()
}

获取西药列表接口

//获取西药列表
async function loadXyList() {
  const { data: res } = await proxy.$postRequest("接口地址", { ytId: ytId.value });
  if (res.status == 200) {
    res.data.forEach((item) => {
      ymList.value.push({ ym: item });
    });
    ymList2 = [...res.data,...ymList2]//ymList2为了不改变ymList的值所以重新定义一个新的变量
    const i = res.data.indexOf(xyList.value[clickIndex.value].yymc);//回显打勾样式
    clickYmIndex.value = i
  } else {
    proxy.$message.error(res.msg);
  }
}

西药列表弹窗页面(单选药名)

  
    
      
{{ item.ym }}