From 08881d6b6412822d5035f63a0775ca1f213c8668 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期一, 20 十月 2025 10:17:22 +0800
Subject: [PATCH] 测试完成
---
src/views/sfstatistics/percentage/index.vue | 524 ++++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 435 insertions(+), 89 deletions(-)
diff --git a/src/views/sfstatistics/percentage/index.vue b/src/views/sfstatistics/percentage/index.vue
index a9288cf..7647fae 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
@@ -160,7 +131,6 @@
:data="userList"
:border="true"
@selection-change="handleSelectionChange"
- @row-click="handleRowClick"
@expand-change="handleRowClick"
:row-key="getRowKey"
:expand-row-keys="expands"
@@ -181,7 +151,7 @@
/>
<el-table-column
label="绉戝"
- width="120"
+ width="120"
prop="deptname"
align="center"
/>
@@ -216,7 +186,7 @@
</el-table-column>
<el-table-column align="center" label="棣栨鍑洪櫌闅忚">
<el-table-column
- label="搴旈殢璁�"
+ label="闇�闅忚"
align="center"
key="needFollowUp"
prop="needFollowUp"
@@ -302,7 +272,7 @@
</el-table-column>
<el-table-column align="center" label="鍐嶆鍑洪櫌闅忚">
<el-table-column
- label="搴旈殢璁�"
+ label="闇�闅忚"
align="center"
key="needFollowUpAgain"
prop="needFollowUpAgain"
@@ -411,7 +381,7 @@
</el-table-column>
<el-table-column align="center" label="棣栨鍑洪櫌闅忚">
<el-table-column
- label="搴旈殢璁�"
+ label="闇�闅忚"
align="center"
key="needFollowUp"
prop="needFollowUp"
@@ -495,7 +465,7 @@
</el-table-column>
<el-table-column align="center" label="鍐嶆鍑洪櫌闅忚">
<el-table-column
- label="搴旈殢璁�"
+ label="闇�闅忚"
align="center"
key="needFollowUpAgain"
prop="needFollowUpAgain"
@@ -559,6 +529,52 @@
>
</el-table-column>
</el-table-column>
+ <el-table-column v-if="orgname=='涓芥按甯備腑鍖婚櫌'" align="center" label="闅忚鎯呭喌">
+
+ <el-table-column
+ label="姝e父璇煶"
+ align="center"
+ width="100"
+ key="taskSituation1"
+ prop="taskSituation1"
+ >
+ </el-table-column><el-table-column
+ label="鎮h�呮嫆鎺ユ垨鎷掕"
+ align="center"
+ width="100"
+ key="taskSituation2"
+ prop="taskSituation2"
+ >
+ </el-table-column><el-table-column
+ label="闈㈣鎴栬�呮帴璇�"
+ align="center"
+ width="100"
+ key="taskSituation3"
+ prop="taskSituation3"
+ >
+ </el-table-column><el-table-column
+ label="寰俊闅忚"
+ align="center"
+ width="100"
+ key="taskSituation4"
+ prop="taskSituation4"
+ >
+ </el-table-column><el-table-column
+ label="闅忚鐢佃瘽涓嶆纭�"
+ align="center"
+ width="100"
+ key="taskSituation5"
+ prop="taskSituation5"
+ >
+ </el-table-column><el-table-column
+ label="鍏朵粬鎯呭喌涓嶅疁闅忚"
+ align="center"
+ width="100"
+ key="taskSituation6"
+ prop="taskSituation6"
+ >
+ </el-table-column>
+ </el-table-column>
</el-table>
<!-- <pagination
@@ -572,6 +588,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"
@@ -847,10 +883,14 @@
return {
topactiveName: "Local", //椤堕儴閫夋嫨
activeName: "first", //渚ц竟閫夋嫨
+ orgname:'',
expands: [],
// 閬僵灞�
loading: false,
Seedloading: false,
+ chartDialogVisible: false,
+ pieChart: null,
+ barLineChart: null,
// 閫変腑鏁扮粍
ids: [],
// 闈炲崟涓鐢�
@@ -923,51 +963,7 @@
sidecolumnval: "", //绫诲埆鎼滅储
propss: { multiple: true },
SeedetailsVisible: false,
- options: [
- {
- value: 1,
- label: "鐩戞祴璇勪及",
- },
- {
- value: 2,
- label: "鍑洪櫌闅忚",
- },
- {
- value: 3,
- label: "闂ㄨ瘖闅忚",
- },
- {
- value: 4,
- label: "瀹f暀鍏虫��",
- },
- {
- value: 5,
- label: "澶嶈瘖绠$悊",
- },
-
- {
- value: 7,
- label: "鎮h�呮姤鍛�",
- },
-
- {
- value: 9,
- label: "浣撴闅忚",
- },
-
- {
- value: 11,
- label: "褰卞儚闅忚",
- },
- {
- value: 12,
- label: "蹇冪數闅忚",
- },
- {
- value: 13,
- label: "涓撶梾闅忚",
- },
- ],
+ options: store.getters.tasktypes,
pickerOptions: {
disabledDate(time) {
return time.getTime() < Date.now() - 3600 * 1000 * 24;
@@ -1006,6 +1002,8 @@
created() {
this.getDeptTree();
this.getList();
+ this.orgname = localStorage.getItem("orgname");
+
},
methods: {
@@ -1041,7 +1039,7 @@
// 澶勭悊琛岀偣鍑诲睍寮�
handleRowClick(row) {
- console.log(row,'row');
+ console.log(row, "row");
// 濡傛灉宸茬粡灞曞紑鍒欐敹璧�
if (this.expands.includes(this.getRowKey(row))) {
@@ -1301,6 +1299,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