From 94ce59bb6e94bd5e78f32d921ce5c14d641dabc8 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期三, 15 四月 2026 09:04:45 +0800
Subject: [PATCH] 测试完成
---
src/views/sfstatistics/percentage/index.vue | 2846 ++++++----------------------------------------------------
1 files changed, 304 insertions(+), 2,542 deletions(-)
diff --git a/src/views/sfstatistics/percentage/index.vue b/src/views/sfstatistics/percentage/index.vue
index 89b81a6..911156a 100644
--- a/src/views/sfstatistics/percentage/index.vue
+++ b/src/views/sfstatistics/percentage/index.vue
@@ -1,2607 +1,369 @@
<template>
- <div class="Questionnairemanagement">
- <div class="leftvlue">
- <div class="leftvlue-bg">
- <el-row :gutter="20">
- <!--鏍囩鏁版嵁-->
- <el-col :span="24" :xs="24">
- <el-form
- :model="queryParams"
- ref="queryForm"
- size="small"
- :inline="true"
- v-show="showSearch"
- label-width="98px"
- >
- <el-form-item label="缁熻绫诲瀷" prop="userName">
- <el-select
- v-model="queryParams.statisticaltype"
- placeholder="璇烽�夋嫨缁熻绫诲瀷"
- >
- <el-option
- v-for="item in Statisticallist"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- <el-select
- style="margin-left: 10px"
- v-if="queryParams.statisticaltype == 1"
- v-model="queryParams.leavehospitaldistrictcodes"
- size="medium"
- multiple
- filterable
- placeholder="璇烽�夋嫨鐥呭尯"
- >
- <el-option
- v-for="item in flatArrayhospit"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- <el-select
- v-else-if="queryParams.statisticaltype == 2"
- v-model="queryParams.deptcodes"
- size="medium"
- multiple
- filterable
- placeholder="璇烽�夋嫨绉戝"
- >
- <el-option
- v-for="item in flatArraydept"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
+ <div class="follow-up-statistics">
+ <!-- 鎼滅储琛ㄥ崟鍖哄煙 -->
+ <div class="search-section">
+ <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="98px">
+ <el-form-item label="缁熻绫诲瀷" prop="userName">
+ <el-select v-model="queryParams.statisticaltype" placeholder="璇烽�夋嫨缁熻绫诲瀷">
+ <el-option v-for="item in Statisticallist" :key="item.value" :label="item.label" :value="item.value" />
+ </el-select>
+ <el-select
+ style="margin-left: 10px"
+ v-if="queryParams.statisticaltype == 1"
+ v-model="queryParams.leavehospitaldistrictcodes"
+ size="medium"
+ multiple
+ filterable
+ placeholder="璇烽�夋嫨鐥呭尯"
+ >
+ <el-option v-for="item in flatArrayhospit" :key="item.value" :label="item.label" :value="item.value" />
+ </el-select>
+ <el-select
+ v-else-if="queryParams.statisticaltype == 2"
+ v-model="queryParams.deptcodes"
+ size="medium"
+ multiple
+ filterable
+ placeholder="璇烽�夋嫨绉戝"
+ >
+ <el-option v-for="item in flatArraydept" :key="item.value" :label="item.label" :value="item.value" />
+ </el-select>
+ </el-form-item>
- <el-form-item label="缁熻绫诲瀷" prop="userName">
- <el-select
- v-model="queryParams.serviceType"
- multiple
- placeholder="璇烽�夋嫨"
- >
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item
- label-width="200"
- label="搴旈殢璁挎椂闂磋寖鍥�"
- prop="userName"
- >
- <el-date-picker
- v-model="queryParams.dateRange"
- value-format="yyyy-MM-dd HH:mm:ss"
- type="daterange"
- range-separator="鑷�"
- start-placeholder="寮�濮嬫棩鏈�"
- end-placeholder="缁撴潫鏃ユ湡"
- :default-time="['00:00:00', '23:59:59']"
- >
- >
- </el-date-picker>
- </el-form-item>
+ <el-form-item label="鏈嶅姟绫诲瀷" prop="userName">
+ <el-select v-model="queryParams.serviceType" multiple placeholder="璇烽�夋嫨">
+ <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+ </el-select>
+ </el-form-item>
- <el-form-item>
- <el-button
- type="primary"
- icon="el-icon-search"
- size="medium"
- @click="handleQuery"
- >鎼滅储</el-button
- >
- <el-button
- icon="el-icon-refresh"
- size="medium"
- @click="resetQuery"
- >閲嶇疆</el-button
- >
- </el-form-item>
- <el-col :span="19">
- <el-button
- type="warning"
- plain
- icon="el-icon-download"
- size="medium"
- @click="exportTable"
- >瀵煎嚭</el-button
- >
- <el-button
- type="primary"
- plain
- icon="el-icon-data-line"
- size="medium"
- @click="showChartDialog"
- >缁熻瓒嬪娍鍥�</el-button
- >
- </el-col>
- </el-form>
- <div class="your-table-container">
- <el-table
- ref="exportTable"
- id="exportTableid"
- 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
- 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-form-item label-width="200" label="搴旈殢璁挎椂闂磋寖鍥�" prop="userName">
+ <el-date-picker
+ v-model="queryParams.dateRange"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ :default-time="['00:00:00', '23:59:59']"
+ />
+ </el-form-item>
- <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
- >
- </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-form-item>
+ <el-button type="primary" icon="el-icon-search" size="medium" @click="handleQuery">鎼滅储</el-button>
+ <el-button icon="el-icon-refresh" size="medium" @click="resetQuery">閲嶇疆</el-button>
+ </el-form-item>
- <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"
- >
- <template slot-scope="scope">
- <el-button
- size="medium"
- type="text"
- @click="
- viewDetails(
- scope.row.pendingFollowUpInfo,
- scope.row.leavehospitaldistrictname + '寰呴殢璁垮垪琛�'
- )
- "
- ><span class="button-zx">{{
- scope.row.pendingFollowUp
- }}</span></el-button
- >
- </template>
- </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"
- >
- <template slot-scope="scope">
- <el-button
- size="medium"
- type="text"
- @click="
- viewDetails(
- scope.row.followUpFailInfo,
- scope.row.leavehospitaldistrictname + '闅忚澶辫触鍒楄〃'
- )
- "
- ><span class="button-zx">{{
- scope.row.followUpFail
- }}</span></el-button
- >
- </template>
- </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"
- :total="total"
- :page.sync="queryParams.pageNum"
- :limit.sync="queryParams.pageSize"
- @pagination="getList"
- /> -->
- </el-col>
- </el-row>
- </div>
+ <el-button type="warning" plain icon="el-icon-download" size="medium" @click="handleExport">瀵煎嚭</el-button>
+ <el-button type="primary" plain icon="el-icon-data-line" size="medium" @click="showChartDialog">缁熻瓒嬪娍鍥�</el-button>
+ </el-form>
</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"
- v-loading="Seedloading"
- width="70%"
- :close-on-click-modal="false"
- >
- <div class="examine-jic">
- <div class="jic-value">
- <el-row :gutter="20">
- <!--鐢ㄦ埛鏁版嵁-->
- <el-form
- :model="patientqueryParams"
- ref="queryForm"
- size="small"
- :inline="true"
- label-width="98px"
- >
- <el-form-item label="鎮h�咃細">
- <el-input
- v-model="patientqueryParams.name"
- @keyup.enter.native="handleQuery"
- ></el-input>
- </el-form-item>
- <el-form-item label="鎮h�呰瘖鏂細">
- <el-input
- v-model="patientqueryParams.leavediagname"
- @keyup.enter.native="handleQuery"
- ></el-input>
- </el-form-item>
- <el-form-item>
- <el-button
- type="primary"
- icon="el-icon-search"
- size="medium"
- @click="handleQuery"
- >鎼滅储</el-button
- >
- <el-button
- icon="el-icon-refresh"
- size="medium"
- @click="resetQuery"
- >鍙栨秷鍒涘缓</el-button
- >
- </el-form-item>
- </el-form>
- <!-- 閫夋嫨鎮h�呭垪琛� -->
- <el-table :data="logsheetlist" style="width: 100%">
- <el-table-column
- prop="sendname"
- align="center"
- label="濮撳悕"
- width="100"
- >
- </el-table-column>
- <el-table-column
- prop="taskName"
- align="center"
- width="200"
- show-overflow-tooltip
- label="浠诲姟鍚嶇О"
- >
- </el-table-column>
- <el-table-column
- prop="sendstate"
- align="center"
- width="200"
- label="浠诲姟鐘舵��"
- >
- <template slot-scope="scope">
- <div v-if="scope.row.sendstate == 1">
- <el-tag type="primary" :disable-transitions="false"
- >琛ㄥ崟宸查鍙�</el-tag
- >
- </div>
- <div v-if="scope.row.sendstate == 2">
- <el-tag type="primary" :disable-transitions="false"
- >寰呴殢璁�</el-tag
- >
- </div>
- <div v-if="scope.row.sendstate == 3">
- <el-tag type="success" :disable-transitions="false"
- >琛ㄥ崟宸插彂閫�</el-tag
- >
- </div>
- <div v-if="scope.row.sendstate == 4">
- <el-tag type="info" :disable-transitions="false"
- >涓嶆墽琛�</el-tag
- >
- </div>
- <div v-if="scope.row.sendstate == 5">
- <el-tag type="danger" :disable-transitions="false"
- >鍙戦�佸け璐�</el-tag
- >
- </div>
- <div v-if="scope.row.sendstate == 6">
- <el-tag type="success" :disable-transitions="false"
- >宸插畬鎴�</el-tag
- >
- </div>
- </template>
- </el-table-column>
- <el-table-column
- prop="visitTime"
- align="center"
- label="搴旈殢璁挎椂闂�"
- width="200"
- show-overflow-tooltip
- >
- </el-table-column>
- <el-table-column
- prop="finishtime"
- align="center"
- label="闅忚瀹屾垚鏃堕棿"
- width="200"
- show-overflow-tooltip
- >
- </el-table-column>
- <el-table-column
- label="鍑洪櫌鏃ユ湡"
- width="200"
- align="center"
- key="endtime"
- prop="endtime"
- >
- <template slot-scope="scope">
- <span>{{ formatTime(scope.row.endtime) }}</span>
- </template></el-table-column
- >
- <el-table-column
- label="璐d换鎶ゅ+"
- width="120"
- align="center"
- key="nurseName"
- prop="nurseName"
- />
- <el-table-column
- label="涓绘不鍖荤敓"
- width="120"
- align="center"
- key="drname"
- prop="drname"
- />
-
- <el-table-column
- label="缁撴灉鐘舵��"
- align="center"
- key="excep"
- prop="excep"
- width="120"
- >
- <template slot-scope="scope">
- <dict-tag
- :options="dict.type.sys_yujing"
- :value="scope.row.excep"
- />
- </template>
- </el-table-column>
- <el-table-column
- label="澶勭悊鎰忚"
- align="center"
- key="suggest"
- prop="suggest"
- width="120"
- >
- <template slot-scope="scope">
- <dict-tag
- :options="dict.type.sys_suggest"
- :value="scope.row.suggest"
- />
- </template>
- </el-table-column>
-
- <el-table-column
- prop="templatename"
- align="center"
- label="鏈嶅姟妯℃澘"
- width="200"
- show-overflow-tooltip
- >
- </el-table-column>
- <el-table-column
- prop="remark"
- align="center"
- label="鏈嶅姟璁板綍"
- width="200"
- show-overflow-tooltip
- >
- </el-table-column>
-
- <el-table-column
- prop="bankcardno"
- align="center"
- label="鍛煎彨鐘舵��"
- width="210"
- >
- </el-table-column>
- <el-table-column
- label="鎿嶄綔"
- fixed="right"
- align="center"
- width="200"
- class-name="small-padding fixed-width"
- >
- <template slot-scope="scope">
- <el-button
- size="medium"
- type="text"
- @click="SeedetailsgGo(scope.row)"
- ><span class="button-zx"
- ><i class="el-icon-s-order"></i>鏌ョ湅</span
- ></el-button
- >
- </template>
- </el-table-column>
- </el-table>
- </el-row>
- <pagination
- v-show="patienttotal > 0 && this.patientqueryParams.allhosp != 6"
- :total="patienttotal"
- :page.sync="patientqueryParams.pn"
- :limit.sync="patientqueryParams.ps"
- @pagination="Seedetails"
+ <!-- Tab鍒囨崲鍖哄煙 -->
+ <div class="tab-section">
+ <el-tabs v-model="activeTab" @tab-click="handleTabClick">
+ <el-tab-pane label="棣栨闅忚" name="first">
+ <FirstFollowUp
+ ref="firstFollowUp"
+ :query-params="queryParams"
+ :flat-array-hospit="flatArrayhospit"
+ :flat-array-dept="flatArraydept"
+ :options="options"
+ :orgname="orgname"
+ @view-details="viewDetails"
+ @see-details="Seedetails"
/>
- </div>
- </div>
- </el-dialog>
- <!-- 鍚勭被璇︽儏 -->
- <el-dialog
+ </el-tab-pane>
+
+ <el-tab-pane label="鍐嶆闅忚" name="second">
+ <SecondFollowUp
+ ref="secondFollowUp"
+ :query-params="queryParams"
+ :flat-array-hospit="flatArrayhospit"
+ :flat-array-dept="flatArraydept"
+ :options="options"
+ :orgname="orgname"
+ @view-details="viewDetails"
+ />
+ </el-tab-pane>
+
+ <el-tab-pane label="寤剁画鎶ょ悊缁熻" name="continued" v-if="orgname == '鐪佺珛鍚屽痉缈犺嫅闄㈠尯'">
+ <ContinuedCare
+ ref="continuedCare"
+ :query-params="queryParams"
+ :flat-array-hospit="flatArrayhospit"
+ :flat-array-dept="flatArraydept"
+ :options="options"
+ :orgname="orgname"
+ @view-details="viewDetails"
+ />
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+
+ <!-- 寮圭獥鍖哄煙 -->
+ <ChartDialog
+ :visible="chartDialogVisible"
+ :data="chartData"
+ :active-tab="activeTab"
+ @close="chartDialogVisible = false"
+ />
+
+ <DetailDialog
+ :visible="infotitleVisible"
:title="infotitle"
- :visible.sync="infotitleVisible"
- v-loading="infotitloading"
- width="70%"
- :close-on-click-modal="false"
- >
- <div class="examine-jic">
- <div class="jic-value">
- <el-row :gutter="20">
- <!-- 閫夋嫨鎮h�呭垪琛� -->
- <el-table :data="infotitlelist" height="660" style="width: 100%">
- <el-table-column
- prop="sendname"
- align="center"
- label="濮撳悕"
- width="100"
- >
- </el-table-column>
- <el-table-column
- prop="taskName"
- align="center"
- width="200"
- show-overflow-tooltip
- label="浠诲姟鍚嶇О"
- >
- </el-table-column>
- <el-table-column
- prop="sendstate"
- align="center"
- width="200"
- label="浠诲姟鐘舵��"
- >
- <template slot-scope="scope">
- <div v-if="scope.row.sendstate == 1">
- <el-tag type="primary" :disable-transitions="false"
- >琛ㄥ崟宸查鍙�</el-tag
- >
- </div>
- <div v-if="scope.row.sendstate == 2">
- <el-tag type="primary" :disable-transitions="false"
- >寰呴殢璁�</el-tag
- >
- </div>
- <div v-if="scope.row.sendstate == 3">
- <el-tag type="success" :disable-transitions="false"
- >琛ㄥ崟宸插彂閫�</el-tag
- >
- </div>
- <div v-if="scope.row.sendstate == 4">
- <el-tag type="info" :disable-transitions="false"
- >涓嶆墽琛�</el-tag
- >
- </div>
- <div v-if="scope.row.sendstate == 5">
- <el-tag type="danger" :disable-transitions="false"
- >鍙戦�佸け璐�</el-tag
- >
- </div>
- <div v-if="scope.row.sendstate == 6">
- <el-tag type="success" :disable-transitions="false"
- >宸插畬鎴�</el-tag
- >
- </div>
- </template>
- </el-table-column>
- <el-table-column
- prop="visitTime"
- align="center"
- label="搴旈殢璁挎椂闂�"
- width="200"
- show-overflow-tooltip
- >
- </el-table-column>
- <el-table-column
- prop="finishtime"
- align="center"
- label="闅忚瀹屾垚鏃堕棿"
- width="200"
- show-overflow-tooltip
- >
- </el-table-column>
- <el-table-column
- label="鍑洪櫌鏃ユ湡"
- width="200"
- align="center"
- key="endtime"
- prop="endtime"
- >
- <template slot-scope="scope">
- <span>{{ formatTime(scope.row.endtime) }}</span>
- </template></el-table-column
- >
- <el-table-column
- label="璐d换鎶ゅ+"
- width="120"
- align="center"
- key="nurseName"
- prop="nurseName"
- />
- <el-table-column
- label="涓绘不鍖荤敓"
- width="120"
- align="center"
- key="drname"
- prop="drname"
- />
+ :data="infotitlelist"
+ :search-name="searchName"
+ @close="infotitleVisible = false"
+ @search="handleSearch"
+ @details-go="SeedetailsgGo"
+ />
- <el-table-column
- label="缁撴灉鐘舵��"
- align="center"
- key="excep"
- prop="excep"
- width="120"
- >
- <template slot-scope="scope">
- <dict-tag
- :options="dict.type.sys_yujing"
- :value="scope.row.excep"
- />
- </template>
- </el-table-column>
- <el-table-column
- label="澶勭悊鎰忚"
- align="center"
- key="suggest"
- prop="suggest"
- width="120"
- >
- <template slot-scope="scope">
- <dict-tag
- :options="dict.type.sys_suggest"
- :value="scope.row.suggest"
- />
- </template>
- </el-table-column>
-
- <el-table-column
- prop="templatename"
- align="center"
- label="鏈嶅姟妯℃澘"
- width="200"
- show-overflow-tooltip
- >
- </el-table-column>
- <el-table-column
- prop="remark"
- align="center"
- label="鏈嶅姟璁板綍"
- width="200"
- show-overflow-tooltip
- >
- </el-table-column>
-
- <el-table-column
- prop="bankcardno"
- align="center"
- label="鍛煎彨鐘舵��"
- width="210"
- >
- </el-table-column>
- <el-table-column
- label="鎿嶄綔"
- fixed="right"
- align="center"
- width="200"
- class-name="small-padding fixed-width"
- >
- <template slot-scope="scope">
- <el-button
- size="medium"
- type="text"
- @click="SeedetailsgGo(scope.row)"
- ><span class="button-zx"
- ><i class="el-icon-s-order"></i>鏌ョ湅</span
- ></el-button
- >
- </template>
- </el-table-column>
- </el-table>
- </el-row>
- <pagination
- v-show="patienttotal > 0 && this.patientqueryParams.allhosp != 6"
- :total="patienttotal"
- :page.sync="patientqueryParams.pn"
- :limit.sync="patientqueryParams.ps"
- @pagination="Seedetails"
- />
- </div>
- </div>
- </el-dialog>
+ <TimelyRateDialog
+ :visible="SeedetailsVisible"
+ :loading="Seedloading"
+ :data="logsheetlist"
+ :total="patienttotal"
+ :query-params="patientqueryParams"
+ @close="SeedetailsVisible = false"
+ @search="Seedetailstion"
+ @details-go="SeedetailsgGo"
+ />
</div>
</template>
<script>
-import {
- toamendtag,
- addapitag,
- deletetag,
- changetagcategory,
-} from "@/api/system/label";
-import store from "@/store";
-import { getSfStatistics, selectTimelyRate } from "@/api/system/user";
-import * as XLSX from "xlsx";
-import FileSaver from "file-saver";
-import ExcelJS from "exceljs";
-import { saveAs } from "file-saver";
-import Treeselect from "@riophae/vue-treeselect";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-const shortcuts = [
- {
- text: "浠婂ぉ",
- onClick(picker) {
- picker.$emit("pick", new Date());
- },
- },
- {
- text: "鏄ㄥぉ",
- onClick(picker) {
- const date = new Date();
- date.setTime(date.getTime() - 3600 * 1000 * 24);
- picker.$emit("pick", date);
- },
- },
- {
- text: "涓�鍛ㄥ墠",
- onClick(picker) {
- const date = new Date();
- date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
- picker.$emit("pick", date);
- },
- },
-];
+import FirstFollowUp from './components/FirstFollowUp.vue'
+import SecondFollowUp from './components/SecondFollowUp.vue'
+import ContinuedCare from './components/ContinuedCare.vue'
+import ChartDialog from './components/ChartDialog.vue'
+import DetailDialog from './components/DetailDialog.vue'
+import TimelyRateDialog from './components/TimelyRateDialog.vue'
+
+
export default {
- name: "Percentage",
- dicts: ["sys_normal_disable", "sys_user_sex"],
- components: { Treeselect },
+ name: 'FollowUpStatistics',
+ components: {
+ FirstFollowUp,
+ SecondFollowUp,
+ ContinuedCare,
+ ChartDialog,
+ DetailDialog,
+ TimelyRateDialog
+ },
data() {
return {
- topactiveName: "Local", //椤堕儴閫夋嫨
- activeName: "first", //渚ц竟閫夋嫨
- orgname: "",
- expands: [],
- infotitlelist: [],
- // 閬僵灞�
- loading: false,
- Seedloading: false,
- chartDialogVisible: false,
- infotitleVisible: false,
- infotitloading: false,
- infotitle: "",
- pieChart: null,
- barLineChart: null,
- // 閫変腑鏁扮粍
- ids: [],
- // 闈炲崟涓鐢�
- single: true,
- // 闈炲涓鐢�
- multiple: true,
- // 鏄剧ず鎼滅储鏉′欢
- showSearch: true,
- idds: "", //鍒嗙被id
- // 鎬绘潯鏁�
- total: 0,
- flatArrayhospit: [],
- flatArraydept: [],
- patienttotal: 0,
- logsheetlist: [],
+ activeTab: 'first',
+ orgname: localStorage.getItem('orgname') || '',
Statisticallist: [
- {
- label: "鐥呭尯缁熻",
- value: 1,
- },
- {
- label: "绉戝缁熻",
- value: 2,
- },
+ { label: '鐥呭尯缁熻', value: 1 },
+ { label: '绉戝缁熻', value: 2 }
],
- patientqueryParams: {
- pn: 1,
- ps: 10,
- },
- amendtag: false, //鏄惁淇敼绫诲埆
- lstamendtag: false, //鏄惁淇敼鏍囩
- scavisible: false, //鍒犻櫎寮规
- deleteVisible: false, //鍒嗙被鍒犻櫎寮规
- deletefenl: "楂樿鍘�", //鍒犻櫎椤�
- //淇敼娣诲姞鏍囩寮规鏁版嵁
- tagform: {
- isupload: "",
- tagname: "",
- tagcategoryid: "",
- tagdescription: "",
- },
- classifyform: {
- categoryname: "",
- },
- // 鏍囩琛ㄦ牸鏁版嵁
- userList: [],
- // 寮瑰嚭灞傛爣棰�
- title: "",
- // 鏄惁鏄剧ず寮瑰嚭灞�
- open: false,
- // 鏃ユ湡鑼冨洿
- dateRange: [],
- // 宀椾綅閫夐」
- postOptions: [],
- // 瑙掕壊閫夐」
- roleOptions: [],
- // 瀛樺偍鎵�鏈夌瀹や唬鐮�
- allDeptCodes: [],
- // 瀛樺偍鎵�鏈夌梾鍖轰唬鐮�
- allWardCodes: [],
- // 琛ㄥ崟鍙傛暟
- form: {},
- forms: {
- name: "",
- },
- numberlb: 22,
- dialogFormVisible: false, //娣诲姞銆佷慨鏀圭被鍒脊妗�
- lstamendtagVisible: false, //娣诲姞銆佷慨鏀规爣绛惧脊妗�
- goQRCodeVisible: false, //浜岀淮鐮佸脊妗�
- sidecolumnval: "", //绫诲埆鎼滅储
- propss: { multiple: true },
- SeedetailsVisible: false,
- options: store.getters.tasktypes,
- pickerOptions: {
- disabledDate(time) {
- return time.getTime() < Date.now() - 3600 * 1000 * 24;
- },
- shortcuts: shortcuts,
- },
- pickerOptionsa: {
- disabledDate(time) {
- return time.getTime() > Date.now();
- },
- shortcuts: shortcuts,
- },
- // 鏌ヨ鏍囩鍒楄〃鍙傛暟
+ options: this.$store.getters.tasktypes,
queryParams: {
serviceType: [2],
dateRange: [],
statisticaltype: 1,
- leavehospitaldistrictcodes: ["all"], // 榛樿閫変腑鍏ㄩ儴鐥呭尯
- deptcodes: [], // 榛樿閫変腑鍏ㄩ儴绉戝
+ leavehospitaldistrictcodes: ['all'],
+ deptcodes: []
},
- // 鍒椾俊鎭�
- columns: [
- { key: 0, label: `鏍囩缂栧彿`, visible: true },
- { key: 1, label: `鏍囩鍚嶇О`, visible: true },
- { key: 2, label: `鏍囩鏄电О`, visible: true },
- { key: 3, label: `閮ㄩ棬`, visible: true },
- { key: 4, label: `鎵嬫満鍙风爜`, visible: true },
- { key: 5, label: `鐘舵�乣, visible: true },
- { key: 6, label: `鍒涘缓鏃堕棿`, visible: true },
- ],
- };
+ flatArrayhospit: [],
+ flatArraydept: [],
+ allDeptCodes: [],
+ allWardCodes: [],
+ showSearch: true,
+
+ // 寮圭獥鐩稿叧鐘舵��
+ chartDialogVisible: false,
+ chartData: [],
+ infotitleVisible: false,
+ SeedetailsVisible: false,
+ searchName: '',
+ infotitle: '',
+ infotitlelist: [],
+ patienttotal: 0,
+ logsheetlist: [],
+ Seedloading: false,
+ patientqueryParams: {
+ pn: 1,
+ ps: 10
+ }
+ }
},
- watch: {},
created() {
- this.getDeptTree();
- this.getList();
- this.orgname = localStorage.getItem("orgname");
+ this.getDeptTree()
},
-
methods: {
- /** 鏌ヨ鏍囩鍒楄〃 */
- getList() {
- // 澶勭悊鏌ヨ鍙傛暟
- const params = {
- ...this.queryParams,
- // 濡傛灉閫夋嫨浜�"鍏ㄩ儴"锛屽垯浼犳墍鏈夌梾鍖�/绉戝浠g爜
- leavehospitaldistrictcodes:
- this.queryParams.leavehospitaldistrictcodes.includes("all")
- ? this.allWardCodes
- : this.queryParams.leavehospitaldistrictcodes,
- deptcodes: this.queryParams.deptcodes.includes("all")
- ? this.allDeptCodes
- : this.queryParams.deptcodes,
- };
-
- // 绉婚櫎鍙兘瀛樺湪鐨�"all"鍊�
- delete params.leavehospitaldistrictcodes.all;
- delete params.deptcodes.all;
- getSfStatistics(params).then((response) => {
- console.log(response);
- // this.total = response.total;
- this.userList = response.data;
- });
- },
- getRowKey(row) {
- return row.statisticaltype === 1
- ? row.leavehospitaldistrictcode
- : row.deptcode;
- },
-
- // 澶勭悊琛岀偣鍑诲睍寮�
- handleRowClick(row) {
- console.log(row, "row");
-
- // 濡傛灉宸茬粡灞曞紑鍒欐敹璧�
- if (this.expands.includes(this.getRowKey(row))) {
- this.expands = [];
- return;
- }
- // 澶勭悊鏌ヨ鍙傛暟
- const params = {
- ...this.queryParams,
- // 濡傛灉閫夋嫨浜�"鍏ㄩ儴"锛屽垯浼犳墍鏈夌梾鍖�/绉戝浠g爜
- leavehospitaldistrictcodes: [row.leavehospitaldistrictcode],
- drcode: "1",
- };
- // 濡傛灉璇ヨ杩樻病鏈夊姞杞藉尰鐢熸暟鎹紝鍒欏姞杞�
- if (!row.doctorStats) {
- this.loading = true;
- getSfStatistics(params).then((res) => {
- this.$set(row, "doctorStats", res.data);
- this.expands = [this.getRowKey(row)];
- this.loading = false;
- });
- } 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) {
- console.log(row, "淇敼鏍囩");
- this.lstamendtagVisible = true;
- this.lstamendtag = true;
- this.tagform = {
- isupload: row.isupload,
- tagname: row.tagname,
- tagcategoryid: row.tagcategoryid,
- tagdescription: row.tagdescription,
- tagid: row.tagid,
- };
- },
- // 鑾峰彇绉戝鏍�
getDeptTree() {
// 绉戝鍒楄〃
- this.flatArraydept = store.getters.belongDepts.map((dept) => {
+ this.flatArraydept = this.$store.getters.belongDepts.map((dept) => {
return {
label: dept.deptName,
- value: dept.deptCode,
- };
- });
- // 瀛樺偍鎵�鏈夌瀹や唬鐮�
- this.allDeptCodes = store.getters.belongDepts.map(
- (dept) => dept.deptCode
- );
+ value: dept.deptCode
+ }
+ })
+ this.allDeptCodes = this.$store.getters.belongDepts.map((dept) => dept.deptCode)
// 鐥呭尯鍒楄〃
- this.flatArrayhospit = store.getters.belongWards.map((ward) => {
+ this.flatArrayhospit = this.$store.getters.belongWards.map((ward) => {
return {
label: ward.districtName,
- value: ward.districtCode,
- };
- });
-
- // 瀛樺偍鎵�鏈夌梾鍖轰唬鐮�
- this.allWardCodes = store.getters.belongWards.map(
- (ward) => ward.districtCode
- );
- this.flatArraydept.push({ label: "鍏ㄩ儴", value: "all" });
- this.flatArrayhospit.push({ label: "鍏ㄩ儴", value: "all" });
- },
- flattenArray(multiArray) {
- let result = [];
-
- // 閫掑綊鍑芥暟锛岀敤浜庡皢澶氱骇鏁扮粍杞崲涓轰竴缁存暟缁勶紝鍙寘鍚渶搴曞眰鐨勫厓绱�
- function flatten(element) {
- // 濡傛灉褰撳墠鍏冪礌鏈夊瓙鍏冪礌锛岀户缁�掑綊
- if (element.children && element.children.length > 0) {
- element.children.forEach((child) => flatten(child));
- } else {
- // 鍏嬮殕鍏冪礌浠ラ伩鍏嶄慨鏀瑰師濮嬫暟鎹�
- let item = JSON.parse(JSON.stringify(element));
- result.push(item); // 灏嗘渶搴曞眰鐨勫厓绱犳坊鍔犲埌缁撴灉鏁扮粍
+ value: ward.districtCode
}
+ })
+ this.allWardCodes = this.$store.getters.belongWards.map((ward) => ward.districtCode)
+
+ this.flatArraydept.push({ label: '鍏ㄩ儴', value: 'all' })
+ this.flatArrayhospit.push({ label: '鍏ㄩ儴', value: 'all' })
+ },
+
+ handleTabClick(tab) {
+ this.activeTab = tab.name
+ this.loadCurrentTabData()
+ },
+
+ loadCurrentTabData() {
+ switch (this.activeTab) {
+ case 'first':
+ this.$refs.firstFollowUp.loadData()
+ break
+ case 'second':
+ this.$refs.secondFollowUp.loadData()
+ break
+ case 'continued':
+ this.$refs.continuedCare.loadData()
+ break
+ }
+ },
+
+ handleQuery() {
+ this.queryParams.startTime = this.parseTime(this.queryParams.dateRange[0])
+ this.queryParams.endTime = this.parseTime(this.queryParams.dateRange[1])
+
+ if (this.queryParams.statisticaltype == 1) {
+ this.queryParams.deptcodes = []
+ } else if (this.queryParams.statisticaltype == 2) {
+ this.queryParams.leavehospitaldistrictcodes = []
}
- // 浠庨《灞傚厓绱犲紑濮嬮�掑綊
- multiArray.forEach((element) => flatten(element));
- return result; // 杩斿洖鍙寘鍚渶搴曞眰鍏冪礌鐨勪竴缁存暟缁�
+ this.loadCurrentTabData()
},
- addladeltag() {
- this.lstamendtagVisible = true;
- this.lstamendtag = false;
- this.tagform = {
- isupload: "",
- tagname: "",
- tagcategoryid: "",
- tagdescription: "",
- tagid: "",
- };
+
+ resetQuery() {
+ this.queryParams.dateRange = []
+ this.queryParams.leavehospitaldistrictcodes = []
+ this.handleQuery()
},
- Seedetails(row) {
- this.SeedetailsVisible = true;
- this.Seedloading = true;
- this.patientqueryParams.starttime = this.parseTime(
- this.queryParams.dateRange[0]
- );
- this.patientqueryParams.endtime = this.parseTime(
- this.queryParams.dateRange[1]
- );
- this.patientqueryParams.deptcode = row.deptcode;
- selectTimelyRate(this.patientqueryParams).then((response) => {
- this.logsheetlist = response.data.detail;
- this.patienttotal = response.data.total;
- this.Seedloading = false;
- });
+
+ async handleExport() {
+ switch (this.activeTab) {
+ case 'first':
+ await this.$refs.firstFollowUp.exportTable()
+ break
+ case 'second':
+ await this.$refs.secondFollowUp.exportTable()
+ break
+ case 'continued':
+ await this.$refs.continuedCare.exportTable()
+ break
+ }
},
+
+ showChartDialog() {
+ this.chartData = this.getCurrentTabData()
+ this.chartDialogVisible = true
+ },
+
+ getCurrentTabData() {
+ switch (this.activeTab) {
+ case 'first':
+ return this.$refs.firstFollowUp.tableData
+ case 'second':
+ return this.$refs.secondFollowUp.tableData
+ case 'continued':
+ return this.$refs.continuedCare.tableData
+ default:
+ return []
+ }
+ },
+
viewDetails(row, title) {
- this.infotitleVisible = true;
- this.infotitle = title;
- this.infotitlelist = row;
+ this.infotitle = title
+ this.infotitlelist = row
+ this.infotitleVisible = true
},
+
+ Seedetails(row) {
+ this.SeedetailsVisible = true
+ this.Seedloading = true
+
+ this.$refs.firstFollowUp.selectTimelyRate(row, this.queryParams.dateRange)
+ .then(response => {
+ this.logsheetlist = response.data.detail
+ this.patienttotal = response.data.total
+ this.Seedloading = false
+ })
+ },
+
+ Seedetailstion() {
+ this.$refs.firstFollowUp.selectTimelyRate(this.patientqueryParams)
+ .then(response => {
+ this.logsheetlist = response.data.detail
+ this.patienttotal = response.data.total
+ })
+ },
+
SeedetailsgGo(row) {
- this.SeedetailsVisible = false;
- let type = "";
- if (row.preachformson && row.preachformson.includes("3")) {
- type = 1;
+ this.SeedetailsVisible = false
+ let type = ''
+ if (row.preachformson && row.preachformson.includes('3')) {
+ type = 1
}
setTimeout(() => {
this.$router.push({
- path: "/followvisit/record/detailpage/",
+ path: '/followvisit/record/detailpage/',
query: {
taskid: row.taskid,
patid: row.patid,
id: row.id,
- Voicetype: type,
- // visitCount: this.topqueryParams.visitCount,
- },
- });
- }, 300);
- },
- // 娣诲姞/淇敼鏍囩
- Maintenancetag() {
- if (this.lstamendtag) {
- toamendtag(this.addDateRange(this.tagform)).then((response) => {
- console.log(response);
- this.getList();
- });
- } else {
- addapitag(this.addDateRange(this.tagform)).then((response) => {
- console.log(response);
- this.getList();
- });
- }
- this.tagform = {
- isupload: "",
- tagname: "",
- tagcategoryid: "",
- tagdescription: "",
- tagid: "",
- };
- },
- routerErr(row) {
- console.log(row, "璺宠浆寮傚父");
- this.$router.push({
- path: "/followvisit/discharge",
- query: {
- errtype: 1,
- leavehospitaldistrictcode: row.leavehospitaldistrictcode,
- },
- });
- },
-
- // 琛ㄥ崟閲嶇疆
- reset() {
- this.form = {
- userId: undefined,
- deptId: undefined,
- userName: undefined,
- nickName: undefined,
- password: undefined,
- phonenumber: undefined,
- email: undefined,
- sex: undefined,
- status: "0",
- remark: undefined,
- postIds: [],
- roleIds: [],
- };
- this.resetForm("form");
- },
- // 鏍囩鐘舵�佷慨鏀�
- handleStatusChange(row) {
- console.log(row.isupload);
- let text = row.isupload === "0" ? "鍚敤" : "鍋滅敤";
- this.$modal
- .confirm('纭瑕�"' + text + '""' + row.tagname + '"鏍囩鍚楋紵')
- .then(function () {
- return changetagcategory(row.tagid, row.isupload);
- })
- .then(() => {
- this.$modal.msgSuccess(text + "鎴愬姛");
- })
- .catch(function () {
- row.isupload = row.isupload === "0" ? "1" : "0";
- });
- },
- /** 鎼滅储鎸夐挳鎿嶄綔 */
- handleQuery() {
- this.queryParams.pageNum = 1;
- if (!this.queryParams.dateRange) this.queryParams.dateRange = [];
- if (this.queryParams.statisticaltype == 1) {
- this.queryParams.deptcodes = [];
- } else if (this.queryParams.statisticaltype == 2) {
- this.queryParams.leavehospitaldistrictcodes = [];
- }
- console.log(this.queryParams.dateRange);
-
- this.queryParams.startTime = this.parseTime(
- this.queryParams.dateRange[0]
- );
- this.queryParams.endTime = this.parseTime(this.queryParams.dateRange[1]);
- this.getList();
- },
- /** 閲嶇疆鎸夐挳鎿嶄綔 */
- resetQuery() {
- this.queryParams.dateRange = [];
- this.queryParams.leavehospitaldistrictcodes = [];
- this.handleQuery();
- },
- // 澶氶�夋閫変腑鏁版嵁
- handleSelectionChange(selection) {
- this.ids = selection.map((item) => item.tagid);
- this.single = selection.length != 1;
- this.multiple = !selection.length;
- },
-
- /** 鍒犻櫎鎸夐挳鎿嶄綔 */
- handleDelete(row) {
- console.log(row, "鍒犻櫎寮圭獥");
- const tagids = row.tagid || this.ids;
- console.log(tagids);
- const tagname = row.tagname;
- this.$modal
- .confirm(
- tagname
- ? '鏄惁纭鍒犻櫎鏍囩鍚嶇О涓�"' + tagname + '"鐨勬暟鎹」锛�'
- : "鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�"
- )
- .then(function () {
- return deletetag(tagids);
- })
- .then(() => {
- this.getList();
- this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- })
- .catch(() => {});
- },
- // 瀵煎嚭鏂规硶
- // 鏇挎崲鎮ㄥ師鏉ョ殑 exportTable 鏂规硶
- async exportTable() {
- try {
- // 1. 鑾峰彇骞舵牸寮忓寲鏃ユ湡鑼冨洿
- let dateRangeString = ""; // 鐢ㄤ簬鏂囦欢鍚�
- let sheetNameSuffix = ""; // 鐢ㄤ簬宸ヤ綔琛ㄥ悕
-
- // 妫�鏌ユ槸鍚﹀瓨鍦ㄩ�変腑鐨勬棩鏈熻寖鍥�
- if (
- this.queryParams.dateRange &&
- this.queryParams.dateRange.length === 2
- ) {
- const startDateStr = this.queryParams.dateRange[0]; // 寮�濮嬫棩鏈熷瓧绗︿覆锛屼緥濡� "2026-01-01 00:00:00"
- const endDateStr = this.queryParams.dateRange[1]; // 缁撴潫鏃ユ湡瀛楃涓�
-
- // 鏍煎紡鍖栨棩鏈熶负 YYYY-MM-DD锛堝幓鎺夋椂闂撮儴鍒嗭級
- const formatDateForDisplay = (dateTimeStr) => {
- return dateTimeStr.split(" ")[0]; // 鍙栫┖鏍煎墠鐨勯儴鍒嗭紝鍗� "YYYY-MM-DD"
- };
-
- const startDateFormatted = formatDateForDisplay(startDateStr);
- const endDateFormatted = formatDateForDisplay(endDateStr);
-
- // 鏋勫缓鏃ユ湡鑼冨洿瀛楃涓�
- dateRangeString = `${startDateFormatted}鑷�${endDateFormatted}`;
- sheetNameSuffix = `${startDateFormatted}鑷�${endDateFormatted}`;
- } else {
- // 濡傛灉娌℃湁閫夋嫨鏃ユ湡鑼冨洿锛屽垯浣跨敤褰撳墠鏈堜唤浣滀负澶囬�夋柟妗�
- const now = new Date();
- const currentMonth = now.getMonth() + 1;
- dateRangeString = `${currentMonth}鏈坄;
- sheetNameSuffix = `${currentMonth}鏈坄;
- }
-
- // 2. 鍔ㄦ�佹瀯寤烘枃浠跺悕鍜屽伐浣滆〃鍚�
- const excelName = `鍑洪櫌闅忚缁熻琛╛${dateRangeString}.xlsx`;
- const worksheetName = `闅忚缁熻_${sheetNameSuffix}`; // 宸ヤ綔琛ㄥ悕涓嶈兘瓒呰繃31涓瓧绗2](@ref)
- // 鍒涘缓鏂扮殑宸ヤ綔绨垮拰宸ヤ綔琛�
- const workbook = new ExcelJS.Workbook();
- const worksheet = workbook.addWorksheet(worksheetName); // 浣跨敤鍔ㄦ�佸伐浣滆〃鍚�
- // 瀹氫箟鏍峰紡锛堟柊澧炴�绘爣棰樻牱寮忥級
- const titleStyle = {
- font: {
- name: "寰蒋闆呴粦",
- size: 16,
- bold: true,
- color: { argb: "FF000000" },
- },
- fill: {
- type: "pattern",
- pattern: "solid",
- fgColor: { argb: "FFE6F3FF" },
- },
- alignment: {
- vertical: "middle",
- horizontal: "center",
- wrapText: true,
- },
- border: {
- top: { style: "thin", color: { argb: "FFD0D0D0" } },
- left: { style: "thin", color: { argb: "FFD0D0D0" } },
- bottom: { style: "thin", color: { argb: "FFD0D0D0" } },
- right: { style: "thin", color: { argb: "FFD0D0D0" } },
- },
- };
- // 瀹氫箟鏍峰紡
- const headerStyle = {
- font: {
- name: "寰蒋闆呴粦",
- size: 11,
- bold: true,
- color: { argb: "FF000000" },
- },
- fill: {
- type: "pattern",
- pattern: "solid",
- fgColor: { argb: "FFF5F7FA" },
- },
- alignment: {
- vertical: "middle",
- horizontal: "center",
- wrapText: true,
- },
- border: {
- top: { style: "thin", color: { argb: "FFD0D0D0" } },
- left: { style: "thin", color: { argb: "FFD0D0D0" } },
- bottom: { style: "thin", color: { argb: "FFD0D0D0" } },
- right: { style: "thin", color: { argb: "FFD0D0D0" } },
- },
- };
-
- const cellStyle = {
- font: {
- name: "瀹嬩綋",
- size: 10,
- color: { argb: "FF000000" },
- },
- alignment: {
- vertical: "middle",
- horizontal: "center",
- },
- border: {
- top: { style: "thin", color: { argb: "FFD0D0D0" } },
- left: { style: "thin", color: { argb: "FFD0D0D0" } },
- bottom: { style: "thin", color: { argb: "FFD0D0D0" } },
- right: { style: "thin", color: { argb: "FFD0D0D0" } },
- },
- };
-
- const summaryStyle = {
- font: {
- name: "瀹嬩綋",
- size: 10,
- bold: true,
- color: { argb: "FF409EFF" },
- },
- fill: {
- type: "pattern",
- pattern: "solid",
- fgColor: { argb: "FFF5F7FA" },
- },
- alignment: {
- vertical: "middle",
- horizontal: "center",
- },
- border: {
- top: { style: "thin", color: { argb: "FFD0D0D0" } },
- left: { style: "thin", color: { argb: "FFD0D0D0" } },
- bottom: { style: "thin", color: { argb: "FFD0D0D0" } },
- right: { style: "thin", color: { argb: "FFD0D0D0" } },
- },
- };
- // 1. 娣诲姞鎬绘爣棰樿锛堢涓�琛岋級
- worksheet.mergeCells(1, 1, 1, 23); // 鍚堝苟A1鍒癢1鐨勬墍鏈夊垪[1,4](@ref)
- const titleCell = worksheet.getCell(1, 1);
- titleCell.value = `${sheetNameSuffix}鍑洪櫌闅忚缁熻琛╜; // 浣跨敤鏂囦欢鍚嶄綔涓烘�绘爣棰�
- titleCell.style = titleStyle;
- worksheet.getRow(1).height = 35; // 璁剧疆鎬绘爣棰樿楂�
- // 1. 棣栧厛锛屽垱寤哄苟璁剧疆绗簩琛岋紙瀛愯〃澶达級鐨勬墍鏈夊崟鍏冩牸
- const secondRowHeaders = [
- "", // A2 灞曞紑鍒楀崰浣嶏紙鍏跺�煎皢鐢辩涓�琛屽悎骞跺悗鐨勪富鍗曞厓鏍煎喅瀹氾級
- "鍑洪櫌鐥呭尯",
- "绉戝",
- "鍑洪櫌浜烘",
- "鏃犻渶闅忚浜烘",
- "搴旈殢璁夸汉娆�", // B2 to F2
- // 棣栨鍑洪櫌闅忚瀛愯〃澶�
- "闇�闅忚",
- "寰呴殢璁�",
- "闅忚鎴愬姛",
- "闅忚澶辫触",
- "闅忚鐜�",
- "鍙婃椂鐜�",
- "浜哄伐",
- "鐭俊",
- "寰俊",
- // 鍐嶆鍑洪櫌闅忚瀛愯〃澶�
- "闇�闅忚",
- "寰呴殢璁�",
- "闅忚鎴愬姛",
- "闅忚澶辫触",
- "闅忚鐜�",
- "浜哄伐",
- "鐭俊",
- "寰俊",
- ];
-
- // 娣诲姞绗簩琛岋紙鍘熺涓�琛屼笅绉伙級
- secondRowHeaders.forEach((header, index) => {
- const cell = worksheet.getCell(3, index + 1); // 鏀逛负绗�3琛�
- cell.value = header;
- cell.style = headerStyle;
- });
-
- // 3. 璋冩暣鍘熷悎骞跺崟鍏冩牸浣嶇疆锛堝師绗�1琛屽悎骞跺崟鍏冩牸涓嬬Щ鍒扮2琛岋級
- // 鍚堝苟 A2:A3
- worksheet.mergeCells(2, 1, 3, 1);
- worksheet.getCell(2, 1).value = "";
- worksheet.getCell(2, 1).style = headerStyle;
-
- // 鍚堝苟 B2:B3
- worksheet.mergeCells(2, 2, 3, 2);
- worksheet.getCell(2, 2).value = "鍑洪櫌鐥呭尯";
- worksheet.getCell(2, 2).style = headerStyle;
-
- // 鍚堝苟 C2:C3
- worksheet.mergeCells(2, 3, 3, 3);
- worksheet.getCell(2, 3).value = "绉戝";
- worksheet.getCell(2, 3).style = headerStyle;
-
- // 鍚堝苟 D2:D3
- worksheet.mergeCells(2, 4, 3, 4);
- worksheet.getCell(2, 4).value = "鍑洪櫌浜烘";
- worksheet.getCell(2, 4).style = headerStyle;
-
- // 鍚堝苟 E2:E3
- worksheet.mergeCells(2, 5, 3, 5);
- worksheet.getCell(2, 5).value = "鏃犻渶闅忚浜烘";
- worksheet.getCell(2, 5).style = headerStyle;
-
- // 鍚堝苟 F2:F3
- worksheet.mergeCells(2, 6, 3, 6);
- worksheet.getCell(2, 6).value = "搴旈殢璁夸汉娆�";
- worksheet.getCell(2, 6).style = headerStyle;
-
- // 4. 璋冩暣妯悜鍚堝苟鏍囬浣嶇疆锛堜笅绉诲埌绗�2琛岋級
- // 棣栨鍑洪櫌闅忚锛堝悎骞禛2:O2锛�
- worksheet.mergeCells(2, 7, 2, 15); // G2:O2
- worksheet.getCell(2, 7).value = "棣栨鍑洪櫌闅忚";
- worksheet.getCell(2, 7).style = headerStyle;
-
- // 鍐嶆鍑洪櫌闅忚锛堝悎骞禤2:W2锛�
- worksheet.mergeCells(2, 16, 2, 23); // P2:W2
- worksheet.getCell(2, 16).value = "鍐嶆鍑洪櫌闅忚";
- worksheet.getCell(2, 16).style = headerStyle;
-
- // 5. 璁剧疆琛岄珮
- worksheet.getRow(1).height = 35; // 鎬绘爣棰樿楂�
- worksheet.getRow(2).height = 28; // 鍘熺涓�琛屼笅绉�
- worksheet.getRow(3).height = 25; // 鍘熺浜岃涓嬬Щ
-
- // 6. 娣诲姞鏁版嵁琛岋紙娉ㄦ剰琛岀储寮曢渶瑕�+1锛屽洜涓轰笂闈㈡彃鍏ヤ簡涓�琛岋級
- this.userList.forEach((item, rowIndex) => {
- const dataRow = worksheet.addRow(
- [
- "", // 灞曞紑鍒�
- item.leavehospitaldistrictname || "",
- item.deptname || "",
- item.dischargeCount || 0,
- item.nonFollowUp || 0,
- item.followUpNeeded || 0,
- // 棣栨鍑洪櫌闅忚鏁版嵁
- item.needFollowUp || 0,
- item.pendingFollowUp || 0,
- item.followUpSuccess || 0,
- item.followUpFail || 0,
- item.followUpRate || "0%",
- item.rate ? (Number(item.rate) * 100).toFixed(2) + "%" : "0%",
- item.manual || 0,
- item.sms || 0,
- item.weChat || 0,
- // 鍐嶆鍑洪櫌闅忚鏁版嵁
- item.needFollowUpAgain || 0,
- item.pendingFollowUpAgain || 0,
- item.followUpSuccessAgain || 0,
- item.followUpFailAgain || 0,
- item.followUpRateAgain || "0%",
- item.manualAgain || 0,
- item.smsAgain || 0,
- item.weChatAgain || 0,
- ],
- rowIndex + 4
- ); // 浠庣4琛屽紑濮嬫坊鍔犳暟鎹紙鍘熺3琛岋級
-
- // 搴旂敤鏁版嵁琛屾牱寮�
- dataRow.eachCell((cell) => {
- cell.style = cellStyle;
- });
- dataRow.height = 24;
- });
-
- // 娣诲姞鍚堣琛�
- const summaries = this.getSummaries({
- columns: [
- { property: "" },
- { property: "leavehospitaldistrictname" },
- { property: "deptname" },
- { property: "dischargeCount" },
- { property: "nonFollowUp" },
- { property: "followUpNeeded" },
- { property: "needFollowUp" },
- { property: "pendingFollowUp" },
- { property: "followUpSuccess" },
- { property: "followUpFail" },
- { property: "followUpRate" },
- { property: "rate" },
- { property: "manual" },
- { property: "sms" },
- { property: "weChat" },
- { property: "needFollowUpAgain" },
- { property: "pendingFollowUpAgain" },
- { property: "followUpSuccessAgain" },
- { property: "followUpFailAgain" },
- { property: "followUpRateAgain" },
- { property: "manualAgain" },
- { property: "smsAgain" },
- { property: "weChatAgain" },
- ],
- data: this.userList,
- });
-
- const summaryRow = worksheet.addRow(summaries);
- summaryRow.eachCell((cell, colNumber) => {
- cell.style = summaryStyle;
- // 绗竴鍒楁樉绀�"鍚堣"
- if (colNumber === 1) {
- cell.value = "鍚堣";
+ Voicetype: type
}
- });
- summaryRow.height = 28;
-
- // 璁剧疆鍒楀
- worksheet.columns = [
- { width: 8 }, // 灞曞紑鍒�
- { width: 20 }, // 鍑洪櫌鐥呭尯
- { width: 15 }, // 绉戝
- { width: 12 }, // 鍑洪櫌浜烘
- { width: 12 }, // 鏃犻渶闅忚浜烘
- { width: 12 }, // 搴旈殢璁夸汉娆�
- // 棣栨鍑洪櫌闅忚鍒�
- { width: 10 },
- { width: 10 },
- { width: 10 },
- { width: 10 },
- { width: 12 },
- { width: 12 },
- { width: 8 },
- { width: 8 },
- { width: 8 },
- // 鍐嶆鍑洪櫌闅忚鍒�
- { width: 10 },
- { width: 10 },
- { width: 10 },
- { width: 10 },
- { width: 12 },
- { width: 8 },
- { width: 8 },
- { width: 8 },
- ];
-
- // 鐢熸垚骞朵笅杞芥枃浠�
- const buffer = await workbook.xlsx.writeBuffer();
- const blob = new Blob([buffer], {
- type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
- });
- saveAs(blob, excelName);
-
- this.$message.success("瀵煎嚭鎴愬姛");
- return true;
- } catch (error) {
- console.error("瀵煎嚭澶辫触:", error);
- this.$message.error(`瀵煎嚭澶辫触: ${error.message}`);
- return false;
- }
+ })
+ }, 300)
},
- // 鏄剧ず鍥捐〃寮圭獥
-
- 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;
- }
- },
- },
-};
+ handleSearch() {
+ // 鎼滅储閫昏緫
+ }
+ }
+}
</script>
<style lang="scss" scoped>
-.sidecolumn {
- width: 180px;
- min-height: 100vh;
- text-align: center;
- // display: flex;
- margin-top: 20px;
- margin: 20px;
- padding: 30px;
- background: #edf1f7;
- border: 1px solid #dcdfe6;
- -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
- 0 0 6px 0 rgba(0, 0, 0, 0.04);
- .sidecolumn-top {
- display: flex;
- justify-content: space-between;
- .top-wj {
- font-size: 20px;
- }
- .top-tj {
- font-size: 18px;
-
- color: rgb(0, 89, 255);
- cursor: pointer;
- }
- }
- .center-ss {
- margin-top: 30px;
- .input-with-select {
- height: 40px !important;
- }
- }
- .bottom-fl {
- margin-top: 30px;
- display: center !important;
- }
-}
-.qrcode-dialo {
- text-align: center;
- // display: flex;
- margin: 20px;
- padding: 30px;
- background: #edf1f7;
- border: 1px solid #dcdfe6;
- -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
- 0 0 6px 0 rgba(0, 0, 0, 0.04);
- .qrcode-text {
- font-size: 20px;
- span {
- margin-left: 20px;
- }
- }
- .qrcode-img {
- width: 300px;
- height: 400px;
- }
-}
-::v-deep.el-tabs--left,
-.el-tabs--right {
- overflow: hidden;
- align-items: center;
- display: flex;
-}
-::v-deep.el-input--medium .el-input__inner {
- height: 40px !important;
-}
-::v-deep.el-tabs--right .el-tabs__active-bar.is-right {
- height: 40px;
- width: 5px;
- left: 0;
-}
-::v-deep.el-tabs--right .el-tabs__item.is-right {
- display: block;
- 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;
- // flex: 1;
- // width: 80%;
- // margin-top: 20px;
- margin: 20px;
- padding: 30px;
+.follow-up-statistics {
+ padding: 20px;
background: #ffff;
border: 1px solid #dcdfe6;
- -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
- 0 0 6px 0 rgba(0, 0, 0, 0.04);
- .mulsz {
- font-size: 20px;
- }
-}
-/* 浣胯鏈夋墜鍨嬫寚閽� */
-.el-table__row {
- cursor: pointer;
-}
-/* 鍐呭眰鍖荤敓琛ㄦ牸鏍峰紡 */
-.inner-table {
- // 琛ㄥご鑳屾櫙鑹�
- ::v-deep .el-table__header-wrapper {
- background-color: #f0f7ff !important;
+ box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04);
- th {
- background-color: #f0f7ff !important;
+ .search-section {
+ margin-bottom: 20px;
+ }
+
+ .tab-section {
+ ::v-deep .el-tabs__header {
+ margin-bottom: 20px;
+ }
+
+ ::v-deep .el-tabs__item {
+ font-size: 16px;
+ padding: 0 20px;
+ height: 40px;
+ line-height: 40px;
+ }
+
+ ::v-deep .el-tabs__active-bar {
+ height: 3px;
}
}
-
- // 琛ㄦ牸琛岃儗鏅壊
- ::v-deep .el-table__body-wrapper {
- tr {
- background-color: #f9fbfe !important;
-
- &:hover {
- background-color: #e6f1ff !important;
- }
- }
- }
-
- // 杈规棰滆壊
- ::v-deep .el-table--border {
- border-color: #d9e8ff !important;
-
- td,
- th {
- border-color: #d9e8ff !important;
- }
- }
-
- // 鏂戦┈绾规晥鏋�
- ::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td {
- background-color: #f5f9ff !important;
- }
-}
-/* 灞曞紑琛屾牱寮� */
-.el-table__expanded-cell {
- padding: 10px 0 !important;
- background: #f8f8f8;
-}
-.document {
- width: 100px;
- height: 50px;
-}
-.documentf {
- display: flex;
- justify-content: flex-end;
-}
-.button-text {
- color: rgb(70, 204, 238);
-}
-.button-textck {
- color: rgb(39, 167, 67);
-}
-.button-textxg {
- color: rgb(35, 81, 233);
-}
-.button-textsc {
- color: rgb(235, 23, 23);
}
</style>
--
Gitblit v1.9.3