forked from Gitlink/forgeplus-react
Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into feature_IDE
This commit is contained in:
commit
cc443fa112
|
@ -155,7 +155,7 @@ module.exports = {
|
|||
{
|
||||
libraryName: "antd",
|
||||
libraryDirectory: "es",
|
||||
style: "css",
|
||||
style: true,
|
||||
},
|
||||
],
|
||||
],
|
||||
|
@ -211,8 +211,34 @@ module.exports = {
|
|||
{
|
||||
loader: require.resolve("sass-loader"),
|
||||
},
|
||||
{
|
||||
loader: 'sass-resources-loader',
|
||||
options: {
|
||||
resources: ['src/global.scss']
|
||||
}
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
test: /\.less$/,
|
||||
use: [{
|
||||
loader: 'style-loader',
|
||||
}, {
|
||||
loader: 'css-loader', // translates CSS into CommonJS
|
||||
}, {
|
||||
loader: 'less-loader', // compiles Less to CSS
|
||||
options: {
|
||||
modifyVars: {
|
||||
'primary-color': '#466aff',
|
||||
'primary-color-hover': '#6684FE',
|
||||
'primary-color-active': '#1A47FF',
|
||||
'link-color': '#466aff',
|
||||
},
|
||||
javascriptEnabled: true,
|
||||
},
|
||||
}]
|
||||
},
|
||||
|
||||
// "file" loader makes sure those assets get served by WebpackDevServer.
|
||||
// When you `import` an asset, you get its (virtual) filename.
|
||||
// In production, they would get copied to the `build` folder.
|
||||
|
@ -271,7 +297,7 @@ module.exports = {
|
|||
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
|
||||
new MonacoWebpackPlugin({
|
||||
features: ["coreCommands", "find"],
|
||||
languages: ['plaintext','apex', 'azcli', 'bat', 'clojure', 'coffee', 'cpp', 'csharp', 'csp', 'css', 'dockerfile', 'fsharp', 'go', 'handlebars', 'html', 'ini', 'java', 'javascript', 'json', 'less', 'lua', 'markdown', 'msdax', 'mysql', 'objective', 'perl', 'pgsql', 'php', 'postiats', 'powerquery', 'powershell', 'pug', 'python', 'r', 'razor', 'redis', 'redshift', 'ruby', 'rust', 'sb', 'scheme', 'scss', 'shell', 'solidity', 'sql', 'st', 'swift', 'typescript', 'vb', 'xml', 'yaml']
|
||||
languages: ['plaintext', 'apex', 'azcli', 'bat', 'clojure', 'coffee', 'cpp', 'csharp', 'csp', 'css', 'dockerfile', 'fsharp', 'go', 'handlebars', 'html', 'ini', 'java', 'javascript', 'json', 'less', 'lua', 'markdown', 'msdax', 'mysql', 'objective', 'perl', 'pgsql', 'php', 'postiats', 'powerquery', 'powershell', 'pug', 'python', 'r', 'razor', 'redis', 'redshift', 'ruby', 'rust', 'sb', 'scheme', 'scss', 'shell', 'solidity', 'sql', 'st', 'swift', 'typescript', 'vb', 'xml', 'yaml']
|
||||
}),
|
||||
],
|
||||
// Some libraries import Node modules but don't use them in the browser.
|
||||
|
|
|
@ -152,7 +152,7 @@ module.exports = {
|
|||
{
|
||||
libraryName: "antd",
|
||||
libraryDirectory: "es",
|
||||
style: "css",
|
||||
style: true,
|
||||
},
|
||||
],
|
||||
],
|
||||
|
@ -213,8 +213,31 @@ module.exports = {
|
|||
{
|
||||
loader: require.resolve("sass-loader"),
|
||||
},
|
||||
{
|
||||
loader: 'sass-resources-loader',
|
||||
options: {
|
||||
resources: ['src/global.scss']
|
||||
}
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
test: /\.less$/,
|
||||
use: [{
|
||||
loader: 'style-loader',
|
||||
}, {
|
||||
loader: 'css-loader', // translates CSS into CommonJS
|
||||
}, {
|
||||
loader: 'less-loader', // compiles Less to CSS
|
||||
options: {
|
||||
modifyVars: {
|
||||
'primary-color': '#466aff',
|
||||
'link-color': '#466aff',
|
||||
},
|
||||
javascriptEnabled: true,
|
||||
},
|
||||
}]
|
||||
},
|
||||
// "file" loader makes sure assets end up in the `build` folder.
|
||||
// When you `import` an asset, you get its filename.
|
||||
// This loader doesn't use a "test" so it will catch all modules
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -51,6 +51,8 @@
|
|||
"js-base64": "^2.5.2",
|
||||
"js2wordcloud": "^1.1.12",
|
||||
"katex": "^0.11.1",
|
||||
"less": "^3.9.0",
|
||||
"less-loader": "^4.1.0",
|
||||
"lodash": "^4.17.21",
|
||||
"loglevel": "^1.6.8",
|
||||
"marked": "^1.0.0",
|
||||
|
@ -211,6 +213,7 @@
|
|||
"react-json-view": "^1.21.3",
|
||||
"reqwest": "^2.0.5",
|
||||
"resize-observer-polyfill": "^1.5.1",
|
||||
"sass-resources-loader": "^2.2.5",
|
||||
"terser-webpack-plugin": "^2.3.5",
|
||||
"uglifyjs-webpack-plugin": "^2.2.0",
|
||||
"webpack": "^4.42.1",
|
||||
|
|
|
@ -1365,12 +1365,12 @@ table {
|
|||
border: 0;
|
||||
}
|
||||
|
||||
a:link,
|
||||
a:visited {
|
||||
a:link,a:visited{
|
||||
text-decoration: none;
|
||||
color: #05101a;
|
||||
}
|
||||
|
||||
|
||||
ol,
|
||||
ul,
|
||||
li {
|
||||
|
@ -2466,7 +2466,7 @@ a.hoverLine:hover{
|
|||
}
|
||||
|
||||
a:hover{
|
||||
color: #466AFF !important;
|
||||
color: #6684FE;
|
||||
}
|
||||
|
||||
.color-grey-98 {
|
||||
|
|
|
@ -18,6 +18,7 @@ import moment from 'moment'
|
|||
import { MuiThemeProvider, createMuiTheme } from 'material-ui/styles';
|
||||
import SiderBar from './forge/Component/SiderBar';
|
||||
import SiderBarHelp from './glcc/siderBarHelp';
|
||||
import GlccModal from './modules/glccModal';
|
||||
|
||||
import { SnackbarHOC } from 'educoder';
|
||||
import { initAxiosInterceptors } from './AppConfig'
|
||||
|
@ -292,6 +293,7 @@ class App extends Component {
|
|||
<ConfigProvider locale={zhCN}>
|
||||
<MuiThemeProvider theme={theme}>
|
||||
<LoginDialog {...this.props} {...this.state} Modifyloginvalue={() => this.Modifyloginvalue()}></LoginDialog>
|
||||
<GlccModal />
|
||||
{!pathName || (pathName && pathName.indexOf("glcc") === -1) ? <SiderBar /> : <SiderBarHelp/>}
|
||||
{/* <Router> */}
|
||||
<Switch>
|
||||
|
|
|
@ -25,7 +25,7 @@ if (isDev) {
|
|||
}
|
||||
debugType = window.location.search.indexOf('debug=t') !== -1 ? 'teacher' :
|
||||
window.location.search.indexOf('debug=s') !== -1 ? 'student' :
|
||||
window.location.search.indexOf('debug=a') !== -1 ? 'admin' : parsed.debug || 'admin'
|
||||
window.location.search.indexOf('debug=a') !== -1 ? 'admin' : parsed.debug || 'student'
|
||||
}
|
||||
window._debugType = debugType;
|
||||
export function initAxiosInterceptors(props) {
|
||||
|
|
|
@ -73,8 +73,8 @@ export const Blueline = styled.a`{
|
|||
height:30px;
|
||||
line-height:28px;
|
||||
border-radius:2px;
|
||||
border:1px solid rgba(80,145,255,1);
|
||||
color:rgba(80,145,255,1);
|
||||
border:1px solid #466AFF;
|
||||
color:#466AFF;
|
||||
padding:0px 12px;
|
||||
display:inline-block;
|
||||
}`
|
||||
|
@ -117,7 +117,8 @@ export const Blueback = styled.a`{
|
|||
height:30px;
|
||||
line-height:30px;
|
||||
border-radius:2px;
|
||||
background-color:rgba(80,145,255,1);
|
||||
// background-color:rgba(80,145,255,1);
|
||||
background-color:#466AFF;
|
||||
color:#fff!important;
|
||||
padding:0px 12px;
|
||||
display:inline-block;
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import axios from 'axios';
|
||||
// 获取分支列表
|
||||
export const getBranch = async (id,owner)=>{
|
||||
return (await axios.get(`/${owner}/${id}/branches.json`)).data;
|
||||
let res = await axios.get(`/${owner}/${id}/branches.json`);
|
||||
return res&&res.data;
|
||||
}
|
||||
// 获取标签列表
|
||||
export const getTag = async (id,owner)=>{
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
margin-left: 15px;
|
||||
}
|
||||
|
||||
.currentMenu{
|
||||
.ant-dropdown-menu.currentMenu{
|
||||
width: 120px;
|
||||
text-align: center;
|
||||
padding:0px;
|
||||
|
@ -62,7 +62,8 @@
|
|||
color: #666;
|
||||
&:hover{
|
||||
color: #fff;
|
||||
background: #4CACFF;
|
||||
// background: #4CACFF;
|
||||
background: #829BFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -688,6 +688,12 @@ class Detail extends Component {
|
|||
() => (<WikiEdit {...this.props} {...this.state} {...common} />)
|
||||
}
|
||||
></Route>
|
||||
{/* wiki具体某一个地址 */}
|
||||
<Route path="/:owner/:projectsId/wiki/:wikiName"
|
||||
render={
|
||||
(props) => (<Wiki {...this.props} {...props} {...this.state} {...common} />)
|
||||
}
|
||||
></Route>
|
||||
{/* wiki */}
|
||||
<Route path="/:owner/:projectsId/wiki"
|
||||
render={
|
||||
|
|
|
@ -334,6 +334,14 @@
|
|||
.listtablebody{
|
||||
border-radius:0px 0px 4px 4px ;
|
||||
border: 1px solid #D0D0D0;
|
||||
li{
|
||||
a{
|
||||
color: #05101a;
|
||||
&:hover{
|
||||
color:$primary-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
li.listtablepath{
|
||||
a{color: #40a9ff;}
|
||||
p{
|
||||
|
|
|
@ -9,7 +9,7 @@ function DetailBanner({ history,list , owner , projectsId ,showNotification , ur
|
|||
const [ menuName , setMenuName ] = useState(undefined);
|
||||
const [ visible , setVisible ] = useState(false);
|
||||
useEffect(()=>{
|
||||
if(list){
|
||||
if(Array.isArray(list)){
|
||||
// 没有资源库banner但是通过连接进资源库页面时
|
||||
let a = list.filter(item=>item.menu_name === "resources");
|
||||
if((pathname && pathname==="source") && (a && a.length === 0)){
|
||||
|
|
|
@ -6,7 +6,7 @@ import MergeFooter from './merge_footer';
|
|||
import { returnbar , turnbar } from 'educoder';
|
||||
import { Base64 } from 'js-base64';
|
||||
|
||||
import '../Order/order.css';
|
||||
import '../Order/order.scss';
|
||||
import './merge.css';
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React, { Component } from "react";
|
||||
import { Link } from "react-router-dom";
|
||||
import { Tag } from "antd";
|
||||
import { Tag, Tooltip } from "antd";
|
||||
import { AlignCenter } from '../Component/layout';
|
||||
import { getImageUrl, turnbar } from "educoder";
|
||||
import "./merge.css";
|
||||
|
@ -157,7 +157,7 @@ class MergeItem extends Component {
|
|||
"--"
|
||||
)}
|
||||
</li>
|
||||
<li>{item.version || "--"}</li>
|
||||
<li>{item.version ? <Tooltip placement="topLeft" title={item.version}>{item.version}</Tooltip> : "--"}</li>
|
||||
|
||||
<li>
|
||||
<div
|
||||
|
|
|
@ -7,7 +7,7 @@ import Commits from './Commits';
|
|||
import Comments from '../comments/comments';
|
||||
import Files from './Files';
|
||||
|
||||
import '../Order/order.css';
|
||||
import '../Order/order.scss';
|
||||
import './merge.css';
|
||||
|
||||
const { TabPane } = Tabs;
|
||||
|
|
|
@ -16,7 +16,7 @@ import {
|
|||
} from "antd";
|
||||
import "./merge.css";
|
||||
import RenderHtml from "../../components/render-html";
|
||||
import "../Order/order.css";
|
||||
import "../Order/order.scss";
|
||||
import MergeLinkFooter from "./MergeLinkFooter";
|
||||
|
||||
const TextArea = Input.TextArea;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React, { Component } from "react";
|
||||
import { Input, Select , Spin, Alert } from "antd";
|
||||
import axios from "axios";
|
||||
import "../Order/order.css";
|
||||
import "../Order/order.scss";
|
||||
import "./merge.css";
|
||||
import MergeForm from "./merge_form";
|
||||
import MergeFooter from "./merge_footer";
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React, { Component } from "react";
|
||||
import { Input, Select, Button, Spin, Empty } from "antd";
|
||||
import axios from "axios";
|
||||
import "../Order/order.css";
|
||||
import "../Order/order.scss";
|
||||
import "./merge.css";
|
||||
import MergeForm from "./merge_form";
|
||||
import MergeFooter from "./merge_footer";
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React, { Component } from "react";
|
||||
import { Input, Dropdown, Menu, Icon, Pagination, Spin } from "antd";
|
||||
import "./merge.css";
|
||||
import "../Order/order.css";
|
||||
import "../Order/order.scss";
|
||||
import "../Order/index.scss";
|
||||
import NoneData from "./no_data";
|
||||
import MergeItem from "./MergeItem";
|
||||
|
|
|
@ -3,7 +3,7 @@ import { Tabs } from 'antd';
|
|||
import Commits from './Commits';
|
||||
import Files from './Files';
|
||||
|
||||
import '../Order/order.css';
|
||||
import '../Order/order.scss';
|
||||
import './merge.css';
|
||||
|
||||
const { TabPane } = Tabs;
|
||||
|
|
|
@ -2,7 +2,7 @@ import React, { Component } from "react";
|
|||
import { Button, Form, Menu, Input, Select, Tag, Checkbox, Spin } from "antd";
|
||||
import axios from "axios";
|
||||
|
||||
import "../Order/order.css";
|
||||
import "../Order/order.scss";
|
||||
import "./merge.css";
|
||||
import MDEditor from "../../modules/tpm/challengesnew/tpm-md-editor";
|
||||
|
||||
|
|
|
@ -1,28 +1,28 @@
|
|||
.noticeMenu{
|
||||
padding:0px 30px;
|
||||
.noticeMenu {
|
||||
padding: 0px 30px;
|
||||
display: flex;
|
||||
border-bottom: 1px solid #eee;
|
||||
li{
|
||||
li {
|
||||
font-size: 16px;
|
||||
padding:0px;
|
||||
margin-right:30px;
|
||||
padding: 0px;
|
||||
margin-right: 30px;
|
||||
height: 70px;
|
||||
line-height: 70px;
|
||||
position: relative;
|
||||
transform: none;
|
||||
a{
|
||||
a {
|
||||
display: flex;
|
||||
}
|
||||
&.active a span{
|
||||
color: #1890ff;
|
||||
&.active a span {
|
||||
color: $primary-color;
|
||||
}
|
||||
.unNum{
|
||||
.unNum {
|
||||
color: #d38900;
|
||||
font-size: 12px;
|
||||
border-radius: 13px;
|
||||
height: 16px;
|
||||
line-height: 16px;
|
||||
padding:0px 4px;
|
||||
padding: 0px 4px;
|
||||
min-width: 23px;
|
||||
text-align: center;
|
||||
background-color: #ffe4b3;
|
||||
|
@ -32,30 +32,31 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
.notifyList{
|
||||
padding:0px 30px;
|
||||
li{
|
||||
.notifyList {
|
||||
padding: 0px 30px;
|
||||
li {
|
||||
display: flex;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding:20px 0px;
|
||||
.notifyImg{
|
||||
padding: 20px 0px;
|
||||
.notifyImg {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 50%;
|
||||
margin-right: 15px;
|
||||
}
|
||||
.notifyFlex{
|
||||
flex:1;
|
||||
p{
|
||||
margin:0px;
|
||||
.notifyFlex {
|
||||
flex: 1;
|
||||
p {
|
||||
margin: 0px;
|
||||
max-width: 660px;
|
||||
}
|
||||
.notifyInfos{
|
||||
.notifyInfos {
|
||||
margin-bottom: 8px;
|
||||
|
||||
}
|
||||
}
|
||||
&:last-child{
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React from 'react';
|
||||
import { Modal } from 'antd';
|
||||
|
||||
import './order.css';
|
||||
import './order.scss';
|
||||
function AmplifyImg(props) {
|
||||
|
||||
return (
|
||||
|
|
|
@ -8,7 +8,7 @@ import Attachments from "../Upload/attachment";
|
|||
import RenderHtml from "../../components/render-html";
|
||||
import Comments from "../comments/comments";
|
||||
import Claims from "../claims/claims"
|
||||
import "./order.css";
|
||||
import "./order.scss";
|
||||
|
||||
class Detail extends Component {
|
||||
constructor(props) {
|
||||
|
|
|
@ -3,7 +3,7 @@ import { Link } from 'react-router-dom';
|
|||
import { Dropdown, Icon, Menu, Pagination, Typography, Popconfirm, Spin } from 'antd';
|
||||
import NoneData from '../Nodata';
|
||||
import axios from 'axios';
|
||||
import './order.css';
|
||||
import './order.scss';
|
||||
import CheckProfile from '../Component/ProfileModal/Profile';
|
||||
|
||||
const { Text } = Typography;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React, { Component } from "react";
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Dropdown, Menu, Icon, Pagination, Spin } from 'antd';
|
||||
import './order.css';
|
||||
import './order.scss';
|
||||
import { FlexAJ } from '../Component/layout';
|
||||
import CheckProfile from '../Component/ProfileModal/Profile';
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React , { Component } from "react";
|
||||
import { NavLink } from 'react-router-dom';
|
||||
import './order.css'
|
||||
import './order.scss'
|
||||
class Nav extends Component{
|
||||
|
||||
render(){
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React, { Component } from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Popconfirm } from 'antd'
|
||||
import { Popconfirm,Tooltip } from 'antd'
|
||||
import { TagInfo } from '../Utils/TagColor';
|
||||
class OrderItem extends Component {
|
||||
constructor(props) {
|
||||
|
@ -84,7 +84,9 @@ class OrderItem extends Component {
|
|||
}
|
||||
</li>
|
||||
<li>{item.tracker || "--"}</li>
|
||||
{ !mile ?<li>{item.version || "--"}</li>:""}
|
||||
{!mile ? <li>
|
||||
{item.version ? <Tooltip placement="topLeft" title={item.version}>{item.version}</Tooltip> : "--"}
|
||||
</li> : ""}
|
||||
<li>{item.issue_status || "--"}</li>
|
||||
<li style={{color:`${item.done_ratio === "100%"?"#28BD6C":"#F73030"}`}}>{item.done_ratio || "--"}</li>
|
||||
<li>
|
||||
|
|
|
@ -2,7 +2,7 @@ import React, { Component } from 'react';
|
|||
import { Calendar, Select, Radio, Col, Row, Divider, Input, Form, Spin } from 'antd';
|
||||
import axios from 'axios';
|
||||
import moment from 'moment';
|
||||
import '../Order/order.css';
|
||||
import '../Order/order.scss';
|
||||
|
||||
|
||||
const TextArea = Input.TextArea;
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
content: '';
|
||||
left: 0px;
|
||||
bottom:0px;
|
||||
background-color:#5091FF;
|
||||
background-color:$primary-color;
|
||||
}
|
||||
}
|
||||
.milepostleft{
|
||||
|
|
|
@ -2,7 +2,7 @@ import React, { Component } from 'react';
|
|||
import { Calendar, Select, Radio, Col, Row, Divider, Input, Form, Spin } from 'antd';
|
||||
import axios from 'axios';
|
||||
import moment from 'moment';
|
||||
import '../Order/order.css';
|
||||
import '../Order/order.scss';
|
||||
|
||||
const TextArea = Input.TextArea;
|
||||
const { Group, Button } = Radio;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React, { Component } from "react";
|
||||
import { Input, Dropdown, Menu, Icon, Pagination, Spin, DatePicker, Checkbox } from "antd";
|
||||
import "./order.css";
|
||||
import "./order.scss";
|
||||
import './index.scss';
|
||||
import moment from 'moment';
|
||||
|
||||
|
@ -116,11 +116,11 @@ class order extends Component {
|
|||
};
|
||||
|
||||
// 获取列表数据
|
||||
getIssueList = (status_type, begin, end) => {
|
||||
getIssueList = (status_type,) => {
|
||||
this.setState({
|
||||
isSpin: true
|
||||
})
|
||||
const { select_params } = this.state;
|
||||
const { select_params ,begin,end} = this.state;
|
||||
const { projectsId, owner } = this.props.match.params;
|
||||
const url = `/${owner }/${projectsId}/issues.json`;
|
||||
axios
|
||||
|
@ -282,13 +282,17 @@ class order extends Component {
|
|||
// 翻页
|
||||
ChangePage = (page) => {
|
||||
window.scrollTo(0,0);
|
||||
const { status_type } = this.state;
|
||||
const { status_type,select_params } = this.state;
|
||||
this.setState({
|
||||
isSpin: true,
|
||||
checkedValue: [],
|
||||
all: false,
|
||||
select_params:{
|
||||
...select_params,
|
||||
page
|
||||
}
|
||||
},()=>{
|
||||
this.state.select_params.page=page;
|
||||
// this.state.select_params.page=page;
|
||||
this.getIssueList(status_type);
|
||||
});
|
||||
};
|
||||
|
@ -432,18 +436,28 @@ class order extends Component {
|
|||
|
||||
// 修改开始时间
|
||||
changeBeginTime = (data, value) => {
|
||||
const { status_type } = this.state;
|
||||
const { status_type,select_params } = this.state;
|
||||
this.setState({
|
||||
begin: value
|
||||
begin: value,
|
||||
select_params:{
|
||||
...select_params,
|
||||
page:1
|
||||
}
|
||||
},()=>{
|
||||
this.getIssueList(status_type, value, this.state.end);
|
||||
})
|
||||
this.getIssueList(status_type, value, this.state.end);
|
||||
}
|
||||
changeEndTime = (data, value) => {
|
||||
const { status_type } = this.state;
|
||||
const { status_type,select_params } = this.state;
|
||||
this.setState({
|
||||
end: value
|
||||
})
|
||||
this.getIssueList(status_type, this.state.begin, value);
|
||||
end: value,
|
||||
select_params:{
|
||||
...select_params,
|
||||
page:1
|
||||
}
|
||||
},()=>{
|
||||
this.getIssueList(status_type, this.state.begin, value);
|
||||
});
|
||||
}
|
||||
|
||||
// 选择列表里面的checkbox
|
||||
|
|
|
@ -127,8 +127,8 @@
|
|||
}
|
||||
.topWrapper_btn {
|
||||
background: #fff;
|
||||
border: 1px solid #5091ff;
|
||||
color: #5091ff !important;
|
||||
border: 1px solid $primary-color;
|
||||
color: $primary-color ;
|
||||
padding: 0px 12px;
|
||||
text-align: center;
|
||||
height: 32px;
|
||||
|
@ -146,7 +146,7 @@
|
|||
padding:0px 10px;
|
||||
}
|
||||
.topWrapper_type_infos li.active{
|
||||
color: #4cacff
|
||||
color: $primary-color
|
||||
}
|
||||
.topWrapper_type_infos li:last-child{
|
||||
border-left: 1px solid #eee;
|
||||
|
@ -173,7 +173,7 @@
|
|||
cursor: pointer;
|
||||
}
|
||||
.topWrapper_type li > span.active {
|
||||
color: #4cacff;
|
||||
color: $primary-color;
|
||||
border: 1px solid rgba(80, 145, 255, 1);
|
||||
}
|
||||
.topWrapper_select {
|
||||
|
@ -348,11 +348,11 @@
|
|||
padding-left: 80px;
|
||||
margin-left: 80px;
|
||||
margin-right: 20px;
|
||||
border: 1px solid #4cacff;
|
||||
border: 1px solid $primary-color;
|
||||
}
|
||||
.div_line {
|
||||
width: 100%;
|
||||
border: 10px solid #4cacff;
|
||||
border: 10px solid $primary-color;
|
||||
}
|
||||
.list_img {
|
||||
height: 145px;
|
||||
|
@ -482,7 +482,7 @@
|
|||
}
|
||||
.loginDiv {
|
||||
border: 1px solid #f7c977;
|
||||
background: rgb(255, 204, 113, 0.3);
|
||||
background: rgba(255, 204, 113, 0.3);
|
||||
text-align: center;
|
||||
padding: 8px 0px;
|
||||
border-radius: 4px;
|
||||
|
@ -492,7 +492,7 @@
|
|||
}
|
||||
.loginDiv a {
|
||||
text-decoration: underline;
|
||||
color: #4cacff;
|
||||
color: $primary-color;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
|
@ -536,12 +536,12 @@
|
|||
height: 32px !important;
|
||||
}
|
||||
a.issue-type-button.active {
|
||||
background: #4cacff;
|
||||
background: $primary-color;
|
||||
color: #fff;
|
||||
}
|
||||
a.issue-type-button.active:hover {
|
||||
background: #f4f4f4;
|
||||
color: #4cacff;
|
||||
color: $primary-color;
|
||||
}
|
||||
@media screen and (max-width: 700px) {
|
||||
.topWrapper_select li {
|
|
@ -4,7 +4,7 @@ import Upload from "../Upload/Index";
|
|||
import UploadImg from "../Images/upload.png";
|
||||
import MDEditor from "../../modules/tpm/challengesnew/tpm-md-editor";
|
||||
import moment from "moment";
|
||||
import "./order.css";
|
||||
import "./order.scss";
|
||||
import Attachments from "../Upload/attachment";
|
||||
|
||||
import axios from "axios";
|
||||
|
|
|
@ -12,7 +12,7 @@ import {
|
|||
Button,
|
||||
Table,
|
||||
} from "antd";
|
||||
import "../Order/order.css";
|
||||
import "../Order/order.scss";
|
||||
import "./setting.scss";
|
||||
import NoneData from "../Nodata";
|
||||
import { SketchPicker } from "react-color";
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
height: 35px;
|
||||
line-height: 35px;
|
||||
color: #fff!important;
|
||||
background: #4CACFF;
|
||||
background: $primary-color;
|
||||
}
|
||||
.small_submitBtn{
|
||||
display: block;
|
||||
|
@ -61,7 +61,7 @@
|
|||
height: 32px;
|
||||
line-height: 32px;
|
||||
color: #fff!important;
|
||||
background: #4CACFF;
|
||||
background: $primary-color;
|
||||
}
|
||||
.addPanel{
|
||||
display: flex;
|
||||
|
@ -146,7 +146,7 @@
|
|||
.bbr{border-bottom: 1px solid #f6f6f6;}
|
||||
.ant-input-group-addon{border: 0 !important;}
|
||||
.grid-item-left{display: grid; align-items: center; grid-template-columns: 1fr max-content;}
|
||||
.text-primary{color: #1890ff !important;}
|
||||
.text-primary{color: $primary-color !important;}
|
||||
.ant-dropdown-menu{min-width: 90px ; text-align: center !important;}
|
||||
.text-green{color: #28BD6C !important;}
|
||||
.text-yellow{color: #FF6E21 !important;}
|
||||
|
|
|
@ -19,7 +19,7 @@ export default (props) => {
|
|||
|
||||
let projectsId = match.params.projectsId;
|
||||
let owner = match.params.owner;
|
||||
|
||||
let wikiName = match.params.wikiName;
|
||||
const [fileArrInit, setFileArrInit] = useState(null);
|
||||
const [checkItem, setCheckItem] = useState({});
|
||||
const [itemDetail, setItemDetail] = useState({});
|
||||
|
@ -40,7 +40,12 @@ export default (props) => {
|
|||
setFileArr(res.data);
|
||||
setFileArrInit(res.data);
|
||||
if (res.data.length) {
|
||||
setCheckItem(res.data[0]);
|
||||
if (wikiName) {
|
||||
let activeItem = res.data.filter(item => { return item.name == wikiName })[0] || res.data[0];
|
||||
setCheckItem(activeItem)
|
||||
} else {
|
||||
setCheckItem(res.data[0]);
|
||||
}
|
||||
};
|
||||
} else {
|
||||
setFileArr([]);
|
||||
|
@ -191,6 +196,11 @@ export default (props) => {
|
|||
},
|
||||
};
|
||||
|
||||
function changeitem(item){
|
||||
history.push(`/${owner}/${projectsId}/wiki/${item.name}`)
|
||||
setCheckItem(item);
|
||||
}
|
||||
|
||||
return (
|
||||
< Spin spinning={!fileArrInit} className="opacitySpin">
|
||||
{fileArrInit && fileArrInit.length ?
|
||||
|
@ -234,7 +244,7 @@ export default (props) => {
|
|||
{
|
||||
fileArr.map(item => {
|
||||
return <div className="wiki-nav-title-parent" key={item.name}>
|
||||
<div className={`wiki-nav-title ${item.name === checkItem.name ? 'active' : ''}`} onClick={() => { setCheckItem(item) }}>
|
||||
<div className={`wiki-nav-title ${item.name === checkItem.name ? 'active' : ''}`} onClick={() => { changeitem(item) }}>
|
||||
<div className="nav-title-left">
|
||||
<i className="iconfont icon-wenjianjia2 mr3"></i>
|
||||
<span className="nav-title-left-text">{item.name}</span>
|
||||
|
@ -266,7 +276,7 @@ export default (props) => {
|
|||
{itemDetail.image_url && <img alt="头像" className="head-log-small" src={getImageUrl(`/${itemDetail.image_url}`)} />}
|
||||
<span >{itemDetail.userName}</span>
|
||||
</span>
|
||||
<span className="time-ago">上次修改于{checkItem.commit ? timeAgo(checkItem.commit.author.when):'刚刚'}</span>
|
||||
<span className="time-ago">上次修改于{checkItem.commit ? timeAgo(checkItem.commit.author.when) : '刚刚'}</span>
|
||||
</div>
|
||||
{permission && <Button type="primary" onClick={goEdit}>编辑</Button>}
|
||||
</div>
|
||||
|
|
|
@ -6,7 +6,7 @@ import { getImageUrl } from "educoder";
|
|||
import { List, Popconfirm, Pagination, Button } from "antd";
|
||||
import Attachments from "../Upload/attachment";
|
||||
import RenderHtml from "../../components/render-html";
|
||||
import "../Order/order.css";
|
||||
import "../Order/order.scss";
|
||||
|
||||
class children_comments extends Component {
|
||||
constructor(props) {
|
||||
|
|
|
@ -5,7 +5,7 @@ import { getImageUrl } from "educoder";
|
|||
import { List, Popconfirm, Pagination, Button } from "antd";
|
||||
import Attachments from "../Upload/attachment";
|
||||
import RenderHtml from "../../components/render-html";
|
||||
import "../Order/order.css";
|
||||
import "../Order/order.scss";
|
||||
|
||||
class children_journals extends Component {
|
||||
constructor(props) {
|
||||
|
|
|
@ -10,7 +10,7 @@ import Attachments from "../Upload/attachment";
|
|||
import MDEditor from "../../modules/tpm/challengesnew/tpm-md-editor";
|
||||
import RenderHtml from "../../components/render-html";
|
||||
import ChildrenComments from "./children_comments";
|
||||
import "../Order/order.css";
|
||||
import "../Order/order.scss";
|
||||
const { TabPane } = Tabs;
|
||||
class comments extends Component {
|
||||
constructor(props) {
|
||||
|
|
|
@ -225,7 +225,8 @@ form{
|
|||
margin-bottom: 12px;
|
||||
border-radius:2px;
|
||||
background-color: #fff;
|
||||
box-shadow: 0px 0px 2px rgba(0,0,0,0.2);
|
||||
// box-shadow: 0px 0px 2px rgba(0,0,0,0.2);
|
||||
border:1px solid rgba(79, 108, 188, 0.21);
|
||||
&>li{
|
||||
font-size: 1rem;
|
||||
padding:0px 0px 0px 20px;
|
||||
|
@ -244,6 +245,7 @@ form{
|
|||
margin:0px;
|
||||
a{
|
||||
width:100%;
|
||||
color: #202d40;
|
||||
}
|
||||
& span:last-child{
|
||||
color: #999;
|
||||
|
@ -253,11 +255,11 @@ form{
|
|||
border-bottom: none;
|
||||
}
|
||||
&:not(.MenuTitle):hover{
|
||||
background-color: #fafafa;
|
||||
background-color:rgba(70, 106, 255, 0.06);
|
||||
}
|
||||
}
|
||||
& li.active{
|
||||
background-color: #fafafa;
|
||||
background-color:rgba(70, 106, 255, 0.06);
|
||||
}
|
||||
& li.active::before{
|
||||
position: absolute;
|
||||
|
@ -266,7 +268,8 @@ form{
|
|||
width: 6px;
|
||||
content: '';
|
||||
height: 33px;
|
||||
background: #4CACFF;
|
||||
// background: #4CACFF;
|
||||
background: $primary-color;
|
||||
}
|
||||
.MenuTitle{
|
||||
font-size: 16px;
|
||||
|
@ -295,8 +298,8 @@ form{
|
|||
border-color: #D0D0D0;
|
||||
}
|
||||
.ant-btn.ant-btn-background-ghost.ant-btn-primary:hover{
|
||||
background-color: #1890ff!important;
|
||||
border-color: #1890ff;
|
||||
background-color:$primary-color!important;
|
||||
border-color: $primary-color;
|
||||
color: #fff;
|
||||
}
|
||||
.ant-btn.ant-btn-background-ghost.ant-btn-danger:hover{
|
||||
|
|
|
@ -18,7 +18,11 @@
|
|||
}
|
||||
.name{
|
||||
font-size: 16px;
|
||||
color: #4CACFF;
|
||||
// color: #4CACFF;
|
||||
color: $primary-color;
|
||||
&:hover{
|
||||
color: $primary-color-hover;
|
||||
}
|
||||
}
|
||||
.desc{
|
||||
color: #999;
|
||||
|
|
|
@ -1,245 +0,0 @@
|
|||
.headerbox {
|
||||
padding: 20px;
|
||||
border-bottom: 1px solid #E0E0E0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.headerbox > div {
|
||||
width: 400px;
|
||||
}
|
||||
.headerbox > p {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.headerbox > p a {
|
||||
color: #5091FF;
|
||||
margin-left: 30px;
|
||||
font-size: 16px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.headerbox .ant-btn.ant-input-search-button {
|
||||
margin-top: -1px;
|
||||
margin-right: -1px;
|
||||
}
|
||||
|
||||
.echartBox {
|
||||
border: 1px solid #DEDEDE;
|
||||
}
|
||||
.echartBox > p {
|
||||
color: #999;
|
||||
padding: 15px 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.contentBox {
|
||||
padding: 20px 20px 0px 20px;
|
||||
}
|
||||
.contentBox > div {
|
||||
margin-bottom: 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 20px 25px;
|
||||
background-color: #fafafa;
|
||||
}
|
||||
.contentBox > div .imgBox {
|
||||
width: 190px;
|
||||
height: 90px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 20px;
|
||||
background-color: #fff;
|
||||
}
|
||||
.contentBox > div .imgBox img {
|
||||
max-width: 90%;
|
||||
max-height: 90%;
|
||||
}
|
||||
.contentBox .item-news {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 12px;
|
||||
color: #888;
|
||||
margin-top: 3px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
.contentBox .teamdesc {
|
||||
word-break: break-all;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
.infosType {
|
||||
padding: 20px 30px 0px 20px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.infosType .infoStatus {
|
||||
height: 30px;
|
||||
background: white;
|
||||
border-radius: 15px;
|
||||
border: 1px solid #dddddd;
|
||||
line-height: 30px;
|
||||
font-size: 12px;
|
||||
color: #888;
|
||||
display: flex;
|
||||
}
|
||||
.infosType .infoStatus > span {
|
||||
display: block;
|
||||
padding: 0px 12px;
|
||||
border-radius: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.infosType .infoStatus > span.active {
|
||||
background-color: #5091FF;
|
||||
color: #fff;
|
||||
padding: 0px 15px;
|
||||
}
|
||||
.infosType .infoStatus .statusDivider {
|
||||
margin: 8px 0 0 0 !important;
|
||||
}
|
||||
|
||||
.userDescription {
|
||||
color: #666666;
|
||||
line-height: 18px;
|
||||
text-align: left;
|
||||
margin: 10px 0px;
|
||||
word-break: break-all;
|
||||
text-align: justify;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.focusBox, .infoBox {
|
||||
width: 100% !important;
|
||||
display: inline-block;
|
||||
margin-top: 30px;
|
||||
padding-top: 30px;
|
||||
border-top: 1px solid #f1f1f1;
|
||||
}
|
||||
|
||||
.infoBox {
|
||||
padding-bottom: 10px;
|
||||
text-align: left;
|
||||
line-height: 28px;
|
||||
color: #666;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.infoBox > div {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.infoBox i {
|
||||
color: #DEDEDE;
|
||||
font-size: 15px !important;
|
||||
}
|
||||
.infoBox span {
|
||||
margin-left: 10px;
|
||||
}
|
||||
.headimg {
|
||||
position: relative;
|
||||
display: block;
|
||||
}
|
||||
.headimg img {
|
||||
width: 110px;
|
||||
height: 110px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.headimg span {
|
||||
position: absolute;
|
||||
bottom: -6px;
|
||||
right: -16px;
|
||||
}
|
||||
.headimg span i {
|
||||
font-size: 25px !important;
|
||||
border-radius: 50%;
|
||||
color: #fff;
|
||||
}
|
||||
.headimg span i.icon-nan1 {
|
||||
background-color: #1890FF;
|
||||
}
|
||||
.headimg span i.icon-nv1 {
|
||||
background-color: pink;
|
||||
}
|
||||
|
||||
ul.ant-menu.menuStyle {
|
||||
padding: 0px 30px;
|
||||
font-size: 16px;
|
||||
}
|
||||
ul.ant-menu.menuStyle li {
|
||||
height: 70px;
|
||||
line-height: 70px;
|
||||
padding: 0px;
|
||||
margin-right: 30px !important;
|
||||
border-bottom: transparent !important;
|
||||
}
|
||||
|
||||
.disposeInfo {
|
||||
padding: 0px 30px;
|
||||
min-height: 400px;
|
||||
}
|
||||
.disposeInfo .disposeItem {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 30px 0px;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
.authTag {
|
||||
display: inline-block;
|
||||
padding: 0px 10px;
|
||||
border-radius: 12px;
|
||||
font-size: 12px;
|
||||
height: 22px;
|
||||
line-height: 22px;
|
||||
}
|
||||
.authTag.red {
|
||||
border: 1px solid #F73030;
|
||||
color: #F73030;
|
||||
}
|
||||
.authTag.green {
|
||||
border: 1px solid #28BD6C;
|
||||
color: #28BD6C;
|
||||
}
|
||||
|
||||
.CIList {
|
||||
padding: 0px 30px;
|
||||
min-height: 400px;
|
||||
}
|
||||
.CIList li {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 28px 0px;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
.infosRightMenu .ant-menu-item {
|
||||
padding: 0px;
|
||||
margin: 0px 20px 0px 0px !important;
|
||||
font-size: 17px;
|
||||
height: 32px;
|
||||
line-height: 0px;
|
||||
border-bottom: 2px solid transparent !important;
|
||||
position: relative;
|
||||
}
|
||||
.infosRightMenu .ant-menu-item a > i {
|
||||
font-size: 15px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
.infosRightMenu .ant-menu-item .menuNum {
|
||||
font-size: 12px;
|
||||
margin-left: 3px;
|
||||
color: #FF6E21;
|
||||
}
|
||||
.infosRightMenu .ant-menu-item.ant-menu-item-selected::before {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
bottom: -1px;
|
||||
height: 2px;
|
||||
left: 0px;
|
||||
background-color: #1890ff;
|
||||
content: "";
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=Index.css.map */
|
|
@ -1,4 +1,5 @@
|
|||
$flex:flex;
|
||||
$primary-color:#466aff;
|
||||
.headerbox{
|
||||
padding:20px;
|
||||
border-bottom: 1px solid #E0E0E0;
|
||||
|
@ -13,7 +14,7 @@ $flex:flex;
|
|||
align-items: center;
|
||||
}
|
||||
& > p a{
|
||||
color: #5091FF;
|
||||
color: $primary-color;
|
||||
margin-left: 30px;
|
||||
font-size: 16px;
|
||||
display: $flex;
|
||||
|
@ -88,7 +89,7 @@ $flex:flex;
|
|||
cursor: pointer;
|
||||
}
|
||||
& > span.active{
|
||||
background-color:#5091FF ;
|
||||
background-color:$primary-color ;
|
||||
color: #fff;
|
||||
padding:0px 15px;
|
||||
}
|
||||
|
@ -306,7 +307,7 @@ ul.ant-menu.menuStyle{
|
|||
bottom: -1px;
|
||||
height: 2px;
|
||||
left: 0px;
|
||||
background-color: #1890ff;
|
||||
background-color: $primary-color;
|
||||
content:"";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,12 +7,13 @@
|
|||
color: #d0d0d0;
|
||||
}
|
||||
.ant-btn.ant-btn-primary.ant-btn-background-ghost {
|
||||
border-color: #1890ff;
|
||||
color: #1890ff;
|
||||
border-color: $primary-color;
|
||||
color: $primary-color;
|
||||
margin-left: 20px;
|
||||
&:hover{
|
||||
background-color: #fff!important;
|
||||
color: #1890ff;;
|
||||
border-color: $primary-color-hover;
|
||||
color: $primary-color-hover;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,8 @@ function Check({ current_user, showNotification, history }) {
|
|||
const [taskId, setTaskId] = useState();
|
||||
const [havePass, setHavePass] = useState(false);
|
||||
|
||||
const disabledCheck = new Date().getTime() > new Date('2022-07-01').getTime();
|
||||
|
||||
const columns = [
|
||||
{
|
||||
title: '学生姓名',
|
||||
|
@ -128,8 +130,8 @@ function Check({ current_user, showNotification, history }) {
|
|||
return (
|
||||
<div className='actionBox'>
|
||||
{
|
||||
text ? <Button type="default" onClick={() => { checkStudent(record.id, 0) }}>撤销</Button> :
|
||||
<Button type="primary" disabled={havePass} onClick={() => { checkStudent(record.id, 1) }}>通过</Button>
|
||||
text ? <Button disabled={disabledCheck} type="default" onClick={() => { checkStudent(record.id, 0) }}>撤销</Button> :
|
||||
<Button disabled={disabledCheck} type="primary" disabled={havePass} onClick={() => { checkStudent(record.id, 1) }}>通过</Button>
|
||||
}
|
||||
</div>
|
||||
)
|
||||
|
|
|
@ -16,7 +16,7 @@ function Contact() {
|
|||
<h4 className="contact-invite">期待你的加入,和我们一起推动开源繁荣发展!</h4>
|
||||
<div className="contact-way">
|
||||
<p>交流QQ群: 210174286</p>
|
||||
<p>合作推广: gitlink@ccf.org.cn</p>
|
||||
<p>合作推广: glcc@ccf.org.cn</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className='attention'>
|
||||
|
|
|
@ -107,7 +107,7 @@ export default (props) => {
|
|||
<div className="openMMlabBox">
|
||||
<div className="logoTitle">
|
||||
<img src={logo} alt="" className="logo"/>
|
||||
<span className="title">活动特邀合作单位 openMMlab</span>
|
||||
<span className="title">活动特邀合作单位 OpenMMLab</span>
|
||||
<div></div>
|
||||
<div></div>
|
||||
</div>
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 2.7 KiB |
|
@ -1,4 +1,4 @@
|
|||
.openmmlab_tab {
|
||||
.ant-tabs.openmmlab_tab {
|
||||
background-color: #2c374e;
|
||||
color: #fff;
|
||||
.ant-tabs-bar {
|
||||
|
|
|
@ -14,12 +14,12 @@ const arithmeticArr = [
|
|||
name: "MMPose算法演示",
|
||||
describe: "MMPose 是 OpenMMLab 中的姿态估计算法库,目前已经支持了近 30 个算法和 300+ 预训练模型,涵盖了人体、人脸、人手、动物等多类目标的姿态估计。秉承 OpenMMLab 系列的结构化框架设计,MMPose 很适合作为算法复现和创新的平台",
|
||||
// source: 'https://www.gitlink.org.cn/preview/d2d62f65d08a22bcc257c5a24cf750fa_1654781749389.mp4',
|
||||
source: 'https://www.gitlink.org.cn/api/attachments/387956.mp4',
|
||||
source: 'https://www.gitlink.org.cn/api/attachments/388257.mp4',
|
||||
type: 'mp4',
|
||||
img: 'https://www.gitlink.org.cn/api/attachments/388006'
|
||||
img: 'https://www.gitlink.org.cn/api/attachments/388256'
|
||||
},
|
||||
{
|
||||
name: "MMMOCR算法演示",
|
||||
name: "MMOCR算法演示",
|
||||
describe: "MMOCR 作为 OpenMMLab 家族的一员,支持众多 OCR 相关的模型,涵盖了文本检测、文本识别以及关键信息提取等多个主要方向。通过在 MMOCR 中复现相关算法,你将可以了解到 OCR 领域的前沿知识,熟练掌握 MM 系列框架的整体流程,并积累深度学习相关的学术及工程经验",
|
||||
source: 'https://www.gitlink.org.cn/api/attachments/388005',
|
||||
type: 'img',
|
||||
|
@ -51,7 +51,7 @@ const arithmeticArr = [
|
|||
{
|
||||
name: "MMFlow算法演示",
|
||||
describe: "MMFlow是一款基于 PyTorch 和 MMCV 的光流估计开源工具箱,提供了多个 SOTA 光流估计算法,并支持光流领域主流学术数据集,以及光流可视化和评估方法",
|
||||
source: 'https://www.gitlink.org.cn/api/attachments/387954',
|
||||
source: 'https://www.gitlink.org.cn/api/attachments/388258',
|
||||
type: 'img',
|
||||
},
|
||||
{
|
||||
|
|
|
@ -25,7 +25,7 @@ function SliderLeft({list,history}) {
|
|||
// pathname:'/glcc/projects',
|
||||
// state:{projectName:projectName.replace(/ /g,'-')}
|
||||
// })
|
||||
window.open(`/glcc/projects?projectName=${projectName}`);
|
||||
window.open(`/glcc/projects?projectName=${projectName.replace(/ /g,'')}`);
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
@ -39,6 +39,12 @@ function Project(propsF) {
|
|||
</div>
|
||||
<Spin spinning={false}>
|
||||
<Switch {...propsF}>
|
||||
<Route
|
||||
path="/glcc/projects/:gitlinkLastUrl"
|
||||
render={(props) => (
|
||||
<ProjectList {...propsF} {...props}/>
|
||||
)}
|
||||
></Route>
|
||||
<Route
|
||||
path="/glcc/projects"
|
||||
render={(props) => (
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
.listBox{
|
||||
background-image:linear-gradient(180deg,#ebf2ff 0%,#ebf2ff 43.09%,#f3f4f8 100%);
|
||||
position: relative;
|
||||
// min-height: 1200px;
|
||||
.list{
|
||||
width: 1200px;
|
||||
margin: 0 auto;
|
||||
|
@ -193,8 +194,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
.projectItemPopover{
|
||||
.ant-popover.projectItemPopover{
|
||||
width: 1200px;
|
||||
z-index: 1000;
|
||||
.ant-popover-content .ant-popover-arrow{
|
||||
border-width: 12px;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React , { useEffect , useState } from 'react';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { Input, Popover, Spin } from 'antd';
|
||||
import { main_site_url } from '../../fetch';
|
||||
import './index.scss';
|
||||
|
@ -6,48 +6,98 @@ import { projectList } from '../../api';
|
|||
import ProjectDetail from '../component/projectDetail';
|
||||
import bgPng from "../../img/bgPng.png";
|
||||
import logo from "../../img/logo.png";
|
||||
const {Search} = Input;
|
||||
import star from "../../img/star.png";
|
||||
const { Search } = Input;
|
||||
|
||||
// 项目列表
|
||||
function ProjectList({applyTaskId, current_user, showLoginDialog, isStudentApplyDate, studentApplyEnd, location,history}) {
|
||||
let openmmlab =location.search&&location.search.split('=')[1];
|
||||
function ProjectList({ applyTaskId, current_user, showLoginDialog, isStudentApplyDate, studentApplyEnd, location, history, match }) {
|
||||
let gitlinkLastUrl = match.params.gitlinkLastUrl && match.params.gitlinkLastUrl.replace(/\./g, '');
|
||||
let openmmlab = location.search && location.search.split('=')[1];
|
||||
// 输入搜索框
|
||||
const [keyword, setKeyword] = useState(openmmlab?'openmmlab':undefined);
|
||||
const [keyword, setKeyword] = useState(openmmlab ? 'openmmlab' : undefined);
|
||||
const [data, setData] = useState([]);
|
||||
const [loading, setLoading] = useState(false);
|
||||
|
||||
useEffect(()=>{
|
||||
useEffect(() => {
|
||||
setLoading(true);
|
||||
const params = {
|
||||
curPage: 1,
|
||||
keyword,
|
||||
pageSize: 10000
|
||||
}
|
||||
projectList(params).then(response=>{
|
||||
if(response && response.message === "success"){
|
||||
setData(response.data.rows);
|
||||
openmmlab&&setTimeout(()=>{
|
||||
let openProject=document.querySelector(`.${openmmlab}`);
|
||||
openProject.click();
|
||||
let height=document.documentElement.clientWidth/1920*500+71+70+100+openProject.offsetTop;
|
||||
window.scrollTo(0, height);
|
||||
},100)
|
||||
projectList(params).then(response => {
|
||||
if (response && response.message === "success") {
|
||||
let dataArr = response.data.rows;
|
||||
dataArr.forEach(i => {
|
||||
let urlArr = i.gitlinkUrl.split('/');
|
||||
i.gitlinkLastUrl = urlArr.pop() || urlArr.pop();
|
||||
i.gitlinkLastUrl = i.gitlinkLastUrl.replace(/\./g, '');
|
||||
});
|
||||
if (gitlinkLastUrl) {
|
||||
let thisProjectArr = dataArr.filter(item => { return item.gitlinkLastUrl == gitlinkLastUrl })
|
||||
setData(thisProjectArr);
|
||||
setTimeout(() => {
|
||||
let openProject = document.querySelector(`.${gitlinkLastUrl}`);
|
||||
if (openProject) {
|
||||
openProject.click();
|
||||
let height = document.documentElement.clientWidth / 1920 * 500 + 71 + 70 + openProject.offsetTop;
|
||||
if (thisProjectArr.length) {
|
||||
document.querySelector('#taskList').style.height = (468 + thisProjectArr[0].registrationTaskList.length * 330 + 'px');
|
||||
}
|
||||
window.scrollTo(0, height);
|
||||
}
|
||||
}, 100)
|
||||
} else {
|
||||
setData(response.data.rows);
|
||||
}
|
||||
openmmlab && setTimeout(() => {
|
||||
let openProject = document.querySelector(`.${openmmlab}`);
|
||||
if (openProject) {
|
||||
openProject.click();
|
||||
let height = document.documentElement.clientWidth / 1920 * 500 + 71 + 70 + 100 + openProject.offsetTop;
|
||||
window.scrollTo(0, height);
|
||||
}
|
||||
}, 100)
|
||||
}
|
||||
setLoading(false);
|
||||
})
|
||||
},[keyword])
|
||||
}, [keyword])
|
||||
|
||||
return(
|
||||
<div className="taskList listBox">
|
||||
function changeVisible(visible, item) {
|
||||
if (visible) {
|
||||
let height = document.documentElement.clientWidth / 1920 * 500 + 70 + document.querySelector(`.${item.gitlinkLastUrl}`).offsetTop + item.registrationTaskList.length * 320;
|
||||
document.querySelector('#taskList').style.height = height + 'px';
|
||||
} else {
|
||||
document.querySelector('#taskList').style.height = 'auto';
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div id="taskList" className="taskList listBox">
|
||||
<div className="list">
|
||||
<div className='search'><Search placeholder='请输入项目名称进行搜索' allowClear enterButton onSearch={(value)=>{setKeyword(value)}}/></div>
|
||||
{!gitlinkLastUrl && <div className='search'><Search placeholder='请输入项目名称进行搜索' allowClear enterButton onSearch={(value) => { setKeyword(value) }} /></div>}
|
||||
<Spin spinning={loading}>
|
||||
<div className='projectListBox'>
|
||||
{data && data.map((item, index)=>{
|
||||
return <Popover key={index} placement= {(index+1)%3 === 0 ? 'bottomRight' : (index+1)%3%2 === 0 ? 'bottom' : 'bottomLeft'} content={<ProjectDetail detail={item} applyTaskId={applyTaskId} current_user={current_user} showLoginDialog={showLoginDialog} isStudentApplyDate={isStudentApplyDate} studentApplyEnd={studentApplyEnd}/>} trigger='click' overlayClassName='projectItemPopover' autoAdjustOverflow={false}>
|
||||
<div className={`projectItem ${(index+1)%3 === 0 || (index+1)%3%2 === 0 ? '' : 'firstBox'} ${item.projectName.replace(/ /g,'-')}`}>
|
||||
{data && data.map((item, index) => {
|
||||
return <Popover
|
||||
onVisibleChange={(visible) => { changeVisible(visible, item) }}
|
||||
key={index}
|
||||
placement={(index + 1) % 3 === 0 ? 'bottomRight' : (index + 1) % 3 % 2 === 0 ? 'bottom' : 'bottomLeft'}
|
||||
content={<ProjectDetail detail={item} applyTaskId={applyTaskId} current_user={current_user}
|
||||
showLoginDialog={showLoginDialog}
|
||||
isStudentApplyDate={isStudentApplyDate}
|
||||
studentApplyEnd={studentApplyEnd}
|
||||
/>}
|
||||
trigger='click'
|
||||
overlayClassName='projectItemPopover'
|
||||
autoAdjustOverflow={false}
|
||||
>
|
||||
<div className={`projectItem ${(index + 1) % 3 === 0 || (index + 1) % 3 % 2 === 0 ? '' : 'firstBox'} ${item.projectName.replace(/ /g, '')} ${item.gitlinkLastUrl.replace(/\./g, '')}`}>
|
||||
<div className="border"></div>
|
||||
<div className="projectLogo"><img src={item.projectLogoId ? `${main_site_url}/api/attachments/${item.projectLogoId}` : logo} alt=''/></div>
|
||||
{!gitlinkLastUrl && !openmmlab && item.recommendFlag ? <img className="projectLogoStar" src={star} /> : ''}
|
||||
<div className="projectLogo">
|
||||
<img className="projectLogoImg" src={item.projectLogoId ? `${main_site_url}/api/attachments/${item.projectLogoId}` : logo} alt='' />
|
||||
</div>
|
||||
<div className="title">{item.projectName}</div>
|
||||
<div className="intro">{item.projectIntro}</div>
|
||||
</div>
|
||||
|
@ -56,8 +106,8 @@ function ProjectList({applyTaskId, current_user, showLoginDialog, isStudentApply
|
|||
</div>
|
||||
</Spin>
|
||||
</div>
|
||||
<img src={bgPng} alt='' className='bgPng3'/>
|
||||
<img src={bgPng} alt='' className='bgPng4'/>
|
||||
<img src={bgPng} alt='' className='bgPng3' />
|
||||
<img src={bgPng} alt='' className='bgPng4' />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
flex-wrap: wrap;
|
||||
// justify-content: space-between;
|
||||
.projectItem{
|
||||
position: relative;
|
||||
width: 30%;
|
||||
background-image: linear-gradient(180deg,rgba(232, 237, 255, 0.85) 0%,rgba(255, 255, 255, 0.85) 100%);
|
||||
border: 1px solid;
|
||||
|
@ -28,7 +29,16 @@
|
|||
background-color:#657edf;
|
||||
border-radius:2px 2px 0px 0px;
|
||||
}
|
||||
.projectLogoStar{
|
||||
position: absolute;
|
||||
top:30px;
|
||||
right: 130px;
|
||||
width: 28px;
|
||||
z-index: 10;
|
||||
transform: rotate(46deg);
|
||||
}
|
||||
.projectLogo{
|
||||
position: relative;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
border: 1px solid #fff;
|
||||
|
@ -38,11 +48,12 @@
|
|||
overflow: hidden;
|
||||
margin: 25px auto 10px;
|
||||
line-height: 95px;
|
||||
img{
|
||||
.projectLogoImg{
|
||||
width: 100%;
|
||||
// height: 100%;
|
||||
// display: block;
|
||||
}
|
||||
|
||||
}
|
||||
.title{
|
||||
color:#2a51bf;
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
$primary-color: #466aff;
|
||||
$primary-color-hover: #6684FE;
|
||||
$primary-color-active: #1A47FF;
|
||||
$link-color: #466aff;
|
||||
$link-black-color: #05101a;
|
Binary file not shown.
After Width: | Height: | Size: 280 KiB |
|
@ -0,0 +1,47 @@
|
|||
import React, { memo, useEffect, useState } from 'react';
|
||||
import { Button, Modal } from 'antd';
|
||||
import qqChat from '../../glcc/img/qqChat.png';
|
||||
import bg from './glcc.png';
|
||||
import './index.scss';
|
||||
|
||||
|
||||
|
||||
function QzModal() {
|
||||
|
||||
const [visible, setVisible] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
let qzModalTime = localStorage.qzModalTime;
|
||||
let nowTime = new Date().getTime();
|
||||
if (qzModalTime) {
|
||||
if (nowTime - qzModalTime > 24 * 3600 * 1000) {
|
||||
// 延时展示,保证渲染modal不会白屏
|
||||
setTimeout(()=>{setVisible(true);},800)
|
||||
localStorage.setItem('qzModalTime', nowTime);
|
||||
}
|
||||
} else {
|
||||
setTimeout(()=>{setVisible(true);},800)
|
||||
localStorage.setItem('qzModalTime', nowTime);
|
||||
}
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<Modal
|
||||
title="Basic Modal"
|
||||
visible={visible}
|
||||
onCancel={() => { setVisible(false) }}
|
||||
footer={null}
|
||||
className='qzModal'
|
||||
width='900px'
|
||||
maskClosable={false}
|
||||
centered
|
||||
>
|
||||
{/* <img src={window.location.href.indexOf('osredm.jk')>-1?bg_local: bg} /> */}
|
||||
<img className="big_picture" src={bg} />
|
||||
<img className="qqchat" src={qqChat} />
|
||||
<a target="_blank" href="/glcc" className="qz-btn"></a>
|
||||
</Modal>
|
||||
)
|
||||
}
|
||||
|
||||
export default memo(QzModal);
|
|
@ -0,0 +1,56 @@
|
|||
.qzModal {
|
||||
top:calc(50vh - 250px);
|
||||
.ant-modal-body {
|
||||
padding: 0;
|
||||
background: rgb(48,118,207);
|
||||
|
||||
.big_picture {
|
||||
border-radius: 2px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.qqchat{
|
||||
width: 98px;
|
||||
position: absolute;
|
||||
bottom: 38px;
|
||||
left: 44px;
|
||||
}
|
||||
}
|
||||
|
||||
.ant-modal-header {
|
||||
height: 0;
|
||||
background: rgb(48,118,207);
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.ant-modal-close {
|
||||
top: -50px !important;
|
||||
right:-50px;
|
||||
}
|
||||
.ant-modal-close-icon {
|
||||
border: 1px solid #fff;
|
||||
color: #fff;
|
||||
border-radius: 50%;
|
||||
padding: 5%;
|
||||
}
|
||||
|
||||
.qz-btn {
|
||||
position: absolute;
|
||||
bottom: 30px;
|
||||
right: 0;
|
||||
width: 250px;
|
||||
height: 40px;
|
||||
// background-color: #e96d2a;
|
||||
// border-color: #e96d2a;
|
||||
// border-radius: 6px;
|
||||
// color: #fff;
|
||||
// font-size:16px;
|
||||
// text-align: center;
|
||||
// line-height: 49px;
|
||||
// &:hover{
|
||||
// color: #fff !important;
|
||||
// background-color: #f96d2a;
|
||||
// border-color: #f96d2a;
|
||||
// }
|
||||
}
|
||||
}
|
|
@ -27,7 +27,7 @@ body>.-task-title {
|
|||
width: 100%;
|
||||
height:58px;
|
||||
min-width: 1200px;
|
||||
z-index: 1000;
|
||||
z-index: 1001;
|
||||
position: fixed;
|
||||
background: #1B2440;
|
||||
color: #fff;
|
||||
|
|
Loading…
Reference in New Issue