Merge remote-tracking branch 'gitlink/gitlink_server' into gitlink_server

This commit is contained in:
jasder 2021-11-09 09:31:23 +08:00
commit d70ddfb2f7
36 changed files with 1347 additions and 943 deletions

View File

@ -3947,7 +3947,7 @@ html>body #ajax-indicator {
} }
.head-nav { .head-nav {
text-align: center; text-align: center;
height: 70px; height: 58px;
box-sizing: border-box; box-sizing: border-box;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -3959,14 +3959,14 @@ html>body #ajax-indicator {
position: absolute; position: absolute;
top: 0px; top: 0px;
z-index: 3; z-index: 3;
height: 70px; height: 58px;
box-sizing: border-box; box-sizing: border-box;
} }
.head-nav ul#header-nav li { .head-nav ul#header-nav li {
float: left; float: left;
height: 70px; height: 58px;
line-height: 70px; line-height: 58px;
cursor: pointer; cursor: pointer;
position: relative; position: relative;
font-size: 16px; font-size: 16px;
@ -3980,9 +3980,6 @@ html>body #ajax-indicator {
color: #fff; color: #fff;
font-size: 16px; font-size: 16px;
} }
.head-right i{
color: #fff!important;
}
.head-nav ul#header-nav li a:hover,.head-nav ul#header-nav li.active a { .head-nav ul#header-nav li a:hover,.head-nav ul#header-nav li.active a {
color: #5091FF; color: #5091FF;
@ -3992,10 +3989,6 @@ html>body #ajax-indicator {
margin-right: 0px margin-right: 0px
} }
.head-nav ul#header-nav li.active{
/* background-color: #3B3B3B; */
}
.head-nav ul#header-nav li p:hover { .head-nav ul#header-nav li p:hover {
color: #cccccc; color: #cccccc;
@ -6714,13 +6707,10 @@ p{
right: 0px; right: 0px;
top:4px; top:4px;
color: #999; color: #999;
<<<<<<< HEAD
=======
} }
.ant-input, .ant-input .ant-input-suffix{ .ant-input, .ant-input .ant-input-suffix{
background-color: #fff!important; background-color: #fff!important;
} }
.has-error .ant-input{ .has-error .ant-input{
background-color: #FEF1F0!important; background-color: #FEF1F0!important;
>>>>>>> pre_develop
} }

View File

