Merge pull request '代码库一级页面样式修改' (#59) from caishi/forgeplus-react:feature_repo_upgrade into feature_repo_upgrade

This commit is contained in:
jasder 2021-09-10 14:09:19 +08:00
commit 5f90b85c1d
46 changed files with 507 additions and 2199 deletions

View File

@ -1,3 +1,4 @@
@charset "utf-8";
/* 头部 */
.header {
width: 100%;
@ -1271,7 +1272,7 @@ html body {
font-size: 14px;
line-height: 2.0;
background: #fafafa;
font-family: "微软雅黑", "宋体";
font-family: "Microsoft YaHei", "SimSun";
color: #05101a;
height: 100%;
position: relative;
@ -1364,10 +1365,6 @@ a:visited {
color: #05101a;
}
a:hover {
color: #2A61FF!important;
}
ol,
ul,
li {
@ -2440,6 +2437,10 @@ a.hoverLine:hover{
color: #333333 !important;
}
a:hover{
color: #466AFF !important;
}
.color-grey-98 {
color: #989898 !important;
}
@ -2459,7 +2460,7 @@ a.hoverLine:hover{
.color-grey-B3 {
color: #B3B3B3 !important;
}
`
.color-grey-B4 {
color: #B4B4B4 !important;
}
@ -2481,7 +2482,7 @@ a.color-grey-3:hover,a.color-ooo:hover {
color: #2A61FF !important;
}
.color-blue-file {
color: #0054CC!important;
color: #4598FA!important;
}
/* 绿色 */
/*主*/

View File

@ -19,7 +19,7 @@ import moment from 'moment'
import { MuiThemeProvider, createMuiTheme } from 'material-ui/styles';
import SiderBar from './forge/Component/SiderBar'
import { SnackbarHOC } from 'educoder'
import { SnackbarHOC } from 'educoder';
import { initAxiosInterceptors } from './AppConfig'
import { Provider } from 'react-redux';
import configureStore from './redux/stores/configureStore';
@ -39,6 +39,11 @@ const Projects = Loadable({
loader: () => import('./forge/Index'),
loading: Loading,
})
// forge项目详情
const ProjectDetail = Loadable({
loader: () => import("./forge/Main/DetailAdaptor"),
loading: Loading,
});
//forge安全设置
const Security = Loadable({
loader: () => import('./forge/SecuritySetting/Index'),
@ -92,8 +97,13 @@ const ProjectIndex = Loadable({
loading: Loading,
});
const CreateMerge = Loadable({
loader: () => import('./forge/Merge/NewMerge'),
loading: Loading,
})
// 此处仅维护前端可能的一级路由,不用进行项目或者组织判断的字段。
const keyWord = ["explore", "settings", "setting", "CCF", "mulan", "wiki", "issues", "setting", "trending", "code", "projects", "pulls", "mine", "login", "register", "email", "export", "nopage", "404", "403", "500", "501", "search"];
const keyWord = ["explore", "settings", "setting", "mulan", "wiki", "issues", "setting", "trending", "code", "projects", "pulls", "mine", "login", "register", "email", "export", "nopage", "404", "403", "500", "501", "search", "organize"];
class App extends Component {
constructor(props) {
@ -268,6 +278,13 @@ class App extends Component {
}
} />
{/* 项目PR */}
<Route path="/:owner/:projectsId/pulls/new"
render={
(props) => (<ProjectDetail {...this.props} {...props} {...this.state} />)
}
></Route>
{/*项目*/}
<Route
path={"/:owner/:projectId/devops/:opsId/detail"}
@ -348,7 +365,7 @@ class App extends Component {
return (<OrganizeIndex {...props} {...this.props} {...this.state} />)
}
}>
</Route> : pathType === '404' ? <Route path="/" component={Shixunnopage} /> :
</Route> : pathType === '404' ? <Route component={Shixunnopage} />:
<Route exact path="/"
render={
(props) => (
@ -360,6 +377,7 @@ class App extends Component {
}
/>
// <Route path="/" component={Loading} />
// <Route path="/" component={Shixunnopage} />
}

View File

@ -11,9 +11,9 @@ broadcastChannelOnmessage('refreshPage', () => {
})
function locationurl(list) {
// if (window.location.port !== "3007") {
if (window.location.port !== "3007") {
window.location.href = list
// }
}
}
// TODO 开发期多个身份切换
let debugType = ""
@ -86,7 +86,7 @@ export function initAxiosInterceptors(props) {
if (response.data.status === 404) {
let responseURL = response.request ? response.request.responseURL:'';
if (responseURL.indexOf('/api/users/') === -1 && responseURL.indexOf('/api/organizations/') === -1 && responseURL.indexOf('/api/owners/') === -1) {
if (responseURL.indexOf('/api/users/') === -1 && responseURL.indexOf('/api/organizations/') === -1 ) {
locationurl('/nopage');
}
}

View File

@ -26,9 +26,9 @@ export default (({ projectsId , branch , owner , changeBranch , branchList , tag
<div className="branch-tagBox">
{/* {nav === 0 ?"分支":"标签"} */}
<span className="color-grey-9 mr3 ml8"><i className="iconfont icon-fenzhi2 font-18"></i></span>
<a className="ant-dropdown-link task-hide">
<span className="ant-dropdown-link task-hide" style={{fontWeight:"500"}}>
{showValue}
</a>
</span>
<i className="showtag iconfont icon-sanjiaoxing-down font-15 color-grey-9 mr5 ml5 mt1" />
</div>
</Dropdown>

View File

@ -1,136 +0,0 @@
.branchDropdown {
border: 1px solid #eee;
border-radius: 4px;
display: flex;
justify-content: center;
height: 40px;
line-height: 40px;
min-width: 220px;
}
.branchDropdown .ant-dropdown-trigger {
width: 100%;
padding: 0px 15px;
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
}
.branchOptions {
width: 220px;
box-shadow: 0px 0px 3px 1px rgba(134, 134, 134, 0.4);
border-radius: 3px;
background: #fff;
max-height: 300px;
}
.OptionsUl {
max-height: 220px;
overflow-y: auto;
}
.OptionsUl li {
height: 30px;
line-height: 30px;
cursor: pointer;
padding: 0px 20px;
margin: 5px 0px;
}
.OptionsUl li:hover {
background-color: #F0F0F0;
}
.OptionsUl li a {
display: block;
}
.OptionsInput {
height: 32px;
padding-left: 4px;
line-height: 32px;
width: 100%;
}
.branch-tagBox {
border: 1px solid #D0D0D0;
border-radius: 3px;
height: 32px;
display: flex;
align-items: center;
cursor: pointer;
min-width: 104px;
}
.branch-tagBox:hover {
background-color: #F3F4F6;
}
.branch-tagBox-list {
background: #FFFFFF;
box-shadow: 0px 4px 8px 2px rgba(212, 212, 212, 0.5);
border-radius: 4px;
}
.branch-tagBox-list .ant-popover-arrow {
display: none;
}
.branch-tagBox-list.ant-popover.ant-popover-placement-bottom {
padding-top: 0px;
}
.branch-tagBox-list .branch-tagBox .ant-dropdown-link {
display: block;
flex: 1;
max-width: 105px;
}
.branch-tagBox-list .ant-popover-inner-content {
padding: 0px;
}
.overlayBranch {
width: 325px;
}
.overlayBranch .navUl {
margin-top: 8px;
height: 30px;
line-height: 30px;
}
.overlayBranch .navUl li {
height: 30px;
line-height: 30px;
padding: 0px 5px;
margin-left: 20px !important;
}
.listTips {
padding: 20px 0px;
text-align: center;
}
.urlMenu {
line-height: 30px;
margin-bottom: 10px;
padding: 15px 20px 0px 20px;
border-bottom: none;
}
.urlMenu li.ant-menu-item {
height: 30px;
line-height: 30px;
padding: 0px 5px;
margin-right: 20px !important;
}
.urlMenu li.ant-menu-item.ant-menu-item-selected, .urlMenu li.ant-menu-item.ant-menu-item-active {
color: #333;
}
.urlMenu li.ant-menu-item.ant-menu-item-selected {
border-color: #1890ff !important;
}
.urlMenu li.ant-menu-item.ant-menu-item-active {
border-color: transparent;
}
.copytool {
margin: 0px 10px;
}
/*# sourceMappingURL=branch.css.map */

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["branch.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACG;;;AAEH;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;AACA;EACE;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;;;AAGJ;EACE;;AACA;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;;AAIN;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;;AAEF;EACE;;;AAIN;EACE","file":"branch.css"}

View File

@ -162,20 +162,29 @@ li.ant-menu-item{
margin:0px 20px!important;
}
}
.hoverA{
display:flex;
align-items: center;
max-width: 78px;
&:hover a{
color:#2A61FF !important ;
}
}
.menuPanels{
width: 295px;
.leftline{
position: relative;
color: #666;
height: 16px;
margin-left: 14px;
font-size: 12px;
&::before{
position: absolute;
left: -10px;
left: -7px;
top:3px;
height: 12px;
width: 1px;
background-color: #666666;
background-color: #999;
content: "";
}
}
@ -203,9 +212,15 @@ li.ant-menu-item{
background: #F3F4F6;
}
}
.ant-btn{
width: 102px;
height: 32px;
line-height: 30px;
}
.ant-btn-primary{
color: #fff;
background-color: #2A61FF;
background-color: #466AFF;
border-color: #466AFF;
}
.focusPanelHeadInfo{
padding:14px 16px;
@ -228,8 +243,12 @@ li.ant-menu-item{
display: flex;
align-items: center;
}
.menuMaininfos{
padding:10px 16px 14px;
border-bottom: 1px solid #eee;
}
.menuinfos{
padding:10px 20px;
padding:10px 20px 16px;
&>a{
display: flex;
flex-direction: column;

View File

@ -46,32 +46,47 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
}
}
function renderOrganize(list) {
let str = "";
list.map(i=>{
str = str+i.name + "、";
})
return str && str.substr(0,str.length - 1);
}
function setMenusFunc(data){
if(data){
let ele = (
<Spin spinning={isSpin}>
<FlexAJ>
<FlexAJ className="menuMaininfos">
<AlignCenter>
<Link to={`/${data.login}`}><img src={getImageUrl(`/${data.image_url}`)} alt="" className="radius" width="38px" height="38px"/></Link>
<Link to={`/${data.login}`} className="ml10">{data.name}</Link>
<div className="ml10">
<Link to={`/${data.login}`}>{data.name}</Link>
{ data.location && <span className="leftline">{data.location}</span> }
{
data.organizations && data.organizations.length>0&&
<p className="task-hide" style={{maxWidth:"215px"}}>
所属组织{renderOrganize(data.organizations)}
</p>
}
</div>
</AlignCenter>
{
data.is_watch ? <a className="color-grey-9" onClick={()=>FocusFunc(false,data.login)}>取消关注</a>:<a className="color-blue" onClick={()=>FocusFunc(true,data.login)}>关注</a>
}
</FlexAJ>
<AlignCenter className="menuinfos">
<a href={data.projects_url}>
<Link to={`/${data.login}/projects`}>
<span>{data.projects_count}</span>
<span>项目数</span>
</a>
<a href={data.followers_url}>
</Link>
<Link to={`/${data.login}/followers`}>
<span>{data.followers_count}</span>
<span>粉丝数</span>
</a>
<a href={data.following_url}>
</Link>
<Link to={`/${data.login}/following`}>
<span>{data.following_count}</span>
<span>关注数</span>
</a>
</Link>
</AlignCenter>
<div className={"pb20"} style={{display:"flex",justifyContent:'center'}}>
{
@ -134,10 +149,10 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
return(
<div className="halfs">
<FlexAJ>
<AlignCenter><span className="font-16 color-grey-6">贡献者</span>{ contributors && contributors.total_count > 0 && <span className="infoCount">{contributors.total_count}</span>}</AlignCenter>
<Link className="font-12 color-grey-9" to={`/${owner}/${projectsId}/contribute`}>全部</Link>
</FlexAJ>
<Link to={`/${owner}/${projectsId}/contribute`} className="font-16 color-ooo hoverA">
<span>贡献者</span>
{ contributors && contributors.total_count > 0 && <span className="infoCount">{contributors.total_count}</span>}
</Link>
<div className="attrPerson" onMouseLeave={()=>setVisibleFunc(false)}>
{
total > 0 ?

View File

@ -26,6 +26,7 @@ function CopyTool({ beforeText, afterText, className , inputId , timeOut }) {
if (document.execCommand('copy')) {
document.execCommand('copy');
}
document.getSelection().removeAllRanges();
setTitle(afterText);
if(timeOut){

View File

@ -1,9 +0,0 @@
.ant-modal-mask {
z-index: 1001;
}
.ant-modal-wrap {
z-index: 1002;
}
/*# sourceMappingURL=EAccount.css.map */

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["EAccount.scss"],"names":[],"mappings":"AAAA;EACE;;;AAEF;EACE","file":"EAccount.css"}

View File

@ -1,19 +1,15 @@
import React from 'react';
import { AlignCenter , AlignTop , FlexAJ } from '../Component/layout';
import { AlignTop } from '../Component/layout';
import { Link } from 'react-router-dom';
function Releases({owner,projectsId,releaseVersions , baseOperate , projectType}){
return(
<div>
<FlexAJ>
<AlignCenter><Link to={`/${owner}/${projectsId}/releases`} className="font-16 color-ooo">发行版</Link>
{ releaseVersions && releaseVersions.total_count > 0 && <span className="infoCount">{releaseVersions.total_count}</span>}
</AlignCenter>
{/* {
baseOperate && projectType !==2 && <Link className="font-12 color-blue" to={`/projects/${owner}/${projectsId}/releases/new`}>新建</Link>
} */}
</FlexAJ>
<Link to={`/${owner}/${projectsId}/releases`} className="font-16 color-ooo hoverA">
<span>发行版</span>
{ releaseVersions && releaseVersions.total_count > 0 && <span className="infoCount">{releaseVersions.total_count}</span>}
</Link>
{
releaseVersions && releaseVersions.total_count>0 ?
releaseVersions.list.map((item,key)=>{

View File

@ -3,6 +3,7 @@ import { WhiteBack , Box , LongWidth , ShortWidth , Gap , AlignCenter , FlexAJ
import { Dropdown , Menu , Divider , Spin, Button , Typography } from 'antd';
import { getImageUrl } from "educoder";
import { Link } from 'react-router-dom';
import { truncateCommitId } from "../common/util";
import CloneAddress from '../Branch/CloneAddress';
import SelectBranch from '../Branch/Select';
@ -148,7 +149,6 @@ function CoderDepot(props){
setReadme(result.data.readme);
setEditReadme(false);
setHide(true);
console.log("dddd:",result.data.entries);
}
setTimeout(function(){setIsSpin(false);},500);
}).catch(error=>{setIsSpin(false);})
@ -209,7 +209,7 @@ function CoderDepot(props){
let b = branchName || defaultBranch;
let checkvalue = turnbar(b);
return (
<Menu>
<Menu className="fileMenu">
<Menu.Item>
<CheckProfile {...props} sureFunc={()=>urlLink(`/${owner}/${projectsId}/${checkvalue}/uploadfile${treeValue === undefined ? "" : `/${treeValue}`}`)}>上传文件</CheckProfile>
</Menu.Item>
@ -303,6 +303,7 @@ function CoderDepot(props){
const { current_user } = props;
const baseOperate = projectDetail && projectDetail.permission && projectDetail.permission !=="Reporter";
const fileOperate = type === "dir" && projectDetail && projectDetail.type !== 2 && ((projectDetail.permission && projectDetail.permission !=="Reporter") || (current_user && current_user.admin));
return(
<WhiteBack>
<UpdateDescModal desc={desc} website={website} lesson_url={lesson_url} visible={openModal} onCancel={()=>setOpenModal(false)} onOk={okUpdate}/>
@ -351,35 +352,42 @@ function CoderDepot(props){
}
</div>
<AlignCenter className="mr20">
<Link to={`/${owner}/${projectsId}/branches`} className="color-grey-9">
<i className="iconfont icon-fenzhi2 font-18 color-grey-9 mr3"></i>
<span className="color-grey-6 mr3">{projectDetail && projectDetail.branches && projectDetail.branches.total_count}</span>分支
<Link to={`/${owner}/${projectsId}/branches`} className="iconBtn">
<i className="iconfont icon-master_icon font-16"></i>
<span>分支</span>
<span>{projectDetail && projectDetail.branches && projectDetail.branches.total_count}</span>
</Link>
</AlignCenter>
<AlignCenter className="mr20">
<Link to={`/${owner}/${projectsId}/tags`} className="color-grey-9">
<i className="iconfont icon-biaoqian3 font-16 color-grey-9 mr3"></i>
<span className="color-grey-6 mr3">{projectDetail && projectDetail.tags && projectDetail.tags.total_count}</span>标签
<Link to={`/${owner}/${projectsId}/tags`} className="iconBtn">
<i className="iconfont icon-biaoqianicon font-16"></i>
<span>标签</span>
<span>{projectDetail && projectDetail.tags && projectDetail.tags.total_count}</span>
</Link>
</AlignCenter>
</AlignCenter>
<AlignCenter className="depotBtn">
{
baseOperate && ((projectDetail.type !== 2 && pullsFlag) || issuesFlag )&&
<div className="mr20 addOptionBtn">
<div className="addOptionBtn">
{
projectDetail.type !== 2 && pullsFlag &&
<CheckProfile {...props} sureFunc={()=>urlLink(`/${owner}/${projectsId}/pulls/new`)} >+ 合并请求</CheckProfile>
}
{
issuesFlag &&
<CheckProfile {...props} sureFunc={()=>urlLink(`/${owner}/${projectsId}/issues/new`)} >+ 任务</CheckProfile>
<CheckProfile {...props} sureFunc={()=>urlLink(`/${owner}/${projectsId}/issues/new`)} >+ 易修</CheckProfile>
}
</div>
}
{ fileOperate &&
<Dropdown overlay={fileMenu()} className="mr10" trigger={['click']}>
<Button type="default">文件 <i className="iconfont icon-sanjiaoxing-down ml3 font-14 color-grey-6 mr-5"></i></Button>
<Dropdown
overlay={fileMenu()}
className="mr10"
trigger={['click']}
getPopupContainer={document.parentNode}
>
<a>文件 <i className="iconfont icon-sanjiaoxing-down ml3 font-14 color-grey-6 mr-5"></i></a>
</Dropdown>
}
@ -395,15 +403,18 @@ function CoderDepot(props){
lastCommit &&
<div className="listtablehead">
<User url={getImageUrl(`/${lastCommitAuthor && lastCommitAuthor.image_url}`)} name={lastCommitAuthor && lastCommitAuthor.name} id={lastCommitAuthor && lastCommitAuthor.id} login={lastCommitAuthor && lastCommitAuthor.login}/>
<div className={hideBtn && hide ? "ellipsistxt hidetxt" :"ellipsistxt"}>
<pre id="ptxt">{lastCommit && lastCommit.message}</pre>
<div onClick={()=>props.history.push(`/${owner}/${projectsId}/commits/${truncateCommitId(lastCommit.sha)}`)} className={hideBtn && hide ? "ellipsistxt hidetxt" :"ellipsistxt"}>
<pre id="ptxt">{lastCommit.message}</pre>
</div>
{ hideBtn && <span className="ellipsis" onClick={()=>changeHide(hide)}><i className="iconfont icon-shenglvehao"></i></span> }
<span className="ml12 color-grey-9 mt3">{lastCommit && lastCommit.time_from_now}</span>
{ commitCount ? <Link to={`/${owner}/${projectsId}/commits/branch/${turnbar(branchName || defaultBranch)}`} className="ml12 color-grey-9">
<i className="iconfont icon-tijiao mr3 font-17 color-grey-9"></i>{commitCount}次提交
</Link>:"" }
<span className="ml20 color-grey-6 font-12 mt3">{lastCommit.time_from_now}</span>
{
commitCount ?
<Link to={`/${owner}/${projectsId}/commits/branch/${turnbar(branchName || defaultBranch)}`} className="ml20 color-grey-3"style={{height:"28px",lineHeight:"28px"}}>
<i className="iconfont icon-tijiaoicon mr3 font-16"></i><span style={{fontWeight:"500"}}>{commitCount}次提交</span>
</Link>:""
}
</div>
}
<ul className="listtablebody">
@ -458,10 +469,10 @@ function CoderDepot(props){
<ShortWidth>
<Gap style={{paddingLeft:"30px"}}>
<div className="panelmenu">
<FlexAJ className="font-18 color-grey-6 mb20" style={{lineHeight:"28px"}}>简介
<FlexAJ className="font-18 color-ooo mb20" style={{lineHeight:"28px"}}>关于
{
projectDetail.permission && (projectDetail.permission==="Admin" || projectDetail.permission==="Owner" || projectDetail.permission==="Manager") &&
<i onClick={()=>setOpenModal(true)} className="iconfont icon-anquanshezhi color-grey-9 font-15"></i>
<i onClick={()=>setOpenModal(true)} className="iconfont icon-a-shezhi color-grey-9 font-15"></i>
}
</FlexAJ>
{desc && <p className="font-14 color-grey-3 mb15 task-hide-2" style={{lineHeight:"24px",WebkitLineClamp:"4",textAlign:"justify",wordBreak:"break-all"}}>{desc}</p>}
@ -482,9 +493,9 @@ function CoderDepot(props){
</div>
{
projectDetail && projectDetail.license_name &&
<div>
<i className="iconfont icon-xieyiicon font-16 mr10 color-grey-6"></i>
<span className="color-grey-6">{projectDetail.license_name}</span>
<div className="pinfos">
<i className="iconfont icon-xieyiicon font-16 mr10"></i>
<Link to={`/${owner}/${projectsId}/tree/${branchName || defaultBranch}/LICENSE`} className="color-grey-6">{projectDetail.license_name}</Link>
</div>
}
</div>
@ -520,11 +531,11 @@ function CoderDepot(props){
}
{/* 贡献者 */}
{
projectDetail && projectDetail.contributors && projectDetail.contributors.length >0 &&
<Contributors contributors={projectDetail && projectDetail.contributors} owner={owner} projectsId={projectsId} />
projectDetail && projectDetail.contributors && projectDetail.contributors.total_count >0 &&
<Contributors contributors={projectDetail.contributors} owner={owner} projectsId={projectsId} />
}
{/* 语言 */}
{ projectDetail && projectDetail.languages && projectDetail.languages.length >0 &&
{ projectDetail && projectDetail.languages &&
<React.Fragment>
<Divider />
<LanguagePower languages={projectDetail.languages}/>

View File

@ -4,8 +4,8 @@ import { truncateCommitId } from '../common/util';
const typeIco = {
"submodule":"icon-file-submodule font-17",
"file":'icon-wenjian5 font-15',
"dir":"icon-wenjianjia3 font-15"
"file":'icon-wenjian6 font-15 color-blue-file',
"dir":"icon-wenjianjia4 font-15 color-blue_4C"
}
function CoderDepotCatalogue({item , goToSubRoot , owner , projectsId }){
@ -13,7 +13,7 @@ function CoderDepotCatalogue({item , goToSubRoot , owner , projectsId }){
<li>
<span>
<a onClick={()=>goToSubRoot(item.path,item.type,item.name)} className={item.type === "submodule" && "submoduleStyle"}>
<i className={`iconfont ${typeIco[`${item.type}`]} color-blue-file mr8`}></i>{item.name}
<i className={`iconfont ${typeIco[`${item.type}`]} mr8`}></i>{item.name}
</a>
</span>
<span title="init project">
@ -21,7 +21,7 @@ function CoderDepotCatalogue({item , goToSubRoot , owner , projectsId }){
{item.commit && item.commit.message}
</Link>
</span>
<span>{item.commit && item.commit.time_from_now}</span>
<span title={item.commit && item.commit.created_at}>{item.commit && item.commit.time_from_now}</span>
</li>
)
}

View File

@ -50,9 +50,9 @@ function CoderDepotReadme({ operate , history , readme , ChangeFile }){
<span>目录</span>
</span>
</Dropdown>
<a href="#readme ">
<span className="commonBox-title-read">README.md</span>
</a>
<span className="commonBox-title-read"><a href="#readme ">README.md</a></span>
</AlignCenter>
{
operate ?

View File

@ -1,12 +1,14 @@
import React, { Component } from 'react';
import { Spin, Tooltip, Button } from 'antd';
import { Spin, Tooltip } from 'antd';
import { Link, Route, Switch } from 'react-router-dom';
import { Content, AlignTop } from '../Component/layout';
import DetailBanner from './sub/DetailBanner';
import { numFormat } from 'educoder';
import '../css/index.scss'
import './list.scss';
import { ImageLayerOfCommentHOC } from "../../modules/page/layers/ImageLayerOfCommentHOC";
import Loadable from 'react-loadable';
import Loading from '../../Loading';
@ -472,7 +474,7 @@ class Detail extends Component {
<div>
<div className="detailHeader-wrapper">
<div className="normal">
<AlignTop style={{ padding: "20px 0px 10px", justifyContent: "space-between" }}>
<AlignTop style={{ padding: "18px 0px 10px", justifyContent: "space-between" }}>
<div>
<AlignTop>
<div className="projectallName">
@ -505,7 +507,7 @@ class Detail extends Component {
((current_user && current_user.admin) || isManager) && (projectDetail && projectDetail.type && projectDetail.type === 2) ?
<a className="synchronism ml30" onClick={this.synchronismMirror}>同步镜像</a> : ""
}
<Button className="detail_tag_btn">
<span className="detail_tag_btn">
<a className="detail_tag_btn_name" style={{ cursor: platform ? "pointer" : "default" }} onClick={() => this.focusFunc(watched)}>
<i className={watched ? "iconfont icon-shixing color-orange font-16 mr3" : "iconfont icon-kongxing color-grey-9 font-16 mr3"}></i>
<span>{watched ? '取消关注' : '关注'}</span>
@ -513,15 +515,15 @@ class Detail extends Component {
{
watchers_count > 0 ?
platform ?
<Link className="detail_tag_btn_count" style={{ color: `${watched ? "#2878FF" : "#666"}` }} to={platform ? { pathname: `/${owner}/${projectsId}/following`, state } : ""}>
<Link className="detail_tag_btn_count" style={{ color: `#666` }} to={platform ? { pathname: `/${owner}/${projectsId}/following`, state } : ""}>
{watchers_count}
</Link>
:
<span className="detail_tag_btn_count">{watchers_count}</span>
: ""
}
</Button>
<Button className="detail_tag_btn">
</span>
<span className="detail_tag_btn">
<a className="detail_tag_btn_name" style={{ cursor: platform ? "pointer" : "default" }} onClick={() => this.pariseFunc(praised)}>
<i className={praised ? "iconfont icon-weibiaoti105 color-orange font-14 mr3" : "iconfont icon-guanzhu color-grey-9 font-14 mr3"}></i>
<span>{praised ? '取消点赞' : '点赞'}</span>
@ -529,17 +531,17 @@ class Detail extends Component {
{
praises_count > 0 ?
platform ?
<Link className="detail_tag_btn_count" style={{ color: `${praised ? "#2878FF" : "#666"}` }} to={{ pathname: `/${owner}/${projectsId}/stargazers`, state }}>
<Link className="detail_tag_btn_count" style={{ color: `#666` }} to={{ pathname: `/${owner}/${projectsId}/stargazers`, state }}>
{praises_count}
</Link> :
<span className="detail_tag_btn_count">{praises_count}</span>
: ""
}
</Button>
<Button className="detail_tag_btn" loading={forkSpin}>
</span>
<span className="detail_tag_btn" loading={forkSpin}>
<Tooltip title="复刻是fork的中文名即复制代码仓库" placement="bottom">
<a className="detail_tag_btn_name" style={{ cursor: platform ? "pointer" : "default" }} onClick={this.forkFunc}>
<i className="iconfont icon-fork color-grey-9 mr3"></i>
<i className="iconfont icon-fork color-grey-9 mr3 font-16"></i><span></span>
</a>
</Tooltip>
{
@ -552,7 +554,7 @@ class Detail extends Component {
<span className="detail_tag_btn_count">{forked_count}</span>
: ""
}
</Button>
</span>
</span>
}
</div>
@ -781,4 +783,7 @@ class Detail extends Component {
}
}
export default Detail;
export default ImageLayerOfCommentHOC({
imgSelector: ".imageLayerParent img, .imageLayerParent .imageTarget",
parentSelector: ".newContainer",
})(Detail);

View File

@ -0,0 +1,28 @@
import React from 'react';
import { Route, Switch } from "react-router-dom";
import { withRouter } from "react-router";
import Loadable from "react-loadable";
import Loading from "../../Loading";
import { SnackbarHOC } from "educoder";
import { CNotificationHOC } from "../../modules/courses/common/CNotificationHOC";
import { TPMIndexHOC } from "../../modules/tpm/TPMIndexHOC";
// forge项目详情
const ProjectDetail = Loadable({
loader: () => import("../Main/Detail"),
loading: Loading,
});
export default withRouter(
(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC((props) => {
return (
<Switch>
<Route
path="/:owner/:projectsId"
render={(p) => (
<ProjectDetail {...props} {...p} />
)}
></Route>
</Switch>
)
}))))
)

View File

@ -1,375 +0,0 @@
.recommandOri.slick-slider {
width: 1300px;
margin: 20px auto 40px;
}
.recommandOri.slick-slider .slick-track {
margin-left: 0px;
}
.recommandOri.slick-slider .slick-slide li > a {
display: flex;
align-items: center;
justify-content: center;
}
/* recommandProjects */
.recommandProjects.slick-slider {
width: 1230px;
margin: 20px auto 40px;
}
.recommandProjects.slick-slider .slick-track {
margin-left: 0px;
}
.recommandProjects.slick-slider .slick-arrow.slick-prev:before, .recommandProjects.slick-slider .slick-arrow.slick-next:before {
color: #999;
}
.recommandProjects.slick-slider .slick-arrow.slick-prev li.slick-active button:before, .recommandProjects.slick-slider .slick-arrow.slick-next li.slick-active button:before {
color: #999;
}
.recommandProjects.slick-slider .slick-dots {
bottom: -29px;
}
.recommandProjects.slick-slider .slick-dots li button:before {
color: #909090;
}
.recommandProjects.slick-slider .slick-slide {
padding: 0px 15px;
box-sizing: border-box;
}
.recommandProjects.slick-slider .slick-slide > div {
background-color: #fff;
border-radius: 10px;
width: 100%;
cursor: pointer;
border: 1px solid #eee;
}
.recommandProjects.slick-slider .slick-slide > div:hover {
box-shadow: 0px 2px 20px 0px rgba(0, 0, 0, 0.1);
}
.recommandProjects.slick-slider .baseInfo {
padding: 18px 15px;
display: flex;
font-size: 12px;
color: #888;
}
.recommandProjects.slick-slider .baseInfo .look {
margin-right: 10px;
}
.recommandProjects.slick-slider .baseInfo .look i {
margin-right: 5px;
}
.recommandProjects.slick-slider .baseInfo .type {
flex: 1;
width: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
text-align: right;
}
.recommandProjects.slick-slider .mainInfo {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 160px;
border-bottom: 1px solid #eee;
padding: 20px;
box-sizing: border-box;
}
.recommandProjects.slick-slider .mainInfo img {
height: 50px;
width: 50px;
border-radius: 50%;
}
.recommandProjects.slick-slider .mainInfo .name {
font-size: 13px;
color: #666;
height: 18px;
line-height: 18px;
margin-top: 12px;
}
.recommandProjects.slick-slider .mainInfo .school {
margin-top: 12px;
color: #333;
font-size: 16px;
height: 22px;
line-height: 22px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
max-width: 100%;
}
.Panels {
max-width: 1200px;
margin: 0 auto;
}
.Panels .panelmenu {
padding-top: 30px;
}
.Panels .addOptionBtn {
height: 32px;
line-height: 30px;
display: flex;
border: 1px solid #d9d9d9;
border-radius: 2px;
}
.Panels .addOptionBtn a {
padding: 0px 13px;
color: rgba(0, 0, 0, 0.65);
cursor: pointer;
}
.Panels .addOptionBtn > a:first-child {
border-right: 1px solid #d9d9d9;
}
.Panels .addOptionBtn > a:last-child {
border-right: none;
}
.Panels .infoCount {
display: inline-block;
padding: 0px 5px;
height: 16px;
line-height: 16px;
background-color: #eee;
color: #999;
border-radius: 12px;
margin-left: 10px;
font-size: 12px;
}
.Panels .attrPerson {
padding-top: 15px;
display: flex;
flex-wrap: wrap;
}
.Panels .attrPerson a {
margin: 10px 10px 0px 0px;
}
.Panels .attrPerson a img {
border-radius: 50%;
width: 35px;
height: 35px;
}
.Panels .attrPerson a:nth-child(6) {
margin-right: 0px;
}
.Panels .progress {
display: flex;
border-radius: 10px;
height: 7px;
margin-top: 12px;
}
.Panels .progress span:first-child {
border-radius: 10px 0px 0px 10px;
}
.Panels .progress span:last-child {
border-radius: 0px 10px 10px 0px;
}
.Panels .progresstip {
margin-top: 15px;
flex-wrap: wrap;
}
.Panels .progresstip i.zero {
position: absolute;
display: block;
border-radius: 50%;
height: 8px;
width: 8px;
left: 0px;
top: 10px;
}
.Panels .progresstip > span {
padding-left: 15px;
position: relative;
min-width: 33.5%;
}
.Panels .progresstip > span span {
color: #666;
}
.Panels .progresstip > span span:last-child {
color: #999;
margin-left: 5px;
}
.Panels .listtable {
margin-top: 20px;
border: 1px solid #d9d9d9;
border-radius: 4px;
}
.Panels .listtable .listtablehead {
display: flex;
justify-content: space-between;
align-items: flex-start;
border-bottom: 1px solid #d9d9d9;
padding: 7px 20px;
border-radius: 4px 4px 0px 0px;
background-color: #FAFBFC;
}
.Panels .listtable .listtablehead .ellipsistxt {
margin-top: 6px;
margin-left: 13px;
line-height: 18px;
flex: 1;
width: 0;
color: #666;
}
.Panels .listtable .listtablehead .ellipsistxt #ptxt {
margin-bottom: 0px;
word-break: break-all;
overflow: unset;
white-space: pre-wrap;
/* css3.0 */
white-space: -moz-pre-wrap;
/* Firefox */
white-space: -pre-wrap;
/* Opera 4-6 */
white-space: -o-pre-wrap;
/* Opera 7 */
word-wrap: break-word;
}
.Panels .listtable .listtablehead .ellipsistxt.hidetxt {
height: 18px;
overflow: hidden;
position: relative;
padding-right: 8px;
}
.Panels .listtable .listtablehead .ellipsistxt.hidetxt::after {
position: absolute;
right: 0px;
bottom: 0px;
content: "...";
}
.Panels .listtable .listtablehead .ellipsis {
margin-left: 8px;
cursor: pointer;
border-radius: 2px;
background-color: #c1c1c1;
padding: 0px 4px;
height: 14px;
line-height: 14px;
margin-top: 9px;
}
.Panels .listtable .listtablehead .ellipsis i {
font-size: 15px !important;
color: #fff;
height: 14px;
line-height: 14px;
}
.Panels .listtable .listtablebody li.listtablepath a {
color: #40a9ff;
}
.Panels .listtable .listtablebody li.listtablepath p {
margin-bottom: 0px !important;
}
.Panels .listtable .listtablebody > li {
height: 42px;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #d9d9d9;
padding: 0px 20px 0px 24px;
}
.Panels .listtable .listtablebody > li > span:first-child {
width: 30%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.Panels .listtable .listtablebody > li > span:nth-child(2) {
width: 60%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.Panels .listtable .listtablebody > li > span:nth-child(3) {
width: 10%;
text-align: right;
}
.Panels .listtable .listtablebody > li:last-child {
border-bottom: none;
}
.drawerBtn {
position: fixed;
left: -13px;
border: 1px solid #cfcddf;
width: 34px;
border-radius: 0px 12px 12px 0px;
height: 70px;
top: 50%;
margin-top: -35px;
cursor: pointer;
display: flex;
flex-direction: column;
align-items: flex-end;
justify-content: center;
}
.drawerBtn:hover {
box-shadow: 1px 0px 7px rgba(0, 0, 0, 0.1);
}
.drawerBtn span {
writing-mode: vertical-lr;
color: #202429;
width: 25px;
}
.drawerBtn i {
color: #24292e;
height: 18px;
line-height: 18px;
width: 18px;
}
.downMenu {
width: 330px;
box-shadow: 0px 0px 9px rgba(134, 134, 134, 0.4);
background-color: #fff;
}
.downMenu .ant-menu-vertical .ant-menu-item:hover {
background-color: #e6f7ff;
}
.menuslist {
max-height: 200px;
overflow-y: auto;
padding: 10px 15px;
border-radius: 4px;
}
.menuslist .ant-dropdown-menu-item {
border-radius: 8px;
text-align: left !important;
}
.menuslist .ant-dropdown-menu-item a {
width: 350px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.menuslist .ant-dropdown-menu-item.active {
background-color: #e6f7ff;
}
.catelogue {
border: 1px solid lightgray;
font-size: 15px;
font-weight: normal;
border-radius: 5px;
margin-right: 10px;
padding: 0px 10px;
height: 30px;
line-height: 30px;
color: #666 !important;
display: flex;
align-items: center;
}
.catelogue span {
margin-top: 1px;
}
.submoduleStyle {
cursor: default;
}
.submoduleStyle i {
cursor: default;
}
.submoduleStyle:hover {
color: #05101a;
}
/*# sourceMappingURL=Index.css.map */

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["Index.scss"],"names":[],"mappings":"AAAA;EACE;EACA;;AACA;EACE;;AAGA;EAEE;EACA;EACA;;;AAIN;AACA;EACE;EACA;;AACA;EACE;;AAGA;EACE;;AAEF;EACE;;AAGJ;EACE;;AACA;EACE;;AAGJ;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;;AAIN;EACE;EACA;EACA;EACA;;AACA;EAIE;;AAHA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKN;EACE;EACA;;AACA;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;;AAEF;EACE;;AAEF;EACE;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AACA;EACE;;AACA;EACE;EACA;EACA;;AAEF;EACE;;AAIN;EACE;EACA;EACA;EACA;;AAEE;EACE;;AAEF;EACE;;AAIN;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AACA;EACE;;AACA;EACE;EACA;;AAKR;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EAWA;EACA;EACA;EACA;EACA;;AAdA;EACE;EACA;EACA;EACA;AAAsB;EACtB;AAA2B;EAC3B;AAAuB;EACvB;AAAyB;EACzB;;AAOF;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAIN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAMF;EAAE;;AACF;EACE;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;;AAGJ;EACE;;;AAKR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;;;AAGJ;EACE;EACA;EACA;;AACA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;;AAGJ;EACE;;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;;AAGJ;EACE;;AACA;EACE;;AAEF;EACE","file":"Index.css"}

View File

@ -256,11 +256,11 @@ class Index extends Component {
newItem = ()=>{
return(
<Menu>
<Menu.Item key="created_mirror">
<CheckProfile {...this.props} sureFunc={()=>{this.props.history.push('/projects/mirror/new')}}>新建镜像项目</CheckProfile>
</Menu.Item>
<Menu.Item key="created_deposit">
<CheckProfile {...this.props} sureFunc={()=>{this.props.history.push('/projects/deposit/new')}}>新建托管项目</CheckProfile>
<CheckProfile {...this.props} sureFunc={()=>{this.props.history.push('/projects/deposit/new')}}>新建项目</CheckProfile>
</Menu.Item>
<Menu.Item key="created_mirror">
<CheckProfile {...this.props} sureFunc={()=>{this.props.history.push('/projects/mirror/new')}}>导入项目</CheckProfile>
</Menu.Item>
</Menu>
)

View File

@ -13,6 +13,18 @@
}
}
}
.iconBtn{
i{
color: #666;
}
span{
margin-left: 4px;
color: #333!important;
}
&:hover span,&:hover i{
color: #466AFF!important;
}
}
/* recommandProjects */
.recommandProjects.slick-slider{
width: 1230px;
@ -130,26 +142,27 @@
}
.ant-btn-primary{
color: #fff;
background-color: #2A61FF;
background-color: #466AFF;
border-color: #466AFF;
}
}
}
.addOptionBtn{
height: 32px;
line-height: 30px;
.depotBtn,.addOptionBtn{
display: flex;
border:1px solid #d9d9d9;
border-radius: 2px;
a{
padding:0px 13px;
color: rgba(0, 0, 0, 0.65);
cursor: pointer;
}
& > a:first-child{
border-right: 1px solid #d9d9d9;
}
& > a:last-child{
border-right: none;
color: #333!important;
font-weight: 500!important;
border-radius: 5px;
width: 83px;
height: 32px;
line-height: 30px;
background: #fff;
border: 1px solid #D0D0D0;
margin-right: 10px;
text-align: center;
&:hover,&:active{
background: #F3F4F6;
}
}
}
.infoCount{
@ -183,15 +196,15 @@
}
.progress{
display: flex;
border-radius: 10px;
height: 7px;
border-radius: 2px;
height: 11px;
margin-top: 12px;
span{
&:first-child{
border-radius: 10px 0px 0px 10px;
border-radius: 2px 0px 0px 2px;
}
&:last-child{
border-radius: 0px 10px 10px 0px;
border-radius: 0px 2px 2px 0px;
}
}
}
@ -228,12 +241,13 @@
justify-content: space-between;
align-items: flex-start;
border-bottom: 1px solid #d9d9d9;
padding:13px 20px;
padding:12px 20px 11px;
border-radius: 4px 4px 0px 0px;
border: 1px solid rgba(42, 97, 255, 0.23);
background-color: #FAFCFF;
.ellipsistxt{
margin-top: 6px;
cursor: pointer;
#ptxt{
margin-bottom: 0px;
word-break: break-all;
@ -292,7 +306,7 @@
}
}
& > li{
height: 44px;
height: 38px;
display: flex;
justify-content: space-between;
align-items: center;
@ -369,6 +383,14 @@
line-height: 50px;
}
}
.fileMenu{
width: 83px;
li{
padding:6px 0px!important;
text-align: center;
width: 100%;
}
}
.catelogue{
cursor: pointer;
@ -403,7 +425,7 @@
.pinfos{
i,a{color: #666;}
&:hover i,&:hover a{
color: #2A61FF;
color: #2A61FF!important;
}
}
.graph{

View File

@ -41,22 +41,22 @@ class IndexItem extends Component {
{ !item.is_public && <span className="privateTag">私有</span> }
{
item.forked_from_project_id ?
<span className="ml5">
<Tooltip title="该项目是一个fork仓库" className="ml5">
<i className="iconfont icon-fork font-18 color-orange" />
</span>
</Tooltip>
: ""
}
{
item.type && item.type === 2 ?
<Tooltip title="该项目是一个镜像" className="ml5">
<Tooltip title="该项目是一个同步镜像仓库" className="ml5">
<i className="iconfont icon-banbenku font-18 color-green" />
</Tooltip>:""
}
{
item.type && item.type === 1 ?
<span className="ml5">
<Tooltip title="该项目是一个导入于其他网站的仓库" className="ml5">
<i className="iconfont icon-jingxiang font-18 color-green" />
</span>:""
</Tooltip>:""
}
</AlignCenter>
<span className="p-r-tags">

View File

@ -1,911 +0,0 @@
@charset "UTF-8";
.lineH2 {
line-height: 2;
}
.t_project_banner {
/* height: 260px;
background: url(../Images/banner_list.jpg) no-repeat center; */
background-color: #050d34;
}
.ProjectListIndex {
width: 1200px;
margin: 20px auto;
display: flex;
align-items: flex-start;
flex-wrap: wrap;
}
.list-left {
width: 26%;
padding-right: 20px;
box-sizing: border-box;
margin-bottom: 20px;
}
.list-left > div {
border: 1px solid #eee;
}
.list-left > div.bgcF {
border: none;
}
.list-right {
width: 74%;
background: #fff;
padding: 10px;
border: 1px solid #eee;
}
/* 首页列表的新建和排序的下拉列表 */
.ant-menu-inline, .ant-menu-vertical, .ant-menu-vertical-left {
border-right: none !important;
}
.ant-menu-vertical > .ant-menu-item {
margin: 0px !important;
height: 35px;
line-height: 35px;
border-bottom: 1px solid #eee;
font-size: 14px !important;
}
.ant-menu-vertical > .ant-menu-item:last-child {
border-bottom: none;
}
.list-r-operation {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
align-items: center;
padding: 25px 30px;
border-bottom: 1px solid #E0E0E0;
}
.list-r-Search {
width: 400px;
}
.padding0-25 {
padding: 0px 25px;
}
.list-r-Search .ant-btn-lg {
height: 38px;
}
.list-r-Search .ant-input-group-addon {
border: none !important;
}
.list-r-Search .ant-input-search-button {
height: 40px !important;
}
.createBtn {
border-radius: 4px;
margin-left: 20px;
display: inline-block;
padding: 3px 15px;
background-color: #4CACFF;
color: #fff !important;
}
/* 列表 */
.project-list {
padding: 0px 30px;
}
.border-top-grey {
border-top: 1px solid #eeeeee;
}
.p-r-Item:last-child {
border-bottom: none !important;
}
.p-r-Item {
display: flex;
border-bottom: 1px solid #eeeeee;
padding: 22px 0px;
justify-content: flex-start;
}
.boxShandow {
box-shadow: 0px 2px 20px 10px rgba(0, 0, 0, 0.03);
}
.p-r-photo {
width: 60px;
height: 60px;
border-radius: 50%;
margin-right: 22px;
margin-top: 8px;
}
.p-r-Infos {
flex: 1;
width: 0;
}
.p-r-name {
display: flex;
justify-content: space-between;
align-items: center;
}
.p-r-name > p {
flex: 1;
width: 0;
}
.p-r-btn {
display: flex;
align-items: center;
}
.p-r-btn > span {
height: 35px;
line-height: 35px;
border: 1px solid #f4f4f4;
border-radius: 5px;
display: block;
margin-left: 20px;
background-color: #fff;
display: flex;
}
.p-r-btn > span > a {
display: flex;
align-items: center;
padding: 0px 12px;
background: #ececec;
}
.p-r-btn > span > a:active {
background: #f4f4f4;
}
.p-r-btn > span > span {
padding: 0px 8px;
}
.p-r-tags {
display: flex;
opacity: 1;
}
.p-r-tags.large > span {
height: 30px;
line-height: 30px;
font-size: 14px;
}
.p-r-tags > span {
margin-left: 15px;
padding: 0px 10px;
border-radius: 15px;
background: #EBF4FE;
color: #333;
height: 24px;
line-height: 24px;
display: block;
font-size: 12px;
display: flex;
}
.p-r-tags > span.pariseTag {
background: #FFF3DC;
}
.p-r-tags.large > span > label {
padding: 0px 12px;
}
.p-r-tags > span > label {
padding: 0px 8px;
}
.p-r-tags.large > span > span {
padding: 0px 6px;
}
.pariseImg {
width: 14px;
height: 12px;
margin-top: 6px;
margin-right: 3px;
}
.p-r-tags > span > span {
display: block;
background: #fff;
border-left: #efefef;
padding: 0px 4px;
border-radius: 0px 4px 4px 0px;
color: #999;
}
.p-r-content {
margin-top: 10px;
color: #666;
display: flex;
}
.p-r-detail > span {
margin-right: 22px;
color: #888;
}
.p-r-detail > span > label {
color: #999;
}
.p-r-about {
display: flex;
justify-content: space-between;
flex-wrap: nowrap;
margin-top: 8px;
color: #666;
}
.spincontent {
height: 400px;
}
.spinstyle .ant-spin-text {
margin-top: 30px;
color: #888;
}
/* -----------详情------------ */
.detailHeader-wrapper {
background-color: #FBFCFF;
border-bottom: 1px solid #e2e2e2;
}
.headerMenu-wrapper {
display: flex;
flex-direction: row;
cursor: pointer;
}
.headerMenu-wrapper li {
position: relative;
text-align: center;
padding: 0px;
}
.headerMenu-wrapper li > a {
font-size: 14px;
height: 40px;
line-height: 28px;
padding: 0px 20px;
display: block;
color: #666;
}
.headerMenu-wrapper li > a > img {
margin-right: 8px;
}
.headerMenu-wrapper li > a > span.num {
line-height: 24px;
margin-left: 5px;
margin-top: 2px;
font-size: 12px;
float: right;
color: #666 !important;
background-color: rgba(153, 153, 153, 0.13);
border-radius: 50%;
width: 24px;
height: 24px;
}
.headerMenu-wrapper li.active a, .headerMenu-wrapper li.active a i {
color: #466AFF !important;
}
.headerMenu-wrapper li.active::after, .headerMenu-wrapper li:hover::after {
position: absolute;
bottom: 0px;
height: 2px;
background-color: rgba(153, 153, 153, 0.2);
content: "";
left: 0px;
width: 100%;
}
.headerMenu-wrapper li.active::after {
background-color: #466AFF;
}
.detail_tag_btn {
height: 32px;
line-height: 32px;
border-radius: 5px;
border: 1px solid #D0D0D0;
display: flex;
align-items: center;
margin-left: 10px;
padding: 0px;
background-color: #FAFBFC;
box-shadow: none;
}
.detail_tag_btn:hover {
background-color: #F3F4F6;
}
.detail_tag_btn .detail_tag_btn_name {
padding: 0px 18px;
min-width: 82px;
text-align: center;
}
.detail_tag_btn .detail_tag_btn_name:hover > span {
color: #333 !important;
}
.detail_tag_btn .detail_tag_btn_name img {
margin-right: 10px;
}
.detail_tag_btn .detail_tag_btn_count {
width: 42px;
text-align: center;
background: #fff;
border-radius: 0px 4px 4px 0px;
height: 100%;
border-left: 1px solid #D0D0D0;
}
.ant-tooltip {
max-width: fit-content !important;
}
.files-md {
padding: 20px;
}
/* 详情-代码 */
.branch-wrapper {
border: 1px solid #eee;
border-radius: 4px;
display: flex;
align-items: center;
height: 60px;
padding: 0px 30px;
width: 1200px;
margin: 0px auto;
background-color: #fff;
margin-top: 20px;
justify-content: space-between;
}
.branch-wrapper > a > i {
color: #5091FF;
margin-right: 5px;
cursor: default;
}
.branch-wrapper a {
display: flex;
align-items: center;
justify-content: center;
text-align: center;
height: 30px;
line-height: 30px;
cursor: pointer;
font-size: 16px;
color: #333333;
}
.branch-wrapper a > span {
position: relative;
min-height: 20px;
display: block;
}
.branch-wrapper a.active > span::after {
position: absolute;
content: "";
bottom: -5px;
width: 30px;
height: 3px;
left: 0px;
background-color: #5091FF;
}
.gitAddressClone {
margin: 0px 20px 14px 20px !important;
display: flex;
height: 40px;
align-items: center;
border-radius: 4px;
border: 1px solid #eee;
background: #fff;
margin-left: 20px;
position: relative;
}
.gitAddressClone > span {
display: flex;
line-height: 40px;
height: 40px;
padding: 0px 12px;
cursor: pointer;
align-items: center;
}
.addressTips {
position: absolute;
font-size: 12px;
color: #FF6E21;
top: -34px;
left: 30px;
background-color: #fff;
border: 1px solid #FE881D;
padding: 0px 5px;
height: 28px;
line-height: 28px;
}
.addressTips > span {
position: relative;
display: block;
}
.addressTips > span::before {
box-sizing: content-box;
width: 0px;
height: 0px;
position: absolute;
top: 25px;
left: 50%;
margin-left: -4px;
padding: 0;
border-top: 8px solid #FFFFFF;
border-bottom: 8px solid transparent;
border-left: 8px solid transparent;
border-right: 8px solid transparent;
display: block;
content: "";
z-index: 12;
}
.addressTips > span::after {
box-sizing: content-box;
width: 0px;
height: 0px;
position: absolute;
top: 26px;
left: 50%;
margin-left: -4px;
padding: 0;
border-top: 8px solid #FE881D;
border-bottom: 8px solid transparent;
border-left: 8px solid transparent;
border-right: 8px solid transparent;
display: block;
content: "";
z-index: 11;
}
.gitAddressClone > span.addressType {
color: #4CACFF;
}
.gitAddressClone > span:last-child {
border-right: none;
}
.gitAddressClone > input {
border: none;
outline: none;
padding: 0px 8px;
height: 40px;
line-height: 40px;
border-radius: 0px;
border: 1px solid #eee;
flex: 1;
}
.wrap-commit-table .ant-table-small > .ant-table-content > .ant-table-body {
margin: 0px;
}
.wrap-commit-table .ant-table-title {
background-color: #f1f8ff;
padding: 13px 16px !important;
}
.commitKey {
cursor: pointer;
border: 1px solid #FD7700;
background-color: #FFF3DC;
color: #FD7700 !important;
padding: 0px 12px;
height: 20px;
line-height: 20px;
margin-left: 15px;
border-radius: 18px;
max-width: 100%;
}
/* 分支 */
.branchTitle {
padding: 8px 10px;
color: #333;
font-size: 16px;
border-bottom: 1px solid #d9d9d9;
}
.branchUl li {
display: flex;
flex-wrap: wrap;
align-items: flex-end;
justify-content: space-between;
padding: 20px 0px;
border-bottom: 1px solid #eee;
}
.branchUl li:last-child {
border-bottom: none;
}
.operationBtn {
border: 1px solid #f4f4f4;
border-radius: 3px;
padding: 0px 6px;
background-color: #fff;
color: #666 !important;
display: inline-block;
}
.messages {
max-width: 700px;
}
.leftPoint {
margin-left: 20px;
position: relative;
}
.leftPoint::before {
position: absolute;
left: -10px;
top: 8px;
border-radius: 50%;
width: 4px;
height: 4px;
background-color: #dadada;
content: "";
}
/* 文件目录、文件内容 */
.subFileName {
position: relative;
margin-left: 15px;
height: 22px;
}
.subFileName::before {
position: absolute;
content: "/";
left: -10px;
top: 0px;
color: #999;
height: 22px;
line-height: 22px;
}
.addFile {
display: flex;
}
.addFile a {
display: block;
background-color: rgba(76, 172, 255, 0.8);
color: #fff;
cursor: pointer;
height: 32px;
line-height: 32px;
padding: 0px 10px;
}
.addFile a:first-child {
border-radius: 4px;
}
.addFile a:last-child {
/* border-radius: 0px 4px 4px 0px; */
border-left: 1px solid rgba(247, 247, 247, 0.3);
}
.addFile a:active {
background-color: #4cacff;
}
@media screen and (max-width: 750px) {
.list-r-Search {
flex: 1;
}
.list-left, .list-right {
width: 100%;
padding: 0px;
}
}
@media screen and (max-width: 400px) {
.list-r-Search {
width: 100%;
}
.headerMenu-wrapper {
flex-direction: column;
width: 100%;
}
.headerMenu-wrapper li {
width: 100%;
}
.gitAddressClone {
width: 100%;
margin-left: 0px;
}
.gitAddressClone > span {
padding: 0px;
}
.messages {
max-width: 100%;
}
}
.commonBox {
border: 1px solid #ddd;
margin-top: 30px;
border-radius: 4px;
}
.commonBox .commonBox-title {
padding: 0px 20px;
box-sizing: border-box;
font-size: 16px;
background: #FAFBFC;
/* F1F8FF */
font-weight: bold;
height: 45px;
line-height: 45px;
border-bottom: 1px solid #d9d9d9;
border-radius: 4px 4px 0px 0px;
}
.readBox {
border: none;
}
.readBox.commonBox .commonBox-info {
border: 1px solid #D0D0D0;
border-top: none;
border-radius: 0px 0px 4px 4px;
padding: 20px 38px;
}
.commonBox .commonBox-title.boxTitle {
display: flex;
justify-content: space-between;
height: 55px;
line-height: 55px;
background: #FAFCFF;
border-radius: 4px 4px 0px 0px;
border: 1px solid rgba(42, 97, 255, 0.23);
}
.synchronism {
display: block;
height: 34px;
line-height: 34px;
padding: 0px 15px;
color: #fff !important;
background-color: #28BD6C;
border-radius: 4px;
}
.files_info {
cursor: pointer;
}
.commonBox .commonBox-info {
padding: 20px 15px;
}
.commonBox-title-read {
vertical-align: middle;
color: #000;
font-size: 14px;
}
.commonBox-title-read:hover {
color: #466AFF;
}
@media screen and (max-width: 370px) {
.p-r-tags, .p-r-btn {
opacity: 0;
display: none;
}
.p-r-about {
flex-wrap: wrap;
}
.commitKey {
margin-right: 0px;
}
.list-r-Search {
width: 100%;
}
}
.null_data_box {
width: 100%;
border: 1px solid #d4d4d5;
border-radius: 3px;
}
.title {
font-weight: bold;
background: #f4f4f4;
padding: 10px 15px;
box-sizing: border-box;
border-bottom: 1px solid #d4d4d5;
}
.item_title {
font-size: 18px;
font-weight: bold;
margin-bottom: 15px;
}
.item {
padding: 15px;
border-bottom: 1px solid #dededf;
}
.item:last-child {
border-bottom: none;
}
.item_title small {
font-weight: 400;
margin-left: 10px;
}
.item_title small a {
color: #4183c6;
}
.Markdown {
background: #f7f7f7;
padding: 10px 20px;
}
.item .gitAddressClone input:focus {
border: 1px solid #2185d0;
}
.content-file {
margin-top: 8px;
}
.content-file .CodeMirror {
background-color: #f7f7f7;
border: 1px solid #e4e4e4;
border-radius: 4px;
height: auto;
}
.content-file.edit .CodeMirror {
background-color: #fff;
}
.content-file .CodeMirror .CodeMirror-scroll {
min-height: 450px;
}
.text-center {
text-align: center;
}
.fork-css {
position: absolute;
left: 0;
top: 50px;
width: 100%;
}
.color-grey-ccc {
color: #ccc !important;
}
a.color-grey-ccc:hover {
color: #4cacff !important;
}
.pull-right {
float: right;
}
.commitList {
padding: 0px 30px;
min-height: 400px;
}
.commitList > div {
border-bottom: 1px solid #EEEEEE;
padding: 16px 0px;
}
.commitList > div:last-child {
border-bottom: none;
}
/* 标签列表 */
.div_table {
border: 1px solid #eee;
border-radius: 2px;
}
.ul_thead {
padding: 0px 30px;
box-sizing: border-box;
background: #FAFAFA;
border-bottom: 1px solid #eee;
height: 50px;
line-height: 50px;
}
.ul_tbody {
padding: 0px 30px;
}
.ul_thead li, .ul_tbody li {
display: flex;
align-items: center;
text-align: left;
}
.ul_tbody li {
padding: 18px 0px;
border-bottom: 1px solid #eee;
}
.ul_tbody li:last-child {
border-bottom: none;
}
.ul_thead li > span, .ul_tbody li > span {
width: 20%;
padding-right: 20px;
}
.ul_thead li > span:nth-child(2), .ul_tbody li > span:nth-child(2) {
flex: 1;
}
.ul_tbody_third {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: left;
}
.ul_tbody_forth {
text-align: center;
display: flex;
justify-content: center;
}
.depotNum {
color: #666 !important;
}
.depotNum span:last-child {
color: #333;
}
.depotNum:hover span:last-child {
color: #2A61FF;
}
/*# sourceMappingURL=list.css.map */

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["list.scss"],"names":[],"mappings":";AACA;EAAQ;;;AACR;AACE;AAAA;EAEA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAIF;AACA;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EAAsC;;;AACtC;EAAwC;;;AACxC;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIF;AACA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;AACA;EACE;EACA;;;AAEF;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;;;AAIN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;EACA;EACA;;AACA;EACE;;AAEF;EACE;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACE;;;AAEF;EACE;;;AAEF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EAAkB;EAAmB;;;AACrC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;AACA;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;AACE;EACA;;;AAEF;EACE;;;AAKF;EACE;IACE;;;EAEF;IACE;IACA;;;AAIJ;EACE;IACE;;;EAEF;IACE;IACA;;;EAEF;IACE;;;EAEF;IACE;IACA;;;EAEF;IACE;;;EAEF;IACE;;;AAGJ;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;AAAoB;EACpB;EACA;EACA;EACA;EACA;;;AAEF;EACE;;AACA;EACE;EACA;EACA;EACA;;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAGA;EACE;;;AAGJ;EACE;EACA;EACA;;AACA;EACE;;;AAIJ;EACE;IACE;IACA;;;EAEF;IACE;;;EAEF;IACE;;;EAEF;IACE;;;AAGJ;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACA;;;AAEA;EAAc;;;AAEd;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EAAa;;;AACb;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EAAY;;;AAEZ;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAIF;AACA;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;AACA;EACE;;AAEF;EACE","file":"list.css"}

View File

@ -226,23 +226,21 @@
flex-direction: row;
cursor: pointer;
li{
position: relative;
text-align: center;
padding:0px;
margin-right: 40px;
display: flex;
& > a{
position: relative;
font-size: 14px;
height: 40px;
line-height: 28px;
padding:0px 20px;
height: 36px;
line-height: 24px;
display: block;
color: #666;
&> img{
margin-right: 8px;
}
color: #000!important;
font-weight: 500;
&> span.num{
line-height: 24px;
margin-left: 5px;
margin-top: 2px;
font-size: 12px;
float: right;
color: #666!important;
@ -252,10 +250,8 @@
height: 24px;
}
}
&.active a,&.active a i{
color: #2A61FF!important;
}
&.active::after,&:hover::after{
&.active a::after,&:hover a::after{
position: absolute;
bottom:0px;
height:2px;
@ -264,8 +260,8 @@
left: 0px;
width:100%;
}
&.active::after{
background-color: #2A61FF;
&.active a::after{
background-color: #466AFF;
}
}
}
@ -280,18 +276,18 @@
padding:0px;
background-color:#FAFBFC;
box-shadow: none;
&:hover{
background-color: #F3F4F6;
}
.detail_tag_btn_name{
padding:0px 18px;
min-width: 82px;
padding:0px 10px;
text-align: center;
&:hover>span{
color: #333!important;
height: 30px;
line-height: 30px;
border-radius:5px 0px 0px 5px;
&:hover
{
background-color: #F3F4F6;
}
img{
margin-right: 10px;
span{
color: #333!important;
}
}
.detail_tag_btn_count{
@ -356,7 +352,7 @@
.gitAddressClone{
margin:0px 20px 14px 20px!important;
margin:14px 20px!important;
display: flex;
height: 40px;
align-items: center;
@ -574,7 +570,7 @@
}
.commonBox{
border:1px solid #ddd;
margin-top: 30px;
margin-top: 18px;
border-radius: 4px;
}
.commonBox .commonBox-title{
@ -600,8 +596,8 @@
.commonBox .commonBox-title.boxTitle{
display: flex;
justify-content: space-between;
height: 65px;
line-height: 65px;
height: 55px;
line-height: 55px;
background: #FAFCFF;
border-radius: 4px 4px 0px 0px;
border: 1px solid rgba(42, 97, 255, 0.23);
@ -625,7 +621,7 @@
}
.commonBox-title-read{
vertical-align: middle;
color: #666;
color: #000;
font-size: 14px;
&:hover {
color: #466AFF;

View File

@ -30,37 +30,37 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
item.menu_name === "home" &&
<li className={pathname==="about" ? "active" : ""}>
<Link to={{ pathname: `/${owner}/${projectsId}/about`, state }}>
<i className={(pathname==="" || urlFlag) ? "iconfont icon-zhuye1 color-grey-3 mr5 font-14":"iconfont icon-zhuye1 color-grey-6 font-14 mr5"}></i>
<i className={"iconfont icon-zhuye-fill color-grey-3 mr5 font-14"}></i>
<span>主页</span>
</Link>
</Link>
</li>
}
{
item.menu_name === "code" &&
<li className={(pathname==="" || urlFlag) ? "active" : ""}>
<Link to={{ pathname: `/${owner}/${projectsId}`, state }}>
<i className={(pathname==="" || urlFlag) ? "iconfont icon-daimaku color-grey-3 mr5 font-14":"iconfont icon-daimaku color-grey-6 font-14 mr5"}></i>
<i className={"iconfont icon-daimakuicon1 color-grey-3 mr5 font-14"}></i>
<span>代码库</span>
</Link>
</Link>
</li>
}
{
item.menu_name === "issues" &&
<li className={pathname==="issues" ? "active" : ""}>
<Tooltip title="易修是Issue的中文名即问题列表" placement="bottom">
<Link to={{ pathname: `/${owner}/${projectsId}/issues`, state }}>
<i className={pathname==="issues" ? "iconfont icon-renwu color-grey-3 mr5 font-14":"iconfont icon-renwu color-grey-6 font-14 mr5"}></i>
<span>易修</span>
<Tooltip title="易修是Issue的中文名即问题列表" placement="bottom">
<i className={"iconfont icon-yixiuicon1 color-grey-3 mr5 font-14"}></i>
<span>易修</span>
</Tooltip>
{projectDetail && projectDetail.issues_count ? <span className="num">{numFormat(projectDetail.issues_count)}</span> : ""}
</Link>
</Tooltip>
</li>
}
{
item.menu_name === "pulls" && projectDetail && parseInt(projectDetail.type) !== 2 && platform ?
<li className={pathname==="pulls" ? "active" : ""}>
<Link to={{ pathname: `/${owner}/${projectsId}/pulls`, state }}>
<i className={pathname==="pulls" ? "iconfont icon-hebingqingqiu1 color-grey-3 mr5 font-14":"iconfont icon-hebingqingqiu1 color-grey-6 font-14 mr5"}></i>
<i className={"iconfont icon-hebingqingqiu1 color-grey-3 mr5 font-14"}></i>
<span>合并请求</span>
{projectDetail && projectDetail.pull_requests_count ? <span className="num">{numFormat(projectDetail.pull_requests_count)}</span> : ""}
</Link>
@ -70,7 +70,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
item.menu_name === "wiki" &&
<li className={pathname === "wiki" ? "active" : ""}>
<Link to={{ pathname: `/${owner}/${projectsId}/wiki`, state }}>
<i className={pathname==="wiki" ? "iconfont icon-wiki_icon color-grey-3 mr5 font-14":"iconfont icon-wiki_icon color-grey-6 font-14 mr5"}></i>
<i className={"iconfont icon-a-wikiicon1 color-grey-3 mr5 font-14"}></i>
<span>Wiki</span>
</Link>
</li>
@ -80,29 +80,29 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
<li className={pathname==="devops" ? "active" : ""}>
{/* <Link to={{ pathname: `/${owner}/${projectsId}/devops${open_devops ? `/dispose`:""}`, state }}> */}
<Link to={{ pathname: `/${owner}/${projectsId}/devops`, state:{...state,open_devops} }}>
<i className="iconfont icon-gongzuoliu font-13 mr8"></i>工作流(beta版)
<i className="iconfont icon-gongzuoliuicon font-13 mr5 color-grey-3"></i>工作流(beta版)
{projectDetail && projectDetail.ops_count ? <span>{projectDetail.ops_count}</span> : ""}
</Link>
</li>
:""
}
{
// item.menu_name === "resources" &&
// <li className={pathname==="source" ? "active" : ""}>
// <Link to={{ pathname: `/${owner}/${projectsId}/source`, state }}>
// <i className={pathname==="source" ? "iconfont icon-ziyuanpaihanghetuijian color-grey-3 mr5 font-14":"iconfont icon-ziyuanpaihanghetuijian color-grey-6 font-14 mr5"}></i>
// <span></span>
// {projectDetail && projectDetail.source_count ? <span className="num">{projectDetail.source_count}</span> :""}
// </Link>
// </li>
item.menu_name === "resources" &&
<li className={pathname==="source" ? "active" : ""}>
<Link to={{ pathname: `/${owner}/${projectsId}/source`, state }}>
<i className={pathname==="source" ? "iconfont icon-ziyuanpaihanghetuijian color-grey-3 mr5 font-14":"iconfont icon-ziyuanpaihanghetuijian color-grey-6 font-14 mr5"}></i>
<span>资源库</span>
{projectDetail && projectDetail.source_count ? <span className="num">{projectDetail.source_count}</span> :""}
</Link>
</li>
}
{
item.menu_name === "versions" &&
<li className={pathname==="milestones" ? "active" : ""}>
<Link to={{ pathname: `/${owner}/${projectsId}/milestones`, state }}>
<i className={pathname==="milestones" ? "iconfont icon-lichengbei color-grey-3 mr5 font-14":"iconfont icon-lichengbei color-grey-6 font-14 mr5"}></i>
<span>里程碑</span>
{projectDetail && projectDetail.versions_count ? <span className="num">{numFormat(projectDetail.versions_count)}</span> :""}
<i className={pathname==="milestones" ? "iconfont icon-lichengbeiicon color-grey-3 mr5 font-14":"iconfont icon-lichengbeiicon color-grey-6 font-14 mr5"}></i>
<span>里程碑</span>
{projectDetail && projectDetail.versions_count ? <span className="num">{numFormat(projectDetail.versions_count)}</span> :""}
</Link>
</li>
}
@ -110,7 +110,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
item.menu_name === "activity" &&
<li className={pathname==="activity" ? "active" : ""}>
<Link to={{ pathname: `/${owner}/${projectsId}/activity`, state }}>
<i className={pathname==="activity" ? "iconfont icon-tongzhi color-grey-3 mr5 font-14":"iconfont icon-tongzhi color-grey-6 font-14 mr5"}></i>
<i className={pathname==="activity" ? "iconfont icon-dongtaiicon color-grey-3 mr5 font-14":"iconfont icon-dongtaiicon color-grey-6 font-14 mr5"}></i>
<span>动态</span>
</Link>
</li>
@ -119,7 +119,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
item.menu_name === "settings" &&
<li className={pathname === "settings" ? "active" : ""}>
<Link to={`/${owner}/${projectsId}/settings`}>
<i className={url && url.indexOf("/settings") > 0 ? "iconfont icon-cangku color-grey-3 mr5 font-14":"iconfont icon-cangku color-grey-6 font-14 mr5"}></i>
<i className={url && url.indexOf("/settings") > 0 ? "iconfont icon-cangkushezhiicon color-grey-3 mr5 font-14":"iconfont icon-cangkushezhiicon color-grey-6 font-14 mr5"}></i>
<span>仓库设置</span>
</Link>
</li>

View File

@ -48,8 +48,10 @@ class NewMerge extends Component {
this.compareProject(this.state.id,pull,"master");
}
}
// 页面销毁取消监听
componentWillUnmount () {
console.log('----------destoyed---------');
window.removeEventListener('popstate', this.handleBack, false);
};
@ -60,8 +62,11 @@ class NewMerge extends Component {
//获取新建分支数据
getmergelist = (projectsId) => {
this.setState({isSpin: true})
const { owner } = this.props.match.params;
this.setState({isSpin: true});
// const { owner } = this.props.match.params;
let owner =this.props.history.location.pathname.split('/')[1];
console.log('owner:'+owner);
console.log(this.props);
const url = `/${owner}/${projectsId}/pulls/new.json`;
axios
.get(url)
@ -264,7 +269,9 @@ class NewMerge extends Component {
show_message,
default_message,
merge_head,
projects_names,id,comparesData
projects_names,
id,
comparesData
} = this.state;
const renderBrances = (list, type) => {
@ -298,6 +305,7 @@ class NewMerge extends Component {
return <div dangerouslySetInnerHTML={{ __html: html }}></div>;
};
let { project } = this.props;
return (
<div>
<div className="main">

View File

@ -2,9 +2,10 @@ import React, { Component } from 'react';
import { Link } from 'react-router-dom';
import { Input , Form , Select , Checkbox , Button , Spin , AutoComplete, Modal } from 'antd';
import { Base64 } from 'js-base64';
import { AlignCenter } from '../Component/layout';
import '../css/index.scss';
import './new.css'
import './new.scss'
import axios from 'axios';
const Option = Select.Option;
@ -44,7 +45,12 @@ class Index extends Component {
project_category_name: undefined,
license_name: undefined,
ignore_name: undefined,
descNum:0
descNum:0,
categoreFlag:false,
languageFlag:false,
ignoreFlag:false,
licenseFlag:false,
}
}
componentDidMount = () => {
@ -189,6 +195,7 @@ class Index extends Component {
subMitFrom = () => {
this.props.form.validateFieldsAndScroll((err, values) => {
console.log(err);
if (!err) {
this.setState({
isSpin: true
@ -313,41 +320,28 @@ class Index extends Component {
mirrorCheck,
descNum
descNum,
ignoreFlag,
licenseFlag,
languageFlag,
categoreFlag
} = this.state;
return (
<div className="main back-white" style={{padding:"0px",border:"none"}}>
<div className="newPanel">
<div className="newPanel_title">创建{projectsType && projectsType === "mirror" ? "镜像" : "托管"}项目</div>
<div className="newPanel_title">{projectsType && projectsType === "mirror" ? "导入" : "新建"}项目</div>
<Spin spinning={isSpin}>
<Form>
<div className="newPanel_content">
<Form.Item
label="拥有者"
>
{getFieldDecorator('user_id', {
rules: [{
required: true, message: '请选择拥有者'
},{
validator:(rule, value, callback) => this.checkId(rule, value, callback, OwnerList, '拥有者')
}],
})(
<AutoComplete
placeholder="请选择拥有者"
onChange={(value, e) => this.ChangePlatform(value, e, 'owners', OwnerList)}
className="plateAutoComplete"
onBlur={(value) => this.blurCategory(value, OwnerList, "owners")}
>
{owners_list}
</AutoComplete>
)}
</Form.Item>
{
{
projectsType && projectsType === "mirror" &&
<React.Fragment>
<Form.Item
label="镜像版本库地址"
style={{ marginBottom: "0px" }}
colon={false}
>
{getFieldDecorator('clone_addr', {
rules: [{
@ -362,13 +356,13 @@ class Index extends Component {
}
{
projectsType && projectsType === "mirror" &&
<React.Fragment>
<div className="pb10">
<p className="mt10 mb10 color-grey-3 pointer" onClick={this.changeMirrorCheck}>
需要授权验证<i className={mirrorCheck?"iconfont icon-xiajiantou font-13 ml10 color-grey-8":"iconfont icon-youjiantou font-13 ml10 color-grey-8"}></i>
<span className="ml20 font-12 color-red">如果源项目为公有仓库禁止填写用户名密码如果源项目为私有仓库则必须填写正确的用户名和密码!</span></p>
<span className="ml20 font-12 color-red">如果导入项目为私有仓库则必须填写相应平台正确的用户名和密码</span></p>
{
mirrorCheck &&
<div className="df mb20" style={{alignItems:'center'}}>
<div className="df mb10" style={{alignItems:'center'}}>
<span className="mr10">用户名</span>
<Form.Item
style={{ marginBottom: "0px" }}
@ -383,7 +377,6 @@ class Index extends Component {
<span className="mr10">密码</span>
<Form.Item
style={{ marginBottom: "0px" }}
label=""
>
{getFieldDecorator('password', {
rules: [],
@ -393,143 +386,144 @@ class Index extends Component {
</Form.Item>
</div>
}
</React.Fragment>
</div>
}
<AlignCenter>
<Form.Item
label="拥有者"
style={{width:"260px"}}
colon={false}
className="explainPos"
>
{getFieldDecorator('user_id', {
rules: [{
required: true, message: '请选择拥有者'
},{
validator:(rule, value, callback) => this.checkId(rule, value, callback, OwnerList, '拥有者')
}],
})(
<AutoComplete
style={{width:"260px",height:"35px"}}
placeholder="请选择拥有者"
onChange={(value, e) => this.ChangePlatform(value, e, 'owners', OwnerList)}
className="plateAutoComplete"
onBlur={(value) => this.blurCategory(value, OwnerList, "owners")}
>
{owners_list}
</AutoComplete>
)}
</Form.Item>
<span className="ml10 mr10 mt10 font-18">/</span>
<Form.Item
label="项目名称"
className="flex1 explainPos"
colon={false}
>
{getFieldDecorator('name', {
rules: [{
required: true, message: '请填写项目名称'
}],
})(
<Input placeholder="例如:团队协作方法与研究" maxLength={50}/>
)}
</Form.Item>
</AlignCenter>
<Form.Item
label="项目名称"
label={<span>项目标识 <span className="color-grey-9">(项目url标识部分)</span></span>}
colon={false}
>
{getFieldDecorator('name', {
{getFieldDecorator('repository_name', {
rules: [{
required: true, message: '请填写项目名称'
required: true, message: '请填写项目标识'
}],
})(
<Input placeholder="例如:团队协作方法与研究" maxLength={50}/>
<Input placeholder="项目标识请使用与项目相关的英文关键字" maxLength={100} />
)}
</Form.Item>
<div className="pr">
<span className="toprightNum">{descNum}/200</span>
<Form.Item
label="项目简介"
colon={false}
style={{marginBottom:"0px"}}
>
{getFieldDecorator('description', {
rules: [{
required: true, message: '请填写项目简介'
}],
rules: [],
})(
<Input.TextArea maxLength={200} placeholder="项目的介绍" autoSize={{ minRows: 2, maxRows: 6 }} onChange={this.changeDesc}/>
)}
</Form.Item>
</div>
<Form.Item
label="仓库名称"
>
{getFieldDecorator('repository_name', {
rules: [{
required: true, message: '请填写仓库名称'
}],
})(
<Input placeholder="仓库名称请使用与项目相关的英文关键字" maxLength={100} />
)}
</Form.Item>
<Form.Item
label="项目类别"
>
{getFieldDecorator('project_category', {
rules: [{
required: true, message: '请选择大类别',
}, {
validator: (rule, value, callback) => this.checkId(rule, value, callback, CategoryList, '项目类别')
}],
})(
<AutoComplete
placeholder="请选择项目类别"
onChange={(value, e) => this.ChangePlatform(value, e, 'project_category', CategoryList)}
className="plateAutoComplete"
onBlur={(value) => this.blurCategory(value, CategoryList, "project_category")}
>
{project_category_list}
</AutoComplete>
)}
</Form.Item>
<Form.Item
label="项目语言"
>
{getFieldDecorator('project_language', {
rules: [{
required: true, message: '请选择项目语言'
}, {
validator: (rule, value, callback) => this.checkId(rule, value, callback, LanguageList, '项目语言')
}],
})(
<AutoComplete
placeholder="请选择项目语言"
onChange={(value, e) => this.ChangePlatform(value, e, 'project_language', LanguageList)}
className="plateAutoComplete"
onBlur={(value) => this.blurCategory(value, LanguageList, "project_language")}
>
{project_language_list}
</AutoComplete>
)}
</Form.Item>
{
(projectsType === "deposit" || !projectsType) &&
<React.Fragment>
<Form.Item
label=".gitignore"
className="privatePart"
>
{getFieldDecorator('ignore', {
rules: [{
required: true, message: '请选择gitignore'
}, {
validator: (rule, value, callback) => this.checkId(rule, value, callback, GitignoreList, 'gitignore')
}],
})(
<AutoComplete
placeholder="请选择gitignore用来定义哪些文件不需要添加到版本管理中"
onChange={(value, e) => this.ChangePlatform(value, e, 'ignore', GitignoreList)}
className="plateAutoComplete"
onBlur={(value) => this.blurCategory(value, GitignoreList, "ignore")}
>
{ignore_list}
</AutoComplete>
{getFieldDecorator('ignoreFlag')(
<Checkbox checked={ignoreFlag} onChange={(e)=>this.setState({ignoreFlag:e.target.checked})}>.gitignore</Checkbox>
)}
</Form.Item>
{ ignoreFlag &&
<Form.Item>
{getFieldDecorator('ignore', {
rules: [{
required: ignoreFlag, message: '请选择gitignore'
}, {
validator: (rule, value, callback) => this.checkId(rule, value, callback, GitignoreList, 'gitignore')
}],
})(
<AutoComplete
placeholder="请选择gitignore用来定义哪些文件不需要添加到版本管理中"
onChange={(value, e) => this.ChangePlatform(value, e, 'ignore', GitignoreList)}
className="plateAutoComplete"
onBlur={(value) => this.blurCategory(value, GitignoreList, "ignore")}
>
{ignore_list}
</AutoComplete>
)}
</Form.Item>
}
<Form.Item
label="开源许可证"
className="privatePart"
>
{getFieldDecorator('license', {
rules: [{
required: true, message: '请选择开源许可证'
}, {
validator: (rule, value, callback) => this.checkId(rule, value, callback, LicensesList, '开源许可证')
}],
})(
<AutoComplete
placeholder="请选择开源许可证"
onChange={(value, e) => this.ChangePlatform(value, e, 'license', LicensesList)}
className="plateAutoComplete"
onBlur={(value) => this.blurCategory(value, LicensesList, "license")}
>
{license_list}
</AutoComplete>
{getFieldDecorator('licenseFlag')(
<Checkbox checked={licenseFlag} onChange={(e)=>this.setState({licenseFlag:e.target.checked})}>开源许可证</Checkbox>
)}
</Form.Item>
{ licenseFlag &&
<Form.Item>
{getFieldDecorator('license', {
rules: [{
required: licenseFlag, message: '请选择开源许可证'
}, {
validator: (rule, value, callback) => this.checkId(rule, value, callback, LicensesList, '开源许可证')
}],
})(
<AutoComplete
placeholder="请选择开源许可证"
onChange={(value, e) => this.ChangePlatform(value, e, 'license', LicensesList)}
className="plateAutoComplete"
onBlur={(value) => this.blurCategory(value, LicensesList, "license")}
>
{license_list}
</AutoComplete>
)}
</Form.Item>
}
</React.Fragment>
}
<Form.Item
label="可见性"
style={{ margin: "0px" }}
className="privatePart"
>
{getFieldDecorator('private')(
<Checkbox value="limit">将项目设为私有<span className="ml15 font-13 color-grey-9">(只有项目所有人或拥有权限的项目成员才能看到)</span></Checkbox>
<Checkbox value="limit">将项目设为私有<span className="font-13 color-grey-9">(只有项目所有人或拥有权限的项目成员才能看到)</span></Checkbox>
)}
</Form.Item >
{
projectsType && projectsType === "mirror" &&
<Form.Item
label="迁移类型:"
style={{ margin: "0px" }}
className="privatePart"
>
{getFieldDecorator('is_mirror')(
@ -537,12 +531,69 @@ class Index extends Component {
)}
</Form.Item >
}
<div>
<Form.Item
style={{ margin: "0px" }}
className="privatePart"
>
{getFieldDecorator('categoreFlag')(
<Checkbox checked={categoreFlag} onChange={(e)=>this.setState({categoreFlag:e.target.checked})}>项目类别</Checkbox>
)}
</Form.Item>
{categoreFlag &&
<Form.Item
className="privatePart"
>
{getFieldDecorator('project_category', {
rules: [{
required: categoreFlag, message: '请选择大类别',
}, {
validator: (rule, value, callback) => this.checkId(rule, value, callback, CategoryList, '项目类别')
}],
})(
<AutoComplete
placeholder="请选择项目类别"
onChange={(value, e) => this.ChangePlatform(value, e, 'project_category', CategoryList)}
className="plateAutoComplete"
onBlur={(value) => this.blurCategory(value, CategoryList, "project_category")}
>
{project_category_list}
</AutoComplete>
)}
</Form.Item>
}
<Form.Item
className="privatePart"
>
{getFieldDecorator('languageFlag')(
<Checkbox checked={languageFlag} onChange={(e)=>this.setState({languageFlag:e.target.checked})}>项目语言</Checkbox>
)}
</Form.Item>
{languageFlag &&
<Form.Item>
{getFieldDecorator('project_language', {
rules: [{
required: languageFlag, message: '请选择项目语言'
}, {
validator: (rule, value, callback) => this.checkId(rule, value, callback, LanguageList, '项目语言')
}],
})(
<AutoComplete
placeholder="请选择项目语言"
onChange={(value, e) => this.ChangePlatform(value, e, 'project_language', LanguageList)}
className="plateAutoComplete"
onBlur={(value) => this.blurCategory(value, LanguageList, "project_language")}
>
{project_language_list}
</AutoComplete>
)}
</Form.Item>
}
<div className="mt20">
<span className="ant-form-item-required"></span>
</div>
<Form.Item className="formTip mt20">
<Button type="primary" onClick={this.subMitFrom} className="mr20">创建项目</Button>
<Link to={'/projects'} className="btn_32">取消</Link>
<Link to={'/explore'} className="btn_32">取消</Link>
</Form.Item>
</div>
</Form>

View File

@ -12,7 +12,13 @@
border-bottom: 1px solid #f0f0f0
}
.newPanel_content{
padding:1rem 2rem;
padding:2rem;
}
.newPanel_content form .ant-row.ant-form-item{
margin-bottom: 25px;
}
.newPanel_content .ant-form-item-label label{
font-size: 16px;
}
.newPanel_content .ant-form-item-control-wrapper{
flex: 1;
@ -25,24 +31,35 @@
height: 35px;
line-height: 35px;
}
.newContent_inline{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items:flex-end
}
.explainPos{
.ant-form-explain{
position: absolute;
}
}
.newContent_inline > .ant-form-item:nth-child(2){
margin-left: 20px;
}
.newPanel_content .privatePart .ant-form-item-label{
margin-left: 0px;
.privatePart{
margin-bottom: 0px!important;
.ant-form-item-label{
margin-left: 0px;
}
}
.newPanel_content .ant-form-item-label{
line-height: 25px;
height: 25px;
margin-left: -0.8rem;
}
.plateAutoComplete{
.ant-input{
height: 34px!important;
}
}
@media screen and (max-width: 750px){
.newPanel_content{

View File

@ -16,7 +16,7 @@ const menu = [
{name:"合并请求",index:"pulls"},
{name:"Wiki",index:"wiki"},
{name:"工作流(beta版)",index:"devops"},
// {name:"资源库",index:"resources"},
{name:"资源库",index:"resources"},
{name:"里程碑",index:"versions"},
{name:"动态",index:"activity"},
]

View File

@ -63,10 +63,10 @@ function List(props){
const menu_new=(
<Menu>
<Menu.Item key="updated_on">
<CheckProfile {...props} sureFunc={()=>{props.history.push(`/projects/deposit/new/${OIdentifier}`)}}>新建托管项目</CheckProfile>
<CheckProfile {...props} sureFunc={()=>{props.history.push(`/projects/deposit/new/${OIdentifier}`)}}>新建项目</CheckProfile>
</Menu.Item>
<Menu.Item key="created_on">
<CheckProfile {...props} sureFunc={()=>{props.history.push(`/projects/mirror/new/${OIdentifier}`)}}>新建镜像项目</CheckProfile>
<CheckProfile {...props} sureFunc={()=>{props.history.push(`/projects/mirror/new/${OIdentifier}`)}}>导入项目</CheckProfile>
</Menu.Item>
</Menu>
)

View File

@ -108,7 +108,7 @@ function RightBox({ OIdentifier , history , admin , showCompeleteDialog ,complet
<div>
{
(item.is_admin || item.is_member) ?
<Link to={`/${OIdentifier}/teams/${item.id}`}><ColorListName>{item.name}</ColorListName></Link>
<Link to={`/${OIdentifier}/teams/${item.id}`}><ColorListName>{item.nickname}</ColorListName></Link>
:
<ColorListName>{item.name}</ColorListName>
}

View File

@ -1,348 +0,0 @@
body {
width: 100% !important;
}
.ant-spin-nested-loading > div > .ant-spin.opacitySpin {
max-height: 100vh;
background: white;
}
.wiki-main {
width: 1200px;
min-height: 400px;
margin: 20px auto;
}
.wiki-main .ant-btn-primary {
background-color: #466aff;
border-color: #466aff;
}
.wiki-main .ant-btn-primary:hover, .wiki-main .ant-btn-primary:focus, .wiki-main .ant-btn-primary:active {
background-color: #6482ff;
}
.wiki-main .ant-btn-default:hover,
.wiki-main .ant-btn-default:active,
.wiki-main .ant-btn-default:focus {
background: #f3f4f6;
color: #333;
border-color: #d0d0d0;
}
.wiki-main .wiki-head {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 20px;
height: 64px;
background: #fafcff;
box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.13);
border-radius: 4px;
border-bottom-left-radius: 0;
}
.wiki-main .wiki-head .ant-btn .anticon {
margin: 0 -3px 0 0;
}
.wiki-main .head-title {
font-size: 20px;
color: #05101a;
line-height: 30px;
font-weight: 500;
}
.wiki-main .head-title .anticon-right {
color: #666;
font-size: 0.9rem;
}
.wiki-main .back-wiki {
color: #466aff;
cursor: pointer;
}
.wiki-main .back-wiki:hover {
color: #6482ff;
}
.wiki-main .head-log-middle {
width: 3rem;
height: 3rem;
margin-right: 0.35rem;
border-radius: 50%;
}
.wiki-main .head-log-small {
width: 1.25rem;
height: 1.25rem;
margin-right: 0.35rem;
border-radius: 50%;
}
.wiki-main .user-box {
font-size: 12px;
font-family: "PingFangSC-Medium";
color: #466aff;
cursor: pointer;
}
.wiki-main .user-box:hover {
color: #6482ff;
}
.wiki-main .user-box .head-log-small {
position: relative;
top: -2px;
}
.wiki-main .time-ago {
font-size: 12px;
color: #333;
letter-spacing: 0;
line-height: 17px;
font-weight: 400;
font-family: "PingFangSC-Regular";
}
.wiki-main .has-error .ant-form-explain,
.wiki-main .has-error .ant-form-split {
position: absolute;
}
.wiki-main .wiki-nav {
max-height: 60vh;
}
.wiki-main .wiki-nav .wiki-search {
padding: 0 14px;
}
.wiki-main .wiki-nav .wiki-search .ant-input {
padding-left: 30px;
}
.wiki-main .wiki-nav .wiki-search .ant-input-suffix {
left: 26px;
right: auto;
}
.wiki-main .wiki-nav .wiki-search:hover .ant-input, .wiki-main .wiki-nav .wiki-search:focus .ant-input {
border-color: #466aff !important;
}
.wiki-main .wiki-nav-parent {
width: 260px;
flex: none;
}
.wiki-main .ant-form-item-children .ant-input:hover {
border-color: #466aff !important;
}
.wiki-main .ant-checkbox-checked .ant-checkbox-inner {
background-color: #466aff;
border-color: #466aff;
}
.wiki-main .ant-radio-checked .ant-radio-inner,
.wiki-main .ant-radio-checked::after {
border-color: #466aff;
}
.wiki-main .ant-radio-inner::after {
background-color: #466aff;
}
.wiki-main .ant-radio-group {
display: block;
margin: 10px 0 0 30px;
}
.wiki-main .ant-radio-wrapper:hover .ant-radio,
.wiki-main .ant-radio:hover .ant-radio-inner,
.wiki-main .ant-radio-input:focus + .ant-radio-inner {
border-color: #466aff;
}
#wikiUrl:focus {
border-right: 1px solid #d9d9d9 !important;
}
.wiki-body {
display: flex;
}
.wiki-content {
flex: auto;
width: 75%;
}
.wiki-content-detail {
padding: 0 20px;
word-break: break-all;
}
.ant-input-group.ant-input-group-compact.copy-url {
display: flex;
margin-top: 20px;
}
.ant-input-group.ant-input-group-compact.copy-url .ant-select-selection__rendered {
margin: 0 14px 0 5px;
width: 3rem;
font-size: 12px;
}
.ant-input-group.ant-input-group-compact.copy-url .ant-select-arrow {
right: 4px;
}
.ant-input-group.ant-input-group-compact.copy-url .ant-input {
font-size: 12px;
font-family: "PingFangSC-Regular";
color: #666;
letter-spacing: 0;
font-weight: 400;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
word-break: break-all;
}
.ant-input-group.ant-input-group-compact.copy-url .copy-svg {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0 5px;
background: #fff;
font-size: 1rem !important;
border: 1px solid #d9d9d9;
border-left: 0;
color: #466aff;
cursor: pointer;
}
.wiki-url-type .ant-select-dropdown-menu-item {
font-size: 12px;
}
.wiki-nav {
min-height: 300px;
padding: 20px 0;
background: #ffffff;
border: 1px solid rgba(153, 153, 153, 0.22);
overflow-y: scroll;
flex: none;
color: #333;
}
.wiki-nav-title {
display: flex;
justify-content: space-between;
align-items: center;
height: 50px;
padding: 0 10px 0 10px;
font-size: 14px;
letter-spacing: 0;
font-weight: 400;
font-family: "PingFangSC-Regular";
border-bottom: 1px solid #eee;
line-height: 16px;
cursor: pointer;
}
.wiki-nav-title .delete-title-icon {
display: none;
}
.wiki-nav-title:hover {
background-color: #fbfbfb;
}
.wiki-nav-title:hover .delete-title-icon {
display: inline-block;
}
.wiki-nav-title-parent {
padding: 0 14px;
}
.wiki-nav-title-parent:hover {
background: #fbfbfb;
}
.wiki-nav-title.active {
color: #466aff;
}
.wiki-content-head {
margin: 20px 0 20px 20px;
padding: 0 20px 20px 0;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #eee;
}
.wiki-content-head-left {
width: 90%;
}
.nav-title-left {
display: inline-flex;
max-width: 90%;
}
.nav-title-left svg {
margin-right: 0.5rem;
flex: none;
}
.nav-title-left .nav-title-left-text {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.wiki-detail-title {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.wiki-preview {
overflow-y: scroll;
height: 100%;
}
.wiki-preview .wiki-body {
width: 90%;
}
.wiki-preview .ant-btn-primary {
background-color: #466aff;
border-color: #466aff;
}
.wiki-preview .ant-btn-primary:hover, .wiki-preview .ant-btn-primary:focus, .wiki-preview .ant-btn-primary:active {
background-color: #6482ff;
}
.wiki-preview .preview-head {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 12rem 0 2rem;
width: 100%;
height: 80px;
background: #272f4c;
color: #fff;
}
.wiki-preview .preview-head-left {
display: inline-flex;
align-items: center;
font-size: 24px;
cursor: pointer;
}
.wiki-preview .preview-head-left .icon-wendangyulan_icon {
font-size: 24px !important;
font-weight: 700;
}
.wiki-preview .preview-head-right {
display: flex;
}
.wiki-preview .preview-head-right .copy-url {
margin-top: 0;
}
.wiki-preview .preview-head-right .copy-desc {
width: 6rem;
padding-top: 1px;
}
.wiki-preview .wiki-nav-title {
padding: 0 10px 0 40px;
}
.wiki-preview .wiki-nav-title.active {
background-color: #f3f4f6;
}
.wiki-preview .wiki-content-head {
padding: 10px 20px 10px 20px;
}
.wiki-preview .wiki-nav {
padding: 20px 0;
width: 20vw;
border-bottom: 0;
height: 80vh;
}
.wiki-preview .wiki-content-detail {
padding: 0 40px;
}
.wiki-preview .wiki-content-detail img {
max-width: 100%;
}
.wiki-preview .ant-btn:hover {
background: #f3f4f6;
color: #333;
border-color: #d0d0d0;
}
/*# sourceMappingURL=Index.css.map */

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["Index.scss"],"names":[],"mappings":"AAEA;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;;AAEA;EACE,kBAfQ;EAgBR,cAhBQ;;AAiBR;EAGE,kBAnBY;;AAuBhB;AAAA;AAAA;EAGE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE,OA5DQ;EA6DR;;AACA;EACE,OA9DY;;AAkEhB;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA,OApFQ;EAqFR;;AACA;EACE,OAtFY;;AAwFd;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EAEE;;AAEF;EACE;;AACA;EACE;;AACA;EACE;;AAEF;EACE;EACA;;AAEF;EAEE;;AAKN;EACE;EACA;;AAGF;EACE;;AAGF;EACE,kBAxIQ;EAyIR,cAzIQ;;AA2IV;AAAA;EAEE,cA7IQ;;AAgJV;EACE,kBAjJQ;;AAoJV;EACE;EACA;;AAGF;AAAA;AAAA;EAGE,cA5JQ;;;AAgKZ;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;AACA;EACE;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAlNQ;EAmNR;;;AAKF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AACA;EACE;;;AAKN;EACE;;AACA;EACE;;;AAIJ;EACE,OAzQU;;;AA4QZ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;AACA;EACE;EACA;;AAEF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;EACA;;AACA;EACE;;AAEF;EACE,kBApTQ;EAqTR,cArTQ;;AAsTR;EAGE,kBAxTY;;AA2ThB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;;AAEA;EACE;;AAEF;EACE;EACA;;AAIJ;EACE;;AAEF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAEF;EACE;;AACA;EACE;;AAIJ;EACE;EACA;EACA","file":"Index.css"}

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["index.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA","file":"index.css"}

View File

@ -1,32 +0,0 @@
.hide-file-icon.ant-tree.ant-tree-directory li span.ant-tree-switcher {
display: none !important;
}
.hide-file-icon.ant-tree.ant-tree-directory .ant-tree-node-content-wrapper {
display: inline-flex;
width: 100%;
}
.hide-file-icon.ant-tree.ant-tree-directory .tree-title-icon {
display: none;
}
.hide-file-icon.ant-tree.ant-tree-directory .ant-tree-node-content-wrapper:hover .tree-title-icon {
transition: all 0.3s;
display: inline-block;
}
.hide-file-icon.ant-tree.ant-tree-directory.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-node-content-wrapper::before, .hide-file-icon.ant-tree.ant-tree-directory.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-node-content-wrapper::before {
background: #fff;
margin-top: -3px;
}
.hide-file-icon.ant-tree.ant-tree-directory.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper::before, .hide-file-icon.ant-tree.ant-tree-directory.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper::before {
margin-top: -3px;
}
.hide-file-icon.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper.ant-tree-node-selected,
.hide-file-icon.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper.ant-tree-node-selected {
color: #2a61ff;
}
.hide-file-icon.ant-tree.ant-tree-directory .ant-tree-title {
display: inline-flex;
justify-content: space-between;
flex: auto;
}
/*# sourceMappingURL=index.css.map */

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["index.scss"],"names":[],"mappings":"AACE;EACE;;AASF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EAOE;EACA;;AAGF;EAKE;;AAGF;AAAA;EAIE;;AAKF;EACE;EACA;EACA","file":"index.css"}

View File

@ -1,6 +1,6 @@
import * as React from 'react';
import classNames from 'classnames';
import { Icon, Tree } from 'antd';
import { Tree } from 'antd';
import omit from 'omit.js';
import debounce from 'lodash/debounce';
import { conductExpandParent, convertTreeToEntities } from 'rc-tree/lib/util';

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["index.scss"],"names":[],"mappings":"AACE;EACE;EACA;EACA;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AACA;EACE;;AAGJ;EACE;EACA;;AACA;EACE","file":"index.css"}

View File

@ -1,56 +0,0 @@
.myself-modal .ant-modal-header {
padding: 9px 24px;
background: #f8f8f8;
border-bottom: 1px solid #eee;
}
.myself-modal .ant-modal-title {
text-align: left;
}
.myself-modal .ant-modal-close {
top: 0px !important;
}
.myself-modal .ant-modal-close-x {
font-size: 24px;
}
.myself-modal .ant-modal-body {
text-align: center;
}
.myself-modal .delete-title {
display: flex;
justify-content: center;
align-items: center;
margin: 2rem 0 1rem !important;
font-size: 16px;
color: #333;
letter-spacing: 0;
line-height: 29px;
font-weight: 400;
}
.myself-modal .red-circle {
align-self: flex-start;
color: #ca0002;
font-size: 1.5rem !important;
}
.myself-modal .delete-descibe {
font-size: 14px;
color: #666;
line-height: 33px;
font-weight: 400;
}
.myself-modal .ant-modal-footer {
padding: 2rem 0;
text-align: center;
border: 0;
}
.myself-modal .ant-modal-footer .ant-btn {
width: 6rem;
}
.myself-modal .foot-submit {
margin-left: 3rem;
color: #df0002;
}
.myself-modal .foot-submit:hover {
border-color: #df0002;
}
/*# sourceMappingURL=index.css.map */

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["index.scss"],"names":[],"mappings":"AACE;EACE;EACA;EACA;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AACA;EACE;;AAGJ;EACE;EACA;;AACA;EACE","file":"index.css"}

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["Index.scss"],"names":[],"mappings":"AACA;EACE;EACA;EACA,SAJI;EAKJ;EACA;;AACA;EACE;;AAEF;EACE,SAXE;EAYF;;AAEF;EACE;EACA;EACA;EACA,SAlBE;EAmBF;;AAEF;EACE;EACA;;;AAIJ;EACE;;AACA;EACE;EACA;EACA;;;AAGJ;EACE;;AACA;EACE;EACA,SAvCE;EAwCF;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AAIN;EACE,SA1DE;EA2DF;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;;AAGJ;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAEF;EACE;;;AAIN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;;AAEF;EACE;EACA;;AAEF;EACE;;;AAGJ;EACE;EACA;;AACA;EACE;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;;AACA;EACE;;AAEF;EACE;;;AAKR;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;;;AAGJ;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AAEF;EACE;EACA;;;AAGJ;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEE;EACE;EACA;;AAGJ;EACE;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA","file":"Index.css"}

View File

@ -115,11 +115,11 @@ class InfosUser extends Component {
newItem =()=> (
<Menu>
<Menu.Item key="created_mirror">
<CheckProfile {...this.props} sureFunc={()=>{this.props.history.push('/projects/mirror/new')}}>新建镜像项目</CheckProfile>
</Menu.Item>
<Menu.Item key="created_deposit">
<CheckProfile {...this.props} sureFunc={()=>{this.props.history.push('/projects/deposit/new')}} >新建托管项目</CheckProfile>
<CheckProfile {...this.props} sureFunc={()=>{this.props.history.push('/projects/deposit/new')}} >新建项目</CheckProfile>
</Menu.Item>
<Menu.Item key="created_mirror">
<CheckProfile {...this.props} sureFunc={()=>{this.props.history.push('/projects/mirror/new')}}>导入项目</CheckProfile>
</Menu.Item>
</Menu>
);

View File

@ -6,7 +6,7 @@ function TeamItem({item,history}){
<div onClick={()=>{history.push(`/${item.name}`)}} style={{cursor:"pointer"}}>
<div className="imgBox"><img alt="" src={getImageUrl(`/${item.avatar_url}`)}/></div>
<div style={{flex:'1'}}>
<span className="mb5 font-18 color-grey-3 task-hide">{item.name}</span>
<span className="mb5 font-18 color-grey-3 task-hide">{item.nickname}</span>
<div className="task-hide-2 teamdesc">
{item.description}
</div>

BIN
src/images/add.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 B

View File

@ -392,9 +392,6 @@ a.white-btn.use_scope-btn:hover{
border-color: #096dd9;
}
/*.ant-btn:hover, .ant-btn:focus, .ant-btn:active, .ant-btn.active{*/
/* background-color: #4CACFF;*/
/*}*/
.newViewAfter .ant-input{
line-height: 40px !important;