增加admin页面

This commit is contained in:
xunbu
2025-07-14 15:31:42 +08:00
parent 475ff47b85
commit 47249c6dab
2 changed files with 41 additions and 7 deletions

View File

@@ -368,6 +368,10 @@ async def service_get_engin_list():
if available_packages.get("docling"): engin_list.append("docling") if available_packages.get("docling"): engin_list.append("docling")
return JSONResponse(content=engin_list) return JSONResponse(content=engin_list)
@service_router.get("/task-list", summary="获取所有task-id")
async def service_get_task_list():
return JSONResponse(content=list(tasks_state.keys()))
@service_router.get("/default-params", summary="获取默认翻译参数") @service_router.get("/default-params", summary="获取默认翻译参数")
def service_get_default_params(): def service_get_default_params():
@@ -477,7 +481,9 @@ async def get_logs_from_queue_for_frontend(request: Request, task_id: str = Quer
@backend_router.get("/get-engin-list") @backend_router.get("/get-engin-list")
async def get_engin_list_for_frontend(request: Request): async def get_engin_list_for_frontend(request: Request):
return await _proxy_request(request, "GET", "/service/engin-list") return await _proxy_request(request, "GET", "/service/engin-list")
@backend_router.get("/get-task-list")
async def get_task_list_for_frontend(request: Request):
return await _proxy_request(request, "GET", "/service/task-list")
@backend_router.get("/translate/default_param") @backend_router.get("/translate/default_param")
async def get_default_param_for_frontend(request: Request): async def get_default_param_for_frontend(request: Request):
@@ -500,7 +506,13 @@ async def main_page():
no_cache_headers = {"Cache-Control": "no-store, no-cache, must-revalidate, max-age=0", "Pragma": "no-cache", no_cache_headers = {"Cache-Control": "no-store, no-cache, must-revalidate, max-age=0", "Pragma": "no-cache",
"Expires": "0"} "Expires": "0"}
return FileResponse(index_path, headers=no_cache_headers) return FileResponse(index_path, headers=no_cache_headers)
@app.get("/admin", response_class=HTMLResponse, include_in_schema=False)
async def main_page_admin():
index_path = Path(STATIC_DIR) / "index.html"
if not index_path.exists(): raise HTTPException(status_code=404, detail="index.html not found")
no_cache_headers = {"Cache-Control": "no-store, no-cache, must-revalidate, max-age=0", "Pragma": "no-cache",
"Expires": "0"}
return FileResponse(index_path, headers=no_cache_headers)
@app.post("/temp/translate") @app.post("/temp/translate")
async def temp_translate(base_url: str = Body(...), async def temp_translate(base_url: str = Body(...),
api_key: str = Body(...), api_key: str = Body(...),

View File

@@ -454,6 +454,7 @@
// --- Global State --- // --- Global State ---
let defaultParams = {}; let defaultParams = {};
const tasks = {}; // { taskId: { elements: {...}, state: {...}, intervals: {...} } } const tasks = {}; // { taskId: { elements: {...}, state: {...}, intervals: {...} } }
let isAdminMode = false; // Flag for admin view
const apiHrefMap = { const apiHrefMap = {
"https://openrouter.ai/api/v1": "https://openrouter.ai/settings/keys", "https://openrouter.ai/api/v1": "https://openrouter.ai/settings/keys",
@@ -530,6 +531,7 @@
} }
function saveTaskIds() { function saveTaskIds() {
if (isAdminMode) return; // In admin mode, do not save task list to localStorage
const taskIds = Object.keys(tasks); const taskIds = Object.keys(tasks);
saveToStorage('active_task_ids', JSON.stringify(taskIds)); saveToStorage('active_task_ids', JSON.stringify(taskIds));
} }
@@ -955,6 +957,9 @@
// --- Initialization --- // --- Initialization ---
async function init() { async function init() {
// Determine if in admin mode
isAdminMode = window.location.pathname === '/admin';
// Fetch metadata // Fetch metadata
try { try {
const [metaRes, enginRes, paramsRes] = await Promise.all([ const [metaRes, enginRes, paramsRes] = await Promise.all([
@@ -996,12 +1001,29 @@
setupSlider(concurrentSlider, concurrentDisplay, concurrentReset, 'concurrent', defaultParams); setupSlider(concurrentSlider, concurrentDisplay, concurrentReset, 'concurrent', defaultParams);
setupSlider(temperatureSlider, temperatureDisplay, temperatureReset, 'temperature', defaultParams); setupSlider(temperatureSlider, temperatureDisplay, temperatureReset, 'temperature', defaultParams);
// Restore tasks // Restore tasks based on mode
const savedTaskIds = JSON.parse(getFromStorage('active_task_ids', '[]')); if (isAdminMode) {
if (savedTaskIds.length > 0) { document.title = "DocuTranslate - Admin Panel";
savedTaskIds.forEach(taskId => createTaskCard(taskId, true)); try {
const response = await fetch('/backend/get-task-list');
if (!response.ok) throw new Error(`Failed to fetch task list: ${response.statusText}`);
const allTaskIds = await response.json();
if (allTaskIds && Array.isArray(allTaskIds) && allTaskIds.length > 0) {
allTaskIds.reverse().forEach(taskId => createTaskCard(taskId, true));
}
} catch (error) {
console.error("Admin mode: Failed to load task list from server.", error);
alert("无法从服务器加载任务列表,请检查后台连接。");
}
updateTaskPlaceholderVisibility();
} else { } else {
createTaskCard(); // Create one new task by default // Normal mode: Restore from localStorage
const savedTaskIds = JSON.parse(getFromStorage('active_task_ids', '[]'));
if (savedTaskIds.length > 0) {
savedTaskIds.forEach(taskId => createTaskCard(taskId, true));
} else {
createTaskCard(); // Create one new task by default
}
} }
// Add event listeners for settings // Add event listeners for settings