diff --git a/src/components/button/index.jsx b/src/components/button/index.jsx
new file mode 100644
index 000000000..872a52dc4
--- /dev/null
+++ b/src/components/button/index.jsx
@@ -0,0 +1,59 @@
+import React, { useEffect, useRef } from 'react';
+import './index.scss';
+
+export const FlowBorderButton = ({
+ className = '',
+ children,
+ href = '/',
+ onClick,
+ ...restProps
+}) => {
+ return
+
+ {children}
+
+}
+
+const GlowButton = ({
+ className = '',
+ children,
+ href = '/',
+ onClick,
+ ...restProps
+}) => {
+ const buttonRef = useRef(null);
+
+ useEffect(() => {
+ const button = buttonRef.current;
+ if (!button) return;
+
+ const handleMouseMove = (e) => {
+ const rect = button.getBoundingClientRect();
+ const x = e.clientX - rect.left;
+ const y = e.clientY - rect.top;
+
+ button.style.setProperty('--mouse-x', `${x}px`);
+ button.style.setProperty('--mouse-y', `${y}px`);
+ };
+
+ button.addEventListener('mousemove', handleMouseMove);
+
+ return () => {
+ button.removeEventListener('mousemove', handleMouseMove);
+ };
+ }, []);
+
+ return (
+
+ {children}
+
+ );
+};
+
+export default GlowButton;
\ No newline at end of file
diff --git a/src/components/button/index.scss b/src/components/button/index.scss
new file mode 100644
index 000000000..9570faa1f
--- /dev/null
+++ b/src/components/button/index.scss
@@ -0,0 +1,88 @@
+a.glow-button {
+ background: linear-gradient(95deg, #1466ec 4.2%, #7066ff 99.19%);
+ border-radius: 10px;
+ color: #ffffff;
+ font-size: 18px;
+ padding: 7px 34px;
+ position: relative;
+ z-index: 1;
+ overflow: hidden;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ text-decoration: none;
+ cursor: pointer;
+
+ // 初始化鼠标变量
+ --mouse-x: 0px;
+ --mouse-y: 0px;
+
+ // 光圈效果
+ &::after {
+ content: " ";
+ position: absolute;
+ left: var(--mouse-x);
+ top: var(--mouse-y);
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ background-image: radial-gradient(circle, #ffffff 0%, rgba(255, 255, 255, 0) 70%);
+ opacity: 0;
+ mix-blend-mode: overlay;
+ transform: translate(-50%, -50%);
+ pointer-events: none;
+ transition: opacity 0.3s ease;
+ z-index: 1;
+ }
+
+ &:hover::after {
+ opacity: 0.5;
+ }
+
+ &:hover {
+ color: #ffffff;
+ text-decoration: none;
+ }
+}
+
+a.flowBorderButton{
+ color:#091221;
+ background-color: white;
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 0 16px;
+ border-radius: 1rem;
+ border: 1px solid rgb(229 229 234 / 1);
+ .flowBorder{
+ border-radius: inherit;
+ position: absolute;
+ left: 0;
+ top: 0;
+ --duration: 8s;
+ background-image: radial-gradient(transparent, transparent, #A07CFE, #FE8FB5, #FFBE7B, transparent, transparent);
+ background-size: 300% 300%;
+ mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
+ -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
+ -webkit-mask-composite: xor;
+ mask-composite: exclude;
+ padding: 1px;
+ animation: shine var(--duration) linear infinite;
+ width: 100%;
+ height: 100%;
+ }
+ &:hover{
+ color:inherit;
+ box-shadow: 0 0 8px rgba(160, 124, 254, .3), 0 0 16px rgba(254, 143, 181, .2), 0 0 24px rgba(255, 190, 123, .1);
+ }
+}
+
+@keyframes shine {
+ 0% {
+ background-position: 0 0;
+ }
+ 100% {
+ background-position: 100% 100%;
+ }
+}
\ No newline at end of file
diff --git a/src/forge/Information/Pages/project/cateList/CategorySection.jsx b/src/forge/Information/Pages/project/cateList/CategorySection.jsx
new file mode 100644
index 000000000..75a9e5ddb
--- /dev/null
+++ b/src/forge/Information/Pages/project/cateList/CategorySection.jsx
@@ -0,0 +1,130 @@
+import { useState, useEffect, Fragment } from 'react';
+import { projectCateConfig } from '../projectCateConfig';
+import icon6 from '../../../img/project/icon6.png'
+import GlowButton from '../../../../../components/button';
+import Nodata from '../../../../Nodata';
+import { Divider } from 'antd';
+
+function CategorySection({ category, index, zoneId, nsccTitle }) {
+ const cateConfig = projectCateConfig.getCateName(category.name, index);
+ const projects = category.homepageProjects
+
+
+ // 根据分类索引决定布局类型
+ const getLayoutType = (index) => {
+ const layouts = [
+ 'layout-1', // 大气海洋环境:左侧大图 + 右侧单项目
+ 'layout-2', // 天文地球物理:左侧文字列表 + 右侧网格
+ 'layout-3', // 工业设计制造:顶部标题 + 下方网格
+ 'layout-4', // 新能源新材料:顶部标题 + 混合布局
+ 'layout-5', // 生物医药健康:左侧展示图 + 右侧混合
+ 'layout-6' // 工具:渐变横幅 + 网格
+ ];
+ return layouts[index] || 'layout-3';
+ };
+
+ const layoutType = getLayoutType(index);
+
+ // 渲染项目卡片
+ const renderProjects = (showBtn) => {
+ if (!projects || projects.length === 0) {
+ return ;
+ }
+
+ return projects.map((item, pIndex) => (
+
+
+ {item.projectProperties && item.projectProperties.description && (
+
+ {item.projectProperties.description}
+
+ )}
+ {item.projectProperties && item.projectProperties.topics && (
+
+ {item.projectProperties.topics.split(",").map((t, k) => (
+ - {t}
+ ))}
+
+ )}
+
+
+ {item.projectType &&
{item.projectType}}
+ {item.projectProperties && item.projectProperties.language &&
+
+ {item.projectProperties.language}
+ }
+
+ {item.projectProperties && item.projectProperties.timeAgo &&
更新于{item.projectProperties.timeAgo}}
+
+ {!!showBtn &&
查看详情}
+
+ ));
+ };
+
+
+ const parter_title = ()=>{
+ return
+ {nsccTitle(category.name, 0.3, "pt30")}
+
{cateConfig.description}
+
查看更多
+
+ }
+
+ return (
+
+ {layoutType === 'layout-1' && (
+
+
+
+ {nsccTitle(category.name, 0.3, "pt30")}
+
{cateConfig.description}
+
查看更多
+
+
+

+
+
+
+
+ {renderProjects(false)}
+
+
+
+ )}
+ {layoutType === 'layout-2' && (
+
+ {nsccTitle(category.name, 0.3, "pt80 center")}
+
{cateConfig.description}
+
+
+
天文及固体地球物理研究
+ {["天文地球物理是超算重要应用,研究宇宙及地球深部问题", "研究多尺度耦合,数据量大,向计算驱动转型", "超算助力科研模拟,支撑基础研究与灾害预警"].map((point, pIndex) => (
+
+

+
{point}
+
+ ))}
+
查看更多
+
+
+
+ {renderProjects(false)}
+
+
+
+
+
+ )}
+ {layoutType === 'layout-3' && (
+
+ {parter_title()}
+
+ )}
+
+ );
+}
+
+export default CategorySection;
diff --git a/src/forge/Information/Pages/project/cateList/index.jsx b/src/forge/Information/Pages/project/cateList/index.jsx
index e2891c638..3cf49a3aa 100644
--- a/src/forge/Information/Pages/project/cateList/index.jsx
+++ b/src/forge/Information/Pages/project/cateList/index.jsx
@@ -1,17 +1,29 @@
import { useEffect, useState } from 'react';
import { Spin } from 'antd';
-import { getProjectsTypeLists } from '../../../api';
+import { getProjectsTypeLists, getZoneStatistics, getProjectListByScore, getProjectsLists } from '../../../api';
import { projectCateConfig } from '../projectCateConfig';
import { getUniqueIdentifier, getUserName, getBrowserPlatform, getBrowserBrand } from '../../../utils';
import { setZoneVisits } from '../../../api';
import '../index.scss';
import './index.scss';
import Nodata from '../../../../Nodata';
+import CategorySection from './CategorySection';
+import GlowButton, { FlowBorderButton } from '../../../../../components/button';
+import AddProjects from '../../../Component/addProjects';
function ProjectCateList(props) {
- const { id } = props;
+ const { id, role } = props;
const [ typeList, setTypeList ] = useState(undefined);
+ const [ statistics, setStatistics ] = useState(undefined);
const [ loading, setLoading ] = useState(false);
+ const [ categoryProjects, setCategoryProjects ] = useState({});
+ const [ visible ,setVisible ] =useState(false);
+ const statsData = [
+ { label: '开源项目', value: statistics?.projectCount || 0, suffix: '个' },
+ { label: '领域分类', value: statistics?.categoryCount || 0, suffix: '个' },
+ { label: '行业应用场景', value: statistics?.applicationCount || 0, suffix: '个' },
+ { label: '贡献者', value: statistics?.contributorCount || 0, suffix: '个' }
+ ];
// 页面访问统计
useEffect(() => {
@@ -29,44 +41,123 @@ function ProjectCateList(props) {
if (id) {
setLoading(true);
getTypeList();
+ getStatistics();
}
}, [id]);
function getTypeList() {
- getProjectsTypeLists(id).then(result => {
- if (result) {
- setTypeList(result.data.rows.slice(0,6));
- }
- setLoading(false);
- }).catch(() => {
- setLoading(false);
+ getProjectsLists(id, {
+ isHomepage: 1
+ }).then(homepageRes => {
+ getProjectsTypeLists(id).then(result => {
+ if (result && result.data && result.data.rows) {
+ // 获取首页推荐项目列表
+ const homepageProjects = homepageRes && homepageRes.data && homepageRes.data.rows ? homepageRes.data.rows : [];
+ // 将首页推荐项目按分类名称分组后注入到分类类型数据中
+ const typeListWithHomepage = result.data.rows.map(item => {
+ // 筛选出属于该分类的首页推荐项目
+ const homepageProjectsForCategory = homepageProjects.filter(
+ p => p.projectType === item.name
+ );
+ return {
+ ...item,
+ homepageProjects: homepageProjectsForCategory
+ };
+ });
+ setTypeList(typeListWithHomepage.slice(0,6));
+ }
+ setLoading(false);
+ }).catch(() => {
+ setLoading(false);
+ });
});
}
+ function getStatistics() {
+ getZoneStatistics(id).then(result => {
+ if (result && result.data) {
+ setStatistics(result.data);
+ }
+ });
+ }
+
+ function getCategoryProjects(categoryId, index) {
+ if (categoryId && !categoryProjects[categoryId]) {
+ getProjectListByScore(id, {
+ type: categoryId,
+ pageSize: 6
+ }).then(result => {
+ if (result && result.data && result.data.rows) {
+ setCategoryProjects(prev => ({
+ ...prev,
+ [categoryId]: result.data.rows
+ }));
+ }
+ });
+ }
+ }
+ const nsccTitle = (title, delay=0.1, classname)=>
+ {title.split("").map((char, index) => (
+
+ {char}
+
+ ))}
+
+
return (
-
- {"开源项目·汇聚智慧".split("").map((char, index) => (
-
- {char}
-
- ))}
-
-
汇聚全球开发者力量,共建高性能超算新生态
-
-
- {typeList && !!typeList.length ?
- {typeList.map((item, index)=>{
- const cate = projectCateConfig.getCateName(item.name, index)
- return
-
-
{item.name}
-
{cate.description}
-
查看详情
+
setVisible(false)} role={role && role.role} onFresh={()=>{}}/>
+ {/* 数据统计部分 */}
+
+ {nsccTitle("数聚开源力量,实时见证开源生态的每一次进化", 0.1, "center pt80")}
+
+
+ {statsData.map((stat, index) => (
+
+
+ {stat.value}
+ {stat.suffix}
+
+
{stat.label}
- })}
-
:
}
-
+ ))}
+
+ {role && role.role !== "None" &&
+ {role.role === "Member" ? "我的项目" : "管理项目" }
+ {
+ e.stopPropagation();
+ setVisible(true)
+ }}>添加项目
+
}
+
+
+
+ {/* 分类介绍部分 */}
+
+ {typeList && !!typeList.length && (
+
+ {typeList.map((item, index) => (
+
+ ))}
+
+ )}
+
+
+ {/* 底部区域 */}
+
);
diff --git a/src/forge/Information/Pages/project/cateList/index.scss b/src/forge/Information/Pages/project/cateList/index.scss
index 3930814fb..b87fd1ec2 100644
--- a/src/forge/Information/Pages/project/cateList/index.scss
+++ b/src/forge/Information/Pages/project/cateList/index.scss
@@ -1,135 +1,789 @@
.project_cate_home {
- background: url('../../../img/project/cate_page.png'), linear-gradient(90deg,#F3F8FF 0%,#E7F1FF 25%,#E2EBFF 50%,#F7FAFF 100%);;
- background-size: 100% 100%;
-}
+ background-color: #F6F8FE;
+ // 公共样式
+ .NSCC_project_btn {
+ border-radius: 8px;
+ width: 162px;
+ padding: 6px 0;
-.project_cate_list {
- display: grid;
- grid-template-columns: repeat(4, 1fr);
- gap: 20px;
-
- .project_cate_item {
- border: 1px solid;
- border-color: #ffffff;
- border-radius: 15px;
- box-shadow: 0px 3px 12px rgba(130, 132, 164, 0.05);
- background-image: url('../../../img/project/cate1.png');
- background-size: 100% 100%;
- padding: 35px;
- &:hover{
- background-image: url('../../../img/project/cate1_hover.png');
- color:#ffffff;
- .project_cate_item_btn{
- background:#ffffff;
- border-color: #ffffff;
- }
- &.cate_card_5, &.cate_card_6{
- background-image: url('../../../img/project/cate2_hover.png');
- }
- }
- }
-
- .cate_card_icon {
- width: 33px;
- height: 33px;
- display: inline-block;
- background-size: auto;
- background-repeat: no-repeat;
- background-position: center;
- }
-
- .cate_card_1 {
- .cate_card_icon {
- background-image: url('../../../img/project/cate_icon1.png');
+ &.blue_image {
+ background-image: url('../../../img/project/p_1.png');
+ background-size: 100% 100%;
}
- &:hover {
- .cate_card_icon {
- background-image: url('../../../img/project/cate_icon1_active.png');
- }
- }
- }
-
- .cate_card_2 {
- .cate_card_icon {
- background-image: url('../../../img/project/cate_icon2.png');
- }
-
- &:hover {
- .cate_card_icon {
- background-image: url('../../../img/project/cate_icon2_active.png');
- }
- }
- }
-
- .cate_card_3 {
- .cate_card_icon {
- background-image: url('../../../img/project/cate_icon3.png');
- }
-
- &:hover {
- .cate_card_icon {
- background-image: url('../../../img/project/cate_icon3_active.png');
- }
- }
- }
-
- .cate_card_4 {
- .cate_card_icon {
- background-image: url('../../../img/project/cate_icon4.png');
- }
-
- &:hover {
- .cate_card_icon {
- background-image: url('../../../img/project/cate_icon4_active.png');
- }
- }
- }
-
- .cate_card_5 {
- background-image: url('../../../img/project/cate2.png');
- .cate_card_icon {
- background-image: url('../../../img/project/cate_icon5.png');
- }
-
- &:hover {
- .cate_card_icon {
- background-image: url('../../../img/project/cate_icon5_active.png');
- }
- }
- }
-
- .cate_card_6 {
- background-image: url('../../../img/project/cate3.png');
- .cate_card_icon {
- background-image: url('../../../img/project/cate_icon6.png');
- }
-
- &:hover {
- .cate_card_icon {
- background-image: url('../../../img/project/cate_icon6_active.png');
- }
- }
- }
-
- .cate_card_5,
- .cate_card_6 {
- grid-column: span 2;
- }
-
- .project_cate_item_btn {
- display: block;
- border: 1px solid;
- border-color: #091221;
- border-radius: 6px;
- font-size: 15px;
- text-align: center;
- color: #091221;
&:hover {
.iconfont {
- display: inline-block;
animation: arrow-move 1.2s ease-in-out infinite;
}
}
}
+
+ .hover_img_big {
+ padding: 25px;
+ background-image: url('../../../img/project/cate_page_img2.png');
+ background-size: 100% 100%;
+ border-radius: 15px;
+
+ &:hover {
+ .placeholder-img>img {
+ transform: scale(1.05);
+ }
+ }
+
+ .placeholder-img {
+ border-radius: 15px;
+ overflow: hidden;
+ }
+
+ .placeholder-img>img {
+ width: 100%;
+ object-fit: cover;
+ transition: all .3s ease;
+ }
+ }
+
+ .project_cate_home_part1 {
+ padding-bottom: 80px;
+ background-image: url('../../../img/project/cate_page_1.png');
+ background-size: 100% 100%;
+ }
+
+ .project_cate_home_part2 {
+ background-image: url('../../../img/project/cate_page_2.png');
+ background-size: 100% 100%;
+ .cate_project_list_box{
+ display: flex;
+ flex-flow: column;
+ gap: 15px;
+ height: 730px;
+ overflow-y: auto;
+ &::-webkit-scrollbar{
+ display: none;
+ }
+ .cate-project-card{
+ background-image: url('../../../img/project/project1.png');
+ background-size: 100% 100%;
+ border:2px solid #ffffff;
+ &:hover{
+ color:#ffffff;
+ background-image: url('../../../img/project/project2.png');
+ .project-list-item-title::before{
+ background:linear-gradient(90deg,#ffffff 0%,rgba(255, 255, 255, 0.4) 93.27%);
+ }
+ .project-list-item-tag li{
+ background: rgba(255, 255, 255, 0.15);
+ }
+ a{
+ color: white;
+ }
+ }
+ }
+
+ .project-list-item-title {
+ position: relative;
+ &::before {
+ content: '';
+ position: absolute;
+ bottom: -6px;
+ width: 34px;
+ height: 2px;
+ background: linear-gradient(90deg, #091221 0%, #466aff 50%);
+ }
+ }
+ }
+ }
+
+ .project_cate_home_part3 {
+ padding-bottom: 80px;
+ background-image: url('../../../img/project/cate_page_3.png');
+ background-size: 100% 100%;
+ .project_cate_home_part3_left{
+ padding: 40px;
+ width:582px;
+ height:652px;
+ background-image: url('../../../img/project/cate_page_3_left.png');
+ background-size: 100% 100%;
+ }
+ .project_cate_home_part3_right{
+ background-color: #FFFFFF;
+ padding: 25px;
+ }
+ .cate_project_list_box{
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ }
+ .cate-project-card{
+ &:hover{
+ background-image: url('../../../img/project/project3.png');
+ background-size: 100% 100%;
+ }
+ .project-list-item-title .icon-jiantou21.iconfont{
+ color: #091221;
+ }
+ }
+ .project-cate-1600{
+ overflow: hidden;
+ border-radius: 15px;
+ }
+ }
+
+ .statistics-cards {
+ width: 80%;
+ margin: 25px auto;
+ display: grid;
+ justify-items: center;
+ grid-template-columns: repeat(4, 1fr);
+ border: 2px solid #ffffff;
+ border-radius: 15px;
+ background: #ffffff3c;
+ backdrop-filter: blur(10px);
+ padding: 20px 9%;
+
+ .stat-value span {
+ font-family: "DouyinSans";
+ font-weight: 700;
+ font-size: 52px;
+ line-height: normal;
+ }
+ }
+
+ .cate_parter_1_left {
+ width: 44.3%;
+ margin-right: 100px;
+ }
+
+ .cate_project_list_box .cate-project-card {
+ min-width: 0;
+ padding: 30px;
+ border-radius: 15px;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ position: relative;
+
+ &:hover {
+ .project-list-item-btn {
+ opacity: 1 !important;
+ bottom: 35px;
+ }
+ .project-list-item-title {
+ .icon-jiantou21 {
+ top: 0px;
+ left: 0px;
+ opacity: 1;
+ transition: top 0.5s ease, left 0.5s ease, opacity 0.3s ease 0.1s;
+ }
+ }
+ }
+
+ .project-list-item-title .icon-jiantou21 {
+ color: white;
+ opacity: 0;
+ transition: top 0.5s ease, left 0.5s ease;
+ pointer-events: none;
+ position: relative;
+ top: 18px;
+ left: -18px;
+ }
+
+ .project-list-item-tag {
+ flex-wrap: wrap;
+ display: flex;
+ gap: 10px;
+
+ &>li {
+ padding: 0 10px;
+ background:linear-gradient(277.15deg,rgba(10, 145, 255, 0.08) 0.59%,rgba(43, 103, 238, 0.08) 54.58%,rgba(133, 110, 250, 0.08) 98.25%);
+ border-radius: 4px;
+ font-size: 13px;
+ opacity: 0.8;
+ }
+ }
+ .project-list-item-btn {
+ width: 90%;
+ position: absolute;
+ bottom: 0px;
+ background: #091221;
+ border-radius: 6px;
+ color: #ffffff;
+ text-align: center;
+ padding: 1px 0;
+ opacity: 0;
+ transition: all .3s ease;
+
+ &:hover {
+ .iconfont {
+ display: inline-block;
+ animation: arrow-move 1.2s ease-in-out infinite;
+ }
+ }
+
+ }
+ }
+}
+
+// 统计数据部分
+.statistics-section {
+ .statistics-title {
+ font-size: 32px;
+ font-weight: bold;
+ color: #091221;
+ margin-bottom: 60px;
+
+ .title-char {
+ display: inline-block;
+ }
+ }
+
+ .statistics-cards {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 20px;
+ margin-bottom: 50px;
+
+ .stat-card {
+ background: linear-gradient(135deg, #ffffff 0%, #f8faff 100%);
+ border-radius: 15px;
+ padding: 40px 30px;
+ text-align: center;
+ box-shadow: 0px 3px 12px rgba(130, 132, 164, 0.08);
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-5px);
+ box-shadow: 0px 8px 20px rgba(130, 132, 164, 0.12);
+ }
+
+ .stat-value {
+ font-size: 36px;
+ font-weight: bold;
+ color: #091221;
+ margin-bottom: 10px;
+ }
+
+ .stat-label {
+ font-size: 16px;
+ color: #666;
+ margin-bottom: 5px;
+ }
+
+ .stat-suffix {
+ font-size: 14px;
+ color: #999;
+ }
+ }
+ }
+
+ .statistics-action {
+ .submit-project-btn {
+ display: inline-block;
+ padding: 15px 50px;
+ background: linear-gradient(90deg, #1E6BFF 0%, #3B8DFF 100%);
+ color: #ffffff;
+ border-radius: 30px;
+ font-size: 18px;
+ font-weight: bold;
+ text-decoration: none;
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0px 5px 15px rgba(30, 107, 255, 0.3);
+ }
+ }
+ }
+}
+
+// 分类介绍部分
+.category-sections {
+ .section-title {
+ font-size: 28px;
+ font-weight: bold;
+ color: #091221;
+ position: relative;
+
+ &::after {
+ content: '';
+ display: block;
+ width: 60px;
+ height: 4px;
+ background: linear-gradient(90deg, #1E6BFF 0%, #3B8DFF 100%);
+ margin: 15px auto 0;
+ border-radius: 2px;
+ }
+ }
+
+ .category-list {
+ margin-top: 50px;
+ }
+}
+
+// 分类卡片
+.category-section {
+ margin-bottom: 80px;
+
+ .category-container {
+ max-width: 1600px;
+ margin: 0 auto;
+ padding: 0 20px;
+ }
+
+ // 布局1:左侧大图 + 右侧单项目
+ &.layout-1 {
+ .category-row {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 40px;
+ align-items: center;
+ }
+
+ .left-content {
+ .category-image {
+ img {
+ width: 100%;
+ border-radius: 15px;
+ transition: transform 0.3s ease;
+
+ &:hover {
+ transform: scale(1.02);
+ }
+ }
+ }
+
+ .category-info {
+ .category-title {
+ font-size: 28px;
+ font-weight: bold;
+ color: #091221;
+ margin-bottom: 20px;
+ }
+
+ .category-desc {
+ font-size: 16px;
+ color: #666;
+ line-height: 1.8;
+ margin-bottom: 30px;
+ }
+
+ .view-more-btn {
+ display: inline-block;
+ padding: 12px 30px;
+ background: linear-gradient(90deg, #1E6BFF 0%, #3B8DFF 100%);
+ color: #ffffff;
+ border-radius: 30px;
+ font-size: 16px;
+ text-decoration: none;
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0px 5px 15px rgba(30, 107, 255, 0.3);
+ }
+ }
+ }
+ }
+
+ .right-content {
+ .big-project-card {
+ .project-card {
+ min-height: 400px;
+ }
+ }
+ }
+ }
+
+ // 布局2:左侧文字列表 + 右侧网格
+ &.layout-2 {
+ .category-row {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 40px;
+ align-items: center;
+ }
+
+ .left-content {
+ .category-title {
+ font-size: 28px;
+ font-weight: bold;
+ color: #091221;
+ margin-bottom: 30px;
+ }
+
+ .category-list {
+ .list-item {
+ font-size: 16px;
+ color: #666;
+ line-height: 2;
+ margin-bottom: 15px;
+
+ i {
+ color: #1E6BFF;
+ }
+ }
+ }
+
+ .view-more-btn {
+ display: inline-block;
+ padding: 12px 30px;
+ background: linear-gradient(90deg, #1E6BFF 0%, #3B8DFF 100%);
+ color: #ffffff;
+ border-radius: 30px;
+ font-size: 16px;
+ text-decoration: none;
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0px 5px 15px rgba(30, 107, 255, 0.3);
+ }
+ }
+ }
+ }
+
+ // 布局3:顶部标题居中 + 下方网格
+ &.layout-3 {
+ .category-center {
+ text-align: center;
+
+ .category-title {
+ font-size: 28px;
+ font-weight: bold;
+ color: #091221;
+ margin-bottom: 20px;
+ }
+
+ .category-desc {
+ font-size: 16px;
+ color: #666;
+ line-height: 1.8;
+ max-width: 800px;
+ margin: 0 auto 40px;
+ }
+
+ .view-more-btn {
+ display: inline-block;
+ padding: 12px 30px;
+ background: linear-gradient(90deg, #1E6BFF 0%, #3B8DFF 100%);
+ color: #ffffff;
+ border-radius: 30px;
+ font-size: 16px;
+ text-decoration: none;
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0px 5px 15px rgba(30, 107, 255, 0.3);
+ }
+ }
+
+ .project-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 20px;
+ }
+ }
+ }
+
+ // 布局4:顶部标题居中 + 混合布局
+ &.layout-4 {
+ .category-center {
+ text-align: center;
+
+ .category-title {
+ font-size: 28px;
+ font-weight: bold;
+ color: #091221;
+ margin-bottom: 20px;
+ }
+
+ .category-desc {
+ font-size: 16px;
+ color: #666;
+ line-height: 1.8;
+ max-width: 800px;
+ margin: 0 auto 40px;
+ }
+
+ .view-more-btn {
+ display: inline-block;
+ padding: 12px 30px;
+ background: linear-gradient(90deg, #1E6BFF 0%, #3B8DFF 100%);
+ color: #ffffff;
+ border-radius: 30px;
+ font-size: 16px;
+ text-decoration: none;
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0px 5px 15px rgba(30, 107, 255, 0.3);
+ }
+ }
+
+ .project-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 20px;
+
+ .project-card:first-child {
+ grid-column: span 2;
+ }
+ }
+ }
+ }
+
+ // 布局5:左侧展示图 + 右侧混合
+ &.layout-5 {
+ .category-row {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 40px;
+ align-items: center;
+ }
+
+ .left-content {
+ .category-image {
+ img {
+ width: 100%;
+ border-radius: 15px;
+ transition: transform 0.3s ease;
+
+ &:hover {
+ transform: scale(1.02);
+ }
+ }
+ }
+ }
+
+ .right-content {
+ .project-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 20px;
+
+ .project-card {
+
+ &:nth-child(1),
+ &:nth-child(2) {
+ grid-column: span 1;
+ }
+
+ &:nth-child(3),
+ &:nth-child(4) {
+ grid-column: span 2;
+ }
+ }
+ }
+ }
+ }
+
+ // 布局6:渐变横幅 + 网格
+ &.layout-6 {
+ .category-gradient {
+ background: linear-gradient(135deg, #091221 0%, #1a2535 100%);
+ border-radius: 20px;
+ padding: 60px 40px;
+ margin-bottom: 40px;
+
+ .category-center {
+ text-align: center;
+
+ .category-title {
+ font-size: 28px;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 20px;
+ }
+
+ .category-desc {
+ font-size: 16px;
+ color: #ccc;
+ line-height: 1.8;
+ max-width: 800px;
+ margin: 0 auto 40px;
+ }
+
+ .view-more-btn {
+ display: inline-block;
+ padding: 12px 30px;
+ background: linear-gradient(90deg, #1E6BFF 0%, #3B8DFF 100%);
+ color: #ffffff;
+ border-radius: 30px;
+ font-size: 16px;
+ text-decoration: none;
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0px 5px 15px rgba(30, 107, 255, 0.3);
+ }
+ }
+ }
+
+ .project-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 20px;
+ }
+ }
+ }
+
+ // 通用项目卡片样式
+ .project-grid {
+ display: grid;
+ gap: 20px;
+
+ .project-card {
+ background: linear-gradient(135deg, #ffffff 0%, #f8faff 100%);
+ border-radius: 15px;
+ padding: 30px;
+ box-shadow: 0px 3px 12px rgba(130, 132, 164, 0.08);
+ transition: all 0.3s ease;
+ position: relative;
+
+ &:hover {
+ transform: translateY(-5px);
+ box-shadow: 0px 8px 20px rgba(130, 132, 164, 0.12);
+
+ .project-name {
+ color: #1E6BFF;
+ }
+ }
+
+ .project-card-header {
+ .project-name {
+ font-size: 20px;
+ font-weight: bold;
+ color: #091221;
+ margin-bottom: 15px;
+ display: flex;
+ align-items: center;
+
+ i {
+ color: #1E6BFF;
+ }
+ }
+
+ .project-tags {
+ .tag {
+ display: inline-block;
+ padding: 4px 12px;
+ background: #e6f0ff;
+ color: #1E6BFF;
+ border-radius: 20px;
+ font-size: 12px;
+ margin-right: 8px;
+ margin-bottom: 8px;
+ }
+ }
+ }
+
+ .project-desc {
+ font-size: 14px;
+ color: #666;
+ line-height: 1.6;
+ margin-bottom: 20px;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ }
+
+ .project-meta {
+ display: flex;
+ justify-content: space-between;
+ font-size: 12px;
+ color: #999;
+ margin-bottom: 20px;
+
+ i {
+ color: #1E6BFF;
+ }
+ }
+
+ .project-card-btn {
+ display: block;
+ padding: 10px 20px;
+ background: linear-gradient(90deg, #1E6BFF 0%, #3B8DFF 100%);
+ color: #ffffff;
+ border-radius: 6px;
+ text-align: center;
+ text-decoration: none;
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0px 5px 15px rgba(30, 107, 255, 0.3);
+ }
+ }
+ }
+
+ .loading-text,
+ .no-data {
+ text-align: center;
+ padding: 40px;
+ color: #999;
+ }
+ }
+
+ .view-all-link {
+ display: inline-block;
+ font-size: 16px;
+ color: #1E6BFF;
+ text-decoration: none;
+
+ &:hover {
+ .iconfont {
+ animation: arrow-move 1.2s ease-in-out infinite;
+ }
+ }
+ }
+}
+
+// 底部区域
+.footer-section {
+ background: linear-gradient(135deg, #091221 0%, #1a2535 100%);
+ padding: 80px 0;
+ margin-top: 80px;
+
+ .footer-content {
+ .footer-title {
+ font-size: 32px;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 50px;
+ }
+
+ .footer-action {
+ .submit-project-btn {
+ display: inline-block;
+ padding: 15px 50px;
+ background: linear-gradient(90deg, #1E6BFF 0%, #3B8DFF 100%);
+ color: #ffffff;
+ border-radius: 30px;
+ font-size: 18px;
+ font-weight: bold;
+ text-decoration: none;
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0px 5px 15px rgba(30, 107, 255, 0.3);
+ }
+ }
+ }
+ }
+}
+
+// 动画
+@keyframes arrow-move {
+
+ 0%,
+ 100% {
+ transform: translateX(0);
+ }
+
+ 50% {
+ transform: translateX(5px);
+ }
}
\ No newline at end of file
diff --git a/src/forge/Information/Pages/project/projectCateConfig.js b/src/forge/Information/Pages/project/projectCateConfig.js
index 073682a6e..8ffa5d1c0 100644
--- a/src/forge/Information/Pages/project/projectCateConfig.js
+++ b/src/forge/Information/Pages/project/projectCateConfig.js
@@ -31,16 +31,18 @@ import img5_4 from '../../img/project/1-5-4.png';
import img6_1 from '../../img/project/1-6-1.png';
import img6_2 from '../../img/project/1-6-2.png';
import img6_3 from '../../img/project/1-6-3.png';
+import home_img1 from '../../img/project/cate_page_img1.png';
// 项目分类数据配置
// 根据分类名称存储对应的文案数据
export const projectCateConfig = {
// 分类ID与名称映射
cateNames: {
"大气海洋环境": {
- description: "大气海洋环境是高性能计算的重要应用领域之一,涵盖天气预报、气候预测、海洋模拟、空气质量、水环境及河口海岸动力…"
+ description: "大气海洋环境是高性能计算重要应用,可高效支撑防灾减灾等工作",
+ img: home_img1
},
"天文地球物理": {
- description: "天文地球物理是高性能计算的重要应用方向之一,主要面向宇宙结构演化、天体物理过程以及地球内部结构与动力学等复杂…"
+ description: "天文地球物理依托高性能计算,助力科研与灾害预警"
},
"工业设计制造": {
description: "工业设计制造是高性能计算的核心应用领域之一,广泛涵盖计算流体力学(CFD)、计算固体力学、高频电磁仿真…"
diff --git a/src/forge/Information/img/project/cate_page.png b/src/forge/Information/img/project/cate_page.png
deleted file mode 100644
index d649c4e25..000000000
Binary files a/src/forge/Information/img/project/cate_page.png and /dev/null differ
diff --git a/src/forge/Information/img/project/cate_page_1.png b/src/forge/Information/img/project/cate_page_1.png
new file mode 100644
index 000000000..19c2dff5d
Binary files /dev/null and b/src/forge/Information/img/project/cate_page_1.png differ
diff --git a/src/forge/Information/img/project/cate_page_2.png b/src/forge/Information/img/project/cate_page_2.png
new file mode 100644
index 000000000..2d58b6fb7
Binary files /dev/null and b/src/forge/Information/img/project/cate_page_2.png differ
diff --git a/src/forge/Information/img/project/cate_page_3.png b/src/forge/Information/img/project/cate_page_3.png
new file mode 100644
index 000000000..0a633cdf5
Binary files /dev/null and b/src/forge/Information/img/project/cate_page_3.png differ
diff --git a/src/forge/Information/img/project/cate_page_3_left.png b/src/forge/Information/img/project/cate_page_3_left.png
new file mode 100644
index 000000000..fd248fa72
Binary files /dev/null and b/src/forge/Information/img/project/cate_page_3_left.png differ
diff --git a/src/forge/Information/img/project/cate_page_img1.png b/src/forge/Information/img/project/cate_page_img1.png
new file mode 100644
index 000000000..dc5714e73
Binary files /dev/null and b/src/forge/Information/img/project/cate_page_img1.png differ
diff --git a/src/forge/Information/img/project/cate_page_img2.png b/src/forge/Information/img/project/cate_page_img2.png
new file mode 100644
index 000000000..ca22860bd
Binary files /dev/null and b/src/forge/Information/img/project/cate_page_img2.png differ
diff --git a/src/forge/Information/img/project/p_1.png b/src/forge/Information/img/project/p_1.png
new file mode 100644
index 000000000..ca7d68309
Binary files /dev/null and b/src/forge/Information/img/project/p_1.png differ
diff --git a/src/forge/Information/img/project/project1.png b/src/forge/Information/img/project/project1.png
new file mode 100644
index 000000000..6b3b0f7cb
Binary files /dev/null and b/src/forge/Information/img/project/project1.png differ
diff --git a/src/forge/Information/img/project/project2.png b/src/forge/Information/img/project/project2.png
new file mode 100644
index 000000000..16b25c86c
Binary files /dev/null and b/src/forge/Information/img/project/project2.png differ
diff --git a/src/forge/Information/img/project/project3.png b/src/forge/Information/img/project/project3.png
new file mode 100644
index 000000000..b2945ebb3
Binary files /dev/null and b/src/forge/Information/img/project/project3.png differ
diff --git a/src/forge/Information/index.jsx b/src/forge/Information/index.jsx
index dbb9cb9ae..e5024f5c2 100644
--- a/src/forge/Information/index.jsx
+++ b/src/forge/Information/index.jsx
@@ -309,7 +309,7 @@ function Index(props){
(
-
+
)}
>