From 7c71fcb61dd0bfc6a179a973f9cab5ef979ad5f2 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期一, 02 二月 2026 17:11:56 +0800
Subject: [PATCH] 测试完成

---
 src/api/smartor/patouthosp.js                   |    8 
 vue.config.js                                   |    4 
 src/views/sfstatistics/percentage/index.vue     |  667 +++++++++++++++++++++++-------
 src/utils/sipService.js                         |    1 
 lishui.zip                                      |    0 
 shiyi.zip                                       |    0 
 src/views/patient/patient/AwaitingAdmission.vue |  224 ++++------
 src/views/login-sy.vue                          |  322 +++++++++++++++
 8 files changed, 919 insertions(+), 307 deletions(-)

diff --git a/lishui.zip b/lishui.zip
new file mode 100644
index 0000000..e4da5f6
--- /dev/null
+++ b/lishui.zip
Binary files differ
diff --git a/shiyi.zip b/shiyi.zip
new file mode 100644
index 0000000..f28a6c7
--- /dev/null
+++ b/shiyi.zip
Binary files differ
diff --git a/src/api/smartor/patouthosp.js b/src/api/smartor/patouthosp.js
index ebe3d70..353c440 100644
--- a/src/api/smartor/patouthosp.js
+++ b/src/api/smartor/patouthosp.js
@@ -8,6 +8,14 @@
     data: query
   })
 }
