培训答疑+赛题更新
|
|
@ -37,15 +37,14 @@ export const Competitions = {
|
|||
},{
|
||||
path: '/competitions/2026/organization',
|
||||
component: '@/pages/2026/organization',
|
||||
},
|
||||
// {
|
||||
// path: '/competitions/2026/track/:id',
|
||||
// component: '@/pages/2026/track',
|
||||
// },
|
||||
{
|
||||
path: '/competitions/2026/information',
|
||||
component: '@/pages/2026/information',
|
||||
}
|
||||
},{
|
||||
path: '/competitions/2026/train',
|
||||
component: '@/pages/2026/train',
|
||||
},
|
||||
{
|
||||
path: '/competitions/2026/information',
|
||||
component: '@/pages/2026/information',
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -18,6 +18,9 @@
|
|||
z-index: 999;
|
||||
width: 100%;
|
||||
|
||||
& + section {
|
||||
padding-top: 60px;
|
||||
}
|
||||
}
|
||||
|
||||
.menu {
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@
|
|||
position: relative;
|
||||
font-size: 15px;
|
||||
width: 100%;
|
||||
margin-top: -60px;
|
||||
// height: 100vh;
|
||||
// background-image: url(../img/mainbanner.png);
|
||||
// background-size: cover;
|
||||
|
|
|
|||
|
|
@ -126,12 +126,15 @@ function Center(props) {
|
|||
<div key={index} className={ styles.task_card } onClick={() => { window.open(item.url)}}>
|
||||
<div className={ styles.task_name }>{item.name}</div>
|
||||
<div className={ styles.task_info }>
|
||||
<span className={`${styles.task_level} ${styles[`level_${item.level}`]}`}>
|
||||
{item.level === 1 && '初级'}
|
||||
{item.level === 2 && '中级'}
|
||||
{item.level === 3 && '高级'}
|
||||
</span>
|
||||
<div></div>
|
||||
{
|
||||
item.level &&
|
||||
<span className={`${styles.task_level} ${styles[`level_${item.level}`]}`}>
|
||||
{item.level === 1 && '初级'}
|
||||
{item.level === 2 && '中级'}
|
||||
{item.level === 3 && '高级'}
|
||||
</span>
|
||||
}
|
||||
{ item.level &&<div></div> }
|
||||
<span className={ styles.task_owner }>{item.owner}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -49,6 +49,14 @@ export const directions = [
|
|||
owner: '阿里云计算有限公司',
|
||||
url: 'https://www.gitlink.org.cn/competitions/track2_2026Mooncake'
|
||||
}
|
||||
],
|
||||
'开源案例教学赛道': [
|
||||
{
|
||||
name: '开源案例教学赛',
|
||||
level: 2,
|
||||
owner: '头歌',
|
||||
url: 'https://www.gitlink.org.cn/competitions/track32026'
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
text-transform: uppercase;
|
||||
font-weight: 500;
|
||||
margin-bottom: 0;
|
||||
padding-top: 90px;
|
||||
img{
|
||||
margin-top: -4px;
|
||||
&:first-child{
|
||||
|
|
|
|||
|
|
@ -214,7 +214,7 @@ function Home(){
|
|||
<li className='dir-smaill-card'>
|
||||
<img src={trackBack3} alt="" className='backimg'/>
|
||||
<p className='tracktitle'><span>开源案例教学赛道</span></p>
|
||||
<p className='trackdesc'>提炼优秀开源项目实践经验,甄选优质开源实战案例,打造可复用的技术教学案例库。</p>
|
||||
<p className='trackdesc'>汇聚AI赋能教育的创新实践,构建开放共享、协同共建的智慧教育生态社区。</p>
|
||||
</li>
|
||||
<li className='dir-smaill-card'>
|
||||
<img src={trackBack4} alt="" className='backimg'/>
|
||||
|
|
|
|||
|
|
@ -279,13 +279,13 @@
|
|||
background-size: 100% 100%;
|
||||
margin-top: 40px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding:59px 40px 59px 30px;
|
||||
.timelineItem{
|
||||
text-align: left;
|
||||
height: 100%;
|
||||
flex:1;
|
||||
font-size:16px;
|
||||
margin-right: 67px;
|
||||
color:#091221;
|
||||
&:last-child{
|
||||
margin-right: 0;
|
||||
|
|
@ -324,6 +324,7 @@
|
|||
line-height:32px;
|
||||
font-family: alibabaPuhuiR;
|
||||
margin-bottom: auto;
|
||||
max-width: 260px;
|
||||
}
|
||||
.l_btn{
|
||||
height:50px;
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 550 B |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 856 KiB |
|
After Width: | Height: | Size: 644 KiB |
|
After Width: | Height: | Size: 2.6 MiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 571 KiB |
|
After Width: | Height: | Size: 718 B |
|
|
@ -22,7 +22,7 @@ export const menu = [
|
|||
},
|
||||
// {
|
||||
// name: '培训答疑',
|
||||
// link: '/competitions/2026/information',
|
||||
// link: '/competitions/2026/train',
|
||||
// }
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -271,8 +271,8 @@ console.log(information,dirList);
|
|||
return e.anchor === "notice" && <div className="content part" key={ e.anchor }>
|
||||
<div className="content-wrapper">
|
||||
{
|
||||
informationList[e.anchor].map(( e, k ) => {
|
||||
return <div className="content-item" key={ k }>
|
||||
informationList["notice"].map(( e, k ) => {
|
||||
return <div className="content-item" key={ k } style={{borderBottom:k===informationList["notice"].length-1 || (k===informationList["notice"].length-2 && k%2 === 0) ?"none":"1px dashed rgba(9, 18, 33, 0.15)"}}>
|
||||
<div className="item-right">
|
||||
<Link to={ `/competitions/2026/information/${ e.id }` } className="item-title task-hide">{ e.name }</Link>
|
||||
<p className="item-desc task-hide">{ e.summary }</p>
|
||||
|
|
@ -319,30 +319,6 @@ console.log(information,dirList);
|
|||
}
|
||||
</div>:""
|
||||
}
|
||||
{/* <Spin spinning={isSpin}>
|
||||
{
|
||||
information.category.map((e) => {
|
||||
return <div className="content part" key={ e.anchor }>
|
||||
<p className="homeSubtitle"><img src={Left} width={16}/>{e.eng.toUpperCase()}<img src={Right} width={36}/></p>
|
||||
<p className='homeMaintitle title-animate'><span>{ e.title }</span></p>
|
||||
<div className="content-wrapper">
|
||||
{
|
||||
informationList[e.anchor] && informationList[e.anchor].length > 0 ? informationList[e.anchor].map(( e, k ) => {
|
||||
return <div className="content-item" key={ k }>
|
||||
<div className="item-right">
|
||||
<Link to={ `/competitions/2026/information/${ e.id }` } className="item-title task-hide">{ e.name }</Link>
|
||||
<p className="item-desc task-hide">{ e.summary }</p>
|
||||
<a href={ `/competitions/2026/information/${ e.id }` } className="read-more">阅读全文 <span>→</span></a>
|
||||
</div>
|
||||
</div>
|
||||
}):
|
||||
""
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
})
|
||||
}
|
||||
</Spin> */}
|
||||
</div>
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -504,7 +504,7 @@
|
|||
padding-left: 40px;
|
||||
padding-right: 0px;
|
||||
}
|
||||
&:last-child,&:nth-last-child(2){
|
||||
&:last-child{//,&:nth-last-child(2)
|
||||
border-bottom: none;
|
||||
}
|
||||
.item-left {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
.ant-collapse-item{
|
||||
margin-bottom: 30px;
|
||||
background: rgb(255, 255, 255);
|
||||
border-radius: 2px;
|
||||
border-radius: 13px;
|
||||
border: none;
|
||||
&.ant-collapse-item-active{
|
||||
background-image: url(../img/orzitem.png);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,81 @@
|
|||
import React from 'react';
|
||||
import "../home/index.less";
|
||||
import styles from "./index.less";
|
||||
import Left from '../img/left.png';
|
||||
import Right from '../img/right.png';
|
||||
import Addr from '../img/train/addr.png';
|
||||
import Xing from '../img/train/trainxing.png';
|
||||
import { Carousel } from 'antd';
|
||||
function TrainAnswer(){
|
||||
return(
|
||||
<div className={styles.trainPage}>
|
||||
<div className={styles.trainFirstBox}>
|
||||
<div className={`part ${styles.trainFirst}`}>
|
||||
<div>
|
||||
<p className={styles.xing}><span><img src={Xing} width={15} className={styles.shine}/>NEW</span>第八届CCF开源创新大赛官方培训</p>
|
||||
<div className={styles.xingTitle}>
|
||||
独家赛题解读<br/>高手带你<span>玩转开源</span>
|
||||
</div>
|
||||
<p className='font17 mt20'style={{textAlign:"left"}}>开源大赛官方培训即将开启,助你冲刺奖项</p>
|
||||
</div>
|
||||
<div className={styles.trainRight}>
|
||||
<div className={styles.vedioBox}>
|
||||
<div className={styles.vedioWords}>
|
||||
<p className={styles.vedioName}>开源大赛一期!冠军导师培训预告</p>
|
||||
<div className={styles.vedioTime}><img src={Xing} width={20} className={`mr10 ${styles.shine}`}/>2026年3月13日 17:00:00<img src={Xing} width={20} className={`ml10 ${styles.shine} ${styles.delay1}`}/></div>
|
||||
<p className={styles.vedioAddr}>直播地址:https://cloud.baidu.com/?track=d2b70a5c</p>
|
||||
<a className={styles.vedioBtn} href=""><img src={Addr} width={17} className='mr5'/>复制链接观看</a>
|
||||
</div>
|
||||
<div>
|
||||
{/* 这里显示vedio */}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className={styles.ewmBox}>
|
||||
<p className="homeSubtitle"><img src={Left} width={16}/>community exchange<img src={Right} width={36}/></p>
|
||||
<p className='homeMaintitle title-animate'><span>交流社群</span></p>
|
||||
<div className={`part ${styles.ewmContent}`}>
|
||||
<div className={styles.ewms}>
|
||||
<Carousel autoplay className={styles.carouselBox} style={{width:"605px"}}>
|
||||
<div>
|
||||
<ul className={styles.ewmList}>
|
||||
<li>
|
||||
<div className={styles.ewmImg}><img src={Xing} alt="" /></div>
|
||||
<span>XXXXQQ交流群</span>
|
||||
</li>
|
||||
<li>
|
||||
<div className={styles.ewmImg}><img src={Xing} alt="" /></div>
|
||||
<span>XXXXQQ交流群</span>
|
||||
</li>
|
||||
<li>
|
||||
<div className={styles.ewmImg}><img src={Xing} alt="" /></div>
|
||||
<span>XXXXQQ交流群</span>
|
||||
</li>
|
||||
<li>
|
||||
<div className={styles.ewmImg}><img src={Xing} alt="" /></div>
|
||||
<span>XXXXQQ交流群</span>
|
||||
</li>
|
||||
<li>
|
||||
<div className={styles.ewmImg}><img src={Xing} alt="" /></div>
|
||||
<span>XXXXQQ交流群</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</Carousel>
|
||||
</div>
|
||||
<div>
|
||||
<p className={styles.ewmTitle}><span>扫码进群</span><br/>一起hack开源未来</p>
|
||||
<p className={styles.ewmDesc}>与万千开发者实时交流技术心得,碰撞创新灵感,分享开发工具与最佳<br/>实践,组队参赛、资源对接、导师答疑一站式解决</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p className="homeSubtitle"><img src={Left} width={16}/>High-frequency FAQs<img src={Right} width={36}/></p>
|
||||
<p className='homeMaintitle title-animate'><span>高频FAQ</span></p>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
export default TrainAnswer;
|
||||
|
|
@ -0,0 +1,204 @@
|
|||
.trainPage{
|
||||
font-family:alibabaPuhuiM;
|
||||
img.shine{
|
||||
animation: shine 2s infinite;
|
||||
}img.shine.delay1{
|
||||
animation: shine 2s infinite;
|
||||
animation-delay: 0.3s
|
||||
}
|
||||
|
||||
|
||||
// 第二个模块,二维码
|
||||
.ewmBox{
|
||||
background-image:url(../img/train/ewmBack.png) ;
|
||||
background-size: 100% 100%;
|
||||
padding-bottom: 58px;
|
||||
.ewmContent{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 25px;
|
||||
.carouselBox{
|
||||
.slick-dots{
|
||||
bottom: -15px!important;;
|
||||
}
|
||||
}
|
||||
.ewms{
|
||||
padding:30px 30px 46px 30px;
|
||||
background:rgba(255, 255, 255, 0.15);
|
||||
border-radius:28px;
|
||||
width: 50%;
|
||||
min-width: 939px;
|
||||
margin-right: 123px;
|
||||
.ewmList{
|
||||
background-image: url(../img/train/ewmList.png);
|
||||
background-size: 100% 100%;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
border-radius: 16px;
|
||||
padding:27px;
|
||||
li{
|
||||
box-sizing: border-box;
|
||||
margin:18px 30px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
.ewmImg{
|
||||
background:rgba(255, 255, 255, 0.6);
|
||||
border-radius:16px;
|
||||
padding:6px;
|
||||
width: max-content;
|
||||
height: max-content;
|
||||
img{
|
||||
height: 128px;
|
||||
width: 128px;
|
||||
transform: scale(0.7);
|
||||
transition: 0.6s;
|
||||
&:hover{
|
||||
transform: unset;
|
||||
}
|
||||
}
|
||||
}
|
||||
span{
|
||||
color:#091221;
|
||||
font-size:15px;
|
||||
height: 21px;
|
||||
line-height: 21px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.ewmTitle{
|
||||
color:#091221;
|
||||
font-size:50px;
|
||||
text-align: left;
|
||||
span{
|
||||
position: relative;
|
||||
&::after{
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 120%;
|
||||
width:85px;
|
||||
height:14px;
|
||||
background:#0d2097;
|
||||
top: 27px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.ewmDesc{
|
||||
text-align: left;
|
||||
color:#091221;
|
||||
font-size:15px;
|
||||
line-height:30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 第一个模块
|
||||
.trainFirstBox{
|
||||
background-image:url(../img/train/trainBanner1.png) ;
|
||||
background-size: 100% 100%;
|
||||
padding:86px 0px 65px;
|
||||
.trainFirst{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.xing{
|
||||
height:30px;
|
||||
line-height:30px;
|
||||
background:linear-gradient(90.7deg,#e6eaf9 3.67%,#e6eaf9 95.11%);
|
||||
border-radius:17px;
|
||||
padding:0px 13px 0px 17px;
|
||||
width: max-content;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
span{
|
||||
margin-right: 6px;
|
||||
background-image: linear-gradient(313.07deg, #27d1ff, #352eff 46.85%, #091221);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
.xingTitle{
|
||||
font-family: DingTalk JinBuTi;
|
||||
color:#091221;
|
||||
font-size:54px;
|
||||
line-height:80px;
|
||||
text-align: left;
|
||||
span:last-child{
|
||||
background:linear-gradient(90deg,#4856ff 2.18%,#de8b29 52.06%,#fa5ea0 96.81%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
.trainRight{
|
||||
background:rgba(255, 255, 255, 0.25);
|
||||
border:1px solid #ffffff;
|
||||
border-radius:26px;
|
||||
padding:15px 18px;
|
||||
width: 40%;
|
||||
margin: 0 auto;
|
||||
.vedioBox{
|
||||
background-image: url(../img/train/trainvedioBack.png);
|
||||
background-size: 100% 100%;
|
||||
min-height: 329px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
.vedioWords{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
color: #fff;
|
||||
.vedioName{
|
||||
font-family:DingTalk JinBuTi;
|
||||
font-size:34px;
|
||||
margin-bottom: 0px!important;
|
||||
}
|
||||
.vedioTime{
|
||||
position: relative;
|
||||
font-size:20px;
|
||||
height:54px;
|
||||
line-height:54px;
|
||||
margin-top:30px;
|
||||
background:linear-gradient(90.45deg,rgba(172, 128, 255, 0) 0.06%,rgba(199, 201, 255, 0.31) 49.26%,rgba(105, 131, 255, 0) 99.93%);
|
||||
&::after{
|
||||
content: "";
|
||||
top: 0px;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background-image: url(../img/train/trainWhite.png);
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
}
|
||||
.vedioAddr{
|
||||
font-size:15px;
|
||||
margin-top:28px;
|
||||
}
|
||||
.vedioBtn{
|
||||
height:52px;
|
||||
line-height:54px;
|
||||
padding:0 27px;
|
||||
font-size:16px;
|
||||
background:linear-gradient(180deg,#4638eb 0%,#ffba69 100%);
|
||||
border-radius:26px;
|
||||
margin-top: 15px;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@keyframes shine {
|
||||
0%{opacity: 0;}
|
||||
80%{opacity: 1;}
|
||||
100%{opacity: 0;}
|
||||
}
|
||||