• 首页
  • 使用指南
    上传指南安装指南
  • API文档
    开发指南API调用API参考
  • 相关网站
    嘉立创EDA嘉立创社区开源广场
  • 编辑器
    在线编辑器(专业版)桌面客户端
  • 扩展管理
  • 登录注册
嘉立创产业服务站群

电子产业

logo

嘉立创PCB

PCB、FPC制造服务

logo

嘉立创SMT

一站式PCBA服务平台

logo

嘉立创激光钢网治具

激光钢网&治具制造

logo

嘉立创EDA

国产PCB设计工具

机械产业

logo

嘉立创FA

机械/电气零部件一站式商城

logo

嘉立创3D打印

树脂、尼龙、金属3D打印服务

logo

嘉立创CNC机械智造

机加件一件起订,3天交货

更多服务

嘉立创CAM

国产线路板CAM软件

Forface 3D

SaaS化3D技术服务平台

硬创社

好玩的硬件交流社区

供应商合作

一站式阳光采购平台

· EDA扩展广场
首页

使用指南

上传指南安装指南

API文档

开发指南API调用API参考

相关网站

嘉立创EDA嘉立创社区开源广场

编辑器

在线编辑器(专业版)桌面客户端
登录注册

IntePLM 集成插件

pengcheng1291v1.3.2
(0)Apache-2.0
该扩展为 IntePLM 集成的扩展,用于实现 PLM 登录、检出、检入功能。
详情
更改日志
历史版本
评论

IntePLM 集成插件

pengcheng1291
(0)Apache-2.0
详情
更改日志
历史版本
评论

inteplm-integration 技术文档

1. 项目概述

inteplm-integration 是一个专为 嘉立创EDA / EasyEDA 专业版 V3 开发的扩展(当前版本 1.3.2)。同一 .eext 可用于 网页版 与 V3 客户端(在线 / 半离线 / 全离线)。主要功能是实现 EDA 与 IntePLM 的集成:登录、检出、撤销检出、检入、查询与打开。不支持专业版 V2(.epro)。

登录界面

2. 项目架构分析

本项目采用了典型的 "客户端扩展架构(Client-Extension Architecture)",整体分为两层:

  • 宿主环境层(Extension Logic):运行在 EDA 客户端的扩展进程中,负责与 EDA 客户端的底层 API(如系统消息、存储、菜单栏注册、IFrame 创建)进行交互。
  • UI 展现层(IFrame Views):基于 HTML/CSS/JS 构筑的独立页面,通过 EDA 提供的 IFrame 容器进行渲染。页面负责收集用户输入,并与宿主环境或外部 PLM 系统进行数据通信。

核心工作流

  1. 用户在 EDA 顶部菜单栏点击 IntePLM 相关菜单。
  2. 触发 src/index.ts 中注册的命令函数(如 menuCheckIn)。
  3. 扩展程序调用 eda.sys_IFrame.openIFrame 打开对应的本地 HTML 页面(位于 iframe/ 目录)。
  4. IFrame / 宿主通过 eda.sys_ClientUrl 访问 IntePLM(见 iframe/eda-runtime.js),打开工程由宿主 src/index.ts 下载 .epro2 并调用 importProjectByProjectFile。

3. 核心技术栈

  • 编程语言:TypeScript(宿主扩展逻辑)、JavaScript/HTML/CSS(前端 UI 页面)
  • UI 框架:原生 DOM 配合 CSS(未使用重量级框架如 Vue/React,以保证扩展轻量化)
  • 构建工具:esbuild(负责极速编译 TS),ts-node(执行打包脚本)
  • 类型定义:@jlceda/pro-api-types(嘉立创 EDA 专业版扩展 API 类型声明)
  • 代码规范:eslint + eslint-config-alloy,prettier,husky + lint-staged
  • 其他依赖:jszip(用于处理本地设计文件的压缩与解压)

4. 模块依赖关系 (目录结构)

