EOS Low-Code Platform 8 EOS Low-Code Platform 8
  • 8.3.2 (opens new window)
  • 8.3.1 (opens new window)
  • 8.3LA1 (opens new window)
  • 8.2GA (opens new window)
产品简介
学习指南
更新说明
安装与集成
初见EOS
低代码开发手册
专业代码开发手册
专题场景实战
公共服务框架
应用运行治理
升级手册
常见问题
  • 树形下拉
  • 1 适用场景
  • 2 基础功能
  • 2.1 树面板
  • 2.1.1 指定树形json
  • 2.1.2 实体
  • 2.1.3 字典
  • 2.2 展现方式
  • 2.3 联动方式
  • 2.4 全链路选择
  • 2.5 搜索方式
  • 2.5.1 动态搜索
  • 2.5.2 静态搜索
  • 2.5.3 全量搜索
  • 3 高级
  • 3.1 控制可选中节点
  • 3.2 查询实体前设置过滤条件
  • 3.3 自定义渲染模板
  • 4 常见问题

# 树形下拉

# 1 适用场景

选项信息是一对多的关系,且具有层次性和联动性,多用于创建主类目和所属下级子类目的场景,多用于城市选择(比如省市区)等包含有层次关系的场景。

# 2 基础功能

拥有配置数据来源、展示模式等功能;前提是先在实体中配置关联的表,尤其是自关联! image-20240123135534887

# 2.1 树面板

可以通过树面板配置树形下拉所展示数据;有指定树形json、实体、业务字典三种;

# 2.1.1 指定树形json

可以通过通过静态json数据展示树形下拉;格式如下:

[{
"id":"10",
"label":"中国",
"value":"zg",
"children":[{
"id":"1",
"label":"上汽",
"value":"sq",
"type":"4S"},
{"id":"2",
"label":"吉利",
"value":"jl",
"type":"4S"
}]
}]

例如我们不建实体关系,想用静态json数据创建下拉树;效果如下:

image-20240110165145290

步骤1.点击表单设置-》高级设置 -》变量 -》添加一个变量v_treeJson

其中children 为子级数组;type 给结点设置一个标记类型;

[{
"id":"10",
"label":"中国",
"value":"zg",
"children":[{
"id":"1",
"label":"上汽",
"value":"sq",
"type":"4S"},
{"id":"2",
"label":"吉利",
"value":"jl",
"type":"4S"
}]
}]

步骤2.树面板选择指定树形json ;指定树形json绑定刚才定义的变量v_treeJson;指定子级键名字端;节点类型设置可选节点的type类型(例如type:"4S")

image-20240110165026554

# 2.1.2 实体

可以创建实体,绑定实体关系,如强关联实体1:n,自关联实体,或者弱关联实体展示树形下拉数据;注意:树的配置,一定要在节点配置中配置子节点的相关联字段image-20240110165026554

# 2.1.2.1 一对多关系树

场景:供应商和商品是1:n实体关系,我们配置一个选择供应商下的商品的下拉树;

效果展示:

image-20240110160001953

步骤1.建立一对多关联实体;商品和供应商通过supId和id进行关联;

image-20240110160235878

步骤2.数据来源绑定实体选择1:n的 n的一方实体(即是叶子结点绑定的值);树面板选择实体,选择节点为1:n的 1的一方实体(即根节点);

image-20240110161147565

步骤3.节点配置;配置显示字段,和父节点关联字段、和子节点关联字段、选择想要的图标;

根节点供应商supplier实体配置如下,选择和子节点关联字段为id;(需要和建实体关系的字段对应)

image-20240110161428300

子节点商品commodity实体配置如下,选择和父节点关联字段为supId;如果商品下还有子节点可以配置和子节点关联字段为id;(需要和建实体关系的字段对应)

image-20240110161911402

# 2.1.2.2 实体自关联关系树

例如我们配置一个实体根据自己的父id自关联的选择下拉树;

image-20240110163852194 步骤1.建立自关联实体

通过id和pid进行关联

image-20240110164050301

步骤2.数据来源绑定实体选择自关联实体;树面板选择实体,选择节点为自关联实体;

image-20240110164213848

步骤4.节点配置;配置显示字段、和子节点关联字段id(需要和建实体关系的字段对应),选择想要的图标

image-20240110164334633

步骤5.配置根节点过滤条件;由于是实体自关联,所以要确实哪些数据是根数据;自关联实体数据如下,我们可以设置pid为0的为根节点;

image-20240110164701103

image-20240110164809687

# 2.1.3 字典

# 2.1.3.1 字典省市区下拉树

对于一些有层级关系的字典类型数据,例如字典省;此字典有子类型市,市有子类型区;选择省字典,下拉树可以按其子类型层级展示;

image-20240109155653239

效果如下:

image-20240110165913318

配置如下:树面板选择业务字典,选择根节点为省;

image-20240110170302813

# 2.2 展现方式

