fix: [FL-186][菜单管理页面输入关键字时不要触发查询动作]
将关键字输入与实际查询参数分离,用户在输入框中输入时不会立即触发API请求。 只有在点击「搜索」按钮或按下Enter键时才执行查询。 改动点: - 新增activeKeyword和activeStatusFilter状态用于存储实际查询参数 - 修改loadMenus依赖为activeKeyword和activeStatusFilter - 新增handleSearch函数,在点击搜索时更新查询参数 - 为关键字输入框添加onPressEnter支持 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
@@ -95,6 +95,8 @@ export default function AdminMenusPage() {
|
||||
const [editingMenuId, setEditingMenuId] = useState<string | null>(null);
|
||||
const [keyword, setKeyword] = useState("");
|
||||
const [statusFilter, setStatusFilter] = useState<FilterStatus>("all");
|
||||
const [activeKeyword, setActiveKeyword] = useState("");
|
||||
const [activeStatusFilter, setActiveStatusFilter] = useState<FilterStatus>("all");
|
||||
const [tableScrollY, setTableScrollY] = useState(MENU_TABLE_MIN_SCROLL_Y);
|
||||
const [form] = Form.useForm<MenuFormValues>();
|
||||
const tableScrollAnchorRef = useRef<HTMLDivElement | null>(null);
|
||||
@@ -143,11 +145,11 @@ export default function AdminMenusPage() {
|
||||
setError("");
|
||||
|
||||
const params = new URLSearchParams();
|
||||
if (keyword.trim()) {
|
||||
params.append("keyword", keyword.trim());
|
||||
if (activeKeyword.trim()) {
|
||||
params.append("keyword", activeKeyword.trim());
|
||||
}
|
||||
if (statusFilter !== "all") {
|
||||
params.append("status", statusFilter);
|
||||
if (activeStatusFilter !== "all") {
|
||||
params.append("status", activeStatusFilter);
|
||||
}
|
||||
|
||||
const url = `/api/v1/admin/menus${params.toString() ? `?${params.toString()}` : ""}`;
|
||||
@@ -161,7 +163,7 @@ export default function AdminMenusPage() {
|
||||
const payload = (await response.json()) as MenuListResponse;
|
||||
setMenus(payload.items.map(normalizeMenuItemPath));
|
||||
setLoading(false);
|
||||
}, [canRead, fetchWithAuth, keyword, statusFilter]);
|
||||
}, [canRead, fetchWithAuth, activeKeyword, activeStatusFilter]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!user || !canRead) {
|
||||
@@ -182,6 +184,11 @@ export default function AdminMenusPage() {
|
||||
}, [canRead, loadMenus, user]),
|
||||
);
|
||||
|
||||
const handleSearch = useCallback(() => {
|
||||
setActiveKeyword(keyword);
|
||||
setActiveStatusFilter(statusFilter);
|
||||
}, [keyword, statusFilter]);
|
||||
|
||||
const closeDialog = useCallback(() => {
|
||||
setDialogOpen(false);
|
||||
setEditingMenuId(null);
|
||||
@@ -499,6 +506,7 @@ export default function AdminMenusPage() {
|
||||
allowClear
|
||||
value={keyword}
|
||||
onChange={(event) => setKeyword(event.currentTarget.value)}
|
||||
onPressEnter={handleSearch}
|
||||
placeholder="按编码/名称/路径筛选"
|
||||
/>
|
||||
</Form.Item>
|
||||
@@ -518,7 +526,7 @@ export default function AdminMenusPage() {
|
||||
<Form.Item>
|
||||
<Button
|
||||
type="primary"
|
||||
onClick={() => void loadMenus()}
|
||||
onClick={handleSearch}
|
||||
>
|
||||
搜索
|
||||
</Button>
|
||||
|
||||
Reference in New Issue
Block a user