From 3cf6f5204b0ade9aa5022d5fcecbef095c575918 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期二, 16 十二月 2025 09:44:41 +0800
Subject: [PATCH] 测试完成

---
 src/views/sfstatistics/percentage/index.vue | 2087 ++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 1,761 insertions(+), 326 deletions(-)

diff --git a/src/views/sfstatistics/percentage/index.vue b/src/views/sfstatistics/percentage/index.vue
index c7b24d4..15efdc4 100644
--- a/src/views/sfstatistics/percentage/index.vue
+++ b/src/views/sfstatistics/percentage/index.vue
@@ -1,37 +1,6 @@
 <template>
   <div class="Questionnairemanagement">
-    <!-- 宸︿晶鏍� -->
-    <!-- <div class="sidecolumn">
-      <div class="sidecolumn-top">
-        <div class="top-wj">鎮h�呰寖鍥�</div>
-      </div>
-
-      <div class="bottom-fl">
-        <el-tabs
-          tab-position="right"
-          v-model="activeName"
-          @tab-click="handleClick"
-        >
-          <el-tab-pane label="鍏ㄩ儴" name="first"></el-tab-pane>
-          <el-tab-pane label="浣忛櫌" name="bhospitalized"></el-tab-pane>
-          <el-tab-pane label="鍦ㄩ櫌" name="Inhospital"></el-tab-pane>
-          <el-tab-pane label="闂ㄨ瘖" name="outpatient"></el-tab-pane>
-          <el-tab-pane label="浣撴" name="physical"></el-tab-pane>
-        </el-tabs>
-      </div>
-    </div> -->
-    <!-- 鍙充晶鏁版嵁 -->
     <div class="leftvlue">
-      <!-- <div class="leftvlue-top">
-        <el-tabs v-model="topactiveName" @tab-click="tophandleClick">
-          <el-tab-pane name="Local">
-            <span class="mulsz" slot="label">鎸夊嚭闄㈢梾鍖虹粺璁� </span>
-          </el-tab-pane>
-          <el-tab-pane name="sharing">
-            <span class="mulsz" slot="label">鎸夊嚭闄㈢瀹ょ粺璁� </span>
-          </el-tab-pane>
-        </el-tabs>
-      </div> -->
       <div class="leftvlue-bg">
         <el-row :gutter="20">
           <!--鏍囩鏁版嵁-->
@@ -44,20 +13,9 @@
               v-show="showSearch"
               label-width="98px"
             >
-              <!-- <el-form-item label="鍖婚櫌" prop="userName">
-                <el-select v-model="queryParams.value1" 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="缁熻绫诲瀷" prop="userName">
                 <el-select
-                  v-model="queryParams.Statisticaltype"
+                  v-model="queryParams.statisticaltype"
                   placeholder="璇烽�夋嫨缁熻绫诲瀷"
                 >
                   <el-option
@@ -69,34 +27,35 @@
                   </el-option>
                 </el-select>
                 <el-select
-                  v-if="queryParams.Statisticaltype == 1"
-                  v-model="queryParams.leavehospitaldistrictCode"
+                  style="margin-left: 10px"
+                  v-if="queryParams.statisticaltype == 1"
+                  v-model="queryParams.leavehospitaldistrictcodes"
                   size="medium"
                   multiple
                   filterable
                   placeholder="璇烽�夋嫨鐥呭尯"
                 >
                   <el-option
-                    v-for="item in flatArray"
-                    :key="item.deptCode"
+                    v-for="item in flatArrayhospit"
+                    :key="item.value"
                     :label="item.label"
-                    :value="item.deptCode"
+                    :value="item.value"
                   >
                   </el-option>
                 </el-select>
                 <el-select
-                  v-else-if="queryParams.Statisticaltype == 2"
-                  v-model="queryParams.deptCode"
+                  v-else-if="queryParams.statisticaltype == 2"
+                  v-model="queryParams.deptcodes"
                   size="medium"
                   multiple
                   filterable
                   placeholder="璇烽�夋嫨绉戝"
                 >
                   <el-option
-                    v-for="item in flatArray"
-                    :key="item.deptCode"
+                    v-for="item in flatArraydept"
+                    :key="item.value"
                     :label="item.label"
-                    :value="item.deptCode"
+                    :value="item.value"
                   >
                   </el-option>
                 </el-select>
@@ -124,6 +83,7 @@
               >
                 <el-date-picker
                   v-model="queryParams.dateRange"
