代码库样式整改

This commit is contained in:
caishi 2021-08-12 11:45:56 +08:00 committed by caishi
parent b611308f3c
commit 411b4e9de6
28 changed files with 401 additions and 251 deletions

View File

@ -114,14 +114,6 @@ a:visited {
color: #898989; color: #898989;
} }
a:hover {
color: #FF7500;
}
a:hover.fa {
color: #FF7500;
}
input, input,
textarea, textarea,
select { select {

View File

@ -97,10 +97,6 @@ a:visited {
color: #05101a; color: #05101a;
} }
a:hover {
color: #459be5;
}
ol, ol,
ul, ul,
li { li {

View File

@ -1363,6 +1363,10 @@ a:visited {
color: #05101a; color: #05101a;
} }
a:hover {
color: #2A61FF!important;
}
ol, ol,
ul, ul,
li { li {
@ -1469,7 +1473,7 @@ a.edu-txt-w80,
/*隐藏*/ /*隐藏*/
.none { .none {
display: none display: none!important;
} }
.block { .block {
@ -2467,19 +2471,16 @@ a.hoverLine:hover{
a.color-grey-name:hover, a.color-grey-name:hover,
a.color-dark:hover, a.color-dark:hover,
a.color-grey-6:hover, a.color-grey-6:hover,
a.color-grey-3:hover { a.color-grey-3:hover,a.color-ooo:hover {
color: #4cacff !important; color: #2A61FF !important;
}
a.color-grey-9:hover,
a.color-grey-8:hover,
a.color-grey-c:hover {
color: #111C24 !important;
} }
/*蓝色*/ /*蓝色*/
.color-blue, .color-green-file{ .color-blue {
color: #4CACFF !important; color: #2A61FF !important;
}
.color-blue-file {
color: #0054CC!important;
} }
/* 绿色 */ /* 绿色 */
/*主*/ /*主*/
@ -2487,10 +2488,6 @@ a.color-grey-c:hover {
color: #4CACFF !important; color: #4CACFF !important;
} }
a.color-blue:hover,
a.color-blue_4C:hover {
color: #459BE6 !important;
}
/*橙色*/ /*橙色*/
.color-orange { .color-orange {

File diff suppressed because one or more lines are too long

View File

@ -218,7 +218,7 @@ a:hover {
} }
.color-blue { .color-blue {
color: #4CACFF; color: #2A61FF;
} }
.color-huang { .color-huang {

View File

@ -18,6 +18,23 @@ export function getImageUrl(path) {
return `${path}`; return `${path}`;
} }
export function numFormat(num, digits){
let d = digits || 1;
var si = [
{ value: 1, symbol: "" },
{ value: 1E3, symbol: "k" },
{ value: 1E4, symbol: "W" }
];
var rx = /\.0+$|(\.[0-9]*[1-9])0+$/;
var i;
for (i = si.length - 1; i > 0; i--) {
if (num >= si[i].value) {
break;
}
}
return (num / si[i].value).toFixed(d).replace(rx, "$1") + si[i].symbol;
}
export function getImage(path) { export function getImage(path) {
// https://www.educoder.net // https://www.educoder.net
// https://testbdweb.trustie.net // https://testbdweb.trustie.net

View File

@ -3,7 +3,7 @@
// export { default as OrderStateUtil } from '../routes/Order/components/OrderStateUtil'; // export { default as OrderStateUtil } from '../routes/Order/components/OrderStateUtil';
export { export {
getUploadLogoActionUrl as getUploadLogoActionUrl, getUploadLogoActionUrl as getUploadLogoActionUrl,numFormat as numFormat,
getImageUrl as getImageUrl,getImage as getImage, getmyUrl as getmyUrl, getRandomNumber as getRandomNumber, getUrl as getUrl, publicSearchs as publicSearchs, getRandomcode as getRandomcode, getUrlmys as getUrlmys, getUrl2 as getUrl2, setImagesUrl as setImagesUrl getImageUrl as getImageUrl,getImage as getImage, getmyUrl as getmyUrl, getRandomNumber as getRandomNumber, getUrl as getUrl, publicSearchs as publicSearchs, getRandomcode as getRandomcode, getUrlmys as getUrlmys, getUrl2 as getUrl2, setImagesUrl as setImagesUrl
, getUploadActionUrl as getUploadActionUrl, getUploadActionUrltwo as getUploadActionUrltwo, getUploadActionUrlthree as getUploadActionUrlthree, getUploadActionUrlOfAuth as getUploadActionUrlOfAuth , getUploadActionUrl as getUploadActionUrl, getUploadActionUrltwo as getUploadActionUrltwo, getUploadActionUrlthree as getUploadActionUrlthree, getUploadActionUrlOfAuth as getUploadActionUrlOfAuth
, getTaskUrlById as getTaskUrlById, TEST_HOST, htmlEncode as htmlEncode, getupload_git_file as getupload_git_file, getcdnImageUrl as getcdnImageUrl , getTaskUrlById as getTaskUrlById, TEST_HOST, htmlEncode as htmlEncode, getupload_git_file as getupload_git_file, getcdnImageUrl as getcdnImageUrl

View File

@ -1,116 +1,36 @@
import React , { useState , useEffect } from 'react'; import React , { useState , useEffect } from 'react';
import { Popover , Input , Spin } from 'antd'; import { Popover , Dropdown , Input , Spin } from 'antd';
import './branch.scss'; import './branch.scss';
import { getBranch , getTag } from '../GetData/getData'; import { getBranch , getTag } from '../GetData/getData';
import SelectOverlay from './SelectOverlay';
export default (({ projectsId , branch , owner , changeBranch , branchList , tagflag = true })=>{ export default (({ projectsId , branch , owner , changeBranch , branchList , tagflag = true })=>{
const [ showValue , setShowValue ] = useState(branch); const [ showValue , setShowValue ] = useState(branch);
const [ inputValue , setInputValue] = useState(undefined);
const [ nav , setNav ] = useState(0);
const [ isSpin , setIsSpin ] = useState(true);
const [ flag , setFlag ] = useState(false);
const [ data , setData ] = useState(undefined);
const [ datas , setDatas ] = useState(undefined);
useEffect(()=>{ useEffect(()=>{
setShowValue(branch); setShowValue(branch);
},[branch]) },[branch])
useEffect(()=>{
document.body.addEventListener('click', e => {
let name = e.target.className;
let turn = name === "ant-input OptionsInput" || name === "navli active"|| name === "navli" || name === "padding10 bor-bottom-greyE";
if(turn){
return;
}else{
setFlag(false);
}
})
})
useEffect(()=>{
if(branchList){
setData(branchList);
setDatas(branchList);
setIsSpin(false);
}
},[branchList])
async function getBranchs(id,owner){
let result = await getBranch(id,owner);
setData(result);
setDatas(result);
setIsSpin(false);
}
async function getTags(id,owner){
let result = await getTag(id,owner);
setData(result);
setDatas(result);
setIsSpin(false);
}
function changeInputValue(e){
setInputValue(e.target.value);
let filter = e.target.value ? data && data.length>0 && data.filter(item=>item.name.indexOf(e.target.value)>-1) : data;
setDatas(filter);
}
function changeNav(nav){
setNav(nav);
setIsSpin(true);
if(nav === 0){
getBranchs(projectsId,owner);
}else{
getTags(projectsId,owner);
}
}
function chooseitem(value){
// setShowValue(value);
changeBranch(value);
}
const menu = ( const menu = (
<div> <SelectOverlay
<div className="padding10 bor-bottom-greyE"> changeBranch={changeBranch}
<Input tagflag={tagflag}
placeholder="请输入分支或标签名称搜索" projectsId={projectsId}
autocomplete="off" className="OptionsInput" value={inputValue} owner={owner}
onChange={changeInputValue} style={{width:"220px"}} branchList={branchList}
/> />
<ul className="navUl">
<li className={nav === 0?"navli active":"navli"} onClick={()=>changeNav(0)}><i className="iconfont icon-fenzhi1 font-14 mr3"></i>分支列表</li>
{ tagflag && <li className={nav === 1?"navli active":"navli"} onClick={()=>changeNav(1)}><i className="iconfont icon-biaoqian3 font-14 mr3"></i>标签列表</li> }
</ul>
</div>
<Spin spinning={isSpin}>
<ul className="OptionsUl" id="ul-btn">
{
datas && datas.length>0 ?
datas.map((item,key)=>{
return(
<li key={key} onClick={()=>chooseitem(item.name)}><a className="task-hide ulALink">{item.name}</a></li>
)
}):
<p className="listTips">暂无{inputValue}{nav === 0 ?"分支":"标签"}~</p>
}
</ul>
</Spin>
</div>
); );
return( return(
<Popover placement='bottomLeft' visible={flag} content={menu} onClick={()=>setFlag(!flag)} overlayClassName="branch-tagBox-list"> <Dropdown placement='bottomLeft' overlay={menu} overlayClassName="branch-tagBox-list" trigger={['click']} >
<div className="branch-tagBox"> <div className="branch-tagBox">
{/* {nav === 0 ?"分支":"标签"} */} {/* {nav === 0 ?"分支":"标签"} */}
<span className="color-grey-9 mr3 ml8"><i className="iconfont icon-fenzhi2 font-18"></i></span> <span className="color-grey-9 mr3 ml8"><i className="iconfont icon-fenzhi2 font-18"></i></span>
<a className="ant-dropdown-link"> <a className="ant-dropdown-link task-hide">
{showValue} {showValue}
</a> </a>
<i className="showtag iconfont icon-xiajiantou font-14 color-grey-9 mr8" /> <i className="showtag iconfont icon-sanjiaoxing-down font-15 color-grey-9 mr5 ml5 mt1" />
</div> </div>
</Popover> </Dropdown>
) )
}) })

View File

@ -0,0 +1,84 @@
import React , { useState , useEffect } from 'react';
import { Input , Spin , Menu } from 'antd';
import { getBranch , getTag } from '../GetData/getData';
function SelectOverlay({ changeBranch , tagflag , branchList , projectsId , owner }) {
const [ inputValue , setInputValue] = useState(undefined);
const [ nav , setNav ] = useState(0);
const [ isSpin , setIsSpin ] = useState(true);
const [ data , setData ] = useState(undefined);
const [ datas , setDatas ] = useState(undefined);
const [ keys ,setKeys] = useState("branch");
useEffect(()=>{
if(branchList){
setData(branchList);
setDatas(branchList);
setIsSpin(false);
}
},[branchList])
async function getBranchs(id,owner){
let result = await getBranch(id,owner);
setData(result);
setDatas(result);
setIsSpin(false);
}
async function getTags(id,owner){
let result = await getTag(id,owner);
setData(result);
setDatas(result);
setIsSpin(false);
}
function chooseitem(value){
changeBranch(value);
}
function changeInputValue(e){
setInputValue(e.target.value);
let filter = e.target.value ? data && data.length>0 && data.filter(item=>item.name.indexOf(e.target.value)>-1) : data;
setDatas(filter);
}
function changeNav(e){
setKeys(e.key);
setIsSpin(true);
if(e.key === "branch"){
getBranchs(projectsId,owner);
}else{
getTags(projectsId,owner);
}
}
return(
<div className="overlayBranch">
<div className="padding15" style={{paddingBottom:"0px"}}>
<Input
prefix={<i className="iconfont icon-sousuo_icon1 font-14"></i>}
placeholder="请输入分支或标签名称搜索"
autocomplete="off" className="OptionsInput"
value={inputValue}
onChange={changeInputValue}
/>
</div>
<Menu mode="horizontal" className="navUl" selectedKeys={[keys]} onClick={changeNav}>
<Menu.Item key={"branch"}>分支</Menu.Item>
{ tagflag && <Menu.Item key={"tag"}>标签</Menu.Item> }
</Menu>
<Spin spinning={isSpin}>
<ul className="OptionsUl" id="ul-btn">
{
datas && datas.length>0 ?
datas.map((item,key)=>{
return(
<li key={key} onClick={()=>chooseitem(item.name)}><a className="task-hide ulALink">{item.name}</a></li>
)
}):
<p className="listTips">暂无{inputValue}{nav === 0 ?"分支":"标签"}~</p>
}
</ul>
</Spin>
</div>
)
}
export default SelectOverlay;

View File

@ -27,10 +27,11 @@
overflow-y: auto; overflow-y: auto;
} }
.OptionsUl li{ .OptionsUl li{
height: 35px; height: 30px;
line-height: 35px; line-height: 30px;
cursor: pointer; cursor: pointer;
padding:0px 10px; padding:0px 20px;
margin:5px 0px;
} }
.OptionsUl li:hover{ .OptionsUl li:hover{
background-color: #F0F0F0; background-color: #F0F0F0;
@ -45,38 +46,49 @@
width: 100%; width: 100%;
} }
.branch-tagBox{ .branch-tagBox{
border:1px solid #eee; border:1px solid #D0D0D0;
border-radius: 3px; border-radius: 3px;
height: 40px; height: 40px;
display: flex; display: flex;
align-items: center; align-items: center;
cursor: pointer; cursor: pointer;
min-width: 140px; min-width: 104px;
} }
.branch-tagBox-list .ant-popover-arrow{ .branch-tagBox:hover{
display: none; background-color: #F3F4F6;
} }
.branch-tagBox-list.ant-popover.ant-popover-placement-bottom{ .branch-tagBox-list{
padding-top:0px; background: #FFFFFF;
box-shadow: 0px 4px 8px 2px rgba(212, 212, 212, 0.5);
border-radius: 4px;
.ant-popover-arrow{
display: none;
}
&.ant-popover.ant-popover-placement-bottom{
padding-top:0px;
}
.branch-tagBox .ant-dropdown-link{
display: block;
flex:1;
max-width: 105px;
}
.ant-popover-inner-content{
padding:0px;
}
} }
.branch-tagBox .ant-dropdown-link{ .overlayBranch{
display: block; width: 325px;
flex:1; .navUl{
} margin-top: 8px;
.branch-tagBox-list .ant-popover-inner-content{ height: 30px;
padding:0px; line-height: 30px;
} li{
.navUl{ height: 30px;
display: flex; line-height: 30px;
justify-content: space-between; padding:0px 5px;
align-items: center; margin-left: 20px!important;
margin-top: 5px; }
} }
.navUl li{
cursor: pointer;
}
.navUl li.active{
color:#5091FF;
} }
.listTips{ .listTips{
padding:20px 0px; padding:20px 0px;

View File

@ -7,14 +7,12 @@ function Releases({owner,projectsId,releaseVersions , baseOperate , projectType}
return( return(
<div> <div>
<FlexAJ> <FlexAJ>
<AlignCenter><span className="font-16 color-grey-6">发行版</span> <AlignCenter><Link to={`/${owner}/${projectsId}/releases`} className="font-16 color-ooo">发行版</Link>
{ releaseVersions && releaseVersions.total_count > 0 && <span className="infoCount">{releaseVersions.total_count}</span>} { releaseVersions && releaseVersions.total_count > 0 && <span className="infoCount">{releaseVersions.total_count}</span>}
</AlignCenter> </AlignCenter>
{ (releaseVersions && releaseVersions.total_count > 0) || projectType ===2 ? {/* {
<Link className="font-12 color-grey-9" to={`/${owner}/${projectsId}/releases`}>全部</Link> baseOperate && projectType !==2 && <Link className="font-12 color-blue" to={`/projects/${owner}/${projectsId}/releases/new`}>新建</Link>
: } */}
baseOperate && <Link className="font-12 color-blue" to={`/${owner}/${projectsId}/releases/new`}>新建</Link>
}
</FlexAJ> </FlexAJ>
{ {
releaseVersions && releaseVersions.total_count>0 ? releaseVersions && releaseVersions.total_count>0 ?
@ -32,7 +30,10 @@ function Releases({owner,projectsId,releaseVersions , baseOperate , projectType}
</AlignTop> </AlignTop>
) )
}) })
:"" :
<div className="mt8">
您暂未发布任何版本{baseOperate && projectType !==2 && <Link className="color-blue ml20" to={`/projects/${owner}/${projectsId}/releases/new`}>创建新版本</Link>}
</div>
} }
</div> </div>

View File

@ -378,7 +378,7 @@ function CoderDepot(props){
</div> </div>
} }
{ fileOperate && { fileOperate &&
<Dropdown overlay={fileMenu()} className="mr20" trigger={['click']}> <Dropdown overlay={fileMenu()} className="mr10" trigger={['click']}>
<Button type="default">文件 <i className="iconfont icon-sanjiaoxing-down ml3 font-14 color-grey-9"></i></Button> <Button type="default">文件 <i className="iconfont icon-sanjiaoxing-down ml3 font-14 color-grey-9"></i></Button>
</Dropdown> </Dropdown>
} }
@ -492,7 +492,7 @@ function CoderDepot(props){
inviteCode && inviteCode &&
<div> <div>
<Divider /> <Divider />
<Invite code={inviteCode} className={"detailsCode"}/> <Invite code={inviteCode}/>
</div> </div>
} }
{ {

View File

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

View File

@ -3,6 +3,8 @@ import RenderHtml from '../../components/render-html';
import { AlignCenter } from '../Component/layout'; import { AlignCenter } from '../Component/layout';
import { Dropdown , Menu , Spin } from 'antd'; import { Dropdown , Menu , Spin } from 'antd';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import ReadmeCatelogue from './sub/ReadmeCatelogue';
const $ = window.$; const $ = window.$;
function CoderDepotReadme({ operate , history , readme , ChangeFile }){ function CoderDepotReadme({ operate , history , readme , ChangeFile }){
@ -23,34 +25,25 @@ function CoderDepotReadme({ operate , history , readme , ChangeFile }){
const anchor = el.id; const anchor = el.id;
const level = el.tagName.replace("H", ""); const level = el.tagName.replace("H", "");
const href = `#${anchor}`; const href = `#${anchor}`;
return { href:`${path}${href}`,text:el.textContent , level:level } return { href:`${href}`,text:el.textContent , level:level }
}); });
setMenuList(items); setMenuList(items);
},[content]) },[content])
function menu(){ function menu(){
if(menuList && menuList.length > 0){ if(menuList && menuList.length > 0){
let hash = history.location.hash;
return( return(
<Menu className="menuslist"> <ReadmeCatelogue menuList={menuList}/>
{
menuList.map((item,key)=>{
return(
<Menu.Item key={item.id} className={decodeURI(hash).indexOf(item.text)>-1 ?"active":""}><Link to={`${item.href}`} style={{paddingLeft:`${item.level *10}px`}} title={item.text}>{item.text}</Link></Menu.Item>
)
})
}
</Menu>
) )
}else{ }else{
return <Spin /> return <Spin />
} }
} }
return( return(
<div className="commonBox" id="readme"> <div className="commonBox readBox" id="readme">
<div className="commonBox-title boxTitle"> <div className="commonBox-title boxTitle">
<AlignCenter> <AlignCenter>
<Dropdown overlay={menu()}> <Dropdown overlay={menu()} trigger={['click']} overlayClassName="menuslist">
<span className="catelogue"> <span className="catelogue">
<i className="iconfont icon-zhangjie1 font-14 mr5"></i> <i className="iconfont icon-zhangjie1 font-14 mr5"></i>
<span>目录</span> <span>目录</span>
@ -61,7 +54,7 @@ function CoderDepotReadme({ operate , history , readme , ChangeFile }){
{ {
operate ? operate ?
<a className="ml20 pull-right" onClick={() =>ChangeFile(readme && readme.path, false)}> <a className="ml20 pull-right" onClick={() =>ChangeFile(readme && readme.path, false)}>
<i className="iconfont icon-bianji6 font-16 color-blue"></i> <i className="iconfont icon-a-bianji font-17 color-grey-6"></i>
</a> </a>
:"" :""
} }

View File

@ -4,7 +4,7 @@ import { Dropdown , Menu , Icon , Tooltip , Spin } from 'antd';
import { truncateCommitId } from '../common/util'; import { truncateCommitId } from '../common/util';
import { getBranch } from '../GetData/getData'; import { getBranch } from '../GetData/getData';
import Nodata from '../Nodata'; import Nodata from '../Nodata';
import './list.css'; import './list.scss';
function turnbar(str){ function turnbar(str){
if(str && str.length>0 && str.indexOf("/")>-1){ if(str && str.length>0 && str.indexOf("/")>-1){

View File

@ -1,6 +1,6 @@
import React, { Component } from "react"; import React, { Component } from "react";
import { Popconfirm , Select } from "antd"; import { Popconfirm , Select } from "antd";
import "./list.css"; import "./list.scss";
import axios from "axios"; import axios from "axios";
import Meditor from "../Newfile/m_editor"; import Meditor from "../Newfile/m_editor";
import RenderHtml from "../../components/render-html"; import RenderHtml from "../../components/render-html";

View File

@ -3,8 +3,9 @@ import { Spin, Tooltip, Button } from 'antd';
import { Link, Route, Switch } from 'react-router-dom'; import { Link, Route, Switch } from 'react-router-dom';
import { Content, AlignTop } from '../Component/layout'; import { Content, AlignTop } from '../Component/layout';
import DetailBanner from './sub/DetailBanner'; import DetailBanner from './sub/DetailBanner';
import { numFormat } from 'educoder';
import '../css/index.scss' import '../css/index.scss'
import './list.css'; import './list.scss';
import Loadable from 'react-loadable'; import Loadable from 'react-loadable';
import Loading from '../../Loading'; import Loading from '../../Loading';

View File

@ -5,7 +5,7 @@ import { getImageUrl } from 'educoder';
import "slick-carousel/slick/slick.css"; import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css"; import "slick-carousel/slick/slick-theme.css";
import '../css/index.scss' import '../css/index.scss'
import './list.css'; import './list.scss';
import './Index.scss'; import './Index.scss';
import ListItem from './IndexItem' import ListItem from './IndexItem'
import axios from 'axios'; import axios from 'axios';

View File

@ -129,13 +129,14 @@
} }
.infoCount{ .infoCount{
display: inline-block; display: inline-block;
padding:0px 5px; width: 24px;
height: 16px; text-align: center;
line-height: 16px; height: 24px;
background-color: #eee; line-height: 24px;
color:#999; background-color:rgba(153, 153, 153, 0.13);;
color:#666;
border-radius: 12px; border-radius: 12px;
margin-left: 10px; margin-left: 6px;
font-size: 12px; font-size: 12px;
} }
.attrPerson{ .attrPerson{
@ -195,16 +196,14 @@
} }
.listtable{ .listtable{
margin-top: 20px; margin-top: 20px;
border:1px solid #d9d9d9;
border-radius: 4px;
.listtablehead{ .listtablehead{
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: flex-start; align-items: flex-start;
border-bottom: 1px solid #d9d9d9; border-bottom: 1px solid #d9d9d9;
padding:7px 20px; padding:13px 20px;
border-radius: 4px 4px 0px 0px; border-radius: 4px 4px 0px 0px;
background-color: #FAFBFC; border: 1px solid rgba(42, 97, 255, 0.23);
.ellipsistxt{ .ellipsistxt{
margin-top: 6px; margin-top: 6px;
#ptxt{ #ptxt{
@ -239,20 +238,25 @@
margin-left: 8px; margin-left: 8px;
cursor: pointer; cursor: pointer;
border-radius: 2px; border-radius: 2px;
background-color: #c1c1c1; height: 16px;
background: rgba(153, 153, 153, 0.2);
border-radius: 2px;
padding:0px 4px; padding:0px 4px;
height: 14px; height: 14px;
line-height: 14px; line-height: 14px;
margin-top: 9px; margin-top: 9px;
i{ i{
font-size: 15px!important; font-size: 15px!important;
color: #fff; color: #333;
height: 14px; height: 14px;
line-height: 14px; line-height: 14px;
} }
} }
} }
.listtablebody{ .listtablebody{
border-radius:0px 0px 4px 4px ;
border: 1px solid #D0D0D0;
border-top: none;
li.listtablepath{ li.listtablepath{
a{color: #40a9ff;} a{color: #40a9ff;}
p{ p{
@ -260,12 +264,15 @@
} }
} }
& > li{ & > li{
height: 42px; height: 44px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
border-bottom: 1px solid #d9d9d9; border-bottom: 1px solid #d9d9d9;
padding:0px 20px 0px 24px; padding:0px 20px 0px 24px;
&:hover{
background-color: #F3F4F6;
}
& > span:first-child{ & > span:first-child{
width: 30%; width: 30%;
overflow: hidden; overflow: hidden;
@ -327,25 +334,6 @@
} }
} }
.menuslist{
max-height: 200px;
overflow-y: auto;
padding:10px 15px;
border-radius: 4px;
.ant-dropdown-menu-item{
border-radius: 8px;
text-align: left!important;
a{
width: 350px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.ant-dropdown-menu-item.active{
background-color: #e6f7ff;
}
}
.catelogue{ .catelogue{
border:1px solid rgb(211, 211, 211); border:1px solid rgb(211, 211, 211);
font-size: 15px; font-size: 15px;

View File

@ -5,7 +5,7 @@ import { AlignCenter } from '../Component/layout';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import '../css/index.scss'; import '../css/index.scss';
import Nodata from '../Nodata'; import Nodata from '../Nodata';
import './list.css'; import './list.scss';
import img_parise from '../Images/parise.png'; import img_parise from '../Images/parise.png';
class IndexItem extends Component { class IndexItem extends Component {

View File

@ -218,9 +218,9 @@
} }
/* -----------详情------------ */ /* -----------详情------------ */
.detailHeader-wrapper{ .detailHeader-wrapper{
background-color:#FAFBFC; background-color:#FBFCFF;
/* background: url(../Images/forgeBanner.jpg) no-repeat center; */ border-bottom:1px solid #e2e2e2;
/* background-size:cover; */ /* box-shadow: 0px 2px 11px 0px#D0D0D0; */
} }
.headerMenu-wrapper{ .headerMenu-wrapper{
font-size: 16px; font-size: 16px;
@ -232,7 +232,7 @@
text-align: center; text-align: center;
height: 40px; height: 40px;
line-height: 28px; line-height: 28px;
margin-right: 40px; padding:0px 20px;
} }
.headerMenu-wrapper li a{ .headerMenu-wrapper li a{
color: #666; color: #666;
@ -241,34 +241,44 @@
margin-right: 8px; margin-right: 8px;
} }
.headerMenu-wrapper li a > span.num{ .headerMenu-wrapper li a > span.num{
height: 28px; line-height: 24px;
line-height: 29px; margin-left: 5px;
margin-left: 8px; margin-top: 2px;
font-size: 12px; font-size: 12px;
color: #2878FF;
float: right; 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: #2A61FF!important;
} }
.headerMenu-wrapper li.active::after{ .headerMenu-wrapper li.active::after{
position: absolute; position: absolute;
bottom:0px; bottom:0px;
height:2px; height:2px;
background-color: #5091FF; background-color: #2A61FF;
content:''; content:'';
left: 0px; left: 0px;
width:100%; width:100%;
} }
.detail_tag_btn{ .detail_tag_btn{
height:26px; height:34px;
line-height: 26px; line-height: 32px;
border-radius:5px; border-radius:5px;
border:1px solid #f1f1f1; border:1px solid #D0D0D0;
display: flex; display: flex;
align-items: center; align-items: center;
margin-left: 30px; margin-left: 30px;
padding:0px; padding:0px;
background-color: transparent; background-color:#FAFBFC;
box-shadow: none; box-shadow: none;
} }
.detail_tag_btn:hover{
background-color: #F3F4F6;
}
.ant-tooltip { .ant-tooltip {
max-width: fit-content!important; max-width: fit-content!important;
} }
@ -280,11 +290,12 @@
margin-right: 10px; margin-right: 10px;
} }
.detail_tag_btn_count{ .detail_tag_btn_count{
padding:0px 10px; width: 42px;
text-align: center;
background: #fff; background: #fff;
border-radius: 0px 4px 4px 0px; border-radius: 0px 4px 4px 0px;
font-size: 12px;
height:100%; height:100%;
border-left: 1px solid #D0D0D0;
} }
.files-md{ .files-md{
padding:20px; padding:20px;
@ -499,7 +510,7 @@
} }
.addFile a{ .addFile a{
display: block; display: block;
background-color: rgb(76, 172, 255,0.8); background-color: rgba(76, 172, 255,0.8);
color: #fff; color: #fff;
cursor: pointer; cursor: pointer;
height: 32px; height: 32px;
@ -514,7 +525,7 @@
border-left: 1px solid rgba(247, 247, 247, 0.3); border-left: 1px solid rgba(247, 247, 247, 0.3);
} }
.addFile a:active{ .addFile a:active{
background-color: rgb(76, 172, 255,1); background-color: rgba(76, 172, 255,1);
} }
@ -567,14 +578,28 @@
border-bottom: 1px solid #d9d9d9; border-bottom: 1px solid #d9d9d9;
border-radius: 4px 4px 0px 0px; border-radius: 4px 4px 0px 0px;
} }
.readBox{
border:none;
&.commonBox .commonBox-info{
border:1px solid #D0D0D0;
border-top: none;
border-radius: 0px 0px 4px 4px;
padding:20px 38px;
}
}
.commonBox .commonBox-title.boxTitle{ .commonBox .commonBox-title.boxTitle{
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
height: 65px;
line-height: 65px;
background: #FAFCFF;
border-radius: 4px 4px 0px 0px;
border: 1px solid rgba(42, 97, 255, 0.23);
} }
.synchronism{ .synchronism{
display: block; display: block;
height: 26px; height: 34px;
line-height: 26px; line-height: 34px;
padding:0px 15px; padding:0px 15px;
color: #fff!important; color: #fff!important;
background-color: #28BD6C; background-color: #28BD6C;
@ -583,10 +608,16 @@
.files_info{ .files_info{
cursor: pointer; cursor: pointer;
} }
.commonBox .commonBox-info{ .commonBox {
padding:20px 15px; .commonBox-info{
padding:20px 15px;
}
}
.commonBox-title-read{
vertical-align: middle;
color: #666;
font-size: 14px;
} }
.commonBox-title-read{vertical-align: middle;color: #666;}
@media screen and (max-width: 370px){ @media screen and (max-width: 370px){
.p-r-tags,.p-r-btn{ .p-r-tags,.p-r-btn{
@ -732,4 +763,13 @@ a.color-grey-ccc:hover{
text-align: center; text-align: center;
display: flex; display: flex;
justify-content: center; justify-content: center;
}
.depotNum{
color: #666!important;
span:last-child{
color: #333;
}
&:hover span:last-child{
color: #2A61FF;
}
} }

View File

@ -1,6 +1,7 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { Skeleton , Tooltip} from 'antd'; import { Skeleton , Tooltip} from 'antd';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { numFormat } from 'educoder';
function DetailBanner({ history,list , owner , projectsId , isManager , url , pathname , state , urlFlag , projectDetail , platform ,open_devops }){ function DetailBanner({ history,list , owner , projectsId , isManager , url , pathname , state , urlFlag , projectDetail , platform ,open_devops }){
const [ menuName , setMenuName ] = useState(undefined); const [ menuName , setMenuName ] = useState(undefined);
@ -50,7 +51,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
<Link to={{ pathname: `/${owner}/${projectsId}/issues`, state }}> <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> <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> <span>易修</span>
{projectDetail && projectDetail.issues_count ? <span className="num">{projectDetail.issues_count}</span> : ""} {projectDetail && projectDetail.issues_count ? <span className="num">{numFormat(projectDetail.issues_count)}</span> : ""}
</Link> </Link>
</Tooltip> </Tooltip>
</li> </li>
@ -61,7 +62,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
<Link to={{ pathname: `/${owner}/${projectsId}/pulls`, state }}> <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={pathname==="pulls" ? "iconfont icon-hebingqingqiu1 color-grey-3 mr5 font-14":"iconfont icon-hebingqingqiu1 color-grey-6 font-14 mr5"}></i>
<span>合并请求</span> <span>合并请求</span>
{projectDetail && projectDetail.pull_requests_count ? <span className="num">{projectDetail.pull_requests_count}</span> : ""} {projectDetail && projectDetail.pull_requests_count ? <span className="num">{numFormat(projectDetail.pull_requests_count)}</span> : ""}
</Link> </Link>
</li>:"" </li>:""
} }
@ -101,7 +102,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
<Link to={{ pathname: `/${owner}/${projectsId}/milestones`, state }}> <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> <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> <span>里程碑</span>
{projectDetail && projectDetail.versions_count ? <span className="num">{projectDetail.versions_count}</span> :""} {projectDetail && projectDetail.versions_count ? <span className="num">{numFormat(projectDetail.versions_count)}</span> :""}
</Link> </Link>
</li> </li>
} }

View File

@ -6,7 +6,7 @@ function Invite({code,className}) {
return( return(
<div className={className}> <div className={className}>
<span className="font-16 color-grey-6">邀请码</span> <span className="font-16 color-ooo">邀请码</span>
<div> <div>
<input value={code} id="devitecode" style={{width:"62px",border:"none",cursor:"default"}} readOnly/> <input value={code} id="devitecode" style={{width:"62px",border:"none",cursor:"default"}} readOnly/>
<CopyTool timeOut={true} beforeText={<p className="edu-txt-center">可以通过邀请码邀请成员加入项目<br/>点击复制邀请码</p>} className="ml8 font-16" inputId="devitecode"/> <CopyTool timeOut={true} beforeText={<p className="edu-txt-center">可以通过邀请码邀请成员加入项目<br/>点击复制邀请码</p>} className="ml8 font-16" inputId="devitecode"/>

View File

@ -0,0 +1,57 @@
import React , {useState } from 'react';
import { Anchor , Input } from 'antd';
import './sub.scss';
const { Link } = Anchor;
const { Search } = Input;
function ReadmeCatelogue({ menuList }) {
const [ goHref , setGoHref ] = useState("");
const [ value , setValue ] = useState("");
const [ menu , setMenu] = useState(menuList);
function onChange(link){
setGoHref(link);
};
function changeValue(e) {
setValue(e.target.value);
if(e.target.value){
let m = menu.filter(i=>i.text.indexOf(e.target.value)>-1);
setMenu(m);
}else{
setMenu(menuList);
}
}
return(
<div>
<div className="searchBox">
<Input
placeholder={"请输入关键字"}
value={value}
onChange={changeValue}
prefix={<i className="iconfont icon-sousuo_icon1 font-14"></i>}/>
</div>
{
menu && menu.length>0?
<div className="anchorBox">
<Anchor affix={false} onChange={onChange}>
{
menu.map((item,key)=>{
return(
<div style={{paddingLeft:`${item.level *10}px`}} className={goHref===item.href?"items active":"items"}>
<Link href={`${item.href}`} title={item.text} />
</div>
)
})
}
</Anchor>
</div>
:""
}
</div>
)
}
export default ReadmeCatelogue;

View File

@ -24,7 +24,47 @@
} }
} }
.detailsCode{ .menuslist{
display: flex; z-index: 100;
justify-content: space-between; width: 297px;
background: #FFFFFF;
box-shadow: 0px 4px 8px 2px rgba(212, 212, 212, 0.5);
border-radius: 4px;
.searchBox{
padding:15px;
border-bottom: 1px solid #eee;
}
.anchorBox{
max-height: 255px;
overflow-y: auto;
}
.ant-anchor-wrapper{
margin-left: 0px;
padding:5px 15px;
.items{
border-radius: 4px;
margin-bottom: 5px;
cursor: pointer;
.ant-anchor-link-title{
color: #333333!important;
}
&:hover{
background-color: #F3F4F6;
}
&.active{
background-color: #2A61FF;
.ant-anchor-link-title{
color: #fff!important;
}
}
}
.ant-anchor-link{
padding:0px;
height: 30px;
line-height: 30px;
}
.ant-anchor-ink::before{
background-color: #fff;
}
}
} }

View File

@ -1,5 +1,5 @@
import React, { forwardRef , useCallback , useEffect, useState } from 'react'; import React, { forwardRef , useCallback , useEffect, useState } from 'react';
import { Form , Input , Radio ,Checkbox , Divider , Button } from 'antd'; import { Form , Input , Radio ,Checkbox , Divider , Button , InputNumber } from 'antd';
import { WhiteBack , FlexAJ } from '../../Component/layout'; import { WhiteBack , FlexAJ } from '../../Component/layout';
import Title from '../../Component/Title'; import Title from '../../Component/Title';
import styled from 'styled-components'; import styled from 'styled-components';
@ -31,7 +31,8 @@ export default Form.create()(
useEffect(()=>{ useEffect(()=>{
if(organizeDetail){ if(organizeDetail){
setFieldsValue({ setFieldsValue({
...organizeDetail ...organizeDetail,
max_repo_creation:organizeDetail.max_repo_creation===-1 ? "":organizeDetail.max_repo_creation
}) })
setImage(organizeDetail.avatar_url); setImage(organizeDetail.avatar_url);
setDescNum(organizeDetail.description ? organizeDetail.description.length : 0); setDescNum(organizeDetail.description ? organizeDetail.description.length : 0);
@ -39,10 +40,10 @@ export default Form.create()(
},[organizeDetail]) },[organizeDetail])
const helper = useCallback( const helper = useCallback(
(label, name, rules, widget , isRequired , flag ) => ( (label, name, rules, widget , isRequired , flag , help ) => (
<div> <div>
<span className={isRequired?"required":""}>{label}</span> <span className={isRequired?"required":""}>{label}</span>
<Form.Item> <Form.Item help={help}>
{getFieldDecorator(name, { rules, validateFirst: true , valuePropName:flag ? "checked":"value" })(widget)} {getFieldDecorator(name, { rules, validateFirst: true , valuePropName:flag ? "checked":"value" })(widget)}
</Form.Item> </Form.Item>
</div> </div>
@ -175,7 +176,8 @@ export default Form.create()(
'最大仓库数:', '最大仓库数:',
"max_repo_creation", "max_repo_creation",
[], [],
<Input value="-1" style={{width:"350px"}}/> <InputNumber value="-1" style={{width:"350px"}}/>,false,false,
"当输入栏为空时,默认数量无限制"
)} )}
<p>选择头像:</p> <p>选择头像:</p>
<UploadImage url={getImageUrl(`/${image}`)} getImage={getImage}/> <UploadImage url={getImageUrl(`/${image}`)} getImage={getImage}/>

View File

@ -11,7 +11,10 @@ ul,ol,dl{
font-size: 22px; font-size: 22px;
font-weight: normal; font-weight: normal;
line-height: 30px; line-height: 30px;
max-width: 850px; max-width: 700px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
.projectN{ .projectN{
word-break: break-all; word-break: break-all;
} }

View File

@ -8,7 +8,7 @@ import './css/TPMchallengesnew.css';
import 'codemirror/lib/codemirror.css'; import 'codemirror/lib/codemirror.css';
const $ = window.$ const $ = window.$
const mdIcons = ["bold", "italic", "|", "list-ul", "list-ol", "|", "code", "code-block", "link", "|", "inline-latex", "latex", '|', "image", "table", '|', "line-break", "watch", "clear"]; const mdIcons = ["bold", "italic", "|", "list-ul", "list-ol", "|", "code", "code-block", "link", "|", "inline-latex", "latex", '|', "image", "table", '|', "line-break", "watch", "clear","fullScreen"];
const NULL_CH = '▁'; const NULL_CH = '▁';
@ -134,6 +134,7 @@ export default ({ mdID, onChange, onCMBeforeChange, onCMBlur, error = false, cla
}, },
toolbarIconsClass: { toolbarIconsClass: {
"line-break": "fa-minus", "line-break": "fa-minus",
"fullScreen":"iconfont icon-fangdaicon font-14"
}, },
toolbarCustomIcons: { toolbarCustomIcons: {
"inline-latex": "<a title='行内公式' class='latex' ><i name='inline-latex' class='fa iconfont icon-hangneigongshi font-14'></i></a>", "inline-latex": "<a title='行内公式' class='latex' ><i name='inline-latex' class='fa iconfont icon-hangneigongshi font-14'></i></a>",
@ -150,6 +151,10 @@ export default ({ mdID, onChange, onCMBeforeChange, onCMBlur, error = false, cla
} }
cm.replaceSelection(NULL_CH) cm.replaceSelection(NULL_CH)
}, },
"fullScreen":function(cm,icon,cursor,selection){
icon.addClass("none");
console.log(cm,icon)
},
"inline-latex": function (cm, icon, cursor, selection) { "inline-latex": function (cm, icon, cursor, selection) {
cm.replaceSelection("$$" + selection + "$$"); cm.replaceSelection("$$" + selection + "$$");
cm.setCursor(cursor.line, cursor.ch + 2); cm.setCursor(cursor.line, cursor.ch + 2);
@ -164,7 +169,8 @@ export default ({ mdID, onChange, onCMBeforeChange, onCMBlur, error = false, cla
lang: { lang: {
toolbar: { toolbar: {
"latex": "多行公式", "latex": "多行公式",
"line-break": "换行" "line-break": "换行",
"fullScreen":"开启全屏"
} }
}, },
onload: function () { onload: function () {
@ -229,7 +235,7 @@ export default ({ mdID, onChange, onCMBeforeChange, onCMBlur, error = false, cla
if (resizeBarEl.current) { if (resizeBarEl.current) {
let el = resizeBarEl.current let el = resizeBarEl.current
let dragging = false let dragging = false
let startY = 0 let startY = 0
function onMouseDown(e) { function onMouseDown(e) {
dragging = true dragging = true
startY = e.pageY startY = e.pageY