@ -3,9 +3,9 @@ import './App.css';
import { ConfigProvider } from 'antd' import { ConfigProvider } from 'antd'
import zhCN from 'antd/lib/locale-provider/zh_CN'; import zhCN from 'antd/lib/locale-provider/zh_CN';
import { import {
// BrowserRouter as Router, // BrowserRouter as Router,
Route, Route,
Switch Switch
} from 'react-router-dom'; } from 'react-router-dom';
import axios from 'axios'; import axios from 'axios';
import LoginDialog from './modules/login/LoginDialog'; import LoginDialog from './modules/login/LoginDialog';
@ -26,18 +26,18 @@ import configureStore from './redux/stores/configureStore';
const store = configureStore(); const store = configureStore();
window.marked = marked; window.marked = marked;
const theme = createMuiTheme({ const theme = createMuiTheme({
palette: { palette: {
primary: { primary: {
main: '#4CACFF', main: '#4CACFF',
contrastText: 'rgba(255, 255, 255, 0.87)' contrastText: 'rgba(255, 255, 255, 0.87)'
}, },
secondary: { main: '#4CACFF' }, // #11cb5f This is just green.A700 as hex. secondary: { main: '#4CACFF' }, // #11cb5f This is just green.A700 as hex.
}, },
}); });
//forge项目 //forge项目
const Projects = Loadable({ const Projects = Loadable({
loader: () => import('./forge/Index'), loader: () => import('./forge/Index'),
loading: Loading, loading: Loading,
}) })
// forge项目详情 // forge项目详情
const ProjectDetail = Loadable({ const ProjectDetail = Loadable({
@ -46,55 +46,55 @@ const ProjectDetail = Loadable({
}); });
//forge安全设置 //forge安全设置
const Security = Loadable({ const Security = Loadable({
loader: () => import('./forge/SecuritySetting/Index'), loader: () => import('./forge/SecuritySetting/Index'),
loading: Loading, loading: Loading,
}) })
//forge项目-devOps详情 //forge项目-devOps详情
const OpsDetail = Loadable({ const OpsDetail = Loadable({
loader: () => import('./forge/DevOps/opsDetail'), loader: () => import('./forge/DevOps/opsDetail'),
loading: Loading, loading: Loading,
}) })
//403页面 //403页面
const Shixunauthority = Loadable({ const Shixunauthority = Loadable({
loader: () => import('./modules/403/Shixunauthority'), loader: () => import('./modules/403/Shixunauthority'),
loading: Loading, loading: Loading,
}) })
//404页面 //404页面
const Shixunnopage = Loadable({ const Shixunnopage = Loadable({
loader: () => import('./modules/404/Shixunnopage'), loader: () => import('./modules/404/Shixunnopage'),
loading: Loading, loading: Loading,
}) })
//500页面 //500页面
const http500 = Loadable({ const http500 = Loadable({
loader: () => import('./modules/500/http500'), loader: () => import('./modules/500/http500'),
loading: Loading, loading: Loading,
}) })
const InfosIndex = Loadable({ const InfosIndex = Loadable({
loader: () => import('./forge/users/Index'), loader: () => import('./forge/users/Index'),
loading: Loading, loading: Loading,
}) })
// 组织 // 组织
const OrganizeIndex = Loadable({ const OrganizeIndex = Loadable({
loader: () => import('./forge/Team/Index'), loader: () => import('./forge/Team/Index'),
loading: Loading, loading: Loading,
}) })
const EducoderLogin = Loadable({ const EducoderLogin = Loadable({
loader: () => import('./modules/login/EducoderLogin'), loader: () => import('./modules/login/EducoderLogin'),
loading: Loading, loading: Loading,
}) })
const Search = Loadable({ const Search = Loadable({
loader: () => import('./modules/search/'), loader: () => import('./modules/search/'),
loading: Loading, loading: Loading,
}) })
const WikiPreview = Loadable({ const WikiPreview = Loadable({
loader: () => import('./forge/Wiki/Preview'), loader: () => import('./forge/Wiki/Preview'),
loading: Loading, loading: Loading,
}) })
const ProjectIndex = Loadable({ const ProjectIndex = Loadable({
loader: () => import("./forge/Index"), loader: () => import("./forge/Index"),
loading: Loading, loading: Loading,
}); });
const Home = Loadable({ const Home = Loadable({
@ -110,411 +110,411 @@ const Home = Loadable({
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"]; 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 { class App extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { this.state = {
Addcoursestype: false, Addcoursestype: false,
Addcoursestypes: false, Addcoursestypes: false,
mydisplay: false, mydisplay: false,
occupation: 0, occupation: 0,
mygetHelmetapi: null, mygetHelmetapi: null,
pathType: null, pathType: null,
pathName: null, pathName: null,
} }
} }
UNSAFE_componentWillMount() { UNSAFE_componentWillMount() {
initAxiosInterceptors(this.props); initAxiosInterceptors(this.props);
let pathname = window.location.pathname ? window.location.pathname.split('/')[1] : ''; let pathname = window.location.pathname ? window.location.pathname.split('/')[1] : '';
pathname && this.getPathnameType(pathname); pathname && this.getPathnameType(pathname);
// 添加路由监听,决定组织还是个人 // 添加路由监听,决定组织还是个人
this.unlisten = this.props.history.listen((location) => { this.unlisten = this.props.history.listen((location) => {
let newPathname = location.pathname.split('/')[1]; let newPathname = location.pathname.split('/')[1];
if (this.state.pathName !== newPathname) { if (this.state.pathName !== newPathname) {
// this.setState({ pathType: '' }); // this.setState({ pathType: '' });
newPathname && this.getPathnameType(newPathname); newPathname && this.getPathnameType(newPathname);
} }
}); });
} }
shouldComponentUpdate(nextProps, nextState) { shouldComponentUpdate(nextProps, nextState) {
// (!keyWord.includes(this.props.location.pathname.split('/')[1])) && // (!keyWord.includes(this.props.location.pathname.split('/')[1])) &&
if (nextProps.location.pathname.split('/')[1] !== this.props.location.pathname.split('/')[1] && nextState.pathType === this.state.pathType) { if (nextProps.location.pathname.split('/')[1] !== this.props.location.pathname.split('/')[1] && nextState.pathType === this.state.pathType) {
return false; return false;
} else { } else {
return true; return true;
} }
} }
getPathnameType = (pathname) => { getPathnameType = (pathname) => {
if (!keyWord.includes(pathname)) { if (!keyWord.includes(pathname)) {
let url = `/owners/${pathname}.json`; let url = `/owners/${pathname}.json`;
axios.get(url).then((response) => { axios.get(url).then((response) => {
if (response && response.status === 200) { if (response && response.status === 200) {
this.setState({ this.setState({
pathType: response.data.type || '404', pathType: response.data.type || '404',
pathName: pathname, pathName: pathname,
}) })
} }
}); });
}else{ }else{
this.setState({ this.setState({
pathType: pathname, pathType: pathname,
pathName: pathname, pathName: pathname,
}); });
} }
} }
HideAddcoursestypess = (i) => { HideAddcoursestypess = (i) => {
this.setState({ this.setState({
Addcoursestype: false, Addcoursestype: false,
Addcoursestypes: false, Addcoursestypes: false,
mydisplay: true, mydisplay: true,
occupation: i, occupation: i,
}) })
}; };
hideAddcoursestypes = () => { hideAddcoursestypes = () => {
this.setState({ this.setState({
Addcoursestypes: false Addcoursestypes: false
}) })
}; };
componentDidMount() { componentDidMount() {
document.title = "loading..."; document.title = "loading...";
this.getAppdata(); this.getAppdata();
window.addEventListener('error', (event) => { window.addEventListener('error', (event) => {
const msg = `${event.type}: ${event.message}`; const msg = `${event.type}: ${event.message}`;
}); });
} }
componentWillUnmount() { componentWillUnmount() {
this.unlisten && this.unlisten(); // 执行解绑 this.unlisten && this.unlisten(); // 执行解绑
} }
//修改登录方法 //修改登录方法
Modifyloginvalue = () => { Modifyloginvalue = () => {
this.setState({ this.setState({
isRender: false, isRender: false,
}) })
}; };
//获取数据为空的时候 //获取数据为空的时候
gettablogourlnull = () => { gettablogourlnull = () => {
this.setState({ this.setState({
mygetHelmetapi: undefined mygetHelmetapi: undefined
}); });
document.title = "Forge"; document.title = "Forge";
var link = document.createElement('link'), var link = document.createElement('link'),
oldLink = document.getElementById('dynamic-favicon'); oldLink = document.getElementById('dynamic-favicon');
link.id = 'dynamic-favicon'; link.id = 'dynamic-favicon';
link.rel = 'shortcut icon'; link.rel = 'shortcut icon';
link.href = "/react/build/./favicon.ico"; link.href = "/react/build/./favicon.ico";
if (oldLink) { if (oldLink) {
document.head.removeChild(oldLink); document.head.removeChild(oldLink);
} }
document.head.appendChild(link); document.head.appendChild(link);
}; };
//获取数据的时候 //获取数据的时候
gettablogourldata = (response) => { gettablogourldata = (response) => {
document.title = response.data.setting.name; document.title = response.data.setting.name;
var link = document.createElement('link'), var link = document.createElement('link'),
oldLink = document.getElementById('dynamic-favicon'); oldLink = document.getElementById('dynamic-favicon');
link.id = 'dynamic-favicon'; link.id = 'dynamic-favicon';
link.rel = 'shortcut icon'; link.rel = 'shortcut icon';
link.href = '/' + response.data.setting.tab_logo_url; link.href = '/' + response.data.setting.tab_logo_url;
if (oldLink) { if (oldLink) {
document.head.removeChild(oldLink); document.head.removeChild(oldLink);
} }
document.head.appendChild(link); document.head.appendChild(link);
} }
//获取当前定制信息 //获取当前定制信息
getAppdata = () => { getAppdata = () => {
let url = "/setting.json"; let url = "/setting.json";
axios.get(url).then((response) => { axios.get(url).then((response) => {
if (response) { if (response) {
if (response.data) { if (response.data) {
this.setState({ this.setState({
mygetHelmetapi: response.data.setting mygetHelmetapi: response.data.setting
}); });
//存储配置到游览器 //存储配置到游览器
localStorage.setItem('chromesetting', JSON.stringify(response.data.setting)); localStorage.setItem('chromesetting', JSON.stringify(response.data.setting));
localStorage.setItem('chromesettingresponse', JSON.stringify(response)); localStorage.setItem('chromesettingresponse', JSON.stringify(response));
try { try {
if (response.data.setting.tab_logo_url) { if (response.data.setting.tab_logo_url) {
this.gettablogourldata(response); this.gettablogourldata(response);
} else { } else {
this.gettablogourlnull(); this.gettablogourlnull();
} }
} catch (e) { } catch (e) {
this.gettablogourlnull(); this.gettablogourlnull();
} }
} else { } else {
this.gettablogourlnull(); this.gettablogourlnull();
} }
} else { } else {
this.gettablogourlnull(); this.gettablogourlnull();
} }
}).catch((error) => { }).catch((error) => {
this.gettablogourlnull(); this.gettablogourlnull();
}); });
}; };
render() { render() {
const { mygetHelmetapi, pathType} = this.state; const { mygetHelmetapi, pathType} = this.state;
let personal = mygetHelmetapi && mygetHelmetapi.personal; let personal = mygetHelmetapi && mygetHelmetapi.personal;
return ( return (
<Provider store={store}> <Provider store={store}>
<ConfigProvider locale={zhCN}> <ConfigProvider locale={zhCN}>
<MuiThemeProvider theme={theme}> <MuiThemeProvider theme={theme}>
<LoginDialog {...this.props} {...this.state} Modifyloginvalue={() => this.Modifyloginvalue()}></LoginDialog> <LoginDialog {...this.props} {...this.state} Modifyloginvalue={() => this.Modifyloginvalue()}></LoginDialog>
<SiderBar /> <SiderBar />
{/* <Router> */} {/* <Router> */}
<Switch> <Switch>
{/* wiki预览 */} {/* wiki预览 */}
<Route path="/:owner/:projectsId/wiki/preview/:projectName/:projectId" render={ <Route path="/:owner/:projectsId/wiki/preview/:projectName/:projectId" render={
(props) => { (props) => {
return (<WikiPreview {...this.props} {...props} {...this.state} />) return (<WikiPreview {...this.props} {...props} {...this.state} />)
} }
} /> } />
{/* 项目PR */} {/* 项目PR */}
<Route path="/:owner/:projectsId/compare" <Route path="/:owner/:projectsId/compare"
render={ render={
(props) => (<ProjectDetail {...this.props} {...props} {...this.state} />) (props) => (<ProjectDetail {...this.props} {...props} {...this.state} />)
} }
></Route> ></Route>
{/*项目*/} {/*项目*/}
<Route <Route
path={"/:owner/:projectId/devops/:opsId/detail"} path={"/:owner/:projectId/devops/:opsId/detail"}
render={ render={
(props) => { (props) => {
return (<OpsDetail {...this.props} {...props} {...this.state} />) return (<OpsDetail {...this.props} {...props} {...this.state} />)
} }
}> }>
</Route> </Route>
<Route <Route
path={"/settings"} path={"/settings"}
render={ render={
(props) => { (props) => {
return (<Security {...this.props} {...props} {...this.state} />) return (<Security {...this.props} {...props} {...this.state} />)
} }
}> }>
</Route> </Route>
<Route <Route
path="/register" path="/register"
render={ render={
(props) => { (props) => {
return (<EducoderLogin {...this.props} {...props} {...this.state} />) return (<EducoderLogin {...this.props} {...props} {...this.state} />)
} }
} }
/> />
{/*403*/} {/*403*/}
<Route path="/403" component={Shixunauthority} /> <Route path="/403" component={Shixunauthority} />
<Route path="/500" component={http500} /> <Route path="/500" component={http500} />
{/*404*/} {/*404*/}
<Route path="/nopage" component={Shixunnopage} /> <Route path="/nopage" component={Shixunnopage} />
{/* 查询 */} {/* 查询 */}
<Route path="/search" component={Search} /> <Route path="/search" component={Search} />
<Route exact path="/explore/all" <Route exact path="/explore/all"
render={ render={
(props) => ( (props) => (
<ProjectIndex {...this.props} {...props} /> <ProjectIndex {...this.props} {...props} />
) )
} }
/> />
<Route exact path="/explore" <Route exact path="/explore"
render={ render={
(props) => ( (props) => (
<ProjectIndex {...this.props} {...props} /> <ProjectIndex {...this.props} {...props} />
) )
} }
/> />
{/* 组织 */}
<Route path={"/organize"}
render={
(props) => {
return (<OrganizeIndex {...props} {...this.props} {...this.state} />)
}
}>
</Route>
{/*新建项目等*/}
<Route
path={"/projects"}
render={
(props) => {
return (<Projects {...this.props} {...props} {...this.state} />)
}
}>
</Route>
{/* 判断为用户/组织,并进入对应页面 */}
{
pathType === 'User' ?
<Route exact path="/:username"
render={
(props) => {
return (<InfosIndex {...this.props} {...this.state} />)
}
}
/> : pathType === 'Organization' ? <Route path={"/:OIdentifier"}
render={
(props) => {
return (<OrganizeIndex {...props} {...this.props} {...this.state} />)
}
}>
</Route> : pathType === '404' ? <Route component={Shixunnopage} />:
""
}
<Route exact path="/"
render={
(props) => (
<Home {...props} {...this.props} {...this.state}/>
)
}
/>
{/* 个人主页 */}
<Route path="/:username"
render={
(props) => {
return (<InfosIndex {...this.props} {...this.state} />)
}
}></Route>
{/* 组织 */} <Route component={Shixunnopage} />
<Route path={"/organize"} </Switch>
render={ {/* </Router> */}
(props) => { </MuiThemeProvider>
return (<OrganizeIndex {...props} {...this.props} {...this.state} />) </ConfigProvider>
} </Provider>
}> );
</Route> }
{/*新建项目等*/}
<Route
path={"/projects"}
render={
(props) => {
return (<Projects {...this.props} {...props} {...this.state} />)
}
}>
</Route>
{/* 判断为用户/组织,并进入对应页面 */}
{
pathType === 'User' ?
<Route exact path="/:username"
render={
(props) => {
return (<InfosIndex {...this.props} {...this.state} />)
}
}
/> : pathType === 'Organization' ? <Route path={"/:OIdentifier"}
render={
(props) => {
return (<OrganizeIndex {...props} {...this.props} {...this.state} />)
}
}>
</Route> : pathType === '404' ? <Route component={Shixunnopage} />:
""
}
<Route exact path="/"
render={
(props) => (
<Home {...props} {...this.props} {...this.state}/>
)
}
/>
{/* 个人主页 */}
<Route path="/:username"
render={
(props) => {
return (<InfosIndex {...this.props} {...this.state} />)
}
}></Route>
<Route component={Shixunnopage} />
</Switch>
{/* </Router> */}
</MuiThemeProvider>
</ConfigProvider>
</Provider>
);
}
} }
// moment国际化设置为中文 // moment国际化设置为中文
moment.defineLocale('zh-cn', { moment.defineLocale('zh-cn', {
months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'), weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
weekdaysMin: '日_一_二_三_四_五_六'.split('_'), weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
longDateFormat: { longDateFormat: {
LT: 'Ah点mm分', LT: 'Ah点mm分',
LTS: 'Ah点m分s秒', LTS: 'Ah点m分s秒',
L: 'YYYY-MM-DD', L: 'YYYY-MM-DD',
LL: 'YYYY年MMMD日', LL: 'YYYY年MMMD日',
LLL: 'YYYY年MMMD日Ah点mm分', LLL: 'YYYY年MMMD日Ah点mm分',
LLLL: 'YYYY年MMMD日ddddAh点mm分', LLLL: 'YYYY年MMMD日ddddAh点mm分',
l: 'YYYY-MM-DD', l: 'YYYY-MM-DD',
ll: 'YYYY年MMMD日', ll: 'YYYY年MMMD日',
lll: 'YYYY年MMMD日Ah点mm分', lll: 'YYYY年MMMD日Ah点mm分',
llll: 'YYYY年MMMD日ddddAh点mm分' llll: 'YYYY年MMMD日ddddAh点mm分'
}, },
meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
meridiemHour: function (hour, meridiem) { meridiemHour: function (hour, meridiem) {
if (hour === 12) { if (hour === 12) {
hour = 0; hour = 0;
} }
if (meridiem === '凌晨' || meridiem === '早上' || if (meridiem === '凌晨' || meridiem === '早上' ||
meridiem === '上午') { meridiem === '上午') {
return hour; return hour;
} else if (meridiem === '下午' || meridiem === '晚上') { } else if (meridiem === '下午' || meridiem === '晚上') {
return hour + 12; return hour + 12;
} else { } else {
// '中午' // '中午'
return hour >= 11 ? hour : hour + 12; return hour >= 11 ? hour : hour + 12;
} }
}, },
meridiem: function (hour, minute, isLower) { meridiem: function (hour, minute, isLower) {
var hm = hour * 100 + minute; var hm = hour * 100 + minute;
if (hm < 600) { if (hm < 600) {
return '凌晨'; return '凌晨';
} else if (hm < 900) { } else if (hm < 900) {
return '早上'; return '早上';
} else if (hm < 1130) { } else if (hm < 1130) {
return '上午'; return '上午';
} else if (hm < 1230) { } else if (hm < 1230) {
return '中午'; return '中午';
} else if (hm < 1800) { } else if (hm < 1800) {
return '下午'; return '下午';
} else { } else {
return '晚上'; return '晚上';
} }
}, },
calendar: { calendar: {
sameDay: function () { sameDay: function () {
return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT'; return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';
}, },
nextDay: function () { nextDay: function () {
return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT'; return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';
}, },
lastDay: function () { lastDay: function () {
return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT'; return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';
}, },
nextWeek: function () { nextWeek: function () {
var startOfWeek, prefix; var startOfWeek, prefix;
startOfWeek = moment().startOf('week'); startOfWeek = moment().startOf('week');
prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]'; prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm'; return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
}, },
lastWeek: function () { lastWeek: function () {
var startOfWeek, prefix; var startOfWeek, prefix;
startOfWeek = moment().startOf('week'); startOfWeek = moment().startOf('week');
prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]'; prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm'; return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
}, },
sameElse: 'LL' sameElse: 'LL'
}, },
ordinalParse: /\d{1,2}(日|月|周)/, ordinalParse: /\d{1,2}(日|月|周)/,
ordinal: function (number, period) { ordinal: function (number, period) {
switch (period) { switch (period) {
case 'd': case 'd':
case 'D': case 'D':
case 'DDD': case 'DDD':
return number + '日'; return number + '日';
case 'M': case 'M':
return number + '月'; return number + '月';
case 'w': case 'w':
case 'W': case 'W':
return number + '周'; return number + '周';
default: default:
return number; return number;
} }
}, },
relativeTime: { relativeTime: {
future: '%s内', future: '%s内',
past: '%s前', past: '%s前',
s: '几秒', s: '几秒',
m: '1分钟', m: '1分钟',
mm: '%d分钟', mm: '%d分钟',
h: '1小时', h: '1小时',
hh: '%d小时', hh: '%d小时',
d: '1天', d: '1天',
dd: '%d天', dd: '%d天',
M: '1个月', M: '1个月',
MM: '%d个月', MM: '%d个月',
y: '1年', y: '1年',
yy: '%d年' yy: '%d年'
}, },
week: { week: {
// GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
dow: 1, // Monday is the first day of the week. dow: 1, // Monday is the first day of the week.
doy: 4 // The week that contains Jan 4th is the first week of the year. doy: 4 // The week that contains Jan 4th is the first week of the year.
} }
}); });
export default SnackbarHOC()(App); export default SnackbarHOC()(App);

