Compare commits
7 Commits
2d152c5e2d
...
084f859ad3
Author | SHA1 | Date | |
---|---|---|---|
![]() |
084f859ad3 | ||
![]() |
bd08d3a988 | ||
![]() |
15adb29bd3 | ||
![]() |
637de14e0e | ||
![]() |
a8d28e94e6 | ||
![]() |
afc2c36178 | ||
![]() |
35c0a36412 |
@ -232,8 +232,9 @@ const teacherServiceData = ref({
|
||||
})
|
||||
// 工程研究中心图表数据
|
||||
const labData = ref({
|
||||
datax: [],
|
||||
datay: []
|
||||
datax: [], // 存储 fieldName
|
||||
series: [], // 存储 ECharts series 数组
|
||||
years: [] // 存储年份列表
|
||||
})
|
||||
const labLineData = ref({
|
||||
datax: [],
|
||||
@ -438,7 +439,7 @@ const fetchTeacherbData = async (type) => {
|
||||
updateResearcherChart();
|
||||
} else if (type === 2) {
|
||||
studyData.value = {
|
||||
datax: keyFields.map(item => ({ name: item.fieldName})),
|
||||
datax: keyFields.map(item => ({ name: item.fieldName,max: Math.max(...datay)})),
|
||||
datay
|
||||
};
|
||||
updateStudyChart();
|
||||
@ -554,24 +555,62 @@ const updateTeacherServiceChart = () => {
|
||||
}
|
||||
};
|
||||
|
||||
// 定义一个颜色数组,用于不同年份的柱子
|
||||
const barColors = ['#4080ff', '#d7fc33', 'rgb(63, 196, 15)']; // 蓝色,金色,紫色
|
||||
|
||||
const initEngineeringKeyFields = (data) => {
|
||||
const fieldNames = data.map(item => item.fieldName);
|
||||
|
||||
const years = data.length > 0 ? Array.from(new Set(data.flatMap(item => item.yearData.map(y => y.year)))) : [];
|
||||
years.sort((a, b) => a - b); // 确保年份排序
|
||||
|
||||
const series = years.map((year, index) => { // 添加 index 参数
|
||||
return {
|
||||
name: year.toString(),
|
||||
type: 'bar',
|
||||
barWidth: '15%',
|
||||
// 根据 index 从颜色数组中获取颜色
|
||||
itemStyle: {
|
||||
color: barColors[index % barColors.length] // 确保颜色循环使用
|
||||
},
|
||||
data: fieldNames.map(fieldName => {
|
||||
const item = data.find(d => d.fieldName === fieldName);
|
||||
const yearData = item ? item.yearData.find(y => y.year === year) : null;
|
||||
return yearData ? yearData.quantity : 0;
|
||||
}),
|
||||
emphasis: {
|
||||
focus: 'series'
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
labData.value.datax = fieldNames;
|
||||
labData.value.series = series;
|
||||
labData.value.years = years;
|
||||
console.log("Processed labData.value:", labData.value);
|
||||
};
|
||||
|
||||
const fetchLabData = async () => {
|
||||
try {
|
||||
const res = await fetch(`${getApiBaseUrl()}/admin-api/pg/research-data-dashboard/get-release`);
|
||||
if (res) {
|
||||
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
|
||||
};
|
||||
// 数据更新后,手动更新图表
|
||||
const processedData = keyFields.map((group) => {
|
||||
const firstItem = group[0];
|
||||
const yearData = group.map((item) => ({
|
||||
year: item.year,
|
||||
quantity: item.quantity
|
||||
}));
|
||||
return {
|
||||
fieldName: firstItem.fieldName,
|
||||
yearData
|
||||
};
|
||||
});
|
||||
initEngineeringKeyFields(processedData);
|
||||
updateLabBarChart();
|
||||
} else {
|
||||
console.error('获取工程研究中心数据失败:', response.statusText);
|
||||
console.error('获取工程研究中心数据失败:', res.statusText);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取工程研究中心数据出错:', error);
|
||||
@ -582,9 +621,8 @@ const fetchLabData = async () => {
|
||||
const fetchLabData2 = async () => {
|
||||
try {
|
||||
const res = await fetch(`${getApiBaseUrl()}/admin-api/pg/changes-in-achievements/get-release`);
|
||||
if (res) {
|
||||
if (res) {
|
||||
const data = await res.json();
|
||||
// 处理 keyFields 数据
|
||||
const afterAnalysis = data.data.afterAnalysis || [];
|
||||
const datax = afterAnalysis.map(item => item.year);
|
||||
const datay = afterAnalysis.map(item => item.quantity);
|
||||
@ -592,10 +630,9 @@ const fetchLabData2 = async () => {
|
||||
datax,
|
||||
datay
|
||||
};
|
||||
// 数据更新后,手动更新图表
|
||||
updateLabLineChart();
|
||||
} else {
|
||||
console.error('获取工程研究中心数据失败:', response.statusText);
|
||||
console.error('获取工程研究中心数据失败:', res.statusText);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取工程研究中心数据出错:', error);
|
||||
@ -605,19 +642,26 @@ const fetchLabData2 = async () => {
|
||||
};
|
||||
// 添加更新工程研究中心柱状图的函数
|
||||
const updateLabBarChart = () => {
|
||||
const labBarChart = echarts.getInstanceByDom(labBarChartRef.value);
|
||||
if (labBarChart) {
|
||||
labBarChart.setOption({
|
||||
xAxis: {
|
||||
data: labData.value.datax
|
||||
},
|
||||
series: [
|
||||
{
|
||||
data: labData.value.datay
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
const labBarChart = echarts.getInstanceByDom(labBarChartRef.value);
|
||||
if (labBarChart) {
|
||||
console.log("Updating labBarChart with:", {
|
||||
xAxisData: labData.value.datax,
|
||||
seriesData: labData.value.series
|
||||
});
|
||||
labBarChart.setOption({
|
||||
legend: {
|
||||
data: labData.value.years.map(String),
|
||||
textStyle: { color: '#fff' }
|
||||
},
|
||||
xAxis: {
|
||||
data: labData.value.datax,
|
||||
axisLabel: {
|
||||
textStyle: { color: '#fff' } // 标签颜色
|
||||
}
|
||||
},
|
||||
series: labData.value.series
|
||||
}, true);
|
||||
}
|
||||
}
|
||||
const updateLabLineChart = () => {
|
||||
const labLineChart = echarts.getInstanceByDom(labLineChartRef.value);
|
||||
@ -752,18 +796,35 @@ const initCharts = () => {
|
||||
const labBarChart = echarts.init(labBarChartRef.value)
|
||||
labBarChart.setOption({
|
||||
tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },
|
||||
legend: {
|
||||
data: labData.value.years.map(String),
|
||||
textStyle: { color: '#fff' } //确保图例文字颜色
|
||||
},
|
||||
grid: {
|
||||
left: '3%',
|
||||
right: '4%',
|
||||
top: '10%',
|
||||
bottom: '5%',
|
||||
bottom: '15%', // 增加底部空间以容纳旋转的标签
|
||||
containLabel: true
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: labData.value.datax,
|
||||
axisLine: { lineStyle: { color: '#fff' } },
|
||||
axisLabel: { color: '#fff' }
|
||||
axisLabel: {
|
||||
color: '#fff',
|
||||
// 换行显示,每 4 个字符换行
|
||||
formatter: function (params) {
|
||||
return params.split('').reduce((acc, char, index) => {
|
||||
if (index % 9 === 0 && index > 0) {
|
||||
return acc + '\n' + char;
|
||||
}
|
||||
return acc + char;
|
||||
}, '');
|
||||
},
|
||||
// 缩小字体大小
|
||||
fontSize: 10,
|
||||
}
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
@ -778,19 +839,7 @@ const initCharts = () => {
|
||||
interval: 1
|
||||
}
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'bar',
|
||||
data: labData.value.datay,
|
||||
itemStyle: { color: '#4080ff' },
|
||||
barWidth: '15%',
|
||||
label: {
|
||||
show: true,
|
||||
position: 'top',
|
||||
color: '#fff'
|
||||
}
|
||||
}
|
||||
]
|
||||
series: labData.value.series
|
||||
})
|
||||
|
||||
// 工程研究中心折线图(调整为占满全部宽度)
|
||||
|
@ -48,8 +48,8 @@
|
||||
<!-- <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.basicInformation.name0 || lab.id }}</span>
|
||||
<!-- <span class="total-score">综合评估分数: <span class="score-value">{{ lab.score }}分</span></span> -->
|
||||
<span class="lab-id">ID: {{ lab.basicInformation.name1 || lab.id }}</span>
|
||||
<span class="total-score">时间: <span class="score-value">{{ lab.basicInformation.name0 }}</span></span>
|
||||
</div>
|
||||
|
||||
<div class="card-content">
|
||||
@ -60,19 +60,19 @@
|
||||
<div class="lab-info">
|
||||
<div class="info-item">
|
||||
<span class="info-label">研究中心名称:</span>
|
||||
<span class="info-value">{{ lab.basicInformation.name1 }}</span>
|
||||
<span class="info-value">{{ lab.basicInformation.name2 }}</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="info-label">所属领域:</span>
|
||||
<span class="info-value">{{ lab.basicInformation.name2 }}</span>
|
||||
<span class="info-value">{{ lab.basicInformation.name3 }}</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="info-label">所属学校:</span>
|
||||
<span class="info-value">{{ lab.basicInformation.name3 }}</span>
|
||||
<span class="info-value">{{ lab.basicInformation.name4 }}</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="info-label">主管部门:</span>
|
||||
<span class="info-value">{{ lab.basicInformation.name4 }}</span>
|
||||
<span class="info-value">{{ lab.basicInformation.name5 }}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -229,7 +229,7 @@ const updateAllRadarCharts = () => {
|
||||
|
||||
// 从二级维度生成指标
|
||||
// const indicators = lab.dimension;
|
||||
const indicators = lab.dimension.map(index => ({ name: index}));
|
||||
const indicators = lab.dimension.map(index => ({ name: index, max: 50}));
|
||||
// 准备雷达图数据
|
||||
let radarData = lab.result;
|
||||
|
||||
@ -258,7 +258,7 @@ const updateAllRadarCharts = () => {
|
||||
name: {
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
fontSize: 11
|
||||
fontSize: 10
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -315,8 +315,8 @@ const handleSearch = () => {
|
||||
filteredLabs.value = labs.value;
|
||||
} else {
|
||||
filteredLabs.value = labs.value.filter(lab =>
|
||||
lab.basicInformation.name1 && lab.basicInformation.name1.includes(searchQuery.value) ||
|
||||
(lab.basicInformation.name0 && lab.basicInformation.name0.includes(searchQuery.value))
|
||||
lab.basicInformation.name2 && lab.basicInformation.name2.includes(searchQuery.value) ||
|
||||
(lab.basicInformation.name1 && lab.basicInformation.name1.includes(searchQuery.value))
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -13,34 +13,41 @@
|
||||
<div class="form-row">
|
||||
<div class="form-item">
|
||||
<span class="label">编号:</span>
|
||||
<span class="display-text">{{ labData.basicInformation.name0 }}</span>
|
||||
<span class="display-text">{{ labData.basicInformation.name1 }}</span>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="label">工程研究中心名称:</span>
|
||||
<span class="display-text">{{ labData.basicInformation.name1 }}</span>
|
||||
<span class="display-text">{{ labData.basicInformation.name2 }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-item">
|
||||
<span class="label">所属领域:</span>
|
||||
<span class="display-text">{{ labData.basicInformation.name2 }}</span>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="label">所属学校:</span>
|
||||
<span class="display-text">{{ labData.basicInformation.name3 }}</span>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="label">主管部门:</span>
|
||||
<span class="label">所属学校:</span>
|
||||
<span class="display-text">{{ labData.basicInformation.name4 }}</span>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<span class="label">主管部门:</span>
|
||||
<span class="display-text">{{ labData.basicInformation.name5 }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 工程研究中心年度信息 - 合并成一个card -->
|
||||
<div class="detail-sections">
|
||||
<h3 class="section-title">详细信息</h3>
|
||||
<!-- 新增:总分显示 -->
|
||||
<div class="overall-score-section">
|
||||
<h3 class="section-title">详细信息</h3>
|
||||
<div>
|
||||
<span class="overall-score-label">总分:</span>
|
||||
<span class="overall-score-value">{{ overallTotalScore }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="year-content">
|
||||
<div class="display-form">
|
||||
<!-- 工程研究中心概况 -->
|
||||
@ -50,7 +57,8 @@
|
||||
<!-- 遍历 labData.resultList -->
|
||||
<div v-for="(categoryItem, index) in labData.resultList" :key="index" class="category-section">
|
||||
<h4 class="category-title">
|
||||
{{ categoryItem.category }} (总分: {{ calculateCategoryTotal(categoryItem.result) }})
|
||||
{{ categoryItem.category }}
|
||||
<span>总分: {{ calculateCategoryTotal(categoryItem.result) }} / 满分: {{ labData.scoreList[index] }}</span>
|
||||
</h4>
|
||||
<div class="category-content">
|
||||
<div v-for="(item, itemIndex) in categoryItem.result" :key="itemIndex" class="category-item">
|
||||
@ -60,11 +68,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 新增:总分显示 -->
|
||||
<div class="overall-score-section">
|
||||
<span class="overall-score-label">总分:</span>
|
||||
<span class="overall-score-value">{{ overallTotalScore }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -350,9 +353,12 @@ const handleClose = () => {
|
||||
.category-title {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #4986ff; /* 标题颜色 */
|
||||
color: #d7fc33; /* 标题颜色 */
|
||||
margin-top: 0;
|
||||
margin-bottom: 15px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.category-content {
|
||||
@ -604,7 +610,6 @@ const handleClose = () => {
|
||||
|
||||
/* 新增:总分显示样式 */
|
||||
.overall-score-section {
|
||||
margin-top: 20px; /* 与上方内容的间距 */
|
||||
padding: 15px;
|
||||
background-color: rgba(12, 22, 51, 0.3);
|
||||
border-radius: 8px;
|
||||
@ -615,8 +620,14 @@ const handleClose = () => {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: #4986ff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.overall-score-section h3{
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.overall-score-label {
|
||||
margin-right: 10px;
|
||||
color: rgba(255,255,255,0.9);
|
||||
|
@ -218,7 +218,7 @@ const teacherLabs = async () => {
|
||||
teachers.value = response.data.data;
|
||||
handleSearch();
|
||||
} catch (error) {
|
||||
ElMessage.error('获取工程研究中心数据失败');
|
||||
ElMessage.error('获科研人才中心数据失败');
|
||||
}
|
||||
};
|
||||
|
||||
@ -317,7 +317,8 @@ const initRadarCharts = () => {
|
||||
|
||||
// 生成雷达图所需的指标
|
||||
const indicators = teacher.dimension.map(dim => ({
|
||||
name: dim
|
||||
name: dim,
|
||||
max: 50
|
||||
}));
|
||||
|
||||
chart.setOption({
|
||||
|
@ -57,7 +57,15 @@
|
||||
|
||||
<!-- 详细信息 - 工程研究中心年度信息 - 合并成一个card -->
|
||||
<div class="detail-sections">
|
||||
<h3 class="section-title">详细信息</h3>
|
||||
|
||||
<!-- 新增:总分显示 -->
|
||||
<div class="overall-score-section">
|
||||
<h3 class="section-title">详细信息</h3>
|
||||
<div>
|
||||
<span class="overall-score-label">总分:</span>
|
||||
<span class="overall-score-value">{{ overallTotalScore }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="year-content">
|
||||
<div class="display-form">
|
||||
<!-- 工程研究中心概况 -->
|
||||
@ -66,7 +74,8 @@
|
||||
<!-- 遍历 teacherData.resultList -->
|
||||
<div v-for="(categoryItem, index) in teacherData.resultList" :key="index" class="category-section">
|
||||
<h4 class="category-title">
|
||||
{{ categoryItem.category }} (总分: {{ calculateCategoryTotal(categoryItem.result) }})
|
||||
{{ categoryItem.category }}
|
||||
<span>总分: {{ calculateCategoryTotal(categoryItem.result) }} / 满分: {{ teacherData.scoreList[index] }}</span>
|
||||
</h4>
|
||||
<div class="category-content">
|
||||
<div v-for="(item, itemIndex) in categoryItem.result" :key="itemIndex" class="category-item">
|
||||
@ -77,11 +86,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 总分显示 -->
|
||||
<div class="overall-score-section">
|
||||
<span class="overall-score-label">总分:</span>
|
||||
<span class="overall-score-value">{{ overallTotalScore }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -266,6 +270,8 @@ const handleClose = () => {
|
||||
align-items: center;
|
||||
color: white;
|
||||
word-break: break-all;
|
||||
white-space: nowrap;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.display-textarea {
|
||||
@ -296,9 +302,12 @@ const handleClose = () => {
|
||||
.category-title {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #4986ff;
|
||||
color: #d7fc33; /* 标题颜色 */
|
||||
margin-top: 0;
|
||||
margin-bottom: 15px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.category-content {
|
||||
@ -386,17 +395,23 @@ const handleClose = () => {
|
||||
|
||||
/* 新增:总分显示样式 */
|
||||
.overall-score-section {
|
||||
margin-top: 20px;
|
||||
padding: 15px;
|
||||
background-color: rgba(12, 22, 51, 0.3);
|
||||
border-radius: 8px;
|
||||
border: 1px solid rgba(73, 134, 255, 0.3);
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
justify-content: flex-end; /* 靠右对齐 */
|
||||
align-items: center;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: #4986ff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.overall-score-section h3{
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.overall-score-label {
|
||||
|
Loading…
x
Reference in New Issue
Block a user