import { connect, useNavigate, useLocation, Dispatch } from 'umi' import React, { useState, useEffect, useMemo } from 'react'; import type { MenuProps } from 'antd'; import { Menu } from 'antd'; import { ToolOutlined, BarsOutlined, SearchOutlined } from '@ant-design/icons'; import File from './components/knowledge-file' import Setting from './components/knowledge-setting' import Search from './components/knowledge-search' import Chunk from './components/knowledge-chunk' import styles from './index.less' import { getWidth } from '@/utils' import { kAModelState } from './model' interface kAProps { dispatch: Dispatch; kAModel: kAModelState; } const Index: React.FC = ({ kAModel, dispatch }) => { const [collapsed, setCollapsed] = useState(false); const { id, activeKey, doc_id } = kAModel const [windowWidth, setWindowWidth] = useState(getWidth()); let navigate = useNavigate(); const location = useLocation(); // 标记一下 console.log(doc_id, '>>>>>>>>>>>>>doc_id') useEffect(() => { const widthSize = () => { const width = getWidth() console.log(width) setWindowWidth(width); }; window.addEventListener("resize", widthSize); return () => { window.removeEventListener("resize", widthSize); }; }, []); useEffect(() => { console.log(location) const search = location.search.slice(1) const map = search.split('&').reduce((obj, cur) => { const [key, value] = cur.split('=') obj[key] = value return obj }, {}) dispatch({ type: 'kAModel/updateState', payload: { doc_id: undefined, ...map, } }); }, [location]) useEffect(() => { if (windowWidth.width > 957) { setCollapsed(false) } else { setCollapsed(true) } }, [windowWidth.width]) type MenuItem = Required['items'][number]; function getItem( label: React.ReactNode, key: React.Key, icon?: React.ReactNode, disabled?: boolean, children?: MenuItem[], type?: 'group', ): MenuItem { return { key, icon, children, label, type, disabled } as MenuItem; } const items: MenuItem[] = useMemo(() => { const disabled = !id return [ getItem('配置', 'setting', ), getItem('知识库', 'file', , disabled), getItem('搜索测试', 'search', , disabled), ] }, [id]); const handleSelect: MenuProps['onSelect'] = (e) => { navigate(`/knowledge/add/setting?activeKey=${e.key}&id=${id}`); } return ( <>
957 ? styles.defaultWidth : styles.minWidth} inlineCollapsed={collapsed} items={items} onSelect={handleSelect} />
{activeKey === 'file' && !doc_id && } {activeKey === 'setting' && } {activeKey === 'search' && } {activeKey === 'file' && !!doc_id && }
); }; export default connect(({ kAModel, loading }) => ({ kAModel, loading }))(Index);