import { useState, useEffect, useCallback, Key } from 'react'; import { TreeSelect, Tree, Input } from 'antd'; import config from '@/utils/config'; import { PageContainer } from '@ant-design/pro-layout'; import { Controlled as CodeMirror } from 'react-codemirror2'; import { request } from '@/utils/http'; import styles from './index.module.less'; function getFilterData(keyword: string, data: any) { if (keyword) { const tree: any = []; data.forEach((item: any) => { if (item.title.toLocaleLowerCase().includes(keyword)) { tree.push(item); } }); return { tree }; } return { tree: data }; } const Script = () => { const [width, setWidth] = useState('100%'); const [marginLeft, setMarginLeft] = useState(0); const [marginTop, setMarginTop] = useState(-72); const [title, setTitle] = useState('请选择脚本文件'); const [value, setValue] = useState('请选择脚本文件'); const [select, setSelect] = useState(); const [data, setData] = useState([]); const [filterData, setFilterData] = useState([]); const [loading, setLoading] = useState(false); const [isPhone, setIsPhone] = useState(false); const getScripts = () => { request.get(`${config.apiPrefix}scripts/files`).then((data) => { setData(data.data); setFilterData(data.data); }); }; const getDetail = (node: any) => { setLoading(true); request .get(`${config.apiPrefix}scripts/${node.value}`) .then((data) => { setValue(data.data); }) .finally(() => setLoading(false)); }; const onSelect = (value: any, node: any) => { setSelect(value); setTitle(node.parent || node.value); getDetail(node); }; const onTreeSelect = useCallback((keys: Key[], e: any) => { onSelect(keys[0], e.node); }, []); const onSearch = useCallback( (e) => { const keyword = e.target.value; const { tree } = getFilterData(keyword.toLocaleLowerCase(), data); setFilterData(tree); }, [data, setFilterData], ); useEffect(() => { if (document.body.clientWidth < 768) { setWidth('auto'); setMarginLeft(0); setMarginTop(0); setIsPhone(true); } else { setWidth('100%'); setMarginLeft(0); setMarginTop(-72); setIsPhone(false); } getScripts(); }, []); return ( , ] } header={{ style: { padding: '4px 16px 4px 15px', position: 'sticky', top: 0, left: 0, zIndex: 20, marginTop, width, marginLeft, }, }} >
{!isPhone && (
)} { setValue(value); }} onChange={(editor, data, value) => {}} />
); }; export default Script;