From d93ed5c5aadcf3d49f824339c26ebfac911be06d Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期五, 07 十一月 2025 14:39:38 +0800
Subject: [PATCH] 测试完成
---
src/views/sfstatistics/percentage/index.vue | 1620 +++++++++++++++++++++++++++++++++--------------------------
1 files changed, 915 insertions(+), 705 deletions(-)
diff --git a/src/views/sfstatistics/percentage/index.vue b/src/views/sfstatistics/percentage/index.vue
index 7647fae..fe833bd 100644
--- a/src/views/sfstatistics/percentage/index.vue
+++ b/src/views/sfstatistics/percentage/index.vue
@@ -126,456 +126,472 @@
>
</el-col>
</el-form>
- <el-table
- v-loading="loading"
- :data="userList"
- :border="true"
- @selection-change="handleSelectionChange"
- @expand-change="handleRowClick"
- :row-key="getRowKey"
- :expand-row-keys="expands"
- >
- <!-- 灞曞紑琛岀澶村垪 -->
- <el-table-column type="expand">
- <template slot-scope="props">
- <el-table
- :data="props.row.doctorStats"
- border
- style="width: 95%; margin: 0 auto"
- class="inner-table"
- >
- <el-table-column
- label="鍖荤敓濮撳悕"
- prop="drname"
- align="center"
- />
- <el-table-column
- label="绉戝"
- width="120"
- prop="deptname"
- align="center"
- />
- <el-table-column
- label="鍑洪櫌浜烘"
- prop="dischargeCount"
- align="center"
- />
- <el-table-column
- label="鍑洪櫌浜烘"
- align="center"
- key="dischargeCount"
- prop="dischargeCount"
+ <div class="your-table-container">
+ <el-table
+ v-loading="loading"
+ :data="userList"
+ :border="true"
+ @selection-change="handleSelectionChange"
+ @expand-change="handleRowClick"
+ :row-key="getRowKey"
+ show-summary
+ :summary-method="getSummaries"
+ :expand-row-keys="expands"
+ >
+ <!-- 灞曞紑琛岀澶村垪 -->
+ <el-table-column type="expand">
+ <template slot-scope="props">
+ <el-table
+ :data="props.row.doctorStats"
+ border
+ style="width: 95%; margin: 0 auto"
+ class="inner-table"
+ show-summary
+ :summary-method="getInnerSummaries"
>
- </el-table-column>
+ <el-table-column
+ label="鍖荤敓濮撳悕"
+ prop="drname"
+ align="center"
+ />
+ <el-table-column
+ label="绉戝"
+ width="120"
+ prop="deptname"
+ align="center"
+ />
+ <el-table-column
+ label="鍑洪櫌浜烘"
+ prop="dischargeCount"
+ align="center"
+ />
+ <el-table-column
+ label="鍑洪櫌浜烘"
+ align="center"
+ key="dischargeCount"
+ prop="dischargeCount"
+ >
+ </el-table-column>
- <el-table-column
- label="鏃犻渶闅忚浜烘"
- align="center"
- width="100"
- key="nonFollowUp"
- prop="nonFollowUp"
- >
- </el-table-column>
- <el-table-column
- label="搴旈殢璁夸汉娆�"
- align="center"
- width="100"
- key="followUpNeeded"
- prop="followUpNeeded"
- >
- </el-table-column>
- <el-table-column align="center" label="棣栨鍑洪櫌闅忚">
<el-table-column
- label="闇�闅忚"
+ label="鏃犻渶闅忚浜烘"
align="center"
- key="needFollowUp"
- prop="needFollowUp"
+ width="100"
+ key="nonFollowUp"
+ prop="nonFollowUp"
>
</el-table-column>
<el-table-column
- label="寰呴殢璁�"
+ label="搴旈殢璁夸汉娆�"
align="center"
- key="pendingFollowUp"
- prop="pendingFollowUp"
+ width="100"
+ key="followUpNeeded"
+ prop="followUpNeeded"
>
</el-table-column>
- <el-table-column
- label="闅忚鎴愬姛"
- align="center"
- key="followUpSuccess"
- prop="followUpSuccess"
+ <el-table-column align="center" label="棣栨鍑洪櫌闅忚">
+ <el-table-column
+ label="闇�闅忚"
+ align="center"
+ key="needFollowUp"
+ prop="needFollowUp"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰呴殢璁�"
+ align="center"
+ key="pendingFollowUp"
+ prop="pendingFollowUp"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚鎴愬姛"
+ align="center"
+ key="followUpSuccess"
+ prop="followUpSuccess"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚澶辫触"
+ align="center"
+ key="followUpFail"
+ prop="followUpFail"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚鐜�"
+ align="center"
+ width="120"
+ key="followUpRate"
+ prop="followUpRate"
+ >
+ <!-- <template slot-scope="scope">
+ <span
+ >{{
+ (Number(scope.row.followUpRate) * 100).toFixed(2)
+ }}%</span
>
+ </template> -->
+ </el-table-column>
+ <el-table-column
+ label="鍙婃椂鐜�"
+ align="center"
+ width="120"
+ key="rate"
+ prop="rate"
+ >
+ <template slot-scope="scope">
+ <el-button
+ size="medium"
+ type="text"
+ @click="Seedetails(scope.row)"
+ ><span class="button-zx"
+ >{{
+ (Number(scope.row.rate) * 100).toFixed(2)
+ }}%</span
+ ></el-button
+ >
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="浜哄伐"
+ align="center"
+ key="manual"
+ prop="manual"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鐭俊"
+ align="center"
+ key="sms"
+ prop="sms"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰俊"
+ align="center"
+ key="weChat"
+ prop="weChat"
+ >
+ </el-table-column>
</el-table-column>
- <el-table-column
- label="闅忚澶辫触"
- align="center"
- key="followUpFail"
- prop="followUpFail"
+ <el-table-column align="center" label="鍐嶆鍑洪櫌闅忚">
+ <el-table-column
+ label="闇�闅忚"
+ align="center"
+ key="needFollowUpAgain"
+ prop="needFollowUpAgain"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰呴殢璁�"
+ align="center"
+ key="pendingFollowUpAgain"
+ prop="pendingFollowUpAgain"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚鎴愬姛"
+ align="center"
+ key="followUpSuccessAgain"
+ prop="followUpSuccessAgain"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚澶辫触"
+ align="center"
+ key="followUpFailAgain"
+ prop="followUpFailAgain"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚鐜�"
+ align="center"
+ width="120"
+ key="followUpRateAgain"
+ prop="followUpRateAgain"
+ >
+ <!-- <template slot-scope="scope">
+ <span
+ >{{
+ (Number(scope.row.FollowUpRateAgain) * 100).toFixed(2)
+ }}%</span
>
+ </template> -->
+ </el-table-column>
+ <el-table-column
+ label="浜哄伐"
+ align="center"
+ key="manualAgain"
+ prop="manualAgain"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鐭俊"
+ align="center"
+ key="smsAgain"
+ prop="smsAgain"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰俊"
+ align="center"
+ key="weChatAgain"
+ prop="weChatAgain"
+ >
+ </el-table-column>
</el-table-column>
- <el-table-column
- label="闅忚鐜�"
- align="center"
- width="120"
- key="followUpRate"
- prop="followUpRate"
- >
- <!-- <template slot-scope="scope">
- <span
- >{{
- (Number(scope.row.followUpRate) * 100).toFixed(2)
- }}%</span
- >
- </template> -->
- </el-table-column>
- <el-table-column
- label="鍙婃椂鐜�"
- align="center"
- width="120"
- key="rate"
- prop="rate"
- >
- <template slot-scope="scope">
- <el-button
- size="medium"
- type="text"
- @click="Seedetails(scope.row)"
- ><span class="button-zx"
- >{{
- (Number(scope.row.rate) * 100).toFixed(2)
- }}%</span
- ></el-button
- >
- </template>
- </el-table-column>
- <el-table-column
- label="浜哄伐"
- align="center"
- key="manual"
- prop="manual"
- >
- </el-table-column>
- <el-table-column
- label="鐭俊"
- align="center"
- key="sms"
- prop="sms"
- >
- </el-table-column>
- <el-table-column
- label="寰俊"
- align="center"
- key="weChat"
- prop="weChat"
- >
- </el-table-column>
- </el-table-column>
- <el-table-column align="center" label="鍐嶆鍑洪櫌闅忚">
- <el-table-column
- label="闇�闅忚"
- align="center"
- key="needFollowUpAgain"
- prop="needFollowUpAgain"
- >
- </el-table-column>
- <el-table-column
- label="寰呴殢璁�"
- align="center"
- key="pendingFollowUpAgain"
- prop="pendingFollowUpAgain"
- >
- </el-table-column>
- <el-table-column
- label="闅忚鎴愬姛"
- align="center"
- key="followUpSuccessAgain"
- prop="followUpSuccessAgain"
- >
- </el-table-column>
- <el-table-column
- label="闅忚澶辫触"
- align="center"
- key="followUpFailAgain"
- prop="followUpFailAgain"
- >
- </el-table-column>
- <el-table-column
- label="闅忚鐜�"
- align="center"
- width="120"
- key="followUpRateAgain"
- prop="followUpRateAgain"
- >
- <!-- <template slot-scope="scope">
- <span
- >{{
- (Number(scope.row.FollowUpRateAgain) * 100).toFixed(2)
- }}%</span
- >
- </template> -->
- </el-table-column>
- <el-table-column
- label="浜哄伐"
- align="center"
- key="manualAgain"
- prop="manualAgain"
- >
- </el-table-column>
- <el-table-column
- label="鐭俊"
- align="center"
- key="smsAgain"
- prop="smsAgain"
- >
- </el-table-column>
- <el-table-column
- label="寰俊"
- align="center"
- key="weChatAgain"
- prop="weChatAgain"
- >
- </el-table-column>
- </el-table-column>
- </el-table>
- </template>
- </el-table-column>
- <el-table-column
- label="鍑洪櫌鐥呭尯"
- align="center"
- sortable
- key="leavehospitaldistrictname"
- prop="leavehospitaldistrictname"
- width="150"
- :show-overflow-tooltip="true"
- />
- <el-table-column
- label="绉戝"
- align="center"
- key="deptname"
- prop="deptname"
- :show-overflow-tooltip="true"
- />
- <el-table-column
- label="鍑洪櫌浜烘"
- align="center"
- key="dischargeCount"
- prop="dischargeCount"
- >
- </el-table-column>
-
- <el-table-column
- label="鏃犻渶闅忚浜烘"
- align="center"
- width="100"
- key="nonFollowUp"
- prop="nonFollowUp"
- >
- </el-table-column>
- <el-table-column
- label="搴旈殢璁夸汉娆�"
- align="center"
- width="100"
- key="followUpNeeded"
- prop="followUpNeeded"
- >
- </el-table-column>
- <el-table-column align="center" label="棣栨鍑洪櫌闅忚">
- <el-table-column
- label="闇�闅忚"
- align="center"
- key="needFollowUp"
- prop="needFollowUp"
- >
- </el-table-column>
- <el-table-column
- label="寰呴殢璁�"
- align="center"
- key="pendingFollowUp"
- prop="pendingFollowUp"
- >
- </el-table-column>
- <el-table-column
- label="闅忚鎴愬姛"
- align="center"
- key="followUpSuccess"
- prop="followUpSuccess"
- >
- </el-table-column>
- <el-table-column
- label="闅忚澶辫触"
- align="center"
- key="followUpFail"
- prop="followUpFail"
- >
- </el-table-column>
- <el-table-column
- label="闅忚鐜�"
- align="center"
- width="120"
- key="followUpRate"
- prop="followUpRate"
- >
- <!-- <template slot-scope="scope">
- <span
- >{{
- (Number(scope.row.followUpRate) * 100).toFixed(2)
- }}%</span
- >
- </template> -->
- </el-table-column>
- <el-table-column
- label="鍙婃椂鐜�"
- align="center"
- width="120"
- key="rate"
- prop="rate"
- >
- <template slot-scope="scope">
- <el-button
- size="medium"
- type="text"
- @click="Seedetails(scope.row)"
- ><span class="button-zx"
- >{{ (Number(scope.row.rate) * 100).toFixed(2) }}%</span
- ></el-button
- >
+ </el-table>
</template>
</el-table-column>
<el-table-column
- label="浜哄伐"
+ label="鍑洪櫌鐥呭尯"
align="center"
- key="manual"
- prop="manual"
- >
- </el-table-column>
+ sortable
+ key="leavehospitaldistrictname"
+ prop="leavehospitaldistrictname"
+ width="150"
+ :show-overflow-tooltip="true"
+ />
<el-table-column
- label="鐭俊"
+ label="绉戝"
align="center"
- key="sms"
- prop="sms"
- >
- </el-table-column>
+ key="deptname"
+ prop="deptname"
+ :show-overflow-tooltip="true"
+ />
<el-table-column
- label="寰俊"
+ label="鍑洪櫌浜烘"
align="center"
- key="weChat"
- prop="weChat"
+ key="dischargeCount"
+ prop="dischargeCount"
>
</el-table-column>
- </el-table-column>
- <el-table-column align="center" label="鍐嶆鍑洪櫌闅忚">
- <el-table-column
- label="闇�闅忚"
- align="center"
- key="needFollowUpAgain"
- prop="needFollowUpAgain"
- >
- </el-table-column>
- <el-table-column
- label="寰呴殢璁�"
- align="center"
- key="pendingFollowUpAgain"
- prop="pendingFollowUpAgain"
- >
- </el-table-column>
- <el-table-column
- label="闅忚鎴愬姛"
- align="center"
- key="followUpSuccessAgain"
- prop="followUpSuccessAgain"
- >
- </el-table-column>
- <el-table-column
- label="闅忚澶辫触"
- align="center"
- key="followUpFailAgain"
- prop="followUpFailAgain"
- >
- </el-table-column>
- <el-table-column
- label="闅忚鐜�"
- align="center"
- width="120"
- key="followUpRateAgain"
- prop="followUpRateAgain"
- >
- <!-- <template slot-scope="scope">
- <span
- >{{
- (Number(scope.row.FollowUpRateAgain) * 100).toFixed(2)
- }}%</span
- >
- </template> -->
- </el-table-column>
- <el-table-column
- label="浜哄伐"
- align="center"
- key="manualAgain"
- prop="manualAgain"
- >
- </el-table-column>
- <el-table-column
- label="鐭俊"
- align="center"
- key="smsAgain"
- prop="smsAgain"
- >
- </el-table-column>
- <el-table-column
- label="寰俊"
- align="center"
- key="weChatAgain"
- prop="weChatAgain"
- >
- </el-table-column>
- </el-table-column>
- <el-table-column v-if="orgname=='涓芥按甯備腑鍖婚櫌'" align="center" label="闅忚鎯呭喌">
<el-table-column
- label="姝e父璇煶"
+ label="鏃犻渶闅忚浜烘"
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"
+ key="nonFollowUp"
+ prop="nonFollowUp"
>
</el-table-column>
- </el-table-column>
- </el-table>
+ <el-table-column
+ label="搴旈殢璁夸汉娆�"
+ align="center"
+ width="100"
+ key="followUpNeeded"
+ prop="followUpNeeded"
+ >
+ </el-table-column>
+ <el-table-column align="center" label="棣栨鍑洪櫌闅忚">
+ <el-table-column
+ label="闇�闅忚"
+ align="center"
+ key="needFollowUp"
+ prop="needFollowUp"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰呴殢璁�"
+ align="center"
+ key="pendingFollowUp"
+ prop="pendingFollowUp"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚鎴愬姛"
+ align="center"
+ key="followUpSuccess"
+ prop="followUpSuccess"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚澶辫触"
+ align="center"
+ key="followUpFail"
+ prop="followUpFail"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚鐜�"
+ align="center"
+ width="120"
+ key="followUpRate"
+ prop="followUpRate"
+ >
+ <!-- <template slot-scope="scope">
+ <span
+ >{{
+ (Number(scope.row.followUpRate) * 100).toFixed(2)
+ }}%</span
+ >
+ </template> -->
+ </el-table-column>
+ <el-table-column
+ label="鍙婃椂鐜�"
+ align="center"
+ width="120"
+ key="rate"
+ prop="rate"
+ >
+ <template slot-scope="scope">
+ <el-button
+ size="medium"
+ type="text"
+ @click="Seedetails(scope.row)"
+ ><span class="button-zx"
+ >{{
+ (Number(scope.row.rate) * 100).toFixed(2)
+ }}%</span
+ ></el-button
+ >
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="浜哄伐"
+ align="center"
+ key="manual"
+ prop="manual"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鐭俊"
+ align="center"
+ key="sms"
+ prop="sms"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰俊"
+ align="center"
+ key="weChat"
+ prop="weChat"
+ >
+ </el-table-column>
+ </el-table-column>
+ <el-table-column align="center" label="鍐嶆鍑洪櫌闅忚">
+ <el-table-column
+ label="闇�闅忚"
+ align="center"
+ key="needFollowUpAgain"
+ prop="needFollowUpAgain"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰呴殢璁�"
+ align="center"
+ key="pendingFollowUpAgain"
+ prop="pendingFollowUpAgain"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚鎴愬姛"
+ align="center"
+ key="followUpSuccessAgain"
+ prop="followUpSuccessAgain"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚澶辫触"
+ align="center"
+ key="followUpFailAgain"
+ prop="followUpFailAgain"
+ >
+ </el-table-column>
+ <el-table-column
+ label="闅忚鐜�"
+ align="center"
+ width="120"
+ key="followUpRateAgain"
+ prop="followUpRateAgain"
+ >
+ <!-- <template slot-scope="scope">
+ <span
+ >{{
+ (Number(scope.row.FollowUpRateAgain) * 100).toFixed(2)
+ }}%</span
+ >
+ </template> -->
+ </el-table-column>
+ <el-table-column
+ label="浜哄伐"
+ align="center"
+ key="manualAgain"
+ prop="manualAgain"
+ >
+ </el-table-column>
+ <el-table-column
+ label="鐭俊"
+ align="center"
+ key="smsAgain"
+ prop="smsAgain"
+ >
+ </el-table-column>
+ <el-table-column
+ label="寰俊"
+ align="center"
+ key="weChatAgain"
+ prop="weChatAgain"
+ >
+ </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>
+ </div>
<!-- <pagination
v-show="total > 0"
@@ -883,7 +899,7 @@
return {
topactiveName: "Local", //椤堕儴閫夋嫨
activeName: "first", //渚ц竟閫夋嫨
- orgname:'',
+ orgname: "",
expands: [],
// 閬僵灞�
loading: false,
@@ -1003,7 +1019,6 @@
this.getDeptTree();
this.getList();
this.orgname = localStorage.getItem("orgname");
-
},
methods: {
@@ -1064,6 +1079,162 @@
} else {
this.expands = [this.getRowKey(row)];
}
+ },
+ getSummaries(param) {
+ const { columns, data } = param;
+ const sums = [];
+
+ columns.forEach((column, index) => {
+ if (index === 0) {
+ sums[index] = "鍚堣";
+ return;
+ }
+ if (index === 1||index === 2) {
+ sums[index] = "/";
+ return;
+ }
+
+ // 瀵圭櫨鍒嗘瘮瀛楁鐗规畩澶勭悊 - 鍙栧钩鍧囧��
+ if (
+ column.property === "followUpRate" ||
+ column.property === "rate" ||
+ column.property === "followUpRateAgain"
+ ) {
+ // 鎻愬彇鎵�鏈夋湁鏁堢櫨鍒嗘瘮鍊煎苟杞崲涓哄皬鏁�
+ const percentageValues = data
+ .map((item) => {
+ const value = item[column.property];
+ if (!value || value === "-" || value === "0%") return null;
+
+ // 澶勭悊甯︾櫨鍒嗗彿鐨勬暟鎹�
+ if (typeof value === "string" && value.includes("%")) {
+ // 鍘婚櫎鐧惧垎鍙峰苟杞崲涓哄皬鏁�
+ const numValue = parseFloat(value.replace("%", "")) / 100;
+ return isNaN(numValue) ? null : numValue;
+ } else {
+ // 澶勭悊宸茬粡鏄皬鏁扮殑鏁版嵁
+ const numValue = parseFloat(value);
+ return isNaN(numValue) ? null : numValue;
+ }
+ })
+ .filter((value) => value !== null && value !== 0); // 杩囨护鎺塶ull鍜�0鍊�
+
+ if (percentageValues.length > 0) {
+ const average =
+ percentageValues.reduce((sum, value) => sum + value, 0) /
+ percentageValues.length;
+ sums[index] = (average * 100).toFixed(2) + "%";
+ } else {
+ sums[index] = "0.00%";
+ }
+ } else {
+ // 鏅�氭暟瀛楀瓧娈� - 姹傚拰
+ const values = data.map((item) => {
+ const value = item[column.property];
+ if (value === "-" || value === "" || value === null) return 0;
+ return Number(value) || 0;
+ });
+
+ if (!values.every((value) => isNaN(value))) {
+ sums[index] = values.reduce((prev, curr) => prev + curr, 0);
+ sums[index] = this.formatNumber(sums[index]);
+ } else {
+ sums[index] = "-";
+ }
+ }
+ });
+
+ return sums;
+ },
+
+ // 鍐呴儴琛ㄦ牸鍚堣琛岃绠楁柟娉�
+ getInnerSummaries(param) {
+ const { columns, data } = param;
+ const sums = [];
+
+ columns.forEach((column, index) => {
+ if (index === 0) {
+ sums[index] = "灏忚";
+ return;
+ }
+
+ if (column.property === "drname" || column.property === "deptname") {
+ sums[index] = "-";
+ return;
+ }
+
+ // 瀵圭櫨鍒嗘瘮瀛楁鐗规畩澶勭悊 - 鍙栧钩鍧囧��
+ if (column.property === "followUpRate" || column.property === "rate") {
+ // 鎻愬彇鎵�鏈夋湁鏁堢櫨鍒嗘瘮鍊煎苟杞崲涓哄皬鏁�
+ const percentageValues = data
+ .map((item) => {
+ const value = item[column.property];
+ if (!value || value === "-" || value === "0%") return null;
+
+ // 澶勭悊甯︾櫨鍒嗗彿鐨勬暟鎹�
+ if (typeof value === "string" && value.includes("%")) {
+ // 鍘婚櫎鐧惧垎鍙峰苟杞崲涓哄皬鏁�
+ const numValue = parseFloat(value.replace("%", "")) / 100;
+ return isNaN(numValue) ? null : numValue;
+ } else {
+ // 澶勭悊宸茬粡鏄皬鏁扮殑鏁版嵁
+ const numValue = parseFloat(value);
+ return isNaN(numValue) ? null : numValue;
+ }
+ })
+ .filter((value) => value !== null && value !== 0);
+
+ if (percentageValues.length > 0) {
+ const average =
+ percentageValues.reduce((sum, value) => sum + value, 0) /
+ percentageValues.length;
+ sums[index] = (average * 100).toFixed(2) + "%";
+ } else {
+ sums[index] = "0.00%";
+ }
+ } else {
+ // 鏅�氭暟瀛楀瓧娈� - 姹傚拰
+ const values = data.map((item) => {
+ const value = item[column.property];
+ if (value === "-" || value === "" || value === null) return 0;
+ return Number(value) || 0;
+ });
+
+ if (!values.every((value) => isNaN(value))) {
+ sums[index] = values.reduce((prev, curr) => prev + curr, 0);
+ sums[index] = this.formatNumber(sums[index]);
+ } else {
+ sums[index] = "-";
+ }
+ }
+ });
+
+ return sums;
+ },
+
+ // 杈呭姪鏂规硶锛氭彁鍙栫櫨鍒嗘瘮鏁板��
+ extractPercentageValue(value) {
+ if (!value) return null;
+
+ if (typeof value === "string") {
+ // 澶勭悊甯︾櫨鍒嗗彿鐨勫瓧绗︿覆
+ if (value.includes("%")) {
+ const num = parseFloat(value.replace("%", ""));
+ return isNaN(num) ? null : num / 100;
+ }
+ // 澶勭悊绾暟瀛楀瓧绗︿覆
+ const num = parseFloat(value);
+ return isNaN(num) ? null : num;
+ }
+
+ // 澶勭悊鏁板瓧绫诲瀷
+ return typeof value === "number" ? value : null;
+ },
+
+ // 鏁板瓧鏍煎紡鍖栨柟娉�
+ formatNumber(num) {
+ if (isNaN(num)) return "-";
+ return Number.isInteger(num) ? num.toString() : num.toFixed(0);
},
/** 淇敼鏍囩 */
handleUpdate(row) {
@@ -1325,298 +1496,302 @@
},
// 鍒濆鍖栭ゼ鍥�
-initPieChart() {
- const echarts = require("echarts");
- const pieDom = document.getElementById("pieChart");
- if (!pieDom) return;
+ 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
+ if (this.pieChart) {
+ this.pieChart.dispose();
}
- },
- 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"
+
+ 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,
},
- itemStyle: {
- shadowBlur: 10,
- shadowOffsetX: 0,
- shadowColor: 'rgba(0, 0, 0, 0.5)'
- }
},
- data: [
- {
- value: followUpData.pending,
- name: "寰呴殢璁�"
+ tooltip: {
+ trigger: "item",
+ formatter: "{a} <br/>{b}: {c} ({d}%)",
+ },
+ legend: {
+ orient: "vertical",
+ left: "left",
+ data: ["寰呴殢璁�", "闅忚鎴愬姛", "闅忚澶辫触"],
+ textStyle: {
+ color: "#666",
},
+ },
+ color: ["#FF9D4D", "#36B37E", "#FF5C5C"], // 鏂扮殑閰嶈壊鏂规
+ series: [
{
- 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'
+ name: "闅忚鐘舵��",
+ type: "pie",
+ radius: ["40%", "70%"],
+ avoidLabelOverlap: true,
+ itemStyle: {
+ borderRadius: 10,
+ borderColor: "#fff",
+ borderWidth: 2,
},
- // 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: {
+ show: true,
+ formatter: "{b}: {c} ({d}%)",
+ color: "#333",
},
- // label: {
- // position: 'end',
- // formatter: '鐩爣90%'
- // }
- }]
- }
- }
- ],
- grid: {
- top: '15%',
- left: '3%',
- right: '4%',
- bottom: '15%',
- containLabel: true
- }
- };
+ 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.barLineChart.setOption(option);
- window.addEventListener("resize", this.resizeBarLineChart);
-},
+ 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() {
@@ -1727,6 +1902,41 @@
text-align: left;
font-size: 20px;
}
+// 缇庡寲鍚堣琛屾牱寮�
+::v-deep .el-table__footer {
+ .el-table__cell {
+ background-color: #f5f7fa;
+ font-weight: 600;
+ color: #409eff;
+
+ .cell {
+ font-weight: 600;
+ color: #409eff;
+ }
+ }
+}
+
+// 鍐呴儴琛ㄦ牸鍚堣琛屾牱寮�
+::v-deep .inner-table .el-table__footer {
+ .el-table__cell {
+ background-color: #ecf5ff;
+ font-weight: 500;
+ color: #67c23a;
+
+ .cell {
+ font-weight: 500;
+ color: #67c23a;
+ }
+ }
+}
+
+// 鐧惧垎姣斿瓧娈电壒娈婃牱寮�
+.your-table-container ::v-deep .el-table__footer .el-table__cell[data-field="followUpRate"] .cell,
+.your-table-container ::v-deep .el-table__footer .el-table__cell[data-field="rate"] .cell,
+.your-table-container ::v-deep .el-table__footer .el-table__cell[data-field="followUpRateAgain"] .cell {
+ color: #e6a23c !important;
+ font-weight: 700 !important;
+}
.leftvlue {
// display: flex;
--
Gitblit v1.9.3