inteplm-integration/
├── src/
│   ├── index.ts                 # 扩展入口、菜单命令、打开/导入
│   └── operate/                 # 检出 / 撤销检出 / HTTP 工具
├── iframe/
│   ├── eda-runtime.js           # 环境探测 + sys_ClientUrl PLM 请求
│   ├── login.html/js            # 登录
│   ├── checkin.html/js          # 检入
│   ├── logout.js                # 登录态与注销
│   └── queryAndOpen.html/js     # 查询与打开
├── config/
├── build/
├── locales/
├── extension.json
├── plmConfig.json
└── package.json

核心模块说明

  • src/index.ts:activate、菜单回调、工程下载与导入(网页/客户端团队降级;半离线按云端同名覆盖)。
  • iframe/eda-runtime.js:isWeb / isClient / 离线模式探测,统一 PLM HTTP。
  • iframe/login.html:多账号记忆、服务器地址、密码存储(Web Crypto 不可用时降级)。
  • iframe/checkin.html:检入;工程文件显式导出 .epro2。
  • iframe/queryAndOpen.html:查询列表,经 MessageBus 通知宿主打开。
  • src/operate/:检出、撤销检出及 requestPlmApi。

5. 功能模块详解

5.1 登录模块

登录界面

功能说明:

  • 支持用户名/密码登录验证
  • 多账号历史记录记忆(最多10条)
  • 服务器地址配置与缓存
  • 密码加密存储(AES-CBC)
  • 登录状态持久化

交互流程:

  1. 用户输入用户名、密码、PLM服务器地址
  2. 调用 /rest/userService/v1/user/userLogin 接口验证
  3. 登录成功后缓存 authorization Token、USER_OID 等用户信息
  4. 支持自动填充最近登录账号

5.2 查询与打开模块

查询界面

功能说明:

  • 支持关键词搜索(名称、标识)
  • 分页展示 PLM 工程列表
  • 支持列宽拖拽调整
  • 显示工程状态(c/i-检入、c/o-检出、wrk-工作中)
  • 支持直接打开或检出并打开

交互流程:

  1. 调用 queryProjectByParam 接口获取工程列表
  2. 支持分页加载(10/20/50/100条每页)
  3. 选中工程后可执行"打开"或"检出并打开"。检出并打开会先完成检出并提示「检出成功」,再询问是否覆盖打开;取消覆盖时提示「检出已完成,已取消打开」,查询窗保持打开
  4. 打开时自动下载文件并导入 EDA。若当前工作区没有同名工程,会继续查其他团队和其他工作区(半离线下的云端工程);命中则覆盖云端同名工程,并单独提示这是云端同步工程而不是本地工程,避免新建时报「工程名称已存在」。云端同名工程当时不在当前窗口时无法先清文档树,由宿主按已有工程导入。有同名时先弹覆盖确认(查询窗仍开着),确认后再关查询窗并下载;取消覆盖可继续选其它图纸。

5.3 检入模块

检入界面

功能说明:

  • 批量录入配置
  • 支持关联关系选择(主控关联等)
  • 文档类型配置(CAD文档等)
  • 零部件类型与位置选择
  • 零部件分类树选择
  • 检入提交会带上 partClassificationOid(与分类树按字符串匹配;拉树失败保留回填,树上找不到则清空)

交互流程:

  1. 获取当前工程信息
  2. 查询默认工作区(支持缓存)
  3. 加载关联关系、文档类型、零部件类型等元数据
  4. 用户配置检入参数后提交
  5. 调用 importProject 接口完成检入

5.4 检出模块

功能说明:

  • 从 PLM 系统检出工程
  • 自动下载工程文件
  • 支持覆盖本地已有工程;半离线下也会覆盖云端同名工程
  • 覆盖前会等待目标工程文档树加载完成再清理;从另一张已打开图纸覆盖时,避免残留 PCB 被导入成根目录 原名_1

交互流程:

  1. 查询用户默认工作区
  2. 调用 batchCheckoutCadDocs 接口执行检出
  3. 检出成功后自动下载文件
  4. 导入到 EDA 当前工作区

