import { useState, useEffect, useCallback, Key, useRef } from 'react'; import { TreeSelect, Tree, Input, Button } from 'antd'; import config from '@/utils/config'; import { PageContainer } from '@ant-design/pro-layout'; import Editor from '@monaco-editor/react'; import { request } from '@/utils/http'; import styles from './index.module.less'; import EditModal from './editModal'; import { Controlled as CodeMirror } from 'react-codemirror2'; import { useCtx, useTheme } from '@/utils/hooks'; 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 LangMap: any = { '.py': 'python', '.js': 'javascript', '.sh': 'shell', '.ts': 'typescript', }; const Script = () => { 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 [mode, setMode] = useState(''); const [height, setHeight] = useState(); const treeDom = useRef(); const [isLogModalVisible, setIsLogModalVisible] = useState(false); const { headerStyle, isPhone } = useCtx(); const { theme } = useTheme(); const getScripts = () => { setLoading(true); request .get(`${config.apiPrefix}scripts/files`) .then((data) => { setData(data.data); setFilterData(data.data); }) .finally(() => setLoading(false)); }; const getDetail = (node: any) => { request.get(`${config.apiPrefix}scripts/${node.value}`).then((data) => { setValue(data.data); }); }; const onSelect = (value: any, node: any) => { const newMode = LangMap[value.slice(-3)] || ''; setMode(isPhone && newMode === 'typescript' ? 'javascript' : newMode); 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(() => { getScripts(); setHeight(treeDom.current.clientHeight); }, []); return ( , ] : [ , ] } header={{ style: headerStyle, }} >
{!isPhone && (
)} {isPhone ? ( { setValue(value); }} onChange={(editor, data, value) => {}} /> ) : ( )} { setIsLogModalVisible(false); }} />
); }; export default Script;