From 88e2d00368249134553ac93d44b8368b6ea12f3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=BF=83=E5=AE=87?= Date: Sat, 27 Jan 2024 14:39:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=92=A4=E5=9B=9Ewiki=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=89=B9=E6=AE=8A=E5=AD=97=E7=AC=A6=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/forge/Wiki/EditWiki.jsx | 14 ++++++--- src/forge/Wiki/Index.jsx | 11 +++++-- src/forge/Wiki/Preview.jsx | 2 +- src/forge/Wiki/api.js | 5 +--- src/forge/Wiki/components/sidebar/index.jsx | 29 ++++++++++--------- .../Wiki/components/uploadWiki/index.jsx | 8 +++-- 6 files changed, 41 insertions(+), 28 deletions(-) diff --git a/src/forge/Wiki/EditWiki.jsx b/src/forge/Wiki/EditWiki.jsx index 728f6e775..6ec63904f 100644 --- a/src/forge/Wiki/EditWiki.jsx +++ b/src/forge/Wiki/EditWiki.jsx @@ -18,7 +18,7 @@ export default Form.create()(({ form, history, showNotification, projectDetail, let wikiName = '' let key = ''; if (!pathname.endsWith('/wiki/add')) { - wikiName = pathname.split('/')[4]; + wikiName = decodeURI(pathname.split('/')[4]); key = pathname.split('/')[5]; }else{ key = search.split('=').pop(); @@ -116,6 +116,12 @@ export default Form.create()(({ form, history, showNotification, projectDetail, }; validateFields((err, values) => { if (!err) { + let regEn = /[\\/:*?"<>|[\]-]/g; + if (regEn.test(values.title)) { + message.error('文件名不能有特殊字符: \\ / : * ? \" < > | [ \] -'); + setOperateFlag(false); + return; + } const {md_content, title} = values; if (wikiName && search!== "?copy") { updateWiki({ @@ -124,7 +130,7 @@ export default Form.create()(({ form, history, showNotification, projectDetail, projectId: project.id, pageName: wikiName, title, - message: '', + commit_message: '', content_base64: Base64.encode(md_content) }).then(res => dealRes(res, title)); } else { @@ -217,7 +223,7 @@ export default Form.create()(({ form, history, showNotification, projectDetail, projectId: project.id, pageName: '_Sidebar', title: '_Sidebar', - message: '', + commit_message: '', content_base64: Base64.encode(content) }).then(res => { if (res && res.message === "200") { @@ -327,7 +333,7 @@ export default Form.create()(({ form, history, showNotification, projectDetail, "title", [ { required: true, message: "请输入标题" }, - { pattern: /^(?!-).*$/, message: '不能以-开头' } + // { pattern: /[^`\[\]\/:*?''<>|%-+_]/g, message: '不允许部分特殊字符' } ], { project && checkItem.name && getWiki({ owner: owner, repo: projectsId, - pageName: checkItem.sub_url, + pageName: checkItem.name, projectId: project.id }).then(res => { if (res && res.message === "200") { @@ -190,6 +190,11 @@ export default (props) => { setAddMenuError("不能仅输入空格"); return; } + const regEn = /[\\/:*?"<>|[\]-]/g; + if (regEn.test(menuName)) { + setAddMenuError("不能有特殊字符: \\ / : * ? \" < > | [ \] -"); + return; + } // 校验一级目录中是否有相同名称 const oneMenuList = fileList.filter(item=>!item.title.trim().startsWith('[[')).map(i=>i.title.trim()) if(oneMenuList.includes(`- ${menuName}`)){ @@ -210,7 +215,7 @@ export default (props) => { projectId: project.id, pageName: '_Sidebar', title: '_Sidebar', - message: '', + commit_message: '', content_base64: Base64.encode(treeToMd(sidebarList)) }).then(res => { if (res && res.message === "200") { @@ -228,7 +233,7 @@ export default (props) => { } function goEdit(params) { - history.push(`/${owner}/${projectsId}/wiki/${encodeURI(checkItem.sub_url)}/${checkItem.key}/edit${params}`); + history.push(`/${owner}/${projectsId}/wiki/${encodeURI(checkItem.name)}/${checkItem.key}/edit${params}`); } function preview() { diff --git a/src/forge/Wiki/Preview.jsx b/src/forge/Wiki/Preview.jsx index 2b700f60c..b36b1946f 100644 --- a/src/forge/Wiki/Preview.jsx +++ b/src/forge/Wiki/Preview.jsx @@ -63,7 +63,7 @@ export default (props) => { projectsId && checkItem.name && getWiki({ owner: owner, repo: projectsId, - pageName: checkItem.sub_url, + pageName: checkItem.name, projectId: projectId, }).then(res => { if (res && res.message === "200") { diff --git a/src/forge/Wiki/api.js b/src/forge/Wiki/api.js index 2250ec5f4..66425e0fb 100644 --- a/src/forge/Wiki/api.js +++ b/src/forge/Wiki/api.js @@ -116,16 +116,13 @@ export function markdownToTree(markdownText){ lines.map((item, index) =>{ const title = item.trim(); const isFile = title.startsWith('[[') && title.endsWith(']]'); - const titleStr = isFile ? title.substring(2, title.length - 2) : title.substring(2, title.length) const node = { // 带空格+[[]]或者- 标识 title: item, children: [], key: undefined, // 纯内容 - titleStr, - // 编码后的title,获取wiki内容用title_sub - title_sub: encodeURIComponent(titleStr), + titleStr: isFile ? title.substring(2, title.length - 2) : title.substring(2, title.length), // 是否是wiki文件 isFile: isFile } diff --git a/src/forge/Wiki/components/sidebar/index.jsx b/src/forge/Wiki/components/sidebar/index.jsx index d7046edb0..794ecbabc 100644 --- a/src/forge/Wiki/components/sidebar/index.jsx +++ b/src/forge/Wiki/components/sidebar/index.jsx @@ -163,7 +163,7 @@ export default function Sidebar(props) { const {node, children, key} = item; if(isFile){ // 删除页面 - deleteWiki({owner: owner, repo: projectsId, projectId: project.id, pageName: item.title_sub}).then(res => { + deleteWiki({owner: owner, repo: projectsId, projectId: project.id, pageName: title}).then(res => { if(res && res.message === "204"){ // 递归过滤相同key值的节点,执行删除操作 const menuListByDel = findSameKeyByDel(menuList, key); @@ -267,7 +267,7 @@ export default function Sidebar(props) { projectId: project.id, pageName: '_Sidebar', title: '_Sidebar', - message: '', + commit_message: '', content_base64: Base64.encode(content) }).then(res => { if (res && res.message === "200") { @@ -303,18 +303,20 @@ export default function Sidebar(props) { e.stopPropagation(); setVisible(item); setIsEditName(type); - const {titleStr, title_sub} = item; + let title = item.title.trim(); + const isFile = title.startsWith('[[') && title.endsWith(']]'); + title = isFile ? title.substring(2,title.length-2) : title.substring(2, title.length); type === 2 && getWiki({ owner: owner, repo: projectsId, - pageName: title_sub, + pageName: title, projectId: project.id }).then(res => { if (res && res.message === "200") { setWikiContent(res.data.md_content); } }) - setMenuName(titleStr); + setMenuName(title); } // 新增子目录 或者 重命名目录 @@ -327,8 +329,9 @@ export default function Sidebar(props) { setAddMenuError("不能仅输入空格"); return; } - if (isEditName === 2 && /^-/.test(menuName)) { - setAddMenuError('不能以-开头'); + const regEn = /[\\/:*?"<>|[\]-]/g; + if (regEn.test(menuName)) { + setAddMenuError('不能有特殊字符: \\ / : * ? \" < > | [ \] -'); return; } if(!isEditName){ @@ -353,15 +356,14 @@ export default function Sidebar(props) { }else{ // isEditName 1 编辑目录名称 2编辑页面名称 const titleToJudge = isEditName === 2 ? `[[${menuName}]]` : `- ${menuName}`; - const {key, titleStr, title_sub} = visible; - // 判断是否有修改名称 - if(titleStr === menuName){ + const {title, key} = visible; + if(title.trim() === titleToJudge){ setAddMenuError("请修改名称"); return } // 找兄弟节点 const list = findBrotherNodesByKey(menuList, key) || []; - if(list.map(item=>item.titleStr).includes(menuName)){ + if(list.map(item=>item.title.trim()).includes(titleToJudge)){ setAddMenuError("不能与同级目录名称相同"); return } @@ -379,16 +381,17 @@ export default function Sidebar(props) { }) if(isEditName === 2){ // 编辑页面名称-> 修改wiki + const oldTitle = title.substring(title.indexOf('[[')+2, title.indexOf(']]')) updateWiki({ owner, repo: projectsId, projectId: project.id, // 原名称 - pageName: title_sub, + pageName: oldTitle, // 现名称 title: menuName, content_base64: wikiContent, - message: '', + commit_message: '', }).then(res=>{ if(res && res.message === '200'){ // 修改wiki名称接口请求成功,更新sidebar diff --git a/src/forge/Wiki/components/uploadWiki/index.jsx b/src/forge/Wiki/components/uploadWiki/index.jsx index 30cfe492c..4113752dd 100644 --- a/src/forge/Wiki/components/uploadWiki/index.jsx +++ b/src/forge/Wiki/components/uploadWiki/index.jsx @@ -59,8 +59,10 @@ export default function UploadWiki(props) { message.error('只能上传md、txt文件'); return false; } - if (/^-/.test(file.name)) { - message.error('文件名不能以-开头'); + + let regEn = /[\\/:*?"<>|[\]-]/g; + if (regEn.test(file.name)) { + message.error('文件名不能有特殊字符: \\ / : * ? \" < > | [ \] -'); return false; } @@ -84,7 +86,7 @@ export default function UploadWiki(props) { projectId: project.id, pageName: '_Sidebar', title: '_Sidebar', - message: '', + commit_message: '', content_base64: Base64.encode(treeToMd(sidebarList)) }).then(res => { if (res && res.message === "200") {