后端API接口文档
乐吾乐2D可视化组态编辑器demo:https://2d.le5le.com/
采用前后端分离架构,乐吾乐后端服务提供一整套完整的web组态编辑器的所有数据接口,包含2D/3D图纸接口服务、文件接口服务和用户接口服务等,安装包版本提供后端可执行程序文件,后端源码版提供Java源码。用户也可以自行按照接口文档去实现部分必要的接口,参考接口文档如下:
注意:下面是官方meta2d自己的服务接口。自己开发的接口与meta2d-vue组件依赖的格式不一定完全相同,请根据实际情况转换为所需要的数据格式。
默认:所有接口调用失败时,返回{ error: '错误原因'}。正确时,直接返回所需数据,不再需要error字段。故所有接口返回通过返回是否有error字段判断。
接口列表
登录(购买乐吾乐后端)
URL:
/api/account/login
Method:
POST
Body:
{
  "account": "XXX",
  "password": "XXX",
  "remember": "true",// 是否系统记住密码
}
        Copy
返回:
{
  "account": "xxx"
  "password": "xxx"
  "token": "xxx", //token用于后续的认证
  "username": "xxx"
  //...
}
        Copy
获取登录信息
URL:
/api/account/profile
Method:
GET
Headers:
Authorization - 自动读取cookie为token的值给Authorization,可用于登录/身份认证
返回
{
  "id":"le5le", 	
  "account":"", // 账号
  "username":"乐吾乐", // 用户名
  "email":"",
  "phone":"", // 手机号
  "vip":"", // vip到期时间
  "vipData":{
    "2d":"",
    "3d":"",
    "v":""
  }
  "teams":[
    {
        "id":"",
        "name":""
    }
  ],
  "createdAt":"", // 创建时间
  "updateAt":"" // 最后更新时间
}
        Copy
获取图纸/自定义组件列表
URL:
/api/data/${collection}/list
其中,${collection}为变量,变量值如下:
- 2d - 图纸
 - 2d.component- 自定义组件
 
Method:
POST
Query
current - 当前第几页,默认1
pageSize - 每页记录数,默认10
返回
{
  "list":[ //列表数据
    {
      "createAt":"", //创建时间
      "folder":"", // 文件夹名
      "id":"", // id
      "image":"", // 缩略图
      "name":"", // 图纸名
      "ownerId":"", // 拥有者id
      "ownerName":"", // 拥有者用户名
      "shared":false, // 是否共享
      "star":0, // 收藏数
      "updatedAt":"", // 最后更新时间
      ...
    }
    ...
  ],
  "total":10 // 数据总数
}
        Copy
新增图纸/自定义组件
URL:
api/data/${collection}/add
其中,${collection}为变量,变量值如下:
- 2d - 图纸
 - 2d.component - 自定义组件
 
Method:
POST
Body
{
    "component": false, // 是否为组件
    "data": { // 画布数据
        "x": 0, // 画布偏移量x
        "y": 0, //画布偏移量y
        "scale": 1, // 画布缩放值
        "pens": [ // 画布图元数据
           ...
        ],
        "origin": {
            "x": 0, // 画布原点x
            "y": 0  // 画布原点y
        },
        "center": {
            "x": 0, // 画布缩放中心点x
            "y": 0  // 画布缩放中心点y
        },
        "paths": {}, //存储无法解析的svgPath
        "template": "", 
        "componentDatas":[],// 组合图元数据
        "component": false, // 是否为component
        "ruleColor": "", // 尺子颜色
        "gridColor": "", // 网格颜色
        "gridSize": 20, // 网格大小
        "color": "", // 画笔颜色
        "activeColor": "", // 激活图元颜色
        "version": "" // 版本号
      	...
    },
    "name": "", // 图纸名
    "image": "", // 图纸缩略图
    "folder": "" // 文件夹
}
        Copy
返回
{
		"id":"",//图纸/自定义组件id
		"data":{}, // 组件/图纸数据
		"editorId":"", // 编辑者id
    "editorName":"", // 编辑者name
    "folder":"", // 所处文件夹
    "image":"", // 缩略图地址
    "ownerId":"", // 拥有者id
    "ownerName":"", // 拥有者name
    "share":false, // 是否分享
    "updateAt":"", // 最后更新时间
    "createdAt":"" // 创建时间
}
        Copy
修改图纸/自定义组件数据
URL:
/api/data/${collection}/update
其中,${collection}为变量,变量值如下:
- 2d - 图纸
 - 2d.component - 自定义组件
 
Method:
POST
Body
同"新增图纸"接口,此时有id
返回
同"新增图纸"接口
获取图纸/自定义组件数据
URL:
/api/data/${collection}/get
其中,${collection}为变量,变量值如下:
- 2d - 图纸
 - 2d.component - 自定义组件
 
Method:
POST
Body
{
  "id": "图纸/自定义组件id"
}
        Copy
返回
同"新增图纸"接口
删除图纸/自定义组件
URL:
/api/data/${collection}/delete
其中,${collection}为变量,变量值如下:
- 2d - 图纸
 - 2d.component - 自定义组件
 
Method:
POST
Body
{
  "id": "图纸/自定义组件id"
}
        Copy
返回
{
  "error": "错误" // 没有error字段,表示执行正确。有error表示执行错误,error为错误原因
}
或者
{
  "id":""// 图纸/自定义组件id 
}
        Copy
获取所有图纸/组件文件夹
URL:
/api/data/directory/list
Method:
POST
Body
{
   "fullpath":"/2D/图纸" // 获取文件夹路径
}
        Copy
