Przeglądaj źródła

修复质量指标看板1.月视图不显示质量目标名称2.限值没有采用最新月份数据

zhonghuizhen 5 miesięcy temu
rodzic
commit
9f39232d6d

+ 102 - 73
src/views/business/qualityTarget/components/monthChart.vue

@@ -78,84 +78,113 @@ export default {
     this.init()
   },
   methods: {
-    init() {
-      const D = new Date()
-      // 控制数据显示,历史数据显示整年,本年度数据显示到上一个月
-      const y = parseInt(D.toJSON().slice(0, 4))
-      const m =
-        parseInt(this.chooseYear) < y
-          ? 12
-          : parseInt(D.toJSON().split('-')[1]) - 1
-      const w = window.innerWidth
-      this.fontSize = w >= 1600 ? 20 : w > 1366 && w < 1600 ? 18 : 16
-      setTimeout(() => {
-        this.info.forEach((item, index) => {
-          // console.log(item)
-          if (this.name !== '病理') {
-            const chart = echarts.init(document.getElementById(`card${index}`))
-            const option = JSON.parse(JSON.stringify(monthChartOption))
-            const xData = item.data
-              .map((i, index) => `${index + 1}月`)
-              .slice(0, m)
-            const yData = item.data.map((i) => i.result || 0).slice(0, m)
-            const yMax = Math.max(...yData)
-            const yMin = Math.min(...yData)
-            const limit = item.data
-              .map((i) => i.limitValue)
-              .filter((i) => i !== undefined)[0]
-            const limitValue = item.data
-              .map((i) => i.originalData)
-              .filter((i) => i)[0]
-            option.yAxis.max = Math.max(parseFloat(limit), parseFloat(yMax))
-            // option.yAxis.min = Math.min(parseFloat(limit), parseFloat(yMin))
-            // console.log(option.yAxis.max, option.yAxis.min, item.title)
-            // console.log(item.title, yData)
-            option.title.text = item.title
-            option.title.textStyle.fontSize = this.fontSize
-            option.title.subtext = `限值${limitValue.replace(/@/g, '')}`
-            option.xAxis.data = xData
-            option.series[0].data = yData
-            option.series[0].markLine.data[0].yAxis = limit
-            option.series[0].markLine.data[0].label.formatter = limit
-            chart.setOption(option)
-          } else {
-            const chart = echarts.init(document.getElementById(`card${index}`))
-            const option = JSON.parse(JSON.stringify(monthChartOptionbl))
-            const xData = item.data
-              .map((i, index) => `${index + 1}月`)
-              .slice(0, m)
-            const yData = item.data.map((i) =>
-              this.$utils.isEmpty(i.result) ? null : i.result
-            )
+      init() {
+        const D = new Date()
+        const y = parseInt(D.toJSON().slice(0, 4))
+        const m =
+          parseInt(this.chooseYear) < y
+            ? 12
+            : parseInt(D.toJSON().split('-')[1]) - 1
+        const w = window.innerWidth
+        this.fontSize = w >= 1600 ? 20 : w > 1366 && w < 1600 ? 18 : 16
+        setTimeout(() => {
+          this.info.forEach((item, index) => {
+            if (this.name !== '病理') {
+              const chart = echarts.init(document.getElementById(`card${index}`))
+              const option = JSON.parse(JSON.stringify(monthChartOption))
+              const xData = item.data
+                .map((i, index) => `${index + 1}月`)
+                .slice(0, m)
+              const yData = item.data.map((i) => i.result || 0).slice(0, m)
+              
+              // 获取有数据的月份
+              const validData = item.data
+                .filter((i) => i.result !== undefined && i.result !== null)
+                .slice(0, m)
+              
+              // 获取最后一个有数据的月份的limitValue
+              let limitValue = ''
+              if (validData.length > 0) {
+                const lastData = validData[validData.length - 1]
+                limitValue = lastData.originalData || ''
+              }
+              
+              // 获取最大值
+              const yMax = Math.max(...yData)
+              const yMin = Math.min(...yData)
+              const limit = item.data
+                .map((i) => i.limitValue)
+                .filter((i) => i !== undefined)[0]
+              
+              option.yAxis.max = Math.max(parseFloat(limit), parseFloat(yMax))
+              option.title.text = item.title
+              option.title.textStyle.fontSize = this.fontSize
+              
+              // 只显示限值,不显示"限值"前缀
+              if (limitValue) {
+                option.title.subtext = limitValue.replace(/@/g, '')
+              } else {
+                option.title.subtext = ''
+              }
+              
+              option.xAxis.data = xData
+              option.series[0].data = yData
+              option.series[0].markLine.data[0].yAxis = limit
+              option.series[0].markLine.data[0].label.formatter = limit
+              chart.setOption(option)
+            } else {
+              // 病理部分也需要同样处理
+              const chart = echarts.init(document.getElementById(`card${index}`))
+              const option = JSON.parse(JSON.stringify(monthChartOptionbl))
+              const xData = item.data
+                .map((i, index) => `${index + 1}月`)
+                .slice(0, m)
+              const yData = item.data.map((i) =>
+                this.$utils.isEmpty(i.result) ? null : i.result
+              )
 
-            const limit = item.data
-              .map((i) => i.limitValue)
-              .filter((i) => i !== undefined)[0]
-            const limitValue = item.data
-              .map((i) => i.originalData)
-              .filter((i) => i)[0]
+              // 获取有数据的月份
+              const validData = item.data
+                .filter((i) => i.result !== undefined && i.result !== null)
+                .slice(0, m)
+              
+              // 获取最后一个有数据的月份的limitValue
+              let limitValue = ''
+              if (validData.length > 0) {
+                const lastData = validData[validData.length - 1]
+                limitValue = lastData.originalData || ''
+              }
 
-            option.title.text = item.title
-            option.title.textStyle.fontSize = this.fontSize
-            option.title.subtext = `限值${limitValue.replace(/@/g, '')}`
-            option.xAxis.data = xData
-            option.series[0].data = yData
+              const limit = item.data
+                .map((i) => i.limitValue)
+                .filter((i) => i !== undefined)[0]
 
-            option.series[0].name = item.title
-            const lData = item.data.map((i) =>
-              this.$utils.isEmpty(i.limitValue) ? null : i.limitValue
-            )
-            option.series[1].data = lData
+              option.title.text = item.title
+              option.title.textStyle.fontSize = this.fontSize
+              
+              // 只显示限值,不显示"限值"前缀
+              if (limitValue) {
+                option.title.subtext = limitValue.replace(/@/g, '')
+              } else {
+                option.title.subtext = ''
+              }
+              
+              option.xAxis.data = xData
+              option.series[0].data = yData
 
-            option.series[1].name = '达标标准率'
-            option.legend.data = [item.title, '达标标准率']
+              option.series[0].name = item.title
+              const lData = item.data.map((i) =>
+                this.$utils.isEmpty(i.limitValue) ? null : i.limitValue
+              )
+              option.series[1].data = lData
 
-            chart.setOption(option)
-            // console.log(option)
-            // chart.setOption(option)
-          }
-        })
-      }, 100)
+              option.series[1].name = '达标标准率'
+              option.legend.data = [item.title, '达标标准率']
+
+              chart.setOption(option)
+            }
+          })
+        }, 100)
     }
   }
 }

+ 5 - 2
src/views/business/qualityTarget/index.vue

@@ -196,18 +196,21 @@ export default {
                 cycle,
                 statisticalTime,
                 target,
+                goal, // 添加goal字段
                 result: targetValue,
                 limitValue
               } = item
               if (!result[cycle]) {
                 result[cycle] = []
               }
+               // 使用target作为标题,如果target为空则使用goal
+              const chartTitle = target || goal || ''
               let targetIndex = result[cycle].findIndex(
-                (i) => i.title === target
+                (i) => i.title === chartTitle
               )
               if (targetIndex === -1) {
                 result[cycle].push({
-                  title: target,
+                  title: chartTitle, // 使用处理后的标题
                   data: dataMap[cycle].map((d) => ({ ...d }))
                 })
                 targetIndex = result[cycle].length - 1