View File

@ -32,7 +32,7 @@ export default ({history}) => {
/> />
</div> </div>
: :
<i className="iconfont icon-sousuo font-18 ml30" onClick={() => { <i className="iconfont icon-sousuo font-18 ml30" style={{color:"#a5a5a5"}} onClick={() => {
setOpenSearch(true) setOpenSearch(true)
}} /> }} />
} }

View File

@ -3,25 +3,40 @@ import { Modal , Button } from 'antd';
import './Index.scss'; import './Index.scss';
import '../../css/index.scss'; import '../../css/index.scss';
import RenderHtml from '../../../components/render-html'; import RenderHtml from '../../../components/render-html';
import cookie from 'react-cookies'; // import cookie from 'react-cookies';
import axios from 'axios';
function SystemNotice({system_notification,history}){ function SystemNotice({showNotice,system_notification,history,login,hideSystemNotice}){
const [ visible , setVisible ] = useState(false); const [ visible , setVisible ] = useState(false);
useEffect(()=>{ useEffect(()=>{
if(system_notification && !cookie.load('notice_stage')){ if(system_notification && !system_notification.is_read && showNotice && login){
setVisible(true); setVisible(true);
} }
},[system_notification,history.location]) },[system_notification])
function sureContinue() { function sureContinue() {
cookie.remove('notice_stage'); if(login && ( system_notification && system_notification.id )){
const url = `/users/${login}/system_notification_histories.json`;
axios.post(url,{
system_notification_id:system_notification.id
}).then(result=>{
if(result){
setVisible(false);
hideSystemNotice();
}
}).catch(error=>{})
}else{
setVisible(false);
hideSystemNotice();
}
// cookie.remove('notice_stage');
let inFifteenMinutes = new Date(new Date().getTime() + 24 * 3600 * 1000);// // let inFifteenMinutes = new Date(new Date().getTime() + 24 * 3600 * 1000);//
// let inFifteenMinutes = new Date(new Date().getTime() + 60 * 1000);// // // let inFifteenMinutes = new Date(new Date().getTime() + 60 * 1000);//
cookie.save('notice_stage', true,{ expires: inFifteenMinutes,path:"/" }); // cookie.save('notice_stage', true,{ expires: inFifteenMinutes,path:"/" });
setVisible(false); // setVisible(false);
} }
return ( return (

View File

@ -18,7 +18,9 @@ function Footer(){
} }
return( return(
value && showhtml(value) <div>
{value && showhtml(value)}
</div>
// {/* <div className="footEdition"> // {/* <div className="footEdition">
// <div className="footContent"> // <div className="footContent">
// <ul className="center"> // <ul className="center">

View File

@ -279,7 +279,7 @@ class NewHeader extends Component {
}; };
render() { render() {
const { match ,resetUserInfo ,showNotification} = this.props; const { match ,resetUserInfo ,showNotification,publicNav} = this.props;
let current_user = this.props.user; let current_user = this.props.user;
let { let {
AccountProfiletype, AccountProfiletype,
@ -368,7 +368,7 @@ class NewHeader extends Component {
let search_url = settings && settings.common && settings.common.search; let search_url = settings && settings.common && settings.common.search;
return ( return (
<div className="newHeaders" id="nHeader"> <div className={publicNav ? `newHeaders publicNav`:`newHeaders`} id="nHeader">
<div className="headerContent"> <div className="headerContent">
{isRender === true ? {isRender === true ?
<LoginDialog <LoginDialog
@ -433,7 +433,8 @@ class NewHeader extends Component {
{ {
current_user && (current_user.main_site || current_user.login) && (settings && settings.add && settings.add.length>0)? current_user && (current_user.main_site || current_user.login) && (settings && settings.add && settings.add.length>0)?
<Dropdown overlay={this.addMenu(settings && settings.add)} placement="bottomRight"> <Dropdown overlay={this.addMenu(settings && settings.add)} placement="bottomRight">
<i className="iconfont icon-tianjiafangda ml30 mr15"></i> {/* <i className="iconfont icon-tianjiafangda ml30 mr15"></i> */}
<img src={require(`./img/add.png`)} alt="" width="16px" className="mr15 ml30"/>
</Dropdown>:"" </Dropdown>:""
} }
@ -448,7 +449,8 @@ class NewHeader extends Component {
> >
<Link to={"/settings/notice"} className="message-icon"> <Link to={"/settings/notice"} className="message-icon">
{current_user && <Badge count={current_user.message_unread_total}> {current_user && <Badge count={current_user.message_unread_total}>
<i className="iconfont icon-xiaoxilingdang ml15 mr15"></i> {/* <i className="iconfont icon-xiaoxilingdang ml15 mr15"></i> */}
<img src={require(`./img/ring.png`)} alt="" width="16px" className="ml15 mr15"/>
</Badge>} </Badge>}
</Link> </Link>
</Popover> </Popover>

View File

@ -315,24 +315,32 @@
line-height: 25px; line-height: 25px;
margin-bottom: 20px!important; margin-bottom: 20px!important;
} }
&.theline{ }
display: flex; .theline{
.imgCon{
width: 90px;
height: 90px;
padding:5px;
border-radius: 4px;
background-color: #fff;
img{ img{
width: 80px; width: 100%;
height: 80px;
border-radius: 3px; border-radius: 3px;
} }
} }
} }
} }
} }
.copyrightDesc{ }
font-size: 12px; .copyrightDesc{
font-weight: 400; font-size: 12px;
color: #BDC2D1; font-weight: 400;
line-height: 28px; color: #BDC2D1;
padding:15px 0px; line-height: 28px;
text-align: center; padding:15px 0px;
background-color: #1B212C; text-align: center;
background-color: #1B212C;
a{
color: #BDC2D1!important;
} }
} }

BIN
src/forge/Head/img/add.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 B

BIN
src/forge/Head/img/ring.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

View File

@ -27,12 +27,6 @@ const ProjectHome = Loadable({
loading: Loading, loading: Loading,
}); });
// 项目详情放在用户和组织下作为二级菜单存在
// const ProjectDetail = Loadable({
// loader: () => import("./Main/Detail"),
// loading: Loading,
// });
class Index extends Component { class Index extends Component {
componentDidUpdate = () => { componentDidUpdate = () => {

View File

@ -328,7 +328,7 @@ function CoderDepot(props){
function okUpdate(d,w,l){ function okUpdate(d,w,l){
const url = `/${owner}/${projectsId}.json`; const url = `/${owner}/${projectsId}.json`;
axios.put(url,{ axios.put(url,{
description:d,website:w,lesson_url:l description:d,website:w || "",lesson_url:l||""
}).then(result=>{ }).then(result=>{
if(result && result.data && result.data.id){ if(result && result.data && result.data.id){
setDesc(result.data.description); setDesc(result.data.description);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 240 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -74,7 +74,7 @@ function Index() {
<div className="leftLists"> <div className="leftLists">
<div className="leftTitles"> <div className="leftTitles">
<span>开源项目</span> <span>开源项目</span>
<Link to={`/explore/all`}>更多<i className="iconfont icon-triangle font-12"></i></Link> <Link to={`/explore/all`} target="_blank">更多<i className="iconfont icon-triangle font-12"></i></Link>
</div> </div>
<Spin spinning={isSpin}> <Spin spinning={isSpin}>
<div style={{minHeight:"400px"}}> <div style={{minHeight:"400px"}}>
@ -85,10 +85,10 @@ function Index() {
projectsList.map((i,k)=>{ projectsList.map((i,k)=>{
return( return(
<li> <li>
<Link to={`/${i.author && i.author.login}`}><img src={getImageUrl(`/${i.author && i.author.image_url}`)} alt="" /></Link> <Link to={`/${i.author && i.author.login}`} target="_blank"><img src={getImageUrl(`/${i.author && i.author.image_url}`)} alt="" /></Link>
<div className="itemTitle"> <div className="itemTitle">
<div className="item-title-infos"> <div className="item-title-infos">
<Link to={`/${i.author && i.author.login}/${i.identifier}`} className="infotitle">{i.author && i.author.name}/{i.name}</Link> <Link to={`/${i.author && i.author.login}/${i.identifier}`} target="_blank" className="infotitle task-hide">{i.author && i.author.name}/{i.name}</Link>
{i.praises_count > 0 ? <span><i className="iconfont icon-dianzan11 mr3 font-16"></i>{i.praises_count}</span> :"" } {i.praises_count > 0 ? <span><i className="iconfont icon-dianzan11 mr3 font-16"></i>{i.praises_count}</span> :"" }
{i.forked_count > 0 ? <span><i className="iconfont icon-fork2 mr3 font-13"></i>{i.forked_count}</span>:""} {i.forked_count > 0 ? <span><i className="iconfont icon-fork2 mr3 font-13"></i>{i.forked_count}</span>:""}
</div> </div>
@ -113,9 +113,12 @@ function Index() {
} }
</div> </div>
</Spin> </Spin>
<div className="left-bottom-btn"> {
<Link to={`/explore/all`}>查看更多开源项目<img src={more} alt="" /></Link> projectsList && projectsList.length > 0 &&
</div> <div className="left-bottom-btn">
<Link to={`/explore/all`} target="_blank">查看更多开源项目<img src={more} alt="" /></Link>
</div>
}
</div> </div>
</div> </div>
<SubList /> <SubList />

View File

@ -318,7 +318,6 @@
background: url('../img/index/typebg.png'); background: url('../img/index/typebg.png');
background-size: 100% 100%; background-size: 100% 100%;
box-shadow: 0px 0px 4px 5px rgba(0, 0, 0, 0.02); box-shadow: 0px 0px 4px 5px rgba(0, 0, 0, 0.02);
padding:12px 0px;
a{ a{
padding:0px 20px; padding:0px 20px;
height: 44px; height: 44px;
@ -386,6 +385,7 @@
font-weight: 600; font-weight: 600;
line-height: 21px; line-height: 21px;
color: #333!important; color: #333!important;
max-width: 458px;
&:hover{ &:hover{
color: #466AFF!important; color: #466AFF!important;
} }
@ -413,7 +413,7 @@
height: 20px; height: 20px;
line-height: 20px; line-height: 20px;
display: flex; display: flex;
align-items: flex-end; align-items: center;
.category{ .category{
position: relative; position: relative;
padding-left: 11px; padding-left: 11px;
@ -439,7 +439,7 @@
height: 10px; height: 10px;
border-radius: 50%; border-radius: 50%;
border-left: 1px solid #9e9e9e; border-left: 1px solid #9e9e9e;
bottom: 4px; bottom: 5px;
left: 0px; left: 0px;
} }
} }
@ -539,11 +539,11 @@
} }
.sInfos{ .sInfos{
background: #F7F8F9; background: #F7F8F9;
padding:5px; padding:0px 5px;
font-size: 13px; font-size: 13px;
font-weight: 400; font-weight: 400;
color: #666666; color: #666666;
line-height: 22px; line-height: 24px;
word-break: break-all; word-break: break-all;
margin-top: 10px; margin-top: 10px;
} }

View File

@ -5,7 +5,6 @@ import { getImageUrl } from 'educoder';
import Eye from '../img/index/eye.png'; import Eye from '../img/index/eye.png';
import Data from '../img/index/data.png'; import Data from '../img/index/data.png';
import Earth from '../img/index/earth.png'; import Earth from '../img/index/earth.png';
import Imgs from '../img/tree.png';
import axios from 'axios'; import axios from 'axios';
// const list =[ // const list =[
@ -51,8 +50,8 @@ function SubBanner() {
return( return(
<div className="banners"> <div className="banners">
<div className="bannersCenter"> <div className="bannersCenter">
<p className="bTitle"><span>新一代开源创新服务平台</span></p> <p className="bTitle"><span>GitLink 确实开源</span></p>
<p className="bSubTitle">Gitlink确实开源-CCF官网指定的产学研融合面向软件开源创新的开源社区</p> <p className="bSubTitle">新一代开发创新服务平台 让你的创意在这里释放</p>
<div className="bannerBox"> <div className="bannerBox">
{ {
list && list.length > 0 ? list && list.length > 0 ?

View File

@ -56,11 +56,11 @@ function SubList() {
return( return(
<li> <li>
<div> <div>
<Link to={`/${i.login}`}><img src={getImageUrl(`/${i.avatar_url}`)} alt=""/></Link> <Link target="_blank" to={`/${i.login}`}><img src={getImageUrl(`/${i.avatar_url}`)} alt=""/></Link>
<div> <div>
<Link to={`/${i.login}`} className="font-15">{i.name}</Link> <Link target="_blank" to={`/${i.login}`} className="font-15">{i.name}</Link>
<p className="task-hide" style={{maxWidth:"260px"}}> <p className="task-hide" style={{maxWidth:"260px"}}>
<Link to={`/${i.login}/${i.project && i.project.identifier}`}><i className="iconfont icon-daimakuicon1 font-14 mr8"></i>{i.project && i.project.name}</Link> <Link target="_blank" to={`/${i.login}/${i.project && i.project.identifier}`}><i className="iconfont icon-daimakuicon1 font-14 mr8"></i>{i.project && i.project.name}</Link>
</p> </p>
</div> </div>
</div> </div>
@ -84,7 +84,7 @@ function SubList() {
<li> <li>
<div className="mInfos"> <div className="mInfos">
<span className="num">{k+1}</span> <span className="num">{k+1}</span>
<Link to={`/${i.owner && i.owner.login}/${i.identifier}`} className="name task-hide">{i.owner && i.owner.name}/{i.name}</Link> <Link target="_blank" to={`/${i.owner && i.owner.login}/${i.identifier}`} className="name task-hide">{i.owner && i.owner.name}/{i.name}</Link>
<span> <span>
<i className="iconfont icon-dianzan11 font-16 mr4"></i>{i.praises} <i className="iconfont icon-dianzan11 font-16 mr4"></i>{i.praises}
</span> </span>
@ -113,7 +113,7 @@ function SubList() {
<li> <li>
<div className="mInfos"> <div className="mInfos">
<span className="num">{k+1}</span> <span className="num">{k+1}</span>
<Link to={`/${i.owner && i.owner.login}/${i.identifier}`} className="name task-hide">{i.owner && i.owner.name}/{i.name}</Link> <Link target="_blank" to={`/${i.owner && i.owner.login}/${i.identifier}`} className="name task-hide">{i.owner && i.owner.name}/{i.name}</Link>
<span> <span>
<i className="iconfont icon-dianzan11 font-16 mr4"></i>{i.praises} <i className="iconfont icon-dianzan11 font-16 mr4"></i>{i.praises}
</span> </span>

View File

@ -289,7 +289,8 @@ class Index extends Component {
let second = first.split('.')[0]; let second = first.split('.')[0];
if(!second)return; if(!second)return;
this.props.form.setFieldsValue({ this.props.form.setFieldsValue({
repository_name:second repository_name:second,
name:second
}) })
}else{ }else{
this.props.form.setFieldsValue({ this.props.form.setFieldsValue({

View File

@ -181,7 +181,7 @@ export default Form.create()(
)} )}
<p>选择头像:</p> <p>选择头像:</p>
<UploadImage url={getImageUrl(`/${image}`)} getImage={getImage}/> <UploadImage url={getImageUrl(`/${image}`)} getImage={getImage}/>
<Button type={"primary"} onClick={updateDetail}>更新仓库设置</Button> <Button type={"primary"} onClick={updateDetail}>更新组织设置</Button>
</Form> </Form>
</Div> </Div>
</WhiteBack> </WhiteBack>

View File

@ -1,4 +1,5 @@
import React , { useEffect } from 'react'; import React , { useEffect } from 'react';
import Slider from 'react-slick';
import Beijing from './Img/unit/beijing.png'; import Beijing from './Img/unit/beijing.png';
import SHJT from './Img/unit/SHJT.png'; import SHJT from './Img/unit/SHJT.png';
import DD from './Img/unit/DD.png'; import DD from './Img/unit/DD.png';
@ -22,6 +23,9 @@ import LSLM from './Img/unit/LSLM.png';
import TG from './Img/unit/TG.png'; import TG from './Img/unit/TG.png';
import LC from './Img/unit/LC.png'; import LC from './Img/unit/LC.png';
import YKD from './Img/unit/YKD.png'; import YKD from './Img/unit/YKD.png';
import Axios from 'axios';
import { useState } from 'react';
import { getImageUrl } from 'educoder';
const list = [ const list = [
{image_url:GFKJ, name:"国防科技大学",src:"https://www.nudt.edu.cn/"}, {image_url:GFKJ, name:"国防科技大学",src:"https://www.nudt.edu.cn/"},
@ -45,26 +49,40 @@ const list = [
{image_url:LC, name:"浪潮",src:"https://cloud.inspur.com/"}, {image_url:LC, name:"浪潮",src:"https://cloud.inspur.com/"},
{image_url:YKD, name:"ucloud",src:"https://www.ucloud.cn/"} {image_url:YKD, name:"ucloud",src:"https://www.ucloud.cn/"}
] ]
// const settings = {
// dots: false, const settings = {
// infinite: true, dots: false,
// slidesToShow: 6, infinite: true,
// slidesToScroll: 1, slidesToShow: 1,
// autoplay: true, slidesToScroll: 1,
// speed: 2000, vertical: true,
// autoplaySpeed: 2000, verticalSwiping: true,
// cssEase: "linear", autoplay:true,
// rows:2, arrows:false
// arrows:false };
// };
function FifthEdition() { function FifthEdition() {
const [ topics ,setTopics ] = useState(undefined);
useEffect(()=>{ useEffect(()=>{
if(list.length>10){ // if(list.length>10){
Init(); // Init();
} // }
getUnit();
},[]) },[])
function getUnit(){
const url =`/topics.json`;
Axios.get(url,{params:{
topic_type:"cooperator",
limit:20,
group_size:5
}}).then(result=>{
if(result){
setTopics(result.data.topics);
}
}).catch(error=>{})
}
function Init() { function Init() {
let box = document.getElementById('scrollBox1'); let box = document.getElementById('scrollBox1');
scrollUp(); scrollUp();
@ -94,12 +112,12 @@ function FifthEdition() {
return( return(
<div id={"scrollBox1"}> <div id={"scrollBox1"}>
<div style={{width:370*list.length+"px"}}> {/* <div style={{width:370*list.length+"px"}}>
<ul className="fifthList" id="box1" style={{width:(370*list.length)/2+"px"}}> <ul className="fifthList" id="box1" style={{width:(370*list.length)/2+"px"}}>
{ {
list && list.map((i,k)=>{ list && list.map((i,k)=>{
return( return(
<li><a href={i.src}><img src={i.image_url} alt={i.name}/></a></li> <li><a href={i.src} target="_blank"><img src={i.image_url} alt={i.name}/></a></li>
) )
}) })
} }
@ -109,28 +127,34 @@ function FifthEdition() {
{ {
list && list.map((i,k)=>{ list && list.map((i,k)=>{
return( return(
<li><a href={i.src}><img src={i.image_url} alt={i.name}/></a></li> <li><a href={i.src} target="_blank"><img src={i.image_url} alt={i.name}/></a></li>
) )
}) })
} }
</ul> </ul>
} }
</div> </div> */}
{/* <Slider {...settings} className="footSlider"> {
{ topics && topics.length>0 ?
list && list.map((i,k)=>{ <Slider {...settings} className="unitMainSlider">
return( {
<li><Link to={i.src}><img src={i.image_url} alt={i.name}/></Link></li> topics.map((i,k)=>{
) return(
}) <div className="slickMainline">
} {
{list.length > 10 && list && list.map((i,k)=>{ i.map((j,k1)=>{
return( return(
<li><Link to={i.src}><img src={i.image_url} alt={i.name}/></Link></li> <a href={j.url} target="_blank"><img src={getImageUrl(j.image)} alt=""/></a>
) )
}) })
} }
</Slider> */} </div>
)
})
}
</Slider>
:""
}
</div> </div>
) )
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 769 KiB

After

Width:  |  Height:  |  Size: 730 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 428 KiB

After

Width:  |  Height:  |  Size: 414 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 458 KiB

After

Width:  |  Height:  |  Size: 461 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 914 KiB

After

Width:  |  Height:  |  Size: 877 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 114 KiB

View File

@ -1,6 +1,5 @@
import React , { useEffect , useState } from 'react'; import React , { useEffect , useState } from 'react';
import "./Index.scss"; import "./Index.scss";
import HeadNav from './Headnav';
import TopEdition from './TopEdition'; import TopEdition from './TopEdition';
import ThirdEdition from './ThirdEdition'; import ThirdEdition from './ThirdEdition';
import { Anchor } from 'antd'; import { Anchor } from 'antd';
@ -10,21 +9,37 @@ import F43 from './Img/4-3.png';
import F44 from './Img/4-4.png'; import F44 from './Img/4-4.png';
import SecondEdition from './SecondEdition'; import SecondEdition from './SecondEdition';
import FifthEdition from './FifthEdition'; import FifthEdition from './FifthEdition';
import Footnav from './Footnav';
import { TPMIndexHOC } from '../modules/tpm/TPMIndexHOC'; import { TPMIndexHOC } from '../modules/tpm/TPMIndexHOC';
import Axios from 'axios';
function Index(props) { function Index(props) {
const [ value , setValue ] = useState(""); const [ value , setValue ] = useState("");
const [ flag , setFlag ] = useState(true); const [ flag , setFlag ] = useState(true);
const [ isRender , setIsRender ] = useState(false);
const [ isloginCancel , setIsloginCancel ] = useState(false); const [ bannerTab , setBannerTab ] = useState(undefined);
const register = props && props.mygetHelmetapi && props.mygetHelmetapi.common && props.mygetHelmetapi.common.register; const register = props && props.mygetHelmetapi && props.mygetHelmetapi.common && props.mygetHelmetapi.common.register;
const { current_user } = props;
useEffect(()=>{ useEffect(()=>{
window.addEventListener("scroll",scrollListener); window.addEventListener("scroll",scrollListener);
getTab();
},[]) },[])
function getTab() {
const url = `/topics.json?topic_type=card`;
Axios.get(url,{
params:{
limit:3
}
}).then(result=>{
if(result){
setBannerTab(result.data.topics);
}
}).catch(error=>{})
}
function scrollListener(event) { function scrollListener(event) {
let third = document.getElementById("thirdContent").offsetTop; let third = document.getElementById("thirdContent").offsetTop;
let top = document.documentElement.scrollTop + 60; let top = document.documentElement.scrollTop + 60;
if(top>= third) if(top>= third)
@ -50,29 +65,47 @@ function Index(props) {
return( return(
<div className="homePage"> <div className="homePage">
<div className="topEdition"> <div className="topEdition">
<HeadNav {...props}/> {/* <HeadNav {...props}/> */}
<TopEdition register={register}/> <TopEdition register={register} current_user={current_user}/>
<ul className="topEditionUl"> {
<a href="https://forum.trustie.net/forums/4666/detail" target="_blank" className="font-18"> bannerTab && bannerTab.lenth > 0 ?
<li> <ul className="topEditionUl">
CCF开源发展委员会首批执行委员名单发布 {
</li> bannerTab.map((i,k)=>{
</a> return(
<a href="https://forgeplus.trustie.net/Gitlink/forgeplus" target="_blank" className="font-18"> <a href={i.url} target="_blank" className="font-18">
<li> <li>
平台精选仓库Gitlink/Gitlink {i.title}
</li> </li>
</a> </a>
<a href="https://forum.trustie.net/forums/4663/detail" target="_blank" className="font-18"> )
<li> })
OpenHarmony系统介绍及赛题说明 }
</li> </ul>
</a> :
</ul> <ul className="topEditionUl">
<a href="https://forum.trustie.net/forums/4666/detail" target="_blank" className="font-18">
<li>
CCF开源发展委员会首批执行委员名单发布
</li>
</a>
<a href="https://forgeplus.trustie.net/Gitlink/forgeplus" target="_blank" className="font-18">
<li>
平台精选仓库Gitlink/Gitlink
</li>
</a>
<a href="https://forum.trustie.net/forums/4663/detail" target="_blank" className="font-18">
<li>
OpenHarmony系统介绍及赛题说明
</li>
</a>
</ul>
}
</div> </div>
<div className="secondEdition"> <div className="secondEdition">
<p className="theTitle">Gitlink新一代开源创新服务平台</p> <p className="theTitle">GitLink新一代开源创新服务平台</p>
{ {
flag && flag &&
<Anchor> <Anchor>
@ -90,8 +123,10 @@ function Index(props) {
</div> </div>
<div className="forthEdition"> <div className="forthEdition">
<p className="theTitle">加入Gitlink和社区伙伴们一起踏上开源创新的辉煌旅程</p> <p className="theTitle">加入GitLink和社区伙伴们一起踏上开源创新的辉煌旅程</p>
<a className="qulikyreg" href={register}>快速注册</a> <div style={{marginBottom:"80px"}}>
{ !(current_user && current_user.login) && <a className="qulikyreg" href={register}>立即注册</a> }
</div>
<ul className="forthUl"> <ul className="forthUl">
<li> <li>
<img src={F41} alt="" width={"100px"}/> <img src={F41} alt="" width={"100px"}/>
@ -118,10 +153,9 @@ function Index(props) {
<div className="fifthEdition"> <div className="fifthEdition">
<p className="title">开源生态</p> <p className="title">开源生态</p>
<p className="subtitle">Gitlink与各大企业高校科研机构开展广泛的技术合作推动我国开源软件生态的快速构建与发展</p> <p className="subtitle">GitLink与各大企业高校科研机构开展广泛的技术合作推动我国开源软件生态的快速构建与发展</p>
<FifthEdition /> <FifthEdition />
</div> </div>
<Footnav />
</div> </div>
) )
} }

View File

@ -61,21 +61,12 @@ body{
height:100%; height:100%;
div{ div{
height: 100%; height: 100%;
.regform1{ .regform{
background:url('./Img/banner1.png') no-repeat center top; &>div{
background-size:cover; background-size:cover;
} background-position: center;
.regform2{ background-repeat: no-repeat;
background:url('./Img/banner2.png') no-repeat center top; }
background-size:cover;
}
.regform3{
background:url('./Img/banner3.png') no-repeat center top;
background-size:cover;
}
.regform4{
background:url('./Img/banner4.png') no-repeat center center;
background-size:cover;
} }
.regPrg{ .regPrg{
position: absolute; position: absolute;
@ -590,6 +581,7 @@ body{
font-weight: 500; font-weight: 500;
line-height: 36px; line-height: 36px;
color: #000; color: #000;
max-width: 350px;
span{ span{
color: #637497; color: #637497;
font-weight: normal; font-weight: normal;
@ -675,6 +667,8 @@ body{
padding-top: 50px; padding-top: 50px;
padding-bottom: 25px; padding-bottom: 25px;
margin-bottom: 0px; margin-bottom: 0px;
justify-content: space-between;
min-width: 1200px;
li{ li{
padding:0px 67px; padding:0px 67px;
color: #fff; color: #fff;
@ -755,8 +749,10 @@ body{
display: flex; display: flex;
align-items: center; align-items: center;
margin-top: 48px; margin-top: 48px;
min-height: 365px;
.listbox{ .listbox{
margin-left: 54px; margin-left: 54px;
flex: 1;
.listTitle{ .listTitle{
height: 30px; height: 30px;
font-size: 18px; font-size: 18px;
@ -775,6 +771,9 @@ body{
background-color: #466AFF; background-color: #466AFF;
} }
} }
.ant-skeleton-title,.ant-skeleton-paragraph > li{
background-color: rgba(242,242,242 ,0.2);
}
} }
li{ li{
display: flex; display: flex;
@ -793,6 +792,12 @@ body{
span{ span{
margin-left: 40px; margin-left: 40px;
} }
.listboxcount{
min-width: 60px;
text-align: left;
display: flex;
justify-content: space-between;
}
} }
} }
} }
@ -824,11 +829,12 @@ body{
background-color: #466AFF; background-color: #466AFF;
border-radius: 6px; border-radius: 6px;
font-size: 18px; font-size: 18px;
margin-bottom: 80px;
} }
.forthUl{ .forthUl{
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
min-width: 1200px;
justify-content: space-between;
li{ li{
margin:0px 40px; margin:0px 40px;
display: flex; display: flex;
@ -913,6 +919,41 @@ body{
overflow: hidden; overflow: hidden;
margin: 35px 0px 0px; margin: 35px 0px 0px;
width: 100%; width: 100%;
.unitMainSlider{
width: 1200px;
margin:0px auto;
.slick-list{
height: 140px;
width: 100%;
overflow: hidden;
.slickMainline{
display: flex!important;
padding:10px 2px;
align-items: center;
justify-content: space-between;
a{
background: #FFFFFF;
box-shadow: 0px 1px 8px 1px rgba(0, 0, 0, 0.06);
border-radius: 4px;
border: 2px solid #FFFFFF;
margin-right: 20px;
padding:20px;
height: 120px;
width: 220px;
display: flex;
align-items: center;
justify-content: center;
img{
max-width: 100%;
max-height: 100%;
}
&:last-child{
margin-right: 0px;
}
}
}
}
}
} }
ul.fifthList{ ul.fifthList{
display: flex; display: flex;
@ -1011,28 +1052,31 @@ body{
line-height: 25px; line-height: 25px;
margin-bottom: 20px!important; margin-bottom: 20px!important;
} }
&.theline{ }
display: flex; .theline{
.imgCon{ .imgCon{
padding:5px; padding:5px;
background-color: #fff; border-radius: 4px;
border-radius: 3px; background-color: #fff;
}
img{ img{
width: 80px; width: 80px;
height: 80px; height: 80px;
border-radius: 3px;
} }
} }
} }
} }
} }
.copyrightDesc{ }
font-size: 12px; .copyrightDesc{
font-weight: 400; font-size: 12px;
color: #BDC2D1; font-weight: 400;
line-height: 28px; color: #BDC2D1;
padding:15px 0px; line-height: 28px;
text-align: center; padding:15px 0px;
background-color: #1B212C; text-align: center;
background-color: #1B212C;
a{
color: #BDC2D1!important;
} }
} }

View File

@ -99,12 +99,14 @@ function SecondEdition({setValue}) {
} }
function checkPosi(ele,clientHeight,scrollTop) { function checkPosi(ele,clientHeight,scrollTop) {
var a = document.getElementById(ele).offsetTop - scrollTop -(clientHeight/3); if(document.getElementById(ele)){
var b = document.getElementById(ele).clientHeight + (clientHeight/4); var a = document.getElementById(ele).offsetTop - scrollTop -(clientHeight/3);
if(a>0 || a<-b){ var b = document.getElementById(ele).clientHeight + (clientHeight/4);
return false; if(a>0 || a<-b){
}else{ return false;
return true; }else{
return true;
}
} }
} }
return( return(
@ -187,7 +189,7 @@ function SecondEdition({setValue}) {
<div className={"multidimensinalhalf"}> <div className={"multidimensinalhalf"}>
<div> <div>
<p className="halfTitle">多维度用户画像</p> <p className="halfTitle">多维度用户画像</p>
<p className="halfsubTitle"><span>实时采集和分析平台中的各类开源资源数<br/></span>搭建多维度用户画像评估系统</p> <p className="halfsubTitle"><span>实时采集和分析平台中的各类开源资源数</span>搭建多维度用户画像评估系统</p>
</div> </div>
<div style={{width:"820px",marginLeft:"34px"}}> <div style={{width:"820px",marginLeft:"34px"}}>
<img src={ImgM4} alt="" width="820px" /> <img src={ImgM4} alt="" width="820px" />

View File

@ -1,4 +1,5 @@
import React,{ useState , useEffect , useMemo } from 'react'; import React,{ useState , useEffect , useMemo } from 'react';
import { Spin , Skeleton } from 'antd';
import T311 from './Img/3-1-1.png'; import T311 from './Img/3-1-1.png';
import T312 from './Img/3-1-2.png'; import T312 from './Img/3-1-2.png';
import T321 from './Img/3-2-1.png'; import T321 from './Img/3-2-1.png';
@ -13,39 +14,16 @@ import bg33 from './Img/3-3.png';
import bg34 from './Img/3-4.png'; import bg34 from './Img/3-4.png';
import './Index.scss'; import './Index.scss';
import Axios from 'axios';
const list1 = [
{name:"CCF开源发展委员会首批执行委员名单发布",src:"https://forum.trustie.net/forums/4666/detail",count:32,time:"2021-09-22"},
{name:"Gitlink项目协同开发模块使用说明及问题反馈",src:"https://forum.trustie.net/forums/4665/detail",count:4,time:"2021-09-22"},
{name:"MindSpore框架介绍及赛题说明",src:"https://forum.trustie.net/forums/4664/detail",count:3,time:"2021-09-22"},
{name:"OpenHarmony系统介绍及赛题说明",src:"https://forum.trustie.net/forums/4663/detail",count:4,time:"2021-09-22"},
{name:"openGauss系统介绍及赛题说明",src:"https://forum.trustie.net/forums/4662/detail",count:5,time:"2021-09-22"},
]
const list2 = [
{name:"Gitlink/Gitlink",src:"https://forgeplus.trustie.net/Gitlink/forgeplus",count:304},
{name:"泛在操作系统实验室/矽璓工业物联操作系统XiUOS",src:"https://forgeplus.trustie.net/xuos/xiuos",count:50},
{name:"华为技术有限公司/openGauss-operator",src:"https://forgeplus.trustie.net/Huawei_Technology/openGauss-operator",count:100},
{name:"开放原子开源基金会/BitXHub",src:"https://forgeplus.trustie.net/openatom_foundation/bitxhub",count:40},
{name:"华为技术有限公司/openEuler-datenlord",src:"https://forgeplus.trustie.net/Huawei_Technology/openEuler-datenlord",count:98},
]
const list3 = [
{name:"Gitlink平台DevOps模块使用说明",src:"https://forum.trustie.net/forums/4682/detail",count:10,time:"2021-09-23"},
{name:"Gitlink如何将临时分支push到远端对应的新分支",src:"https://forum.trustie.net/forums/4705/detail",count:8,time:"2021-09-23"},
{name:"了解什么是 DevOps",src:"https://forum.trustie.net/forums/4704/detail",count:4,time:"2021-09-23"},
{name:"EduCoder平台简介",src:"https://forum.trustie.net/forums/4701/detail",count:26,time:"2021-09-23"},
{name:"Webhooks指南",src:"https://forum.trustie.net/forums/4683/detail",count:3,time:"2021-09-23"},
]
const list4 = [
{name:"小学生都能读懂的网络协议之:WebSocket",src:"https://forum.trustie.net/forums/4708/detail",count:4,time:"2021-09-23"},
{name:"容器神话 Docker 是如何一分为二的",src:"https://forum.trustie.net/forums/4707/detail",count:5,time:"2021-09-23"},
{name:"一文揭示DevOps与企业数字化究竟有何联系",src:"https://forum.trustie.net/forums/4706/detail",count:3,time:"2021-09-23"},
{name:"GitHub上最流行的10000个Java都使用了哪些库",src:"https://forum.trustie.net/forums/4703/detail",count:8,time:"2021-09-23"},
{name:"如何正确下载CentOS各个版本镜像",src:"https://forum.trustie.net/forums/4684/detail",count:2,time:"2021-09-23"},
]
function ThirdEdition() { function ThirdEdition() {
const [ active , setActive ] = useState(1); const [ active , setActive ] = useState(1);
const [ isSpin , setIsSpin ] = useState(true);
const [ flag , setFlag ] = useState(true); const [ flag , setFlag ] = useState(true);
const [ list1, setList1 ] = useState([]);
const [ list2, setList2 ] = useState([]);
const [ list3, setList3 ] = useState([]);
const [ list4, setList4 ] = useState([]);
const doubleFlag = useMemo(()=>{ const doubleFlag = useMemo(()=>{
return flag; return flag;
@ -75,6 +53,41 @@ function ThirdEdition() {
} }
} }
useEffect(()=>{
if(active){
getList(active);
}
},[active])
function getList(a) {
let params = a === 1 ? "activity_forum" : a===2 ? "excellent_project" : a=== 3 ? "pinned_forum" : "experience_forum";
if(a===1 && (list1 && list1.length>0)){return}
if(a===2 && (list2 && list2.length>0)){return}
if(a===3 && (list3 && list3.length>0)){return}
if(a===4 && (list4 && list4.length>0)){return}
setIsSpin(true);
const url = `/topics.json?topic_type=${params}`;
Axios.get(url,{
params:{
limit:5
}
}).then(result=>{
if(result){
let l = result.data.topics;
if(a===1){
setList1(l);
}else if(a===2){
setList2(l);
}else if(a===3){
setList3(l);
}else{
setList4(l);
}
setIsSpin(false);
}
}).catch(error=>{})
}
return( return(
<div className="thirdEdition"> <div className="thirdEdition">
<p className="title">开发者的家园</p> <p className="title">开发者的家园</p>
@ -111,65 +124,95 @@ function ThirdEdition() {
</li> </li>
</ul> </ul>
<div className="thirdLists"> <div className="thirdLists">
<img src={active === 1 ? bg3 : active===2 ? bg32 :active===3 ? bg33 :bg34 } alt="" width="336px"/> <img src={active === 1 ? bg3 : active===2 ? bg32 :active===3 ? bg33 :bg34 } alt="" width="336px"/>
<div className="listbox"> <div className="listbox">
<p className="listTitle"> <p className="listTitle">
{active === 1 ? "Gitlink分享最新平台资讯、社区活动通知、开源竞赛信息把握开源生态发展脉搏" {active === 1 ? "GitLink分享最新平台资讯、社区活动通知、开源竞赛信息把握开源生态发展脉搏"
: active===2 ? "Gitlink汇聚精英企业仓库、前沿技术仓库、人气热门仓库孵化优质开源创新成果" : active===2 ? "GitLink汇聚精英企业仓库、前沿技术仓库、人气热门仓库孵化优质开源创新成果"
:active===3 ? "Gitlink集萃社区精选项目介绍、平台使用技巧等优秀文章助力开源开放协同创新" :active===3 ? "GitLink集萃社区精选项目介绍、平台使用技巧等优秀文章助力开源开放协同创新"
:"Gitlink甄选技术研究、心得体会、经验交流等高质量内容推动社区健康稳定发展"} :"GitLink甄选技术研究、心得体会、经验交流等高质量内容推动社区健康稳定发展"}
</p> </p>
{ <div style={{minHeight:"260px"}}>
active === 1&& {
list1.map((i,k)=>{ active === 1 &&
return( <React.Fragment>
<li> {
<a href={i.src} target="_blank">{i.name}</a> list1 && list1.length > 0 ? list1.map((i,k)=>{
<span><i className="iconfont icon-a-liulanicon2x mr5"></i>{i.count}</span> return(
<span>{i.time}</span> <li>
</li> <a href={i.url} target="_blank">{i.title}</a>
) <span className="listboxcount"><i className="iconfont icon-a-liulanicon2x mr5"></i>{i.visits}</span>
}) <span>{i.time}</span>
} </li>
{ )
active === 2&& }):""
list2.map((i,k)=>{ }
return( {
<li> list1 && list1.length === 0 && <Skeleton />
<a href={i.src} target="_blank">{i.name}</a> }
<span><i className="iconfont icon-a-liulanicon2x mr5"></i>{i.count}</span> </React.Fragment>
{/* {i.time} */} }
</li> {
) active === 2 &&
}) <React.Fragment>
} {
{ list2 && list2.length > 0? list2.map((i,k)=>{
active === 3&& return(
list3.map((i,k)=>{ <li>
return( <a href={i.url} target="_blank">{i.title}</a>
<li> <span className="listboxcount" style={{marginRight:"40px"}}><i className="iconfont icon-a-liulanicon2x mr5"></i>{i.visits}</span>
<a href={i.src} target="_blank">{i.name}</a> {/* {i.time} */}
<span><i className="iconfont icon-a-liulanicon2x mr5"></i>{i.count}</span> </li>
<span>{i.time}</span> )
</li> }):""
) }
}) {
} list2 && list2.length === 0 && <Skeleton />
{ }
active === 4&& </React.Fragment>
list4.map((i,k)=>{ }
return( {
<li> active === 3 &&
<a href={i.src} target="_blank">{i.name}</a> <React.Fragment>
<span><i className="iconfont icon-a-liulanicon2x mr5"></i>{i.count}</span> {
<span>{i.time}</span> list3 && list3.length > 0 ? list3.map((i,k)=>{
</li> return(
) <li>
}) <a href={i.url} target="_blank">{i.title}</a>
} <span className="listboxcount"><i className="iconfont icon-a-liulanicon2x mr5"></i>{i.visits}</span>
<span>{i.time}</span>
</li>
)
}):""
}
{
list3 && list3.length === 0 && <Skeleton />
}
</React.Fragment>
}
{
active === 4 &&
<React.Fragment>
{
list4 && list4.length > 0 ? list4.map((i,k)=>{
return(
<li>
<a href={i.url} target="_blank">{i.title}</a>
<span className="listboxcount"><i className="iconfont icon-a-liulanicon2x mr5"></i>{i.visits}</span>
<span>{i.time}</span>
</li>
)
}):""
}
{
list4 && list4.length === 0 && <Skeleton />
}
</React.Fragment>
}
</div>
</div>
</div> </div>
</div> </div>
</div>
</div> </div>
) )
} }

View File

@ -1,5 +1,8 @@
import React from 'react'; import React , { useEffect , useState } from 'react';
import Slider from 'react-slick'; import Slider from 'react-slick';
import axios from 'axios';
import { getImageUrl } from 'educoder';
let setting={ let setting={
dots:true, dots:true,
infinite: true, infinite: true,
@ -14,16 +17,46 @@ let setting={
prevArrow:<button type='button' class='slick-prev slick-arrow'><i className="iconfont icon-xiangzuojiantou"></i></button>, prevArrow:<button type='button' class='slick-prev slick-arrow'><i className="iconfont icon-xiangzuojiantou"></i></button>,
nextArrow:<button type='button' class='slick-prev slick-arrow'><i className="iconfont icon-xiangyoujiantou"></i></button> nextArrow:<button type='button' class='slick-prev slick-arrow'><i className="iconfont icon-xiangyoujiantou"></i></button>
} }
function TopEdition({register}) { function TopEdition({register,current_user}) {
const [ bannerList , setBannerList ] = useState(undefined);
useEffect(()=>{
getBanner();
},[])
function getBanner() {
const url = `/topics.json?topic_type=banner`;
axios.get(url,{
params:{
limit:4
}
}).then(result=>{
if(result){
setBannerList(result.data.topics);
}
}).catch(error=>{})
}
return( return(
<Slider {...setting}> <Slider {...setting}>
<div className="regform1"></div> {
<div className="regform2"></div> bannerList && bannerList.length > 0 ?
<div className="regform3"> bannerList.map((i,k)=>{
</div> return(
<div className="regform4"> <div className={`regform`}>
<p className="regPrg"><a href={register}>注册</a></p> <div style={{backgroundImage:`url(${getImageUrl(i.image)})`}}>
</div> {
k +1 === bannerList.length && (!(current_user && current_user.login)) ?
<p className="regPrg"><a href={register}>注册</a></p>
:""
}
</div>
</div>
)
})
:
""
}
</Slider> </Slider>
) )
} }

View File

@ -97,9 +97,9 @@ class EducoderLogin extends Component {
<div style={{cursor:"pointer"}}> <div style={{cursor:"pointer"}}>
{ {
mygetHelmetapi && mygetHelmetapi.login_logo_url ? mygetHelmetapi && mygetHelmetapi.login_logo_url ?
<img style={{cursor:"pointer"}} alt="" onClick={()=>this.gohome()} width="80px" src={getImageUrl(mygetHelmetapi.login_logo_url)}/> <img style={{cursor:"pointer"}} alt="" onClick={()=>this.gohome()} src={getImageUrl(mygetHelmetapi.login_logo_url)}/>
: :
<img style={{cursor:"pointer"}} alt="" onClick={()=>this.gohome()} src={educodernet} width="80px"/> <img style={{cursor:"pointer"}} alt="" onClick={()=>this.gohome()} src={educodernet}/>
} }
</div> </div>
{ {

View File

@ -25,14 +25,17 @@ body>.-task-title {
.newHeaders{ .newHeaders{
max-width: unset; max-width: unset;
width: 100%; width: 100%;
height:70px; height:58px;
min-width: 1200px; min-width: 1200px;
z-index: 1000; z-index: 1000;
box-shadow: 0px 2px 4px 0px rgb(0 0 0 / 50%);
position: fixed; position: fixed;
background-image: linear-gradient(to right, #0F141F, #0C2A5B,#101417); background: #1B2440;
color: #fff; color: #fff;
} }
.newHeaders.publicNav{
position: absolute;
background: rgba(27, 36, 64,0.2);
}
.headerContent{ .headerContent{
margin:0px auto; margin:0px auto;
padding:0px 30px; padding:0px 30px;

View File

@ -29,6 +29,7 @@ export function TPMIndexHOC(WrappedComponent) {
email:undefined, email:undefined,
completeProfile:false, completeProfile:false,
showCP:false, showCP:false,
showNotice:true
} }
} }
@ -153,11 +154,11 @@ export function TPMIndexHOC(WrappedComponent) {
console.log(this.props.match) console.log(this.props.match)
if (this.props.match.path === "/") { if (this.props.match.path === "/") {
this.setState({ this.setState({
publicNav:false publicNav:true
}) })
}else{ }else{
this.setState({ this.setState({
publicNav:true publicNav:false
}) })
} }
let url = `/users/get_user_info.json`; let url = `/users/get_user_info.json`;
@ -223,6 +224,11 @@ export function TPMIndexHOC(WrappedComponent) {
} }
}).catch(error=>{}) }).catch(error=>{})
} }
hideSystemNotice=()=>{
this.setState({
showNotice:false
})
}
showCompeleteDialog=()=>{ showCompeleteDialog=()=>{
this.setState({ this.setState({
@ -231,7 +237,7 @@ export function TPMIndexHOC(WrappedComponent) {
} }
render() { render() {
let { isRender , current_user , giteaVisible , email , completeProfile , showCP , publicNav , mygetHelmetapi } = this.state; let { isRender , current_user , giteaVisible , email , completeProfile , showCP , showNotice , publicNav , mygetHelmetapi } = this.state;
const common = { const common = {
showLoginDialog: this.showLoginDialog, showLoginDialog: this.showLoginDialog,
checkIfLogin: this.checkIfLogin, checkIfLogin: this.checkIfLogin,
@ -241,9 +247,11 @@ export function TPMIndexHOC(WrappedComponent) {
return ( return (
<div className="indexHOC"> <div className="indexHOC">
<SystemNotice <SystemNotice
showNotice={showNotice}
system_notification={mygetHelmetapi && mygetHelmetapi.system_notification} system_notification={mygetHelmetapi && mygetHelmetapi.system_notification}
history={this.props.history} history={this.props.history}
login={current_user && current_user.login} login={current_user && current_user.login}
hideSystemNotice={this.hideSystemNotice}
/> />
<EducoderAccount visible={giteaVisible} email={email} onOk={this.onOk}/> <EducoderAccount visible={giteaVisible} email={email} onOk={this.onOk}/>
<ProfileModal <ProfileModal
@ -256,12 +264,12 @@ export function TPMIndexHOC(WrappedComponent) {
{...this.props} {...this.props}
{...this.state} {...this.state}
/> : ""} /> : ""}
{ publicNav && <Header {...this.state} {...this.props} {...common}></Header>} <Header {...this.state} {...this.props} {...common} publicNav={publicNav}></Header>
<Spin spinning={this.state.globalLoading} delay={0} className="globalSpin" <Spin spinning={this.state.globalLoading} delay={0} className="globalSpin"
size="large" tip={this._gLoadingTip || "加载中..."} size="large" tip={this._gLoadingTip || "加载中..."}
> >
<div className="newContainer newContainers"> <div className="newContainer newContainers">
{ publicNav && <div style={{height:"70px"}}></div> } {!publicNav && <div style={{height:"58px"}}></div> }
{ {
current_user && current_user &&
<WrappedComponent initCommonState={(user) => this.initCommonState(user)} <WrappedComponent initCommonState={(user) => this.initCommonState(user)}
@ -270,7 +278,7 @@ export function TPMIndexHOC(WrappedComponent) {
} }
</div> </div>
</Spin> </Spin>
{ publicNav && <NewFooter {...this.state} {...this.props} />} <NewFooter {...this.state} {...this.props} />
</div> </div>
); );
} }

File diff suppressed because it is too large Load Diff