import { useEffect, useMemo, useState } from "react" import { Link, useSearchParams } from "react-router-dom" import { Button, Card, Col, Pagination, Row, Select, Space, Tag, Typography } from "antd" import { ModificationApi, TagApi } from "@/api" import { useAppSelector } from "@/store" import { Modification } from "@/types" const pageSize = 12 export default function ModCodesPage() { const user = useAppSelector((state) => state.auth.user) const [searchParams] = useSearchParams() const firearmId = useMemo(() => searchParams.get("firearmId") || undefined, [searchParams]) const [page, setPage] = useState(1) const [modifications, setModifications] = useState([]) const [tagOptions, setTagOptions] = useState([]) const [selectedTags, setSelectedTags] = useState([]) const [total, setTotal] = useState(0) useEffect(() => { const _firearmId = firearmId ? +firearmId : (void 0) TagApi.getTags(_firearmId).then((tags) => { setTagOptions(tags) }) }, []) useEffect(() => { ModificationApi.getModifications({ page: page - 1, size: pageSize, sortBy: "id", direction: "ASC", firearmId, tags: selectedTags, }).then((pagedData) => { setModifications(pagedData.items) setTotal(pagedData.totalElements) }) }, [page, firearmId, selectedTags]) useEffect(() => { setPage(1) }, [firearmId]) useEffect(() => { setPage(1) }, [selectedTags]) return ( <>
改枪码列表
标签: mode="multiple" allowClear placeholder="请选择标签" className="w-64" value={selectedTags} options={tagOptions.map((tag) => ({ value: tag, label: tag }))} onChange={(values) => { setSelectedTags(values) }} /> {firearmId && 武器 ID: {firearmId}} {(firearmId || selectedTags.length > 0) && ( )} {user && }
{modifications.map((modification) => ( 编辑 ) : null } variant="outlined" styles={{ header: { minHeight: 56 }, }}>
改枪码: {modification.code}
作者: {modification.author || "未知"} {modification.tags.length > 0 && (
{modification.tags.map((tag) => ( {tag} ))}
)} {modification.note || "暂无备注"} {modification.videoUrl && ( )}
))} {modifications.length === 0 && ( 暂无改枪码数据 )}
{ setPage(nextPage) }} showSizeChanger={false} />
) }