|
|
@@ -1298,18 +1298,22 @@ export default {
|
|
|
const openId = item._deptOpenId || this.getDeptOpenId(item);
|
|
|
deptOpenIdMap2[item.departmentName] = openId || null;
|
|
|
});
|
|
|
- const rankSeries = [
|
|
|
- { rank: 0, name: "项目TOP1" },
|
|
|
- { rank: 1, name: "项目TOP2" },
|
|
|
- { rank: 2, name: "项目TOP3" },
|
|
|
- ];
|
|
|
- const getDeptRankItem = (dept, rank) =>
|
|
|
- (dept.items || [])
|
|
|
- .slice()
|
|
|
- .sort(
|
|
|
- (left, right) =>
|
|
|
- Number(left.projectRank || 0) - Number(right.projectRank || 0),
|
|
|
- )[rank];
|
|
|
+ const projectMap = new Map();
|
|
|
+ chartData.forEach((dept) => {
|
|
|
+ (dept.items || []).forEach((project) => {
|
|
|
+ const projectId = project.projectId || project.projectCode || project.projectName;
|
|
|
+ if (!projectMap.has(projectId)) {
|
|
|
+ projectMap.set(projectId, {
|
|
|
+ id: projectId,
|
|
|
+ name: project.projectCode || project.projectName || "未关联项目",
|
|
|
+ rank: Number(project.projectRank || 0),
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ const projects = Array.from(projectMap.values()).sort(
|
|
|
+ (left, right) => left.rank - right.rank,
|
|
|
+ );
|
|
|
const maxValue = Math.max(
|
|
|
...chartData.flatMap((dept) =>
|
|
|
(dept.items || []).map((project) => Number(project[valueKey] || 0)),
|
|
|
@@ -1330,17 +1334,15 @@ export default {
|
|
|
const openId = deptOpenIdMap2[deptName] || null;
|
|
|
let result = deptNameHtml(deptName, openId) + "<br/>";
|
|
|
params.forEach((p) => {
|
|
|
- const item = p.data || {};
|
|
|
- const value = Number(item.value || 0);
|
|
|
+ const value = Number(p.value || 0);
|
|
|
if (!value) return;
|
|
|
- const projectText = item.projectCode || item.projectName || p.seriesName;
|
|
|
- result += p.marker + projectText + ": " + value + " h<br/>";
|
|
|
+ result += p.marker + p.seriesName + ": " + value + " h<br/>";
|
|
|
});
|
|
|
return result;
|
|
|
},
|
|
|
},
|
|
|
legend: {
|
|
|
- data: rankSeries.map((series) => series.name),
|
|
|
+ data: projects.map((project) => project.name),
|
|
|
bottom: 8,
|
|
|
textStyle: { fontSize: 11 },
|
|
|
},
|
|
|
@@ -1366,18 +1368,14 @@ export default {
|
|
|
margin: 12,
|
|
|
},
|
|
|
},
|
|
|
- series: rankSeries.map((rankConfig) => ({
|
|
|
- name: rankConfig.name,
|
|
|
+ series: projects.map((project) => ({
|
|
|
+ name: project.name,
|
|
|
type: "bar",
|
|
|
data: chartData.map((dept) => {
|
|
|
- const matched = getDeptRankItem(dept, rankConfig.rank);
|
|
|
- return matched
|
|
|
- ? {
|
|
|
- value: Number(matched[valueKey] || 0),
|
|
|
- projectCode: matched.projectCode,
|
|
|
- projectName: matched.projectName,
|
|
|
- }
|
|
|
- : { value: 0 };
|
|
|
+ const matched = (dept.items || []).find(
|
|
|
+ (item) => (item.projectId || item.projectCode || item.projectName) === project.id,
|
|
|
+ );
|
|
|
+ return matched ? Number(matched[valueKey] || 0) : 0;
|
|
|
}),
|
|
|
barMaxWidth: 14,
|
|
|
label: {
|