重构deleteRecords

This commit is contained in:
jingrow 2025-11-05 02:51:30 +08:00
parent 9c1b235bdc
commit 27b2dead71
2 changed files with 70 additions and 40 deletions

View File

@ -6,38 +6,33 @@ import { get_session_api_headers } from './auth'
// 删除记录的通用函数
export const deleteRecords = async (pagetype: string, names: string[]): Promise<{ success: boolean; message?: string }> => {
try {
const results = []
const failed = []
if (!names || names.length === 0) {
return { success: false, message: '未提供要删除的记录' }
}
// 循环调用单个删除接口
for (const name of names) {
try {
await axios.post(
`/api/action/jingrow.client.delete`,
const response = await axios.post(
`/jingrow/bulk-delete`,
{
pagetype: pagetype,
name: name
names: names
},
{
headers: get_session_api_headers(),
withCredentials: true
withCredentials: true,
validateStatus: (status) => status === 200 || status === 207 // 允许207状态码
}
)
results.push(name)
} catch (error: any) {
failed.push(name)
}
}
if (failed.length === 0) {
return { success: true, message: `成功删除 ${results.length} 条记录` }
} else if (results.length > 0) {
return { success: false, message: `部分删除成功:${results.length} 条成功,${failed.length} 条失败` }
} else {
return { success: false, message: '删除失败' }
const result = response.data
// 207 状态码表示部分成功
const isPartialSuccess = response.status === 207
return {
success: !isPartialSuccess,
message: result?.message || (isPartialSuccess ? '部分删除成功' : '删除完成')
}
} catch (error: any) {
return { success: false, message: error.message || '删除失败' }
return { success: false, message: error.response?.data?.detail || error.message || '删除失败' }
}
}
@ -386,3 +381,4 @@ export const uploadFileToJingrow = async (
}
}
}

View File

@ -132,20 +132,54 @@ async def delete_record_api(request: Request, pagetype: str, name: str):
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@router.post("/api/action/jingrow.client.delete")
@router.post("/jingrow/bulk-delete")
async def batch_delete_records(request: Request, data: Dict[str, Any]):
"""批量删除记录"""
try:
pagetype = data.get('pagetype')
name = data.get('name')
names = data.get('names', [])
if not pagetype or not name:
raise HTTPException(status_code=400, detail="缺少必要参数")
if not pagetype:
raise HTTPException(status_code=400, detail="缺少必要参数 pagetype")
return await delete_record_api(request, pagetype, name)
# 统一处理:如果提供了单个 name转换为列表
if name and not names:
names = [name]
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
if not names:
raise HTTPException(status_code=400, detail="缺少必要参数 name 或 names")
# 批量删除
success_count = 0
failed_names = []
for name_item in names:
try:
if jingrow.delete_pg(pagetype, name_item):
success_count += 1
else:
failed_names.append(name_item)
except Exception:
failed_names.append(name_item)
failed_count = len(failed_names)
# 根据结果返回响应
if failed_count == 0:
return JSONResponse(content={
"message": f"成功删除 {success_count} 条记录",
"success_count": success_count,
"failed_count": 0
})
elif success_count > 0:
return JSONResponse(content={
"message": f"部分删除成功:{success_count} 条成功,{failed_count} 条失败",
"success_count": success_count,
"failed_count": failed_count,
"failed_names": failed_names
}, status_code=207) # 207 Multi-Status
else:
raise HTTPException(status_code=400, detail="所有记录删除失败")
@router.post("/api/action/jingrow.client.get_count")
async def get_record_count(request: Request, pagetype: str):