展示方式有树形 / 层进;

注意:只有pc端支持该功能,移动端只支持树形展示

image-20240110170758952

树形和层进展示效果如下:

image-20240110170631523

# 2.3 联动方式

联动方式有联动 / 不联动;

展示效果如下:

image-20240110170631523

# 2.4 全链路选择

全链路会将,树形下拉所有选择的节点的该条链路都展示出来,由于树形下拉是多层级的,但是数据库只能保存一个字段,需要一个持久化字段保存,全链路的显示字段

注意:只有pc端支持该功能

设置如下 image-20240110170631523

展示效果如下: image-20240110170631523

# 2.5 搜索方式

搜索方式是实体独有的配置,json和字典只有全量搜索,不需要修改任何配置

# 2.5.1 动态搜索

通过接口搜索配置的叶子节点,以列表的形式展开

# 2.5.2 静态搜索

静态搜索树,由于实体是懒加载的,第一次只会加载根节点,点击相应节点只会加载对应的节点,搜索只会搜索已经加载的的节点

# 2.5.3 全量搜索

完整的搜索树,以树形搜索展示树,如果是实体,需要点击高级的扩展属性中配置添加一个属性isEntityAllSearch设置为常量true,需要注意的是,如果是全量搜索,过滤条件就需要把这个树的数据都搜索出来,不再是只搜索根节点数据

设置如下 image-20240110170631523

展示效果如下: image-20240110170631523

# 3 高级

# 3.1 控制可选中节点

如果我们想控制哪些节点可选择;例如:我们要控制只能选择节点名称为上汽的节点,选择其他的节点给出错误提示

效果展示:

image-20240110170913361

步骤1.可以在右侧配置项高级中添加事件选择allowSelect;

image-20240110171044768

步骤2.编写控制代码

console.log(node, callback, 'node')
if (node.label !== '上汽') {
  this.$message({
   message: '请选择名称为上汽的数据',
   type: 'warning'
  });
  // 返回false;节点不可选择
  callback(false)
}
else {
  //返回true ;节点可选择
  callback(true)
}

# 3.2 查询实体前设置过滤条件

场景:当使用动态搜索,懒加载时,每次点击一个没有加载子节点的的节点,都会请求接口,返回对应的子节点数据,可以通过f12查看返回的数据和搜索条件

可以设置实体查询前过滤条件、排序等;此事件只对实体有效;例如如下格式代码:

console.log('data:', data) //对应的点击的值,可以看打印出data里面的值
console.log("prepare select")
const { node } = data || {};
const { data: nodeData } = node || {}
if(nodeData) {
  console.log('nodeData:', nodeData)
  if(nodeData.type === "OrderSupplier") {
    const condtiion =  {
      "and": {
          "items": [
              {
                  "propertyName": "supplierId",
                  "op": "=",
                  "propertyValue": nodeData.id
              }
          ]
      }
    }
    callback(condition)
  }
} else {
 const condtiion = {
   "and": {
     "items": [{
       "propertyName": "id", // 需要过滤的属性,自己根据需要自定义
       "op": "=", //设置过滤条件 = |<>|contains |not contains 分别为等于|不等于|包含|不包含
       "propertyValue": "" // 过滤属性对应的值
     }]
    },
   "orderPropertyNames": "id:desc" // 分为两种升序|降序 “sortField:asc|desc”
  }
  callback(condtiion)
}

# 3.3 自定义渲染模板

可以根据自定义模版进行数据的渲染,需要注意的是,搜索功能只能按照label字段进行搜索,不能按照自定义的模版内容进行搜索。

自定义模版内容如下:

<div slot-scope="{data,labelField,settings,isJSON}"> 
    <span class="custom-text" v-if="isJSON">
      <pm-icon :value="settings.JsonPanel.fieldIcon ? data[settings.JsonPanel.fieldIcon] : settings.JsonPanel.iconClass" />
      {{ data[labelField] }}
    </span>
    <span v-else class="custom-tree-node"  :id="data[labelField]"  :title="data[labelField]">
      <span class="custom-text">
        <pm-icon :value="data.fieldIcon ? data.fieldIcon : data.iconClass" />
        {{ data[labelField] || data.label }}
      </span>
    </span>
</div>

# 4 常见问题

一、当选择实体,搜索能否也能够树形搜索?

可以,在页面高级中配置如下,添加一个属性isEntityAllSearch设置为常量true image-20240110170631523

注意:如果数据量比较大,不建议这样做,可能会影响性能

二、树形下拉组件父节点如何可以点击?

1、在高级中添加 allowSelect 代码块输入 callback(true);

2、如果是json 父子节点类型type要一致

3、如果需要更详细一点,相同层级哪些节点可以点击,哪些不可以,可以如下配置

if(node.label === 1) { // 根据节点类型判断哪些可以点击,哪些不可以
    callback(false)
} else {
    callback(true)
}

← 下拉选择 单选框组 →