Преглед изворни кода

雷达图六大纬度(不包含小纬度,第一期)

htc пре 2 дана
родитељ
комит
d7b1dccfbd
2 измењених фајлова са 54 додато и 39 уклоњено
  1. 25 12
      src/components/reportPdf/pdf.vue
  2. 29 27
      src/components/reportPdf/pdfUser.vue

+ 25 - 12
src/components/reportPdf/pdf.vue

@@ -679,11 +679,17 @@
     }
   
     const getLDTData = () => {
+        const { ...rd } = reportData.value;
+        const radar = rd?.overall?.reportRadar||[];
+        const radarMap = new Map();
+        radar.forEach((item) => {
+            radarMap.set(item.classify, item);
+        });
+
         const indicators = [
-            { name: '目的与动机', max: 50 }, { name: '领导力', max: 50 }, { name: '学习', max: 50 }, { name: '内部流程及系统与架构', max: 50 }, { name: '关系', max: 50 }, { name: '外部流程及系统与架构', max: 50 }
-        ].reverse();
+            { name: '目的和动机', max: 50 }, { name: '领导力', max: 50 }, { name: '学习', max: 50 }, { name: '内部流程及系统与架构', max: 50 }, { name: '关系', max: 50 }, { name: '外部流程及系统与架构', max: 50 }].reverse();
         const categoryData = [
-            { name: '目的与动机', color: '#823479' },
+            { name: '目的动机', color: '#823479' },
             { name: '领导力', color: '#898989' },
             { name: '学习', color: '#AECDF3' },
             { name: '内部流程及系统与架构', color: '#FFD64E' },
@@ -691,24 +697,33 @@
             { name: '外部流程及系统与架构', color: '#009191' },
         ];
         const reversedCategoryData = [...categoryData].reverse();
+        const newArr = [];
+        categoryData.forEach(c=>{
+            let rm =  radarMap.get(c.name);
+            newArr.push({ 
+                avgMemberScore:rm.avgMemberScore||0,
+                avgLeaderScore:rm.avgLeaderScore||0,
+                avgStakeholderScore:rm.avgStakeholderScore||0
+            })
+        })
         const teamData = [
             {
                 name: '团队成员',
-                value: [42, 38, 45, 30, 35, 48].reverse(),
+                value: newArr.map(n=>n.avgMemberScore).reverse(),
                 lineStyle: { color: '#9F6196' },
                 itemStyle: { color: '#FFD650' },
                 areaStyle: { color: 'rgba(255, 255, 255, 0.6)' },
             },
             {
                 name: '团队领导',
-                value: [35, 45, 33, 42, 28, 30].reverse(),
+                value: newArr.map(n=>n.avgLeaderScore).reverse(),
                 lineStyle: { color: '#33A7A7' },
                 itemStyle: { color: '#751E6A' },
                 areaStyle: { color: 'rgba(255, 255, 255, 0.6)' },
             },
             {
                 name: '利益相关者',
-                value: [39, 43, 31, 36, 47, 25].reverse(),
+                value: newArr.map(n=>n.avgStakeholderScore).reverse(),
                 lineStyle: { color: '#FFD750' },
                 itemStyle: { color: '#012846' },
                 areaStyle: { color: 'rgba(255, 255, 255, 0.6)' },
@@ -940,11 +955,6 @@
     }
 
     onMounted(() => {
-        Promise.resolve().then(() => {
-            initZttdznChart();
-            window.addEventListener('resize', resizeChart);
-        });
-
         reportData.value = props.reportData;
         membersPageCount.value = Math.ceil(reportData.value?.nextSteps?.teamInfo?.team_info?.length/4);
         pageNum.value = reportData.value?.dimensionAnalysis?.length*7+6||'-';
@@ -955,7 +965,10 @@
                 tms.scores = [...tms.scores,tms.avgScore,tms.variance]
             })
         })
