From c6a61bf9bf4d1ae57098aa26dcf2448ce6bb80e4 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期五, 05 九月 2025 10:16:43 +0800
Subject: [PATCH] 测试完成
---
src/views/sfstatistics/percentage/index.vue | 420 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 381 insertions(+), 39 deletions(-)
diff --git a/src/views/sfstatistics/percentage/index.vue b/src/views/sfstatistics/percentage/index.vue
index a9288cf..bb119e0 100644
--- a/src/views/sfstatistics/percentage/index.vue
+++ b/src/views/sfstatistics/percentage/index.vue
@@ -1,37 +1,6 @@
<template>
<div class="Questionnairemanagement">
- <!-- 宸︿晶鏍� -->
- <!-- <div class="sidecolumn">
- <div class="sidecolumn-top">
- <div class="top-wj">鎮h�呰寖鍥�</div>
- </div>
-
- <div class="bottom-fl">
- <el-tabs
- tab-position="right"
- v-model="activeName"
- @tab-click="handleClick"
- >
- <el-tab-pane label="鍏ㄩ儴" name="first"></el-tab-pane>
- <el-tab-pane label="浣忛櫌" name="bhospitalized"></el-tab-pane>
- <el-tab-pane label="鍦ㄩ櫌" name="Inhospital"></el-tab-pane>
- <el-tab-pane label="闂ㄨ瘖" name="outpatient"></el-tab-pane>
- <el-tab-pane label="浣撴" name="physical"></el-tab-pane>
- </el-tabs>
- </div>
- </div> -->
- <!-- 鍙充晶鏁版嵁 -->
<div class="leftvlue">
- <!-- <div class="leftvlue-top">
- <el-tabs v-model="topactiveName" @tab-click="tophandleClick">
- <el-tab-pane name="Local">
- <span class="mulsz" slot="label">鎸夊嚭闄㈢梾鍖虹粺璁� </span>
- </el-tab-pane>
- <el-tab-pane name="sharing">
- <span class="mulsz" slot="label">鎸夊嚭闄㈢瀹ょ粺璁� </span>
- </el-tab-pane>
- </el-tabs>
- </div> -->
<div class="leftvlue-bg">
<el-row :gutter="20">
<!--鏍囩鏁版嵁-->
@@ -44,12 +13,6 @@
v-show="showSearch"
label-width="98px"
>
- <!-- <el-form-item label="璐d换鍖荤敓" prop="userName">
- <el-input
- v-model="queryParams.drname"
- placeholder="璇疯緭鍏ヤ富娌诲尰鐢�"
- ></el-input>
- </el-form-item> -->
<el-form-item label="缁熻绫诲瀷" prop="userName">
<el-select
v-model="queryParams.statisticaltype"
@@ -153,6 +116,14 @@
@click="handleExport"
>瀵煎嚭</el-button
>
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-data-line"
+ size="medium"
+ @click="showChartDialog"
+ >缁熻瓒嬪娍鍥�</el-button
+ >
</el-col>
</el-form>
<el-table
@@ -181,7 +152,7 @@
/>
<el-table-column
label="绉戝"
- width="120"
+ width="120"
prop="deptname"
align="center"
/>
@@ -572,6 +543,26 @@
</el-row>
</div>
</div>
+ <!-- 缁熻瓒嬪娍鍥惧脊绐� -->
+ <el-dialog
+ title="闅忚缁熻瓒嬪娍鍥�"
+ :visible.sync="chartDialogVisible"
+ width="80%"
+ :close-on-click-modal="false"
+ >
+ <div class="chart-container">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <div class="chart-title">闅忚鐘舵�佸垎甯�</div>
+ <div id="pieChart" style="width: 100%; height: 400px"></div>
+ </el-col>
+ <el-col :span="12">
+ <div class="chart-title">闅忚瓒嬪娍鍒嗘瀽</div>
+ <div id="barLineChart" style="width: 100%; height: 400px"></div>
+ </el-col>
+ </el-row>
+ </div>
+ </el-dialog>
<el-dialog
title="鏈強鏃堕殢璁挎偅鑰呮湇鍔�"
:visible.sync="SeedetailsVisible"
@@ -851,6 +842,9 @@
// 閬僵灞�
loading: false,
Seedloading: false,
+ chartDialogVisible: false,
+ pieChart: null,
+ barLineChart: null,
// 閫変腑鏁扮粍
ids: [],
// 闈炲崟涓鐢�
@@ -1041,7 +1035,7 @@
// 澶勭悊琛岀偣鍑诲睍寮�
handleRowClick(row) {
- console.log(row,'row');
+ console.log(row, "row");
// 濡傛灉宸茬粡灞曞紑鍒欐敹璧�
if (this.expands.includes(this.getRowKey(row))) {
@@ -1301,6 +1295,354 @@
`user_${new Date().getTime()}.xlsx`
);
},
+ // 鏄剧ず鍥捐〃寮圭獥
+
+ showChartDialog() {
+ this.chartDialogVisible = true;
+ this.$nextTick(() => {
+ this.initPieChart();
+ this.initBarLineChart();
+ });
+ },
+ // 鍦╩ethods涓慨鏀圭粺璁℃柟娉�
+ showChartDialog() {
+ this.chartDialogVisible = true;
+ this.$nextTick(() => {
+ console.log(this.userList, "this.userList");
+
+ this.initCharts();
+ });
+ },
+
+ // 鏂板鍒濆鍖栧浘琛ㄦ柟娉�
+ initCharts() {
+ this.initPieChart();
+ this.initBarLineChart();
+ },
+
+ // 鍒濆鍖栭ゼ鍥�
+initPieChart() {
+ const echarts = require("echarts");
+ const pieDom = document.getElementById("pieChart");
+ if (!pieDom) return;
+
+ if (this.pieChart) {
+ this.pieChart.dispose();
+ }
+
+ this.pieChart = echarts.init(pieDom);
+
+ // 璁$畻楗煎浘鏁版嵁
+ const followUpData = {
+ pending: 0,
+ success: 0,
+ fail: 0,
+ };
+
+ this.userList.forEach((item) => {
+ followUpData.pending += item.pendingFollowUp || 0;
+ followUpData.success += item.followUpSuccess || 0;
+ followUpData.fail += item.followUpFail || 0;
+ });
+
+ // 浣跨敤鏇寸編瑙傜殑棰滆壊鏂规
+ const pieOption = {
+ title: {
+ text: "闅忚鐘舵�佸垎甯�",
+ left: "center",
+ textStyle: {
+ color: '#333',
+ fontSize: 16
+ }
+ },
+ tooltip: {
+ trigger: "item",
+ formatter: "{a} <br/>{b}: {c} ({d}%)",
+ },
+ legend: {
+ orient: "vertical",
+ left: "left",
+ data: ["寰呴殢璁�", "闅忚鎴愬姛", "闅忚澶辫触"],
+ textStyle: {
+ color: '#666'
+ }
+ },
+ color: ['#FF9D4D', '#36B37E', '#FF5C5C'], // 鏂扮殑閰嶈壊鏂规
+ series: [
+ {
+ name: "闅忚鐘舵��",
+ type: "pie",
+ radius: ["40%", "70%"],
+ avoidLabelOverlap: true,
+ itemStyle: {
+ borderRadius: 10,
+ borderColor: "#fff",
+ borderWidth: 2
+ },
+ label: {
+ show: true,
+ formatter: "{b}: {c} ({d}%)",
+ color: '#333'
+ },
+ emphasis: {
+ label: {
+ show: true,
+ fontSize: "18",
+ fontWeight: "bold"
+ },
+ itemStyle: {
+ shadowBlur: 10,
+ shadowOffsetX: 0,
+ shadowColor: 'rgba(0, 0, 0, 0.5)'
+ }
+ },
+ data: [
+ {
+ value: followUpData.pending,
+ name: "寰呴殢璁�"
+ },
+ {
+ value: followUpData.success,
+ name: "闅忚鎴愬姛"
+ },
+ {
+ value: followUpData.fail,
+ name: "闅忚澶辫触"
+ }
+ ]
+ }
+ ]
+ };
+
+ this.pieChart.setOption(pieOption);
+ window.addEventListener("resize", this.resizePieChart);
+},
+
+// 鍒濆鍖栨煴鐘舵姌绾垮浘
+initBarLineChart() {
+ const echarts = require("echarts");
+ const barDom = document.getElementById("barLineChart");
+ if (!barDom) return;
+
+ if (this.barLineChart) {
+ this.barLineChart.dispose();
+ }
+
+ this.barLineChart = echarts.init(barDom);
+
+ // 鍑嗗鏁版嵁
+ const categories = this.userList.map(
+ (item) => item.leavehospitaldistrictname || item.deptname
+ );
+
+ const dischargeData = this.userList.map(
+ (item) => item.dischargeCount || 0
+ );
+ const followUpData = this.userList.map(
+ (item) => item.followUpNeeded || 0
+ );
+
+ // 鏂板涓ゆ潯鎶樼嚎鏁版嵁
+ const followUpRateData = this.userList.map(item => {
+ if (!item.followUpRate) return 0;
+ // 鍘绘帀鐧惧垎鍙峰苟杞负鏁板瓧
+ const rateStr = String(item.followUpRate).replace('%', '');
+ return parseFloat(rateStr) || 0;
+ });
+
+ const timelyRateData = this.userList.map(item =>
+ item.rate ? (Number(item.rate) * 100).toFixed(2) : 0
+ );
+
+ const option = {
+ title: {
+ text: "绉戝/鐥呭尯闅忚瓒嬪娍",
+ left: "center",
+ textStyle: {
+ color: '#333',
+ fontSize: 16
+ }
+ },
+ tooltip: {
+ trigger: "axis",
+ axisPointer: {
+ type: "cross",
+ crossStyle: {
+ color: "#999",
+ },
+ },
+ },
+ legend: {
+ data: ["鍑洪櫌浜烘", "搴旈殢璁夸汉娆�", "闅忚鐜�(%)", "鍙婃椂鐜�(%)"],
+ top: "bottom",
+ textStyle: {
+ color: '#666'
+ }
+ },
+ color: ['#5470C6', '#91CC75', '#EE6666', '#9A60B4'], // 鏂板绱壊鐢ㄤ簬鍙婃椂鐜�
+ xAxis: {
+ type: "category",
+ data: categories,
+ axisLabel: {
+ interval: 0,
+ rotate: 30,
+ color: '#666'
+ },
+ axisLine: {
+ lineStyle: {
+ color: '#ddd'
+ }
+ }
+ },
+ yAxis: [
+ {
+ type: "value",
+ name: "浜烘",
+ min: 0,
+ axisLabel: {
+ color: '#666'
+ },
+ axisLine: {
+ lineStyle: {
+ color: '#ddd'
+ }
+ },
+ splitLine: {
+ lineStyle: {
+ color: '#f0f0f0'
+ }
+ }
+ },
+ {
+ type: "value",
+ name: "鐧惧垎姣�(%)",
+ min: 0,
+ max: 100,
+ axisLabel: {
+ color: '#666',
+ formatter: '{value}%'
+ },
+ axisLine: {
+ lineStyle: {
+ color: '#ddd'
+ }
+ },
+ splitLine: {
+ show: false
+ }
+ }
+ ],
+ series: [
+ {
+ name: "鍑洪櫌浜烘",
+ type: "bar",
+ barWidth: "25%",
+ data: dischargeData,
+ itemStyle: {
+ borderRadius: [4, 4, 0, 0]
+ }
+ },
+ {
+ name: "搴旈殢璁夸汉娆�",
+ type: "bar",
+ barWidth: "25%",
+ data: followUpData,
+ itemStyle: {
+ borderRadius: [4, 4, 0, 0]
+ }
+ },
+ {
+ name: "闅忚鐜�(%)",
+ type: "line",
+ yAxisIndex: 1,
+ data: followUpRateData,
+ symbolSize: 8,
+ lineStyle: {
+ width: 3
+ },
+ markLine: {
+ silent: true,
+ data: [{
+ yAxis: 80,
+ lineStyle: {
+ color: '#EE6666',
+ type: 'dashed'
+ },
+ // label: {
+ // position: 'end',
+ // formatter: '鐩爣80%'
+ // }
+ }]
+ }
+ },
+ {
+ name: "鍙婃椂鐜�(%)",
+ type: "line",
+ yAxisIndex: 1,
+ data: timelyRateData,
+ symbolSize: 8,
+ lineStyle: {
+ width: 3,
+ type: 'dotted' // 浣跨敤铏氱嚎鍖哄垎
+ },
+ markLine: {
+ silent: true,
+ data: [{
+ yAxis: 90,
+ lineStyle: {
+ color: '#9A60B4',
+ type: 'dashed'
+ },
+ // label: {
+ // position: 'end',
+ // formatter: '鐩爣90%'
+ // }
+ }]
+ }
+ }
+ ],
+ grid: {
+ top: '15%',
+ left: '3%',
+ right: '4%',
+ bottom: '15%',
+ containLabel: true
+ }
+ };
+
+ this.barLineChart.setOption(option);
+ window.addEventListener("resize", this.resizeBarLineChart);
+},
+
+ // 鍥捐〃鍝嶅簲寮忚皟鏁存柟娉�
+ resizePieChart() {
+ if (this.pieChart) {
+ this.pieChart.resize();
+ }
+ },
+
+ resizeBarLineChart() {
+ if (this.barLineChart) {
+ this.barLineChart.resize();
+ }
+ },
+
+ // 鍦ㄧ粍浠堕攢姣佹椂娓呯悊
+ beforeDestroy() {
+ // 绉婚櫎浜嬩欢鐩戝惉
+ window.removeEventListener("resize", this.resizePieChart);
+ window.removeEventListener("resize", this.resizeBarLineChart);
+
+ // 閿�姣佸浘琛ㄥ疄渚�
+ if (this.pieChart) {
+ this.pieChart.dispose();
+ this.pieChart = null;
+ }
+ if (this.barLineChart) {
+ this.barLineChart.dispose();
+ this.barLineChart = null;
+ }
+ },
},
};
</script>
--
Gitblit v1.9.3