+                  value-format="yyyy-MM-dd"
                   type="daterange"
                   range-separator="鑷�"
                   start-placeholder="寮�濮嬫棩鏈�"
@@ -147,226 +107,493 @@
                   >閲嶇疆</el-button
                 >
               </el-form-item>
-            </el-form>
-
-            <el-row :gutter="10" class="mb8">
-              <el-col :span="1.5">
+              <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-plus"
+                  icon="el-icon-data-line"
                   size="medium"
-                  @click="addladeltag"
-                  v-hasPermi="['system:user:add']"
-                  >鏂板</el-button
+                  @click="showChartDialog"
+                  >缁熻瓒嬪娍鍥�</el-button
                 >
               </el-col>
-
-              <el-col :span="1.5">
-                <el-button
-                  type="danger"
-                  plain
-                  icon="el-icon-delete"
-                  size="medium"
-                  :disabled="multiple"
-                  @click="handleDelete"
-                  v-hasPermi="['system:user:remove']"
-                  >鍒犻櫎</el-button
-                >
-              </el-col>
-              <el-col :span="1.5">
-                <div class="documentf">
-                  <div class="document">
-                    <el-button
-                      type="warning"
-                      plain
-                      icon="el-icon-download"
-                      size="medium"
-                      @click="handleExport"
-                      v-hasPermi="['system:user:export']"
-                      >瀵煎嚭</el-button
+            </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"
                     >
-                  </div>
-                </div>
-              </el-col>
+                      <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-col :span="1.5"> </el-col> -->
-            </el-row>
-            <!-- <right-toolbar
-          :showSearch.sync="showSearch"
-          @queryTable="getList"
-          :columns="columns"
-        ></right-toolbar> -->
-            <el-table
-              v-loading="loading"
-              :data="userList"
-              :border="true"
-              @selection-change="handleSelectionChange"
-            >
-              <el-table-column
-                label="鍑洪櫌鐥呭尯"
-                align="center"
-                key="leavehospitaldistrictname"
-                prop="leavehospitaldistrictname"
-                :show-overflow-tooltip="true"
-              />
-              <el-table-column
-                label="鍑洪櫌浜烘"
-                align="center"
-                key="leavehospitaldistrictname"
-                prop="leavehospitaldistrictname"
-              >
-              </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
-                    >
+                      <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="浜哄伐"
+                  label="鍑洪櫌鐥呭尯"
                   align="center"
-                  key="Manual"
-                  prop="Manual"
+                  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="鐭俊"
+                  label="搴旈殢璁夸汉娆�"
                   align="center"
-                  key="SMS"
-                  prop="SMS"
+                  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
-                  label="寰俊"
+                  v-if="orgname == '涓芥按甯備腑鍖婚櫌'"
                   align="center"
-                  key="WeChat"
-                  prop="WeChat"
+                  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-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>
+              </el-table>
+            </div>
 
             <!-- <pagination
               v-show="total > 0"
@@ -379,6 +606,254 @@
         </el-row>
       </div>
     </div>
+    <!-- 缁熻瓒嬪娍鍥惧脊绐� -->
+    <el-dialog
+      title="闅忚缁熻瓒嬪娍鍥�"
+      :visible.sync="chartDialogVisible"
+      width="80%"
+      :close-on-click-modal="false"
+    >
+      <div class="chart-container">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <div class="chart-title">闅忚鐘舵�佸垎甯�</div>
+            <div id="pieChart" style="width: 100%; height: 400px"></div>
+          </el-col>
+          <el-col :span="12">
+            <div class="chart-title">闅忚瓒嬪娍鍒嗘瀽</div>
+            <div id="barLineChart" style="width: 100%; height: 400px"></div>
+          </el-col>
+        </el-row>
+      </div>
+    </el-dialog>
+    <el-dialog
+      title="鏈強鏃堕殢璁挎偅鑰呮湇鍔�"
+      :visible.sync="SeedetailsVisible"
+      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"
+          />
+        </div>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -386,17 +861,15 @@
 import {
   toamendtag,
   addapitag,
-  detailstag,
   deletetag,
   changetagcategory,
-  toamendtagcategory,
-  addtagcategory,
-  deletetagcategory,
-  listtag,
-  tagclassifylist,
 } from "@/api/system/label";
