diff --git a/package-lock.json b/package-lock.json index a032840a7..96077ad36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3875,6 +3875,52 @@ "warning": "^4.0.3" } }, + "cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "requires": { + "cross-spawn": "^7.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "cross-fetch": { "version": "3.1.4", "resolved": "https://registry.nlark.com/cross-fetch/download/cross-fetch-3.1.4.tgz", @@ -7261,12 +7307,14 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "optional": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7281,17 +7329,20 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "optional": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "optional": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -7408,7 +7459,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "optional": true }, "ini": { "version": "1.3.5", @@ -7420,6 +7472,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -7434,6 +7487,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -7441,12 +7495,14 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "optional": true }, "minipass": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -7465,6 +7521,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", + "optional": true, "requires": { "minimist": "^1.2.5" } @@ -7526,7 +7583,8 @@ "npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "optional": true }, "npm-packlist": { "version": "1.4.8", @@ -7554,7 +7612,8 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "optional": true }, "object-assign": { "version": "4.1.1", @@ -7566,6 +7625,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "optional": true, "requires": { "wrappy": "1" } @@ -7679,6 +7739,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -16566,6 +16627,11 @@ } } }, + "save-dev": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/save-dev/-/save-dev-0.0.1-security.tgz", + "integrity": "sha512-k6knZTDNK8PKKbIqnvxiOveJinuw2LcQjqDoaorZWP9M5AR2EPsnpDeSbeoZZ0pHr5ze1uoaKdK8NBGQrJ34Uw==" + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", diff --git a/package.json b/package.json index b2edcb1bb..736bba88c 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "code-prettify": "^0.1.0", "codemirror": "^5.53.0", "connected-react-router": "4.4.1", + "cross-env": "^7.0.3", "css-loader": "^3.5.2", "dompurify": "^2.0.15", "dotenv": "4.0.0", @@ -103,6 +104,7 @@ "redux-thunk": "2.3.0", "rsuite": "^4.3.4", "sass-loader": "7.3.1", + "save-dev": "0.0.1-security", "scroll-into-view": "^1.14.2", "showdown": "^1.9.1", "showdown-katex": "^0.8.0", @@ -122,7 +124,7 @@ }, "scripts": { "start": "node --max_old_space_size=15360 scripts/start.js", - "build": "NODE_ENV=production node --max_old_space_size=15360 scripts/build.js", + "build": "cross-env NODE_ENV=production node --max_old_space_size=15360 scripts/build.js", "test-build": "NODE_ENV=testBuild node --max_old_space_size=15360 scripts/build.js", "pre-build": "NODE_ENV=preBuild node --max_old_space_size=15360 scripts/build.js", "gen_stats": "NODE_ENV=production webpack --profile --config=./config/webpack.config.prod.js --json > stats.json", diff --git a/public/css/edu-purge.css b/public/css/edu-purge.css index de4566ebf..1ec104461 100644 --- a/public/css/edu-purge.css +++ b/public/css/edu-purge.css @@ -1760,6 +1760,14 @@ a.decoration { margin-bottom: 10px; } +.mb12 { + margin-bottom: 12px; +} + +.mb13 { + margin-bottom: 13px; +} + .mb14 { margin-bottom: 14px; } diff --git a/public/css/iconfont.css b/public/css/iconfont.css index e3577f72d..b56825c0e 100644 --- a/public/css/iconfont.css +++ b/public/css/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 2340181 */ - src: url('iconfont.woff2?t=1632447048516') format('woff2'), - url('iconfont.woff?t=1632447048516') format('woff'), - url('iconfont.ttf?t=1632447048516') format('truetype'); + src: url('iconfont.woff2?t=1632792244115') format('woff2'), + url('iconfont.woff?t=1632792244115') format('woff'), + url('iconfont.ttf?t=1632792244115') format('truetype'); } .iconfont { @@ -13,6 +13,22 @@ -moz-osx-font-smoothing: grayscale; } +.icon-wenjian7:before { + content: "\e8e0"; +} + +.icon-xiangyoujiantou:before { + content: "\e8de"; +} + +.icon-xiangzuojiantou:before { + content: "\e8df"; +} + +.icon-a-liulanicon2x:before { + content: "\e8dd"; +} + .icon-wenjianicon:before { content: "\e8dc"; } diff --git a/public/css/iconfont.js b/public/css/iconfont.js index a7af1d301..0e23ffb85 100644 --- a/public/css/iconfont.js +++ b/public/css/iconfont.js @@ -1 +1 @@ -!function(c){var l,a,h,i,o,z='',t=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss"),p=function(c,l){l.parentNode.insertBefore(c,l)};if(t&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}function v(){o||(o=!0,h())}function m(){try{i.documentElement.doScroll("left")}catch(c){return void setTimeout(m,50)}v()}l=function(){var c,l;(l=document.createElement("div")).innerHTML=z,z=null,(c=l.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",l=c,(c=document.body).firstChild?p(l,c.firstChild):c.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(l,0):(a=function(){document.removeEventListener("DOMContentLoaded",a,!1),l()},document.addEventListener("DOMContentLoaded",a,!1)):document.attachEvent&&(h=l,i=c.document,o=!1,m(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,v())})}(window); \ No newline at end of file +!function(c){var a,l,h,i,o,z='',t=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss"),p=function(c,a){a.parentNode.insertBefore(c,a)};if(t&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}function v(){o||(o=!0,h())}function m(){try{i.documentElement.doScroll("left")}catch(c){return void setTimeout(m,50)}v()}a=function(){var c,a;(a=document.createElement("div")).innerHTML=z,z=null,(c=a.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",a=c,(c=document.body).firstChild?p(a,c.firstChild):c.appendChild(a))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(a,0):(l=function(){document.removeEventListener("DOMContentLoaded",l,!1),a()},document.addEventListener("DOMContentLoaded",l,!1)):document.attachEvent&&(h=a,i=c.document,o=!1,m(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,v())})}(window); \ No newline at end of file diff --git a/public/css/iconfont.json b/public/css/iconfont.json index a7123711a..5acfb6e98 100644 --- a/public/css/iconfont.json +++ b/public/css/iconfont.json @@ -5,6 +5,34 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "24656750", + "name": "文件", + "font_class": "wenjian7", + "unicode": "e8e0", + "unicode_decimal": 59616 + }, + { + "icon_id": "630094", + "name": "向右箭头", + "font_class": "xiangyoujiantou", + "unicode": "e8de", + "unicode_decimal": 59614 + }, + { + "icon_id": "630095", + "name": "向左箭头", + "font_class": "xiangzuojiantou", + "unicode": "e8df", + "unicode_decimal": 59615 + }, + { + "icon_id": "24600282", + "name": "浏览icon@2x", + "font_class": "a-liulanicon2x", + "unicode": "e8dd", + "unicode_decimal": 59613 + }, { "icon_id": "24567893", "name": "文件icon", diff --git a/public/css/iconfont.ttf b/public/css/iconfont.ttf index c7d91d7b4..40b718bea 100644 Binary files a/public/css/iconfont.ttf and b/public/css/iconfont.ttf differ diff --git a/public/css/iconfont.woff b/public/css/iconfont.woff index 006a519e5..567beb570 100644 Binary files a/public/css/iconfont.woff and b/public/css/iconfont.woff differ diff --git a/public/css/iconfont.woff2 b/public/css/iconfont.woff2 index d846ded10..3e49f131d 100644 Binary files a/public/css/iconfont.woff2 and b/public/css/iconfont.woff2 differ diff --git a/src/forge/Component/Releases.jsx b/src/forge/Component/Releases.jsx index 6d4d0acf4..2e4e22b0d 100644 --- a/src/forge/Component/Releases.jsx +++ b/src/forge/Component/Releases.jsx @@ -17,7 +17,8 @@ function Releases({owner,projectsId,releaseVersions , baseOperate , projectType} key === 0 &&

- {item.name} + {/* 如果是点击最新则发行版列表页只展示最新的一个 */} + {item.name} 最新

{item.created_at}

diff --git a/src/forge/Component/User.jsx b/src/forge/Component/User.jsx index 3066518b8..0d970173f 100644 --- a/src/forge/Component/User.jsx +++ b/src/forge/Component/User.jsx @@ -5,6 +5,7 @@ import { Link } from 'react-router-dom'; export default ({ url , name , column , id , login })=>{ const Img = styled.span` display:flex; + font-weight: bold; ${column && "flex-direction: column;text-align:center;"} align-items: center; & img{ @@ -15,7 +16,6 @@ export default ({ url , name , column , id , login })=>{ ${!column && ` & span{ margin-left:8px; - font-weight: bold; }` } `; diff --git a/src/forge/Main/CoderRootCommit.js b/src/forge/Main/CoderRootCommit.js index 6c9b03273..183523888 100644 --- a/src/forge/Main/CoderRootCommit.js +++ b/src/forge/Main/CoderRootCommit.js @@ -6,6 +6,7 @@ import { AlignTop } from '../Component/layout'; import SelectBranch from '../Branch/Select'; import Nodata from '../Nodata'; +import User from '../Component/User' import Tree from './img/tree.png'; import axios from 'axios'; import {Link} from "react-router-dom"; @@ -19,6 +20,12 @@ function returnbar(str){ } return str; } + +function timeFormat(seconds) { + const time = new Date(seconds*1000); + return time.getFullYear()+"-"+(time.getMonth()+1)+"-"+time.getDate()+" "+(time.getHours()+1)+":"+time.getMinutes(); +} + //代码库--提交页面 class CoderRootCommit extends Component{ constructor(props){ @@ -36,8 +43,12 @@ class CoderRootCommit extends Component{ componentDidMount=()=>{ this.Init(); this.getBranchs(); + // goBack + // addEventListener } + // componentde + // 获取分支列表 getBranchs=()=>{ const { projectsId , owner } = this.props.match.params; @@ -90,7 +101,8 @@ class CoderRootCommit extends Component{ image_url:item.author && item.author.image_url, sha:item.sha, time_from_now:item.time_from_now, - message:item.message + message:item.message, + timestamp:item.timestamp }) }) this.setState({ @@ -116,6 +128,7 @@ class CoderRootCommit extends Component{ }) this.getCommitList(branchName , page , limit); } + render(){ const { commitDatas , dataCount , limit , page , isSpining , branchList } = this.state; const { projectDetail, commit_class , defaultBranch } = this.props; @@ -144,29 +157,25 @@ class CoderRootCommit extends Component{
- {item.message} +
{item.message}

- { - item.id ? - - {item.image_url?:""} - - : - - {item.image_url?:""} - - - } + + {item.timestamp && }

-
- +
+ sha - {truncateCommitId(`${item.sha}`)} - + {truncateCommitId(`${item.sha}`)} +
diff --git a/src/forge/Main/Diff.jsx b/src/forge/Main/Diff.jsx index 192b80e3c..5330b9df3 100644 --- a/src/forge/Main/Diff.jsx +++ b/src/forge/Main/Diff.jsx @@ -4,11 +4,10 @@ import { Button ,Spin } from "antd"; import { truncateCommitId } from '../common/util'; import { getImageUrl } from 'educoder'; import Files from '../Merge/Files'; - import Tree from "./img/tree.png"; import User from "../Component/User"; - import axios from "axios"; +import { Link } from "react-router-dom"; const Infos = styled.div` border: 1px solid #FAFCFF; @@ -17,7 +16,7 @@ const Infos = styled.div` background-color: #f1f8ff; border: 1px solid rgba(42, 97, 255, 0.23); border-radius: 3px 3px 0px 0px; - padding: 10px 8px 10px 16px; + padding: 10px 20px 10px 16px; & .f-wrap-between{ align-items: center; } @@ -32,22 +31,25 @@ const Infos = styled.div` } } & > .f-wrap-between { - padding: 14px 8px 14px 16px; + padding: 14px 20px 14px 16px; border-radius: 3px 3px 0px 0px; border: 1px solid #D0D0D0; .df{ align-items: center; + & .underline:hover{ + text-decoration: underline; + } } } `; //提交详情页 -export default ({ match , history }) => { +export default (props) => { + const {match , history } = props; const [data, setData] = useState({undefined}); const [commit, setCommit] = useState(undefined); const [parents, setParents] = useState(undefined); const [committer, setCommitter] = useState(undefined); const [isSpin, setIsSpin] = useState(true); - const { sha , projectsId, owner, branchName } = match.params; useEffect(() => { if (projectsId && owner && sha) { @@ -68,6 +70,11 @@ export default ({ match , history }) => { }); } }, [projectsId , owner, sha]); + + function timeFormat(seconds) { + const time = new Date(seconds*1000); + return time.getFullYear()+"-"+(time.getMonth()+1)+"-"+time.getDate()+" "+(time.getHours()+1)+":"+time.getMinutes(); + } return (
@@ -76,10 +83,10 @@ export default ({ match , history }) => {
- {commit && commit.message && -
{commit.message}
- } - {branchName} + {commit && commit.message && +
{commit.message}
+ } + {branchName}
@@ -87,10 +94,12 @@ export default ({ match , history }) => {
    - {commit && commit.time_from_now &&
  • 提交于{commit.time_from_now}
  • } + {commit && commit.timestamp &&
  • 提交于{timeFormat(commit.timestamp)}
  • }
  • { @@ -99,7 +108,7 @@ export default ({ match , history }) => {
    sha - {truncateCommitId(item.sha)} + {truncateCommitId(item.sha)}
    ) }) diff --git a/src/forge/Main/version/Empty.jsx b/src/forge/Main/version/Empty.jsx index 5dac793ec..3200d3e8f 100644 --- a/src/forge/Main/version/Empty.jsx +++ b/src/forge/Main/version/Empty.jsx @@ -5,15 +5,15 @@ import './version.scss'; function Empty({operation,addFunc}) { return(
    - - 这里暂未发布过任何版本 + + 这里暂未发布过任何版本 发行版功能基于仓库中的历史标记
    建议使用类似 V1.0 的版本标记作为发布点
    { operation ? : - 该项目暂时没有发布版本 + 该项目暂时没有发布版本 }
    diff --git a/src/forge/Main/version/New.jsx b/src/forge/Main/version/New.jsx index 6b1dc2489..d9028b848 100644 --- a/src/forge/Main/version/New.jsx +++ b/src/forge/Main/version/New.jsx @@ -130,7 +130,7 @@ export default Form.create()( setBranch(params); } return ( -
    +
    @@ -211,18 +211,18 @@ export default Form.create()( )}

    -

    -

    标签命名建议

    +

    标签命名建议

    通常的做法是在版本名称前加上字母 v 前缀, v1.0 或者 v2.3.4。

    @@ -232,13 +232,13 @@ export default Form.create()(

    -

    语义化版本

    +

    语义化版本

    如果你是第一次发布版本,我们强烈建议你阅读语义化版本

    -

    附件大小说明

    +

    附件大小说明

    单个附件不能超过 100M(GVP 项目200M),每个仓库总附件不可超过 1G(推荐项目不可超过 5G;GVP 项目不可超过 diff --git a/src/forge/Main/version/version.js b/src/forge/Main/version/version.js index 9feec8894..44b20919c 100644 --- a/src/forge/Main/version/version.js +++ b/src/forge/Main/version/version.js @@ -2,19 +2,24 @@ import React, { useEffect , useState } from "react"; import { Link } from 'react-router-dom'; import { Spin , Button } from 'antd'; import { getImageUrl } from 'educoder'; +import {truncateCommitId} from '../../common/util'; import Empty from './Empty'; import './version.scss'; import axios from 'axios'; +import Tree from '../img/tree-black.png'; import RenderHtml from '../../../components/render-html'; function version(props) { + console.log(props); const [ data , setData ] = useState(undefined); const [ releases , setReleases ] = useState(undefined); const [ isSpin , setIsSpin ] = useState(true); const { projectsId ,owner } = props.match.params; - const { isManager , isDeveloper } = props; + const { isManager, isDeveloper, location , user } = props; const type = props.projectDetail && props.projectDetail.type; - + const turnFromNew = location && location.query && location.query.turnFromNew; + const current_user_login = user && user.login; + owner && console.log(owner); useEffect(()=>{ getIssueList(); },[]) @@ -24,6 +29,9 @@ function version(props) { axios.get(url).then((result) => { if (result) { setData(result.data); + const { releases = [] } = result.data; + //默认第一个展开(body参数) + releases.length && (releases[0].bodyshow = true); setReleases(result.data.releases); setIsSpin(false); } @@ -31,7 +39,6 @@ function version(props) { console.log(error); }) } - // 显示版本描述 function showBody(key,flag){ var lists = releases.concat(); @@ -39,7 +46,67 @@ function version(props) { lists.splice(); setReleases(lists); } - + //删除 + function deleteRelease(releaseId) { + console.log(releaseId); + if(releaseId){ + axios.delete(`/${owner}/${projectsId}/releases/${releaseId}.json`).then((result)=>{ + if(result){ + getIssueList(); + } + }) + } + } + function release(item,key){ + return ( +

    + + {item.draft} + + + {item.tag_name}{item.draft === "预发行" ?"(standalone)":""} + + + + {truncateCommitId(item.sha)} + + +
    +
    + 发布{item.name}{item.draft === "预发行" ?"(standalone)版本":""} + + { + (isManager || isDeveloper) && type !==2 && + + } + {current_user_login == owner && {deleteRelease(item.version_id)}}>} + +
    + + showBody(key,item.bodyshow)}> + + {item.user_name} + 发布于{item.created_at} + + { + item.bodyshow && +
    + +
    + } + +

    + {item.tag_name}.TAR.gz + {item.tag_name}.ZIP +

    + {/* 发行版附件下载 */} + {item.attachments && item.attachments.map((item)=>{ + return({item.title}) + })} +
    +
    + ) + } function renderList(releases){ if (releases && releases.length > 0) { return ( @@ -51,47 +118,7 @@ function version(props) {
    }
    - { - releases.map((item, key) => { - return ( -
    - - {item.draft} - - - {item.tag_name}{item.draft === "预发行" ?"(standalone)":""} - - -
    -
    - 发布{item.name}{item.draft === "预发行" ?"(standalone)版本":""} - { - (isManager || isDeveloper) && type !==2 && - - } -
    - - showBody(key,item.bodyshow)}> - - {item.user_name} - 发布于{item.created_at} - - { - item.bodyshow && -
    - -
    - } - -

    - {item.tag_name}.TAR.gz - {item.tag_name}.ZIP -

    -
    -
    - ) - }) - } + {!turnFromNew ? releases.map((item, key) => release(item,key)) : release(releases[0],0)}
    ) diff --git a/src/forge/Main/version/version.scss b/src/forge/Main/version/version.scss index 6f04e060d..7985f3740 100644 --- a/src/forge/Main/version/version.scss +++ b/src/forge/Main/version/version.scss @@ -42,7 +42,7 @@ content: ''; width: 8px; height: 8px; - background-color: #5091FF; + background-color: #466AFF; border-radius: 50%; } .sendAuthorImg{ @@ -51,6 +51,9 @@ border-radius: 50%; margin-right: 5px; } + .body-show{ + padding: 5px 10px 10px 10px; + } } .versionTag{ display: inline; @@ -242,6 +245,9 @@ flex:1; padding-right: 40px; box-sizing: border-box; + .ant-select-auto-complete.ant-select .ant-input:hover,.ant-input:hover { + border-color: rgba(153, 153, 153, 0.8); + } } .versionTips{ width:268px; @@ -298,7 +304,7 @@ position: relative; &>p{ position: absolute; - bottom: 0px; + bottom: -5px; } } .itemInline .ant-row{ diff --git a/src/forge/Merge/Files.jsx b/src/forge/Merge/Files.jsx index 64f09a787..c5bd17688 100644 --- a/src/forge/Merge/Files.jsx +++ b/src/forge/Merge/Files.jsx @@ -10,6 +10,7 @@ const {Link} =Anchor; function Files({data,history,owner,projectsId}){ const [ files , setFiles ] = useState(data && data.files); const [ copyfileTipTitle, setCopyfileTipTitle] = useState("复制文件路径"); + const [ isOpen, setIsOpen] = useState(false); useEffect(()=>{ if(data){ @@ -38,15 +39,14 @@ function Files({data,history,owner,projectsId}){ } const folderOpen = ( - -
    - {files && files.length>1 && files.map((item, key) => { + ) return(
    - - - - + +
    {setIsOpen(!isOpen)}}> + + 共有 {data && data.files_count} 个文件 被更改,包括 { data && data.total_addition ? {data && data.total_addition} 次插入:"" } { data && data.total_addition && data.total_deletion ? " 和 ":""} { data && data.total_deletion ? {data && data.total_deletion} 次删除:""} - +
    + {isOpen && folderOpen}
    { files && files.length>0 && @@ -83,10 +84,11 @@ function Files({data,history,owner,projectsId}){ { files.map((item,key)=>{ return( -
    +
    + - {!item.isBin ? showDown(item.flag,key,item.isBin)}>:""} + {!item.isBin ? showDown(item.flag,key,item.isBin)}>:""} showDown(item.flag,key,item.isBin)}>{item.name} .ant-anchor-link-title { - color: #466AFF; -} -.ant-popover-inner-content{ +.folders{ + position: absolute; + z-index: 2; + left: 0px; + top: 37px; color: #333333; width: 75rem; + box-shadow: 0px 4px 8px 2px rgba(212, 212, 212, 0.5); + border-radius: 4px; + border: 1px solid rgba(153, 153, 153, 0.32); + .ant-anchor-link-active > .ant-anchor-link-title { + color: #466AFF; + } + .ant-anchor-link { + padding: 0px; + } .folderList{ - max-height: 280px; + max-height: 275px; overflow:auto; .files{ border: 0px; diff --git a/src/forge/Team/Setting/TeamSettingCommon.jsx b/src/forge/Team/Setting/TeamSettingCommon.jsx index 1b3dc8422..e4f5cf7a6 100644 --- a/src/forge/Team/Setting/TeamSettingCommon.jsx +++ b/src/forge/Team/Setting/TeamSettingCommon.jsx @@ -122,11 +122,7 @@ export default Form.create()( validator:checkname } ], -<<<<<<< HEAD ,true -======= - ,true ->>>>>>> 465ae57b071299c682f2c8d57d3380aa647c7d23 )} {helper( "组织名称:", diff --git a/src/forge/Upload/Index.js b/src/forge/Upload/Index.js index 1858e5fd1..713803aa3 100644 --- a/src/forge/Upload/Index.js +++ b/src/forge/Upload/Index.js @@ -109,7 +109,7 @@ class Index extends Component { : {icon || } -

    拖动文件或点击此处上传

    +

    拖动文件或点击此处上传

    ) } diff --git a/src/forge/css/index.scss b/src/forge/css/index.scss index 9c2c60b4b..dfca6e632 100644 --- a/src/forge/css/index.scss +++ b/src/forge/css/index.scss @@ -88,12 +88,18 @@ ul,ol,dl{ display: flex; flex-wrap: wrap; align-items: center; + &>span, & a:link, a:visited{ + color: #333; + } + &>span{ + cursor: default; + } } .commitDesc{ flex:1; line-height:20px; word-break: break-all; - width: 48rem; + width: 49rem; overflow: hidden; white-space: normal; &:hover{ @@ -327,4 +333,13 @@ button.ant-btn-primary.btnblue{ background-color:rgba(70, 106, 255, 0.85); border-color:rgba(70, 106, 255, 0.85); } +} +button.btngrey{ + background-color:#FFFFFF; + border-color:#D0D0D0; + color: #666666; + &:hover,&:focus{ + border-color:rgba(153, 153, 153, 0.5); + color: #666666; + } } \ No newline at end of file