From 0cba2ae6b551971e3deb78c6232d625ed4932948 Mon Sep 17 00:00:00 2001 From: ddcat666 <26564566+ddcat666@users.noreply.github.com> Date: Sat, 10 Oct 2026 07:16:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(admin):=20=E7=AE=A1=E7=90=86=E7=AB=AF?= =?UTF-8?q?=E4=BA=A4=E4=BA=92=20-=20=E7=AB=8B=E5=8D=B3=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E5=B9=B6=E6=94=AF=E6=8C=81=E4=B8=AD=E6=96=87=E7=AD=9B=E9=80=89?= =?UTF-8?q?=E8=BE=93=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/application.tsx | 2 +- .../pages/admin/channels/channels-page.tsx | 5 +-- .../admin/components/admin-search-input.tsx | 32 +++++++++++++++++++ .../components/api-log-detail-drawer.tsx | 1 + .../components/storage-resources-panel.tsx | 7 ++-- web/src/pages/admin/logs/logs-page.tsx | 8 +++-- .../storyboard-prompts-page.tsx | 3 +- web/src/pages/admin/users/users-panel.tsx | 5 +-- 8 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 web/src/pages/admin/components/admin-search-input.tsx diff --git a/web/src/application.tsx b/web/src/application.tsx index dc57fef24..82bc547d2 100644 --- a/web/src/application.tsx +++ b/web/src/application.tsx @@ -18,7 +18,7 @@ document.body.style.fontFamily = '"SF Pro Display","SF Pro Text","PingFang SC"," createRoot(document.getElementById("root")!).render( - + , ); diff --git a/web/src/pages/admin/channels/channels-page.tsx b/web/src/pages/admin/channels/channels-page.tsx index e2ec86ed0..a44f811aa 100644 --- a/web/src/pages/admin/channels/channels-page.tsx +++ b/web/src/pages/admin/channels/channels-page.tsx @@ -2,6 +2,7 @@ import { App, Button, Form, Input, InputNumber, Modal, Spin, Switch } from "antd import { ChevronRight, Copy, Pencil, Plus, Power, Search, Trash2 } from "lucide-react"; import { useEffect, useRef, useState } from "react"; import { useSearchParams } from "react-router"; +import { AdminSearchInput } from "../components/admin-search-input"; import { ChannelHeadersEditor, validateChannelHeaders } from "@/components/channel-headers-editor"; import { refreshSystemChannels } from "@/lib/user-session"; @@ -255,7 +256,7 @@ export default function ChannelsPage() { - } value={keyword} placeholder="搜索渠道名称或地址" - onChange={(event) => updateUrl({ filter: event.target.value }, true)} + onValueChange={(value) => updateUrl({ filter: value }, true)} /> { + composing.current = true; + }} + onCompositionEnd={(event) => { + composing.current = false; + const next = event.currentTarget.value; + setDraft(next); + onValueChange(next); + }} + onChange={(event) => { + const next = event.target.value; + setDraft(next); + if (!composing.current) onValueChange(next); + }} + /> + ); +} diff --git a/web/src/pages/admin/components/api-log-detail-drawer.tsx b/web/src/pages/admin/components/api-log-detail-drawer.tsx index 57808d212..3f381c49f 100644 --- a/web/src/pages/admin/components/api-log-detail-drawer.tsx +++ b/web/src/pages/admin/components/api-log-detail-drawer.tsx @@ -142,6 +142,7 @@ function LogDetail({ log, providerRequestId, videoURL, resultText, querying, onP {formatDuration(log.durationMs)}} /> {log.method} {log.path || "未记录"}} /> + {log.upstreamUrl || "未记录"}} /> {log.error || log.errorCode ? (
diff --git a/web/src/pages/admin/components/storage-resources-panel.tsx b/web/src/pages/admin/components/storage-resources-panel.tsx index 125f99617..00a372d98 100644 --- a/web/src/pages/admin/components/storage-resources-panel.tsx +++ b/web/src/pages/admin/components/storage-resources-panel.tsx @@ -10,6 +10,7 @@ import { useDebouncedValue } from "@/hooks/use-debounced-value"; import { adminResourceFileUrl, deleteAdminResources, downloadAdminResource, getAdminStorageStats, listAdminResources, type AdminStorageResource, type AdminStorageStats } from "@/services/api/admin-storage"; import { AdminBatchBar, AdminDataTable, AdminFilterChip, AdminStatTile, AdminStatusBadge, AdminTableEmpty } from "./admin-ui"; import { Select } from "@/components/ui/base/select"; +import { AdminSearchInput } from "./admin-search-input"; const pageSizes = [20, 50, 100]; @@ -201,7 +202,7 @@ export default function StorageResourcesPanel() { - } value={keyword} placeholder="资源 ID 或对象路径" - onChange={(event) => updateUrl({ filter: event.target.value, page: 1 }, true)} + onValueChange={(value) => updateUrl({ filter: value, page: 1 }, true)} /> - updateUrl({ user: event.target.value, userId: "", page: 1 }, true)} /> + updateUrl({ user: value, userId: "", page: 1 }, true)} /> updateUrl({ status: value, page: 1 })} options={statusOptions} /> } value={keyword} placeholder="搜索用户、渠道、模型、路径或请求号" - onChange={(event) => updateUrl({ filter: event.target.value, page: 1 }, true)} + onValueChange={(value) => updateUrl({ filter: value, page: 1 }, true)} /> } toolbarActiveFilters={ diff --git a/web/src/pages/admin/storyboard-prompts/storyboard-prompts-page.tsx b/web/src/pages/admin/storyboard-prompts/storyboard-prompts-page.tsx index 0c087883e..a40fcb467 100644 --- a/web/src/pages/admin/storyboard-prompts/storyboard-prompts-page.tsx +++ b/web/src/pages/admin/storyboard-prompts/storyboard-prompts-page.tsx @@ -4,6 +4,7 @@ import type { ColumnsType } from "antd/es/table"; import { Braces, Copy, FileJson, FileText, Plus, Power, Search, ShieldCheck, Trash2 } from "lucide-react"; import { useEffect, useMemo, useRef, useState } from "react"; import { useSearchParams } from "react-router"; +import { AdminSearchInput } from "../components/admin-search-input"; import { AdminDrawer } from "@/pages/admin/ui/overlays"; import { PromptCodeEditor, type PromptCodeEditorHandle } from "@/components/prompt/prompt-code-editor"; @@ -178,7 +179,7 @@ export default function StoryboardPromptsPage() { return ( } disabled={!definitions.length} onClick={() => openDrawer()}>新建版本}> } value={keyword} aria-label="搜索提示词模板" placeholder="搜索模板或内容" onChange={(event) => updateUrl({ filter: event.target.value })} />} + toolbar={} value={keyword} aria-label="搜索提示词模板" placeholder="搜索模板或内容" onValueChange={(value) => updateUrl({ filter: value })} />} toolbarActive={hasFilters} toolbarFilters={<> updateUrl({ status: value })} options={[{ label: "全部状态", value: "all" }, { label: "启用中", value: "enabled" }, { label: "历史版本", value: "disabled" }]} />} onReset={() => updateUrl({ filter: "", operation: "all", status: "all" })} diff --git a/web/src/pages/admin/users/users-panel.tsx b/web/src/pages/admin/users/users-panel.tsx index 99a7717ce..e6b222642 100644 --- a/web/src/pages/admin/users/users-panel.tsx +++ b/web/src/pages/admin/users/users-panel.tsx @@ -13,6 +13,7 @@ import { AdminUserDetailDrawer } from "../components/admin-user-detail-drawer"; import { createUserColumns, userColumnOptions, type UserColumnKey } from "./users-columns"; import { AdminUserCreateDrawer, AdminUserEditDrawer } from "./users-drawer"; import { Select } from "@/components/ui/base/select"; +import { AdminSearchInput } from "../components/admin-search-input"; const columnStorageKey = "admin-users-visible-columns"; const allColumnKeys = userColumnOptions.map((item) => item.key); @@ -149,14 +150,14 @@ export default function UsersPanel({ onUserChanged }: { onUserChanged?: (user: L - } value={state.filter} aria-label="搜索用户" placeholder="搜索用户名、名称或邮箱" - onChange={(event) => update({ filter: event.target.value, page: 1 }, true)} + onValueChange={(value) => update({ filter: value, page: 1 }, true)} /> }