-import { getSfStatistics, deptTreeSelect } from "@/api/system/user";
-
+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 = [
@@ -424,15 +897,21 @@
   },
 ];
 export default {
-  name: "questionnaire",
+  name: "Percentage",
   dicts: ["sys_normal_disable", "sys_user_sex"],
   components: { Treeselect },
   data() {
     return {
       topactiveName: "Local", //椤堕儴閫夋嫨
       activeName: "first", //渚ц竟閫夋嫨
+      orgname: "",
+      expands: [],
       // 閬僵灞�
       loading: false,
+      Seedloading: false,
+      chartDialogVisible: false,
+      pieChart: null,
+      barLineChart: null,
       // 閫変腑鏁扮粍
       ids: [],
       // 闈炲崟涓鐢�
@@ -444,9 +923,10 @@
       idds: "", //鍒嗙被id
       // 鎬绘潯鏁�
       total: 0,
-      flatArray: [],
-      deptflatArray: [],
-
+      flatArrayhospit: [],
+      flatArraydept: [],
+      patienttotal: 0,
+      logsheetlist: [],
       Statisticallist: [
         {
           label: "鐥呭尯缁熻",
@@ -457,6 +937,10 @@
           value: 2,
         },
       ],
+      patientqueryParams: {
+        pn: 1,
+        ps: 10,
+      },
       amendtag: false, //鏄惁淇敼绫诲埆
       lstamendtag: false, //鏄惁淇敼鏍囩
       scavisible: false, //鍒犻櫎寮规
@@ -484,6 +968,10 @@
       postOptions: [],
       // 瑙掕壊閫夐」
       roleOptions: [],
+      // 瀛樺偍鎵�鏈夌瀹や唬鐮�
+      allDeptCodes: [],
+      // 瀛樺偍鎵�鏈夌梾鍖轰唬鐮�
+      allWardCodes: [],
       // 琛ㄥ崟鍙傛暟
       form: {},
       forms: {
@@ -495,52 +983,8 @@
       goQRCodeVisible: false, //浜岀淮鐮佸脊妗�
       sidecolumnval: "", //绫诲埆鎼滅储
       propss: { multiple: true },
-
-      options: [
-        {
-          value: 1,
-          label: "鐩戞祴璇勪及",
-        },
-        {
-          value: 2,
-          label: "鍑洪櫌闅忚",
-        },
-        {
-          value: 3,
-          label: "闂ㄨ瘖闅忚",
-        },
-        {
-          value: 4,
-          label: "瀹f暀鍏虫��",
-        },
-        {
-          value: 5,
-          label: "澶嶈瘖绠$悊",
-        },
-
-        {
-          value: 7,
-          label: "鎮h�呮姤鍛�",
-        },
-
-        {
-          value: 9,
-          label: "浣撴闅忚",
-        },
-
-        {
-          value: 11,
-          label: "褰卞儚闅忚",
-        },
-        {
-          value: 12,
-          label: "蹇冪數闅忚",
-        },
-        {
-          value: 13,
-          label: "涓撶梾闅忚",
-        },
-      ],
+      SeedetailsVisible: false,
+      options: store.getters.tasktypes,
       pickerOptions: {
         disabledDate(time) {
           return time.getTime() < Date.now() - 3600 * 1000 * 24;
@@ -559,7 +1003,9 @@
         pageSize: 10,
         serviceType: [2],
         dateRange: [],
-        Statisticaltype: 1,
+        statisticaltype: 1,
+        leavehospitaldistrictcodes: ["all"], // 榛樿閫変腑鍏ㄩ儴鐥呭尯
+        deptcodes: [], // 榛樿閫変腑鍏ㄩ儴绉戝
       },
       // 鍒椾俊鎭�
       columns: [
@@ -575,18 +1021,225 @@
   },
   watch: {},
   created() {
-    this.getList();
     this.getDeptTree();
+    this.getList();
+    this.orgname = localStorage.getItem("orgname");
   },
 
   methods: {
     /** 鏌ヨ鏍囩鍒楄〃 */
     getList() {
-      getSfStatistics(this.queryParams).then((response) => {
+      // 澶勭悊鏌ヨ鍙傛暟
+      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) {
@@ -604,13 +1257,31 @@
     // 鑾峰彇绉戝鏍�
     getDeptTree() {
       // 绉戝鍒楄〃
-      deptTreeSelect().then((response) => {
-        this.deptOptions = response.data;
-        console.log(this.deptOptions, " this.deptOptions");
-
-        this.flatArray = this.flattenArray(response.data);
-        console.log(this.flatArray, "this.flatArray");
+      this.flatArraydept = store.getters.belongDepts.map((dept) => {
+        return {
+          label: dept.deptName,
+          value: dept.deptCode,
+        };
       });
+      // 瀛樺偍鎵�鏈夌瀹や唬鐮�
+      this.allDeptCodes = store.getters.belongDepts.map(
+        (dept) => dept.deptCode
+      );
+
+      // 鐥呭尯鍒楄〃
+      this.flatArrayhospit = 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 = [];
@@ -641,6 +1312,41 @@
         tagdescription: "",
         tagid: "",
       };
+    },
+    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;
+      });
+    },
+    SeedetailsgGo(row) {
+      this.SeedetailsVisible = false;
+      let type = "";
+      if (row.preachformson && row.preachformson.includes("3")) {
+        type = 1;
+      }
+      setTimeout(() => {
+        this.$router.push({
+          path: "/followvisit/record/detailpage/",
+          query: {
+            taskid: row.taskid,
+            patid: row.patid,
+            id: row.id,
+            Voicetype: type,
+            // visitCount: this.topqueryParams.visitCount,
+          },
+        });
+      }, 300);
     },
     // 娣诲姞/淇敼鏍囩
     Maintenancetag() {
@@ -711,7 +1417,14 @@
     /** 鎼滅储鎸夐挳鎿嶄綔 */
     handleQuery() {
       this.queryParams.pageNum = 1;
-      console.log();
+      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]
       );
@@ -752,15 +1465,644 @@
         })
         .catch(() => {});
     },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      this.download(
-        "smartor/serviceSubtask/getSfStatisticsExport",
-        {
-          ...this.queryParams,
+    // 瀵煎嚭鏂规硶
+    // 鏇挎崲鎮ㄥ師鏉ョ殑 exportTable 鏂规硶
+    async exportTable() {
+      try {
+        // 鑾峰彇褰撳墠鏃ユ湡
+        const now = new Date();
+        // 鑾峰彇褰撳墠鏈堜唤锛堟敞鎰忔湀浠戒粠0寮�濮嬶紝闇�瑕佸姞1锛�
+        const currentMonth = now.getMonth() + 1;
+        // 鏋勫缓鏂囦欢鍚�
+        const excelName = `${currentMonth}鏈堝嚭闄㈤殢璁跨粺璁¤〃.xlsx`;
+        // 鍒涘缓鏂扮殑宸ヤ綔绨垮拰宸ヤ綔琛�
+        const workbook = new ExcelJS.Workbook();
+        const worksheet = workbook.addWorksheet("闅忚缁熻");
+
+        // 瀹氫箟鏍峰紡
+        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. 棣栧厛锛屽垱寤哄苟璁剧疆绗簩琛岋紙瀛愯〃澶达級鐨勬墍鏈夊崟鍏冩牸
+        const secondRowHeaders = [
+          "", // A2 灞曞紑鍒楀崰浣嶏紙鍏跺�煎皢鐢辩涓�琛屽悎骞跺悗鐨勪富鍗曞厓鏍煎喅瀹氾級
+          "鍑洪櫌鐥呭尯",
+          "绉戝",
+          "鍑洪櫌浜烘",
+          "鏃犻渶闅忚浜烘",
+          "搴旈殢璁夸汉娆�", // B2 to F2
+          // 棣栨鍑洪櫌闅忚瀛愯〃澶�
+          "闇�闅忚",
+          "寰呴殢璁�",
+          "闅忚鎴愬姛",
+          "闅忚澶辫触",
+          "闅忚鐜�",
+          "鍙婃椂鐜�",
+          "浜哄伐",
+          "鐭俊",
+          "寰俊",
+          // 鍐嶆鍑洪櫌闅忚瀛愯〃澶�
+          "闇�闅忚",
+          "寰呴殢璁�",
+          "闅忚鎴愬姛",
+          "闅忚澶辫触",
+          "闅忚鐜�",
+          "浜哄伐",
+          "鐭俊",
+          "寰俊",
+        ];
+
+        // 娣诲姞绗簩琛屽苟璁剧疆鏍峰紡
+        secondRowHeaders.forEach((header, index) => {
+          // 娉ㄦ剰锛氬垪绱㈠紩浠�1寮�濮嬶紝瀵瑰簲A鍒楁槸1锛孊鍒楁槸2锛屼互姝ょ被鎺ㄣ��
+          const cell = worksheet.getCell(2, index + 1);
+          cell.value = header;
+          cell.style = headerStyle;
+        });
+
+        // 2. 鐒跺悗锛屽垱寤虹涓�琛岀殑涓绘爣棰樺崟鍏冩牸骞惰缃牱寮忥紝绱ф帴鐫�杩涜绾靛悜鍚堝苟
+        // 鍚堝苟 A1:A2 骞惰缃��
+        worksheet.mergeCells(1, 1, 2, 1); // 鍚堝苟 A1 鍒� A2
+        worksheet.getCell(1, 1).value = ""; // 璁剧疆涓诲崟鍏冩牸(A1)鐨勫��
+        worksheet.getCell(1, 1).style = headerStyle; // 璁剧疆涓诲崟鍏冩牸鏍峰紡
+
+        // 鍚堝苟 B1:B2 骞惰缃��
+        worksheet.mergeCells(1, 2, 2, 2); // 鍚堝苟 B1 鍒� B2
+        worksheet.getCell(1, 2).value = "鍑洪櫌鐥呭尯";
+        worksheet.getCell(1, 2).style = headerStyle;
+
+        // 鍚堝苟 C1:C2 骞惰缃��
+        worksheet.mergeCells(1, 3, 2, 3); // 鍚堝苟 C1 鍒� C2
+        worksheet.getCell(1, 3).value = "绉戝";
+        worksheet.getCell(1, 3).style = headerStyle;
+
+        // 鍚堝苟 D1:D2 骞惰缃��
+        worksheet.mergeCells(1, 4, 2, 4); // 鍚堝苟 D1 鍒� D2
+        worksheet.getCell(1, 4).value = "鍑洪櫌浜烘";
+        worksheet.getCell(1, 4).style = headerStyle;
+
+        // 鍚堝苟 E1:E2 骞惰缃��
+        worksheet.mergeCells(1, 5, 2, 5); // 鍚堝苟 E1 鍒� E2
+        worksheet.getCell(1, 5).value = "鏃犻渶闅忚浜烘";
+        worksheet.getCell(1, 5).style = headerStyle;
+
+        // 鍚堝苟 F1:F2 骞惰缃��
+        worksheet.mergeCells(1, 6, 2, 6); // 鍚堝苟 F1 鍒� F2
+        worksheet.getCell(1, 6).value = "搴旈殢璁夸汉娆�";
+        worksheet.getCell(1, 6).style = headerStyle;
+
+        // 3. 璁剧疆绗竴琛岀殑妯悜鍚堝苟鏍囬锛堣繖浜涗繚鎸佷笉鍙橈紝鍥犱负鍙秹鍙婄涓�琛岋級
+        // 棣栨鍑洪櫌闅忚锛堝悎骞禛1鍒癘1锛�
+        worksheet.mergeCells("G1:O1");
+        worksheet.getCell("G1").value = "棣栨鍑洪櫌闅忚";
+        worksheet.getCell("G1").style = headerStyle;
+
+        // 鍐嶆鍑洪櫌闅忚锛堝悎骞禤1鍒癢1锛�
+        worksheet.mergeCells("P1:W1");
+        worksheet.getCell("P1").value = "鍐嶆鍑洪櫌闅忚";
+        worksheet.getCell("P1").style = headerStyle;
+
+        // 4. 璁剧疆琛岄珮锛堝彲閫夛紝浣嗗缓璁缃級
+        worksheet.getRow(1).height = 28; // 绗竴琛岃楂�
+        worksheet.getRow(2).height = 25; // 绗簩琛岃楂�
+
+        // 娣诲姞鏁版嵁琛�
+        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,
+          ]);
+
+          // 搴旂敤鏁版嵁琛屾牱寮�
+          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 = "鍚堣";
+          }
+        });
+        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;
+      }
+    },
+
+    // 鏄剧ず鍥捐〃寮圭獥
+
+    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,
+          },
         },
-        `user_${new Date().getTime()}.xlsx`
+        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;
+      }
     },
   },
 };
@@ -842,6 +2184,53 @@
   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;
@@ -858,6 +2247,52 @@
     font-size: 20px;
   }
 }
+/* 浣胯鏈夋墜鍨嬫寚閽� */
+.el-table__row {
+  cursor: pointer;
+}
+/* 鍐呭眰鍖荤敓琛ㄦ牸鏍峰紡 */
+.inner-table {
+  // 琛ㄥご鑳屾櫙鑹�
+  ::v-deep .el-table__header-wrapper {
+    background-color: #f0f7ff !important;
+
+    th {
+      background-color: #f0f7ff !important;
+    }
+  }
+
+  // 琛ㄦ牸琛岃儗鏅壊
+  ::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;

--
Gitblit v1.9.3