+// 鏌ヨ寰呭叆闄㈣褰曞垪琛�
+export function listPatMedInhosp(query) {
+  return request({
+    url: '/smartor/patinhosp/selectPatMedInhospList',
+    method: 'post',
+    data: query
+  })
+}
 
 // 鏌ヨ鎮h�呴棬璇婅褰曡缁�
 export function getPatouthosp(id) {
diff --git a/src/utils/sipService.js b/src/utils/sipService.js
index 0f62840..4fc4f96 100644
--- a/src/utils/sipService.js
+++ b/src/utils/sipService.js
@@ -1,6 +1,7 @@
 import JsSIP from "jssip";
 import { Notification, MessageBox, Message, Loading } from "element-ui";
 // 鍖婚櫌鏈烘瀯涓嶴IP鏈嶅姟鍣ㄦ槧灏勯厤缃�
+// 鍏徃鏈嶅姟鍣�192.168.100.6
 const HOSPITAL_CONFIG = {
   涓芥按甯備腑鍖婚櫌: {
     wsUrl: "wss://192.168.10.124:7443",
diff --git a/src/views/login-sy.vue b/src/views/login-sy.vue
new file mode 100644
index 0000000..0515b81
--- /dev/null
+++ b/src/views/login-sy.vue
@@ -0,0 +1,322 @@
+<template>
+  <div class="login">
+    <el-form
+      ref="loginForm"
+      :model="loginForm"
+      :rules="loginRules"
+      class="login-form"
+    >
+      <h3 class="title">鏅烘収闅忚绯荤粺</h3>
+      <el-form-item prop="username">
+        <el-input
+          v-model="loginForm.username"
+          type="text"
+          auto-complete="off"
+          placeholder="璐﹀彿"
+        >
+          <svg-icon
+            slot="prefix"
+            icon-class="user"
+            class="el-input__icon input-icon"
+          />
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="password">
+        <el-input
+          v-model="loginForm.password"
+          type="password"
+          auto-complete="off"
+          placeholder="瀵嗙爜"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon
+            slot="prefix"
+            icon-class="password"
+            class="el-input__icon input-icon"
+          />
+        </el-input>
+      </el-form-item>
+      <!-- 涓�===================姘� -->
+      <el-form-item prop="medicalCode">
+        <el-select
+          style="width: 100%"
+          v-model="loginForm.medicalCode"
+          placeholder="璇烽�夋嫨闄㈠尯"
+        >
+          <el-option
+            v-for="item in options"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+          <i slot="prefix" class="el-icon-mobile"></i>
+        </el-select>
+      </el-form-item>
+      <!-- <el-form-item prop="code" v-if="captchaEnabled">
+        <el-input
+          v-model="loginForm.code"
+          auto-complete="off"
+          placeholder="楠岃瘉鐮�"
+          style="width: 63%"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon
+            slot="prefix"
+            icon-class="validCode"
+            class="el-input__icon input-icon"
+          />
+        </el-input>
+        <div class="login-code">
+          <img :src="codeUrl" @click="getCode" class="login-code-img" />
+        </div>
+      </el-form-item> -->
+      <el-checkbox
+        v-model="loginForm.rememberMe"
+        style="margin: 0px 0px 25px 0px"
+        >璁颁綇瀵嗙爜</el-checkbox
+      >
+      <el-form-item style="width: 100%">
+        <el-button
+          :loading="loading"
+          size="medium"
+          type="primary"
+          style="width: 100%"
+          @click.native.prevent="handleLogin"
+        >
+          <span v-if="!loading">鐧� 褰�</span>
+          <span v-else>鐧� 褰� 涓�...</span>
+        </el-button>
+        <div style="float: right" v-if="register">
+          <router-link class="link-type" :to="'/register'"
+            >绔嬪嵆娉ㄥ唽1</router-link
+          >
+        </div>
+      </el-form-item>
+    </el-form>
+    <!--  搴曢儴  -->
+    <!-- <div class="el-login-footer">
+      <span style="color: #568FBD; font-size: 25px;">Copyright 漏 2018-2022 ruoyi.vip All Rights Reserved.</span>
+    </div> -->
+  </div>
+</template>
+
+<script>
+import { getCodeImg } from "@/api/login";
+import Cookies from "js-cookie";
+import { encrypt, decrypt } from "@/utils/jsencrypt";
+import { getorganization } from "@/api/AiCentre/index";
+
+export default {
+  name: "Login",
+  data() {
+    return {
+      codeUrl: "",
+      loginForm: {
+        username: "",
+        password: "",
+        rememberMe: false,
+        code: "",
+        orgid: "H41010500003",
+      },
+      options: [
+      ],
+      loginRules: {
+        username: [
+          { required: true, trigger: "blur", message: "璇疯緭鍏ユ偍鐨勮处鍙�" },
+        ],
+        password: [
+          { required: true, trigger: "blur", message: "璇疯緭鍏ユ偍鐨勫瘑鐮�" },
+        ],
+        orgid: [{ required: true, trigger: "blur", message: "璇烽�夋嫨闄㈠尯" }],
+      },
+      loading: false,
+      // 楠岃瘉鐮佸紑鍏�
+      captchaEnabled: true,
+      // 娉ㄥ唽寮�鍏�
+      register: false,
+      redirect: undefined,
+    };
+  },
+  watch: {
+    $route: {
+      handler: function (route) {
+        this.redirect = route.query && route.query.redirect;
+      },
+      immediate: true,
+    },
+  },
+  created() {
+    this.getorganization();
+    this.getCode();
+    this.getCookie();
+    // if (localStorage.getItem('orgid')) {
+    //   this.loginForm.orgid = localStorage.getItem('orgid');
+    // }
+  },
+  methods: {
+    getCode() {
+      getCodeImg().then((res) => {
+        this.captchaEnabled =
+          res.captchaEnabled === undefined ? true : res.captchaEnabled;
+        if (this.captchaEnabled) {
+          this.codeUrl = "data:image/gif;base64," + res.img;
+          this.loginForm.uuid = res.uuid;
+        }
+      });
+    },
+    getorganization() {
+      getorganization().then((res) => {
+        if (res.code == 200) {
+          this.options = res.rows.map((item) => ({
+            value: item.medicalCode,
+            // value: item.medicalCode,
+            label: item.organizationName,
+          }));
+        }
+      });
+    },
+    getCookie() {
+      const username = Cookies.get("username");
+      const password = Cookies.get("password");
+      const rememberMe = Cookies.get("rememberMe");
+      this.loginForm = {
+        username: username === undefined ? this.loginForm.username : username,
+        password:
+          password === undefined ? this.loginForm.password : decrypt(password),
+        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
+      };
+    },
+    handleLogin() {
+  this.$refs.loginForm.validate((valid) => {
+    if (valid) {
+      this.loading = true;
+
+      if (this.loginForm.rememberMe) {
+        Cookies.set("username", this.loginForm.username, { expires: 30 });
+        Cookies.set("password", encrypt(this.loginForm.password), {
+          expires: 30,
+        });
+        Cookies.set("rememberMe", this.loginForm.rememberMe, {
+          expires: 30,
+        });
+      } else {
+        Cookies.remove("username");
+        Cookies.remove("password");
+        Cookies.remove("rememberMe");
+      }
+
+      // 鍔ㄦ�佽缃� campusid 鍙傛暟
+      const selectedOrg = this.options.find(item => item.value === this.loginForm.medicalCode);
+      console.log(selectedOrg);
+
+      if (selectedOrg) {
+        if (selectedOrg.label.includes('婀栨花')) {
+          this.loginForm.campusid = 1;
+          this.loginForm.orgid = 1;
+        } else if (selectedOrg.label.includes('鍚村北')) {
+          this.loginForm.campusid = 2;
+          this.loginForm.orgid = 1;
+        } else {
+          this.loginForm.campusid = 1; // 榛樿鍊兼垨鍏朵粬澶勭悊
+          this.loginForm.orgid = 1;
+        }
+      }
+
+      this.$store
+        .dispatch("Login", this.loginForm)
+        .then((res) => {
+          if (this.loginForm.username == "admin") {
+            this.$router.push({ path: "/index" }).catch(() => {});
+          } else {
+            this.$router
+              .push({ path: "/followvisit/discharge" })
+              .catch(() => {});
+          }
+        })
+        .catch(() => {
+          this.loading = false;
+          if (this.captchaEnabled) {
+            this.getCode();
+          }
+        });
+    }
+  });
+}
+  },
+};
+</script>
+
+<style rel="stylesheet/scss" lang="scss">
+.login {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 100%;
+  overflow: hidden !important;
+  background-position: center center;
+
+  /* 鑳屾櫙鍥句笉骞抽摵 */
+  background-repeat: no-repeat;
+  /* 褰撳唴瀹归珮搴﹀ぇ浜庡浘鐗囬珮搴︽椂锛岃儗鏅浘鍍忕殑浣嶇疆鐩稿浜巚iewport鍥哄畾 */
+  background-attachment: fixed;
+  /* 璁╄儗鏅浘鍩轰簬瀹瑰櫒澶у皬浼哥缉 */
+  background-size: cover;
+  /* 璁剧疆鑳屾櫙棰滆壊锛岃儗鏅浘鍔犺浇杩囩▼涓細鏄剧ず鑳屾櫙鑹� */
+  background-color: #464646;
+  background-image: url("../assets/images/login-background.jpg");
+  background-size: cover;
+}
+.title {
+  margin: 0px auto 30px auto;
+  text-align: center;
+  color: #707070;
+}
+
+.login-form {
+  border-radius: 6px;
+  background: #ffffff;
+  width: 400px;
+  padding: 25px 25px 5px 25px;
+  .el-input {
+    height: 38px;
+    input {
+      height: 38px;
+    }
+  }
+  .input-icon {
+    height: 39px;
+    width: 14px;
+    margin-left: 2px;
+  }
+}
+.login-tip {
+  font-size: 13px;
+  text-align: center;
+  color: #bfbfbf;
+}
+.login-code {
+  width: 33%;
+  height: 38px;
+  float: right;
+  img {
+    cursor: pointer;
+    vertical-align: middle;
+  }
+}
+.el-login-footer {
+  height: 40px;
+  line-height: 40px;
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  text-align: center;
+  color: #fff;
+  font-family: Arial;
+  font-size: 12px;
+  letter-spacing: 1px;
+}
+
+.login-code-img {
+  height: 38px;
+}
+</style>
diff --git a/src/views/patient/patient/AwaitingAdmission.vue b/src/views/patient/patient/AwaitingAdmission.vue
index f692a80..6a72312 100644
--- a/src/views/patient/patient/AwaitingAdmission.vue
+++ b/src/views/patient/patient/AwaitingAdmission.vue
@@ -11,42 +11,6 @@
           v-show="showSearch"
           label-width="98px"
         >
-          <el-form-item label="濮撳悕" width="100" prop="name">
-            <el-input
-              v-model="queryParams.patname"
-              placeholder="璇疯緭鍏ュ鍚�"
-              clearable
-              style="width: 200px"
-              @keyup.enter.native="handleQuery"
-            />
-          </el-form-item>
-          <el-form-item label="璇婃柇" width="100" prop="name">
-            <el-input
-              v-model="queryParams.diagname"
-              placeholder="璇疯緭鍏ヨ瘖鏂�"
-              clearable
-              style="width: 200px"
-              @keyup.enter.native="handleQuery"
-            />
-          </el-form-item>
-          <el-form-item label="绉戝" width="100" prop="name">
-            <el-input
-              v-model="queryParams.deptname"
-              placeholder="璇疯緭鍏ョ瀹ゅ悕绉�"
-              clearable
-              style="width: 200px"
-              @keyup.enter.native="handleQuery"
-            />
-          </el-form-item>
-          <el-form-item label="鍖荤敓" width="100" prop="name">
-            <el-input
-              v-model="queryParams.drname"
-              placeholder="璇疯緭鍏ュ尰鐢熷鍚�"
-              clearable
-              style="width: 200px"
-              @keyup.enter.native="handleQuery"
-            />
-          </el-form-item>
           <el-form-item label="鐥呮鍙�" prop="outhospno">
             <el-input
               v-model="queryParams.outhospno"
@@ -56,17 +20,7 @@
               @keyup.enter.native="handleQuery"
             />
           </el-form-item>
-
-          <el-form-item label="鎮h�呰寖鍥�" prop="status">
-            <el-cascader
-              v-model="queryParams.scopetype"
-              placeholder="榛樿鍏ㄩ儴"
-              :options="sourcetype"
-              :props="{ expandTrigger: 'hover' }"
-              @change="handleChange"
-            ></el-cascader>
-          </el-form-item>
-          <el-form-item label="灏辫瘖鏃ユ湡">
+          <el-form-item label="棰勭害浣忛櫌鏃ユ湡">
             <el-date-picker
               v-model="dateRange"
               style="width: 240px"
@@ -76,28 +30,31 @@
               start-placeholder="寮�濮嬫棩鏈�"
               end-placeholder="缁撴潫鏃ユ湡"
             ></el-date-picker>
-            <!-- <el-date-picker
-                v-model="dateRange"
-                type="datetimerange"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                start-placeholder="寮�濮嬫棩鏈�"
-                end-placeholder="缁撴潫鏃ユ湡"
-                :default-time="['12:00:00']"
+          </el-form-item>
+          <el-form-item label="鏈夋棤闄㈠墠妫�鏌�" prop="status">
+            <el-select v-model="queryParams.examine" placeholder="璇烽�夋嫨">
+              <el-option label="鏈�" :value="1"> </el-option>
+              <el-option label="鏃�" :value="2"> </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="鏀舵不绫诲瀷" prop="status">
+            <el-select v-model="queryParams.cureType" placeholder="璇烽�夋嫨">
+              <el-option
+                v-for="item in dict.type.receive_and_cure"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
               >
-              </el-date-picker> -->
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="瀹夋帓鐘舵��" prop="status">
+            <el-select v-model="queryParams.arrange" placeholder="璇烽�夋嫨">
+              <el-option label="宸插畨鎺�" :value="1"> </el-option>
+              <el-option label="鏈畨鎺�" :value="2"> </el-option>
+            </el-select>
           </el-form-item>
           <el-row>
-            <!-- <el-form-item label=" 灏辫瘖鏃ユ湡 " prop="admitdate">
-              <el-date-picker
-                clearable
-                v-model="queryParams.admitdate"
-                type="date"
-                value-format="yyyy-MM-dd"
-                placeholder="璇烽�夋嫨 灏辫瘖鏃ユ湡 "
-              >
-              </el-date-picker>
-            </el-form-item> -->
-
             <el-form-item>
               <el-button
                 type="primary"
@@ -207,6 +164,12 @@
             prop="id"
           /> -->
           <el-table-column
+            label="鐥呮鍙�"
+            align="center"
+            key="outhospno"
+            prop="outhospno"
+          />
+          <el-table-column
             label="灏辫瘖鏃堕棿"
             align="center"
             key="admitdate"
@@ -217,18 +180,29 @@
               <span>{{ formatTime(scope.row.admitdate) }}</span>
             </template>
           </el-table-column>
-          <!-- <el-table-column
-            label="鐥呮鍙�"
-            align="center"
-            key="patno"
-            prop="patno"
-          /> -->
           <el-table-column
-            label="鐥呮鍙�"
+            label="棰勭害浣忛櫌鏃ユ湡"
             align="center"
-            key="outhospno"
-            prop="outhospno"
-          />
+            key="admitdate"
+            prop="admitdate"
+            width="160"
+          >
+            <template slot-scope="scope">
+              <span>{{ formatTime(scope.row.admitdate) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="棰勭害璇婃柇鏃ユ湡"
+            align="center"
+            key="admitdate"
+            prop="admitdate"
+            width="160"
+          >
+            <template slot-scope="scope">
+              <span>{{ formatTime(scope.row.admitdate) }}</span>
+            </template>
+          </el-table-column>
+
           <el-table-column
             label="濮撳悕"
             width="100"
@@ -272,48 +246,49 @@
             width="120"
           />
           <el-table-column
+            label="韬唤璇佸彿"
+            align="center"
+            key="idcardno"
+            prop="idcardno"
+            width="220"
+          />
+          <el-table-column
             label="鑱旂郴鐢佃瘽"
             align="center"
             key="telcode"
             prop="telcode"
             width="120"
           />
-          <!-- <el-table-column
-            label="鎮h�呮爣绛撅紙缂猴級"
-            align="center"
-            key="tagList"
-            prop="tagList"
-            width="160"
-            :show-overflow-tooltip="true"
-          >
-            <template slot-scope="scope">
-              <span v-for="item in scope.row.tagList">{{ item }} </span>
-            </template>
-          </el-table-column> -->
 
           <el-table-column
-            label="璇婃柇"
-            align="center"
-            key="diagname"
-            prop="diagname"
-            width="190"
-          />
-          <!-- <el-table-column
-            label="涓昏堪"
-            align="center"
-            key="mainsuit"
-            prop="mainsuit"
-            width="120"
-          /> -->
-          <el-table-column
-            label="灏辫瘖绉戝"
+            label="绉戝"
             align="center"
             key="deptname"
             prop="deptname"
             width="120"
           />
           <el-table-column
-            label="鎺ヨ瘖鍖荤敓"
+            label="鏈夋棤闄㈠墠妫�鏌�"
+            align="center"
+            key="deptname"
+            prop="deptname"
+            width="120"
+          />
+          <el-table-column
+            label="鏀舵不绫诲瀷"
+            align="center"
+            key="deptname"
+            prop="deptname"
+            width="120"
+          >
+            <template slot-scope="scope">
+              <dict-tag
+                :options="dict.type.receive_and_cure"
+                :value="scope.row.sendState"
+              /> </template
+          ></el-table-column>
+          <el-table-column
+            label="瀹夋帓鐘舵��"
             align="center"
             key="drname"
             prop="drname"
@@ -559,7 +534,7 @@
 import { delUser } from "@/api/system/user";
 
 import {
-  listPatouthosp,
+  listPatMedInhosp,
   getPatouthosp,
   addPatouthosp,
   updatePatouthosp,
@@ -577,7 +552,7 @@
 
 export default {
   name: "Userhuanze",
-  dicts: ["sys_normal_disable", "sys_user_sex"],
+  dicts: ["sys_normal_disable", "sys_user_sex", "receive_and_cure"],
   components: { Treeselect },
   data() {
     return {
@@ -722,9 +697,7 @@
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        searchscope: 3,
-        scopetype: [],
-        deptcodes: [],
+
       },
       // 琛ㄥ崟鏍¢獙
       rules: {
@@ -800,13 +773,6 @@
     /** 鏌ヨ鎮h�呭垪琛� */
     getList() {
       this.loading = true;
-      if (this.queryParams.searchscope == 3) {
-        this.queryParams.deptcodes = store.getters.belongDepts.map(
-          (obj) => obj.deptCode
-        );
-        // this.queryParams.leavehospitaldistrictcodes =
-        //   store.getters.belongWards.map((obj) => obj.districtCode);
-      }
       if (this.dateRange) {
         this.queryParams.beginTime = this.dateRange[0];
         this.queryParams.endTime = this.dateRange[1];
@@ -814,7 +780,9 @@
         this.queryParams.beginTime = "";
         this.queryParams.endTime = "";
       }
-      listPatouthosp(this.queryParams).then((response) => {
+        this.loading = false;
+
+      listPatMedInhosp(this.queryParams).then((response) => {
         this.userList = response.rows;
         this.total = response.total;
         this.loading = false;
@@ -834,25 +802,7 @@
         this.optionstag = response.rows;
       });
     },
-    // 鎮h�呰寖鍥村鐞�
-    handleChange(value) {
-      let type = value[0];
-      let code = value.slice(-1)[0];
-      // this.queryParams.leavehospitaldistrictcodes = [];
-      this.queryParams.deptcodes = [];
 
-      if (type == 1) {
-        this.queryParams.deptcodes.push(code);
-        // this.queryParams.leavehospitaldistrictcodes = [];
-        this.queryParams.searchscope = 1;
-      } else if (type == 2) {
-        // this.queryParams.leavehospitaldistrictcodes.push(code);
-        this.queryParams.deptcodes = [];
-        this.queryParams.searchscope = 2;
-      } else {
-        this.queryParams.searchscope = 3;
-      }
-    },
     // 鏌ヨ瀵煎叆灞曠ず鍒楄〃
     geterryList() {
       this.loading = true;
@@ -919,9 +869,7 @@
       this.queryParams = {
         pageNum: 1,
         pageSize: 10,
-        searchscope: 3,
-        scopetype: [],
-        deptcodes: [],
+
         // leavehospitaldistrictcodes: [],
       };
       this.handleQuery();
diff --git a/src/views/sfstatistics/percentage/index.vue b/src/views/sfstatistics/percentage/index.vue
index 89b81a6..745f8f0 100644
--- a/src/views/sfstatistics/percentage/index.vue
+++ b/src/views/sfstatistics/percentage/index.vue
@@ -395,6 +395,21 @@
                     key="needFollowUp"
                     prop="needFollowUp"
                   >
+                    <template slot-scope="scope">
+                      <el-button
+                        size="medium"
+                        type="text"
+                        @click="
+                          viewDetails(
+                            scope.row.needFollowUpInfo,
+                            scope.row.leavehospitaldistrictname + '闇�闅忚鍒楄〃'
+                          )
+                        "
+                        ><span class="button-zx">{{
+                          scope.row.needFollowUp
+                        }}</span></el-button
+                      >
+                    </template>
                   </el-table-column>
                   <el-table-column
                     label="寰呴殢璁�"
@@ -424,6 +439,21 @@
                     key="followUpSuccess"
                     prop="followUpSuccess"
                   >
+                    <template slot-scope="scope">
+                      <el-button
+                        size="medium"
+                        type="text"
+                        @click="
+                          viewDetails(
+                            scope.row.followUpSuccessInfo,
+                            scope.row.leavehospitaldistrictname + '闅忚鎴愬姛鍒楄〃'
+                          )
+                        "
+                        ><span class="button-zx">{{
+                          scope.row.followUpSuccess
+                        }}</span></el-button
+                      >
+                    </template>
                   </el-table-column>
                   <el-table-column
                     label="闅忚澶辫触"
@@ -488,6 +518,21 @@
                     key="manual"
                     prop="manual"
                   >
+                    <template slot-scope="scope">
+                      <el-button
+                        size="medium"
+                        type="text"
+                        @click="
+                          viewDetails(
+                            scope.row.manualInfo,
+                            scope.row.leavehospitaldistrictname + '浜哄伐闅忚鍒楄〃'
+                          )
+                        "
+                        ><span class="button-zx">{{
+                          scope.row.manual
+                        }}</span></el-button
+                      >
+                    </template>
                   </el-table-column>
                   <el-table-column
                     label="鐭俊"
@@ -495,6 +540,21 @@
                     key="sms"
                     prop="sms"
                   >
+                    <template slot-scope="scope">
+                      <el-button
+                        size="medium"
+                        type="text"
+                        @click="
+                          viewDetails(
+                            scope.row.smsInfo,
+                            scope.row.leavehospitaldistrictname + '鐭俊闅忚鍒楄〃'
+                          )
+                        "
+                        ><span class="button-zx">{{
+                          scope.row.sms
+                        }}</span></el-button
+                      >
+                    </template>
                   </el-table-column>
                   <el-table-column
                     label="寰俊"
@@ -502,6 +562,21 @@
                     key="weChat"
                     prop="weChat"
                   >
+                    <template slot-scope="scope">
+                      <el-button
+                        size="medium"
+                        type="text"
+                        @click="
+                          viewDetails(
+                            scope.row.weChatInfo,
+                            scope.row.leavehospitaldistrictname + '寰俊闅忚鍒楄〃'
+                          )
+                        "
+                        ><span class="button-zx">{{
+                          scope.row.weChat
+                        }}</span></el-button
+                      >
+                    </template>
                   </el-table-column>
                 </el-table-column>
                 <el-table-column align="center" label="鍐嶆鍑洪櫌闅忚">
@@ -511,6 +586,22 @@
                     key="needFollowUpAgain"
                     prop="needFollowUpAgain"
                   >
+                    <template slot-scope="scope">
+                      <el-button
+                        size="medium"
+                        type="text"
+                        @click="
+                          viewDetails(
+                            scope.row.needFollowUpAgainInfo,
+                            scope.row.leavehospitaldistrictname +
+                              '鍐嶆闅忚闇�闅忚鍒楄〃'
+                          )
+                        "
+                        ><span class="button-zx">{{
+                          scope.row.needFollowUpAgain
+                        }}</span></el-button
+                      >
+                    </template>
                   </el-table-column>
                   <el-table-column
                     label="寰呴殢璁�"
@@ -518,6 +609,22 @@
                     key="pendingFollowUpAgain"
                     prop="pendingFollowUpAgain"
                   >
+                    <template slot-scope="scope">
+                      <el-button
+                        size="medium"
+                        type="text"
+                        @click="
+                          viewDetails(
+                            scope.row.pendingFollowUpAgainInfo,
+                            scope.row.leavehospitaldistrictname +
+                              '鍐嶆闅忚寰呴殢璁垮垪琛�'
+                          )
+                        "
+                        ><span class="button-zx">{{
+                          scope.row.pendingFollowUpAgain
+                        }}</span></el-button
+                      >
+                    </template>
                   </el-table-column>
                   <el-table-column
                     label="闅忚鎴愬姛"
@@ -525,6 +632,22 @@
                     key="followUpSuccessAgain"
                     prop="followUpSuccessAgain"
                   >
+                    <template slot-scope="scope">
+                      <el-button
+                        size="medium"
+                        type="text"
+                        @click="
+                          viewDetails(
+                            scope.row.followUpSuccessAgainInfo,
+                            scope.row.leavehospitaldistrictname +
+                              '鍐嶆闅忚闅忚鎴愬姛鍒楄〃'
+                          )
+                        "
+                        ><span class="button-zx">{{
+                          scope.row.followUpSuccessAgain
+                        }}</span></el-button
+                      >
+                    </template>
                   </el-table-column>
                   <el-table-column
                     label="闅忚澶辫触"
@@ -532,6 +655,22 @@
                     key="followUpFailAgain"
                     prop="followUpFailAgain"
                   >
+                    <template slot-scope="scope">
+                      <el-button
+                        size="medium"
+                        type="text"
+                        @click="
+                          viewDetails(
+                            scope.row.followUpFailAgainInfo,
+                            scope.row.leavehospitaldistrictname +
+                              '鍐嶆闅忚闅忚澶辫触鍒楄〃'
+                          )
+                        "
+                        ><span class="button-zx">{{
+                          scope.row.followUpFailAgain
+                        }}</span></el-button
+                      >
+                    </template>
                   </el-table-column>
                   <el-table-column
                     label="闅忚鐜�"
@@ -554,6 +693,22 @@
                     key="manualAgain"
                     prop="manualAgain"
                   >
+                    <template slot-scope="scope">
+                      <el-button
+                        size="medium"
+                        type="text"
+                        @click="
+                          viewDetails(
+                            scope.row.manualAgainInfo,
+                            scope.row.leavehospitaldistrictname +
+                              '鍐嶆闅忚浜哄伐闅忚鍒楄〃'
+                          )
+                        "
+                        ><span class="button-zx">{{
+                          scope.row.manualAgain
+                        }}</span></el-button
+                      >
+                    </template>
                   </el-table-column>
                   <el-table-column
                     label="鐭俊"
@@ -561,6 +716,22 @@
                     key="smsAgain"
                     prop="smsAgain"
                   >
+                    <template slot-scope="scope">
+                      <el-button
+                        size="medium"
+                        type="text"
+                        @click="
+                          viewDetails(
+                            scope.row.smsAgainInfo,
+                            scope.row.leavehospitaldistrictname +
+                              '鍐嶆闅忚鐭俊闅忚鍒楄〃'
+                          )
+                        "
+                        ><span class="button-zx">{{
+                          scope.row.smsAgain
+                        }}</span></el-button
+                      >
+                    </template>
                   </el-table-column>
                   <el-table-column
                     label="寰俊"
@@ -568,6 +739,22 @@
                     key="weChatAgain"
                     prop="weChatAgain"
                   >
+                    <template slot-scope="scope">
+                      <el-button
+                        size="medium"
+                        type="text"
+                        @click="
+                          viewDetails(
+                            scope.row.weChatAgainInfo,
+                            scope.row.leavehospitaldistrictname +
+                              '鍐嶆闅忚寰俊闅忚鍒楄〃'
+                          )
+                        "
+                        ><span class="button-zx">{{
+                          scope.row.weChatAgain
+                        }}</span></el-button
+                      >
+                    </template>
                   </el-table-column>
                 </el-table-column>
                 <el-table-column
@@ -894,179 +1081,207 @@
       width="70%"
       :close-on-click-modal="false"
     >
+      <div style="margin-bottom: 16px; display: flex; align-items: center">
+        <span style="margin-right: 10px; font-weight: bold">鎮h�呭鍚嶆煡璇�:</span>
+        <el-input
+          v-model="searchName"
+          placeholder="璇疯緭鍏ユ偅鑰呭鍚嶈繘琛岀瓫閫�"
+          clearable
+          style="width: 300px"
+          @input="handleSearch"
+          @clear="handleSearch"
+        >
+        </el-input>
+        <span
+          style="margin-left: 10px; color: rgb(35, 81, 233); font-size: 16px"
+        >
+          鍏� {{ infotitlelist.length }} 鏉¤褰�
+        </span>
+      </div>
       <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"
+            <div
+              class="data-list"
+              ref="dataList"
+              @scroll="handleScroll"
+              v-loading="infotitloading"
+            >
+              <el-table
+                :data="currentDisplayList"
+                height="660"
+                style="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
+                  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
+                  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="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-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>
+            </div>
           </el-row>
           <pagination
             v-show="patienttotal > 0 && this.patientqueryParams.allhosp != 6"
@@ -1131,11 +1346,16 @@
       orgname: "",
       expands: [],
       infotitlelist: [],
+      currentDisplayList: [], // 褰撳墠鏄剧ず鐨勬暟鎹�
+      loadIndex: 0, // 褰撳墠宸插姞杞界殑鏁版嵁绱㈠紩
+      pageSize: 100, // 姣忔鍔犺浇鐨勬暟鎹噺
+      isLoading: false, // 闃叉婊氬姩鏃堕噸澶嶅姞杞�
       // 閬僵灞�
       loading: false,
       Seedloading: false,
       chartDialogVisible: false,
       infotitleVisible: false,
+      searchName: "", // 鎼滅储鍏抽敭璇�
       infotitloading: false,
       infotitle: "",
       pieChart: null,
@@ -1274,7 +1494,72 @@
       getSfStatistics(params).then((response) => {
         console.log(response);
         // this.total = response.total;
-        this.userList = response.data;
+        this.userList = this.customSort(response.data);
+      });
+    },
+    // 鎼滅储澶勭悊鍑芥暟
+    handleSearch() {
+      if (!this.searchName.trim()) {
+        // 濡傛灉鎼滅储妗嗕负绌猴紝鏄剧ず鎵�鏈夋暟鎹�
+        this.currentDisplayList = [...this.infotitlelist];
+      } else {
+        // 鏍规嵁鎮h�呭鍚嶈繘琛岀瓫閫夛紙涓嶅尯鍒嗗ぇ灏忓啓锛�
+        const keyword = this.searchName.toLowerCase();
+        this.currentDisplayList = this.infotitlelist.filter((item) => {
+          return item.sendname && item.sendname.toLowerCase().includes(keyword);
+        });
+      }
+    },
+    customSort(data) {
+      // 瀹氫箟鎮ㄦ湡鏈涚殑鐥呭尯椤哄簭锛堟墿灞曞埌涓夊崄锛�
+      const order = [
+        "浜�",
+        "涓�",
+        "鍥�",
+        "浜�",
+        "鍏�",
+        "涓�",
+        "鍏�",
+        "涔�",
+        "鍗�",
+        "鍗佷竴",
+        "鍗佷簩",
+        "鍗佷笁",
+        "鍗佸洓",
+        "鍗佷簲",
+        "鍗佸叚",
+        "鍗佷竷",
+        "鍗佸叓",
+        "鍗佷節",
+        "浜屽崄",
+        "浜屽崄涓�",
+        "浜屽崄浜�",
+        "浜屽崄涓�",
+        "浜屽崄鍥�",
+        "浜屽崄浜�",
+        "浜屽崄鍏�",
+        "浜屽崄涓�",
+        "浜屽崄鍏�",
+        "浜屽崄涔�",
+        "涓夊崄",
+      ];
+
+      return data.sort((a, b) => {
+        // 鎻愬彇鐥呭尯鍚嶇О涓殑涓枃鏁板瓧閮ㄥ垎[6](@ref)
+        const getIndex = (name) => {
+          const numStr = name.match(
+            /^(浜寍涓墊鍥泑浜攟鍏瓅涓億鍏珅涔潀鍗亅鍗佷竴|鍗佷簩|鍗佷笁|鍗佸洓|鍗佷簲|鍗佸叚|鍗佷竷|鍗佸叓|鍗佷節|浜屽崄|浜屽崄涓�|浜屽崄浜寍浜屽崄涓墊浜屽崄鍥泑浜屽崄浜攟浜屽崄鍏瓅浜屽崄涓億浜屽崄鍏珅浜屽崄涔潀涓夊崄)/
+          )?.[1];
+          return order.indexOf(numStr);
+        };
+
+        const indexA = getIndex(a.leavehospitaldistrictname);
+        const indexB = getIndex(b.leavehospitaldistrictname);
+
+        // 濡傛灉閮藉湪瀹氫箟鐨勯『搴忎腑锛屾寜瀹氫箟椤哄簭鎺掞紱鍚﹀垯锛屾湭瀹氫箟鐨勬帓鍦ㄥ悗闈2](@ref)
+        if (indexA === -1) return 1;
+        if (indexB === -1) return -1;
+        return indexA - indexB;
       });
     },
     getRowKey(row) {
@@ -1296,9 +1581,16 @@
       const params = {
         ...this.queryParams,
         // 濡傛灉閫夋嫨浜�"鍏ㄩ儴"锛屽垯浼犳墍鏈夌梾鍖�/绉戝浠g爜
+        deptcodes: this.queryParams.deptcodes.includes("all")
+          ? this.allDeptCodes
+          : this.queryParams.deptcodes,
         leavehospitaldistrictcodes: [row.leavehospitaldistrictcode],
         drcode: "1",
       };
+
+      // 绉婚櫎鍙兘瀛樺湪鐨�"all"鍊�
+      delete params.leavehospitaldistrictcodes.all;
+      delete params.deptcodes.all;
       // 濡傛灉璇ヨ杩樻病鏈夊姞杞藉尰鐢熸暟鎹紝鍒欏姞杞�
       if (!row.doctorStats) {
         this.loading = true;
@@ -1558,7 +1850,44 @@
     viewDetails(row, title) {
       this.infotitleVisible = true;
       this.infotitle = title;
-      this.infotitlelist = row;
+      this.infotitlelist = row; // 鍋囪row灏辨槸闇�瑕佸睍绀虹殑璇︾粏鏁扮粍
+
+      // 鍒濆鍖栧姞杞�
+      this.loadIndex = 0;
+      this.currentDisplayList = [];
+      this.$nextTick(() => {
+        this.loadMoreData();
+      });
+    },
+    loadMoreData() {
+      if (this.isLoading) return;
+      this.isLoading = true;
+
+      // 妯℃嫙寮傛鍔犺浇锛屽疄闄呭彲鑳芥槸鐩存帴鍒囩墖鏈湴鏁版嵁
+      setTimeout(() => {
+        const nextChunk = this.infotitlelist.slice(
+          this.loadIndex,
+          this.loadIndex + this.pageSize
+        );
+        this.currentDisplayList = this.currentDisplayList.concat(nextChunk);
+        this.loadIndex += this.pageSize;
+        this.isLoading = false;
+      }, 200);
+    },
+    handleScroll(event) {
+      const scrollContainer = event.target;
+      // 鍒ゆ柇鏄惁婊氬姩鍒板簳閮�
+      const isAtBottom =
+        scrollContainer.scrollTop + scrollContainer.clientHeight >=
+        scrollContainer.scrollHeight - 10;
+
+      if (
+        isAtBottom &&
+        !this.isLoading &&
+        this.loadIndex < this.infotitlelist.length
+      ) {
+        this.loadMoreData();
+      }
     },
     SeedetailsgGo(row) {
       this.SeedetailsVisible = false;
@@ -2588,6 +2917,10 @@
   width: 100px;
   height: 50px;
 }
+.data-list {
+  max-height: 800px;
+  overflow-y: auto;
+}
 .documentf {
   display: flex;
   justify-content: flex-end;
diff --git a/vue.config.js b/vue.config.js
index 5a49e1f..7ce923e 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -36,10 +36,10 @@
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
         // target: `https://www.health-y.cn/lssf`,
-        target: `http://192.168.100.10:8096`,
+        // target: `http://192.168.100.10:8096`,
         // target: `http://192.168.100.10:8094`,//鐪佺珛鍚屽痉
         // target: `http://192.168.100.10:8095`,//鏂板崕
-        // target:`http://localhost:8095`,
+        target:`http://localhost:8095`,
         // target:`http://35z1t16164.qicp.vip`,
         // target: `http://192.168.100.172:8095`,
         // target: `http://192.168.101.166:8093`,

--
Gitblit v1.9.3