From 54eb1428de90d36c91ba4dbab03a5dbd13ca02d0 Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Fri, 14 Jul 2023 15:21:32 +0800 Subject: [PATCH 01/17] =?UTF-8?q?=E8=B5=84=E6=BA=90=E7=B1=BB=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/forge/Information/Pages/source.jsx | 73 ++++++++++++++------------ 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/src/forge/Information/Pages/source.jsx b/src/forge/Information/Pages/source.jsx index 40159495..d4fe165a 100644 --- a/src/forge/Information/Pages/source.jsx +++ b/src/forge/Information/Pages/source.jsx @@ -86,40 +86,45 @@ function Source(props){
-
- { - zoneList && zoneList.length>0&& - - } - { - typeList && typeList.length>0 && - - } -
+ { + (zoneList && zoneList.length>0 ) || (typeList && typeList.length >0 ) ? +
+ { + zoneList && zoneList.length>0 && + + } + { + typeList && typeList.length>0 && + + } +
+ :"" + } +
{ From 963a5e718600e219f846a34effe06cdf8b196f33 Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Fri, 14 Jul 2023 16:25:51 +0800 Subject: [PATCH 02/17] =?UTF-8?q?=E8=AF=84=E8=AE=BA=E6=97=B6=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E5=BD=B1=E5=93=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/forge/Issues/Component/comments/list.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/forge/Issues/Component/comments/list.scss b/src/forge/Issues/Component/comments/list.scss index 6230b613..be95b6e3 100644 --- a/src/forge/Issues/Component/comments/list.scss +++ b/src/forge/Issues/Component/comments/list.scss @@ -171,8 +171,8 @@ } .quillFlagBox{ color: red; - margin-top: -10px; margin-bottom: 5px !important; + height: 28px; } .addComments{ display: flex; From 4b6975b924f710f9092778c89feed9dd76c35b96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=80=9D?= <2897217417@qq.com> Date: Mon, 17 Jul 2023 15:36:45 +0800 Subject: [PATCH 03/17] =?UTF-8?q?=E4=B8=93=E5=8C=BA=E5=B8=AE=E5=8A=A9?= =?UTF-8?q?=E4=B8=AD=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 + .../Information/Component/publicBanner.jsx | 5 + src/forge/Information/Pages/help.jsx | 201 ++++++++++++++++++ src/forge/Information/img/zone1Menu8.png | Bin 0 -> 4895 bytes src/forge/Information/img/zoneMenu8.png | Bin 0 -> 3898 bytes src/forge/Information/index.jsx | 11 + src/forge/Information/index.scss | 69 ++++++ src/forge/Wiki/api.js | 55 ++++- 8 files changed, 342 insertions(+), 1 deletion(-) create mode 100644 src/forge/Information/Pages/help.jsx create mode 100644 src/forge/Information/img/zone1Menu8.png create mode 100644 src/forge/Information/img/zoneMenu8.png diff --git a/package.json b/package.json index 89c63dd0..2f6d33db 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "fs-extra": "3.0.1", "immutability-helper": "^2.6.6", "install": "^0.12.2", + "intersection-observer": "^0.12.2", "jest": "20.0.4", "js-base64": "^2.5.2", "js2wordcloud": "^1.1.12", @@ -92,6 +93,7 @@ "redux-thunk": "2.3.0", "rsuite": "^4.3.4", "scroll-into-view": "^1.14.2", + "scrollama": "^3.2.0", "sha1": "^1.1.1", "showdown": "^1.9.1", "showdown-katex": "^0.8.0", diff --git a/src/forge/Information/Component/publicBanner.jsx b/src/forge/Information/Component/publicBanner.jsx index 68519bd7..9c3a8193 100644 --- a/src/forge/Information/Component/publicBanner.jsx +++ b/src/forge/Information/Component/publicBanner.jsx @@ -19,6 +19,7 @@ function PublicBanner(props){ const project = /[A-Za-z0-9]{0,}\/projects/g; const source = /[A-Za-z0-9]{0,}\/source/g; const vip = /[A-Za-z0-9]{0,}\/VIP/g; + const help = /[A-Za-z0-9]{0,}\/help/g; if(pathname === `/zone/${deptId}`){ setKey("1"); } @@ -34,6 +35,9 @@ function PublicBanner(props){ else if(vip.test(pathname)){ setKey("6"); } + else if(help.test(pathname)){ + setKey("8"); + } } },[pathname]) @@ -55,6 +59,7 @@ function PublicBanner(props){ { tempConfig[temp].mainTitle } {/* Sig小组 */} { tempConfig[temp].member } + {data && data.helperShow === 1 && {data.helperTitle}} { adminUrl && {window.location.href=adminUrl}}>后台管理 }
diff --git a/src/forge/Information/Pages/help.jsx b/src/forge/Information/Pages/help.jsx new file mode 100644 index 00000000..077b7600 --- /dev/null +++ b/src/forge/Information/Pages/help.jsx @@ -0,0 +1,201 @@ +import React, { useEffect, useState } from 'react'; +import { Box, LongWidth } from '../../Component/layout'; +import { Affix, Input, message, Spin, Tree } from 'antd'; +import Nodata from '../../Nodata'; +import nodata from '../img/nodata.png'; +import { tempEnum } from '../tempInfo'; +import { findFirstWiki, generateList, getParentKey, getWiki, parseSidebar, wikiPages } from '../../Wiki/api'; +import RenderHtml from '../../../components/render-html'; +import { Base64 } from 'js-base64'; +import { getTocContent } from '../../../common/marked'; + +const { Search } = Input; +const { DirectoryTree, TreeNode } = Tree; + +function ProjectSource(props) { + const [loading, setLoading] = useState(false); + const [wikiList, setWikiList] = useState(undefined); + const [flattenedMenuList, setFlattenedMenuList] = useState([]); + const [initMenuList, setInitMenuList] = useState([]); + const [expandedKeys, setExpandedKeys] = useState(undefined); + const [wiki, setWiki] = useState(undefined); + const [wikiDetail, setWikiDetail] = useState(undefined); + const [autoExpandParent, setAutoExpandParent] = useState(true); + const [searchValue, setSearchValue] = useState(""); + const [wikiContMenu, setWikiContMenu] = useState(undefined); + const { temp, history, data } = props; + let scroller = undefined; + + const { owner, identifier, projectId } = (data && data.gitlinkProject) || {}; + const wikiParams = { + owner, + repo: identifier, + projectId + }; + + useEffect(() => { + if(!owner) return + // 获取wiki 列表 + wikiPages(wikiParams).then(async res => { + if (res && res.message === "200") { + setWikiList(res.data); + // 解析sidebar获取目录list + const info = await parseSidebar(res.data, wikiParams); + if (!info) return + const { menuList } = info; + // 默认打开第一个wiki + const firstWiki = findFirstWiki(menuList); + if(firstWiki){ + setWiki(firstWiki.titleStr); + } + setFlattenedMenuList(generateList(menuList)); + setInitMenuList(menuList); + } else { + setWikiList([]); + } + }) + }, [owner]) + + useEffect(() =>{ + if(!wiki){ + return + } + // 获取wiki内容 + setLoading(true); + getWiki({ + pageName: wiki, + ...wikiParams + }).then(res=>{ + setLoading(false); + if (res && res.message === "200") { + setWikiDetail(res.data); + const tocContent = getTocContent(); + setWikiContMenu(tocContent); + } else { + message.error("加载失败") + } + }) + }, [wiki]) + + useEffect(() => { + if (scroller) { + scroller.destroy(); + } + if (!document.querySelector('.wikiContentHC .markdown_anchors')) { + return; + } + require('intersection-observer'); + // 默认第一个高亮 + setTimeout(() => { + const linkNode = document.querySelectorAll(`.wikiContMenuBox li a`)[0]; + linkNode && (linkNode.className = 'current'); + }, 100); + const scrollama = require('scrollama'); + scroller = scrollama(); + scroller + .setup({ + step: '.wikiContentHC .markdown_anchors', + offset: 0.3, + }) + .onStepEnter(({ element }) => { + [].forEach.call(document.querySelectorAll('.wikiContMenuBox li a'), node => { + node.className = ''; + }); + const currentNode = document.querySelectorAll(`.wikiContMenuBox li a[href="#${element.id}"]`)[0]; + if (currentNode) { + currentNode.className = 'current'; + } + }) + }, [wikiDetail]) + + function changeSearchValue(value) { + if (value) { + // 找到命中搜索的item的父元素 + const expandedKeys = flattenedMenuList.map(item => { + if (item.title.match(new RegExp(value, 'i'))) { + return getParentKey(item.key, initMenuList); + } + return null; + }).filter((item, i, self) => item && self.indexOf(item) === i); + setSearchValue(value); + setExpandedKeys(expandedKeys); + } else { + setSearchValue(""); + } + } + + // 收起展开 + function onExpand(expandedKeys) { + setAutoExpandParent(false); + setExpandedKeys(expandedKeys); + } + + // 选中节点 + function selectTree(keys,event){ + let {titleStr, isFile} = event.node.props.dataRef; + if(isFile){ + setWiki(titleStr); + } + } + + function renderTreeNodes(data) { + return data && data.length > 0 && data.map((item) => { + const index = item.titleStr.indexOf(searchValue); + const beforeStr = item.titleStr.substr(0, index); + const afterStr = item.titleStr.substr(index + searchValue.length); + const title = index > -1 ? ( + + {beforeStr} + {searchValue} + {afterStr} + + ) : ( + {item.titleStr} + ); + return ( + + {renderTreeNodes(item.children)} + + ); + }); + } + + return ( +
+
+

{data && data.helperTitle}

+ + { + wikiList && (wikiList.length > 0 ? + {/* wiki目录导航 */} +
+ + + {renderTreeNodes(initMenuList)} + +
+ {/* 内容区 */} + {wikiDetail && + + +
{wikiDetail.name}
+ {wikiDetail.commit &&
更新时间:{wikiDetail.commit.author.date}
} + {wikiDetail.md_content && } +
+ {wikiContMenu && wikiContMenu !== "
    " && +
    +
    } +
    +
    } +
    : (temp === tempEnum.zone1 ? : ))} +
    +
    +
    + ) +} +export default ProjectSource; diff --git a/src/forge/Information/img/zone1Menu8.png b/src/forge/Information/img/zone1Menu8.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d69ffe6e8d4bd1cc49bf83cb7a2e476fcdc946 GIT binary patch literal 4895 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 IM6N<$f-P87VE_OC literal 0 HcmV?d00001 diff --git a/src/forge/Information/index.jsx b/src/forge/Information/index.jsx index 33cc40bf..e4cf7a5d 100644 --- a/src/forge/Information/index.jsx +++ b/src/forge/Information/index.jsx @@ -55,6 +55,11 @@ const Main = Loadable({ loading: Loading, }); +const Help = Loadable({ + loader: () => import("./Pages/help"), + loading: Loading, +}); + function Index(props){ const [ data , setData ] = useState(undefined); const [ adminUrl , setAdminUrl ] = useState(undefined); @@ -153,6 +158,12 @@ function Index(props){
    )} > + {data && data.helperShow === 1 && ( + + )} + >} ( diff --git a/src/forge/Information/index.scss b/src/forge/Information/index.scss index f3cc17d7..d5013dc8 100644 --- a/src/forge/Information/index.scss +++ b/src/forge/Information/index.scss @@ -1347,6 +1347,75 @@ } } } +// 帮助中心 +.zoneHelpBox{ + .leftMenuHC{ + width: 290px; + min-height: 500px; + overflow-x: auto; + &::-webkit-scrollbar{ + display: none; + } + background-image: linear-gradient(269.73deg,#ffffff 0%,rgba(255, 255, 255, 0) 100%); + padding: 25px 15px; + .ant-tree.ant-tree-directory > .menuHcNode span.ant-tree-node-content-wrapper.ant-tree-node-selected, .ant-tree.ant-tree-directory .ant-tree-child-tree > .menuHcNode span.ant-tree-node-content-wrapper.ant-tree-node-selected{ + color: var(--primary-color); + } + .ant-tree.ant-tree-directory > .menuHcNode.ant-tree-treenode-selected > span.ant-tree-switcher, .ant-tree.ant-tree-directory .ant-tree-child-tree > .menuHcNode.ant-tree-treenode-selected > span.ant-tree-switcher{ + color: var(--primary-color); + } + .ant-tree.ant-tree-directory > .menuHcNode span.ant-tree-node-content-wrapper:hover::before, .ant-tree.ant-tree-directory .ant-tree-child-tree > .menuHcNode span.ant-tree-node-content-wrapper:hover::before{ + background: var(--more-light-color); + } + .menuHcNode{ + .ant-tree-node-selected::before{ + background: none !important; + } + } + .searchHC.ant-input-affix-wrapper{ + &:hover .ant-input, .ant-input:focus{ + border-color: var(--primary-color) !important; + } + } + .searchHC .ant-input-search-icon:hover{ + color: var(--primary-color); + } + } + .wikiTitleHC{ + font-weight: 700; + } + .wikiUpdateTimeHC{ + color:#6c7283; + } + .wikiContentBox{ + min-height: 500px; + background-color: #fff; + padding: 20px 40px; + } + .wikiContMenuBox{ + border-left: 3px solid #e6e8ef; + padding: 5px 0 5px 15px; + min-width: 100px; + max-width: 220px; + margin-left: 60px; + background-color: #fff; + a{ + color:#6c7283; + &.current{ + color: var(--primary-color); + position: relative; + &::before{ + content: ""; + position: absolute; + left: -18px; + width:3px; + height:30px; + background-color: var(--primary-color); + } + } + } + } +} .primaryColor{ color: var(--primary-color)!important; } \ No newline at end of file diff --git a/src/forge/Wiki/api.js b/src/forge/Wiki/api.js index 6b6ee58a..75aade83 100644 --- a/src/forge/Wiki/api.js +++ b/src/forge/Wiki/api.js @@ -115,10 +115,16 @@ export function markdownToTree(markdownText){ } lines.map((item, index) =>{ const title = item.trim(); + const isFile = title.startsWith('[[') && title.endsWith(']]'); const node = { + // 带空格+[[]]或者- 标识 title: item, children: [], - key: undefined + key: undefined, + // 纯内容 + titleStr: isFile ? title.substring(2, title.length - 2) : title.substring(2, title.length), + // 是否是wiki文件 + isFile: isFile } // level:空格的个数(层级) const level = item.search(/\S/); @@ -200,4 +206,51 @@ function readList(list, readChildren){ list.push(item.title) readList(list, item.children) }) +} + +export function generateList(list) { + const dataList = []; + generate(list); + + function generate(data){ + for (let i = 0; i < data.length; i++) { + const node = data[i]; + const { key, titleStr } = node; + dataList.push({ key, title: titleStr }); + if (node.children) { + generate(node.children); + } + } + } + + return dataList; +}; + +export const getParentKey = (key, tree) => { + let parentKey; + for (let i = 0; i < tree.length; i++) { + const node = tree[i]; + if (node.children) { + if (node.children.some(item => item.key === key)) { + parentKey = node.key; + } else if (getParentKey(key, node.children)) { + parentKey = getParentKey(key, node.children); + } + } + } + return parentKey; +}; + +export function findFirstWiki(list){ + for (let index = 0; index < list.length; index++) { + const element = list[index]; + if (element.isFile) { + return element; + }else if (element.children.length) { + let result = findFirstWiki(element.children); + if (result) { + return result; + } + } + } } \ No newline at end of file From 6938de1c63e259eeb9bde03ba0850336a40b2f76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=80=9D?= <2897217417@qq.com> Date: Mon, 17 Jul 2023 15:37:37 +0800 Subject: [PATCH 04/17] =?UTF-8?q?=E7=BC=96=E8=BE=91wiki=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=8C=E9=BC=A0=E6=A0=87=E8=87=AA=E5=8A=A8=E8=81=9A=E7=84=A6?= =?UTF-8?q?=E5=88=B0=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/forge/Wiki/EditWiki.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/forge/Wiki/EditWiki.jsx b/src/forge/Wiki/EditWiki.jsx index d2fbf215..1daf28d0 100644 --- a/src/forge/Wiki/EditWiki.jsx +++ b/src/forge/Wiki/EditWiki.jsx @@ -332,6 +332,7 @@ export default Form.create()(({ form, history, showNotification, projectDetail, placeholder={"请输入标题"} className="contact-input" maxLength={50} + autoFocus /> )} @@ -343,6 +344,7 @@ export default Form.create()(({ form, history, showNotification, projectDetail, initValue={content} onChange={onContentChange} className="mt20 wikiMEDEditor" + isFocus={false} > {getFieldDecorator('md_content', { rules: [{ required: true, message: "请输入wiki内容" }], From 1bfc8fad56573ca24b78687abd1750dc801e0ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=80=9D?= <2897217417@qq.com> Date: Tue, 18 Jul 2023 13:39:51 +0800 Subject: [PATCH 05/17] =?UTF-8?q?=E5=8F=91=E8=A1=8C=E7=89=88=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/forge/Main/version/version.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/src/forge/Main/version/version.scss b/src/forge/Main/version/version.scss index 69d3734c..ee7d527e 100644 --- a/src/forge/Main/version/version.scss +++ b/src/forge/Main/version/version.scss @@ -152,7 +152,6 @@ justify-content: space-between; width: 100%; height: 18px; - line-height: 18px; margin-top: -5px; } From 2bd6ebe7c28fe4e60f0e64581ade2646f90589a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=80=9D?= <2897217417@qq.com> Date: Tue, 18 Jul 2023 13:43:32 +0800 Subject: [PATCH 06/17] =?UTF-8?q?=E9=87=8C=E7=A8=8B=E7=A2=91=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E6=B7=BB=E5=8A=A0=E9=87=8C=E7=A8=8B=E7=A2=91?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/forge/Order/MilepostDetail.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/forge/Order/MilepostDetail.jsx b/src/forge/Order/MilepostDetail.jsx index 98714591..f7c6603a 100644 --- a/src/forge/Order/MilepostDetail.jsx +++ b/src/forge/Order/MilepostDetail.jsx @@ -186,6 +186,8 @@ function MilepostDetail(props){ {history.push(`/${owner}/${projectsId}/issues/${mileId}/new`)}} checklogin className="operateButton ml20">+ 创建疑修
    } + {/* 里程碑描述 */} +
    {milepost && milepost.description}
    From 6a3c5c8291954bd086ce7d52f880b18d5f9eddcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=80=9D?= <2897217417@qq.com> Date: Tue, 18 Jul 2023 14:22:35 +0800 Subject: [PATCH 07/17] =?UTF-8?q?=E6=B3=A8=E5=86=8C=E3=80=81=E6=89=BE?= =?UTF-8?q?=E5=9B=9E=E5=AF=86=E7=A0=81=E8=87=AA=E5=8A=A8=E8=81=9A=E7=84=A6?= =?UTF-8?q?=E5=88=B0=E7=AC=AC=E4=B8=80=E4=B8=AA=E8=BE=93=E5=85=A5=E6=A1=86?= =?UTF-8?q?=EF=BC=8C=E6=89=BE=E5=9B=9E=E5=AF=86=E7=A0=81=E5=81=B6=E7=8E=B0?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E9=AA=8C=E8=AF=81=E7=A0=81=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E6=97=A0=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/loginRegister/Register.jsx | 12 +----------- src/modules/loginRegister/ResetPassword.jsx | 8 +------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/src/modules/loginRegister/Register.jsx b/src/modules/loginRegister/Register.jsx index 51886199..6c8251ae 100644 --- a/src/modules/loginRegister/Register.jsx +++ b/src/modules/loginRegister/Register.jsx @@ -26,10 +26,6 @@ function Register(props){ const [setting, setSetting] = useState(undefined); const seconds = useRef(); let interval = undefined; - //页面加载完自动聚焦到第一个输入框 - // const inputEl = useRef(null); - - useEffect(()=>{ //获取第三方登录平台信息 @@ -220,11 +216,6 @@ function Register(props){ } } - useEffect(() => { - // inputEl.current.focus(); - // clear; - }, []) - function changeRegisterType(type){ setGetCaptchaBut(false); setRegisterType(type); @@ -277,8 +268,7 @@ function Register(props){ ], validateTrigger:"onBlur", validateFirst: true, - // ref={inputEl} - })()} + })()} {getFieldDecorator('email',{ diff --git a/src/modules/loginRegister/ResetPassword.jsx b/src/modules/loginRegister/ResetPassword.jsx index b460e3f8..363bc2e8 100644 --- a/src/modules/loginRegister/ResetPassword.jsx +++ b/src/modules/loginRegister/ResetPassword.jsx @@ -18,8 +18,6 @@ function ResetPassword(props) { const [emailGo, setEmailGo] = useState(true); const seconds = useRef(); let interval = undefined; - //页面加载完自动聚焦到第一个输入框 - const inputEl = useRef(null); // 配置网页标题 useEffect(()=>{ @@ -187,10 +185,6 @@ function ResetPassword(props) { } } - useEffect(() => { - inputEl.current.focus(); - }, []) - return (
    @@ -213,7 +207,7 @@ function ResetPassword(props) { ], validateTrigger: "onBlur", validateFirst: true, - })()} + })()} From 1f824c306bc760f4fe7d86014965e4f787e78eab Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Tue, 18 Jul 2023 17:49:20 +0800 Subject: [PATCH 08/17] =?UTF-8?q?=E4=B8=93=E5=8C=BA-=E8=B5=84=E8=AE=AF?= =?UTF-8?q?=E8=AF=A6=E6=83=85-=E6=89=8B=E6=9C=BA=E7=AB=AF=E9=80=82?= =?UTF-8?q?=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/css/edu-all.css | 6 -- public/css/edu-main.css | 4 - public/css/edu-purge.css | 7 -- public/index.html | 2 +- src/common/UrlTool.js | 15 +++ src/common/educoder.js | 2 +- .../Component/mobile/accessory.jsx | 34 +++++++ .../Information/Component/mobile/index.scss | 73 +++++++++++++++ src/forge/Information/Pages/newsDetail.jsx | 88 ++++++++++++------ src/forge/Information/img/f_banner.png | Bin 0 -> 54202 bytes src/forge/Information/img/gitlink-gz.png | Bin 0 -> 8862 bytes src/forge/Information/img/gitlink-qq.png | Bin 0 -> 9293 bytes src/forge/Information/img/logo.png | Bin 0 -> 5740 bytes src/forge/Information/img/p_banner.png | Bin 0 -> 13993 bytes src/forge/Information/index.jsx | 7 +- src/forge/Information/index.scss | 61 ++++++++++++ src/forge/css/index.scss | 6 ++ src/index.css | 4 + src/modules/tpm/TPMIndexHOC.js | 7 +- 19 files changed, 264 insertions(+), 52 deletions(-) create mode 100644 src/forge/Information/Component/mobile/accessory.jsx create mode 100644 src/forge/Information/Component/mobile/index.scss create mode 100644 src/forge/Information/img/f_banner.png create mode 100644 src/forge/Information/img/gitlink-gz.png create mode 100644 src/forge/Information/img/gitlink-qq.png create mode 100644 src/forge/Information/img/logo.png create mode 100644 src/forge/Information/img/p_banner.png diff --git a/public/css/edu-all.css b/public/css/edu-all.css index 6485f231..777a0b89 100644 --- a/public/css/edu-all.css +++ b/public/css/edu-all.css @@ -7854,12 +7854,6 @@ a.singlepublishtwo { - -.markdown-body { - text-align: justify; - word-break: break-all; -} - .RightPaneDrawer .ant-drawer-content { background: #070f1a; overflow: hidden !important; diff --git a/public/css/edu-main.css b/public/css/edu-main.css index 220057e1..4ec0d24a 100644 --- a/public/css/edu-main.css +++ b/public/css/edu-main.css @@ -4200,10 +4200,6 @@ html>body #ajax-indicator { color: #898989 !important; } -.markdown-body { - text-align: justify; - word-break: break-all; -} .RightPaneDrawer .ant-drawer-content { background: #070f1a; diff --git a/public/css/edu-purge.css b/public/css/edu-purge.css index a530fe9b..694a4b03 100644 --- a/public/css/edu-purge.css +++ b/public/css/edu-purge.css @@ -6635,13 +6635,6 @@ ul.count_ul li:not(:last-child):after { } - - -.markdown-body { - text-align: justify; - word-break: break-all; -} - .RightPaneDrawer .ant-drawer-content { background: #070f1a; overflow: hidden !important; diff --git a/public/index.html b/public/index.html index dc4f44d2..c009e128 100755 --- a/public/index.html +++ b/public/index.html @@ -55,7 +55,7 @@ - + <%= htmlWebpackPlugin.tags.bodyTags %> diff --git a/src/modules/page/layers/ImageLayerOfCommentHOC.js b/src/modules/page/layers/ImageLayerOfCommentHOC.js index a2482612..3e51d8c1 100644 --- a/src/modules/page/layers/ImageLayerOfCommentHOC.js +++ b/src/modules/page/layers/ImageLayerOfCommentHOC.js @@ -16,20 +16,25 @@ export function ImageLayerOfCommentHOC(options = {}) { onDelegateClick = (event) => { const imageSrc = event.target.src || event.target.getAttribute('src') || event.target.getAttribute('href') // 判断imageSrc是否是图片 - const fileName = event.target.innerHTML.trim() - if (isImageExtension(imageSrc.trim()) || isImageExtension(fileName) || event.target.tagName == 'IMG') { - // 非回复里的头像图片; 非emoticons - if (imageSrc.indexOf('/images/avatars/User') === -1 && - imageSrc.indexOf('kindeditor/plugins/emoticons') === -1) { - this.setState({ - showImage: true, - imageSrc, - }) + const fileName = event.target.innerHTML.trim(); + const parentNodeUrl = event.target.parentNode && event.target.parentNode.getAttribute('href'); + if(parentNodeUrl){ + window.location.href = parentNodeUrl; + }else{ + if (isImageExtension(imageSrc.trim()) || isImageExtension(fileName) || event.target.tagName == 'IMG') { + // 非回复里的头像图片; 非emoticons + if (imageSrc.indexOf('/images/avatars/User') === -1 && + imageSrc.indexOf('kindeditor/plugins/emoticons') === -1) { + this.setState({ + showImage: true, + imageSrc, + }) + } + event.stopPropagation() + event.preventDefault && event.preventDefault() + event.originalEvent.preventDefault() + return false; } - event.stopPropagation() - event.preventDefault && event.preventDefault() - event.originalEvent.preventDefault() - return false; } } From faf52461a4294fe98677b9777a5c1be3af21ee7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=80=9D?= <2897217417@qq.com> Date: Fri, 21 Jul 2023 17:30:27 +0800 Subject: [PATCH 17/17] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=AF=84=E5=AE=A1?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=94=BE=E5=BC=80=E7=BB=99=E4=BB=93=E5=BA=93?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E8=80=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/forge/Merge/MessageCount.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/forge/Merge/MessageCount.js b/src/forge/Merge/MessageCount.js index 31999465..e1190ebf 100644 --- a/src/forge/Merge/MessageCount.js +++ b/src/forge/Merge/MessageCount.js @@ -368,6 +368,7 @@ class MessageCount extends Component { ); const permission = projectDetail && (projectDetail.permission === "Admin" || projectDetail.permission === "Owner" || projectDetail.permission === "Manager"); + const permissionByCodeReview = projectDetail && (projectDetail.permission === "Admin" || projectDetail.permission === "Owner" || projectDetail.permission === "Manager" || projectDetail.permission === "Developer") const userLogin = current_user && current_user.login; const operate = userLogin && projectDetail && pr_status === 0 && permission; const open_blockchain = project && project.open_blockchain; @@ -507,7 +508,7 @@ class MessageCount extends Component { )} - {userLogin && projectDetail && permission && ( + {userLogin && projectDetail && permissionByCodeReview && (