diff --git a/platform/backend/app/api/topics.py b/platform/backend/app/api/topics.py index 50c4067..dad7e35 100644 --- a/platform/backend/app/api/topics.py +++ b/platform/backend/app/api/topics.py @@ -189,13 +189,19 @@ def delete_topic( if not topic: raise HTTPException(status_code=404, detail="Topic not found") _check_org(topic, current_user, db) + from ..models import ContentTask, Article, PublishRecord, ContentMetrics, ContentCalendar try: + db.query(ContentCalendar).filter(ContentCalendar.topic_id == topic_id).delete() + db.query(ContentTask).filter(ContentTask.topic_id == topic_id).delete() + db.query(Article).filter(Article.topic_id == topic_id).delete() + db.query(PublishRecord).filter(PublishRecord.topic_id == topic_id).delete() + db.query(ContentMetrics).filter(ContentMetrics.topic_id == topic_id).delete() db.delete(topic) db.commit() return {"ok": True} except Exception as e: db.rollback() - raise HTTPException(status_code=400, detail=f"删除失败:该选题有关联数据(文章/发布记录等),请先删除关联数据。{str(e)}") + raise HTTPException(status_code=400, detail=f"删除失败:{str(e)}") @router.post("/{topic_id}/score") diff --git a/platform/frontend/topics.html b/platform/frontend/topics.html index 66c3428..09b6482 100644 --- a/platform/frontend/topics.html +++ b/platform/frontend/topics.html @@ -547,12 +547,16 @@ const TopicsApp = { }, async deleteTopic(id) { try { - await this.$confirm('确定删除?', '提示', { type: 'warning' }); + await this.$confirm('确定删除选题 ' + id + '?将同时删除相关文章、发布记录等关联数据。', '提示', { type: 'warning' }); await this.api('/api/topics/' + id, { method: 'DELETE' }); this.$message.success('删除成功'); await this.fetchTopics(); await this.fetchTodayCount(); - } catch (e) { if (e !== 'cancel') this.$message.error('删除失败'); } + } catch (e) { + if (e === 'cancel') return; + const msg = e?.response?.data?.detail || e?.message || '未知错误'; + this.$message.error('删除失败: ' + msg); + } }, switchPlatform(platform) { if (this.editing) this.cancelEdit();