fix: 断联设备表「换地址」按钮传参丢失(缺 data-serial)+ 删除任务/分组兼容内存不一致

- tools.js:断联设备表的「换地址」按钮漏了 data-serial 属性,onclick 里
  this.dataset.serial 是 undefined → 接口报「缺少 old_serial 或 new_serial」。
  设备池表里的同名按钮是传字面量的,所以只有断联表这条路径坏。
  顺带给 relocatePoolDev 加参数防呆(取不到地址时给明确提示,不静默)
- task_manager.delete_job / delete_group:原先只在"内存里有"时才删库行,
  内存与库不一致时(手工插行、上次异常退出、旧版本漏删)会出现"删不掉的
  任务/分组"(API 404 但库行还在、重启复活)。改为无论内存有没有都尝试删库行

自测:浏览器验证断联表两个按钮都带 data-serial;relocate 接口端到端(上一轮已验);
删除接口在前端删除分组/任务后 DB 与内存一致
This commit is contained in:
2026-09-11 11:23:19 +08:00
parent 79cdf61ed2
commit 64fadde568
2 changed files with 26 additions and 20 deletions
+22 -17
View File
@@ -484,17 +484,20 @@ class TaskManager:
return n
def delete_group(self, name):
removed = False
if name in self.groups:
del self.groups[name]
self._save_groups()
# 同上:显式删数据库行,避免删除的分组重启后复活
with self._db():
row = GroupRow.query.filter_by(name=name).first()
if row:
db.session.delete(row)
db.session.commit()
return True
return False
removed = True
# 无论内存里有没有都尝试删库行:内存与库不一致时(手工插行、上次异常退出、
# 上个版本漏删)也能删干净,避免"删不掉的分组"
with self._db():
row = GroupRow.query.filter_by(name=name).first()
if row:
db.session.delete(row)
db.session.commit()
removed = True
return removed
# ---- 任务计划管理 ----
def add_job(self, name, task_type, target, params, schedule, retry, enabled=True):
@@ -524,18 +527,20 @@ class TaskManager:
def delete_job(self, job_id):
self._remove_cron(job_id)
removed = False
if job_id in self.jobs:
del self.jobs[job_id]
self._save_jobs()
# _save_jobs 只做 upsert 不会删行:必须显式删数据库行,
# 否则删除的任务重启后会从数据库重新加载回来
with self._db():
row = JobRow.query.get(job_id)
if row:
db.session.delete(row)
db.session.commit()
return True
return False
removed = True
# _save_jobs 只做 upsert 不会删行:必须显式删库行,否则删除的任务重启会复活。
# 内存里没有(手工插行/上次异常退出)时也要删——否则会出现"删不掉的任务"
with self._db():
row = JobRow.query.get(job_id)
if row:
db.session.delete(row)
db.session.commit()
removed = True
return removed
def toggle_job(self, job_id, enabled):
job = self.jobs.get(job_id)