工程研究中心列+详情页接口对接

This commit is contained in:
“zhuzihan”  2025-06-26 14:10:48 +08:00
parent a8127a4bfa
commit 9c8b3b240e
2 changed files with 119 additions and 153 deletions

View File

@ -213,6 +213,15 @@
const awardsChartRef = ref(null)
const fundingChartRef = ref(null)
const newsListRef = ref(null)
//
const labData = ref({
datax: [],
datay: []
})
const labLineData = ref({
datax: [],
datay: []
})
// DeepSeek
const chatMessagesRef = ref(null)
@ -363,7 +372,6 @@
const data = await response.json();
console.log("仪表盘数据:", data);
dashboardData.value = data.data;
// UI
if (data) {
//
@ -385,7 +393,92 @@
loading.value = false;
}
};
const fetchLabData = async () => {
try {
const res = await fetch(`${getApiBaseUrl()}/admin-api/pg/research-data-dashboard/get-release`);
if (res) {
const data = await res.json();
// keyFields
const keyFields = data.data.keyFields || [];
const datax = keyFields.map(item => item.fieldName);
const datay = keyFields.map(item => item.quantity);
labData.value = {
datax,
datay
};
//
updateLabBarChart();
} else {
console.error('获取工程研究中心数据失败:', response.statusText);
}
} catch (error) {
console.error('获取工程研究中心数据出错:', error);
} finally {
loading.value = false;
}
};
const fetchLabData2 = async () => {
try {
const res = await fetch(`${getApiBaseUrl()}/admin-api/pg/changes-in-achievements/get-release`);
if (res) {
const data = await res.json();
// keyFields
const afterAnalysis = data.data.afterAnalysis || [];
const datax = [];
const datay = [];
afterAnalysis.forEach(item => {
const year = Object.keys(item)[0]; //
const quantity = item[year]; //
datax.push(year);
datay.push(quantity);
});
labLineData.value = {
datax,
datay
};
//
updateLabLineChart();
} else {
console.error('获取工程研究中心数据失败:', response.statusText);
}
} catch (error) {
console.error('获取工程研究中心数据出错:', error);
} finally {
loading.value = false;
}
};
//
const updateLabBarChart = () => {
const labBarChart = echarts.getInstanceByDom(labBarChartRef.value);
if (labBarChart) {
labBarChart.setOption({
xAxis: {
data: labData.value.datax
},
series: [
{
data: labData.value.datay
}
]
});
}
}
const updateLabLineChart = () => {
const labLineChart = echarts.getInstanceByDom(labLineChartRef.value);
if (labLineChart) {
labLineChart.setOption({
xAxis: {
data: labLineData.value.datax
},
series: [
{
data: labLineData.value.datay
}
]
});
}
};
// 使
const updateChartsWithDashboardData = () => {
if (!dashboardData.value) return;
@ -468,7 +561,7 @@
},
xAxis: {
type: 'category',
data: ['国家重点工程研究中心', '工程研究中心总数'],
data: labData.value.datax,
axisLine: { lineStyle: { color: '#fff' } },
axisLabel: { color: '#fff' }
},
@ -488,7 +581,7 @@
series: [
{
type: 'bar',
data: [20, 150],
data: labData.value.datay,
itemStyle: { color: '#4080ff' },
barWidth: '15%',
label: {
@ -523,7 +616,7 @@
},
xAxis: {
type: 'category',
data: ['2023', '2024', '2025'],
data: labLineData.value.datax,
axisLine: { lineStyle: { color: '#fff' } },
axisLabel: { color: '#fff' }
},
@ -543,7 +636,7 @@
series: [
{
type: 'line',
data: [145, 160, 175],
data: labLineData.value.datay,
lineStyle: { color: '#ffd700', width: 3 },
itemStyle: { color: '#ffd700' },
symbolSize: 8
@ -715,9 +808,12 @@
}
// -
onMounted(() => {
onMounted(async() => {
//
await fetchLabData();
await fetchLabData2();
//
fetchDashboardData();
await fetchDashboardData();
//
nextTick(() => {

View File

@ -15,43 +15,6 @@
<!-- 主内容区域 -->
<div class="content-container">
<!-- 左侧维度设置 -->
<!-- <div class="dimension-sidebar">
<div class="dimension-content">
<h2 class="dimension-section-title">评估维度设置</h2>
<div class="dimension-list custom-scrollbar">
<div v-for="(dim, index) in dimensions" :key="index" class="dimension-item primary-dimension">
<div class="dimension-header" @click="editDimension(dim, index)">
<div class="dimension-name">
<label>{{ dim.name }}</label>
</div>
<div class="dimension-expand">
<span class="expand-icon"></span>
</div>
</div>
<div class="sub-dimensions">
<div v-for="(subDim, subIndex) in dim.subDimensions" :key="`${index}-${subIndex}`" class="dimension-item sub-dimension">
<div class="dimension-name">
<label>{{ subDim.name }}</label>
</div>
<div class="dimension-weight">
<span class="weight-label">W:</span>
<span class="weight-value">{{ subDim.weight }}%</span>
</div>
</div>
</div>
</div>
<div class="dimension-add" @click="openDimensionDrawer">
<span class="add-icon">+</span>
<span class="add-text">添加自定义维度</span>
</div>
</div>
</div>
</div> -->
<!-- 右侧内容区 -->
<div class="main-content">
<!-- 搜索和操作栏 -->
@ -85,31 +48,31 @@
<div v-for="(lab, index) in filteredLabs" :key="index" class="lab-card" style="height: 440px;">
<!-- <div v-for="(lab, index) in filteredLabs" :key="index" class="lab-card" style="height: 440px;" @click="openLabDetail(lab)"> -->
<div class="card-header">
<span class="lab-id">ID: {{ lab.idcode || lab.id }}</span>
<span class="lab-id">ID: {{ lab.basicInformation.name0 || lab.id }}</span>
<!-- <span class="total-score">综合评估分数: <span class="score-value">{{ lab.score }}</span></span> -->
</div>
<div class="card-content">
<div class="lab-image">
<img :src="lab.image" alt="工程研究中心图片" />
<img :src="lab.basicInformation.name5" alt="工程研究中心图片" />
</div>
<div class="lab-info">
<div class="info-item">
<span class="info-label">研究中心名称:</span>
<span class="info-value">{{ lab.name }}</span>
<span class="info-value">{{ lab.basicInformation.name1 }}</span>
</div>
<div class="info-item">
<span class="info-label">所属领域:</span>
<span class="info-value">{{ lab.field }}</span>
<span class="info-value">{{ lab.basicInformation.name2 }}</span>
</div>
<div class="info-item">
<span class="info-label">所属学校:</span>
<span class="info-value">{{ lab.school }}</span>
<span class="info-value">{{ lab.basicInformation.name3 }}</span>
</div>
<div class="info-item">
<span class="info-label">主管部门:</span>
<span class="info-value">{{ lab.department }}</span>
<span class="info-value">{{ lab.basicInformation.name4 }}</span>
</div>
</div>
@ -226,68 +189,23 @@ const labs = ref([]);
//
const filteredLabs = ref([]);
//
function assignUniqueLabImages() {
//
labs.value.forEach((lab, index) => {
// 1-6
const photoIndex = (index % 6) + 1;
lab.image = `/image/实验室${photoIndex}.png`;
});
}
//
onMounted(async () => {
try {
//
const response = await axios.get(`${getApiBaseUrl()}/admin-api/pg/J-dimensions/lab`);
dimensions.value = response.data.data;
dimensions.value.forEach(dim => {
if (typeof dim.subDimensions === 'string') {
try {
dim.subDimensions = JSON.parse(dim.subDimensions);
} catch (error) {
console.error(`解析 subDimensions 失败: ${dim.name}`, error);
dim.subDimensions = []; //
}
}
});
//
await loadLabs();
// handleSearchloadLabs
} catch (error) {
console.error('获取维度数据失败:', error);
ElMessage.error('获取维度数据失败');
}
await loadLabs();
});
//
const loadLabs = async () => {
try {
const response = await axios.get(`${getApiBaseUrl()}/admin-api/pg/J-labs/labs`);
const response = await axios.get(`${getApiBaseUrl()}/admin-api/pg/evaluation-results/get-release`);
labs.value = response.data.data;
//
assignUniqueLabImages();
//
labs.value.forEach(lab => {
//
if (!lab.score && lab.evaluationData && lab.evaluationData.length > 0) {
//
lab.score = Math.round(lab.evaluationData.reduce((a, b) => a + b, 0) / lab.evaluationData.length);
}
});
//
handleSearch();
// DOM
setTimeout(() => {
updateAllRadarCharts();
}, 100);
} catch (error) {
console.error('获取工程研究中心数据失败:', error);
ElMessage.error('获取工程研究中心数据失败');
}
};
@ -310,61 +228,13 @@ const updateAllRadarCharts = () => {
const chart = echarts.init(chartDom);
//
const indicators = [];
if (dimensions.value && dimensions.value.length > 0) {
dimensions.value.forEach(dim => {
if (dim.subDimensions && dim.subDimensions.length > 0) {
dim.subDimensions.forEach(subDim => {
indicators.push({
name: subDim.name,
max: 100
});
});
}
});
}
// 使
if (indicators.length === 0) {
indicators.push(
{ name: '创新水平', max: 100 },
{ name: '研究能力', max: 100 },
{ name: '成果转化', max: 100 },
{ name: '学科建设', max: 100 },
{ name: '行业贡献', max: 100 },
{ name: '发展潜力', max: 100 }
);
}
// const indicators = lab.dynamicColumns.index;
const indicators = lab.dynamicColumns.index.map(index => ({ name: index.label}));
//
let radarData = [];
let radarData = lab.result;
//
let hasSubDimensionData = false;
if (lab.sub_dimension_evaluations && Object.keys(lab.sub_dimension_evaluations).length > 0) {
dimensions.value.forEach(dim => {
if (dim.subDimensions && dim.subDimensions.length > 0 &&
lab.sub_dimension_evaluations[dim.name]) {
dim.subDimensions.forEach(subDim => {
if (lab.sub_dimension_evaluations[dim.name][subDim.name] !== undefined) {
hasSubDimensionData = true;
radarData.push(lab.sub_dimension_evaluations[dim.name][subDim.name]);
}
});
}
});
}
// 使evaluationData
if (!hasSubDimensionData) {
//
if (!lab.evaluationData || lab.evaluationData.length !== indicators.length) {
// 60-90
lab.evaluationData = indicators.map(() => Math.floor(Math.random() * 31) + 60);
}
radarData = lab.evaluationData;
}
console.log('radarData:', indicators,radarData);
chart.setOption({
radar: {
indicator: indicators,
@ -428,8 +298,8 @@ const handleSearch = () => {
filteredLabs.value = labs.value;
} else {
filteredLabs.value = labs.value.filter(lab =>
lab.name.includes(searchQuery.value) ||
(lab.idcode && lab.idcode.includes(searchQuery.value))
lab.basicInformation.name1.includes(searchQuery.value) ||
(lab.name0 && lab.name0.includes(searchQuery.value))
);
}