返回
{
  total: 总数,
  list: [...]
}
        Copy
获取所有图纸/组件信息
URL:
/api/data/${collection}/list
其中,${collection}为变量,变量值如下:
- 2d - 图纸
 - 2d.component- 自定义组件
 
Method:
POST
param
{
   	"current":1,
    "pageSize":1000 
}
        Copy
返回
{
		"list":[
      {
        "image":"",//组件保存时生成的缩略图
        "name":"",//组件名
        "id":"" //组件数据id
        "owner":"", // 拥有者
        "editor":"", // 编辑者
        "updatedAt":"", // 最后更新时间
        "createdAt":"", // 创建时间
        ...
      }
   	],
  	"total":10, // 数据总数
}
        Copy
修改图纸/组件文件夹名称
URL:
/api/directory/update
Method:
POST
Body
{
  "newFullpath": "/2D/图片/newName"
	"oldFullpath": "/2D/图片/oldName"
}
        Copy
返回
{}
        Copy
添加图纸/组件文件夹
URL:
/api/directory/add
Method:
POST
Body
{
  "fullpah":"/2D/图纸/newFolder" // 文件夹路径
}
        Copy
返回
{
  "id":"", // 文件夹id
  "createdAt":"", // 创建时间
  "fullpath":"", // 文件夹路径
  "ownerId":"", // 拥有者id
  "updatedAt":"" // 最后更新时间
}
        Copy
删除图纸/组件文件夹
URL:
/api/directory/delete
Method:
POST
Body
{
  "fullpath":["/2D/图纸/path"], //删除的文件夹路径
	"physically": true, //是否物理删除
}
        Copy
返回
{
  "directories": ["/2D/图纸/path"], // 删除的文件夹路径
  "files": [] // 文件列表
}
        Copy
获取组件图片列表
URL:
/api/file/list
Method:
POST
Query
current - 当前第几页,默认1
pageSize - 每页记录数,默认10
Body
{
	"type": "图片", // 文件类型,默认为'图片'
   "directory": "/2D", // 指定的获取哪个文件夹下的图片,默认为'/2D',例如:'/2D/新建文件夹'
   "allChildren": false  // 是否获取该文件夹下(包括子文件夹)所有图片
}
        Copy
返回
{
   "total":1,//总数
   "list":[{
      "fullname":"", //图片完整名路径
      "size":18546, //图片数据长度
      "directory": "", //文件夹路径
     	"deleteAt":0
      "name": "", // 文件名
      "shared": true,
      "url": "", // 文件路径 
      "type": "",
      "ownerId": "",
      "ownerName": ""
     ...
   }]
}
        Copy
上传图片
URL:
/api/image/upload
Method:
POST
FormData
- filename:string 文件名
 - shared:string 是否共享
 - type:string 类型,'图片'
 - file:Blob 文件二进制
 - conflict: string directory+name如果存在,处理方式:默认(不传)覆盖;new - 自动重命名为一个新文件;其他 - 不做任何操作,返回报错
 - directory:string 文件存放文件夹,例如:'/2D/缩略图'
 
返回
{
    "fullname":"", //图片完整路径名
    "url":"", //图片url
    "id":"", // 图片id
    "directory":"", // 所处文件夹
    "name": "", // 图片名称
    "shared":true, // 是否共享
    "type":"图片",
    "size":2179, // 图片大小
    "ownerId":"", // 拥有者id
    "ownerName":"", // 拥有者name
    "updatedAt":"" // 最后更新时间
    "createdAt":"" // 创建时间
}
        Copy
删除图片
URL:
/api/files/delete
Method:
POST
Body:
{
  "fullnames":["/2024/0112/1/1/1"],// 文件完整路径
  "physically":fasle  // 是否物理删除
}
        Copy
返回
{
  "recycled":["/2024/0112/1/1/1"] // 被删除文件的路径
}
        Copy
获取素材或png、svg分组列表
URL:
/api/assets/folders
Method:
POST
Body:
{
	"path":"png" | "svg" // 获取png或者svg分组列表
}
        Copy
返回
{
  "list": [
    "2.5D-制冷站",
    "2.5D-废气治理",
    "2.5D-废水处理",
    "2.5D-智慧城市",
    "2.5D-电信机房",
    "2.5D-采暖系统",
    "官网使用图片",
  ],
}
        Copy
获取素材或png、svg文件列表
URL:
/api/assets/files
Method:
POST
Body:
{
	"path":"png" | "svg" // 获取png或者svg文件列表
}
        Copy
返回
{
  "list": [
   "svg/SVG国家电网/T型开关A -C.svg",
    "svg/SVG国家电网/T型开关A-B.svg",
    "svg/SVG国家电网/T型开关AB-C.svg",
    ...
  ],
}
        Copy
获取待绑定的变量列表树
URL:
/api/device/data/tree?mock=1
Method:
GET
返回:
[{"children":[
  {"children":[
    {"id":"d-1-a-001","name":"车辆"},
    {"id":"d-1-a-002","name":"访客"}
    ],
    "id":"device-001-a",
    "name":"园区大门"
  },
  {
    //...
  }],
  "id":"device-001",
  "name":"新智慧园区"
},{
    //...
  }]
        Copy
获取绑定变量数据
自定义,支持mqtt、websocket、http。在图纸的通信中输入实际地址即可

返回:
[
  {"dataId": "device-001", "value": 71},
  {"dataId": "device-001-a", "value": 21},
  {
    //...
  }
]
        Copy