c0945be13ede073b39762244e40959f69b488556bdd3e49b6ff20e56cc6d4dcf.json 8.3 KB

1
  1. {"ast":null,"code":"import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport * as echarts from 'echarts';\nimport { getSafetyLevelStats } from '@/api';\nexport default {\n name: 'SafetyLevel',\n data() {\n return {\n chart: null,\n levelSummary: []\n };\n },\n async mounted() {\n const res = await getSafetyLevelStats();\n this.levelSummary = res.data.levels;\n this.$nextTick(() => this.initChart(res.data));\n },\n beforeDestroy() {\n if (this.chart) this.chart.dispose();\n },\n methods: {\n initChart(data) {\n this.chart = echarts.init(this.$refs.chart);\n const colors = ['#f44336', '#ff9800', '#ffc107', '#4caf50'];\n const option = {\n tooltip: {\n trigger: 'axis',\n backgroundColor: 'rgba(13,34,71,0.9)',\n borderColor: '#1a3a6a',\n textStyle: {\n color: '#fff',\n fontSize: 12\n }\n },\n legend: {\n show: false\n },\n grid: {\n left: 80,\n right: 24,\n top: 8,\n bottom: 8\n },\n xAxis: {\n type: 'value',\n show: false\n },\n yAxis: {\n type: 'category',\n data: data.departments.map(d => d.name),\n axisLine: {\n show: false\n },\n axisLabel: {\n color: '#8cb8e6',\n fontSize: 12\n },\n axisTick: {\n show: false\n },\n inverse: true\n },\n series: [{\n name: '一级',\n type: 'bar',\n stack: 'total',\n barWidth: 14,\n data: data.departments.map(d => d.level1),\n itemStyle: {\n color: colors[0]\n }\n }, {\n name: '二级',\n type: 'bar',\n stack: 'total',\n data: data.departments.map(d => d.level2),\n itemStyle: {\n color: colors[1]\n }\n }, {\n name: '三级',\n type: 'bar',\n stack: 'total',\n data: data.departments.map(d => d.level3),\n itemStyle: {\n color: colors[2]\n }\n }, {\n name: '四级',\n type: 'bar',\n stack: 'total',\n data: data.departments.map(d => d.level4),\n itemStyle: {\n color: colors[3]\n }\n }]\n };\n this.chart.setOption(option);\n }\n }\n};","map":{"version":3,"names":["echarts","getSafetyLevelStats","name","data","chart","levelSummary","mounted","res","levels","$nextTick","initChart","beforeDestroy","dispose","methods","init","$refs","colors","option","tooltip","trigger","backgroundColor","borderColor","textStyle","color","fontSize","legend","show","grid","left","right","top","bottom","xAxis","type","yAxis","departments","map","d","axisLine","axisLabel","axisTick","inverse","series","stack","barWidth","level1","itemStyle","level2","level3","level4","setOption"],"sources":["src/components/LabStats/SafetyLevel.vue"],"sourcesContent":["<template>\n <div class=\"panel-box safety-level\">\n <div class=\"panel-title\">实验室安全分级统计</div>\n <div class=\"panel-content\">\n <div class=\"level-badges\">\n <div class=\"level-badge\" v-for=\"item in levelSummary\" :key=\"item.name\">\n <span class=\"badge-dot\" :style=\"{ background: item.color }\"></span>\n <span class=\"badge-label\">{{ item.name }}</span>\n <span class=\"badge-count\" :style=\"{ color: item.color }\">{{ item.count }}</span>\n </div>\n </div>\n <div ref=\"chart\" class=\"chart-area\"></div>\n </div>\n </div>\n</template>\n\n<script>\nimport * as echarts from 'echarts'\nimport { getSafetyLevelStats } from '@/api'\n\nexport default {\n name: 'SafetyLevel',\n data() {\n return {\n chart: null,\n levelSummary: []\n }\n },\n async mounted() {\n const res = await getSafetyLevelStats()\n this.levelSummary = res.data.levels\n this.$nextTick(() => this.initChart(res.data))\n },\n beforeDestroy() {\n if (this.chart) this.chart.dispose()\n },\n methods: {\n initChart(data) {\n this.chart = echarts.init(this.$refs.chart)\n const colors = ['#f44336', '#ff9800', '#ffc107', '#4caf50']\n const option = {\n tooltip: {\n trigger: 'axis',\n backgroundColor: 'rgba(13,34,71,0.9)',\n borderColor: '#1a3a6a',\n textStyle: { color: '#fff', fontSize: 12 }\n },\n legend: { show: false },\n grid: { left: 80, right: 24, top: 8, bottom: 8 },\n xAxis: {\n type: 'value',\n show: false\n },\n yAxis: {\n type: 'category',\n data: data.departments.map(d => d.name),\n axisLine: { show: false },\n axisLabel: { color: '#8cb8e6', fontSize: 12 },\n axisTick: { show: false },\n inverse: true\n },\n series: [\n {\n name: '一级',\n type: 'bar',\n stack: 'total',\n barWidth: 14,\n data: data.departments.map(d => d.level1),\n itemStyle: { color: colors[0] }\n },\n {\n name: '二级',\n type: 'bar',\n stack: 'total',\n data: data.departments.map(d => d.level2),\n itemStyle: { color: colors[1] }\n },\n {\n name: '三级',\n type: 'bar',\n stack: 'total',\n data: data.departments.map(d => d.level3),\n itemStyle: { color: colors[2] }\n },\n {\n name: '四级',\n type: 'bar',\n stack: 'total',\n data: data.departments.map(d => d.level4),\n itemStyle: { color: colors[3] }\n }\n ]\n }\n this.chart.setOption(option)\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.safety-level {\n height: 100%;\n display: flex;\n flex-direction: column;\n\n .panel-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n}\n\n.level-badges {\n display: flex;\n gap: 16px;\n margin-bottom: 8px;\n flex-shrink: 0;\n}\n\n.level-badge {\n display: flex;\n align-items: center;\n gap: 5px;\n}\n\n.badge-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.badge-label {\n font-size: 12px;\n color: $text-secondary;\n}\n\n.badge-count {\n font-size: 16px;\n font-weight: bold;\n font-family: 'Courier New', monospace;\n}\n\n.chart-area {\n flex: 1;\n min-height: 0;\n width: 100%;\n}\n</style>\n"],"mappings":";;AAiBA,YAAAA,OAAA;AACA,SAAAC,mBAAA;AAEA;EACAC,IAAA;EACAC,KAAA;IACA;MACAC,KAAA;MACAC,YAAA;IACA;EACA;EACA,MAAAC,QAAA;IACA,MAAAC,GAAA,SAAAN,mBAAA;IACA,KAAAI,YAAA,GAAAE,GAAA,CAAAJ,IAAA,CAAAK,MAAA;IACA,KAAAC,SAAA,YAAAC,SAAA,CAAAH,GAAA,CAAAJ,IAAA;EACA;EACAQ,cAAA;IACA,SAAAP,KAAA,OAAAA,KAAA,CAAAQ,OAAA;EACA;EACAC,OAAA;IACAH,UAAAP,IAAA;MACA,KAAAC,KAAA,GAAAJ,OAAA,CAAAc,IAAA,MAAAC,KAAA,CAAAX,KAAA;MACA,MAAAY,MAAA;MACA,MAAAC,MAAA;QACAC,OAAA;UACAC,OAAA;UACAC,eAAA;UACAC,WAAA;UACAC,SAAA;YAAAC,KAAA;YAAAC,QAAA;UAAA;QACA;QACAC,MAAA;UAAAC,IAAA;QAAA;QACAC,IAAA;UAAAC,IAAA;UAAAC,KAAA;UAAAC,GAAA;UAAAC,MAAA;QAAA;QACAC,KAAA;UACAC,IAAA;UACAP,IAAA;QACA;QACAQ,KAAA;UACAD,IAAA;UACA9B,IAAA,EAAAA,IAAA,CAAAgC,WAAA,CAAAC,GAAA,CAAAC,CAAA,IAAAA,CAAA,CAAAnC,IAAA;UACAoC,QAAA;YAAAZ,IAAA;UAAA;UACAa,SAAA;YAAAhB,KAAA;YAAAC,QAAA;UAAA;UACAgB,QAAA;YAAAd,IAAA;UAAA;UACAe,OAAA;QACA;QACAC,MAAA,GACA;UACAxC,IAAA;UACA+B,IAAA;UACAU,KAAA;UACAC,QAAA;UACAzC,IAAA,EAAAA,IAAA,CAAAgC,WAAA,CAAAC,GAAA,CAAAC,CAAA,IAAAA,CAAA,CAAAQ,MAAA;UACAC,SAAA;YAAAvB,KAAA,EAAAP,MAAA;UAAA;QACA,GACA;UACAd,IAAA;UACA+B,IAAA;UACAU,KAAA;UACAxC,IAAA,EAAAA,IAAA,CAAAgC,WAAA,CAAAC,GAAA,CAAAC,CAAA,IAAAA,CAAA,CAAAU,MAAA;UACAD,SAAA;YAAAvB,KAAA,EAAAP,MAAA;UAAA;QACA,GACA;UACAd,IAAA;UACA+B,IAAA;UACAU,KAAA;UACAxC,IAAA,EAAAA,IAAA,CAAAgC,WAAA,CAAAC,GAAA,CAAAC,CAAA,IAAAA,CAAA,CAAAW,MAAA;UACAF,SAAA;YAAAvB,KAAA,EAAAP,MAAA;UAAA;QACA,GACA;UACAd,IAAA;UACA+B,IAAA;UACAU,KAAA;UACAxC,IAAA,EAAAA,IAAA,CAAAgC,WAAA,CAAAC,GAAA,CAAAC,CAAA,IAAAA,CAAA,CAAAY,MAAA;UACAH,SAAA;YAAAvB,KAAA,EAAAP,MAAA;UAAA;QACA;MAEA;MACA,KAAAZ,KAAA,CAAA8C,SAAA,CAAAjC,MAAA;IACA;EACA;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}