fix: 修复知识库页面三处问题:出处下拉为空、宽度跳动、表格列宽优化

This commit is contained in:
simonkoson
2026-05-27 12:56:57 +08:00
parent 74a0508755
commit d849bc1539
@@ -29,6 +29,7 @@ export default function KnowledgeBase() {
const [treeData, setTreeData] = useState([]) const [treeData, setTreeData] = useState([])
const [loading, setLoading] = useState(false) const [loading, setLoading] = useState(false)
const [uploading, setUploading] = useState(false) const [uploading, setUploading] = useState(false)
const [sources, setSources] = useState([]) // 出处下拉选项
const [sourceTypeFilter, setSourceTypeFilter] = useState('') const [sourceTypeFilter, setSourceTypeFilter] = useState('')
const [sourceDetailFilter, setSourceDetailFilter] = useState('') const [sourceDetailFilter, setSourceDetailFilter] = useState('')
const [selectedTreeNode, setSelectedTreeNode] = useState(null) // { type, detail } const [selectedTreeNode, setSelectedTreeNode] = useState(null) // { type, detail }
@@ -54,9 +55,20 @@ export default function KnowledgeBase() {
} }
} }
const fetchSources = async () => {
try {
const data = await knowledgeService.listSources()
// 接口返回 [{source: "航空知识 2026年第1期"}, ...],提取 source 字段
setSources(data.map(s => s.source).filter(Boolean))
} catch {
// ignore
}
}
useEffect(() => { useEffect(() => {
fetchItems() fetchItems()
fetchTree() fetchTree()
fetchSources()
}, [sourceTypeFilter]) }, [sourceTypeFilter])
// 上传 // 上传
@@ -127,32 +139,37 @@ export default function KnowledgeBase() {
title: '标题', title: '标题',
dataIndex: 'title', dataIndex: 'title',
key: 'title', key: 'title',
render: (text, record) => ( width: 240,
<span style={{ fontWeight: 500, color: '#3b4a3b' }}>{text}</span> render: (text) => (
<span style={{ fontWeight: 500, color: '#3b4a3b', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', display: 'block' }}>{text}</span>
), ),
}, },
{ {
title: '作者', title: '作者',
dataIndex: 'author', dataIndex: 'author',
key: 'author', key: 'author',
render: (val) => val || null, width: 80,
render: (val) => val || '-',
}, },
{ {
title: '播出/发表时间', title: '播出/发表时间',
dataIndex: 'publish_date', dataIndex: 'publish_date',
key: 'publish_date', key: 'publish_date',
render: (val) => val || null, width: 156,
render: (val) => val || '-',
}, },
{ {
title: '出处', title: '出处',
dataIndex: 'source_detail', dataIndex: 'source_detail',
key: 'source_detail', key: 'source_detail',
width: 170,
render: (val) => val || '-', render: (val) => val || '-',
}, },
{ {
title: '类型', title: '类型',
dataIndex: 'source_type', dataIndex: 'source_type',
key: 'source_type', key: 'source_type',
width: 88,
render: (val) => ( render: (val) => (
<Tag color="default" style={{ borderRadius: 8 }}> <Tag color="default" style={{ borderRadius: 8 }}>
{SOURCE_TYPE_LABEL[val] || val} {SOURCE_TYPE_LABEL[val] || val}
@@ -163,11 +180,13 @@ export default function KnowledgeBase() {
title: '入库时间', title: '入库时间',
dataIndex: 'created_at', dataIndex: 'created_at',
key: 'created_at', key: 'created_at',
render: (val) => val ? new Date(val).toLocaleString('zh-CN') : '-', width: 140,
render: (val) => val ? new Date(val).toLocaleString('zh-CN', { hour12: false }).replace(' ', ' ') : '-',
}, },
{ {
title: '操作', title: '操作',
key: 'action', key: 'action',
width: 86,
render: (_, record) => ( render: (_, record) => (
<Popconfirm <Popconfirm
title="确认删除" title="确认删除"
@@ -244,7 +263,7 @@ export default function KnowledgeBase() {
/> />
<Select <Select
placeholder="按出处" placeholder="按出处"
options={[{ label: '全部出处', value: '' }, ...(items.length ? [] : [])]} options={[{ label: '全部出处', value: '' }, ...sources.map(s => ({ label: s, value: s }))]}
value={sourceDetailFilter} value={sourceDetailFilter}
onChange={val => { setSourceDetailFilter(val); setSelectedTreeNode(null) }} onChange={val => { setSourceDetailFilter(val); setSelectedTreeNode(null) }}
style={{ width: 200 }} style={{ width: 200 }}