From cc1514d3c4ed52693e0510ef8f3d4f28ccfd2849 Mon Sep 17 00:00:00 2001 From: fmk1023 Date: Wed, 7 Jan 2026 14:05:28 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=80=81=E5=8A=BF=E6=84=9F=E7=9F=A5?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0-=E6=AD=A6=E6=B1=89=E5=B8=82=E5=BC=80?= =?UTF-8?q?=E6=BA=90=E7=94=9F=E6=80=81=E5=BB=BA=E8=AE=BE=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=AD=A6=E6=B1=89?= =?UTF-8?q?=E5=BC=80=E6=BA=90=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8=E3=80=81?= =?UTF-8?q?=E4=B8=AD=E5=9B=BD=E5=9F=8E=E5=B8=82=E5=BC=80=E6=BA=90=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=95=B0=E9=87=8F=E5=AF=B9=E6=AF=94=E3=80=81=E5=BC=80?= =?UTF-8?q?=E6=BA=90=E5=88=9B=E6=96=B0=E8=81=94=E7=9B=9F=E4=BC=98=E7=A7=80?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E3=80=81=E5=9F=8E=E5=B8=82=E5=BC=80=E6=BA=90?= =?UTF-8?q?=E4=BA=BA=E6=89=8D=E6=95=B0=E9=87=8F=E5=AF=B9=E6=AF=94=E3=80=81?= =?UTF-8?q?=E5=9F=8E=E5=B8=82=E7=A4=BE=E5=8C=BA=E6=95=B0=E9=87=8F=E5=AF=B9?= =?UTF-8?q?=E6=AF=94=E3=80=81=E9=87=8D=E7=82=B9=E5=9F=8E=E5=B8=82=E9=AB=98?= =?UTF-8?q?=E6=A0=A1=E5=BC=80=E6=BA=90=E7=A4=BE=E5=9B=A2=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E3=80=81=E5=90=84=E7=9C=81=E5=B8=82=E5=BC=80=E6=BA=90=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=94=BF=E7=AD=96=E5=8F=91=E5=B8=83=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E3=80=81=E5=BC=80=E6=94=BE=E5=8E=9F=E5=AD=90=E6=A0=A1=E5=9B=AD?= =?UTF-8?q?=E8=A1=8C=C2=B7=E5=9F=8E=E5=B8=82=E6=B4=BB=E5=8A=A8=E5=9C=BA?= =?UTF-8?q?=E6=AC=A1=E3=80=81=E5=85=A8=E5=9B=BD=E9=87=8D=E7=82=B9=E5=9F=8E?= =?UTF-8?q?=E5=B8=82=E5=BC=80=E6=BA=90=E9=95=9C=E5=83=8F=E7=AB=99/?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=95=B0=E9=87=8F=E5=AF=B9=E6=AF=94=E7=AD=89?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=8F=AF=E8=A7=86=E5=8C=96=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/imgs/logo/logo-kfyzjjh.png | Bin 0 -> 7782 bytes src/views/Jyh/Community/StatsBar.vue | 10 +- src/views/Jyh/Community/index.vue | 2120 +++++++++++-------------- 3 files changed, 950 insertions(+), 1180 deletions(-) create mode 100644 src/assets/imgs/logo/logo-kfyzjjh.png diff --git a/src/assets/imgs/logo/logo-kfyzjjh.png b/src/assets/imgs/logo/logo-kfyzjjh.png new file mode 100644 index 0000000000000000000000000000000000000000..c3f0e158cc3b73c14132152adf0dabb00548c11d GIT binary patch literal 7782 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 literal 0 HcmV?d00001 diff --git a/src/views/Jyh/Community/StatsBar.vue b/src/views/Jyh/Community/StatsBar.vue index 18ea38b..0fb03b7 100644 --- a/src/views/Jyh/Community/StatsBar.vue +++ b/src/views/Jyh/Community/StatsBar.vue @@ -6,18 +6,18 @@
- 30+ - 高校参与 + -- + 武汉开源社区数量
- 120+ - 社区活动 + -- + 武汉开源开发者数量
200+ - 开源项目 + 武汉开源项目数量
diff --git a/src/views/Jyh/Community/index.vue b/src/views/Jyh/Community/index.vue index da349bd..720f9ee 100644 --- a/src/views/Jyh/Community/index.vue +++ b/src/views/Jyh/Community/index.vue @@ -1,214 +1,285 @@ From d63b9f32bd00ef86d99a69c24bab04cd1f8f1c0a Mon Sep 17 00:00:00 2001 From: fmk1023 Date: Thu, 8 Jan 2026 14:55:02 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=80=81=E5=8A=BF=E6=84=9F=E7=9F=A5?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0-=E5=8D=8E=E7=A7=91=E5=BC=80=E6=94=BE?= =?UTF-8?q?=E5=8E=9F=E5=AD=90=E4=BF=B1=E4=B9=90=E9=83=A8Logo=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/imgs/logo/logo_dark_circle.svg | 13 +++++++++++++ src/assets/imgs/logo/penguin_blue.svg | 11 +++++++++++ src/views/Jyh/Community/index.vue | 10 +++++----- 3 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 src/assets/imgs/logo/logo_dark_circle.svg create mode 100644 src/assets/imgs/logo/penguin_blue.svg diff --git a/src/assets/imgs/logo/logo_dark_circle.svg b/src/assets/imgs/logo/logo_dark_circle.svg new file mode 100644 index 0000000..d5f3b9a --- /dev/null +++ b/src/assets/imgs/logo/logo_dark_circle.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/imgs/logo/penguin_blue.svg b/src/assets/imgs/logo/penguin_blue.svg new file mode 100644 index 0000000..73d3e51 --- /dev/null +++ b/src/assets/imgs/logo/penguin_blue.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/views/Jyh/Community/index.vue b/src/views/Jyh/Community/index.vue index 720f9ee..2ddfffc 100644 --- a/src/views/Jyh/Community/index.vue +++ b/src/views/Jyh/Community/index.vue @@ -156,7 +156,7 @@ @@ -201,7 +201,7 @@ @@ -216,7 +216,7 @@ @@ -261,7 +261,7 @@ @@ -905,7 +905,7 @@ onUnmounted(() => { unInit() }); } .source-icon { width: 14px; height: 14px; opacity: 0.8; } -.source-logo-circle { width: 14px; height: 14px; border-radius: 50%; box-shadow: 0 1px 2px rgba(0,0,0,0.1); } +.source-logo-circle { width: 18px; height: 18px; border-radius: 50%; box-shadow: 0 1px 2px rgba(0,0,0,0.1); } .source-logo-text { font-size: 9px; font-weight: bold; background: #333; color: #fff; padding: 0 3px; border-radius: 2px; } .source-name { color: #475569; font-weight: 500; } /* 深一点的灰色文字 */ From 5f22b7d30e0d1896ea7b1201e0375d93adfbe103 Mon Sep 17 00:00:00 2001 From: fmk1023 Date: Mon, 12 Jan 2026 09:20:10 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=80=81=E5=8A=BF=E6=84=9F=E7=9F=A5?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0-=E6=AD=A6=E6=B1=89=E5=B8=82=E5=BC=80?= =?UTF-8?q?=E6=BA=90=E5=BB=BA=E8=AE=BE=E7=94=9F=E6=80=81=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=90=9C=E9=9B=86=E4=B8=8E=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/Jyh/Community/StatsBar.vue | 6 +- src/views/Jyh/Community/index.vue | 661 ++++++++++++++++++++------- 2 files changed, 488 insertions(+), 179 deletions(-) diff --git a/src/views/Jyh/Community/StatsBar.vue b/src/views/Jyh/Community/StatsBar.vue index 0fb03b7..1760fe1 100644 --- a/src/views/Jyh/Community/StatsBar.vue +++ b/src/views/Jyh/Community/StatsBar.vue @@ -6,17 +6,17 @@
- -- + 12 武汉开源社区数量
- -- + 70W+ 武汉开源开发者数量
- 200+ + 500+ 武汉开源项目数量
diff --git a/src/views/Jyh/Community/index.vue b/src/views/Jyh/Community/index.vue index 2ddfffc..6317245 100644 --- a/src/views/Jyh/Community/index.vue +++ b/src/views/Jyh/Community/index.vue @@ -25,7 +25,7 @@ 武汉开源生态数据可视化 @@ -34,7 +34,7 @@
-

武汉开源项目列表

+

武汉优质开源项目榜单

数据来源:
- + + + GitHub
@@ -72,7 +76,11 @@ @@ -135,7 +143,7 @@ @mouseleave="resumeDeveloperScroll">
- +
{{ name.charAt(0) }} @@ -147,7 +155,11 @@
- + + + 活跃
@@ -274,7 +286,14 @@
- + + + + +

加入武汉开源社区

与武汉本地开发者、企业、高校携手共建开源生态

@@ -291,95 +310,131 @@ import { onMounted, ref, nextTick, watch, onUnmounted, computed } from 'vue'; import * as echarts from 'echarts'; import { usePageResize } from '@/utils/hooks/usePageResize'; -import StatsBar from './StatsBar.vue' +import StatsBar from './StatsBar.vue'; const { widthType } = usePageResize(); // ================= 数据定义 ================= const githubProjects = ref([ - { name: 'DWSurvey', desc: '基于Vue+SpringBoot的问卷系统', stars: '3.2k' }, - { name: 'Eova', desc: '快速开发平台', stars: '2.8k' }, - { name: 'ClickVisual', desc: '日志分析平台', stars: '2.5k' }, - { name: 'Meta2d.js', desc: '2D可视化引擎', stars: '2.1k' }, - { name: 'Deepin Wine', desc: '在Linux运行Windows应用', stars: '6.5k' }, - { name: 'GoFrame', desc: 'Go语言企业级开发框架', stars: '11k' }, - { name: 'MindSpore', desc: '全场景AI计算框架(武汉所)', stars: '18k' }, - { name: 'IoTDB', desc: '物联网时序数据库', stars: '4.2k' } + { + name: 'bootstrap', + desc: 'The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web.', + stars: '174000' + }, + { + name: 'JavaGuide', + desc: 'Java 学习&面试指南(Go、Python 后端面试通用,计算机基础面试总结)。准备后端技术面试,首选 JavaGuide!', + stars: '153000' + }, + { + name: 'cpython', + desc: 'The Python programming language', + stars: '71000' + }, + { + name: 'core', + desc: '🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.', + stars: '52700' + }, + { + name: 'bevy', + desc: 'A refreshingly simple data-driven game engine built in Rust', + stars: '43900' + }, + { + name: 'linux-insides', + desc: 'A book-in-progress about the Linux kernel and its insides.', + stars: '31700' + }, + { + name: 'podman', + desc: 'Podman: A tool for managing OCI containers and pods.', + stars: '30300' + }, + { + name: 'fastai', + desc: 'The fastai deep learning library', + stars: '27800' + }, + { + name: 'OI-wiki', + desc: '🌟 Wiki of OI / ICPC for everyone. (某大型游戏线上攻略,内含炫酷算术魔法)', + stars: '25200' + }, + { + name: 'bilibili-API-collect', + desc: '哔哩哔哩-API收集整理【不断更新中....】', + stars: '20100' + } ]); const activeTab = ref(0); const excellentProjects = ref([ - { "name": "调问(DWSurvey)", "desc": "开源问卷表单系统", "org": "极推科技" }, - { "name": "Eova", "desc": "低代码开发平台", "org": "武汉简码" }, - { "name": "ClickVisual", "desc": "可视化日志分析告警平台", "org": "武汉初心" }, - { "name": "Meta2d.js", "desc": "2D图元可视化引擎", "org": "乐吾乐科技" }, - { "name": "Juno", "desc": "分布式微服务管理系统", "org": "武汉斗鱼" }, - { "name": "Opentalent", "desc": "开源人才评价系统", "org": "湖北大学" }, - { "name": "Fountain", "desc": "仓颉语言版 Spring 框架替代", "org": "江汉大学" }, - { "name": "deepin", "desc": "深度桌面操作系统", "org": "深之度" }, - { "name": "RustSBI", "desc": "RISC-V 安全引导程序", "org": "华中科技大学" }, - { "name": "NextDenovo", "desc": "长读长序列组装工具", "org": "武汉希望组" } + { 'name': '调问(DWSurvey)', 'desc': '开源问卷表单系统', 'org': '极推科技' }, + { 'name': 'Eova', 'desc': '低代码开发平台', 'org': '武汉简码' }, + { 'name': 'ClickVisual', 'desc': '可视化日志分析告警平台', 'org': '武汉初心' }, + { 'name': 'Meta2d.js', 'desc': '2D图元可视化引擎', 'org': '乐吾乐科技' }, + { 'name': 'Juno', 'desc': '分布式微服务管理系统', 'org': '武汉斗鱼' }, + { 'name': 'Opentalent', 'desc': '开源人才评价系统', 'org': '湖北大学' }, + { 'name': 'Fountain', 'desc': '仓颉语言版 Spring 框架替代', 'org': '江汉大学' }, + { 'name': 'deepin', 'desc': '深度桌面操作系统', 'org': '深之度' }, + { 'name': 'RustSBI', 'desc': 'RISC-V 安全引导程序', 'org': '华中科技大学' }, + { 'name': 'NextDenovo', 'desc': '长读长序列组装工具', 'org': '武汉希望组' } ]); const chinaExcellentProjects = ref([ { - "name": "Deepin 深度操作系统", - "desc": "国内领先的国产 Linux 发行版,旨在为全球用户提供美观易用、安全可靠的操作系统体验,是国产软件生态的核心。", - "org": "武汉深之度" + 'name': 'Deepin 深度操作系统', + 'desc': '国内领先的国产 Linux 发行版,旨在为全球用户提供美观易用、安全可靠的操作系统体验,是国产软件生态的核心。', + 'org': '武汉深之度' }, { - "name": "Jupiter 微服务治理框架", - "desc": "由斗鱼研发并开源的面向治理的微服务框架,支持多数据源、多注册中心,适用于高并发场景。", - "org": "武汉斗鱼" + 'name': 'Jupiter 微服务治理框架', + 'desc': '由斗鱼研发并开源的面向治理的微服务框架,支持多数据源、多注册中心,适用于高并发场景。', + 'org': '武汉斗鱼' }, { - "name": "RustSBI 安全引导程序", - "desc": "基于 Rust 语言开发的 RISC-V 指令集体系结构安全引导程序,提供更高内存安全性。", - "org": "华中科技大学" + 'name': 'RustSBI 安全引导程序', + 'desc': '基于 Rust 语言开发的 RISC-V 指令集体系结构安全引导程序,提供更高内存安全性。', + 'org': '华中科技大学' }, { - "name": "芯片开源 EDA 研发", - "desc": "致力于国产电子设计自动化工具开源化,解决芯片设计环节中的关键技术难题。", - "org": "华中科技大学" + 'name': '芯片开源 EDA 研发', + 'desc': '致力于国产电子设计自动化工具开源化,解决芯片设计环节中的关键技术难题。', + 'org': '华中科技大学' }, { - "name": "LuoJiaSET 框架与 LuoJiaSET 样本库", - "desc": "专注于智能遥感影像解译,提供海量遥感样本数据集和深度学习框架。", - "org": "武汉大学" + 'name': 'LuoJiaSET 框架与 LuoJiaSET 样本库', + 'desc': '专注于智能遥感影像解译,提供海量遥感样本数据集和深度学习框架。', + 'org': '武汉大学' }, { - "name": "鲲鹏安全库 (Kunpengsecl)", - "desc": "基于鲲鹏处理器的机密计算和受信任执行环境安全开发库,支撑云计算与隐私计算。", - "org": "武汉大学" + 'name': '鲲鹏安全库 (Kunpengsecl)', + 'desc': '基于鲲鹏处理器的机密计算和受信任执行环境安全开发库,支撑云计算与隐私计算。', + 'org': '武汉大学' }, { - "name": "柚坛工具箱 (Uotan Toolbox)", - "desc": "针对 Android 发烧友开发的图形化综合工具箱,集成刷机、系统优化等多种功能。", - "org": "武昌理工学院" + 'name': '柚坛工具箱 (Uotan Toolbox)', + 'desc': '针对 Android 发烧友开发的图形化综合工具箱,集成刷机、系统优化等多种功能。', + 'org': '武昌理工学院' }, { - "name": "凹语言 (Wa Language)", - "desc": "国内首个针对 WebAssembly 设计的通用编程语言,兼具 Web 灵活性与原生运行速度。", - "org": "武汉凹语言" + 'name': '凹语言 (Wa Language)', + 'desc': '国内首个针对 WebAssembly 设计的通用编程语言,兼具 Web 灵活性与原生运行速度。', + 'org': '武汉凹语言' }, { - "name": "OpenHIS 开源医疗系统", - "desc": "开源的医院信息系统,旨在通过标准化、模块化方式赋能基层医疗机构数字化升级。", - "org": "武汉新致新源" + 'name': 'OpenHIS 开源医疗系统', + 'desc': '开源的医院信息系统,旨在通过标准化、模块化方式赋能基层医疗机构数字化升级。', + 'org': '武汉新致新源' }, { - "name": "NextDenovo", - "desc": "高效且精确的长读长序列纠错和组装工具,主要用于基因组测序领域。", - "org": "武汉希望组生物科技有限公司" + 'name': 'NextDenovo', + 'desc': '高效且精确的长读长序列纠错和组装工具,主要用于基因组测序领域。', + 'org': '武汉希望组生物科技有限公司' } ]); -// 城市社区数量 -const cityCommunityData = { - xAxis: ['北京', '上海', '深圳', '杭州', '武汉', '成都'], - data: [42, 38, 35, 28, 22, 18] -}; - // 武汉知名社区数据 const wuhanCommunities = ref([ { name: 'Deepin (深度)', type: '操作系统', slogan: '最大的国产桌面操作系统开源社区' }, @@ -397,11 +452,11 @@ let communityTimer: NodeJS.Timeout | null = null; const switchCommunityTab = () => { if (activeCommunityTab.value === 1) { - activeCommunityTab.value = 0 + activeCommunityTab.value = 0; nextTick(() => initCommunityRankChart()); pauseCommunityScroll(); } else { - activeCommunityTab.value = 1 + activeCommunityTab.value = 1; nextTick(() => startCommunityScroll()); } }; @@ -428,10 +483,10 @@ const currentProjectList = computed(() => { }); const switchTab = (index: number) => { - if(activeTab.value===1) { - activeTab.value = 0 + if (activeTab.value === 1) { + activeTab.value = 0; } else { - activeTab.value = 1 + activeTab.value = 1; } nextTick(() => { if (scrollContainer2.value) scrollContainer2.value.scrollTop = 0; @@ -442,37 +497,63 @@ const switchTab = (index: number) => { const chartData = ref({ cityProject: { - xAxis: ['北京', '上海', '深圳', '杭州', '武汉', '成都', '广州'], - data: [12500, 11200, 9800, 8500, 6200, 5800, 5400] + xAxis: ['北京', '上海', '深圳', '杭州', '广州', '成都', '武汉', '南京', '西安', '重庆'], + data: [757259, 678614, 343417, 315406, 177003, 168300, 120827, 111593, 58678, 56564] }, talent: { - xAxis: ['北京', '深圳', '上海', '杭州', '武汉', '南京'], - data: [45000, 38000, 36000, 28000, 22000, 15000] + xAxis: ['北京', '上海', '广州', '深圳', '成都', '杭州', '武汉', '南京', '郑州', '长沙'], + data: [2115924, 1591988, 1555240, 1163580, 894108, 830306, 791335, 733581, 553397, 487971] }, communityRank: { xAxis: ['Deepin', 'OpenHarmony', 'MindSpore', 'IoTDB', 'GoFrame'], data: [95, 92, 88, 76, 72] }, club: { - xAxis: ['北京', '武汉', '上海', '西安', '南京'], - data: [28, 24, 20, 18, 15] + xAxis: ['成都', '北京', '上海', '武汉','重庆', '深圳', '苏州', '杭州', '合肥', '青岛' ], + data: [10, 7, 5, 4, 3, 2, 2, 2, 2, 2] }, policy: { - xAxis: ['北京', '上海', '广东', '江苏', '湖北', '浙江'], - data: [12, 10, 9, 8, 7, 6] + xAxis: [ + '江苏', '北京', '浙江', '广东', '上海', '湖北', '天津', + '陕西', '河南', '云南' + // '黑龙江','安徽省', '重庆市', '宁夏回族自治区', '山东省', '湖南省' + ], + data: [11, 7, 3, 3, 3, 2, 2, 2, 2, 2 + // 2, 2, 1, 1, 1, 1 + ] }, campus: { - xAxis: ['武汉', '北京', '成都', '深圳', '西安'], - data: [35, 32, 25, 20, 18] + xAxis: [ + '南京', '武汉', '北京', '长沙', '成都', '上海', '天津', '深圳', + '济南', '广州' + // '呼和浩特', '长春', '吉林', '沈阳', '苏州', '青岛', + // '惠州', '合肥', '佛山', '南昌', '南充', '徐州', '西安', '郑州', + // '贵阳', '线上', '哈尔滨', '宜宾', '杭州', '太原', '大连', '银川', + // '西宁', '中山', '乐山', '内江', '泸州', '常德', '昌吉', '桂林', + // '福州', '常州', '库尔勒', '兰州', '温州', '鄂州', '乌鲁木齐', '日照', + // '无锡', '重庆', '东莞', '赣州' + ], + data: [ + 20, 16, 16, 16, 11, 10, 8, 8, 7, 6 + // 5, 4, 3, 3, 3, 3, + // 3, 3, 3, 3, 3, 2, 2, 2, + // 2, 2, 2, 2, 2, 2, 2, 1, + // 1, 1, 1, 1, 1, 1, 1, 1, + // 1, 1, 1, 1, 1, 1, 1, 1, + // 1, 1, 1, 1 + ] }, mirrors: { - xAxis: ['清华TUNA', '中科大', '阿里', '华为', '华科HUST', '网易', '腾讯'], - data: [520, 480, 450, 420, 380, 300, 280] + xAxis: [ + '上海', '北京', '西安', '重庆', '济南', '南京', '武汉', '合肥', '香港', + '长春', '成都', '深圳', '兰州', '哈尔滨', '南阳', '杭州' + ], + data: [4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] } }); // 数据定义 -const developerNames = ['白纯骢', '陆红旭', '蔡冬亮', '张继德', '蒋周奇', '张天雄', '阮文俊', '李奇', '陈鹏轩', '杨帆']; +const developerNames = ['白纯骢', '陆红旭', '慕冬亮', '张继德', '蒋周奇', '张天雄', '阮文俊', '李奇', '陈鹏轩', '杨帆']; const developerScrollRef = ref(null); let developerTimer: NodeJS.Timeout | null = null; @@ -507,7 +588,7 @@ const isEmpty = ref({ club: false, policy: false, campus: false, mirrors: false }); -const chartInstances = ref<{[key: string]: echarts.ECharts | null}>({}); +const chartInstances = ref<{ [key: string]: echarts.ECharts | null }>({}); const scrollContainer1 = ref(null); const scrollContainer2 = ref(null); const scrollTimers: { [key: number]: NodeJS.Timeout | null } = { 1: null, 2: null }; @@ -529,7 +610,9 @@ const autoScroll = (key: number) => { }, 40); }; -const pauseScroll = (key: number) => { if (scrollTimers[key]) clearInterval(scrollTimers[key]!); }; +const pauseScroll = (key: number) => { + if (scrollTimers[key]) clearInterval(scrollTimers[key]!); +}; const resumeScroll = (key: number) => autoScroll(key); // ================= 图表初始化================= @@ -539,31 +622,37 @@ const colorPalette = ['#3b82f6', '#06b6d4', '#8b5cf6', '#ec4899', '#f59e0b']; // const initCityProjectChart = () => { const el = document.getElementById('cityProjectChart'); - if(!el) return; + if (!el) return; const myChart = echarts.init(el); chartInstances.value.cityProject = myChart; myChart.setOption({ tooltip: { trigger: 'axis', valueFormatter: (value: any) => value + ' 个' }, grid: commonGrid, xAxis: { type: 'category', data: chartData.value.cityProject.xAxis, axisLabel: { color: '#666', fontSize: 11 } }, - yAxis: { type: 'value',name: '单位:个', splitLine: { lineStyle: { type: 'dashed', color: '#eee' } } }, + yAxis: { type: 'value', name: '单位:个', splitLine: { lineStyle: { type: 'dashed', color: '#eee' } } }, series: [{ type: 'bar', data: chartData.value.cityProject.data, barWidth: '50%', - itemStyle: { borderRadius: [4, 4, 0, 0], color: new echarts.graphic.LinearGradient(0,0,0,1,[{offset:0,color:'#4F46E5'},{offset:1,color:'#818CF8'}]) } + itemStyle: { + borderRadius: [4, 4, 0, 0], + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: '#4F46E5' }, { + offset: 1, + color: '#818CF8' + }]) + } }] }); }; const initTalentChart = () => { const el = document.getElementById('talentChart'); - if(!el) return; + if (!el) return; const myChart = echarts.init(el); chartInstances.value.talent = myChart; myChart.setOption({ tooltip: { trigger: 'axis', valueFormatter: (value: any) => value + ' 人' }, grid: commonGrid, xAxis: { type: 'category', data: chartData.value.talent.xAxis, axisLabel: { color: '#666' } }, - yAxis: { type: 'value',name: '单位:人', splitLine: { lineStyle: { type: 'dashed', color: '#eee' } } }, + yAxis: { type: 'value', name: '单位:人', splitLine: { lineStyle: { type: 'dashed', color: '#eee' } } }, series: [{ type: 'bar', data: chartData.value.talent.data, barWidth: '50%', itemStyle: { borderRadius: [4, 4, 0, 0], color: '#F97316' } // 橙色 @@ -573,17 +662,28 @@ const initTalentChart = () => { const initDeveloperChart = () => { const el = document.getElementById('developerChart'); - if(!el) return; + if (!el) return; const myChart = echarts.init(el); chartInstances.value.developer = myChart; myChart.setOption({ tooltip: { trigger: 'axis', valueFormatter: (value: any) => value + ' 贡献分' }, grid: { left: '3%', right: '5%', bottom: '15px', top: '5%', containLabel: true }, xAxis: { type: 'value', show: false }, // 隐藏x轴 - yAxis: { type: 'category', data: chartData.value.developer.yAxis.reverse(), axisLine: {show: false}, axisTick: {show: false}, axisLabel: { color: '#333', fontWeight: 500 } }, + yAxis: { + type: 'category', + data: chartData.value.developer.yAxis.reverse(), + axisLine: { show: false }, + axisTick: { show: false }, + axisLabel: { color: '#333', fontWeight: 500 } + }, series: [{ type: 'bar', data: chartData.value.developer.data.reverse(), barWidth: 16, - itemStyle: { color: new echarts.graphic.LinearGradient(1,0,0,0,[{offset:0,color:'#7C3AED'},{offset:1,color:'#C4B5FD'}]), borderRadius: [0, 8, 8, 0] }, + itemStyle: { + color: new echarts.graphic.LinearGradient(1, 0, 0, 0, [{ offset: 0, color: '#7C3AED' }, { + offset: 1, + color: '#C4B5FD' + }]), borderRadius: [0, 8, 8, 0] + }, label: { show: false } // **修改点:隐藏具体分数** }] }); @@ -591,16 +691,20 @@ const initDeveloperChart = () => { const initCommunityRankChart = () => { const el = document.getElementById('communityRankChart'); - if(!el) return; + if (!el) return; const myChart = echarts.init(el); myChart.setOption({ tooltip: { trigger: 'axis', valueFormatter: (val: any) => val + ' 个' }, grid: { left: '3%', right: '4%', bottom: '15px', top: '22%', containLabel: true }, - xAxis: { type: 'category', data: ['北京', '上海', '深圳', '杭州', '武汉', '成都'], axisLabel: { color: '#666' } }, + xAxis: { + type: 'category', + data: ['北京', '深圳', '上海', '杭州', '广州', '成都', '南京', '武汉'], + axisLabel: { color: '#666' } + }, yAxis: { type: 'value', name: '单位:个', nameTextStyle: { color: '#999' } }, series: [{ type: 'bar', - data: [42, 38, 35, 28, 22, 18], + data: [69, 35, 31, 25, 18, 15, 12, 12], barWidth: '40%', itemStyle: { borderRadius: [4, 4, 0, 0], color: '#3b82f6' } }] @@ -609,14 +713,14 @@ const initCommunityRankChart = () => { const initClubChart = () => { const el = document.getElementById('clubChart'); - if(!el) return; + if (!el) return; const myChart = echarts.init(el); chartInstances.value.club = myChart; myChart.setOption({ tooltip: { trigger: 'axis', valueFormatter: (value: any) => value + ' 个' }, grid: commonGrid, xAxis: { type: 'category', data: chartData.value.club.xAxis, axisLabel: { color: '#666' } }, - yAxis: { type: 'value',name: '单位:个', splitLine: { lineStyle: { type: 'dashed', color: '#eee' } } }, + yAxis: { type: 'value', name: '单位:个', splitLine: { lineStyle: { type: 'dashed', color: '#eee' } } }, series: [{ type: 'line', data: chartData.value.club.data, smooth: true, symbolSize: 8, @@ -629,14 +733,14 @@ const initClubChart = () => { const initPolicyChart = () => { const el = document.getElementById('policyChart'); - if(!el) return; + if (!el) return; const myChart = echarts.init(el); chartInstances.value.policy = myChart; myChart.setOption({ tooltip: { trigger: 'axis', valueFormatter: (value: any) => value + ' 条' }, grid: commonGrid, - xAxis: { type: 'category', data: chartData.value.policy.xAxis, axisLabel: { color: '#666' } }, - yAxis: { type: 'value', name: '单位:条',splitLine: { lineStyle: { type: 'dashed', color: '#eee' } } }, + xAxis: { type: 'category', data: chartData.value.policy.xAxis, axisLabel: { color: '#666', interval: 0 } }, + yAxis: { type: 'value', name: '单位:条', splitLine: { lineStyle: { type: 'dashed', color: '#eee' } } }, series: [{ type: 'bar', data: chartData.value.policy.data, barWidth: '45%', itemStyle: { borderRadius: [4, 4, 0, 0], color: '#2563EB' } // 蓝色 @@ -646,7 +750,7 @@ const initPolicyChart = () => { const initCampusChart = () => { const el = document.getElementById('campusChart'); - if(!el) return; + if (!el) return; const myChart = echarts.init(el); chartInstances.value.campus = myChart; // **修改点:去掉三角形pictorialBar,改为美观的圆角柱状图** @@ -654,7 +758,7 @@ const initCampusChart = () => { tooltip: { trigger: 'axis', valueFormatter: (value: any) => value + ' 场' }, grid: commonGrid, xAxis: { type: 'category', data: chartData.value.campus.xAxis, axisLabel: { color: '#666' } }, - yAxis: { type: 'value',name: '单位:场次', splitLine: { lineStyle: { type: 'dashed', color: '#eee' } } }, + yAxis: { type: 'value', name: '单位:场次', splitLine: { lineStyle: { type: 'dashed', color: '#eee' } } }, series: [{ type: 'bar', data: chartData.value.campus.data, @@ -673,14 +777,14 @@ const initCampusChart = () => { const initMirrorChart = () => { const el = document.getElementById('mirrorChart'); - if(!el) return; + if (!el) return; const myChart = echarts.init(el); chartInstances.value.mirrors = myChart; myChart.setOption({ tooltip: { trigger: 'axis', valueFormatter: (value: any) => value + ' 个节点' }, grid: { left: '3%', right: '3%', bottom: '15px', top: '15%', containLabel: true }, xAxis: { type: 'category', data: chartData.value.mirrors.xAxis, axisLabel: { color: '#666' } }, - yAxis: { type: 'value',name: '单位:个', splitLine: { lineStyle: { type: 'dashed', color: '#eee' } } }, + yAxis: { type: 'value', name: '单位:个', splitLine: { lineStyle: { type: 'dashed', color: '#eee' } } }, series: [{ type: 'bar', data: chartData.value.mirrors.data, barWidth: 30, @@ -697,30 +801,49 @@ const initMirrorChart = () => { const initCharts = () => { nextTick(() => { - initCityProjectChart(); initTalentChart(); initDeveloperChart(); - initCommunityRankChart(); initClubChart(); initPolicyChart(); - initCampusChart(); initMirrorChart(); + initCityProjectChart(); + initTalentChart(); + initDeveloperChart(); + initCommunityRankChart(); + initClubChart(); + initPolicyChart(); + initCampusChart(); + initMirrorChart(); }); }; const init = () => { nextTick(() => { - initCityProjectChart(); initTalentChart(); initDeveloperChart(); - initCommunityRankChart(); initClubChart(); initPolicyChart(); - initCampusChart(); initMirrorChart(); + initCityProjectChart(); + initTalentChart(); + initDeveloperChart(); + initCommunityRankChart(); + initClubChart(); + initPolicyChart(); + initCampusChart(); + initMirrorChart(); - autoScroll(1); autoScroll(2);startCommunityScroll();startDeveloperScroll(); + autoScroll(1); + autoScroll(2); + startCommunityScroll(); + startDeveloperScroll(); }); -} +}; const unInit = () => { Object.values(scrollTimers).forEach(t => t && clearInterval(t)); pauseDeveloperScroll(); pauseCommunityScroll(); -} +}; -watch(widthType, () => { init() }); -onMounted(() => { init() }); -onUnmounted(() => { unInit() }); +watch(widthType, () => { + init(); +}); +onMounted(() => { + init(); +}); +onUnmounted(() => { + unInit(); +}); From 7b0e00bed5c1a90f41e1db6a078c690f28acf135 Mon Sep 17 00:00:00 2001 From: fmk1023 Date: Mon, 12 Jan 2026 17:44:58 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=80=81=E5=8A=BF=E6=84=9F=E7=9F=A5?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0-=E5=A2=9E=E5=8A=A0=E6=AD=A6=E6=B1=89?= =?UTF-8?q?=E5=B8=82=E5=BC=80=E6=BA=90=E5=BB=BA=E8=AE=BE=E7=94=9F=E6=80=81?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/Jyh/Community/index.vue | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/views/Jyh/Community/index.vue b/src/views/Jyh/Community/index.vue index 6317245..4122bbd 100644 --- a/src/views/Jyh/Community/index.vue +++ b/src/views/Jyh/Community/index.vue @@ -437,13 +437,18 @@ const chinaExcellentProjects = ref([ // 武汉知名社区数据 const wuhanCommunities = ref([ - { name: 'Deepin (深度)', type: '操作系统', slogan: '最大的国产桌面操作系统开源社区' }, - { name: 'OpenHarmony 武汉', type: '万物互联', slogan: '华科/武大等高校深度参与的终端操作系统' }, - { name: 'MindSpore 武汉', type: '人工智能', slogan: '昇思全场景AI框架武汉开发者社区' }, - { name: 'IoTDB 社区', type: '工业物联网', slogan: '源自清华在汉广泛应用的工业时序数据库' }, - { name: 'GoFrame 社区', type: '后端开发', slogan: '模块化、全栈式、模块化的Go语言开发框架' }, - { name: '飞桨 (PaddlePaddle)', type: '深度学习', slogan: '百度武汉开源生态开发者汇聚地' }, - { name: '极狐 GitLab 武汉', type: 'DevOps', slogan: '开源信息基础设施与协同开发平台' } + { name: '黄鹤开源社区', type: '核心生态', slogan: '国家级、城市级开源社区平台,武汉开源生态的核心枢纽' }, + { name: '深度社区 (Deepin)', type: '操作系统', slogan: '全球最大桌面操作系统社区之一,全球用户超过 750 万' }, + { name: '极狐社区 (GitLab China)', type: 'DevOps', slogan: '全球第二大开源托管平台 GitLab 在汉设立的中国发行版及开发者社区' }, + { name: '开源鸿蒙社区 (OpenHarmony)', type: '万物互联', slogan: '国家级生态创新中心,设有全国首个分委会' }, + { name: 'PostgreSQL 中文社区', type: '数据库', slogan: '全球四大开源数据库之一的运营中心设在武汉' }, + { name: '武汉大学开源社区', type: '学术社团', slogan: '老牌社团,涉及 Linux、嵌入式、深度学习等方向' }, + { name: '武汉大学 OpenHarmony 俱乐部', type: '万物互联', slogan: '专注于华为开源鸿蒙生态' }, + { name: '华中科技大学开源社团', type: '学术社团', slogan: '常年组织 LUG (Linux User Group) 及黑客松活动' }, + { name: '武汉理工大学开源联盟', type: '学术社团', slogan: '聚焦计算机科学与软件工程方向' }, + { name: '华中师范大学', type: '兴趣小组', slogan: '开源技术兴趣小组' }, + { name: '中南民族大学', type: '兴趣小组', slogan: '开源技术兴趣小组' }, + { name: '湖北大学', type: '兴趣小组', slogan: '开源技术兴趣小组' } ]); const activeCommunityTab = ref(0);