easyeda / easyeda/pro-api-sdk

sch_PrimitiveText.delete 返回成功但未进入文档持久化事务,保存重开后文字恢复

Open
#36 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
TypeScript
Stars
64
Forks
26
PR merge metrics
No merged PRs in 30d

Description

## 环境

- 嘉立创 EDA 专业版:V3.2.148(Web)
- `@jlceda/pro-api-types` / API:`eda.sch_PrimitiveText`
- 调用环境:编辑器扩展
- 测试日期:2026-07-24

## 问题描述

调用 `eda.sch_PrimitiveText.delete()` 删除原理图文字时,Promise 正常返回成功,`getAll()` 立即读回也确认文字已经从当前内存态消失;随后调用原理图保存,保存同样返回成功。

但是关闭并重新打开该原理图页后,被删除的文字会全部恢复。删除似乎没有进入 EasyEDA 的文档持久化/undo-autosave 事务。

相同文字如果先通过 `eda.sch_SelectControl.doSelectPrimitives(ids)` 选中,再在编辑器界面执行原生 Delete 和 Ctrl+S,则关闭重开后不会恢复。

## 最小复现

```ts
const before = await eda.sch_PrimitiveText.getAll();
const id = before[0].primitiveId;

const deleted = await eda.sch_PrimitiveText.delete(id);
const afterDelete = await eda.sch_PrimitiveText.getAll();

// deleted === true
// afterDelete 中已不存在 id

// 使用公开保存接口或编辑器 Ctrl+S 保存
// 关闭当前原理图页并重新打开

const afterReopen = await eda.sch_PrimitiveText.getAll();
// id 再次出现
```

批量删除也可稳定复现:

```ts
await eda.sch_PrimitiveText.delete(ids);
```

## 实测数据

在同一工程 4 个 A4 原理图页上重复验证:

| 页面 | API 删除后的内存数量 | 保存并重开后的数量 | 改用原生 Delete 后重开 |
|---|---:|---:|---:|
| 01-POWER | 5 | 36 | 5 |
| 02-MCU | 2 | 26 | 2 |
| 03-USB-DL | 2 | 24 | 2 |
| 04-IO-HMI | 5 | 15 | 5 |

另外尝试在 API 删除后,通过 API `modify()` 移动保留文字并保存,重开后被删除文字仍恢复。通过界面方向键移动保留文字并保存,只能持久化该移动事务,也不会连带提交之前的 API 删除。

最终可行 workaround:

1. `eda.sch_SelectControl.doSelectPrimitives(ids)`;
2. 编辑器原生 Delete;
3. Ctrl+S;
4. 关闭并重开,删除稳定保留。

## 期望行为

`eda.sch_PrimitiveText.delete()` 成功返回时,应与编辑器原生 Delete 一样:

- 进入文档 dirty/undo/autosave 事务;
- 保存后持久化;
- 关闭重开后文字不会恢复。

如果该 API 仅修改临时内存态,也希望文档明确说明,并提供可提交事务的公开 API。

## 影响

自动化扩展会收到成功返回和正确的即时读回,因此容易误判删除已落盘。只有关闭重开后才能发现脏文字恢复,可能造成原理图重复标题、注释叠加以及批处理结果不幂等。

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.