|
|
|
|
@@ -311,12 +311,23 @@ import * as echarts from 'echarts';
|
|
|
|
|
import { usePageResize } from '@/utils/hooks/usePageResize';
|
|
|
|
|
import StatsBar from './components/StatsBar.vue';
|
|
|
|
|
import HarmonyEcoCharts from './components/HarmonyEcoCharts.vue';
|
|
|
|
|
import { wuhanGithubProjectsPage3, cityProjectPage3, chinaExcellentProjectsPage3, excellentProjectsPage3, talentPage3 } from '@/api/jyh/situation';
|
|
|
|
|
import { wuhanGithubProjectsPage3, cityProjectPage3, chinaExcellentProjectsPage3, excellentProjectsPage3, talentPage3,
|
|
|
|
|
developerNamesPage3, communityRankChartPage3, wuhanCommunitiesPage3, ClubPage3, policyPage3, campusPage3, mirrorsPage3 } from '@/api/jyh/situation';
|
|
|
|
|
|
|
|
|
|
const { widthType } = usePageResize();
|
|
|
|
|
|
|
|
|
|
const githubProjects = ref([]);
|
|
|
|
|
|
|
|
|
|
const activeTab = ref(0);
|
|
|
|
|
|
|
|
|
|
const excellentProjects = ref([]);
|
|
|
|
|
|
|
|
|
|
const chinaExcellentProjects = ref([]);
|
|
|
|
|
|
|
|
|
|
const developerNames = ref([]);
|
|
|
|
|
|
|
|
|
|
const wuhanCommunities = ref([]);
|
|
|
|
|
|
|
|
|
|
// 武汉优质开源项目备用数据
|
|
|
|
|
const setgithubProjectsdata = () => {
|
|
|
|
|
githubProjects.value = [
|
|
|
|
|
@@ -451,11 +462,33 @@ const fetchTalentData = async() => {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const activeTab = ref(0);
|
|
|
|
|
// 城市社区数量排行备用数据
|
|
|
|
|
const setCommunityRankDefaultData = () => {
|
|
|
|
|
chartData.value.communityRank.xAxis = ['北京', '深圳', '上海', '杭州', '广州', '成都', '南京', '武汉'];
|
|
|
|
|
chartData.value.communityRank.data = [69, 35, 31, 25, 18, 15, 12, 12];
|
|
|
|
|
isEmpty.value.communityRank = false;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const excellentProjects = ref([]);
|
|
|
|
|
|
|
|
|
|
const chinaExcellentProjects = ref([]);
|
|
|
|
|
// 获取武汉社区数量排行数据
|
|
|
|
|
const fetchCommunityRankData = async() => {
|
|
|
|
|
try {
|
|
|
|
|
const response = await communityRankChartPage3();
|
|
|
|
|
const communitydata = response.data;
|
|
|
|
|
if (communitydata?.code === 200 && communitydata?.data) {
|
|
|
|
|
// 更新图表数据
|
|
|
|
|
chartData.value.communityRank.xAxis = communitydata.data.map(item => item.name);
|
|
|
|
|
chartData.value.communityRank.data = communitydata.data.map(item => item.value);
|
|
|
|
|
// 设置非空状态
|
|
|
|
|
isEmpty.value.communityRank = false;
|
|
|
|
|
} else {
|
|
|
|
|
console.error('获取城市社区数量排行数据失败:', communitydata?.msg || '未知错误');
|
|
|
|
|
setCommunityRankDefaultData();
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('请求城市社区数量排行数据时发生错误:', error);
|
|
|
|
|
setCommunityRankDefaultData();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 2024武汉优秀开源项目备用数据
|
|
|
|
|
const chinaExcellentProjectsdata = () => {
|
|
|
|
|
@@ -561,7 +594,34 @@ const fetchexcellentProjects = async() => {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const wuhanCommunities = ref([
|
|
|
|
|
// 武汉明星开发者贡献榜备用数据
|
|
|
|
|
const setDeveloperNamesDefaultData = () => {
|
|
|
|
|
developerNames.value = ['白纯骢', '陆红旭', '慕冬亮', '张继德', '蒋周奇', '张天雄', '阮文俊', '李奇', '陈鹏轩', '杨帆'];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 获取武汉明星开发者贡献榜数据
|
|
|
|
|
const fetchDeveloperNamesData = async() => {
|
|
|
|
|
try {
|
|
|
|
|
const response = await developerNamesPage3();
|
|
|
|
|
const developerdata = response.data;
|
|
|
|
|
if (developerdata?.code === 200 && developerdata?.data) {
|
|
|
|
|
// 更新开发者名单 - 后端返回字段为 name
|
|
|
|
|
developerNames.value = developerdata.data.map(item => item.name);
|
|
|
|
|
// 设置非空状态
|
|
|
|
|
isEmpty.value.developer = false;
|
|
|
|
|
} else {
|
|
|
|
|
console.error('获取武汉明星开发者贡献榜数据失败:', developerdata?.msg || '未知错误');
|
|
|
|
|
setDeveloperNamesDefaultData();
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('请求武汉明星开发者贡献榜数据时发生错误:', error);
|
|
|
|
|
setDeveloperNamesDefaultData();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 武汉知名开源社区备用数据
|
|
|
|
|
const setwuhanCommunitiesdata = () => {
|
|
|
|
|
wuhanCommunities.value = [
|
|
|
|
|
{ name: '黄鹤开源社区', type: '核心生态', slogan: '国家级、城市级开源社区平台,武汉开源生态的核心枢纽' },
|
|
|
|
|
{ name: '深度社区 (Deepin)', type: '操作系统', slogan: '全球最大桌面操作系统社区之一,全球用户超过 750 万' },
|
|
|
|
|
{
|
|
|
|
|
@@ -578,10 +638,122 @@ const wuhanCommunities = ref([
|
|
|
|
|
{ name: '华中师范大学', type: '兴趣小组', slogan: '开源技术兴趣小组' },
|
|
|
|
|
{ name: '中南民族大学', type: '兴趣小组', slogan: '开源技术兴趣小组' },
|
|
|
|
|
{ name: '湖北大学', type: '兴趣小组', slogan: '开源技术兴趣小组' }
|
|
|
|
|
]);
|
|
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 开发者名单
|
|
|
|
|
const developerNames = ['白纯骢', '陆红旭', '慕冬亮', '张继德', '蒋周奇', '张天雄', '阮文俊', '李奇', '陈鹏轩', '杨帆'];
|
|
|
|
|
const fetchwuhanCommunities = async() => {
|
|
|
|
|
try {
|
|
|
|
|
const response = await wuhanCommunitiesPage3();
|
|
|
|
|
const communitydata = response.data;
|
|
|
|
|
if (communitydata?.code === 200 && communitydata?.data) {
|
|
|
|
|
wuhanCommunities.value = communitydata.data;
|
|
|
|
|
} else {
|
|
|
|
|
console.error('获取武汉知名开源社区数据失败:', communitydata?.msg || '未知错误');
|
|
|
|
|
setwuhanCommunitiesdata();
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('请求武汉知名开源社区数据时发生错误:', error);
|
|
|
|
|
setwuhanCommunitiesdata();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 重点城市高校开源社团数量备用数据
|
|
|
|
|
const setClubdata = () => {
|
|
|
|
|
chartData.value.club.xAxis = ['成都', '北京', '上海', '武汉', '重庆', '深圳', '苏州', '杭州', '合肥', '青岛'];
|
|
|
|
|
chartData.value.club.data = [10, 7, 5, 4, 3, 2, 2, 2, 2, 2];
|
|
|
|
|
isEmpty.value.club = false;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const fetchclubData = async() => {
|
|
|
|
|
try {
|
|
|
|
|
const response = await ClubPage3();
|
|
|
|
|
const clubdata = response.data;
|
|
|
|
|
if (clubdata?.code === 200 && clubdata?.data) {
|
|
|
|
|
chartData.value.club.xAxis = clubdata.data.map(item => item.name);
|
|
|
|
|
chartData.value.club.data = clubdata.data.map(item => item.number);
|
|
|
|
|
isEmpty.value.club = false;
|
|
|
|
|
} else {
|
|
|
|
|
console.error('获取重点城市高校开源社团数量数据失败:', clubdata?.msg || '未知错误');
|
|
|
|
|
setClubdata();
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('请求重点城市高校开源社团数量数据时发生错误:', error);
|
|
|
|
|
setClubdata();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 各省市开源相关政策发布数量备用数据
|
|
|
|
|
const setPolicydata = () => {
|
|
|
|
|
chartData.value.policy.xAxis = ['江苏', '北京', '浙江', '广东', '上海', '湖北', '天津', '陕西', '河南', '云南'];
|
|
|
|
|
chartData.value.policy.data = [11, 7, 3, 3, 3, 2, 2, 2, 2, 2];
|
|
|
|
|
isEmpty.value.policy = false;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const fetchpolicyData = async() => {
|
|
|
|
|
try {
|
|
|
|
|
const response = await policyPage3();
|
|
|
|
|
const policydata = response.data;
|
|
|
|
|
if (policydata?.code === 200 && policydata?.data) {
|
|
|
|
|
chartData.value.policy.xAxis = policydata.data.map(item => item.name);
|
|
|
|
|
chartData.value.policy.data = policydata.data.map(item => item.number);
|
|
|
|
|
isEmpty.value.policy = false;
|
|
|
|
|
} else {
|
|
|
|
|
console.error('获取各省市开源相关政策发布数量数据失败:', policydata?.msg || '未知错误');
|
|
|
|
|
setPolicydata();
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('请求各省市开源相关政策发布数量数据时发生错误:', error);
|
|
|
|
|
setPolicydata();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 开放原子校园行·城市活动场次备用数据
|
|
|
|
|
const setcampusdata = () => {
|
|
|
|
|
chartData.value.campus.xAxis = ['南京', '武汉', '北京', '长沙', '成都', '上海', '天津', '深圳', '济南', '广州'];
|
|
|
|
|
chartData.value.campus.data = [20, 16, 16, 16, 11, 10, 8, 8, 7, 6];
|
|
|
|
|
isEmpty.value.campus = false;
|
|
|
|
|
};
|
|
|
|
|
const fetchcampusData = async() => {
|
|
|
|
|
try {
|
|
|
|
|
const response = await campusPage3();
|
|
|
|
|
const campusdata = response.data;
|
|
|
|
|
if (campusdata?.code === 200 && campusdata?.data) {
|
|
|
|
|
chartData.value.campus.xAxis = campusdata.data.map(item => item.name);
|
|
|
|
|
chartData.value.campus.data = campusdata.data.map(item => item.number);
|
|
|
|
|
isEmpty.value.campus = false;
|
|
|
|
|
} else {
|
|
|
|
|
console.error('获取开放原子校园行·城市活动场次数据失败:', campusdata?.msg || '未知错误');
|
|
|
|
|
setcampusdata();
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('请求开放原子校园行·城市活动场次数据时发生错误:', error);
|
|
|
|
|
setcampusdata();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 全国重点城市开源镜像站/节点数量对比备用数据
|
|
|
|
|
const setmirrorsdata = () => {
|
|
|
|
|
chartData.value.mirrors.xAxis = ['上海', '北京', '西安', '重庆', '济南', '南京', '武汉', '合肥', '香港', '长春', '成都', '深圳', '兰州', '哈尔滨', '南阳', '杭州'];
|
|
|
|
|
chartData.value.mirrors.data = [4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
|
|
|
|
|
isEmpty.value.mirrors = false;
|
|
|
|
|
};
|
|
|
|
|
const fetchmirrorsData = async() => {
|
|
|
|
|
try {
|
|
|
|
|
const response = await mirrorsPage3();
|
|
|
|
|
const mirrorsdata = response.data;
|
|
|
|
|
if (mirrorsdata?.code === 200 && mirrorsdata?.data) {
|
|
|
|
|
chartData.value.mirrors.xAxis = mirrorsdata.data.map(item => item.name);
|
|
|
|
|
chartData.value.mirrors.data = mirrorsdata.data.map(item => item.number);
|
|
|
|
|
isEmpty.value.mirrors = false;
|
|
|
|
|
} else {
|
|
|
|
|
console.error('获取全国重点城市开源镜像站/节点数量对比数据失败:', mirrorsdata?.msg || '未知错误');
|
|
|
|
|
setmirrorsdata();
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('请求全国重点城市开源镜像站/节点数量对比数据时发生错误:', error);
|
|
|
|
|
setmirrorsdata();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 图表数据
|
|
|
|
|
const chartData = ref({
|
|
|
|
|
@@ -598,20 +770,20 @@ const chartData = ref({
|
|
|
|
|
data: [95, 92, 88, 76, 72]
|
|
|
|
|
},
|
|
|
|
|
club: {
|
|
|
|
|
xAxis: ['成都', '北京', '上海', '武汉', '重庆', '深圳', '苏州', '杭州', '合肥', '青岛'],
|
|
|
|
|
data: [10, 7, 5, 4, 3, 2, 2, 2, 2, 2]
|
|
|
|
|
xAxis: [],
|
|
|
|
|
data: []
|
|
|
|
|
},
|
|
|
|
|
policy: {
|
|
|
|
|
xAxis: ['江苏', '北京', '浙江', '广东', '上海', '湖北', '天津', '陕西', '河南', '云南'],
|
|
|
|
|
data: [11, 7, 3, 3, 3, 2, 2, 2, 2, 2]
|
|
|
|
|
xAxis: [],
|
|
|
|
|
data: []
|
|
|
|
|
},
|
|
|
|
|
campus: {
|
|
|
|
|
xAxis: ['南京', '武汉', '北京', '长沙', '成都', '上海', '天津', '深圳', '济南', '广州'],
|
|
|
|
|
data: [20, 16, 16, 16, 11, 10, 8, 8, 7, 6]
|
|
|
|
|
xAxis: [],
|
|
|
|
|
data: []
|
|
|
|
|
},
|
|
|
|
|
mirrors: {
|
|
|
|
|
xAxis: ['上海', '北京', '西安', '重庆', '济南', '南京', '武汉', '合肥', '香港', '长春', '成都', '深圳', '兰州', '哈尔滨', '南阳', '杭州'],
|
|
|
|
|
data: [4, 4, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
|
|
|
|
xAxis: [],
|
|
|
|
|
data: []
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
@@ -776,12 +948,14 @@ const initCommunityRankChart = () => {
|
|
|
|
|
grid: { left: '3%', right: '4%', bottom: '15px', top: '22%', containLabel: true },
|
|
|
|
|
xAxis: {
|
|
|
|
|
type: 'category',
|
|
|
|
|
data: ['北京', '深圳', '上海', '杭州', '广州', '成都', '南京', '武汉'],
|
|
|
|
|
data: chartData.value.communityRank.xAxis,
|
|
|
|
|
axisLabel: { color: '#666' }
|
|
|
|
|
},
|
|
|
|
|
yAxis: { type: 'value', name: '单位:个', nameTextStyle: { color: '#999' } },
|
|
|
|
|
yAxis: { type: 'value', name: '单位:个', nameTextStyle: { color: '#999' }},
|
|
|
|
|
series: [{
|
|
|
|
|
type: 'bar', data: [69, 35, 31, 25, 18, 15, 12, 12], barWidth: '40%',
|
|
|
|
|
type: 'bar',
|
|
|
|
|
data: chartData.value.communityRank.data,
|
|
|
|
|
barWidth: '40%',
|
|
|
|
|
itemStyle: { borderRadius: [4, 4, 0, 0], color: '#3b82f6' }
|
|
|
|
|
}]
|
|
|
|
|
});
|
|
|
|
|
@@ -795,8 +969,8 @@ const initClubChart = () => {
|
|
|
|
|
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' } } },
|
|
|
|
|
xAxis: { type: 'category', data: chartData.value.club.xAxis, axisLabel: { color: '#666' }},
|
|
|
|
|
yAxis: { type: 'value', name: '单位:个', splitLine: { lineStyle: { type: 'dashed', color: '#eee' }}},
|
|
|
|
|
series: [{
|
|
|
|
|
type: 'line', data: chartData.value.club.data, smooth: true, symbolSize: 8,
|
|
|
|
|
lineStyle: { width: 3, color: '#F59E0B' },
|
|
|
|
|
@@ -897,11 +1071,18 @@ watch(widthType, () => {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
onMounted(async() => {
|
|
|
|
|
await fetchGithubProjects();
|
|
|
|
|
await fetchGithubProjects(); // 获取武汉优质开源项目榜数据
|
|
|
|
|
await fetchCityProjectData(); // 获取城市项目数据
|
|
|
|
|
await fetchTalentData(); // 获取城市人才数据
|
|
|
|
|
await fetchDeveloperNamesData(); // 获取武汉明星开发者贡献榜数据
|
|
|
|
|
await fetchchinaExcellentProjects(); // 获取2024中国优秀开源项目数据
|
|
|
|
|
await fetchexcellentProjects(); // 获取2025武汉优秀开源项目数据
|
|
|
|
|
await fetchCommunityRankData(); // 获取城市社区数量排行数据
|
|
|
|
|
await fetchwuhanCommunities(); // 获取武汉知名开源社区数据
|
|
|
|
|
await fetchclubData(); // 获取重点城市高校开源社团数量数据
|
|
|
|
|
await fetchpolicyData(); // 获取各省市开源相关政策发布数量数据
|
|
|
|
|
await fetchcampusData(); // 获取开放原子校园行·城市活动场次数据
|
|
|
|
|
await fetchmirrorsData(); // 获取全国重点城市开源镜像站/节点数量对比数据
|
|
|
|
|
init(); // 再初始化图表
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|