5.5 撤销检出模块

功能说明:

  • 撤销已检出的工程
  • 释放 PLM 系统锁定状态

交互流程:

  1. 获取当前工程信息
  2. 调用撤销检出接口
  3. 更新本地工程状态

6. 关键配置文件说明

extension.json

EDA 扩展的清单文件(Manifest),决定了扩展在 EDA 软件中的表现形态:

{
	"name": "inteplm-integration",
	"version": "1.3.2",
	"engines": {
		"eda": "^3.2.0"
	},
	"entry": "./dist/index",
	"headerMenus": [
		{
			"id": "inteplm",
			"name": "IntePLM",
			"target": "home,sch",
			"submenu": [
				{ "name": "登录", "registerFn": "menuLogin" },
				{ "name": "检入", "registerFn": "menuCheckIn" },
				{ "name": "检出", "registerFn": "menuCheckOut" },
				{ "name": "撤销检出", "registerFn": "menuCancelCheckOut" },
				{ "name": "查询并打开", "registerFn": "menuQueryAndOpen" },
				{ "name": "登出", "registerFn": "menuLogout" }
			]
		}
	]
}

plmConfig.json

存储了 IntePLM 系统的接口路由映射关系:

{
	"url": {
		"login": "/rest/userService/v1/user/userLogin",
		"logout": "/rest/userService/v1/user/userLogout",
		"queryProjectByParam": "/rest/ecadService/v1/ecad/queryProjectByParam",
		"batchCheckoutCadDocs": "/rest/ecadService/v1/ecad/batchCheckoutCadDocs",
		"importProject": "/rest/ecadService/v1/ecad/importProject",
		"queryDefaultWorkspaceOrCreate": "/rest/ecadService/v1/ecad/queryDefaultWorkspaceOrCreate",
		"downFileByFileId": "/rest/ecadService/v1/ecad/downFileByFileId"
	}
}

package.json

定义了项目名称和构建脚本:

  • compile: 使用 esbuild 将 TS 代码编译到 dist/
  • build: 运行编译后,调用 packaged.ts 将所有资源打包为 .eext 格式的插件包

7. API 接口文档

7.1 用户认证接口

接口名称HTTP 方法接口路径作用描述
用户登录POST/rest/userService/v1/user/userLogin验证凭据并获取 Token
用户注销GET/rest/userService/v1/user/userLogout清除服务端 Token

7.2 ECAD 工程接口

接口名称HTTP 方法接口路径作用描述
查询工程列表POST/rest/ecadService/v1/ecad/queryProjectByParam获取 PLM 系统中的工程列表
检出工程POST/rest/ecadService/v1/ecad/batchCheckoutCadDocs将 PLM 工程锁定并下载到本地
检入工程POST/rest/ecadService/v1/ecad/importProject将本地工程上传至 PLM
查询默认工作区GET/rest/ecadService/v1/ecad/queryDefaultWorkspaceOrCreate获取用户默认工作区
下载文件GET/rest/ecadService/v1/ecad/downFileByFileId根据文件 ID 下载工程文件
查询 ECAD 信息POST/rest/ecadService/v1/ecad/queryECadByMainFileName根据主文件名查询 ECAD 文档

7.3 宿主与 IFrame 协作

方式说明
eda.sys_MessageBus 主题 iframe-query-result查询页请求打开工程
eda.sys_MessageBus.rpcServicePublic('openIframeCheckinSetting')检出等场景下载并打开 .epro2
eda.sys_ClientUrl.request访问 IntePLM(需外部交互权限)

8. 部署与打包流程

8.1 环境准备

确保本地安装 Node.js (>=20.5.0) 及包管理器(npm/pnpm)。

8.2 安装依赖

npm install

8.3 执行打包

npm run build

打包流程:

  1. 自动清理 dist 目录
  2. 使用 esbuild 将 TS 编译为 JS
  3. 运行 build/packaged.ts 将 dist/、iframe/、images/、locales/ 及相关配置文件打包