-        initZttdznChart();
+        Promise.resolve().then(() => {
+            initZttdznChart();
+            window.addEventListener('resize', resizeChart);
+        });
         if(reportData.value?.dimensionAnalysis?.length){
             nextTick(()=>{
                 reportData.value?.dimensionAnalysis?.forEach((item,index)=>{

+ 29 - 27
src/components/reportPdf/pdfUser.vue

@@ -496,22 +496,17 @@
     }
   
     const getLDTData = () => {
+        const { ...rd } = reportData.value;
+        const radar = rd?.overall?.reportRadar||[];
+        const radarMap = new Map();
+        radar.forEach((item) => {
+            radarMap.set(item.classify, item);
+        });
+
         const indicators = [
-            // 目的与动机 (5)
-            { name: '享受', max: 50 }, { name: '对齐', max: 50 }, { name: '清晰度', max: 50 }, { name: '支持与协作', max: 50 }, { name: '热情与贡献', max: 50 },
-            // 领导力 (5)
-            { name: '启发性领导力', max: 50 }, { name: '领导勇气', max: 50 }, { name: '人际领导力', max: 50 }, { name: '协作赋能型领导力', max: 50 }, { name: '愿景与背景', max: 50 },
-            // 学习 (5)
-            { name: '反思性学习', max: 50 }, { name: '发展导向', max: 50 }, { name: '嵌入式学习', max: 50 }, { name: '学习相关性', max: 50 }, { name: '发展规划', max: 50 },
-            // 内部流程及系统与架构 (5)
-            { name: '合理资源配置', max: 50 }, { name: '团队决策', max: 50 }, { name: '问责机制', max: 50 }, { name: '系统效能', max: 50 }, { name: '团队效能', max: 50 },
-            // 关系 (5)
-            { name: '技能与专业知识', max: 50 }, { name: '价值观多样性与包容性', max: 50 }, { name: '尊重与信任', max: 50 }, { name: '安全沟通', max: 50 }, { name: '团队精神与凝聚力', max: 50 },
-            // 外部流程及系统与架构 (5)
-            { name: '环境意识', max: 50 }, { name: '利益相关者与客户协同', max: 50 }, { name: '人才与资源获取', max: 50 }, { name: '利益相关者与客户沟通', max: 50 }, { name: '关系中的信任与诚信', max: 50 },
-        ].reverse();
+            { name: '目的和动机', max: 50 }, { name: '领导力', max: 50 }, { name: '学习', max: 50 }, { name: '内部流程及系统与架构', max: 50 }, { name: '关系', max: 50 }, { name: '外部流程及系统与架构', max: 50 }].reverse();
         const categoryData = [
-            { name: '目的动机', color: '#823479' },
+            { name: '目的和动机', color: '#823479' },
             { name: '领导力', color: '#898989' },
             { name: '学习', color: '#AECDF3' },
             { name: '内部流程及系统与架构', color: '#FFD64E' },
@@ -519,24 +514,33 @@
             { name: '外部流程及系统与架构', color: '#009191' },
         ];
         const reversedCategoryData = [...categoryData].reverse();
+        const newArr = [];
+        categoryData.forEach(c=>{
+            let rm =  radarMap.get(c.name);
+            newArr.push({ 
+                avgMemberScore:rm.avgMemberScore||0,
+                avgLeaderScore:rm.avgLeaderScore||0,
+                avgStakeholderScore:rm.avgStakeholderScore||0
+            })
+        })
         const teamData = [
             {
                 name: '团队成员',
-                value: [42, 38, 45, 30, 35, 48, 32, 25, 40, 33, 22, 38, 41, 36, 29, 45, 31, 39, 27, 43, 25, 47, 33, 46, 28, 37, 44, 26, 49, 34].reverse(),
+                value: newArr.map(n=>n.avgMemberScore).reverse(),
                 lineStyle: { color: '#9F6196' },
                 itemStyle: { color: '#FFD650' },
                 areaStyle: { color: 'rgba(255, 255, 255, 0.6)' },
             },
             {
                 name: '团队领导',
-                value: [35, 45, 33, 42, 28, 30, 41, 46, 29, 38, 48, 27, 39, 43, 31, 36, 47, 25, 40, 32, 44, 26, 49, 34, 37, 22, 41, 30, 45, 38].reverse(),
+                value: newArr.map(n=>n.avgLeaderScore).reverse(),
                 lineStyle: { color: '#33A7A7' },
                 itemStyle: { color: '#751E6A' },
                 areaStyle: { color: 'rgba(255, 255, 255, 0.6)' },
             },
             {
                 name: '利益相关者',
-                value: [39, 43, 31, 36, 47, 25, 40, 32, 44, 26, 49, 34, 37, 22, 41, 35, 45, 33, 42, 28, 30, 41, 46, 29, 38, 48, 27, 30, 45, 38].reverse(),
+                value: newArr.map(n=>n.avgStakeholderScore).reverse(),
                 lineStyle: { color: '#FFD750' },
                 itemStyle: { color: '#012846' },
                 areaStyle: { color: 'rgba(255, 255, 255, 0.6)' },
@@ -547,7 +551,7 @@
             let current = 0;
             reversedCategoryData.forEach((cat) => {
                 const data = new Array(indicators.length).fill('-');
-                for (let i = 0; i < 5; i++) {
+                for (let i = 0; i < 1; i++) {
                     data[current + i] = 50;
                 }
                 series.push({
@@ -563,7 +567,7 @@
                         borderWidth: 0
                     }
                 });
-                current += 5;
+                current += 1;
             });
             return series;
         };
@@ -638,7 +642,7 @@
                     const total = reversedCategoryData.length;
                     const anglePerItem = 360 / total;
                     const centerAngle = -anglePerItem * index - anglePerItem / 2;
-                    let rotation = centerAngle+5;
+                    let rotation = centerAngle+30;
                     if (centerAngle < -90 && centerAngle > -270) {
                         rotation += 180;
                     }
@@ -694,7 +698,7 @@
             return {
                 type: 'text',
                 style: {
-                    text: indicator.name,
+                    // text: indicator.name,
                     font: '8px "Microsoft YaHei"',
                     fill: '#333',
                     align: textAlign, // 根据位置动态设置对齐方式
@@ -768,11 +772,6 @@
     }
 
     onMounted(() => {
-        Promise.resolve().then(() => {
-            initZttdznChart();
-            window.addEventListener('resize', resizeChart);
-        });
-
         reportData.value = props.reportData;
         membersPageCount.value = Math.ceil(reportData.value?.nextSteps?.teamInfo?.team_info?.length/4);
         pageNum.value = reportData.value?.dimensionAnalysis?.length*3+4||'-';
@@ -783,7 +782,10 @@
                 tms.scores = [...tms.scores,tms.avgScore,tms.variance]
             })
         })
-        initZttdznChart();
+        Promise.resolve().then(() => {
+            initZttdznChart();
+            window.addEventListener('resize', resizeChart);
+        });
         if(reportData.value?.dimensionAnalysis?.length){
             nextTick(()=>{
                 reportData.value?.dimensionAnalysis?.forEach((item,index)=>{