培训答疑+赛题更新

This commit is contained in:
caishi 2026-03-23 17:34:48 +08:00
parent 173f67a674
commit 7a0f5cc96f
22 changed files with 323 additions and 46 deletions

View File

@ -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',
}
]
},
{

View File

@ -18,6 +18,9 @@
z-index: 999;
width: 100%;
& + section {
padding-top: 60px;
}
}
.menu {

View File

@ -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;

View File

@ -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>

View File

@ -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'
}
]
}
},

View File

@ -13,6 +13,7 @@
text-transform: uppercase;
font-weight: 500;
margin-bottom: 0;
padding-top: 90px;
img{
margin-top: -4px;
&:first-child{

View File

@ -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'/>

View File

@ -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;

Binary file not shown.

After

Width:  |  Height:  |  Size: 550 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 718 B

View File

@ -22,7 +22,7 @@ export const menu = [
},
// {
// name: '培训答疑',
// link: '/competitions/2026/information',
// link: '/competitions/2026/train',
// }
]

View File

@ -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>
}

View File

@ -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 {

View File

@ -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);

View File

@ -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;

View File

@ -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;}
}