8.4 输出产物

在 build/dist/ 目录下生成 inteplm-integration_v1.3.2.eext 扩展安装包。

8.5 安装(网页版与 V3 客户端)

网页版与嘉立创 EDA 专业版 V3 客户端(在线 / 半离线 / 全离线)安装同一 .eext。在「扩展管理」中选择本地安装即可。

客户端请开启本扩展权限:

  • 外部交互(访问 IntePLM)
  • 工程管理 > 下载工程(检入导出 .epro2)
  • 工程设计图 > 文件导出(PCB/原理图 PDF、BOM)

IntePLM 服务端 CORS 不要只放行 pro.lceda.cn,客户端请求 Origin 与网页不同。半/全离线客户端仍需能访问 IntePLM 地址。工程主文件统一为 .epro2,不兼容 V2 .epro。

9. 数据持久化说明

本项目作为纯客户端扩展,不存在独立的后端关系型数据库。数据持久化主要依赖 EDA 客户端提供的系统存储 API(eda.sys_Storage):

存储键数据类型说明
USERNAMEstring登录用户名
authorizationstring认证 Token
PLMServerUrlstringPLM 服务器地址
USER_OIDstring用户唯一标识
DEFAULT_WORKSPACE_IDstring默认工作区 ID(运行时查询缓存)
plmConfigobjectPLM 接口配置

文档版本: 1.3.2 最后更新: 2026-09-07

1.3.2

变更

  1. 心跳连续 3 次 5xx 或网络失败时清本地登录态并 toast,不弹登录窗,避免 PLM 未启动时每秒重试
  2. 查询页检出成功后刷新当前网格;按新迭代 oid / master / 文件匹配选中,避免取消覆盖后再点「检出并打开」因状态未更新而失败
  3. 探测接口失败时:5xx/超时/连不上不登录,404 及无法识别的宿主错误(如「请求无法被正确处理」)按 V12 登录

1.3.1

新增

  1. 支持嘉立创 EDA 专业版 V3 客户端(在线 / 半离线 / 全离线),与网页版共用同一 .eext
  2. 新增 iframe/eda-runtime.js:运行环境探测,以及统一的 sys_ClientUrl PLM HTTP 封装(含权限错误提示)

