增加加载动效等
|
|
@ -155,7 +155,7 @@ function ProjectHomePage(props) {
|
|||
<div className="homepageMain banner_main df">
|
||||
<div className="">
|
||||
<div className="font-30 color-white banner-title-1">JY开源软件仓库</div>
|
||||
<div className="font-16 opacity80 color-white mt5 mb15">汇聚全球顶尖开源力量,构建安全、协同、创新的软件生态,赋能军事数字化转型与智能化升级</div>
|
||||
<div className="font-16 opacity80 color-white mt5 mb15">汇聚全球顶尖开源力量,构建安全、协同、创新的软件生态,赋能J事数字化转型与智能化升级</div>
|
||||
<FeedBack {...props}/>
|
||||
</div>
|
||||
<div className="df color-white project_count glass-effect">
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import banner3 from '../../img/home/banner3.webp';
|
|||
import { Link } from "react-router-dom";
|
||||
|
||||
const BANNER_DATA = [
|
||||
{ key: 1, keyword: '仓库', name: 'JY开源软件仓库', title: 'JY开源软件仓库', content: '提供软件源码的集中托管与协作、编译构建后的制品统一管理,并支持一键搜索与下载成熟可用的应用程序,为军事软件的全生命周期提供一站式管理与分发服务', img: banner1 },
|
||||
{ key: 1, keyword: '仓库', name: 'JY开源软件仓库', title: 'JY开源软件仓库', content: '提供软件源码的集中托管与协作、编译构建后的制品统一管理,并支持一键搜索与下载成熟可用的应用程序,为J事软件的全生命周期提供一站式管理与分发服务', img: banner1 },
|
||||
{ key: 2, keyword: '供应链', name: '供应链监测', title: '供应链监测', content: '实现供应链全流程可视化与智能决策。通过实时数据监控、需求预测与风险预警,优化库存与资源配置,助力精准掌控供应链动态,实现降本增效', img: banner2 },
|
||||
// { key: 3, keyword: '软件工厂', name: '软件工厂专区', title: '软件工厂专区', content: '为您提供从需求到部署的一站式项目工程化管理。通过标准化流程、自动化流水线与统一制品库,赋能团队高效协作、规范交付,全面提升软件生产质量与效率', img: banner3 }
|
||||
]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,49 @@
|
|||
.title_v2{
|
||||
opacity: 0;
|
||||
transform: translateY(50px);
|
||||
}
|
||||
.news_v2, .activities-container, .open-source-collaboration-container-content, .software-factory-content, .ecosystem-alliance-content, .forum-exchange-content, .governance-grid, .repository-v2-content{
|
||||
opacity: 0;
|
||||
transform: translateY(50px);
|
||||
}
|
||||
.forum-exchange{
|
||||
opacity: 0;
|
||||
transform: scale(0.9);
|
||||
&.home_v2_visible .title_v2{
|
||||
animation-delay: 0.3s;
|
||||
}
|
||||
&.home_v2_visible .forum-exchange-content{
|
||||
animation-delay: 0.5s;
|
||||
}
|
||||
}
|
||||
.home_v2_visible{
|
||||
.title_v2{
|
||||
animation: fadeInUp 0.8s ease-out forwards;
|
||||
}
|
||||
.news_v2, .activities-container, .open-source-collaboration-container-content, .software-factory-content, .ecosystem-alliance-content, .forum-exchange-content, .governance-grid, .repository-v2-content{
|
||||
animation: fadeInUp 0.8s ease-out forwards;
|
||||
animation-delay: 0.3s;
|
||||
}
|
||||
&.forum-exchange{
|
||||
animation: resourceShow 0.8s ease-in-out forwards;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes fadeInUp {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(50px);
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes resourceShow {
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
|
@ -39,14 +39,14 @@ function Banner({isVisible}) {
|
|||
{/* 主要内容区域 */}
|
||||
<div className="center">
|
||||
<div className="main-title-v2 width1600">
|
||||
XX可控开源社区·
|
||||
J队可控开源社区·
|
||||
<div className="highlight-wrapper">
|
||||
<div className="text-carousel">
|
||||
<div className="carousel-text">探索群智众创新范式</div>
|
||||
<div className="carousel-text">构建军方协同新生态</div>
|
||||
<div className="carousel-text">构建J民协同新生态</div>
|
||||
{/* 克隆元素用于循环 */}
|
||||
<div className="carousel-text">探索群智众创新范式</div>
|
||||
<div className="carousel-text">构建军方协同新生态</div>
|
||||
<div className="carousel-text">构建J民协同新生态</div>
|
||||
</div>
|
||||
</div>
|
||||
<img src={require('../image/img15.png').default} alt='' width={342} className='center-left-1'/>
|
||||
|
|
@ -91,19 +91,14 @@ function Banner({isVisible}) {
|
|||
<div className="stat-label">开源项目</div>
|
||||
</div>
|
||||
<Divider type="vertical" style={{ height: '60px' }} className="mt10 opacity4" />
|
||||
<div className="stat-item">
|
||||
<div className="stat-number">100</div>
|
||||
<div className="stat-label">合作伙伴</div>
|
||||
</div>
|
||||
<Divider type="vertical" style={{ height: '60px' }} className="mt10 opacity4" />
|
||||
<div className="stat-item">
|
||||
<div className="stat-number">1000</div>
|
||||
<div className="stat-label">应用软件</div>
|
||||
<div className="stat-label">开发工具</div>
|
||||
</div>
|
||||
<Divider type="vertical" style={{ height: '60px' }} className="mt10 opacity4" />
|
||||
<div className="stat-item">
|
||||
<div className="stat-number">99</div>
|
||||
<div className="stat-label">漏洞数量</div>
|
||||
<div className="stat-label">已治理组件</div>
|
||||
</div>
|
||||
<Divider type="vertical" style={{ height: '60px' }} className="mt10 opacity4" />
|
||||
<div className="stat-item">
|
||||
|
|
@ -113,7 +108,12 @@ function Banner({isVisible}) {
|
|||
<Divider type="vertical" style={{ height: '60px' }} className="mt10 opacity4" />
|
||||
<div className="stat-item">
|
||||
<div className="stat-number">21</div>
|
||||
<div className="stat-label">论坛数量</div>
|
||||
<div className="stat-label">论坛交流</div>
|
||||
</div>
|
||||
<Divider type="vertical" style={{ height: '60px' }} className="mt10 opacity4" />
|
||||
<div className="stat-item">
|
||||
<div className="stat-number">50</div>
|
||||
<div className="stat-label">生态伙伴</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -23,37 +23,56 @@ const EcosystemAlliance = () => {
|
|||
// const secondRowPartners = partners.slice(Math.ceil(partners.length / 2));
|
||||
|
||||
const partners1 = [
|
||||
{title: "合作高校", children: [
|
||||
{ name: '国防科技大学', logo: require('../image/logo1.png') },
|
||||
{ name: '海军工程大学', logo: require('../image/logo5.png').default },
|
||||
{ name: '南京信息工程大学', logo: require('../image/logo4.png').default },
|
||||
{ name: '陆军工程大学', logo: require('../image/logo6.png').default },
|
||||
{ name: '航天工程大学', logo: require('../image/logo3.png').default },
|
||||
{ name: '信息工程大学', logo: require('../image/logo14.png').default },
|
||||
]},
|
||||
{title: "合作企业", children: [
|
||||
{ name: '中电太极', logo: require('../image/logo7.png').default },
|
||||
{ name: '中国电科第十五研究所', logo: require('../image/logo8.png').default },
|
||||
{ name: '华为', logo: require('../image/logo2.png') },
|
||||
{ name: '阿里云', logo: require('../image/logo11.png') },
|
||||
{ name: '飞腾', logo: require('../image/logo10.png') },
|
||||
{ name: '航天706所', logo: require('../image/logo15.png') },
|
||||
{ name: '麒麟', logo: require('../image/logo9.png') },
|
||||
{ name: '中国电子云', logo: require('../image/logo12.png') },
|
||||
{ name: '中国移动云', logo: require('../image/logo13.png').default }
|
||||
]},
|
||||
{title: "合作社区", children: [
|
||||
{ name: 'GitLink', logo: require('../image/logo16.png') },
|
||||
{ name: '红山开源', logo: require('../image/logo17.png') },
|
||||
{ name: '麒麟社区', logo: require('../image/logo18.png') },
|
||||
{ name: '鸿蒙社区', logo: require('../image/logo19.png') },
|
||||
{ name: '鸥栖社区', logo: require('../image/logo20.png') },
|
||||
{ name: '木兰开源社区', logo: require('../image/logo21.png').default },
|
||||
{ name: '魔搭社区', logo: require('../image/logo22.png') },
|
||||
{ name: '魔乐社区', logo: require('../image/logo25.png') },
|
||||
{ name: '启智社区', logo: require('../image/logo23.png') },
|
||||
{ name: '欧拉社区', logo: require('../image/logo24.png') },
|
||||
]}
|
||||
{
|
||||
title: "研究机构", children: [
|
||||
{ name: '国防科技大学', logo: require('../image/logo1.png') },
|
||||
{ name: '海军工程大学', logo: require('../image/logo5.png').default },
|
||||
{ name: '南京信息工程大学', logo: require('../image/logo4.png').default },
|
||||
{ name: '陆军工程大学', logo: require('../image/logo6.png').default },
|
||||
{ name: '航天工程大学', logo: require('../image/logo3.png').default },
|
||||
{ name: '信息工程大学', logo: require('../image/logo14.png').default },
|
||||
{ name: '清华大学', logo: require('../image/logo26.png').default },
|
||||
{ name: '北京大学', logo: require('../image/logo27.png').default },
|
||||
{ name: '中国科学院软件研究所', logo: require('../image/logo28.png').default },
|
||||
{ name: '北京航空航天大学', logo: require('../image/logo29.png').default },
|
||||
{ name: '上海交通大学', logo: require('../image/logo30.png').default },
|
||||
{ name: '复旦大学', logo: require('../image/logo31.png') },
|
||||
{ name: '湖南先进技术研究院', logo: require('../image/logo32.png').default },
|
||||
// 清华、北大、中科院软件所、北京航空航天大学、上海交大、复旦、湖南先进院
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "合作企业", children: [
|
||||
{ name: '中电太极', logo: require('../image/logo7.png').default },
|
||||
{ name: '中国电科第十五研究所', logo: require('../image/logo8.png').default },
|
||||
{ name: '华为', logo: require('../image/logo2.png') },
|
||||
{ name: '阿里云', logo: require('../image/logo11.png') },
|
||||
{ name: '飞腾', logo: require('../image/logo10.png') },
|
||||
{ name: '航天706所', logo: require('../image/logo15.png') },
|
||||
{ name: '麒麟', logo: require('../image/logo9.png') },
|
||||
{ name: '中国电子云', logo: require('../image/logo12.png') },
|
||||
{ name: '中国移动云', logo: require('../image/logo13.png').default },
|
||||
{ name: '联通', logo: require('../image/logo36.png').default },
|
||||
{ name: '中船重工', logo: require('../image/logo33.png').default },
|
||||
{ name: '航天五院', logo: require('../image/logo34.png').default },
|
||||
{ name: '航天软件集团', logo: require('../image/logo35.png').default }
|
||||
// 联通、中船重工、航天五院、航天软件集团
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "合作社区", children: [
|
||||
{ name: 'GitLink', logo: require('../image/logo16.png') },
|
||||
{ name: '红山开源', logo: require('../image/logo17.png') },
|
||||
{ name: '麒麟社区', logo: require('../image/logo18.png') },
|
||||
{ name: '鸿蒙社区', logo: require('../image/logo19.png') },
|
||||
{ name: '鸥栖社区', logo: require('../image/logo20.png') },
|
||||
{ name: '木兰开源社区', logo: require('../image/logo21.png').default },
|
||||
{ name: '魔搭社区', logo: require('../image/logo22.png') },
|
||||
{ name: '魔乐社区', logo: require('../image/logo25.png') },
|
||||
{ name: '启智社区', logo: require('../image/logo23.png') },
|
||||
{ name: '欧拉社区', logo: require('../image/logo24.png') },
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
// 标签切换处理
|
||||
|
|
@ -63,9 +82,11 @@ const EcosystemAlliance = () => {
|
|||
|
||||
return (
|
||||
<div className={`ecosystem-alliance center home_v2_child`} id="home_v2_child8">
|
||||
<div className="title_v2 mb20">生态联盟</div>
|
||||
<div className="title_v2 mb15">生态联盟 · 合作伙伴</div>
|
||||
<div className='ecosystem-alliance-content'>
|
||||
<div className='font-16 opacity8'>开放协作,链接前沿技术,赋能合作伙伴,共筑可持续发展平台,共建软件开发新生态。</div>
|
||||
|
||||
<div className="tabs_v2 mb80">
|
||||
{/* <div className="tabs_v2 mb80">
|
||||
<span className={`tab-button pointer ${activeTab === 'partners' ? 'active' : ''} mr20`} onClick={() => handleTabChange('partners')}>
|
||||
<i className='iconfont icon-hezuohuoban font-14 mr5'></i>
|
||||
合作伙伴
|
||||
|
|
@ -74,34 +95,34 @@ const EcosystemAlliance = () => {
|
|||
<i className='iconfont icon-xiangmugongxian font-14 mr5'></i>
|
||||
项目贡献
|
||||
</span>
|
||||
</div>
|
||||
</div> */}
|
||||
|
||||
<div className='edu-txt-left width1600 mb100'>
|
||||
{/* <div className='edu-txt-left width1600 mb100'>
|
||||
<div className='font-24 font-bd mb3'>生态聚力 智创共赢</div>
|
||||
<div className='font-16 opacity8'>开放协作,与合作伙伴共拓市场蓝海。链接前沿技术,共建智慧产业新生态。赋能合作伙伴,<br />共筑可持续发展平台</div>
|
||||
<div className='font-16 opacity8'>开放协作,链接前沿技术,赋能合作伙伴,共筑可持续发展平台,共建软件开发新生态。</div>
|
||||
<Button className='mt20 blackBut'>
|
||||
<span>了解更多</span>
|
||||
<span>了解更多</span>
|
||||
</Button>
|
||||
</div>
|
||||
</div> */}
|
||||
|
||||
<div className='width1600 pt70 pb50'>
|
||||
{partners1.map((i,key)=>{
|
||||
return <div key={key} className='mb40'>
|
||||
<div className='edu-txt-left font-24 font-bd mb20'>{i.title}</div>
|
||||
<div className='partner1-list'>
|
||||
{i.children.map((partner, index)=>{
|
||||
return <div key={`${key}-${index}`} className="partner1-item edu-txt-left">
|
||||
<img src={partner.logo} alt={partner.name} />
|
||||
</div>
|
||||
})}
|
||||
<div className='width1600 pt70 pb50'>
|
||||
{partners1.map((i, key) => {
|
||||
return <div key={key} className='mb40'>
|
||||
<div className='edu-txt-left font-24 font-bd mb20'>{i.title}</div>
|
||||
<div className='partner1-list'>
|
||||
{i.children.map((partner, index) => {
|
||||
return <div key={`${key}-${index}`} className="partner1-item edu-txt-left">
|
||||
<img src={partner.logo} alt={partner.name} />
|
||||
</div>
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
})}
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{/* <div className="partners-container width1600 mb100">
|
||||
<div
|
||||
className="partners-slider slider-row-1 mb20"
|
||||
|
|
|
|||
|
|
@ -4,29 +4,29 @@ import moreContentButton from './moreContentButton';
|
|||
|
||||
const ForumExchange = () => {
|
||||
const forums = [
|
||||
{
|
||||
id: 'software-factory',
|
||||
title: '软件工厂技术交流分论坛',
|
||||
description: '汇聚用户对“软件工厂”的功能/性能需求,交流讨论项目管理、\n软件质量管理、软件智能开发、软件流水线等方面的技术',
|
||||
icon: require('../image/icon21.png')
|
||||
},
|
||||
{
|
||||
id: 'software-resources',
|
||||
title: '软件资源需求分论坛',
|
||||
description: '汇聚XX各单位对开源代码、三方组件、应用软件、\n模型数据、容器镜像等方面的资源需求',
|
||||
title: '软件需求反馈分论坛',
|
||||
description: '汇聚开源代码、三方组件、应用软件、模型数据、\n容器镜像等的软件应用反馈和资源需求',
|
||||
icon: require('../image/icon18.png')
|
||||
},
|
||||
{
|
||||
id: 'supply-chain',
|
||||
title: '供应链治理分论坛',
|
||||
description: '交流讨论对软件漏洞、软件溯源、\nSBOM等方面的知识',
|
||||
description: '交流讨论软件漏洞、软件溯源、\n兼容性分析、SBOM等方面的知识',
|
||||
icon: require('../image/icon19.png')
|
||||
},
|
||||
{
|
||||
id: 'open-source-development',
|
||||
title: '开源软件开发协作分论坛',
|
||||
description: '交流讨论开源写作、漏洞治理、兼容性分析、\n缺陷修复、学习资源等方面的知识',
|
||||
description: '交流讨论开源协作、技术创新、缺陷修复、\n学习资源等方面的知识',
|
||||
icon: require('../image/icon20.png')
|
||||
},
|
||||
{
|
||||
id: 'software-factory',
|
||||
title: '软件工厂技术交流分论坛',
|
||||
description: '汇聚用户对“软件工厂”的功能/性能需求,交流讨论项目管理、\n软件质量管理、软件智能开发、软件流水线等方面的知识',
|
||||
icon: require('../image/icon21.png')
|
||||
}
|
||||
];
|
||||
|
||||
|
|
@ -55,36 +55,38 @@ const ForumExchange = () => {
|
|||
<div className="forum-exchange home_v2_child" id="home_v2_child7">
|
||||
<div className="title_v2 color-white">论坛交流</div>
|
||||
|
||||
<div className="forums-container width1600 color-white">
|
||||
{forums.map((forum, index) => (
|
||||
<Fragment key={forum.id}>
|
||||
<div>
|
||||
<img src={forum.icon} alt={forum.title} width={30} className='mb7 mr10'/>
|
||||
<span className="font-18 font-bd">{forum.title}</span>
|
||||
<div style={{whiteSpace: 'pre-line'}} className='mt7'>{forum.description}</div>
|
||||
</div>
|
||||
{index !== forums.length - 1 && <Divider type="vertical" dashed className="forums_divider mt8" />}
|
||||
</Fragment>
|
||||
))}
|
||||
</div>
|
||||
<img src={require('../image/img3.png').default} alt="论坛交流" style={{width: '100%'}}/>
|
||||
|
||||
<div className="features-container width1600 mt8">
|
||||
{features.map((feature, index) => (
|
||||
<Fragment key={feature.id}>
|
||||
<div className="df feature-item">
|
||||
<img src={feature.icon} alt={feature.title} width={40}/>
|
||||
<div className="ml20">
|
||||
<span className="font-18 font-bd">{feature.title}</span>
|
||||
<div className='mt5'>{feature.description}</div>
|
||||
<div className='forum-exchange-content'>
|
||||
<div className="forums-container width1600 color-white">
|
||||
{forums.map((forum, index) => (
|
||||
<Fragment key={forum.id}>
|
||||
<div>
|
||||
<img src={forum.icon} alt={forum.title} width={30} className='mb7 mr10'/>
|
||||
<span className="font-18 font-bd">{forum.title}</span>
|
||||
<div style={{whiteSpace: 'pre-line'}} className='mt7'>{forum.description}</div>
|
||||
</div>
|
||||
</div>
|
||||
{index !== features.length - 1 && <Divider type="vertical" dashed className="forums_divider mt8" />}
|
||||
</Fragment>
|
||||
))}
|
||||
</div>
|
||||
<div className='center mt40 mt-8'>
|
||||
{moreContentButton({href:"/forums", classname:"font-16 but-to-right font-bd color-white"})}
|
||||
{index !== forums.length - 1 && <Divider type="vertical" dashed className="forums_divider mt8" />}
|
||||
</Fragment>
|
||||
))}
|
||||
</div>
|
||||
<img src={require('../image/img3.png').default} alt="论坛交流" style={{width: '100%'}}/>
|
||||
|
||||
<div className="features-container width1600 mt8">
|
||||
{features.map((feature, index) => (
|
||||
<Fragment key={feature.id}>
|
||||
<div className="df feature-item">
|
||||
<img src={feature.icon} alt={feature.title} width={40}/>
|
||||
<div className="ml20">
|
||||
<span className="font-18 font-bd">{feature.title}</span>
|
||||
<div className='mt5'>{feature.description}</div>
|
||||
</div>
|
||||
</div>
|
||||
{index !== features.length - 1 && <Divider type="vertical" dashed className="forums_divider mt8" />}
|
||||
</Fragment>
|
||||
))}
|
||||
</div>
|
||||
<div className='center mt40 mt-8'>
|
||||
{moreContentButton({href:"/forums", classname:"font-16 but-to-right font-bd color-white"})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ const OpenSourceCollaboration = () => {
|
|||
{
|
||||
id: 'code-hosting',
|
||||
title: '软件代码托管',
|
||||
description: '提供开源代码git协议访问、分支管理、版本管理、许可证管理等服务',
|
||||
description: '提供开源代码Git协议访问、分支管理、版本管理、许可证管理等服务',
|
||||
icon: require('../image/icon11.png')
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ const OpenSourceCollaboration = ({isVisible}) => {
|
|||
const features = [
|
||||
{
|
||||
title: '软件代码托管',
|
||||
description: '提供开源代码git协议访问、分支管理、版本管理、许可证管理等服务',
|
||||
description: '提供开源代码Git协议访问、分支管理、版本管理、许可证管理等服务',
|
||||
},
|
||||
{
|
||||
title: '群智协同改进',
|
||||
|
|
@ -32,53 +32,55 @@ const OpenSourceCollaboration = ({isVisible}) => {
|
|||
return (
|
||||
<div className={`open-source-collaboration-container home_v2_child`} id="home_v2_child3">
|
||||
<div className="title_v2">开源协作</div>
|
||||
<div className="content-wrapper-bottom width1600"></div>
|
||||
<div className="content-wrapper width1600 df color-white mb35">
|
||||
<div className="left-panel-features-list">
|
||||
{features.map((feature, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className={`feature-item pb20 font-20`}
|
||||
>
|
||||
<AlignCenter>
|
||||
<i className='iconfont icon-sijiaoxing font-15 mr10'></i>
|
||||
{feature.title}
|
||||
</AlignCenter>
|
||||
<div className="opacity8 font-14 ml24">{feature.description}</div>
|
||||
<div className='open-source-collaboration-container-content'>
|
||||
<div className="content-wrapper-bottom width1600"></div>
|
||||
<div className="content-wrapper width1600 df color-white mb35">
|
||||
<div className="left-panel-features-list">
|
||||
{features.map((feature, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className={`feature-item pb20 font-20`}
|
||||
>
|
||||
<AlignCenter>
|
||||
<i className='iconfont icon-sijiaoxing font-15 mr10'></i>
|
||||
{feature.title}
|
||||
</AlignCenter>
|
||||
<div className="opacity8 font-14 ml24">{feature.description}</div>
|
||||
</div>
|
||||
))}
|
||||
|
||||
<Button className="blackBut white mt10" href="/projects">
|
||||
<span>了解更多</span>
|
||||
<span>了解更多</span>
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<div className="right-panel">
|
||||
|
||||
<div className="right-panel-1">
|
||||
|
||||
</div>
|
||||
))}
|
||||
|
||||
<Button className="blackBut white mt10" href="/projects">
|
||||
<span>了解更多</span>
|
||||
<span>了解更多</span>
|
||||
</Button>
|
||||
</div>
|
||||
<div className="right-panel-2">
|
||||
|
||||
<div className="right-panel">
|
||||
</div>
|
||||
|
||||
<div className="right-panel-1">
|
||||
<div className="right-panel-3">
|
||||
{active === 1 && <Fragment>
|
||||
<TerminalAnimation startAnimation={isVisible}/>
|
||||
</Fragment>}
|
||||
{active === 2 && <Fragment>
|
||||
<img src={require("../image/img9.png").default} alt='' className='right-img-center'/>
|
||||
<img src={require("../image/img10.png").default} alt='' className='right-img-left'/>
|
||||
<img src={require("../image/img8.png").default} alt='' className='right-img-right'/>
|
||||
<img src={require("../image/img5.png")} alt='' className='right-img-1'/>
|
||||
<img src={require("../image/img6.png").default} alt='' className='right-img-2'/>
|
||||
<img src={require("../image/img7.png").default} alt='' className='right-img-3'/>
|
||||
</Fragment>}
|
||||
<img src={require('../image/img4.png').default} alt='' className='right-panel-3-img1'/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="right-panel-2">
|
||||
|
||||
</div>
|
||||
|
||||
<div className="right-panel-3">
|
||||
{active === 1 && <Fragment>
|
||||
<TerminalAnimation startAnimation={isVisible}/>
|
||||
</Fragment>}
|
||||
{active === 2 && <Fragment>
|
||||
<img src={require("../image/img9.png").default} alt='' className='right-img-center'/>
|
||||
<img src={require("../image/img10.png").default} alt='' className='right-img-left'/>
|
||||
<img src={require("../image/img8.png").default} alt='' className='right-img-right'/>
|
||||
<img src={require("../image/img5.png")} alt='' className='right-img-1'/>
|
||||
<img src={require("../image/img6.png").default} alt='' className='right-img-2'/>
|
||||
<img src={require("../image/img7.png").default} alt='' className='right-img-3'/>
|
||||
</Fragment>}
|
||||
<img src={require('../image/img4.png').default} alt='' className='right-panel-3-img1'/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ const RepositoryV2 = () => {
|
|||
{
|
||||
id: 'distribution',
|
||||
title: '资源高效可靠分发',
|
||||
description: '高校分发、可靠传输、多节点部署'
|
||||
description: '高效分发、可靠传输、多节点部署'
|
||||
},
|
||||
{
|
||||
id: 'storage',
|
||||
|
|
@ -39,53 +39,57 @@ const RepositoryV2 = () => {
|
|||
{/* 标题 */}
|
||||
<div className="title_v2">开源软件仓</div>
|
||||
|
||||
{/* 导航标签 */}
|
||||
<div className="nav-tabs-v2">
|
||||
{tabs.map((tab) => (
|
||||
<div key={tab.id} className={`tab-item-v2 font-18`}>
|
||||
<img src={tab.icon} alt={tab.label} className="mb5 mr3" width={24}/>
|
||||
<span>{tab.label}</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<div className='repository-v2-content'>
|
||||
|
||||
{/* 导航标签 */}
|
||||
<div className="nav-tabs-v2">
|
||||
{tabs.map((tab) => (
|
||||
<div key={tab.id} className={`tab-item-v2 font-18`}>
|
||||
<img src={tab.icon} alt={tab.label} className="mb5 mr3" width={24}/>
|
||||
<span>{tab.label}</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* 主要内容区域 */}
|
||||
<div className="content-wrapper-v2 df">
|
||||
{/* 左侧功能介绍 */}
|
||||
<div className="left-content-v2 flex1">
|
||||
<div className="font-26 font-bd mb40">数据统一可控访问</div>
|
||||
{/* 主要内容区域 */}
|
||||
<div className="content-wrapper-v2 df">
|
||||
{/* 左侧功能介绍 */}
|
||||
<div className="left-content-v2 flex1">
|
||||
<div className="font-26 font-bd mb40">丰富多样 · 开放共享 · 认证溯源</div>
|
||||
|
||||
<div className="features-v2">
|
||||
{features.map((feature) => (
|
||||
<div key={feature.id}>
|
||||
<div className="font-16 font-bd mb8">
|
||||
<img
|
||||
width={25}
|
||||
src={require('../image/icon10.png')}
|
||||
alt=""
|
||||
className="mr10 mb2"
|
||||
/>
|
||||
{feature.title}
|
||||
<div className="features-v2">
|
||||
{features.map((feature) => (
|
||||
<div key={feature.id}>
|
||||
<div className="font-16 font-bd mb8">
|
||||
<img
|
||||
width={25}
|
||||
src={require('../image/icon10.png')}
|
||||
alt=""
|
||||
className="mr10 mb2"
|
||||
/>
|
||||
{feature.title}
|
||||
</div>
|
||||
<div>{feature.description}</div>
|
||||
</div>
|
||||
<div>{feature.description}</div>
|
||||
</div>
|
||||
))}
|
||||
))}
|
||||
</div>
|
||||
|
||||
<Button className="blackBut" href='/explore'>
|
||||
<span>了解更多</span>
|
||||
<span>了解更多</span>
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<Button className="blackBut" href='/explore'>
|
||||
<span>了解更多</span>
|
||||
<span>了解更多</span>
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
{/* 右侧架构图 - 使用图片 */}
|
||||
<div className="right-content-v2">
|
||||
<img
|
||||
src={require('../image/img3.svg').default}
|
||||
alt="开源仓库架构图"
|
||||
className="architecture-image-v2"
|
||||
/>
|
||||
{/* 右侧架构图 - 使用图片 */}
|
||||
<div className="right-content-v2">
|
||||
<img
|
||||
src={require('../image/img3.svg').default}
|
||||
alt="开源仓库架构图"
|
||||
className="architecture-image-v2"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -22,20 +22,20 @@ function SoftwareFactory() {
|
|||
return (
|
||||
<div className="software-factory home_v2_child" id="home_v2_child4">
|
||||
<div className="title_v2 mb30">软件工厂</div>
|
||||
<div className={`width1600 df software-factory-${active}`}>
|
||||
<div className={`width1600 df software-factory-content software-factory-${active}`}>
|
||||
<div className='software-left'>
|
||||
<div className='software-left-border'>
|
||||
<div className={`mb35 software-left-item ${active === 1 ? 'active' : ''}`}>
|
||||
<div className='font-26 font-bd'>
|
||||
敏捷模式
|
||||
<span className='ml12'>轻松搭建<i className='iconfont icon-a-zu15512 font-14'></i></span>
|
||||
<span className='ml12'>全流程迭代演化<i className='iconfont icon-a-zu15512 font-14'></i></span>
|
||||
</div>
|
||||
<div className='font-16'>依托敏捷模式灵活迭代,高效协同推进,让产品搭建更轻松便</div>
|
||||
<div className='font-16'>敏捷模式聚焦需求 - 任务 - 代码 - 迭代 - 测试 - 制品的全流程<br />数字化升级和在线化组织</div>
|
||||
</div>
|
||||
<div className={`software-left-item ${active === 2 ? 'active' : ''}`}>
|
||||
<div className='font-26 font-bd'>
|
||||
极速模式
|
||||
<span className='ml12'>高效快构<i className='iconfont icon-a-zu15512 font-14'></i></span>
|
||||
<span className='ml12'>高效率快速响应<i className='iconfont icon-a-zu15512 font-14'></i></span>
|
||||
</div>
|
||||
<div className='font-16'>极速模式聚焦任务 - 代码 - 制品,助力软件研发快速响应、<br />实现极致效率</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ const SupplyChainGovernance = () => {
|
|||
const governanceItems = [
|
||||
{
|
||||
id: 'security',
|
||||
title: '供应链安全XX库',
|
||||
title: '供应链安全漏洞库',
|
||||
subtitle: '汇聚漏洞信息,恶意代码信息,组件信息三类关键供应链安全信息要素',
|
||||
image: require('../image/supply-chain-security.png').default,
|
||||
width: '40%',
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 7.7 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
|
@ -9,6 +9,7 @@ import OpenSourceCollaboration from './components/openSourceCollaboration1';
|
|||
import SoftwareFactory from './components/softwareFactory';
|
||||
import Forum from './components/forum';
|
||||
import EcosystemAlliance from './components/ecosystemAlliance';
|
||||
import './animation.scss';
|
||||
|
||||
function Index(props) {
|
||||
const observer = useRef();
|
||||
|
|
@ -31,9 +32,7 @@ function Index(props) {
|
|||
}
|
||||
});
|
||||
}, {
|
||||
root: null,
|
||||
rootMargin: '0px',
|
||||
threshold: 0.1
|
||||
threshold: 0.3
|
||||
});
|
||||
|
||||
// 观察所有子组件
|
||||
|
|
|
|||
|
|
@ -563,7 +563,8 @@
|
|||
flex: 1;
|
||||
margin-top: 30px;
|
||||
height: 335px;
|
||||
background-image: url('./image/software-assessment.png'), linear-gradient(156.13deg, #4f73f6 0%, #7babff 100%);
|
||||
// background-image: url('./image/software-assessment.png'), linear-gradient(156.13deg, #4f73f6 0%, #7babff 100%);
|
||||
background-image: url('./image/software-assessment.png'), linear-gradient(100.13deg, #4f73f600 0%, #7babff3c 100%);
|
||||
background-size: auto 100%;
|
||||
background-position: right;
|
||||
background-repeat: no-repeat;
|
||||
|
|
@ -572,8 +573,8 @@
|
|||
background-color:#f8f3ff;
|
||||
}
|
||||
.tag-value {
|
||||
color:#091221;
|
||||
background-color:#ffffff;
|
||||
// color:#091221;
|
||||
// background-color:#ffffff;
|
||||
}
|
||||
.governance-item-title{
|
||||
padding-top: 20px;
|
||||
|
|
@ -581,7 +582,7 @@
|
|||
}
|
||||
|
||||
div {
|
||||
color: white;
|
||||
// color: white;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -782,6 +783,7 @@
|
|||
background-image: url('./image/bk3.png');
|
||||
background-size: 100% auto;
|
||||
background-repeat: no-repeat;
|
||||
background-position-y: -90px;
|
||||
padding: 90px 20px 60px 20px;
|
||||
|
||||
.tabs_v2 {
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ function ProjectList() {
|
|||
{i.forked_count > 0 ? <span><i className="iconfont icon-yifuke_icon mr5 font-14"></i>fork{i.forked_count}</span> : ""}
|
||||
</span>
|
||||
</div>
|
||||
<div className="task-hide-2 font-15 opacity8 mt5 mb10">
|
||||
<div className="task-hide-2 font-15 opacity8 mb12">
|
||||
{i.description}
|
||||
</div>
|
||||
<div className="opacity8">
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ export function getForumsList(params) {
|
|||
}
|
||||
export function getForumSections(id, params) {
|
||||
return fetch({
|
||||
url: `/api/forum_sections/${id}/managements`,
|
||||
url: `/api/memos/forum_memos_right/${id}.json`,
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import icon5 from '../image/icon5.png';
|
|||
import icon6 from '../image/icon6.png';
|
||||
import icon10 from '../image/icon10.png';
|
||||
import Nodata from "../../forge/Nodata";
|
||||
import { forumSectionId } from "../static";
|
||||
|
||||
function List(props) {
|
||||
const {mygetHelmetapi} = props;
|
||||
|
|
@ -22,6 +23,8 @@ function List(props) {
|
|||
const [forumTagDetail, setForumTagDetail] = useState(undefined);
|
||||
// 选中的板块对应的帖子列表
|
||||
const [forumListByTag, setForumListByTag] = useState([]);
|
||||
console.log('forumTag', forumTag);
|
||||
|
||||
|
||||
const sortImg1 = {
|
||||
0: require('../image/icon7.png'),
|
||||
|
|
@ -51,10 +54,10 @@ function List(props) {
|
|||
}
|
||||
})
|
||||
|
||||
getForumSections(4).then(res => {
|
||||
if (res && res.forum_tag) {
|
||||
getForumSections(forumSectionId).then(res => {
|
||||
if (res && res.recommend_forum_sections) {
|
||||
// 获取所有子板块
|
||||
const childrenTags = res.forum_tag.children_tags;
|
||||
const childrenTags = res.recommend_forum_sections;
|
||||
|
||||
// 并发请求所有板块的精华帖子
|
||||
const fetchEssencePosts = async (tag) => {
|
||||
|
|
@ -169,7 +172,7 @@ function List(props) {
|
|||
const forums = item.essencePosts[0] || {};
|
||||
return (
|
||||
<div className={`forums-section-item flex1 ${isSelected && 'active'}`} onClick={()=>{setForumTagDetail(item)}}>
|
||||
<div className="font-20 font-bd center section-title mt3 mb3">{item.title}</div>
|
||||
<div className="font-20 font-bd center section-title mt8 mb5">{item.title}</div>
|
||||
<div className="forums-section-item-content">
|
||||
{forums.memo_image_info && <img src={httpUrl + forums.memo_image_info.url} alt="" className="memo_image_info"/>}
|
||||
<div className="pl20 pr20">
|
||||
|
|
|
|||
|
|
@ -135,8 +135,10 @@
|
|||
color: white;
|
||||
}
|
||||
}
|
||||
img:not(.user-img){
|
||||
max-width: 100%;
|
||||
.memo_image_info{
|
||||
width: 100%;
|
||||
height: 160px;
|
||||
object-fit: cover;
|
||||
border-radius: 15px 15px 0 0;
|
||||
transition: transform .4s cubic-bezier(.25, .46, .45, .94);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
// 论坛首页,下面四个分论坛对应的一级板块id
|
||||
export const forumSectionId = 4
|
||||
|
|
@ -115,7 +115,7 @@ function List() {
|
|||
<div className="font-40 font-bd center pt80 pb60">项目动态</div>
|
||||
<div className="width1600 df pb100">
|
||||
{firstDynamics && <div className="firstDynamics">
|
||||
<div className="font-22">{firstDynamics.name}</div>
|
||||
<div className="font-22 task-hide-2">{firstDynamics.name}</div>
|
||||
<div className="font-15 opacity8">{firstDynamics.summary}</div>
|
||||
{/* <Button className="black-border-button mt30">了解更多</Button> */}
|
||||
</div>}
|
||||
|
|
@ -123,10 +123,10 @@ function List() {
|
|||
{list3.slice(1, 9).map(item=>{
|
||||
return <div className="dynamics-item" key={item.id}>
|
||||
<div className="font-22 FlexAJ">
|
||||
<span>{item.name}</span>
|
||||
<span className="font-15 opacity8">{moment(item.publishTime).format('YYYY-MM-DD')}</span>
|
||||
<span className="task-hide flex1">{item.name}</span>
|
||||
<span className="font-15 opacity8 ml30">{moment(item.publishTime).format('YYYY-MM-DD')}</span>
|
||||
</div>
|
||||
<div className="font-15 opacity8">{item.summary}</div>
|
||||
<div className="font-15 opacity8 task-hide-2">{item.summary}</div>
|
||||
</div>
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@
|
|||
margin-right: 20px;
|
||||
width: 25%;
|
||||
min-height: 420px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.dynamics-box{
|
||||
background-image:linear-gradient(179.88deg,#ffffff 0%,rgba(255, 255, 255, 0.62) 16.1%,rgba(255, 255, 255, 0) 100%);
|
||||
|
|
|
|||