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",
|
libraryName: "antd",
|
||||||
libraryDirectory: "es",
|
libraryDirectory: "es",
|
||||||
style: "css",
|
style: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
@ -211,8 +211,34 @@ module.exports = {
|
||||||
{
|
{
|
||||||
loader: require.resolve("sass-loader"),
|
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.
|
// "file" loader makes sure those assets get served by WebpackDevServer.
|
||||||
// When you `import` an asset, you get its (virtual) filename.
|
// When you `import` an asset, you get its (virtual) filename.
|
||||||
// In production, they would get copied to the `build` folder.
|
// In production, they would get copied to the `build` folder.
|
||||||
|
@ -271,7 +297,7 @@ module.exports = {
|
||||||
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
|
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
|
||||||
new MonacoWebpackPlugin({
|
new MonacoWebpackPlugin({
|
||||||
features: ["coreCommands", "find"],
|
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.
|
// Some libraries import Node modules but don't use them in the browser.
|
||||||
|
|
|
@ -152,7 +152,7 @@ module.exports = {
|
||||||
{
|
{
|
||||||
libraryName: "antd",
|
libraryName: "antd",
|
||||||
libraryDirectory: "es",
|
libraryDirectory: "es",
|
||||||
style: "css",
|
style: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
@ -213,8 +213,31 @@ module.exports = {
|
||||||
{
|
{
|
||||||
loader: require.resolve("sass-loader"),
|
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.
|
// "file" loader makes sure assets end up in the `build` folder.
|
||||||
// When you `import` an asset, you get its filename.
|
// When you `import` an asset, you get its filename.
|
||||||
// This loader doesn't use a "test" so it will catch all modules
|
// 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",
|
"js-base64": "^2.5.2",
|
||||||
"js2wordcloud": "^1.1.12",
|
"js2wordcloud": "^1.1.12",
|
||||||
"katex": "^0.11.1",
|
"katex": "^0.11.1",
|
||||||
|
"less": "^3.9.0",
|
||||||
|
"less-loader": "^4.1.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"loglevel": "^1.6.8",
|
"loglevel": "^1.6.8",
|
||||||
"marked": "^1.0.0",
|
"marked": "^1.0.0",
|
||||||
|
@ -211,6 +213,7 @@
|
||||||
"react-json-view": "^1.21.3",
|
"react-json-view": "^1.21.3",
|
||||||
"reqwest": "^2.0.5",
|
"reqwest": "^2.0.5",
|
||||||
"resize-observer-polyfill": "^1.5.1",
|
"resize-observer-polyfill": "^1.5.1",
|
||||||
|
"sass-resources-loader": "^2.2.5",
|
||||||
"terser-webpack-plugin": "^2.3.5",
|
"terser-webpack-plugin": "^2.3.5",
|
||||||
"uglifyjs-webpack-plugin": "^2.2.0",
|
"uglifyjs-webpack-plugin": "^2.2.0",
|
||||||
"webpack": "^4.42.1",
|
"webpack": "^4.42.1",
|
||||||
|
|
|
@ -1365,12 +1365,12 @@ table {
|
||||||
border: 0;
|
border: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
a:link,
|
a:link,a:visited{
|
||||||
a:visited {
|
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: #05101a;
|
color: #05101a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ol,
|
ol,
|
||||||
ul,
|
ul,
|
||||||
li {
|
li {
|
||||||
|
@ -2466,7 +2466,7 @@ a.hoverLine:hover{
|
||||||
}
|
}
|
||||||
|
|
||||||
a:hover{
|
a:hover{
|
||||||
color: #466AFF !important;
|
color: #6684FE;
|
||||||
}
|
}
|
||||||
|
|
||||||
.color-grey-98 {
|
.color-grey-98 {
|
||||||
|
|
|
@ -18,6 +18,7 @@ import moment from 'moment'
|
||||||
import { MuiThemeProvider, createMuiTheme } from 'material-ui/styles';
|
import { MuiThemeProvider, createMuiTheme } from 'material-ui/styles';
|
||||||
import SiderBar from './forge/Component/SiderBar';
|
import SiderBar from './forge/Component/SiderBar';
|
||||||
import SiderBarHelp from './glcc/siderBarHelp';
|
import SiderBarHelp from './glcc/siderBarHelp';
|
||||||
|
import GlccModal from './modules/glccModal';
|
||||||
|
|
||||||
import { SnackbarHOC } from 'educoder';
|
import { SnackbarHOC } from 'educoder';
|
||||||
import { initAxiosInterceptors } from './AppConfig'
|
import { initAxiosInterceptors } from './AppConfig'
|
||||||
|
@ -292,6 +293,7 @@ class App extends Component {
|
||||||
<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>
|
||||||
|
<GlccModal />
|
||||||
{!pathName || (pathName && pathName.indexOf("glcc") === -1) ? <SiderBar /> : <SiderBarHelp/>}
|
{!pathName || (pathName && pathName.indexOf("glcc") === -1) ? <SiderBar /> : <SiderBarHelp/>}
|
||||||
{/* <Router> */}
|
{/* <Router> */}
|
||||||
<Switch>
|
<Switch>
|
||||||
|
|
|
@ -25,7 +25,7 @@ if (isDev) {
|
||||||
}
|
}
|
||||||
debugType = window.location.search.indexOf('debug=t') !== -1 ? 'teacher' :
|
debugType = window.location.search.indexOf('debug=t') !== -1 ? 'teacher' :
|
||||||
window.location.search.indexOf('debug=s') !== -1 ? 'student' :
|
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;
|
window._debugType = debugType;
|
||||||
export function initAxiosInterceptors(props) {
|
export function initAxiosInterceptors(props) {
|
||||||
|
|
|
@ -73,8 +73,8 @@ export const Blueline = styled.a`{
|
||||||
height:30px;
|
height:30px;
|
||||||
line-height:28px;
|
line-height:28px;
|
||||||
border-radius:2px;
|
border-radius:2px;
|
||||||
border:1px solid rgba(80,145,255,1);
|
border:1px solid #466AFF;
|
||||||
color:rgba(80,145,255,1);
|
color:#466AFF;
|
||||||
padding:0px 12px;
|
padding:0px 12px;
|
||||||
display:inline-block;
|
display:inline-block;
|
||||||
}`
|
}`
|
||||||
|
@ -117,7 +117,8 @@ export const Blueback = styled.a`{
|
||||||
height:30px;
|
height:30px;
|
||||||
line-height:30px;
|
line-height:30px;
|
||||||
border-radius:2px;
|
border-radius:2px;
|
||||||
background-color:rgba(80,145,255,1);
|
// background-color:rgba(80,145,255,1);
|
||||||
|
background-color:#466AFF;
|
||||||
color:#fff!important;
|
color:#fff!important;
|
||||||
padding:0px 12px;
|
padding:0px 12px;
|
||||||
display:inline-block;
|
display:inline-block;
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
// 获取分支列表
|
// 获取分支列表
|
||||||
export const getBranch = async (id,owner)=>{
|
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)=>{
|
export const getTag = async (id,owner)=>{
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
margin-left: 15px;
|
margin-left: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.currentMenu{
|
.ant-dropdown-menu.currentMenu{
|
||||||
width: 120px;
|
width: 120px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding:0px;
|
padding:0px;
|
||||||
|
@ -62,7 +62,8 @@
|
||||||
color: #666;
|
color: #666;
|
||||||
&:hover{
|
&:hover{
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background: #4CACFF;
|
// background: #4CACFF;
|
||||||
|
background: #829BFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -688,6 +688,12 @@ class Detail extends Component {
|
||||||
() => (<WikiEdit {...this.props} {...this.state} {...common} />)
|
() => (<WikiEdit {...this.props} {...this.state} {...common} />)
|
||||||
}
|
}
|
||||||
></Route>
|
></Route>
|
||||||
|
{/* wiki具体某一个地址 */}
|
||||||
|
<Route path="/:owner/:projectsId/wiki/:wikiName"
|
||||||
|
render={
|
||||||
|
(props) => (<Wiki {...this.props} {...props} {...this.state} {...common} />)
|
||||||
|
}
|
||||||
|
></Route>
|
||||||
{/* wiki */}
|
{/* wiki */}
|
||||||
<Route path="/:owner/:projectsId/wiki"
|
<Route path="/:owner/:projectsId/wiki"
|
||||||
render={
|
render={
|
||||||
|
|
|
@ -334,6 +334,14 @@
|
||||||
.listtablebody{
|
.listtablebody{
|
||||||
border-radius:0px 0px 4px 4px ;
|
border-radius:0px 0px 4px 4px ;
|
||||||
border: 1px solid #D0D0D0;
|
border: 1px solid #D0D0D0;
|
||||||
|
li{
|
||||||
|
a{
|
||||||
|
color: #05101a;
|
||||||
|
&:hover{
|
||||||
|
color:$primary-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
li.listtablepath{
|
li.listtablepath{
|
||||||
a{color: #40a9ff;}
|
a{color: #40a9ff;}
|
||||||
p{
|
p{
|
||||||
|
|
|
@ -9,7 +9,7 @@ function DetailBanner({ history,list , owner , projectsId ,showNotification , ur
|
||||||
const [ menuName , setMenuName ] = useState(undefined);
|
const [ menuName , setMenuName ] = useState(undefined);
|
||||||
const [ visible , setVisible ] = useState(false);
|
const [ visible , setVisible ] = useState(false);
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
if(list){
|
if(Array.isArray(list)){
|
||||||
// 没有资源库banner但是通过连接进资源库页面时
|
// 没有资源库banner但是通过连接进资源库页面时
|
||||||
let a = list.filter(item=>item.menu_name === "resources");
|
let a = list.filter(item=>item.menu_name === "resources");
|
||||||
if((pathname && pathname==="source") && (a && a.length === 0)){
|
if((pathname && pathname==="source") && (a && a.length === 0)){
|
||||||
|
|
|
@ -6,7 +6,7 @@ import MergeFooter from './merge_footer';
|
||||||
import { returnbar , turnbar } from 'educoder';
|
import { returnbar , turnbar } from 'educoder';
|
||||||
import { Base64 } from 'js-base64';
|
import { Base64 } from 'js-base64';
|
||||||
|
|
||||||
import '../Order/order.css';
|
import '../Order/order.scss';
|
||||||
import './merge.css';
|
import './merge.css';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import React, { Component } from "react";
|
import React, { Component } from "react";
|
||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
import { Tag } from "antd";
|
import { Tag, Tooltip } from "antd";
|
||||||
import { AlignCenter } from '../Component/layout';
|
import { AlignCenter } from '../Component/layout';
|
||||||
import { getImageUrl, turnbar } from "educoder";
|
import { getImageUrl, turnbar } from "educoder";
|
||||||
import "./merge.css";
|
import "./merge.css";
|
||||||
|
@ -157,7 +157,7 @@ class MergeItem extends Component {
|
||||||
"--"
|
"--"
|
||||||
)}
|
)}
|
||||||
</li>
|
</li>
|
||||||
<li>{item.version || "--"}</li>
|
<li>{item.version ? <Tooltip placement="topLeft" title={item.version}>{item.version}</Tooltip> : "--"}</li>
|
||||||
|
|
||||||
<li>
|
<li>
|
||||||
<div
|
<div
|
||||||
|
|
|
@ -7,7 +7,7 @@ import Commits from './Commits';
|
||||||
import Comments from '../comments/comments';
|
import Comments from '../comments/comments';
|
||||||
import Files from './Files';
|
import Files from './Files';
|
||||||
|
|
||||||
import '../Order/order.css';
|
import '../Order/order.scss';
|
||||||
import './merge.css';
|
import './merge.css';
|
||||||
|
|
||||||
const { TabPane } = Tabs;
|
const { TabPane } = Tabs;
|
||||||
|
|
|
@ -16,7 +16,7 @@ import {
|
||||||
} from "antd";
|
} from "antd";
|
||||||
import "./merge.css";
|
import "./merge.css";
|
||||||
import RenderHtml from "../../components/render-html";
|
import RenderHtml from "../../components/render-html";
|
||||||
import "../Order/order.css";
|
import "../Order/order.scss";
|
||||||
import MergeLinkFooter from "./MergeLinkFooter";
|
import MergeLinkFooter from "./MergeLinkFooter";
|
||||||
|
|
||||||
const TextArea = Input.TextArea;
|
const TextArea = Input.TextArea;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import React, { Component } from "react";
|
import React, { Component } from "react";
|
||||||
import { Input, Select , Spin, Alert } from "antd";
|
import { Input, Select , Spin, Alert } from "antd";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import "../Order/order.css";
|
import "../Order/order.scss";
|
||||||
import "./merge.css";
|
import "./merge.css";
|
||||||
import MergeForm from "./merge_form";
|
import MergeForm from "./merge_form";
|
||||||
import MergeFooter from "./merge_footer";
|
import MergeFooter from "./merge_footer";
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import React, { Component } from "react";
|
import React, { Component } from "react";
|
||||||
import { Input, Select, Button, Spin, Empty } from "antd";
|
import { Input, Select, Button, Spin, Empty } from "antd";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import "../Order/order.css";
|
import "../Order/order.scss";
|
||||||
import "./merge.css";
|
import "./merge.css";
|
||||||
import MergeForm from "./merge_form";
|
import MergeForm from "./merge_form";
|
||||||
import MergeFooter from "./merge_footer";
|
import MergeFooter from "./merge_footer";
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import React, { Component } from "react";
|
import React, { Component } from "react";
|
||||||
import { Input, Dropdown, Menu, Icon, Pagination, Spin } from "antd";
|
import { Input, Dropdown, Menu, Icon, Pagination, Spin } from "antd";
|
||||||
import "./merge.css";
|
import "./merge.css";
|
||||||
import "../Order/order.css";
|
import "../Order/order.scss";
|
||||||
import "../Order/index.scss";
|
import "../Order/index.scss";
|
||||||
import NoneData from "./no_data";
|
import NoneData from "./no_data";
|
||||||
import MergeItem from "./MergeItem";
|
import MergeItem from "./MergeItem";
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { Tabs } from 'antd';
|
||||||
import Commits from './Commits';
|
import Commits from './Commits';
|
||||||
import Files from './Files';
|
import Files from './Files';
|
||||||
|
|
||||||
import '../Order/order.css';
|
import '../Order/order.scss';
|
||||||
import './merge.css';
|
import './merge.css';
|
||||||
|
|
||||||
const { TabPane } = Tabs;
|
const { TabPane } = Tabs;
|
||||||
|
|
|
@ -2,7 +2,7 @@ import React, { Component } from "react";
|
||||||
import { Button, Form, Menu, Input, Select, Tag, Checkbox, Spin } from "antd";
|
import { Button, Form, Menu, Input, Select, Tag, Checkbox, Spin } from "antd";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
|
|
||||||
import "../Order/order.css";
|
import "../Order/order.scss";
|
||||||
import "./merge.css";
|
import "./merge.css";
|
||||||
import MDEditor from "../../modules/tpm/challengesnew/tpm-md-editor";
|
import MDEditor from "../../modules/tpm/challengesnew/tpm-md-editor";
|
||||||
|
|
||||||
|
|
|
@ -1,28 +1,28 @@
|
||||||
.noticeMenu{
|
.noticeMenu {
|
||||||
padding:0px 30px;
|
padding: 0px 30px;
|
||||||
display: flex;
|
display: flex;
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid #eee;
|
||||||
li{
|
li {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
padding:0px;
|
padding: 0px;
|
||||||
margin-right:30px;
|
margin-right: 30px;
|
||||||
height: 70px;
|
height: 70px;
|
||||||
line-height: 70px;
|
line-height: 70px;
|
||||||
position: relative;
|
position: relative;
|
||||||
transform: none;
|
transform: none;
|
||||||
a{
|
a {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
&.active a span{
|
&.active a span {
|
||||||
color: #1890ff;
|
color: $primary-color;
|
||||||
}
|
}
|
||||||
.unNum{
|
.unNum {
|
||||||
color: #d38900;
|
color: #d38900;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
border-radius: 13px;
|
border-radius: 13px;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
line-height: 16px;
|
line-height: 16px;
|
||||||
padding:0px 4px;
|
padding: 0px 4px;
|
||||||
min-width: 23px;
|
min-width: 23px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background-color: #ffe4b3;
|
background-color: #ffe4b3;
|
||||||
|
@ -32,30 +32,31 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.notifyList{
|
.notifyList {
|
||||||
padding:0px 30px;
|
padding: 0px 30px;
|
||||||
li{
|
li {
|
||||||
display: flex;
|
display: flex;
|
||||||
border-bottom: 1px solid #eee;
|
border-bottom: 1px solid #eee;
|
||||||
padding:20px 0px;
|
padding: 20px 0px;
|
||||||
.notifyImg{
|
.notifyImg {
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
margin-right: 15px;
|
margin-right: 15px;
|
||||||
}
|
}
|
||||||
.notifyFlex{
|
.notifyFlex {
|
||||||
flex:1;
|
flex: 1;
|
||||||
p{
|
p {
|
||||||
margin:0px;
|
margin: 0px;
|
||||||
max-width: 660px;
|
max-width: 660px;
|
||||||
}
|
}
|
||||||
.notifyInfos{
|
.notifyInfos {
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&:last-child{
|
&:last-child {
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Modal } from 'antd';
|
import { Modal } from 'antd';
|
||||||
|
|
||||||
import './order.css';
|
import './order.scss';
|
||||||
function AmplifyImg(props) {
|
function AmplifyImg(props) {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -8,7 +8,7 @@ import Attachments from "../Upload/attachment";
|
||||||
import RenderHtml from "../../components/render-html";
|
import RenderHtml from "../../components/render-html";
|
||||||
import Comments from "../comments/comments";
|
import Comments from "../comments/comments";
|
||||||
import Claims from "../claims/claims"
|
import Claims from "../claims/claims"
|
||||||
import "./order.css";
|
import "./order.scss";
|
||||||
|
|
||||||
class Detail extends Component {
|
class Detail extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { Link } from 'react-router-dom';
|
||||||
import { Dropdown, Icon, Menu, Pagination, Typography, Popconfirm, Spin } from 'antd';
|
import { Dropdown, Icon, Menu, Pagination, Typography, Popconfirm, Spin } from 'antd';
|
||||||
import NoneData from '../Nodata';
|
import NoneData from '../Nodata';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import './order.css';
|
import './order.scss';
|
||||||
import CheckProfile from '../Component/ProfileModal/Profile';
|
import CheckProfile from '../Component/ProfileModal/Profile';
|
||||||
|
|
||||||
const { Text } = Typography;
|
const { Text } = Typography;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import React, { Component } from "react";
|
import React, { Component } from "react";
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { Dropdown, Menu, Icon, Pagination, Spin } from 'antd';
|
import { Dropdown, Menu, Icon, Pagination, Spin } from 'antd';
|
||||||
import './order.css';
|
import './order.scss';
|
||||||
import { FlexAJ } from '../Component/layout';
|
import { FlexAJ } from '../Component/layout';
|
||||||
import CheckProfile from '../Component/ProfileModal/Profile';
|
import CheckProfile from '../Component/ProfileModal/Profile';
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import React , { Component } from "react";
|
import React , { Component } from "react";
|
||||||
import { NavLink } from 'react-router-dom';
|
import { NavLink } from 'react-router-dom';
|
||||||
import './order.css'
|
import './order.scss'
|
||||||
class Nav extends Component{
|
class Nav extends Component{
|
||||||
|
|
||||||
render(){
|
render(){
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { Popconfirm } from 'antd'
|
import { Popconfirm,Tooltip } from 'antd'
|
||||||
import { TagInfo } from '../Utils/TagColor';
|
import { TagInfo } from '../Utils/TagColor';
|
||||||
class OrderItem extends Component {
|
class OrderItem extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
@ -84,7 +84,9 @@ class OrderItem extends Component {
|
||||||
}
|
}
|
||||||
</li>
|
</li>
|
||||||
<li>{item.tracker || "--"}</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>{item.issue_status || "--"}</li>
|
||||||
<li style={{color:`${item.done_ratio === "100%"?"#28BD6C":"#F73030"}`}}>{item.done_ratio || "--"}</li>
|
<li style={{color:`${item.done_ratio === "100%"?"#28BD6C":"#F73030"}`}}>{item.done_ratio || "--"}</li>
|
||||||
<li>
|
<li>
|
||||||
|
|
|
@ -2,7 +2,7 @@ import React, { Component } from 'react';
|
||||||
import { Calendar, Select, Radio, Col, Row, Divider, Input, Form, Spin } from 'antd';
|
import { Calendar, Select, Radio, Col, Row, Divider, Input, Form, Spin } from 'antd';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import '../Order/order.css';
|
import '../Order/order.scss';
|
||||||
|
|
||||||
|
|
||||||
const TextArea = Input.TextArea;
|
const TextArea = Input.TextArea;
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
content: '';
|
content: '';
|
||||||
left: 0px;
|
left: 0px;
|
||||||
bottom:0px;
|
bottom:0px;
|
||||||
background-color:#5091FF;
|
background-color:$primary-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.milepostleft{
|
.milepostleft{
|
||||||
|
|
|
@ -2,7 +2,7 @@ import React, { Component } from 'react';
|
||||||
import { Calendar, Select, Radio, Col, Row, Divider, Input, Form, Spin } from 'antd';
|
import { Calendar, Select, Radio, Col, Row, Divider, Input, Form, Spin } from 'antd';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import '../Order/order.css';
|
import '../Order/order.scss';
|
||||||
|
|
||||||
const TextArea = Input.TextArea;
|
const TextArea = Input.TextArea;
|
||||||
const { Group, Button } = Radio;
|
const { Group, Button } = Radio;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import React, { Component } from "react";
|
import React, { Component } from "react";
|
||||||
import { Input, Dropdown, Menu, Icon, Pagination, Spin, DatePicker, Checkbox } from "antd";
|
import { Input, Dropdown, Menu, Icon, Pagination, Spin, DatePicker, Checkbox } from "antd";
|
||||||
import "./order.css";
|
import "./order.scss";
|
||||||
import './index.scss';
|
import './index.scss';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
|
||||||
|
@ -116,11 +116,11 @@ class order extends Component {
|
||||||
};
|
};
|
||||||
|
|
||||||
// 获取列表数据
|
// 获取列表数据
|
||||||
getIssueList = (status_type, begin, end) => {
|
getIssueList = (status_type,) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
isSpin: true
|
isSpin: true
|
||||||
})
|
})
|
||||||
const { select_params } = this.state;
|
const { select_params ,begin,end} = this.state;
|
||||||
const { projectsId, owner } = this.props.match.params;
|
const { projectsId, owner } = this.props.match.params;
|
||||||
const url = `/${owner }/${projectsId}/issues.json`;
|
const url = `/${owner }/${projectsId}/issues.json`;
|
||||||
axios
|
axios
|
||||||
|
@ -282,13 +282,17 @@ class order extends Component {
|
||||||
// 翻页
|
// 翻页
|
||||||
ChangePage = (page) => {
|
ChangePage = (page) => {
|
||||||
window.scrollTo(0,0);
|
window.scrollTo(0,0);
|
||||||
const { status_type } = this.state;
|
const { status_type,select_params } = this.state;
|
||||||
this.setState({
|
this.setState({
|
||||||
isSpin: true,
|
isSpin: true,
|
||||||
checkedValue: [],
|
checkedValue: [],
|
||||||
all: false,
|
all: false,
|
||||||
|
select_params:{
|
||||||
|
...select_params,
|
||||||
|
page
|
||||||
|
}
|
||||||
},()=>{
|
},()=>{
|
||||||
this.state.select_params.page=page;
|
// this.state.select_params.page=page;
|
||||||
this.getIssueList(status_type);
|
this.getIssueList(status_type);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -432,18 +436,28 @@ class order extends Component {
|
||||||
|
|
||||||
// 修改开始时间
|
// 修改开始时间
|
||||||
changeBeginTime = (data, value) => {
|
changeBeginTime = (data, value) => {
|
||||||
const { status_type } = this.state;
|
const { status_type,select_params } = this.state;
|
||||||
this.setState({
|
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) => {
|
changeEndTime = (data, value) => {
|
||||||
const { status_type } = this.state;
|
const { status_type,select_params } = this.state;
|
||||||
this.setState({
|
this.setState({
|
||||||
end: value
|
end: value,
|
||||||
})
|
select_params:{
|
||||||
this.getIssueList(status_type, this.state.begin, value);
|
...select_params,
|
||||||
|
page:1
|
||||||
|
}
|
||||||
|
},()=>{
|
||||||
|
this.getIssueList(status_type, this.state.begin, value);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 选择列表里面的checkbox
|
// 选择列表里面的checkbox
|
||||||
|
|
|
@ -127,8 +127,8 @@
|
||||||
}
|
}
|
||||||
.topWrapper_btn {
|
.topWrapper_btn {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border: 1px solid #5091ff;
|
border: 1px solid $primary-color;
|
||||||
color: #5091ff !important;
|
color: $primary-color ;
|
||||||
padding: 0px 12px;
|
padding: 0px 12px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
height: 32px;
|
height: 32px;
|
||||||
|
@ -146,7 +146,7 @@
|
||||||
padding:0px 10px;
|
padding:0px 10px;
|
||||||
}
|
}
|
||||||
.topWrapper_type_infos li.active{
|
.topWrapper_type_infos li.active{
|
||||||
color: #4cacff
|
color: $primary-color
|
||||||
}
|
}
|
||||||
.topWrapper_type_infos li:last-child{
|
.topWrapper_type_infos li:last-child{
|
||||||
border-left: 1px solid #eee;
|
border-left: 1px solid #eee;
|
||||||
|
@ -173,7 +173,7 @@
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.topWrapper_type li > span.active {
|
.topWrapper_type li > span.active {
|
||||||
color: #4cacff;
|
color: $primary-color;
|
||||||
border: 1px solid rgba(80, 145, 255, 1);
|
border: 1px solid rgba(80, 145, 255, 1);
|
||||||
}
|
}
|
||||||
.topWrapper_select {
|
.topWrapper_select {
|
||||||
|
@ -348,11 +348,11 @@
|
||||||
padding-left: 80px;
|
padding-left: 80px;
|
||||||
margin-left: 80px;
|
margin-left: 80px;
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
border: 1px solid #4cacff;
|
border: 1px solid $primary-color;
|
||||||
}
|
}
|
||||||
.div_line {
|
.div_line {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border: 10px solid #4cacff;
|
border: 10px solid $primary-color;
|
||||||
}
|
}
|
||||||
.list_img {
|
.list_img {
|
||||||
height: 145px;
|
height: 145px;
|
||||||
|
@ -482,7 +482,7 @@
|
||||||
}
|
}
|
||||||
.loginDiv {
|
.loginDiv {
|
||||||
border: 1px solid #f7c977;
|
border: 1px solid #f7c977;
|
||||||
background: rgb(255, 204, 113, 0.3);
|
background: rgba(255, 204, 113, 0.3);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 8px 0px;
|
padding: 8px 0px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
@ -492,7 +492,7 @@
|
||||||
}
|
}
|
||||||
.loginDiv a {
|
.loginDiv a {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
color: #4cacff;
|
color: $primary-color;
|
||||||
margin-right: 3px;
|
margin-right: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -536,12 +536,12 @@
|
||||||
height: 32px !important;
|
height: 32px !important;
|
||||||
}
|
}
|
||||||
a.issue-type-button.active {
|
a.issue-type-button.active {
|
||||||
background: #4cacff;
|
background: $primary-color;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
a.issue-type-button.active:hover {
|
a.issue-type-button.active:hover {
|
||||||
background: #f4f4f4;
|
background: #f4f4f4;
|
||||||
color: #4cacff;
|
color: $primary-color;
|
||||||
}
|
}
|
||||||
@media screen and (max-width: 700px) {
|
@media screen and (max-width: 700px) {
|
||||||
.topWrapper_select li {
|
.topWrapper_select li {
|
|
@ -4,7 +4,7 @@ import Upload from "../Upload/Index";
|
||||||
import UploadImg from "../Images/upload.png";
|
import UploadImg from "../Images/upload.png";
|
||||||
import MDEditor from "../../modules/tpm/challengesnew/tpm-md-editor";
|
import MDEditor from "../../modules/tpm/challengesnew/tpm-md-editor";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import "./order.css";
|
import "./order.scss";
|
||||||
import Attachments from "../Upload/attachment";
|
import Attachments from "../Upload/attachment";
|
||||||
|
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
|
|
|
@ -12,7 +12,7 @@ import {
|
||||||
Button,
|
Button,
|
||||||
Table,
|
Table,
|
||||||
} from "antd";
|
} from "antd";
|
||||||
import "../Order/order.css";
|
import "../Order/order.scss";
|
||||||
import "./setting.scss";
|
import "./setting.scss";
|
||||||
import NoneData from "../Nodata";
|
import NoneData from "../Nodata";
|
||||||
import { SketchPicker } from "react-color";
|
import { SketchPicker } from "react-color";
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
height: 35px;
|
height: 35px;
|
||||||
line-height: 35px;
|
line-height: 35px;
|
||||||
color: #fff!important;
|
color: #fff!important;
|
||||||
background: #4CACFF;
|
background: $primary-color;
|
||||||
}
|
}
|
||||||
.small_submitBtn{
|
.small_submitBtn{
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -61,7 +61,7 @@
|
||||||
height: 32px;
|
height: 32px;
|
||||||
line-height: 32px;
|
line-height: 32px;
|
||||||
color: #fff!important;
|
color: #fff!important;
|
||||||
background: #4CACFF;
|
background: $primary-color;
|
||||||
}
|
}
|
||||||
.addPanel{
|
.addPanel{
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -146,7 +146,7 @@
|
||||||
.bbr{border-bottom: 1px solid #f6f6f6;}
|
.bbr{border-bottom: 1px solid #f6f6f6;}
|
||||||
.ant-input-group-addon{border: 0 !important;}
|
.ant-input-group-addon{border: 0 !important;}
|
||||||
.grid-item-left{display: grid; align-items: center; grid-template-columns: 1fr max-content;}
|
.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;}
|
.ant-dropdown-menu{min-width: 90px ; text-align: center !important;}
|
||||||
.text-green{color: #28BD6C !important;}
|
.text-green{color: #28BD6C !important;}
|
||||||
.text-yellow{color: #FF6E21 !important;}
|
.text-yellow{color: #FF6E21 !important;}
|
||||||
|
|
|
@ -19,7 +19,7 @@ export default (props) => {
|
||||||
|
|
||||||
let projectsId = match.params.projectsId;
|
let projectsId = match.params.projectsId;
|
||||||
let owner = match.params.owner;
|
let owner = match.params.owner;
|
||||||
|
let wikiName = match.params.wikiName;
|
||||||
const [fileArrInit, setFileArrInit] = useState(null);
|
const [fileArrInit, setFileArrInit] = useState(null);
|
||||||
const [checkItem, setCheckItem] = useState({});
|
const [checkItem, setCheckItem] = useState({});
|
||||||
const [itemDetail, setItemDetail] = useState({});
|
const [itemDetail, setItemDetail] = useState({});
|
||||||
|
@ -40,7 +40,12 @@ export default (props) => {
|
||||||
setFileArr(res.data);
|
setFileArr(res.data);
|
||||||
setFileArrInit(res.data);
|
setFileArrInit(res.data);
|
||||||
if (res.data.length) {
|
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 {
|
} else {
|
||||||
setFileArr([]);
|
setFileArr([]);
|
||||||
|
@ -191,6 +196,11 @@ export default (props) => {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function changeitem(item){
|
||||||
|
history.push(`/${owner}/${projectsId}/wiki/${item.name}`)
|
||||||
|
setCheckItem(item);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
< Spin spinning={!fileArrInit} className="opacitySpin">
|
< Spin spinning={!fileArrInit} className="opacitySpin">
|
||||||
{fileArrInit && fileArrInit.length ?
|
{fileArrInit && fileArrInit.length ?
|
||||||
|
@ -234,7 +244,7 @@ export default (props) => {
|
||||||
{
|
{
|
||||||
fileArr.map(item => {
|
fileArr.map(item => {
|
||||||
return <div className="wiki-nav-title-parent" key={item.name}>
|
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">
|
<div className="nav-title-left">
|
||||||
<i className="iconfont icon-wenjianjia2 mr3"></i>
|
<i className="iconfont icon-wenjianjia2 mr3"></i>
|
||||||
<span className="nav-title-left-text">{item.name}</span>
|
<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}`)} />}
|
{itemDetail.image_url && <img alt="头像" className="head-log-small" src={getImageUrl(`/${itemDetail.image_url}`)} />}
|
||||||
<span >{itemDetail.userName}</span>
|
<span >{itemDetail.userName}</span>
|
||||||
</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>
|
</div>
|
||||||
{permission && <Button type="primary" onClick={goEdit}>编辑</Button>}
|
{permission && <Button type="primary" onClick={goEdit}>编辑</Button>}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -6,7 +6,7 @@ import { getImageUrl } from "educoder";
|
||||||
import { List, Popconfirm, Pagination, Button } from "antd";
|
import { List, Popconfirm, Pagination, Button } from "antd";
|
||||||
import Attachments from "../Upload/attachment";
|
import Attachments from "../Upload/attachment";
|
||||||
import RenderHtml from "../../components/render-html";
|
import RenderHtml from "../../components/render-html";
|
||||||
import "../Order/order.css";
|
import "../Order/order.scss";
|
||||||
|
|
||||||
class children_comments extends Component {
|
class children_comments extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
|
|
@ -5,7 +5,7 @@ import { getImageUrl } from "educoder";
|
||||||
import { List, Popconfirm, Pagination, Button } from "antd";
|
import { List, Popconfirm, Pagination, Button } from "antd";
|
||||||
import Attachments from "../Upload/attachment";
|
import Attachments from "../Upload/attachment";
|
||||||
import RenderHtml from "../../components/render-html";
|
import RenderHtml from "../../components/render-html";
|
||||||
import "../Order/order.css";
|
import "../Order/order.scss";
|
||||||
|
|
||||||
class children_journals extends Component {
|
class children_journals extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
|
|
@ -10,7 +10,7 @@ import Attachments from "../Upload/attachment";
|
||||||
import MDEditor from "../../modules/tpm/challengesnew/tpm-md-editor";
|
import MDEditor from "../../modules/tpm/challengesnew/tpm-md-editor";
|
||||||
import RenderHtml from "../../components/render-html";
|
import RenderHtml from "../../components/render-html";
|
||||||
import ChildrenComments from "./children_comments";
|
import ChildrenComments from "./children_comments";
|
||||||
import "../Order/order.css";
|
import "../Order/order.scss";
|
||||||
const { TabPane } = Tabs;
|
const { TabPane } = Tabs;
|
||||||
class comments extends Component {
|
class comments extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
|
|
@ -225,7 +225,8 @@ form{
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
border-radius:2px;
|
border-radius:2px;
|
||||||
background-color: #fff;
|
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{
|
&>li{
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
padding:0px 0px 0px 20px;
|
padding:0px 0px 0px 20px;
|
||||||
|
@ -244,6 +245,7 @@ form{
|
||||||
margin:0px;
|
margin:0px;
|
||||||
a{
|
a{
|
||||||
width:100%;
|
width:100%;
|
||||||
|
color: #202d40;
|
||||||
}
|
}
|
||||||
& span:last-child{
|
& span:last-child{
|
||||||
color: #999;
|
color: #999;
|
||||||
|
@ -253,11 +255,11 @@ form{
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
&:not(.MenuTitle):hover{
|
&:not(.MenuTitle):hover{
|
||||||
background-color: #fafafa;
|
background-color:rgba(70, 106, 255, 0.06);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
& li.active{
|
& li.active{
|
||||||
background-color: #fafafa;
|
background-color:rgba(70, 106, 255, 0.06);
|
||||||
}
|
}
|
||||||
& li.active::before{
|
& li.active::before{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -266,7 +268,8 @@ form{
|
||||||
width: 6px;
|
width: 6px;
|
||||||
content: '';
|
content: '';
|
||||||
height: 33px;
|
height: 33px;
|
||||||
background: #4CACFF;
|
// background: #4CACFF;
|
||||||
|
background: $primary-color;
|
||||||
}
|
}
|
||||||
.MenuTitle{
|
.MenuTitle{
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
|
@ -295,8 +298,8 @@ form{
|
||||||
border-color: #D0D0D0;
|
border-color: #D0D0D0;
|
||||||
}
|
}
|
||||||
.ant-btn.ant-btn-background-ghost.ant-btn-primary:hover{
|
.ant-btn.ant-btn-background-ghost.ant-btn-primary:hover{
|
||||||
background-color: #1890ff!important;
|
background-color:$primary-color!important;
|
||||||
border-color: #1890ff;
|
border-color: $primary-color;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
.ant-btn.ant-btn-background-ghost.ant-btn-danger:hover{
|
.ant-btn.ant-btn-background-ghost.ant-btn-danger:hover{
|
||||||
|
|
|
@ -18,7 +18,11 @@
|
||||||
}
|
}
|
||||||
.name{
|
.name{
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: #4CACFF;
|
// color: #4CACFF;
|
||||||
|
color: $primary-color;
|
||||||
|
&:hover{
|
||||||
|
color: $primary-color-hover;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.desc{
|
.desc{
|
||||||
color: #999;
|
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;
|
$flex:flex;
|
||||||
|
$primary-color:#466aff;
|
||||||
.headerbox{
|
.headerbox{
|
||||||
padding:20px;
|
padding:20px;
|
||||||
border-bottom: 1px solid #E0E0E0;
|
border-bottom: 1px solid #E0E0E0;
|
||||||
|
@ -13,7 +14,7 @@ $flex:flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
& > p a{
|
& > p a{
|
||||||
color: #5091FF;
|
color: $primary-color;
|
||||||
margin-left: 30px;
|
margin-left: 30px;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
display: $flex;
|
display: $flex;
|
||||||
|
@ -88,7 +89,7 @@ $flex:flex;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
& > span.active{
|
& > span.active{
|
||||||
background-color:#5091FF ;
|
background-color:$primary-color ;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
padding:0px 15px;
|
padding:0px 15px;
|
||||||
}
|
}
|
||||||
|
@ -306,7 +307,7 @@ ul.ant-menu.menuStyle{
|
||||||
bottom: -1px;
|
bottom: -1px;
|
||||||
height: 2px;
|
height: 2px;
|
||||||
left: 0px;
|
left: 0px;
|
||||||
background-color: #1890ff;
|
background-color: $primary-color;
|
||||||
content:"";
|
content:"";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,12 +7,13 @@
|
||||||
color: #d0d0d0;
|
color: #d0d0d0;
|
||||||
}
|
}
|
||||||
.ant-btn.ant-btn-primary.ant-btn-background-ghost {
|
.ant-btn.ant-btn-primary.ant-btn-background-ghost {
|
||||||
border-color: #1890ff;
|
border-color: $primary-color;
|
||||||
color: #1890ff;
|
color: $primary-color;
|
||||||
margin-left: 20px;
|
margin-left: 20px;
|
||||||
&:hover{
|
&:hover{
|
||||||
background-color: #fff!important;
|
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 [taskId, setTaskId] = useState();
|
||||||
const [havePass, setHavePass] = useState(false);
|
const [havePass, setHavePass] = useState(false);
|
||||||
|
|
||||||
|
const disabledCheck = new Date().getTime() > new Date('2022-07-01').getTime();
|
||||||
|
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
title: '学生姓名',
|
title: '学生姓名',
|
||||||
|
@ -128,8 +130,8 @@ function Check({ current_user, showNotification, history }) {
|
||||||
return (
|
return (
|
||||||
<div className='actionBox'>
|
<div className='actionBox'>
|
||||||
{
|
{
|
||||||
text ? <Button type="default" onClick={() => { checkStudent(record.id, 0) }}>撤销</Button> :
|
text ? <Button disabled={disabledCheck} type="default" onClick={() => { checkStudent(record.id, 0) }}>撤销</Button> :
|
||||||
<Button type="primary" disabled={havePass} onClick={() => { checkStudent(record.id, 1) }}>通过</Button>
|
<Button disabled={disabledCheck} type="primary" disabled={havePass} onClick={() => { checkStudent(record.id, 1) }}>通过</Button>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|
|
@ -16,7 +16,7 @@ function Contact() {
|
||||||
<h4 className="contact-invite">期待你的加入,和我们一起推动开源繁荣发展!</h4>
|
<h4 className="contact-invite">期待你的加入,和我们一起推动开源繁荣发展!</h4>
|
||||||
<div className="contact-way">
|
<div className="contact-way">
|
||||||
<p>交流QQ群: 210174286</p>
|
<p>交流QQ群: 210174286</p>
|
||||||
<p>合作推广: gitlink@ccf.org.cn</p>
|
<p>合作推广: glcc@ccf.org.cn</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className='attention'>
|
<div className='attention'>
|
||||||
|
|
|
@ -107,7 +107,7 @@ export default (props) => {
|
||||||
<div className="openMMlabBox">
|
<div className="openMMlabBox">
|
||||||
<div className="logoTitle">
|
<div className="logoTitle">
|
||||||
<img src={logo} alt="" className="logo"/>
|
<img src={logo} alt="" className="logo"/>
|
||||||
<span className="title">活动特邀合作单位 openMMlab</span>
|
<span className="title">活动特邀合作单位 OpenMMLab</span>
|
||||||
<div></div>
|
<div></div>
|
||||||
<div></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;
|
background-color: #2c374e;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
.ant-tabs-bar {
|
.ant-tabs-bar {
|
||||||
|
|
|
@ -14,12 +14,12 @@ const arithmeticArr = [
|
||||||
name: "MMPose算法演示",
|
name: "MMPose算法演示",
|
||||||
describe: "MMPose 是 OpenMMLab 中的姿态估计算法库,目前已经支持了近 30 个算法和 300+ 预训练模型,涵盖了人体、人脸、人手、动物等多类目标的姿态估计。秉承 OpenMMLab 系列的结构化框架设计,MMPose 很适合作为算法复现和创新的平台",
|
describe: "MMPose 是 OpenMMLab 中的姿态估计算法库,目前已经支持了近 30 个算法和 300+ 预训练模型,涵盖了人体、人脸、人手、动物等多类目标的姿态估计。秉承 OpenMMLab 系列的结构化框架设计,MMPose 很适合作为算法复现和创新的平台",
|
||||||
// source: 'https://www.gitlink.org.cn/preview/d2d62f65d08a22bcc257c5a24cf750fa_1654781749389.mp4',
|
// 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',
|
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 系列框架的整体流程,并积累深度学习相关的学术及工程经验",
|
describe: "MMOCR 作为 OpenMMLab 家族的一员,支持众多 OCR 相关的模型,涵盖了文本检测、文本识别以及关键信息提取等多个主要方向。通过在 MMOCR 中复现相关算法,你将可以了解到 OCR 领域的前沿知识,熟练掌握 MM 系列框架的整体流程,并积累深度学习相关的学术及工程经验",
|
||||||
source: 'https://www.gitlink.org.cn/api/attachments/388005',
|
source: 'https://www.gitlink.org.cn/api/attachments/388005',
|
||||||
type: 'img',
|
type: 'img',
|
||||||
|
@ -51,7 +51,7 @@ const arithmeticArr = [
|
||||||
{
|
{
|
||||||
name: "MMFlow算法演示",
|
name: "MMFlow算法演示",
|
||||||
describe: "MMFlow是一款基于 PyTorch 和 MMCV 的光流估计开源工具箱,提供了多个 SOTA 光流估计算法,并支持光流领域主流学术数据集,以及光流可视化和评估方法",
|
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',
|
type: 'img',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,7 +25,7 @@ function SliderLeft({list,history}) {
|
||||||
// pathname:'/glcc/projects',
|
// pathname:'/glcc/projects',
|
||||||
// state:{projectName:projectName.replace(/ /g,'-')}
|
// state:{projectName:projectName.replace(/ /g,'-')}
|
||||||
// })
|
// })
|
||||||
window.open(`/glcc/projects?projectName=${projectName}`);
|
window.open(`/glcc/projects?projectName=${projectName.replace(/ /g,'')}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -39,6 +39,12 @@ function Project(propsF) {
|
||||||
</div>
|
</div>
|
||||||
<Spin spinning={false}>
|
<Spin spinning={false}>
|
||||||
<Switch {...propsF}>
|
<Switch {...propsF}>
|
||||||
|
<Route
|
||||||
|
path="/glcc/projects/:gitlinkLastUrl"
|
||||||
|
render={(props) => (
|
||||||
|
<ProjectList {...propsF} {...props}/>
|
||||||
|
)}
|
||||||
|
></Route>
|
||||||
<Route
|
<Route
|
||||||
path="/glcc/projects"
|
path="/glcc/projects"
|
||||||
render={(props) => (
|
render={(props) => (
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
.listBox{
|
.listBox{
|
||||||
background-image:linear-gradient(180deg,#ebf2ff 0%,#ebf2ff 43.09%,#f3f4f8 100%);
|
background-image:linear-gradient(180deg,#ebf2ff 0%,#ebf2ff 43.09%,#f3f4f8 100%);
|
||||||
position: relative;
|
position: relative;
|
||||||
|
// min-height: 1200px;
|
||||||
.list{
|
.list{
|
||||||
width: 1200px;
|
width: 1200px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
|
@ -193,8 +194,9 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.projectItemPopover{
|
.ant-popover.projectItemPopover{
|
||||||
width: 1200px;
|
width: 1200px;
|
||||||
|
z-index: 1000;
|
||||||
.ant-popover-content .ant-popover-arrow{
|
.ant-popover-content .ant-popover-arrow{
|
||||||
border-width: 12px;
|
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 { Input, Popover, Spin } from 'antd';
|
||||||
import { main_site_url } from '../../fetch';
|
import { main_site_url } from '../../fetch';
|
||||||
import './index.scss';
|
import './index.scss';
|
||||||
|
@ -6,48 +6,98 @@ import { projectList } from '../../api';
|
||||||
import ProjectDetail from '../component/projectDetail';
|
import ProjectDetail from '../component/projectDetail';
|
||||||
import bgPng from "../../img/bgPng.png";
|
import bgPng from "../../img/bgPng.png";
|
||||||
import logo from "../../img/logo.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}) {
|
function ProjectList({ applyTaskId, current_user, showLoginDialog, isStudentApplyDate, studentApplyEnd, location, history, match }) {
|
||||||
let openmmlab =location.search&&location.search.split('=')[1];
|
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 [data, setData] = useState([]);
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(() => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
const params = {
|
const params = {
|
||||||
curPage: 1,
|
curPage: 1,
|
||||||
keyword,
|
keyword,
|
||||||
pageSize: 10000
|
pageSize: 10000
|
||||||
}
|
}
|
||||||
projectList(params).then(response=>{
|
projectList(params).then(response => {
|
||||||
if(response && response.message === "success"){
|
if (response && response.message === "success") {
|
||||||
setData(response.data.rows);
|
let dataArr = response.data.rows;
|
||||||
openmmlab&&setTimeout(()=>{
|
dataArr.forEach(i => {
|
||||||
let openProject=document.querySelector(`.${openmmlab}`);
|
let urlArr = i.gitlinkUrl.split('/');
|
||||||
openProject.click();
|
i.gitlinkLastUrl = urlArr.pop() || urlArr.pop();
|
||||||
let height=document.documentElement.clientWidth/1920*500+71+70+100+openProject.offsetTop;
|
i.gitlinkLastUrl = i.gitlinkLastUrl.replace(/\./g, '');
|
||||||
window.scrollTo(0, height);
|
});
|
||||||
},100)
|
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);
|
setLoading(false);
|
||||||
})
|
})
|
||||||
},[keyword])
|
}, [keyword])
|
||||||
|
|
||||||
return(
|
function changeVisible(visible, item) {
|
||||||
<div className="taskList listBox">
|
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="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}>
|
<Spin spinning={loading}>
|
||||||
<div className='projectListBox'>
|
<div className='projectListBox'>
|
||||||
{data && data.map((item, index)=>{
|
{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}>
|
return <Popover
|
||||||
<div className={`projectItem ${(index+1)%3 === 0 || (index+1)%3%2 === 0 ? '' : 'firstBox'} ${item.projectName.replace(/ /g,'-')}`}>
|
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="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="title">{item.projectName}</div>
|
||||||
<div className="intro">{item.projectIntro}</div>
|
<div className="intro">{item.projectIntro}</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -56,8 +106,8 @@ function ProjectList({applyTaskId, current_user, showLoginDialog, isStudentApply
|
||||||
</div>
|
</div>
|
||||||
</Spin>
|
</Spin>
|
||||||
</div>
|
</div>
|
||||||
<img src={bgPng} alt='' className='bgPng3'/>
|
<img src={bgPng} alt='' className='bgPng3' />
|
||||||
<img src={bgPng} alt='' className='bgPng4'/>
|
<img src={bgPng} alt='' className='bgPng4' />
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
// justify-content: space-between;
|
// justify-content: space-between;
|
||||||
.projectItem{
|
.projectItem{
|
||||||
|
position: relative;
|
||||||
width: 30%;
|
width: 30%;
|
||||||
background-image: linear-gradient(180deg,rgba(232, 237, 255, 0.85) 0%,rgba(255, 255, 255, 0.85) 100%);
|
background-image: linear-gradient(180deg,rgba(232, 237, 255, 0.85) 0%,rgba(255, 255, 255, 0.85) 100%);
|
||||||
border: 1px solid;
|
border: 1px solid;
|
||||||
|
@ -28,7 +29,16 @@
|
||||||
background-color:#657edf;
|
background-color:#657edf;
|
||||||
border-radius:2px 2px 0px 0px;
|
border-radius:2px 2px 0px 0px;
|
||||||
}
|
}
|
||||||
|
.projectLogoStar{
|
||||||
|
position: absolute;
|
||||||
|
top:30px;
|
||||||
|
right: 130px;
|
||||||
|
width: 28px;
|
||||||
|
z-index: 10;
|
||||||
|
transform: rotate(46deg);
|
||||||
|
}
|
||||||
.projectLogo{
|
.projectLogo{
|
||||||
|
position: relative;
|
||||||
width: 100px;
|
width: 100px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
|
@ -38,11 +48,12 @@
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
margin: 25px auto 10px;
|
margin: 25px auto 10px;
|
||||||
line-height: 95px;
|
line-height: 95px;
|
||||||
img{
|
.projectLogoImg{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
// height: 100%;
|
// height: 100%;
|
||||||
// display: block;
|
// display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
.title{
|
.title{
|
||||||
color:#2a51bf;
|
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%;
|
width: 100%;
|
||||||
height:58px;
|
height:58px;
|
||||||
min-width: 1200px;
|
min-width: 1200px;
|
||||||
z-index: 1000;
|
z-index: 1001;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
background: #1B2440;
|
background: #1B2440;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
|
Loading…
Reference in New Issue