变更

  1. 登录、检入、查询、注销、文件下载改为走 eda.sys_ClientUrl,不再依赖 IFrame 内裸 fetch
  2. 打开/导入不再强依赖「当前团队」:依次回退到个人团队,离线无团队时 createProject 后再导入。半离线会扫描其他工作区/团队的同名云端工程并走覆盖导入,避免「工程名称已存在」。仅云端有同名时会单独提示「覆盖云端同步工程」,与本地覆盖提示区分
  3. 检入工程包显式导出 .epro2,打开导入固定 JLCEDA Pro;不兼容 V2 .epro
  4. 登录态检查改为异步读取扩展存储,避免客户端把 Promise 误判为已登录
  5. 登录页背景改为 HTML 直接引用图片,避免客户端 IFrame 无法加载 CSS url()
  6. 查询页移除不存在的 /iframe/operate-utils.js 引用
  7. 覆盖本地工程时同步清理 Panel(客户端有面板数据,网页版原先没有)
  8. 打开工程加锁防止连点重复导入;扫描同名时跳过失败的 UUID;新建若报「工程名称已存在」则改为覆盖或明确失败,不再二次新建
  9. 覆盖导入前先删 Board 再清 PCB,并去掉导入产生的 原名_1 同名冲突副本
  10. 覆盖前等待当前工程文档树加载完成再清理;先打开其他图纸再覆盖时,避免旧 PCB 尚未列出就被导入成根目录 原名_1
  11. 查询打开:有同名时先弹覆盖确认,确认后再关查询窗并下载;取消覆盖则查询窗保持打开。注销请求头统一为 authorization;本地覆盖等待文档树的轮次加长
  12. 查询「检出并打开」在检出接口成功后立即提示「检出成功」;随后若取消覆盖则提示「检出已完成,已取消打开」
  13. 菜单「检出 / 撤销检出」在用户确认后使用官方 sys_LoadingAndProgressBar 遮罩,接口与覆盖打开完成前阻断继续操作
  14. 检出 / 撤销检出:拿不到当前工程时提示「未获取到当前工程,请先打开工程后再试」;PLM 查无此工程时提示「当前工程在 IntePLM 中不存在」
  15. PLM HTTP 遇 4xx/5xx 或 HTML 错误页时提示「IntePLM 服务异常(状态码)」等,不再把 Unexpected token '<' 展示给用户
  16. PLM 接口返回 401 时清除本地登录态并打开登录页;登录/注销接口的 401 不按会话失效处理
  17. 登录不再换取 72 小时长效 token,改用登录响应头 token,并由宿主每 10 分钟 POST /rest/v1/system/config/heartbeat 刷新
  18. 登录 appID 改为短英文,例如 JLCEDA-Pro-Client(3.2.174)、JLCEDA-Pro-Web(3.2.174)
  19. 查询打开在登录失效后重新登录成功时自动刷新列表,避免空窗残留
  20. 查询打开因登录失效弹出登录窗后若取消登录,关闭空的查询窗口
  21. 查询打开网格横向滚动时表头与行内容同步对齐
  22. 查询打开标识列缩窄时保留状态图标,仅文字省略
  23. 查询打开各列缩窄时文字统一省略显示
  24. 查询打开用 grid 列模板按权重铺满整行,标识列约 3 份;拖过的列宽缓存改为 v2
  25. 查询打开数据列最小宽固定 60px,拖宽其它列时前面列不再被挤没
  26. 拖列时先锁定各列当前像素宽,只改当前列,超出后横向滚动,其它列宽度不变
  27. 扩展 engines.eda 改为 ^3.2.0,与专业版 V3.2 产品版本对齐
  28. 心跳改由宿主启动并立即请求一次;登录成功走公共消息总线,避免登录窗关闭后定时器丢失
  29. 登录成功后通过公共 RPC 通知宿主启动心跳,关闭登录窗也会再检查一次;心跳路径有默认值,token 未就绪会短重试
  30. 登录成功后不再等待心跳 RPC,立刻关窗;心跳在后台启动
  31. 心跳改由宿主每秒检测登录态:登录后约 1 秒内 POST 心跳,之后每 10 分钟一次,不再依赖登录窗 RPC
  32. 宿主模块加载时即挂心跳检测,Timer 未就绪会重试,客户端重启后不必再点一次登录
  33. 登录失效自动弹出登录窗时先关闭查询打开窗,避免两个窗口叠在一起
  34. 未打开工程时点检入不再打开检入窗,提示与检出一致:请先打开工程后再试
  35. 检入错误提示改为短句:不再套「初始化/请求失败」前缀;401 同时关闭检入窗;下拉加载失败会提示;提交前再次确认当前工程
  36. 打开检入窗时用遮罩提示「正在加载检入信息」,默认信息和选项加载完成后再允许操作
  37. 登录成功不再刷新查询列表,避免客户端缓存的查询 iframe 被同步广播连打 queryProjectByParam
  38. 注销前先停心跳检测;注销过程中 401 不再弹出登录窗
  39. 注销结束后不再立刻心跳;残留的过期 token 不会当成刚登录去刷新,避免再弹登录窗
  40. 已登录后再点「登录」只提示用户名,不再立刻请求 heartbeat
  41. 心跳只在「从未登录变为已登录」或满 10 分钟时请求;点菜单/重新加载扩展时已有 token 不会立刻心跳
  42. 注销残留 token 只抑制心跳 401 弹窗,其它业务 401 仍打开登录;注销接口非 2xx 不再打印注销成功;仅实际发出心跳后才记录心跳时间
  43. 每次点登录先空 POST 探测 probeApiEndpoint:仅响应 200 走 V21(url21),超时/5xx 提示后不登录,其余按 V12(url)登录;后续接口按存储的 PLMVersion 选 path
  44. 登录页语言按钮已从 HTML 去掉时不再绑 langBtn 事件,避免打开登录窗控制台报 addEventListener 空引用
  45. 确认覆盖本地/云端工程后先等待约 300ms,再关查询窗并清理文档树,减轻宿主对话框卸载时的 removeChild 报错
  46. 查询页打开 / 覆盖打开在确认后使用与检出相同的官方无进度遮罩,取消覆盖不弹出遮罩
  47. 点「打开」后立刻出遮罩(含在线扫描同名工程);弹覆盖确认前关掉,确认后再盖上
  48. 覆盖打开等待工程就绪时用同步占位,避免 1 秒定时器在导入未完成时再进一次导致重复导入
  49. 打开锁、requestId 去重与覆盖导入占位改到 globalThis,避免客户端多次加载扩展入口后同一点击被多份宿主同时导入
  50. 检入导出图纸后切回检入前选中的标签页
  51. 约定每次功能修改后插件补丁号加 1(extension.json / 变更日志)

