Explorar o código

refactor(BusDynamics):优化企业数据展示逻辑

- 修改了多个组件中的数据处理和图表绘制逻辑
- 优化了同比率计算方法,增加了对零值和空值的处理
-调整了图表的系列和图例动态生成方式
-优化了数据获取和图表更新的异步处理流程
nahida hai 1 ano
pai
achega
e362bbfd94

+ 3 - 3
index.html

@@ -14,9 +14,9 @@
       type="text/javascript"
       src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=jWDCUpsk33htQsF6IEwk4ctkERTOFFH0"
     ></script>
-    <script src="https://unpkg.com/mapv-three@1.0.10/dist/mapvthree.umd.js"></script>
-    <script src="//mapv.baidu.com/build/mapv.min.js"></script>
-    <script src="https://code.bdstatic.com/npm/mapvgl@1.0.0-beta.189/dist/mapvgl.min.js"></script>
+<!--    <script src="https://unpkg.com/mapv-three@1.0.10/dist/mapvthree.umd.js"></script>-->
+<!--    <script src="//mapv.baidu.com/build/mapv.min.js"></script>-->
+<!--    <script src="https://code.bdstatic.com/npm/mapvgl@1.0.0-beta.189/dist/mapvgl.min.js"></script>-->
 
     <title>怀化高新区企业信用分级分类服务平台</title>
     <!--[if lt IE 11

+ 25 - 20
src/views/BusDynamics/OPCMonitoring/index.vue

@@ -38,10 +38,11 @@ const lastLastYear = lastYear - 1;
 const setChartOption1 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
   const names = res.data.map(q=>{
-    let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
-    if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
-      str = ''
-    }
+    // let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
+    // if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
+    //   str = ''
+    // }
+    let str = '';
     return q.enterpriseName+str;
   }).reverse();
   const currentYearData = res.data.map(q=>q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
@@ -106,10 +107,11 @@ const setChartOption1 = async (res) => {
 const setChartOption3 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
   const names = res.data.map(q=>{
-    let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
-    if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
-      str = ''
-    }
+    // let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
+    // if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
+    //   str = ''
+    // }
+    let str = '';
     return q.enterpriseName+str;
   }).reverse();
   const currentYearData = res.data.map(q=>q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
@@ -174,10 +176,11 @@ const setChartOption3 = async (res) => {
 const setChartOption4 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
   const names = res.data.map(q=>{
-    let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
-    if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
-      str = ''
-    }
+    // let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
+    // if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
+    //   str = ''
+    // }
+    let str = '';
     return q.enterpriseName+str;
   }).reverse();
   const currentYearData = res.data.map(q=>q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
@@ -242,10 +245,11 @@ const setChartOption4 = async (res) => {
 const setChartOption5 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
   const names = res.data.map(q=>{
-    let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
-    if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
-      str = ''
-    }
+    // let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
+    // if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
+    //   str = ''
+    // }
+    let str = '';
     return q.enterpriseName+str;
   }).reverse();
   const currentYearData = res.data.map(q=>q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
@@ -313,10 +317,11 @@ const setChartOption5 = async (res) => {
 const setChartOption2 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
   const names = res.data.map(q=>{
-    let str = '  同比率'+(((q.currentYearTotal-q.lastYearTotal)/q.lastYearTotal)*100).toFixed(2)+'%'
-    if(q.lastYearTotal == 0|| q.lastYearTotal == null||q.currentYearTotal == 0|| q.currentYearTotal == null){
-      str = ''
-    }
+    // let str = '  同比率'+(((q.currentYearTotal-q.lastYearTotal)/q.lastYearTotal)*100).toFixed(2)+'%'
+    // if(q.lastYearTotal == 0|| q.lastYearTotal == null||q.currentYearTotal == 0|| q.currentYearTotal == null){
+    //   str = ''
+    // }
+    let str = '';
     return q.enterpriseName+str;
   }).reverse();
   const currentYearTotalData = res.data.map(q=>q.currentYearTotal?.toFixed(0)).reverse();

+ 25 - 20
src/views/BusDynamics/TaxMonitoring/index.vue

@@ -44,10 +44,11 @@ const lastLastYear = lastYear - 1;
 const setChartOption1 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
   const names = res.data.map(q=>{
-    let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
-    if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
-      str = ''
-    }
+    // let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
+    // if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
+    //   str = ''
+    // }
+    let str = '';
     return q.enterpriseName+str;
   }).reverse();
   const currentYearData = res.data.map(q=>q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
@@ -112,10 +113,11 @@ const setChartOption1 = async (res) => {
 const setChartOption3 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
   const names = res.data.map(q=>{
-    let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
-    if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
-      str = ''
-    }
+    // let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
+    // if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
+    //   str = ''
+    // }
+    let str = '';
     return q.enterpriseName+str;
   }).reverse();
   const currentYearData = res.data.map(q=>q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
@@ -180,10 +182,11 @@ const setChartOption3 = async (res) => {
 const setChartOption4 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
   const names = res.data.map(q=>{
-    let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
-    if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
-      str = ''
-    }
+    // let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
+    // if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
+    //   str = ''
+    // }
+    let str = '';
     return q.enterpriseName+str;
   }).reverse();
   const currentYearData = res.data.map(q=>q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
@@ -248,10 +251,11 @@ const setChartOption4 = async (res) => {
 const setChartOption5 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
   const names = res.data.map(q=>{
-    let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
-    if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
-      str = ''
-    }
+    // let str = '  同比率'+(((q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%'
+    // if(q.lastQuarterLastTotal == 0|| q.lastQuarterLastTotal == null||q.lastQuarterCurrentTotal == 0|| q.lastQuarterCurrentTotal == null){
+    //   str = ''
+    // }
+    let str = '';
     return q.enterpriseName+str;
   }).reverse();
   const currentYearData = res.data.map(q=>q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
@@ -319,10 +323,11 @@ const setChartOption5 = async (res) => {
 const setChartOption2 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
   const names = res.data.map(q=>{
-    let str = '  同比率'+(((q.currentYearTotal-q.lastYearTotal)/q.lastYearTotal)*100).toFixed(2)+'%'
-    if(q.lastYearTotal == 0|| q.lastYearTotal == null||q.currentYearTotal == 0|| q.currentYearTotal == null){
-      str = ''
-    }
+    // let str = '  同比率'+(((q.currentYearTotal-q.lastYearTotal)/q.lastYearTotal)*100).toFixed(2)+'%'
+    // if(q.lastYearTotal == 0|| q.lastYearTotal == null||q.currentYearTotal == 0|| q.currentYearTotal == null){
+    //   str = ''
+    // }
+    let str = '';
     return q.enterpriseName+str;
   }).reverse();
   const currentYearTotalData = res.data.map(q=>q.currentYearTotal?.toFixed(0)).reverse();

+ 229 - 103
src/views/BusDynamics/czjsqy/index.vue

@@ -33,16 +33,71 @@ const echartsRef4 = ref(null);
 const echartsRef5 = ref(null);
 const isForbidden = ref(false);
 const currentYear = new Date().getFullYear();
+const tblFn = (q,e)=>{
+  let w;
+  if(e){
+    w = (q.lastQuarterLastTotal-q.lastLastQuarterLastTotal)/q.lastLastQuarterLastTotal;
+  }else {
+    w = (q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal;
+  }
+  let res;
+  if(w === Infinity){
+    res = q.enterpriseName;
+  }else {
+    res = q.enterpriseName+'  同比率'+((w*100).toFixed(2)+'%');
+  }
+  return res;
+}
 const lastYear = currentYear - 1;
 const lastLastYear = lastYear - 1;
 const setChartOption1 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
-  const a = res.data.filter(item=>item.lastQuarterLastTotal-item.lastLastQuarterLastTotal<0)
-  const names = a.map(q=>q.enterpriseName+'  同比率'+(((q.lastQuarterLastTotal-q.lastLastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%').reverse();
+  const a = res.data.filter(item=>item.lastQuarterCurrentTotal-item.lastQuarterLastTotal<0)
+  let names;
   const currentYearData = a.map(q=>q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
   const lastYearData = a.map(q=>q.lastQuarterLastTotal?.toFixed(0)).reverse();
   const lastLastYearData = a.map(q=>q.lastLastQuarterLastTotal?.toFixed(0)).reverse();
   const chart = echarts.init(echartsRef.value);
+  let legendArr;
+  let seriesArr;
+  let set = new Set(currentYearData);
+  set.forEach((item) => {
+    if (item == 0 || item == '0' || item == undefined) {
+      set.delete(item);
+    }
+  })
+
+  if(set.size === 0){
+    names = a.map(q=>tblFn(q,true)).reverse();
+    legendArr = [lastLastYear.toString(),lastYear.toString()];
+    seriesArr = [
+      {
+        name: lastLastYear.toString(),
+        type: 'bar',
+        data: lastLastYearData,
+      },
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+    ];
+  }else {
+    names = a.map(q=>tblFn(q,false)).reverse();
+    legendArr = [lastYear.toString(),currentYear.toString()];
+    seriesArr = [
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+      {
+        name: currentYear.toString(),
+        type: 'bar',
+        data: currentYearData
+      },
+    ];
+  }
   chart.setOption({
     title: {
       text: '第一季度     共:'+names.length+'家',
@@ -54,7 +109,7 @@ const setChartOption1 = async (res) => {
       }
     },
     legend: {
-      data: [lastLastYear.toString(),lastYear.toString(),currentYear.toString()]
+      data: legendArr
     },
     grid: {
       left: '3%',
@@ -70,23 +125,7 @@ const setChartOption1 = async (res) => {
       type: 'category',
       data: names
     },
-    series: [
-      {
-        name: lastLastYear.toString(),
-        type: 'bar',
-        data: lastLastYearData,
-      },
-      {
-        name: lastYear.toString(),
-        type: 'bar',
-        data: lastYearData,
-      },
-      {
-        name: currentYear.toString(),
-        type: 'bar',
-        data: currentYearData
-      },
-    ],
+    series: seriesArr,
     color: [
       '#fa8c89',
       '#6bbefa',
@@ -103,14 +142,54 @@ const setChartOption1 = async (res) => {
     }]
   })
 }
+
 const setChartOption3 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
-  const a = res.data.filter(item=>item.lastQuarterLastTotal-item.lastLastQuarterLastTotal<0)
-  const names = a.map(q=>q.enterpriseName+'  同比率'+(((q.lastQuarterLastTotal-q.lastLastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%').reverse();
+  const a = res.data.filter(item=>item.lastQuarterCurrentTotal-item.lastQuarterLastTotal<0)
+  let names;
   const currentYearData = a.map(q=>q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
   const lastYearData = a.map(q=>q.lastQuarterLastTotal?.toFixed(0)).reverse();
   const lastLastYearData = a.map(q=>q.lastLastQuarterLastTotal?.toFixed(0)).reverse();
   const chart = echarts.init(echartsRef3.value);
+  let legendArr;
+  let seriesArr;
+  let set = new Set(currentYearData);
+  set.forEach((item) => {
+    if (item == 0 || item == '0' || item == undefined) {
+      set.delete(item);
+    }
+  })
+  if(set.size === 0){
+    names = a.map(q=>tblFn(q,true)).reverse();
+    legendArr = [lastLastYear.toString(),lastYear.toString()];
+    seriesArr = [
+      {
+        name: lastLastYear.toString(),
+        type: 'bar',
+        data: lastLastYearData,
+      },
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+    ];
+  }else {
+    names = a.map(q=>tblFn(q,false)).reverse();
+    legendArr = [lastYear.toString(),currentYear.toString()];
+    seriesArr = [
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+      {
+        name: currentYear.toString(),
+        type: 'bar',
+        data: currentYearData
+      },
+    ];
+  }
   chart.setOption({
     title: {
       text: '第二季度     共:'+names.length+'家',
@@ -122,7 +201,7 @@ const setChartOption3 = async (res) => {
       }
     },
     legend: {
-      data: [lastLastYear.toString(),lastYear.toString(),currentYear.toString()]
+      data: legendArr
     },
     grid: {
       left: '3%',
@@ -138,23 +217,7 @@ const setChartOption3 = async (res) => {
       type: 'category',
       data: names
     },
-    series: [
-      {
-        name: lastLastYear.toString(),
-        type: 'bar',
-        data: lastLastYearData,
-      },
-      {
-        name: lastYear.toString(),
-        type: 'bar',
-        data: lastYearData,
-      },
-      {
-        name: currentYear.toString(),
-        type: 'bar',
-        data: currentYearData
-      },
-    ],
+    series: seriesArr,
     color: [
       '#fa8c89',
       '#6bbefa',
@@ -173,12 +236,51 @@ const setChartOption3 = async (res) => {
 }
 const setChartOption4 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
-  const a = res.data.filter(item=>item.lastQuarterLastTotal-item.lastLastQuarterLastTotal<0)
-  const names = a.map(q=>q.enterpriseName+'  同比率'+(((q.lastQuarterLastTotal-q.lastLastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%').reverse();
+  const a = res.data.filter(item=>item.lastQuarterCurrentTotal-item.lastQuarterLastTotal<0)
+  let names;
   const currentYearData = a.map(q=>q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
   const lastYearData = a.map(q=>q.lastQuarterLastTotal?.toFixed(0)).reverse();
   const lastLastYearData = a.map(q=>q.lastLastQuarterLastTotal?.toFixed(0)).reverse();
   const chart = echarts.init(echartsRef4.value);
+  let legendArr;
+  let seriesArr;
+  let set = new Set(currentYearData);
+  set.forEach((item) => {
+    if (item == 0 || item == '0' || item == undefined) {
+      set.delete(item);
+    }
+  })
+  if(set.size === 0){
+    names = a.map(q=>tblFn(q,true)).reverse();
+    legendArr = [lastLastYear.toString(),lastYear.toString()];
+    seriesArr = [
+      {
+        name: lastLastYear.toString(),
+        type: 'bar',
+        data: lastLastYearData,
+      },
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+    ];
+  }else {
+    names = a.map(q=>tblFn(q,false)).reverse();
+    legendArr = [lastYear.toString(),currentYear.toString()];
+    seriesArr = [
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+      {
+        name: currentYear.toString(),
+        type: 'bar',
+        data: currentYearData
+      },
+    ];
+  }
   chart.setOption({
     title: {
       text: '第三季度     共:'+names.length+'家',
@@ -190,7 +292,7 @@ const setChartOption4 = async (res) => {
       }
     },
     legend: {
-      data: [lastLastYear.toString(),lastYear.toString(),currentYear.toString()]
+      data: legendArr
     },
     grid: {
       left: '3%',
@@ -206,23 +308,7 @@ const setChartOption4 = async (res) => {
       type: 'category',
       data: names
     },
-    series: [
-      {
-        name: lastLastYear.toString(),
-        type: 'bar',
-        data: lastLastYearData,
-      },
-      {
-        name: lastYear.toString(),
-        type: 'bar',
-        data: lastYearData,
-      },
-      {
-        name: currentYear.toString(),
-        type: 'bar',
-        data: currentYearData
-      },
-    ],
+    series: seriesArr,
     color: [
       '#fa8c89',
       '#6bbefa',
@@ -239,17 +325,58 @@ const setChartOption4 = async (res) => {
     }]
   })
 }
+
+const isShowCurrentYear = ref(false);
+
 const setChartOption5 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
-  const a = res.data.filter(item=>item.lastQuarterLastTotal-item.lastLastQuarterLastTotal<0)
-  const names = a.map(q=>q.enterpriseName+'  同比率'+(((q.lastQuarterLastTotal-q.lastLastQuarterLastTotal)/q.lastQuarterLastTotal)*100).toFixed(2)+'%').reverse();
+  const a = res.data.filter(item=>item.lastQuarterCurrentTotal-item.lastQuarterLastTotal<0)
+  let names;
   const currentYearData = a.map(q=>q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
-  // if(currentYearData[0] == null || currentYearData == undefined || currentYearData[0] == 0){
-  //   isForbidden.value = true;
-  // }
   const lastYearData = a.map(q=>q.lastQuarterLastTotal?.toFixed(0)).reverse();
   const lastLastYearData = a.map(q=>q.lastLastQuarterLastTotal?.toFixed(0)).reverse();
   const chart = echarts.init(echartsRef5.value);
+  let legendArr;
+  let seriesArr;
+  let set = new Set(currentYearData);
+  set.forEach((item) => {
+    if (item == 0 || item == '0' || item == undefined) {
+      set.delete(item);
+    }
+  })
+  if(set.size === 0){
+    names = a.map(q=>tblFn(q,true)).reverse();
+    isShowCurrentYear.value = false;
+    legendArr = [lastLastYear.toString(),lastYear.toString()];
+    seriesArr = [
+      {
+        name: lastLastYear.toString(),
+        type: 'bar',
+        data: lastLastYearData,
+      },
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+    ];
+  }else {
+    names = a.map(q=>tblFn(q,false)).reverse();
+    isShowCurrentYear.value = true;
+    legendArr = [lastYear.toString(),currentYear.toString()];
+    seriesArr = [
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+      {
+        name: currentYear.toString(),
+        type: 'bar',
+        data: currentYearData
+      },
+    ];
+  }
   chart.setOption({
     title: {
       text: '第四季度     共:'+names.length+'家',
@@ -261,7 +388,7 @@ const setChartOption5 = async (res) => {
       }
     },
     legend: {
-      data: [lastLastYear.toString(),lastYear.toString(),currentYear.toString()]
+      data: legendArr
     },
     grid: {
       left: '3%',
@@ -277,23 +404,7 @@ const setChartOption5 = async (res) => {
       type: 'category',
       data: names
     },
-    series: [
-      {
-        name: lastLastYear.toString(),
-        type: 'bar',
-        data: lastLastYearData,
-      },
-      {
-        name: lastYear.toString(),
-        type: 'bar',
-        data: lastYearData,
-      },
-      {
-        name: currentYear.toString(),
-        type: 'bar',
-        data: currentYearData
-      },
-    ],
+    series: seriesArr,
     color: [
       '#fa8c89',
       '#6bbefa',
@@ -312,12 +423,43 @@ const setChartOption5 = async (res) => {
 }
 const setChartOption2 = async (res) => {
   if(res.code != 200) ElMessage.error(res.msg);
-  const a = res.data.filter(item=>item.lastYearTotal-item.lastLastYearTotal<0)
-  const names = a.map(q=>q.enterpriseName+"  同比率"+(((q.lastYearTotal-q.lastLastYearTotal)/q.lastYearTotal)*100).toFixed(2)+"%").reverse();
+  const a = res.data.filter(item=>item.currentYearTotal-item.lastYearTotal<0)
+  const names = a.map(q=>q.enterpriseName+"  同比率"+(((q.currentYearTotal-q.lastYearTotal)/q.lastYearTotal)*100).toFixed(2)+"%").reverse();
   const currentYearTotalData = a.map(q=>q.currentYearTotal?.toFixed(0)).reverse();
   const lastYearTotalData = a.map(q=>q.lastYearTotal?.toFixed(0)).reverse();
   const lastLastYearTotalData = a.map(q=>q.lastLastYearTotal?.toFixed(0)).reverse();
   const chart = echarts.init(echartsRef2.value);
+  let legendArr;
+  let seriesArr;
+  if(!isShowCurrentYear.value){
+    legendArr = [lastLastYear.toString(),lastYear.toString()];
+    seriesArr = [
+      {
+        name: lastLastYear.toString(),
+        type: 'bar',
+        data: lastLastYearTotalData,
+      },
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearTotalData,
+      },
+    ];
+  }else {
+    legendArr = [lastYear.toString(),currentYear.toString()];
+    seriesArr = [
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearTotalData,
+      },
+      {
+        name: currentYear.toString(),
+        type: 'bar',
+        data: currentYearTotalData
+      },
+    ];
+  }
   chart.setOption({
     title: {
       text: '产值产能减数企业一共:'+names.length+'家',
@@ -342,7 +484,7 @@ const setChartOption2 = async (res) => {
       '#c4ccd3'
     ],
     legend: {
-      data: [lastLastYear.toString(),lastYear.toString(),currentYear.toString()]
+      data: legendArr
     },
     grid: {
       left: '3%',
@@ -358,23 +500,7 @@ const setChartOption2 = async (res) => {
       type: 'category',
       data: names
     },
-    series: [
-      {
-        name: lastLastYear.toString(),
-        type: 'bar',
-        data: lastLastYearTotalData
-      },
-      {
-        name: lastYear.toString(),
-        type: 'bar',
-        data: lastYearTotalData
-      },
-      {
-        name: currentYear.toString(),
-        type: 'bar',
-        data: currentYearTotalData
-      }
-    ],
+    series: seriesArr,
     dataZoom: [{ // 这是一个 dataZoom 组件,可以控制 x 轴或 y 轴的区域缩放
       type: 'inside', // 这里设置为 slider 类型,表示使用滑动条形式的 dataZoom 组件
       yAxisIndex: 0, // 表示这个 dataZoom 组件控制第一个 y 轴

+ 231 - 105
src/views/BusDynamics/ssjsqy/index.vue

@@ -20,7 +20,7 @@
 </template>
 
 <script setup>
-import {onMounted, ref} from 'vue';
+import {nextTick, onMounted, ref} from 'vue';
 import * as echarts from 'echarts';
 import {
   getData,
@@ -39,16 +39,70 @@ const echartsRef4 = ref(null);
 const echartsRef5 = ref(null);
 const isForbidden = ref(false);
 const currentYear = new Date().getFullYear();
+const tblFn = (q,e)=>{
+  let w;
+  if(e){
+    w = (q.lastQuarterLastTotal-q.lastLastQuarterLastTotal)/q.lastLastQuarterLastTotal;
+  }else {
+    w = (q.lastQuarterCurrentTotal-q.lastQuarterLastTotal)/q.lastQuarterLastTotal;
+  }
+  let res;
+  if(w === Infinity){
+    res = q.enterpriseName;
+  }else {
+    res = q.enterpriseName+'  同比率'+((w*100).toFixed(2)+'%');
+  }
+  return res;
+}
 const lastYear = currentYear - 1;
 const lastLastYear = lastYear - 1;
 const setChartOption1 = async (res) => {
   if (res.code != 200) ElMessage.error(res.msg);
-  const a = res.data.filter(item => item.lastQuarterLastTotal - item.lastLastQuarterLastTotal < 0)
-  const names = a.map(q => q.enterpriseName + '  同比率' + (((q.lastQuarterLastTotal - q.lastLastQuarterLastTotal) / q.lastLastQuarterLastTotal) * 100).toFixed(2) + '%').reverse();
+  const a = res.data.filter(item => item.lastQuarterCurrentTotal - item.lastQuarterLastTotal < 0)
+  let names;
   const currentYearData = a.map(q => q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
   const lastYearData = a.map(q => q.lastQuarterLastTotal?.toFixed(0)).reverse();
   const lastLastYearData = a.map(q => q.lastLastQuarterLastTotal?.toFixed(0)).reverse();
   const chart = echarts.init(echartsRef.value);
+  let legendArr;
+  let seriesArr;
+  let set = new Set(currentYearData);
+  set.forEach((item) => {
+    if (item == 0 || item == '0' || item == undefined) {
+      set.delete(item);
+    }
+  })
+  if(set.size === 0){
+    names = a.map(q=>tblFn(q,true)).reverse();
+    legendArr = [lastLastYear.toString(),lastYear.toString()];
+    seriesArr = [
+      {
+        name: lastLastYear.toString(),
+        type: 'bar',
+        data: lastLastYearData,
+      },
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+    ];
+  }else {
+    names = a.map(q=>tblFn(q,false)).reverse();
+    legendArr = [lastYear.toString(),currentYear.toString()];
+    seriesArr = [
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+      {
+        name: currentYear.toString(),
+        type: 'bar',
+        data: currentYearData
+      },
+    ];
+  }
   chart.setOption({
     title: {
       text: '第一季度     共:' + names.length + '家',
@@ -60,7 +114,7 @@ const setChartOption1 = async (res) => {
       }
     },
     legend: {
-      data: [lastLastYear.toString(),lastYear.toString(),currentYear.toString()]
+      data: legendArr
     },
     grid: {
       left: '3%',
@@ -76,23 +130,7 @@ const setChartOption1 = async (res) => {
       type: 'category',
       data: names
     },
-    series: [
-      {
-        name: lastLastYear.toString(),
-        type: 'bar',
-        data: lastLastYearData,
-      },
-      {
-        name: lastYear.toString(),
-        type: 'bar',
-        data: lastYearData,
-      },
-      {
-        name: currentYear.toString(),
-        type: 'bar',
-        data: currentYearData
-      },
-    ],
+    series: seriesArr,
     color: [
       '#fa8c89',
       '#6bbefa',
@@ -111,12 +149,51 @@ const setChartOption1 = async (res) => {
 }
 const setChartOption3 = async (res) => {
   if (res.code != 200) ElMessage.error(res.msg);
-  const a = res.data.filter(item => item.lastQuarterLastTotal - item.lastLastQuarterLastTotal < 0)
-  const names = a.map(q => q.enterpriseName + '  同比率' + (((q.lastQuarterLastTotal - q.lastLastQuarterLastTotal) / q.lastLastQuarterLastTotal) * 100).toFixed(2) + '%').reverse();
+  const a = res.data.filter(item => item.lastQuarterCurrentTotal - item.lastQuarterLastTotal < 0)
+  let names;
   const currentYearData = a.map(q => q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
   const lastYearData = a.map(q => q.lastQuarterLastTotal?.toFixed(0)).reverse();
   const lastLastYearData = a.map(q => q.lastLastQuarterLastTotal?.toFixed(0)).reverse();
   const chart = echarts.init(echartsRef3.value);
+  let legendArr;
+  let seriesArr;
+  let set = new Set(currentYearData);
+  set.forEach((item) => {
+    if (item == 0 || item == '0' || item == undefined) {
+      set.delete(item);
+    }
+  })
+  if(set.size === 0){
+    names = a.map(q=>tblFn(q,true)).reverse();
+    legendArr = [lastLastYear.toString(),lastYear.toString()];
+    seriesArr = [
+      {
+        name: lastLastYear.toString(),
+        type: 'bar',
+        data: lastLastYearData,
+      },
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+    ];
+  }else {
+    names = a.map(q=>tblFn(q,false)).reverse();
+    legendArr = [lastYear.toString(),currentYear.toString()];
+    seriesArr = [
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+      {
+        name: currentYear.toString(),
+        type: 'bar',
+        data: currentYearData
+      },
+    ];
+  }
   chart.setOption({
     title: {
       text: '第二季度     共:' + names.length + '家',
@@ -128,7 +205,7 @@ const setChartOption3 = async (res) => {
       }
     },
     legend: {
-      data: [lastLastYear.toString(),lastYear.toString(),currentYear.toString()]
+      data: legendArr
     },
     grid: {
       left: '3%',
@@ -144,23 +221,7 @@ const setChartOption3 = async (res) => {
       type: 'category',
       data: names
     },
-    series: [
-      {
-        name: lastLastYear.toString(),
-        type: 'bar',
-        data: lastLastYearData,
-      },
-      {
-        name: lastYear.toString(),
-        type: 'bar',
-        data: lastYearData,
-      },
-      {
-        name: currentYear.toString(),
-        type: 'bar',
-        data: currentYearData
-      },
-    ],
+    series: seriesArr,
     color: [
       '#fa8c89',
       '#6bbefa',
@@ -179,12 +240,51 @@ const setChartOption3 = async (res) => {
 }
 const setChartOption4 = async (res) => {
   if (res.code != 200) ElMessage.error(res.msg);
-  const a = res.data.filter(item => item.lastQuarterLastTotal - item.lastLastQuarterLastTotal < 0)
-  const names = a.map(q => q.enterpriseName + '  同比率' + (((q.lastQuarterLastTotal - q.lastLastQuarterLastTotal) / q.lastLastQuarterLastTotal) * 100).toFixed(2) + '%').reverse();
+  const a = res.data.filter(item => item.lastQuarterCurrentTotal - item.lastQuarterLastTotal < 0)
+  let names;
   const currentYearData = a.map(q => q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
   const lastYearData = a.map(q => q.lastQuarterLastTotal?.toFixed(0)).reverse();
   const lastLastYearData = a.map(q => q.lastLastQuarterLastTotal?.toFixed(0)).reverse();
   const chart = echarts.init(echartsRef4.value);
+  let legendArr;
+  let seriesArr;
+  let set = new Set(currentYearData);
+  set.forEach((item) => {
+    if (item == 0 || item == '0' || item == undefined) {
+      set.delete(item);
+    }
+  })
+  if(set.size === 0){
+    names = a.map(q=>tblFn(q,true)).reverse();
+    legendArr = [lastLastYear.toString(),lastYear.toString()];
+    seriesArr = [
+      {
+        name: lastLastYear.toString(),
+        type: 'bar',
+        data: lastLastYearData,
+      },
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+    ];
+  }else {
+    names = a.map(q=>tblFn(q,false)).reverse();
+    legendArr = [lastYear.toString(),currentYear.toString()];
+    seriesArr = [
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+      {
+        name: currentYear.toString(),
+        type: 'bar',
+        data: currentYearData
+      },
+    ];
+  }
   chart.setOption({
     title: {
       text: '第三季度     共:' + names.length + '家',
@@ -196,7 +296,7 @@ const setChartOption4 = async (res) => {
       }
     },
     legend: {
-      data: [lastLastYear.toString(),lastYear.toString(),currentYear.toString()]
+      data: legendArr
     },
     grid: {
       left: '3%',
@@ -212,23 +312,7 @@ const setChartOption4 = async (res) => {
       type: 'category',
       data: names
     },
-    series: [
-      {
-        name: lastLastYear.toString(),
-        type: 'bar',
-        data: lastLastYearData,
-      },
-      {
-        name: lastYear.toString(),
-        type: 'bar',
-        data: lastYearData,
-      },
-      {
-        name: currentYear.toString(),
-        type: 'bar',
-        data: currentYearData
-      },
-    ],
+    series: seriesArr,
     color: [
       '#fa8c89',
       '#6bbefa',
@@ -245,17 +329,58 @@ const setChartOption4 = async (res) => {
     }]
   })
 }
+
+const isShowCurrentYear = ref(false);
+
 const setChartOption5 = async (res) => {
   if (res.code != 200) ElMessage.error(res.msg);
-  const a = res.data.filter(item => item.lastQuarterLastTotal - item.lastLastQuarterLastTotal < 0)
-  const names = a.map(q => q.enterpriseName + '  同比率' + (((q.lastQuarterLastTotal - q.lastLastQuarterLastTotal) / q.lastLastQuarterLastTotal) * 100).toFixed(2) + '%').reverse();
+  const a = res.data.filter(item => item.lastQuarterCurrentTotal - item.lastQuarterLastTotal < 0)
+  let names;
   const currentYearData = a.map(q => q.lastQuarterCurrentTotal?.toFixed(0)).reverse();
-  // if(currentYearData[0] == null || currentYearData == undefined || currentYearData[0] == 0){
-  //   isForbidden.value = true;
-  // }
   const lastYearData = a.map(q => q.lastQuarterLastTotal?.toFixed(0)).reverse();
   const lastLastYearData = a.map(q => q.lastLastQuarterLastTotal?.toFixed(0)).reverse();
   const chart = echarts.init(echartsRef5.value);
+  let legendArr;
+  let seriesArr;
+  let set = new Set(currentYearData);
+  set.forEach((item) => {
+    if (item == 0 || item == '0' || item == undefined) {
+      set.delete(item);
+    }
+  })
+  if(set.size === 0){
+    names = a.map(q=>tblFn(q,true)).reverse();
+    isShowCurrentYear.value = false;
+    legendArr = [lastLastYear.toString(),lastYear.toString()];
+    seriesArr = [
+      {
+        name: lastLastYear.toString(),
+        type: 'bar',
+        data: lastLastYearData,
+      },
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+    ];
+  }else {
+    names = a.map(q=>tblFn(q,false)).reverse();
+    isShowCurrentYear.value = true;
+    legendArr = [lastYear.toString(),currentYear.toString()];
+    seriesArr = [
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearData,
+      },
+      {
+        name: currentYear.toString(),
+        type: 'bar',
+        data: currentYearData
+      },
+    ];
+  }
   chart.setOption({
     title: {
       text: '第四季度     共:' + names.length + '家',
@@ -267,7 +392,7 @@ const setChartOption5 = async (res) => {
       }
     },
     legend: {
-      data: [lastLastYear.toString(),lastYear.toString(),currentYear.toString()]
+      data: legendArr
     },
     grid: {
       left: '3%',
@@ -283,23 +408,7 @@ const setChartOption5 = async (res) => {
       type: 'category',
       data: names
     },
-    series: [
-      {
-        name: lastLastYear.toString(),
-        type: 'bar',
-        data: lastLastYearData,
-      },
-      {
-        name: lastYear.toString(),
-        type: 'bar',
-        data: lastYearData,
-      },
-      {
-        name: currentYear.toString(),
-        type: 'bar',
-        data: currentYearData
-      },
-    ],
+    series: seriesArr,
     color: [
       '#fa8c89',
       '#6bbefa',
@@ -318,12 +427,43 @@ const setChartOption5 = async (res) => {
 }
 const setChartOption2 = async (res) => {
   if (res.code != 200) ElMessage.error(res.msg);
-  const a = res.data.filter(item => item.lastYearTotal - item.lastLastYearTotal < 0)
-  const names = a.map(q => q.enterpriseName + "  同比率" + (((q.lastYearTotal - q.lastLastYearTotal) / q.lastLastYearTotal) * 100).toFixed(2) + "%").reverse();
+  const a = res.data.filter(item => item.currentYearTotal - item.lastYearTotal < 0)
+  const names = a.map(q => q.enterpriseName + "  同比率" + (((q.currentYearTotal - q.lastYearTotal) / q.lastYearTotal) * 100).toFixed(2) + "%").reverse();
   const currentYearTotalData = a.map(q => q.currentYearTotal?.toFixed(0)).reverse();
   const lastYearTotalData = a.map(q => q.lastYearTotal?.toFixed(0)).reverse();
   const lastLastYearTotalData = a.map(q => q.lastLastYearTotal?.toFixed(0)).reverse();
   const chart = echarts.init(echartsRef2.value);
+  let legendArr;
+  let seriesArr;
+  if(!isShowCurrentYear.value){
+    legendArr = [lastLastYear.toString(),lastYear.toString()];
+    seriesArr = [
+      {
+        name: lastLastYear.toString(),
+        type: 'bar',
+        data: lastLastYearTotalData,
+      },
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearTotalData,
+      },
+    ];
+  }else {
+    legendArr = [lastYear.toString(),currentYear.toString()];
+    seriesArr = [
+      {
+        name: lastYear.toString(),
+        type: 'bar',
+        data: lastYearTotalData,
+      },
+      {
+        name: currentYear.toString(),
+        type: 'bar',
+        data: currentYearTotalData
+      },
+    ];
+  }
   chart.setOption({
     title: {
       text: '税收减数企业一共:' + names.length + '家',
@@ -348,7 +488,7 @@ const setChartOption2 = async (res) => {
       '#c4ccd3'
     ],
     legend: {
-      data: [lastLastYear.toString(),lastYear.toString(),currentYear.toString()]
+      data: legendArr
     },
     grid: {
       left: '3%',
@@ -364,23 +504,7 @@ const setChartOption2 = async (res) => {
       type: 'category',
       data: names
     },
-    series: [
-      {
-        name: lastLastYear.toString(),
-        type: 'bar',
-        data: lastLastYearTotalData
-      },
-      {
-        name: lastYear.toString(),
-        type: 'bar',
-        data: lastYearTotalData
-      },
-      {
-        name: currentYear.toString(),
-        type: 'bar',
-        data: currentYearTotalData
-      },
-    ],
+    series: seriesArr,
     dataZoom: [{ // 这是一个 dataZoom 组件,可以控制 x 轴或 y 轴的区域缩放
       type: 'inside', // 这里设置为 slider 类型,表示使用滑动条形式的 dataZoom 组件
       yAxisIndex: 0, // 表示这个 dataZoom 组件控制第一个 y 轴
@@ -403,7 +527,9 @@ const init = async () => {
   const quarterRes4 = await getLastQuarterYoY2(4);
   const yearRes = await getYearTotalData2();
   setChartOption1(quarterRes1);
-  setChartOption2(yearRes);
+  nextTick(()=>{
+    setChartOption2(yearRes);
+  })
   setChartOption3(quarterRes2);
   setChartOption4(quarterRes3);
   setChartOption5(quarterRes4);