diff --git a/back/api/script.ts b/back/api/script.ts index cea7b129..257a2f13 100644 --- a/back/api/script.ts +++ b/back/api/script.ts @@ -77,12 +77,14 @@ export default (app: Router) => { async (req: Request, res: Response, next: NextFunction) => { const logger: Logger = Container.get('logger'); try { - let { filename, path, content, originFilename } = req.body as { - filename: string; - path: string; - content: string; - originFilename: string; - }; + let { filename, path, content, originFilename, directory } = + req.body as { + filename: string; + path: string; + content: string; + originFilename: string; + directory: string; + }; if (!path) { path = config.scriptPath; @@ -105,6 +107,11 @@ export default (app: Router) => { return res.send({ code: 200 }); } + if (directory) { + fs.mkdirSync(join(path, directory), { recursive: true }); + return res.send({ code: 200 }); + } + if (!originFilename) { originFilename = filename; } diff --git a/src/pages/script/editNameModal.tsx b/src/pages/script/editNameModal.tsx index f46bab6c..f0a36797 100644 --- a/src/pages/script/editNameModal.tsx +++ b/src/pages/script/editNameModal.tsx @@ -32,25 +32,26 @@ const EditScriptNameModal = ({ const [loading, setLoading] = useState(false); const [dirs, setDirs] = useState([]); const [file, setFile] = useState(); - const [type, setType] = useState<'blank' | 'upload'>('blank'); + const [type, setType] = useState<'blank' | 'upload' | 'directory'>('blank'); const handleOk = async (values: any) => { setLoading(true); - values.path = values.path || ''; + const { path = '', filename: inputFilename, directory } = values; const formData = new FormData(); formData.append('file', file as any); - formData.append('filename', values.filename); - formData.append('path', values.path); + formData.append('filename', inputFilename); + formData.append('path', path); formData.append('content', ''); + formData.append('directory', directory); request .post(`${config.apiPrefix}scripts`, { data: formData, }) .then(({ code, data }) => { if (code === 200) { - message.success('新建文件成功'); - const key = values.path ? `${values.path}/` : ''; - const filename = file ? file.name : values.filename; + message.success(directory ? '新建文件夹成功' : '新建文件成功'); + const key = path ? `${values.path}/` : ''; + const filename = file ? file.name : inputFilename; handleCancel({ filename, path: values.path, @@ -99,7 +100,7 @@ const EditScriptNameModal = ({ return ( 空文件 - 本地上传 + 本地文件 + 文件夹 {type === 'blank' && ( + value.includes('/') + ? Promise.reject(new Error('文件名不能包含斜杠')) + : Promise.resolve(), + }, + ]} > )} + {type === 'directory' && ( + + + + )}