说明

  1. 仅支持专业版 V3;未进菜单的 setting.html / upload.html / download.html 本轮未改
  2. 客户端需开启:外部交互、工程管理 > 下载工程、工程设计图 > 文件导出

1.2.1

变更

  1. 【重构】修复 IFrame 内打开工程提示“未启用扩展和独立脚本的外部交互权限”的问题:
    • 引入 iframe/api-proxy.js 进行 API 请求代理。
    • src/index.ts 增加基于 postMessage 的安全交互方法。
    • queryAndOpen.js、checkout.js、uncheckout.js 现统一通过 callExtensionApi 调用受限接口(支持超时 10s 与 2 次重试)。
    • 增加 API 超时或调用失败时返回的标准化错误码 EXT_API_FORBIDDEN。
    • 提供 100% 覆盖率的 API 代理单元测试。

1.2.0

变更

  1. 使用纯 ESLint 的代码格式化方式
  2. 打包时额外进行压缩,可以获得更小的扩展包

1.1.1

变更

  1. 为了符合隐私政策,禁止在 extension.json、README.md、CHANGELOG.md、LICENSE 内添加电子邮箱地址作为联系方式

1.1.0

新增

  1. 新增扩展注册头部菜单的多语言翻译支持
  2. 新增更新日志(CHANGELOG.md)

变更

  1. 替换已弃用的方法(SYS_Dialog.showInformationMessage)

1.0.0

初始版本

暂无数据
暂无数据

评论

在登录或注册后才可以进行评论操作
全部评论(1)
按时间排序|按热度排序

类型

Other

关键词

PLM

扩展信息

版本v1.3.2
发布者

TIANYU SOFT

发布时间2026-09-17 09:40:13
名称

inteplm-integration

UUID

e089d388285a4d6a9afaeb982a1d3d6d

适用EDA版本:^3.2.0
报告

报告滥用

相关链接

主页:https://www.hustcad.com/
反馈:https://www.hustcad.com/%e5%85%b3%e4%ba%8e%e5%a4%a9%e5%96%bb/%e8%81%94%e7%b3%bb%e6%88%91%e4%bb%ac
logo

政策条款

服务条款隐私政策项目授权许可协议作出贡献感谢名单

软件版本

专业版标准版教育版私有化部署版

解决方案

专业版编辑器标准版编辑器桌面客户端API接口文档格式

使用帮助

用户论坛专业版教程标准版教程专业版更新标准版更新

关于我们

团队介绍相关报道关于公司联系我们合作联系
EDA公众号
EDA公众号
开源公众号
开源公众号
开源硬件交流群
开源硬件交流群
版权所有 - 深圳创电优选科技有限公司 粤ICP备2026007863号粤公网安备44030402002736号增值电信业务经营许可证粤B2-20201198ISO/IEC隐私政策用户协议