| 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 { getLabCategoryStats } from '@/api';\nexport default {\n name: 'CategoryPie',\n data() {\n return {\n chart: null,\n summaryList: []\n };\n },\n async mounted() {\n const res = await getLabCategoryStats();\n const summary = res.data.summary;\n this.summaryList = [{\n label: '设备总数',\n value: summary.totalEquipment\n }, {\n label: '人员总数',\n value: summary.totalPeople\n }, {\n label: '面积(㎡)',\n value: summary.totalArea\n }, {\n label: '安全评分',\n value: summary.safetyScore\n }, {\n label: '事故次数',\n value: summary.incidents\n }, {\n label: '培训次数',\n value: summary.trainings\n }];\n this.$nextTick(() => this.initChart(res.data.categories));\n },\n beforeDestroy() {\n if (this.chart) this.chart.dispose();\n },\n methods: {\n initChart(categories) {\n this.chart = echarts.init(this.$refs.chart);\n const option = {\n tooltip: {\n trigger: 'item',\n backgroundColor: 'rgba(13,34,71,0.9)',\n borderColor: '#1a3a6a',\n textStyle: {\n color: '#fff'\n }\n },\n legend: {\n orient: 'vertical',\n right: 10,\n top: 'center',\n textStyle: {\n color: '#8cb8e6',\n fontSize: 12\n },\n itemWidth: 10,\n itemHeight: 10\n },\n series: [{\n type: 'pie',\n radius: ['40%', '65%'],\n center: ['35%', '50%'],\n avoidLabelOverlap: false,\n label: {\n show: false\n },\n emphasis: {\n label: {\n show: true,\n color: '#fff',\n fontSize: 14\n }\n },\n data: categories.map(c => ({\n name: c.name,\n value: c.value,\n itemStyle: {\n color: c.color\n }\n }))\n }]\n };\n this.chart.setOption(option);\n }\n }\n};","map":{"version":3,"names":["echarts","getLabCategoryStats","name","data","chart","summaryList","mounted","res","summary","label","value","totalEquipment","totalPeople","totalArea","safetyScore","incidents","trainings","$nextTick","initChart","categories","beforeDestroy","dispose","methods","init","$refs","option","tooltip","trigger","backgroundColor","borderColor","textStyle","color","legend","orient","right","top","fontSize","itemWidth","itemHeight","series","type","radius","center","avoidLabelOverlap","show","emphasis","map","c","itemStyle","setOption"],"sources":["src/components/LabStats/CategoryPie.vue"],"sourcesContent":["<template>\n <div class=\"panel-box category-pie\">\n <div class=\"panel-title\">实验室分类及数据统计</div>\n <div class=\"panel-content\">\n <div ref=\"chart\" class=\"chart-area\"></div>\n <div class=\"summary-grid\">\n <div class=\"summary-item\" v-for=\"item in summaryList\" :key=\"item.label\">\n <div class=\"summary-value\">{{ item.value }}</div>\n <div class=\"summary-label\">{{ item.label }}</div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport * as echarts from 'echarts'\nimport { getLabCategoryStats } from '@/api'\n\nexport default {\n name: 'CategoryPie',\n data() {\n return {\n chart: null,\n summaryList: []\n }\n },\n async mounted() {\n const res = await getLabCategoryStats()\n const summary = res.data.summary\n this.summaryList = [\n { label: '设备总数', value: summary.totalEquipment },\n { label: '人员总数', value: summary.totalPeople },\n { label: '面积(㎡)', value: summary.totalArea },\n { label: '安全评分', value: summary.safetyScore },\n { label: '事故次数', value: summary.incidents },\n { label: '培训次数', value: summary.trainings }\n ]\n this.$nextTick(() => this.initChart(res.data.categories))\n },\n beforeDestroy() {\n if (this.chart) this.chart.dispose()\n },\n methods: {\n initChart(categories) {\n this.chart = echarts.init(this.$refs.chart)\n const option = {\n tooltip: {\n trigger: 'item',\n backgroundColor: 'rgba(13,34,71,0.9)',\n borderColor: '#1a3a6a',\n textStyle: { color: '#fff' }\n },\n legend: {\n orient: 'vertical',\n right: 10,\n top: 'center',\n textStyle: { color: '#8cb8e6', fontSize: 12 },\n itemWidth: 10,\n itemHeight: 10\n },\n series: [{\n type: 'pie',\n radius: ['40%', '65%'],\n center: ['35%', '50%'],\n avoidLabelOverlap: false,\n label: { show: false },\n emphasis: {\n label: { show: true, color: '#fff', fontSize: 14 }\n },\n data: categories.map(c => ({\n name: c.name,\n value: c.value,\n itemStyle: { color: c.color }\n }))\n }]\n }\n this.chart.setOption(option)\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.category-pie {\n height: 100%;\n}\n.chart-area {\n width: 100%;\n height: 160px;\n}\n\n.summary-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n margin-top: 8px;\n}\n\n.summary-item {\n text-align: center;\n padding: 8px 4px;\n background: rgba(255, 255, 255, 0.03);\n border: 1px solid rgba(255, 255, 255, 0.05);\n border-radius: 4px;\n}\n\n.summary-value {\n font-size: 20px;\n font-weight: bold;\n color: $accent-cyan;\n font-family: 'Courier New', monospace;\n}\n\n.summary-label {\n font-size: 11px;\n color: $text-muted;\n margin-top: 2px;\n}\n</style>\n"],"mappings":";;AAgBA,YAAAA,OAAA;AACA,SAAAC,mBAAA;AAEA;EACAC,IAAA;EACAC,KAAA;IACA;MACAC,KAAA;MACAC,WAAA;IACA;EACA;EACA,MAAAC,QAAA;IACA,MAAAC,GAAA,SAAAN,mBAAA;IACA,MAAAO,OAAA,GAAAD,GAAA,CAAAJ,IAAA,CAAAK,OAAA;IACA,KAAAH,WAAA,IACA;MAAAI,KAAA;MAAAC,KAAA,EAAAF,OAAA,CAAAG;IAAA,GACA;MAAAF,KAAA;MAAAC,KAAA,EAAAF,OAAA,CAAAI;IAAA,GACA;MAAAH,KAAA;MAAAC,KAAA,EAAAF,OAAA,CAAAK;IAAA,GACA;MAAAJ,KAAA;MAAAC,KAAA,EAAAF,OAAA,CAAAM;IAAA,GACA;MAAAL,KAAA;MAAAC,KAAA,EAAAF,OAAA,CAAAO;IAAA,GACA;MAAAN,KAAA;MAAAC,KAAA,EAAAF,OAAA,CAAAQ;IAAA,EACA;IACA,KAAAC,SAAA,YAAAC,SAAA,CAAAX,GAAA,CAAAJ,IAAA,CAAAgB,UAAA;EACA;EACAC,cAAA;IACA,SAAAhB,KAAA,OAAAA,KAAA,CAAAiB,OAAA;EACA;EACAC,OAAA;IACAJ,UAAAC,UAAA;MACA,KAAAf,KAAA,GAAAJ,OAAA,CAAAuB,IAAA,MAAAC,KAAA,CAAApB,KAAA;MACA,MAAAqB,MAAA;QACAC,OAAA;UACAC,OAAA;UACAC,eAAA;UACAC,WAAA;UACAC,SAAA;YAAAC,KAAA;UAAA;QACA;QACAC,MAAA;UACAC,MAAA;UACAC,KAAA;UACAC,GAAA;UACAL,SAAA;YAAAC,KAAA;YAAAK,QAAA;UAAA;UACAC,SAAA;UACAC,UAAA;QACA;QACAC,MAAA;UACAC,IAAA;UACAC,MAAA;UACAC,MAAA;UACAC,iBAAA;UACAlC,KAAA;YAAAmC,IAAA;UAAA;UACAC,QAAA;YACApC,KAAA;cAAAmC,IAAA;cAAAb,KAAA;cAAAK,QAAA;YAAA;UACA;UACAjC,IAAA,EAAAgB,UAAA,CAAA2B,GAAA,CAAAC,CAAA;YACA7C,IAAA,EAAA6C,CAAA,CAAA7C,IAAA;YACAQ,KAAA,EAAAqC,CAAA,CAAArC,KAAA;YACAsC,SAAA;cAAAjB,KAAA,EAAAgB,CAAA,CAAAhB;YAAA;UACA;QACA;MACA;MACA,KAAA3B,KAAA,CAAA6C,SAAA,CAAAxB,MAAA;IACA;EACA;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|