diff --git a/src/views/Jyh/ecosystem/components/StarDevelopersChart.vue b/src/views/Jyh/ecosystem/components/StarDevelopersChart.vue
new file mode 100644
index 0000000..1023a71
--- /dev/null
+++ b/src/views/Jyh/ecosystem/components/StarDevelopersChart.vue
@@ -0,0 +1,363 @@
+
+
+
明星开发者聚焦
+
+
+
+
+
+
![]()
+
+
{{ item.desc }}
+
+ {{ item.name }}
+ 📍 {{ item.org }}
+
+
+
+ {{ formatFollowers(item.followers) }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/Jyh/ecosystem/index.vue b/src/views/Jyh/ecosystem/index.vue
index 8912ba0..ca1c686 100644
--- a/src/views/Jyh/ecosystem/index.vue
+++ b/src/views/Jyh/ecosystem/index.vue
@@ -136,33 +136,7 @@
-
-
明星开发者聚焦
-
-
-
-
-
-
![]()
-
-
{{ item.desc }}
-
- {{ item.name }}
- 📍 {{ item.org }}
-
-
-
- {{ formatFollowers(item.followers) }}
-
-
-
-
-
+
@@ -248,6 +222,7 @@ import UniversityClubStatsChart from './components/UniversityClubStatsChart.vue'
import CommunityGovernanceHealthChart from './components/CommunityGovernanceHealthChart.vue'
import VitalityWaveChart from './components/VitalityWaveChart.vue'
import StatsGlass from './components/StatsGlass.vue'
+import StarDevelopersChart from './components/StarDevelopersChart.vue'
import { usePageResize } from '@/utils/hooks/usePageResize';
// 页面尺寸响应式
@@ -365,29 +340,7 @@ const excellentProjects = computed(() => {
}));
});
-// 2. 明星开发者数据(基于GitHub中国区Top开发者)
-const excellentProjects2025 = ref([
- { name: '稚晖', desc: 'TOP 1', org: 'Shanghai', followers: 82738, avatar: 'https://github.com/peng-zhihui.png' },
- { name: 'Crypto Michael', desc: 'TOP 2', org: 'Beijing, China', followers: 37622, avatar: 'https://github.com/michaelliao.png' },
- { name: '代码家', desc: 'TOP 3', org: 'Beijing, China', followers: 24743, avatar: 'https://github.com/daimajia.png' },
- { name: 'Jackson Tian', desc: 'TOP 4', org: 'Hangzhou, China', followers: 21267, avatar: 'https://github.com/JacksonTian.png' },
- { name: '云风', desc: 'TOP 5', org: 'China', followers: 21192, avatar: 'https://github.com/cloudwu.png' },
- { name: 'Fengda Huang', desc: 'TOP 6', org: 'Shanghai / Hangzhou', followers: 20229, avatar: 'https://github.com/phodal.png' },
- { name: '程序员鱼皮', desc: 'TOP 7', org: 'Shanghai', followers: 18461, avatar: 'https://github.com/liyupi.png' },
- { name: 'Trinea', desc: 'TOP 8', org: 'HangZhou', followers: 17019, avatar: 'https://github.com/Trinea.png' },
- { name: 'lifesinger', desc: 'TOP 9', org: 'Hangzhou, China', followers: 15894, avatar: 'https://github.com/lifesinger.png' },
- { name: 'stormzhang', desc: 'TOP 10', org: 'Shanghai, China', followers: 15889, avatar: 'https://github.com/stormzhang.png' },
- { name: 'Wenli Zhang', desc: 'TOP 11', org: 'Shanghai, China', followers: 15680, avatar: 'https://github.com/Ovilia.png' },
- { name: 'Wei Wang', desc: 'TOP 12', org: 'Yokohama / China', followers: 15532, avatar: 'https://github.com/onevcat.png' },
- { name: 'astaxie', desc: 'TOP 13', org: 'Shanghai, China', followers: 15022, avatar: 'https://github.com/astaxie.png' },
- { name: '司徒正美', desc: 'TOP 14', org: 'China', followers: 14742, avatar: 'https://github.com/RubyLouvre.png' },
- { name: '云谦', desc: 'TOP 15', org: 'HangZhou, China', followers: 14466, avatar: 'https://github.com/sorrycc.png' },
- { name: 'cangdu', desc: 'TOP 16', org: 'Shanghai, China', followers: 13728, avatar: 'https://github.com/bailicangdu.png' },
- { name: 'Huang Haiguang', desc: 'TOP 17', org: 'Qingdao, China', followers: 13422, avatar: 'https://github.com/fengdu78.png' },
- { name: '花裤衩', desc: 'TOP 18', org: 'Shanghai, China', followers: 13236, avatar: 'https://github.com/PanJiaChen.png' },
- { name: '破娃酱', desc: 'TOP 19', org: 'China', followers: 13203, avatar: 'https://github.com/breakwa11.png' },
- { name: 'Draven', desc: 'TOP 20', org: 'Beijing, China', followers: 13094, avatar: 'https://github.com/draveness.png' }
-]);
+
// 3. 图表数据定义
const chartData = ref({
@@ -586,24 +539,6 @@ onUnmounted(() => {
});
});
-// 8. 格式化粉丝数(82738 → 82.7K)
-const formatFollowers = (num: number) => {
- if (num >= 1000) {
- return (num / 1000).toFixed(1) + 'K';
- }
- return num.toString();
-};
-
-// 9. 图片加载失败处理
-const handleImageError = (e: Event) => {
- const target = e.target as HTMLImageElement;
- const name = target.alt;
- target.style.display = 'none';
- if (target.parentElement) {
- target.parentElement.innerHTML = `${name.slice(0, 1)}`;
- }
-};
-
// 10. 企业排名相关方法
const getRankClass = (rank: number) => {
if (rank === 1) return 'gold';