From ba4eee2e5ced6aef3e85a7c7b8317817b7ad3cae Mon Sep 17 00:00:00 2001
From: sinake <sinake1@qq.com>
Date: 星期四, 14 八月 2025 10:05:53 +0800
Subject: [PATCH] Merge branch 'lishui-Smartor' of http://116.62.18.175:6699/r/~yxh/smartor-web

---
 src/api/AiCentre/index.js                                      |    1 
 src/views/index.vue                                            |  252 +
 dist.zip                                                       |    0 
 src/components/Assistant/index.vue                             |    2 
 src/views/followvisit/zbAgain/index.vue                        |   12 
 src/views/patient/patient/outpatient.vue                       |   52 
 src/views/shortmessage/healthinformation/index.vue             |    1 
 src/views/patient/patient/index.vue                            |   13 
 src/views/patient/subsequent/index.vue                         |    2 
 src/views/followvisit/satisfaction/index.vue                   |  667 ++--
 src/api/AiCentre/satisfaction.js                               |   42 
 src/views/patient/propaganda/QuestionnaireTask.vue             |   66 
 src/views/followvisit/record/detailpage/index.vue              |  255 +
 src/views/patient/patient/behospitalized.vue                   |    2 
 src/components/CallButton/index.vue                            |  294 ++
 src/store/getters.js                                           |    1 
 src/views/followvisit/discharge/outpatientService.vue          | 1808 +++++++++++++
 src/views/knowledge/education/compilequer/index.vue            |    2 
 src/views/patient/propaganda/Missioncreation.vue               |  202 +
 src/views/repositoryai/templateku/configurat/measurement.vue   |    1 
 src/views/followvisit/technology/index.vue                     |   12 
 src/api/system/user.js                                         |   10 
 src/store/modules/user.js                                      |   17 
 src/views/followvisit/SpecificDisease/index.vue                |   10 
 src/views/followvisit/again/index.vue                          |   25 
 src/views/patient/propaganda/particty copy.vue                 |    2 
 src/utils/sipService-bd.js                                     |  200 +
 src/utils/sipService.js                                        |  216 +
 src/views/patient/questionnaire/index.vue                      |   10 
 src/views/followvisit/record/index.vue                         |   12 
 /dev/null                                                      | 1315 ----------
 src/views/followvisit/record/physical/index.vue                | 1433 +++++++++++
 src/views/login.vue                                            |   11 
 src/views/repositoryai/general/particulars/index.vue           |    4 
 src/views/patient/patient/hospital.vue                         |   18 
 src/views/patient/shadow/index.vue                             |   10 
 package.json                                                   |    1 
 src/views/patient/medtechnician/Compositeeditdetails.vue       |    2 
 src/api/AiCentre/EChartsdata.js                                |    8 
 src/views/shortmessage/healthinformation/compilequer/index.vue |  713 ----
 src/views/patient/follow/index.vue                             |   61 
 41 files changed, 5,137 insertions(+), 2,628 deletions(-)

diff --git a/dist-wl.zip b/dist-wl.zip
deleted file mode 100644
index 87d732e..0000000
--- a/dist-wl.zip
+++ /dev/null
Binary files differ
diff --git a/dist.zip b/dist.zip
new file mode 100644
index 0000000..4bef5b1
--- /dev/null
+++ b/dist.zip
Binary files differ
diff --git a/package.json b/package.json
index 2994555..291269c 100644
--- a/package.json
+++ b/package.json
@@ -60,6 +60,7 @@
     "js-beautify": "1.13.0",
     "js-cookie": "3.0.1",
     "jsencrypt": "^3.3.2",
+    "jssip": "^3.10.1",
     "lemon-imui": "^1.7.7",
     "moment": "^2.30.1",
     "nprogress": "0.2.0",
diff --git a/src/api/AiCentre/EChartsdata.js b/src/api/AiCentre/EChartsdata.js
index 94c3984..2b4d479 100644
--- a/src/api/AiCentre/EChartsdata.js
+++ b/src/api/AiCentre/EChartsdata.js
@@ -25,6 +25,14 @@
     data: data,
   });
 }
+// 棣栭〉涓儴鏁版嵁
+export function getServiceStatistics(data) {
+  return request({
+    url: "/smartor/serviceSubtask/getServiceStatistics",
+    method: "post",
+    data: data,
+  });
+}
 // 鏌ヨ鎮h�呬綇闄㈣褰曞垪琛�
 export function getechartsMedInhospList(data) {
   return request({
diff --git a/src/api/AiCentre/index.js b/src/api/AiCentre/index.js
index 7db4067..7455089 100644
--- a/src/api/AiCentre/index.js
+++ b/src/api/AiCentre/index.js
@@ -9,3 +9,4 @@
 export * from './external'
 export * from './patientexternal'
 export * from './EChartsdata'
+export * from './satisfaction'
diff --git a/src/api/AiCentre/satisfaction.js b/src/api/AiCentre/satisfaction.js
new file mode 100644
index 0000000..e9901b0
--- /dev/null
+++ b/src/api/AiCentre/satisfaction.js
@@ -0,0 +1,42 @@
+import request from "@/utils/request";
+import { parseStrEmpty } from "@/utils/ruoyi"; //澶勭悊瀛楃涓�
+
+// 鏌ヨ婊℃剰搴﹀垪琛�
+export function listsatisfaction(query) {
+  return request({
+    url: "/smartor/satisfaction/list",
+    method: "post",
+    data: query,
+  });
+}
+
+// 鎵归噺鏂板婊℃剰搴�
+export function addsatisfaction(data) {
+  return request({
+    url: "/smartor/satisfaction/batchinsert",
+    method: "post",
+    data: data,
+  });
+}
+
+// 淇敼婊℃剰搴�
+export function updatesatisfaction(data) {
+  return request({
+    url: "/smartor/satisfaction/edit",
+    method: "post",
+    data: data,
+  });
+}
+
+// 鍒犻櫎婊℃剰搴�
+export function delsatisfaction(satisfactionId) {
+  return request({
+    url: "/smartor/satisfaction/remove/" + satisfactionId,
+    method: "get",
+  });
+}
+
+
+
+
+
diff --git a/src/api/system/user.js b/src/api/system/user.js
index f7abb88..451a5c0 100644
--- a/src/api/system/user.js
+++ b/src/api/system/user.js
@@ -86,7 +86,7 @@
     data: data,
   });
 }
-// 淇敼鐢ㄦ埛涓汉淇℃伅
+// 缁熻鏌ヨ
 export function getSfStatistics(data) {
   return request({
     url: "/smartor/serviceSubtask/getSfStatistics",
@@ -94,6 +94,14 @@
     data: data,
   });
 }
+// 鏈強鏃舵煡璇�
+export function selectTimelyRate(data) {
+  return request({
+    url: "/smartor/servicetask/selectTimelyRate",
+    method: "post",
+    data: data,
+  });
+}
 
 // 鐢ㄦ埛瀵嗙爜閲嶇疆
 export function updateUserPwd(oldPassword, newPassword) {
diff --git a/src/components/Assistant/index.vue b/src/components/Assistant/index.vue
index 80e9bd5..356ef75 100644
--- a/src/components/Assistant/index.vue
+++ b/src/components/Assistant/index.vue
@@ -361,7 +361,7 @@
 
   display: block;
   background: black;
-  background: -webkit-radial-gradient(100px 100px, circle, #5788fe, #292929);
+  background: -webkit-radial-gradient(100px 100px, circle, #5788FE, #292929);
   //   background: -moz-radial-gradient(100px 100px, circle, #35a1a1, #000);Firefox 娴忚鍣ㄧ殑瀹炵幇
   //   background: radial-gradient(100px 100px, circle, #35a1a1, #000);鏍囧噯 HTML5 灞炴��
   margin: 0;
diff --git a/src/components/CallButton/index.vue b/src/components/CallButton/index.vue
new file mode 100644
index 0000000..47931a4
--- /dev/null
+++ b/src/components/CallButton/index.vue
@@ -0,0 +1,294 @@
+<template>
+  <div class="call-container">
+    <div class="sip-status" :class="sipStatusClass">
+      SIP鐘舵��: {{ sipStatus }}
+    </div>
+
+    <!-- 鐘舵�佹樉绀� -->
+    <div class="call-status" :class="callStatusClass">
+      {{ callStatusText }}
+    </div>
+
+    <!-- 鍛煎彨鎸夐挳 -->
+    <button
+      :class="['call-btn', { calling: isCalling }]"
+      @click="startCall"
+      :disabled="isCalling || sipStatus !== '宸叉敞鍐�'"
+    >
+      {{ callButtonText }}
+    </button>
+
+    <!-- 鎸傛柇鎸夐挳 -->
+    <button v-if="isCalling" class="end-call-btn" @click="endCall">鎸傛柇</button>
+
+    <!-- 闊抽鍏冪礌锛堥殣钘忥級 -->
+    <audio id="remoteAudio" autoplay></audio>
+  </div>
+</template>
+
+<script>
+import sipService from "@/utils/sipService";
+
+export default {
+  props: {
+    phoneNumber: {
+      type: String,
+      default: "",
+    },
+  },
+  data() {
+    const randomNum = Math.floor(Math.random() * 11) + 1000; // 鍐呴儴瀹氫箟
+    return {
+      isCalling: false,
+      callStatus: "idle", // idle, calling, connected, ended
+      sipStatus: "鏈繛鎺�",
+      sipStatusClass: "status-disconnected",
+      sipConfig: {
+        wsUrl: "wss://192.168.10.124:7443",
+        sipUri: `${randomNum}` + "@192.168.10.124",
+        password: "Smartor@2023",
+        displayName: "Web 灏忛緳",
+      },
+    };
+  },
+  computed: {
+    callStatusText() {
+      const statusMap = {
+        idle: "鍑嗗灏辩华",
+        calling: "鍛煎彨涓�...",
+        connected: "閫氳瘽涓�",
+        ended: "閫氳瘽缁撴潫",
+      };
+      return statusMap[this.callStatus];
+    },
+    callStatusClass() {
+      return `status-${this.callStatus}`;
+    },
+    callButtonText() {
+      return this.isCalling ? "閫氳瘽涓�..." : "涓�閿懠鍙�";
+    },
+  },
+  mounted() {
+    sipService.init(this.sipConfig);
+    sipService.onStatusChange = (status) => {
+      this.sipStatus = status.text;
+      this.sipStatusClass = `status-${status.type}`;
+    };
+
+    // 鐩戝惉閫氳瘽鐘舵�佸彉鍖�
+    sipService.onCallStatusChange = (status) => {
+      this.callStatus = status.type;
+      this.isCalling = status.type === "calling" || status.type === "connected";
+
+      // 閫氱煡鐖剁粍浠堕�氳瘽鐘舵�佸彉鍖�
+      this.$emit("call-status-change", status);
+    };
+  },
+  methods: {
+    async startCall() {
+      if (!this.phoneNumber) {
+        this.$message.error("璇疯緭鍏ョ數璇濆彿鐮�");
+        return;
+      }
+
+      try {
+        this.callStatus = "calling";
+        this.isCalling = true;
+
+        await sipService.makeCall(this.phoneNumber);
+      } catch (error) {
+        console.error("鍛煎彨澶辫触:", error);
+        this.callStatus = "ended";
+        this.isCalling = false;
+        this.$message.error(`鍛煎彨澶辫触: ${error.message}`);
+      }
+    },
+
+    endCall() {
+      sipService.endCall();
+      this.callStatus = "ended";
+      this.isCalling = false;
+    },
+  },
+};
+</script>
+
+<style scoped>
+.call-container {
+  display: flex;
+  flex-direction: column;
+  gap: 10px;
+  max-width: 300px;
+  margin: 0 auto;
+  padding: 20px;
+  border: 1px solid #eee;
+  border-radius: 8px;
+}
+
+input {
+  padding: 8px;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+}
+
+.call-btn {
+  padding: 10px;
+  background-color: #4caf50;
+  color: white;
+  border: none;
+  border-radius: 4px;
+  cursor: pointer;
+}
+.call-status {
+  padding: 8px;
+  margin: 10px 0;
+  border-radius: 4px;
+  text-align: center;
+}
+
+.status-idle {
+  background-color: #f5f5f5;
+  color: #666;
+}
+
+.status-calling {
+  background-color: #fff8e1;
+  color: #ff8f00;
+}
+
+.status-connected {
+  background-color: #e8f5e9;
+  color: #2e7d32;
+}
+
+.status-ended {
+  background-color: #ffebee;
+  color: #c62828;
+}
+
+/* 鍘熸湁鏍峰紡淇濇寔涓嶅彉 */
+.call-container {
+  display: flex;
+  flex-direction: column;
+  gap: 10px;
+  max-width: 300px;
+  margin: 0 auto;
+  padding: 20px;
+  border: 1px solid #eee;
+  border-radius: 8px;
+}
+
+.call-btn {
+  padding: 10px;
+  background-color: #4caf50;
+  color: white;
+  border: none;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.call-btn:hover:not(:disabled) {
+  background-color: #45a049;
+}
+
+.call-btn:disabled {
+  background-color: #cccccc;
+  cursor: not-allowed;
+}
+
+.call-btn.calling {
+  background-color: #2196f3;
+}
+
+.end-call-btn {
+  padding: 10px;
+  background-color: #f44336;
+  color: white;
+  border: none;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.end-call-btn:hover {
+  background-color: #d32f2f;
+}
+
+.sip-status {
+  padding: 8px;
+  margin-bottom: 10px;
+  border-radius: 4px;
+  text-align: center;
+}
+
+.status-disconnected {
+  background-color: #ffebee;
+  color: #c62828;
+}
+
+.status-connecting {
+  background-color: #fff8e1;
+  color: #ff8f00;
+}
+
+.status-registered {
+  background-color: #e8f5e9;
+  color: #2e7d32;
+}
+
+.status-failed {
+  background-color: #ffebee;
+  color: #c62828;
+}
+.call-btn:hover {
+  background-color: #45a049;
+}
+
+.call-btn.calling {
+  background-color: #2196f3;
+}
+
+.end-call-btn {
+  padding: 10px;
+  background-color: #f44336;
+  color: white;
+  border: none;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.end-call-btn:hover {
+  background-color: #d32f2f;
+}
+
+.call-status {
+  margin-top: 10px;
+  font-size: 14px;
+  color: #666;
+}
+.sip-status {
+  padding: 8px;
+  margin-bottom: 10px;
+  border-radius: 4px;
+  text-align: center;
+}
+
+.status-disconnected {
+  background-color: #ffebee;
+  color: #c62828;
+}
+
+.status-connecting {
+  background-color: #fff8e1;
+  color: #ff8f00;
+}
+
+.status-registered {
+  background-color: #e8f5e9;
+  color: #2e7d32;
+}
+
+.status-failed {
+  background-color: #ffebee;
+  color: #c62828;
+}
+</style>
diff --git a/src/store/getters.js b/src/store/getters.js
index d5078b3..0b065bd 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -8,6 +8,7 @@
   token: (state) => state.user.token,
   avatar: (state) => state.user.avatar,
   name: (state) => state.user.name,
+  nickName: (state) => state.user.nickName,
   Id: (state) => state.user.Id,
   introduction: (state) => state.user.introduction,
   roles: (state) => state.user.roles,
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 524f4de..36c9b90 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -5,6 +5,7 @@
   state: {
     token: getToken(),
     name: '',
+    nickName:'',
     Id: '',
     avatar: '',
     hisUserId:'',
@@ -87,6 +88,9 @@
     SET_NAME: (state, name) => {
       state.name = name
     },
+    SET_nickNAME: (state, name) => {
+      state.nickName = name
+    },
     SET_Id: (state, Id) => {
       state.Id = Id
       console.log(state.Id,'user2');
@@ -140,11 +144,19 @@
           localStorage.setItem('deptCode', '01040201');
           }else if (orgid=='47246102433112211A2101') {
           localStorage.setItem('orgname', '缂欎簯鍘夸腑鍖诲尰闄�');
-          localStorage.setItem('ZuHuID', '1400360867068907520');
+          localStorage.setItem('ZuHuID', '1429338802177000002');
           localStorage.setItem('deptCode', '');
           }else if (orgid=='47240018433118111A2101') {
           localStorage.setItem('orgname', '榫欐硥甯備腑鍖诲尰闄�');
-          localStorage.setItem('ZuHuID', '1400360867068907520');
+          localStorage.setItem('ZuHuID', '1429338802177000003');
+          localStorage.setItem('deptCode', '');
+          }else if (orgid=='47243006833112611A2101') {
+          localStorage.setItem('orgname', '搴嗗厓鍘夸腑鍖诲尰闄�');
+          localStorage.setItem('ZuHuID', '1429338802177000004');
+          localStorage.setItem('deptCode', '');
+          }else if (orgid=='47234002X33112111A2101') {
+          localStorage.setItem('orgname', '闈掔敯鍘夸腑鍖诲尰闄�');
+          localStorage.setItem('ZuHuID', '1429338802177000005');
           localStorage.setItem('deptCode', '');
           }
           resolve()
@@ -168,6 +180,7 @@
             commit('SET_ROLES', ['ROLE_DEFAULT'])
           }
           commit('SET_NAME', user.userName)
+          commit('SET_nickNAME', user.nickName)
           commit('SET_Id', user.userId)
           commit('SET_hisUserId', user.hisUserId)
           commit('SET_leavehospitaldistrictcodes', user.belongWards)
diff --git a/src/utils/sipService-bd.js b/src/utils/sipService-bd.js
new file mode 100644
index 0000000..8318c1a
--- /dev/null
+++ b/src/utils/sipService-bd.js
@@ -0,0 +1,200 @@
+import JsSIP from "jssip";
+
+class SipService {
+  constructor() {
+    this.ua = null;
+    this.currentSession = null;
+    this.onStatusChange = null; // 鐘舵�佸彉鍖栧洖璋�
+    this.onCallStatusChange = null; // 鏂板閫氳瘽鐘舵�佸洖璋�
+  }
+
+  // 鍒濆鍖朣IP瀹㈡埛绔�
+  init(config) {
+    try {
+      this.updateStatus("connecting", "杩炴帴涓�...");
+
+      this.ua = new JsSIP.UA({
+        sockets: [new JsSIP.WebSocketInterface(config.wsUrl)],
+        uri: config.sipUri,
+        password: config.password,
+        display_name: config.displayName,
+        iceservers: [],
+        // realm: config.realm,
+        register: true,
+        session_expires: 180,
+        sessionTimersExpires: 300, // 璁剧疆 Session-Expires=120锛堝繀椤� >= Min-SE锛�
+        extraHeaders: [
+          "Min-SE: 120", // 鍙�夛細鏄惧紡鍛婅瘔鏈嶅姟鍣ㄤ綘鏀寔鐨勬渶灏忓��
+        ],
+        register_expires: 300, // 娉ㄥ唽鏈夋晥鏈�(绉�)
+        connection_recovery_min_interval: 2, // 鏈�灏忛噸杩為棿闅�
+        connection_recovery_max_interval: 30, // 鏈�澶ч噸杩為棿闅�
+      });
+
+      this.ua.start();
+
+      // 娉ㄥ唽浜嬩欢鐩戝惉
+      this.ua.on("registered", () => {
+        this.updateStatus("registered", "宸叉敞鍐�");
+      });
+
+      this.ua.on("registrationFailed", (e) => {
+        this.updateStatus("failed", `娉ㄥ唽澶辫触: ${e.cause}`);
+      });
+
+      this.ua.on("disconnected", () => {
+        this.updateStatus("disconnected", "杩炴帴鏂紑");
+      });
+
+      this.ua.on("connected", () => {
+        this.updateStatus("connecting", "閲嶆柊杩炴帴涓�...");
+      });
+
+      // 鐩戝惉鏉ョ數
+      this.ua.on("newRTCSession", (data) => {
+        this.handleIncomingCall(data.session);
+      });
+    } catch (error) {
+      this.updateStatus("failed", `鍒濆鍖栧け璐�: ${error.message}`);
+      console.error("SIP鍒濆鍖栧け璐�:", error);
+    }
+  }
+  handleIncomingCall(session) {
+    if (session.direction === "incoming") {
+      console.log("鏉ョ數:", session.remote_identity.uri.toString());
+      // 鍙互鍦ㄨ繖閲岃Е鍙� UI 閫氱煡
+      if (this.onIncomingCall) {
+        this.onIncomingCall(session);
+      }
+    }
+  }
+
+  // 鏇存柊鐘舵�佸苟閫氱煡UI
+  updateStatus(type, text) {
+    console.log(`SIP鐘舵�佹洿鏂�: ${type} - ${text}`);
+    if (this.onStatusChange) {
+      this.onStatusChange({ type, text });
+    }
+  }
+
+  // 涓�閿嫧鍙� - 澧炲姞娉ㄥ唽鐘舵�佹鏌�
+  makeCall(targetNumber) {
+    if (!this.ua) {
+      throw new Error("SIP瀹㈡埛绔湭鍒濆鍖�");
+    }
+
+    if (!this.ua.isRegistered()) {
+      throw new Error("SIP鏈敞鍐岋紝鏃犳硶鍛煎彨");
+    }
+
+    const options = {
+      sessionTimers: true,
+      sessionTimersExpires: 300,
+      extraHeaders: [
+        "Min-SE: 120",
+        "Route: <sip:@192.168.100.6>",
+        "Accept: application/sdp",
+        "Supported: replaces, timer",
+        "Allow: INVITE, ACK, BYE, CANCEL, OPTIONS",
+      ],
+      eventHandlers: {
+        progress: (e) => {
+          this.updateCallStatus("calling", "鍛煎彨涓�...");
+        },
+        failed: (e) => {
+          this.updateCallStatus("ended", `鍛煎彨澶辫触: ${e.cause}`);
+        },
+        ended: (e) => {
+          this.updateCallStatus("ended", "閫氳瘽缁撴潫");
+        },
+        confirmed: (e) => {
+          this.updateCallStatus("connected", "閫氳瘽宸叉帴閫�");
+        },
+      },
+      mediaConstraints: {
+        audio: true,
+        video: false,
+      },
+      rtcOfferConstraints: {
+        offerToReceiveAudio: 1,
+        offerToReceiveVideo: 0,
+        mandatory: {
+          OfferToReceiveAudio: true,
+          OfferToReceiveVideo: false,
+        },
+      },
+      pcConfig: {
+        iceServers: [{ urls: "stun:stun.l.google.com:19302" }],
+        iceTransportPolicy: "all",
+        bundlePolicy: "balanced",
+        rtcpMuxPolicy: "require",
+        codecs: {
+          audio: [
+            { name: "PCMU", clockRate: 8000, payloadType: 0 },
+            { name: "PCMA", clockRate: 8000, payloadType: 8 },
+          ],
+          video: [],
+        },
+      },
+    };
+
+    this.currentSession = this.ua.call(
+      `sip:${targetNumber}@192.168.100.6`,
+      options
+    );
+    // 鍦ㄤ細璇濆垱寤哄悗淇敼 SDP
+    this.currentSession.on("peerconnection", (pc) => {
+       this.updateCallStatus('calling', '鍛煎彨涓�...');
+      pc.createOffer = (offerOptions) => {
+        return RTCPeerConnection.prototype.createOffer
+          .call(pc, offerOptions)
+          .then((offer) => {
+            const modifiedSdp = offer.sdp
+              .replace(/c=IN IP4 192\.168\.100\.10/g, "c=IN IP4 192.168.100.6")
+              .replace(/m=audio \d+ RTP\/AVP.*/, "m=audio 7078 RTP/AVP 0 8");
+            return new RTCSessionDescription({
+              type: "offer",
+              sdp: modifiedSdp,
+            });
+          });
+      };
+    });
+    this.currentSession.on('failed', (e) => {
+        this.updateCallStatus('failed', `鍛煎彨澶辫触2: ${e.cause}`);
+      });
+
+      this.currentSession.on('ended', () => {
+        this.updateCallStatus('ended', '閫氳瘽宸茬粨鏉�');
+      });
+
+      this.currentSession.on('confirmed', () => {
+        this.updateCallStatus('connected', '閫氳瘽宸叉帴閫�');
+      });
+    this.setupAudio(this.currentSession);
+  }
+  setupAudio(session) {
+    session.connection.addEventListener("addstream", (e) => {
+      const audioElement = document.getElementById("remoteAudio");
+      if (audioElement) {
+        audioElement.srcObject = e.stream;
+      }
+    });
+  }
+  // 鎸傛柇褰撳墠閫氳瘽
+  endCall() {
+  if (this.currentSession) {
+      this.currentSession.terminate();
+      this.updateCallStatus('ended', '閫氳瘽宸茬粨鏉�');
+      this.currentSession = null;
+    }
+  }
+  // 鏂板鏂规硶锛氭洿鏂伴�氳瘽鐘舵��
+  updateCallStatus(type, text) {
+    console.log(`閫氳瘽鐘舵�佹洿鏂�: ${type} - ${text}`);
+    if (this.onCallStatusChange) {
+      this.onCallStatusChange({ type, text });
+    }
+  }
+}
+
+export default new SipService();
diff --git a/src/utils/sipService.js b/src/utils/sipService.js
new file mode 100644
index 0000000..9088bad
--- /dev/null
+++ b/src/utils/sipService.js
@@ -0,0 +1,216 @@
+import JsSIP from "jssip";
+
+class SipService {
+  constructor() {
+    this.ua = null;
+    this.currentSession = null;
+    this.onStatusChange = null;
+    this.onCallStatusChange = null;
+    this.onIncomingCall = null;
+  }
+
+  init(config) {
+    try {
+      this.updateStatus("connecting", "杩炴帴涓�;...");
+
+      this.ua = new JsSIP.UA({
+        sockets: [new JsSIP.WebSocketInterface(config.wsUrl)],
+        uri: config.sipUri,
+        password: config.password,
+        display_name: config.displayName,
+        iceServers: [],
+        register: true,
+        sessionExpires: 1800,
+        minSessionExpires: 90,
+        register_expires: 300,
+      });
+
+      this.ua.start();
+
+      // 浜嬩欢鐩戝惉
+      this.ua.on("registered", () =>
+        this.updateStatus("registered", "宸叉敞鍐�56")
+      );
+      this.ua.on("registrationFailed", (e) =>
+        this.updateStatus("failed", `娉ㄥ唽澶辫触11: ${e.cause}`)
+      );
+      this.ua.on("disconnected", () =>
+        this.updateStatus("disconnected", "杩炴帴鏂紑")
+      );
+      this.ua.on("connected", () =>
+        this.updateStatus("connecting", "閲嶆柊杩炴帴涓�...")
+      );
+      this.ua.on("newRTCSession", (data) =>
+        this.handleIncomingCall(data.session)
+      );
+    } catch (error) {
+      this.updateStatus("failed", `鍒濆鍖栧け璐�: ${error.message}`);
+      console.error("SIP鍒濆鍖栧け璐�:", error);
+      throw error;
+    }
+  }
+
+  makeCall(targetNumber) {
+    return new Promise((resolve, reject) => {
+      try {
+        if (!this.ua) {
+          throw new Error("SIP瀹㈡埛绔湭鍒濆鍖�");
+        }
+
+        if (!this.ua.isRegistered()) {
+          throw new Error("SIP鏈敞鍐岋紝鏃犳硶鍛煎彨");
+        }
+
+        const options = {
+          sessionTimers: true, // 鍚敤浼氳瘽璁℃椂鍣�
+          sessionTimersExpires: 90,
+          extraHeaders: ["Accept: application/sdp"],
+          mediaConstraints: { audio: true, video: false },
+          rtcOfferConstraints: {
+            offerToReceiveAudio: true,
+            offerToReceiveVideo: false,
+          },
+          eventHandlers: {
+            progress: () => this.updateCallStatus("calling", "鍛煎彨涓�..."),
+            failed: (e) => {
+              this.handleCallFailure(e, reject);
+            },
+            ended: () => this.updateCallStatus("ended", "閫氳瘽缁撴潫"),
+            confirmed: () => {
+              this.updateCallStatus("connected", "閫氳瘽宸叉帴閫�");
+              resolve();
+            },
+          },
+        };
+
+        this.currentSession = this.ua.call(
+          `sip:${targetNumber}@192.168.10.124`,
+          options
+        );
+
+        this.setupPeerConnection(this.currentSession);
+        this.setupAudio(this.currentSession);
+      } catch (error) {
+        this.updateCallStatus("failed", `鍛煎彨澶辫触22: ${error.message}`);
+        reject(error);
+      }
+    });
+  }
+
+  setupPeerConnection(session) {
+    session.on("peerconnection", (pc) => {
+      const originalCreateOffer = pc.createOffer.bind(pc);
+
+      pc.createOffer = async (offerOptions) => {
+        try {
+          const offer = await originalCreateOffer(offerOptions);
+          return this.normalizeSDP(offer);
+        } catch (error) {
+          console.error("鍒涘缓Offer澶辫触:", error);
+          throw error;
+        }
+      };
+    });
+  }
+
+  normalizeSDP(offer) {
+    let sdp = offer.sdp;
+
+    // 鏍囧噯鍖朣DP
+    sdp = sdp.replace(/c=IN IP4.*\r\n/, "c=IN IP4 0.0.0.0\r\n");
+    sdp = sdp.replace(
+      /m=audio \d+.*\r\n/,
+      "m=audio 9 UDP/TLS/RTP/SAVPF 0 8\r\n"
+    );
+
+    // 纭繚鍖呭惈鍩烘湰缂栬В鐮佸櫒
+    if (!sdp.includes("PCMU/8000")) sdp += "a=rtpmap:0 PCMU/8000\r\n";
+    if (!sdp.includes("PCMA/8000")) sdp += "a=rtpmap:8 PCMA/8000\r\n";
+
+    // 娣诲姞蹇呰灞炴��
+    sdp += "a=rtcp-mux\r\n";
+    sdp += "a=sendrecv\r\n";
+
+    console.log("鏍囧噯鍖栧悗鐨凷DP:", sdp);
+    return new RTCSessionDescription({
+      type: offer.type,
+      sdp: sdp,
+    });
+  }
+
+  handleCallFailure(e, reject) {
+    if (e.response?.status_code === 422) {
+      const serverMinSE = e.response.headers["Min-SE"]?.[0]?.raw || "鏈煡";
+      console.error(`鏈嶅姟鍣ㄨ姹� Min-SE 鈮� ${serverMinSE}锛屽綋鍓嶈缃�: 120`);
+    }
+    console.error("鍛煎彨澶辫触璇︽儏:", {
+      cause: e.cause,
+      message: e.message,
+      response: e.response && {
+        status: e.response.status_code,
+        reason: e.response.reason_phrase,
+      },
+    });
+
+    let errorMessage = "鍛煎彨澶辫触";
+    switch (e.cause) {
+      case "Incompatible SDP":
+        errorMessage = "濯掍綋鍗忓晢澶辫触锛岃妫�鏌ョ紪瑙g爜鍣ㄩ厤缃�";
+        break;
+      case "488":
+      case "606":
+        errorMessage = "瀵规柟璁惧涓嶆敮鎸佸綋鍓嶅獟浣撻厤缃�";
+        break;
+      case "422":
+        errorMessage = "浼氳瘽鍙傛暟涓嶆弧瓒虫湇鍔″櫒瑕佹眰";
+        break;
+      default:
+        errorMessage = `鍛煎彨澶辫触: ${e.cause || e.message}`;
+    }
+
+    this.updateCallStatus("failed55", errorMessage);
+    reject(new Error(errorMessage));
+  }
+
+  setupAudio(session) {
+    session.connection.addEventListener("addstream", (e) => {
+      const audioElement = document.getElementById("remoteAudio");
+      if (audioElement) {
+        audioElement.srcObject = e.stream;
+      }
+    });
+  }
+
+  endCall() {
+    if (this.currentSession) {
+      this.currentSession.terminate();
+      this.updateCallStatus("ended", "閫氳瘽宸茬粨鏉�");
+      this.currentSession = null;
+    }
+  }
+
+  updateStatus(type, text) {
+    console.log(`SIP鐘舵�佹洿鏂�: ${type} - ${text}`);
+    if (this.onStatusChange) {
+      this.onStatusChange({ type, text });
+    }
+  }
+
+  updateCallStatus(type, text) {
+    console.log(`閫氳瘽鐘舵�佹洿鏂�: ${type} - ${text}`);
+    if (this.onCallStatusChange) {
+      this.onCallStatusChange({ type, text });
+    }
+  }
+
+  handleIncomingCall(session) {
+    if (session.direction === "incoming") {
+      console.log("鏉ョ數:", session.remote_identity.uri.toString());
+      if (this.onIncomingCall) {
+        this.onIncomingCall(session);
+      }
+    }
+  }
+}
+
+export default new SipService();
diff --git a/src/views/followvisit/SpecificDisease/index.vue b/src/views/followvisit/SpecificDisease/index.vue
index feb2e2b..424d6a5 100644
--- a/src/views/followvisit/SpecificDisease/index.vue
+++ b/src/views/followvisit/SpecificDisease/index.vue
@@ -842,10 +842,10 @@
           name: "寰呭彂閫�",
           value: 0,
         },
-        {
-          name: "宸插彂閫�",
-          value: 0,
-        },
+        // {
+        //   name: "宸插彂閫�",
+        //   value: 0,
+        // },
 
         // {
         //   name: "宸插彂閫佹湭棰嗗彇",
@@ -986,7 +986,7 @@
           this.ycvalue = response.rows[0].yc;
           this.cardlist[2].value = response.rows[0].fssb;
           this.cardlist[3].value = response.rows[0].dsf;
-          this.cardlist[4].value = response.rows[0].yfs2;
+          // this.cardlist[4].value = response.rows[0].yfs2;
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
diff --git a/src/views/followvisit/again/index.vue b/src/views/followvisit/again/index.vue
index ba0cee9..bccd382 100644
--- a/src/views/followvisit/again/index.vue
+++ b/src/views/followvisit/again/index.vue
@@ -644,7 +644,17 @@
             </el-form-item>
           </el-col>
         </el-row>
-
+<el-row >
+          <el-col :span="8">
+            <el-form-item label="杩囨护鍖荤敓" width="100" prop="filterDrname">
+              <el-input
+                v-model="form.filterDrname"
+                placeholder="璇疯緭鍏ュ尰鐢熷鍚�"
+                maxlength="30"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-row>
           <el-col :span="24">
             <el-form-item label="杩囨护鍘熷洜">
@@ -929,10 +939,10 @@
           name: "寰呴殢璁�",
           value: 0,
         },
-        {
-          name: "宸插彂閫�",
-          value: 0,
-        },
+        // {
+        //   name: "宸插彂閫�",
+        //   value: 0,
+        // },
 
         // {
         //   name: "琛ㄥ崟宸插彂閫�",
@@ -1157,7 +1167,7 @@
           this.ycvalue = response.rows[0].yc;
           this.cardlist[2].value = response.rows[0].fssb;
           this.cardlist[3].value = response.rows[0].dsf;
-          this.cardlist[4].value = response.rows[0].yfs2;
+          // this.cardlist[4].value = response.rows[0].yfs2;
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
@@ -1237,7 +1247,7 @@
           this.ycvalue = response.rows[0].yc;
           this.cardlist[3].value = response.rows[0].fssb;
           this.cardlist[4].value = response.rows[0].dsf;
-          this.cardlist[5].value = response.rows[0].yfs2;
+          // this.cardlist[5].value = response.rows[0].yfs2;
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
@@ -1590,6 +1600,7 @@
     handleUpdate(row) {
       particularpatient(row.patid).then((response) => {
         this.form = response.data;
+        this.form.filterDrname = store.getters.nickName;
       });
       this.amendtag = true;
       this.Labelchange = true;
diff --git a/src/views/followvisit/discharge/outpatientService.vue b/src/views/followvisit/discharge/outpatientService.vue
new file mode 100644
index 0000000..0601da8
--- /dev/null
+++ b/src/views/followvisit/discharge/outpatientService.vue
@@ -0,0 +1,1808 @@
+<template>
+  <div class="app-container">
+    <div class="leftvlue" style="margin-bottom: 20px">
+      <el-row :gutter="10">
+        <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index">
+          <el-card
+            shadow="hover"
+            :body-style="item.router ? ' cursor: pointer' : 'cursor: default'"
+          >
+            <div style="padding: 8px" @click="$router.push(item.router)">
+              <span>{{ item.name }}</span>
+              <div
+                style="
+                  text-align: center;
+                  font-size: 18px;
+                  margin-top: 10px;
+                  font-weight: 600;
+                "
+              >
+                {{ item.value ? item.value : 0 }}
+              </div>
+            </div>
+          </el-card>
+        </el-col>
+        <el-col :span="2.5">
+          <div class="ysfleftvlue">
+            <el-card shadow="hover">
+              <div style="padding: 8px">
+                <span>琛ㄥ崟宸插彂閫�</span>
+                <div
+                  style="
+                    text-align: center;
+                    font-size: 18px;
+                    margin-top: 10px;
+                    font-weight: 600;
+                  "
+                >
+                  {{ yfsvalue }}
+                </div>
+              </div>
+            </el-card>
+          </div>
+        </el-col>
+        <el-col :span="2.5">
+          <div class="errleftvlue">
+            <el-card shadow="hover">
+              <div style="padding: 8px">
+                <span>寮傚父</span>
+                <div
+                  style="
+                    text-align: center;
+                    font-size: 18px;
+                    margin-top: 10px;
+                    font-weight: 600;
+                  "
+                >
+                  {{ ycvalue }}
+                </div>
+              </div>
+            </el-card>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    <el-row :gutter="20">
+      <!--鐢ㄦ埛鏁版嵁-->
+      <el-form
+        :model="topqueryParams"
+        ref="queryForm"
+        size="small"
+        :inline="true"
+        v-show="showSearch"
+        label-width="98px"
+      >
+        <el-form-item label="浠诲姟鍚嶇О">
+          <el-input
+            v-model="topqueryParams.taskName"
+            placeholder="璇烽�夋嫨浠诲姟鍚嶇О"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="灏辫瘖鏃堕棿">
+          <el-date-picker
+            v-model="dateRange"
+            style="width: 240px"
+            value-format="yyyy-MM-dd"
+            type="daterange"
+            range-separator="-"
+            start-placeholder="寮�濮嬫棩鏈�"
+            end-placeholder="缁撴潫鏃ユ湡"
+          ></el-date-picker>
+        </el-form-item>
+        <el-form-item label="搴旈殢璁挎椂闂�">
+          <el-date-picker
+            v-model="dateRangefs"
+            style="width: 240px"
+            value-format="yyyy-MM-dd"
+            type="daterange"
+            range-separator="-"
+            start-placeholder="寮�濮嬫棩鏈�"
+            end-placeholder="缁撴潫鏃ユ湡"
+          ></el-date-picker>
+        </el-form-item>
+
+        <el-form-item label="鎮h�呭鍚�" prop="sendname">
+          <el-input
+            v-model="topqueryParams.sendname"
+            placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="璇婃柇鍚嶇О" prop="leavediagname">
+          <el-input
+            v-model="topqueryParams.leavediagname"
+            placeholder="璇疯緭鍏ヨ瘖鏂悕绉�"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="闅忚浜哄憳" prop="updateBy">
+          <el-input
+            v-model="topqueryParams.updateBy"
+            placeholder="璇疯緭鍏ラ殢璁夸汉鍛�"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="鎮h�呰寖鍥�" prop="status">
+          <el-cascader
+            v-model="topqueryParams.scopetype"
+            placeholder="榛樿鍏ㄩ儴"
+            :options="sourcetype"
+            :props="{ expandTrigger: 'hover' }"
+            @change="handleChange"
+          ></el-cascader>
+        </el-form-item>
+
+        <el-form-item label="浠诲姟鐘舵��" prop="status">
+          <el-select v-model="topqueryParams.sendstate" placeholder="璇烽�夋嫨">
+            <el-option
+              v-for="item in topicoptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鎺掑簭鏂瑰紡" prop="status">
+          <el-select v-model="topqueryParams.sort" placeholder="璇烽�夋嫨">
+            <el-option
+              v-for="item in topicoptionssort"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            size="medium"
+            @click="handleQuery(1)"
+            >鎼滅储</el-button
+          >
+          <el-button icon="el-icon-refresh" size="medium" @click="resetQuery"
+            >閲嶇疆</el-button
+          >
+        </el-form-item>
+      </el-form>
+      <el-divider></el-divider>
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <div class="documentf">
+            <div class="document">
+              <el-button
+                type="warning"
+                plain
+                icon="el-icon-upload2"
+                size="medium"
+                @click="handleExport"
+                >瀵煎嚭</el-button
+              >
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="primary"
+            plain
+            icon="el-icon-plus"
+            size="medium"
+            @click="handleAdd"
+            >鏂板</el-button
+          >
+        </el-col>
+
+        <el-col :span="1.5">
+          <div class="documentf">
+            <div class="document">
+              <el-button
+                type="warning"
+                plain
+                icon="el-icon-warning-outline"
+                size="medium"
+                @click="toleadExport(1)"
+                >鎵ц澶辫触</el-button
+              >
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="1.5">
+          <div class="documentf">
+            <div class="document">
+              <el-button
+                type="danger"
+                plain
+                icon="el-icon-warning"
+                size="medium"
+                @click="toleadExport(2)"
+                >缁撴灉寮傚父</el-button
+              >
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="1.5">
+          <div class="documentf">
+            <div class="document">
+              <el-button
+                type="success"
+                plain
+                size="medium"
+                @click="buidegetTasklist()"
+                >寰呭姙鏈嶅姟</el-button
+              >
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="1.5">
+          <div class="documentf">
+            <div class="document">
+              <el-button
+                type="primary"
+                plain
+                size="medium"
+                @click="affiliation()"
+                >鏈汉鎵�灞炴湇鍔�</el-button
+              >
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="1.5">
+          <div class="documentf">
+            <div class="document">
+              <el-button type="success" size="medium" @click="onthatday()"
+                >褰撴棩鏈嶅姟</el-button
+              >
+            </div>
+          </div>
+        </el-col>
+      </el-row>
+      <el-table
+        v-loading="loading"
+        :data="userList"
+        :row-class-name="tableRowClassName"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column type="selection" width="50" align="center" />
+        <el-table-column
+          label="浠诲姟鍚嶇О"
+          fixed
+          width="150"
+          show-overflow-tooltip
+          align="center"
+          key="taskName"
+          prop="taskName"
+        />
+        <!-- <el-table-column label="搴忓彿" fixed align="center" key="id" prop="id" /> -->
+        <el-table-column
+          label="濮撳悕"
+          width="100"
+          align="center"
+          key="sendname"
+          prop="sendname"
+        >
+          <template slot-scope="scope">
+            <el-button
+              size="medium"
+              type="text"
+              @click="
+                gettoken360(scope.row.sfzh, scope.row.drcode, scope.row.drname)
+              "
+              ><span class="button-textsc">{{
+                scope.row.sendname
+              }}</span></el-button
+            >
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="浠诲姟鐘舵��"
+          align="center"
+          key="sendstate"
+          prop="sendstate"
+          width="120"
+        >
+          <template slot-scope="scope">
+            <el-tooltip
+              class="item"
+              effect="dark"
+              :content="scope.row.remark"
+              placement="top-start"
+            >
+              <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>
+            </el-tooltip>
+          </template>
+        </el-table-column>
+        <!-- <el-table-column
+          label="浠诲姟寮傚父璇存槑"
+          width="120"
+          align="center"
+          key="remark"
+          prop="remark" -->
+        />
+
+        <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="闅忚瀹屾垚鏃堕棿"
+          sortable
+          align="center"
+          prop="finishtime"
+          width="160"
+        >
+          <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.finishtime) }}</span>
+          </template>
+        </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="搴旈殢璁挎棩鏈�"
+          width="200"
+          align="center"
+          key="longSendTime"
+          prop="longSendTime"
+        >
+          <template slot-scope="scope">
+            <span>{{ formatTime(scope.row.longSendTime) }}</span>
+          </template></el-table-column
+        >
+        <el-table-column
+          label="涓绘不鍖荤敓"
+          width="120"
+          align="center"
+          key="drname"
+          prop="drname"
+        />
+        <el-table-column
+          label="闅忚浜哄憳"
+          align="center"
+          key="updateBy"
+          prop="updateBy"
+          width="120"
+        />
+        <el-table-column
+          label="鍑洪櫌澶╂暟"
+          width="120"
+          align="center"
+          key="endDay"
+          prop="endDay"
+        >
+          <template slot-scope="scope">
+            <span>{{ scope.row.endDay ? scope.row.endDay + "澶�" : "" }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="韬唤璇佸彿鐮�"
+          width="200"
+          align="center"
+          key="sfzh"
+          prop="sfzh"
+        />
+        <el-table-column
+          label="鑱旂郴鐢佃瘽"
+          width="200"
+          align="center"
+          key="phone"
+          prop="phone"
+        />
+        <el-table-column
+          label="璐d换鎶ゅ+"
+          width="120"
+          align="center"
+          key="nurseName"
+          prop="nurseName"
+        />
+
+        <!-- <el-table-column
+          label="鐥呭巻鍙�"
+          align="center"
+          sortable
+          key="medicalRecordNo"
+          prop="medicalRecordNo"
+          width="120"
+        /> -->
+
+        <!-- <el-table-column label="骞撮緞" align="center" key="age" prop="age" /> -->
+        <!-- <el-table-column label="鎬у埆"width="100" align="center" key="sex" prop="sex" /> -->
+        <!-- <el-table-column label="搴婂彿" align="center" key="badNo" prop="badNo" /> -->
+        <el-table-column
+          label="绉戝"
+          align="center"
+          key="deptname"
+          prop="deptname"
+          width="120"
+        >
+        </el-table-column>
+        <el-table-column
+          label="鐥呭尯"
+          align="center"
+          key="leavehospitaldistrictname"
+          prop="leavehospitaldistrictname"
+          width="120"
+        >
+        </el-table-column>
+
+        <el-table-column
+          label="璇婃柇鍚嶇О"
+          align="center"
+          key="leavediagname"
+          prop="leavediagname"
+          width="120"
+          :show-overflow-tooltip="true"
+        >
+        </el-table-column>
+
+        <el-table-column
+          label="闂ㄨ瘖闅忚妯℃澘鍚嶇О"
+          align="center"
+          key="templatename"
+          prop="templatename"
+          width="200"
+        />
+        <el-table-column
+          label="浠诲姟鎵ц鏂瑰紡"
+          align="center"
+          key="preachform"
+          prop="preachform"
+          width="160"
+          :show-overflow-tooltip="true"
+        >
+          <template slot-scope="scope">
+            <span v-for="item in scope.row.preachform">{{ item }}銆� </span>
+          </template>
+        </el-table-column>
+        <!-- <el-table-column
+          label="浠诲姟鍙戦�佹祦绋�"
+          align="center"
+          key="serviceSubtaskRecordList"
+          prop="serviceSubtaskRecordList"
+          width="160"
+          :show-overflow-tooltip="true"
+        >
+          <template slot-scope="scope">
+            <span v-for="item in scope.row.serviceSubtaskRecordList"
+              >{{ item.remark }}銆�
+            </span>
+          </template>
+        </el-table-column> -->
+        <el-table-column
+          label="浠诲姟缁撴灉璇存槑"
+          width="220"
+          align="center"
+          key="remark"
+          prop="remark"
+        >
+          <template slot-scope="scope" v-if="scope.row.remark">
+            <el-tooltip
+              :content="scope.row.remark"
+              placement="top"
+              effect="dark"
+            >
+              <el-tag
+                type="warning"
+                v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4"
+                >{{ scope.row.remark }}</el-tag
+              >
+              <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
+            </el-tooltip>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="鎿嶄綔"
+          align="center"
+          fixed="right"
+          width="300"
+          class-name="small-padding fixed-width"
+        >
+          <template slot-scope="scope">
+            <!-- <el-tooltip
+              class="item"
+              effect="dark"
+              content="鍐嶆闅忚"
+              placement="top"
+            >
+              <el-button
+                size="medium"
+                type="text"
+                v-if="scope.row.isVisitAgain!=2"
+                @click="followupvisit(scope.row)"
+                ><span class="button-bb"
+                  ><i class="el-icon-s-promotion"></i>鍐嶆闅忚</span
+                ></el-button
+              >
+            </el-tooltip>
+            <el-tooltip
+              v-if="scope.row.sendstate == 1 || scope.row.sendstate == 2"
+              class="item"
+              effect="dark"
+              content="鏆傚仠鏈嶅姟"
+              placement="top"
+            >
+              <el-button
+                size="medium"
+                type="text"
+                @click="handlestop(scope.row)"
+                v-hasPermi="['system:user:edit']"
+                ><span class="button-sc"
+                  ><i class="el-icon-remove-outline"></i>鏆傚仠鏈嶅姟</span
+                ></el-button
+              >
+            </el-tooltip> -->
+            <el-button size="medium" type="text" @click="Seedetails(scope.row)"
+              ><span class="button-zx"
+                ><i class="el-icon-s-order"></i>鏌ョ湅璇︽儏</span
+              ></el-button
+            >
+            <el-button
+              size="medium"
+              type="text"
+              @click="handleUpdate(scope.row)"
+              ><span class="button-textxga"
+                ><i class="el-icon-edit"></i>鎮h�呰繃婊�</span
+              ></el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination
+        v-show="total > 0"
+        :total="total"
+        :page.sync="topqueryParams.pageNum"
+        :limit.sync="topqueryParams.pageSize"
+        @pagination="getList"
+      />
+    </el-row>
+    <!-- 娣诲姞鎴栦慨鏀瑰奖鍍忛殢璁垮璇濇 -->
+    <el-dialog
+      :title="amendtag ? '淇敼鎮h�呬俊鎭�' : '鏂板鎮h��'"
+      :visible.sync="Labelchange"
+      width="900px"
+    >
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-row>
+          <el-col :span="8">
+            <el-form-item label="濮撳悕" width="100" prop="name">
+              <el-input
+                v-model="form.name"
+                placeholder="璇疯緭鍏ュ鍚�"
+                maxlength="30"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鎬у埆" width="100" prop="sex">
+              <el-select v-model="form.sex" placeholder="璇烽�夋嫨鎬у埆">
+                <el-option
+                  v-for="dict in sextype"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="骞撮緞" prop="age">
+              <el-input
+                v-model="form.age"
+                placeholder="璇疯緭鍏ュ勾榫�"
+                maxlength="30"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="杩囨护鍘熷洜">
+              <el-input
+                v-model="form.notrequiredreason"
+                type="textarea"
+                placeholder="璇疯緭鍏ヨ繃婊ゅ師鍥�"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+    <!-- 淇敼鍙戦�佹椂闂村璇濇 -->
+    <el-dialog
+      title="鍙戦�佹椂闂磋缃�"
+      :visible.sync="modificationVisible"
+      width="45%"
+    >
+      <div style="margin-bottom: 20px; color: red">
+        缁熶竴淇敼褰撳ぉ鏈彂閫佺殑浠诲姟鏃堕棿
+      </div>
+
+      <el-form
+        :model="ruleForm"
+        :rules="rules"
+        ref="ruleForm"
+        label-width="120px"
+        class="demo-ruleForm"
+      >
+        <el-form-item label="鍙戦�佹棩鏈�">
+          <el-date-picker
+            v-model="ruleForm.value1"
+            type="date"
+            placeholder="閫夋嫨鏃ユ湡"
+          >
+          </el-date-picker>
+        </el-form-item>
+
+        <el-form-item label="鏃堕棿娈�" prop="type">
+          <el-checkbox-group v-model="ruleForm.type">
+            <el-checkbox label="涓婂崍" name="type"></el-checkbox>
+            <el-checkbox label="涓嬪崍" name="type"></el-checkbox>
+            <el-checkbox label="鏅氫笂" name="type"></el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <el-form-item label="涓婂崍鏃堕棿鍖洪棿" required>
+          <el-time-picker
+            is-range
+            v-model="ruleForm.value2"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫椂闂�"
+            end-placeholder="缁撴潫鏃堕棿"
+            placeholder="閫夋嫨鏃堕棿鑼冨洿"
+          >
+          </el-time-picker>
+        </el-form-item>
+        <el-form-item label="涓嬪崍鏃堕棿鍖洪棿" required>
+          <el-time-picker
+            is-range
+            v-model="ruleForm.value3"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫椂闂�"
+            end-placeholder="缁撴潫鏃堕棿"
+            placeholder="閫夋嫨鏃堕棿鑼冨洿"
+          >
+          </el-time-picker>
+        </el-form-item>
+        <el-form-item label="鏅氫笂鏃堕棿鍖洪棿" required>
+          <el-time-picker
+            is-range
+            v-model="ruleForm.value4"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫椂闂�"
+            end-placeholder="缁撴潫鏃堕棿"
+            placeholder="閫夋嫨鏃堕棿鑼冨洿"
+          >
+          </el-time-picker>
+        </el-form-item>
+      </el-form>
+
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="modificationVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="modificationVisible = false"
+          >纭� 瀹�</el-button
+        >
+      </span>
+    </el-dialog>
+    <!-- 鍐嶆闅忚 -->
+    <el-dialog title="鎮h�呭啀娆¢殢璁�" :visible.sync="dialogFormVisible">
+      <el-form ref="zcform" :rules="zcrules" :model="zcform" label-width="80px">
+        <el-form-item label="浠诲姟鍚嶇О">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="zcform.taskName"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="鎮h�呭悕绉�">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="zcform.sendname"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="骞撮緞">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="zcform.age"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="绉戝">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="zcform.deptname"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="鐥呭尯">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="zcform.leavehospitaldistrictname"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="闅忚鏂瑰紡" prop="resource">
+          <el-radio-group v-model="zcform.resource">
+            <el-radio label="1">鏈梾鍖洪殢璁�</el-radio>
+            <el-radio label="2">闅忚涓績闅忚</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <!-- <el-form-item label="鍗冲埢鍙戦��">
+          <el-switch v-model="zcform.delivery"></el-switch>
+        </el-form-item> -->
+        <el-form-item label="灏辫瘖鏃堕棿">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="zcform.endtime"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="闅忚瀹屾垚鏃堕棿" prop="date1">
+          <el-date-picker
+            type="date"
+            placeholder="閫夋嫨鏃ユ湡"
+            v-model="zcform.date1"
+            style="width: 100%"
+          ></el-date-picker>
+        </el-form-item>
+        <el-form-item label="闅忚璁板綍">
+          <el-input type="textarea" v-model="zcform.remark"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="setupsubtask">纭鍒涘缓鏈嶅姟</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  delUser,
+  addUser,
+  updateUser,
+  resetUserPwd,
+  changeUserStatus,
+} from "@/api/system/user";
+import {
+  getTaskservelist,
+  buidegetTasklist,
+  addserviceSubtask,
+  query360PatInfo,
+} from "@/api/AiCentre/index";
+import { alterpatient, particularpatient } from "@/api/patient/homepage";
+import Treeselect from "@riophae/vue-treeselect";
+import store from "@/store";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
+export default {
+  name: "Discharge",
+  dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
+  components: { Treeselect },
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      dialogFormVisible: false,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鐢ㄦ埛琛ㄦ牸鏁版嵁
+      userList: null,
+      // 寮瑰嚭灞傛爣棰�
+      title: "鏂板褰卞儚闅忚",
+      // 鏄惁鏄剧ず淇敼銆佹坊鍔犲脊鍑哄眰
+      addalteropen: false,
+      // 淇敼鍙戦�佹椂闂村璇濇
+      modificationVisible: false,
+      // 閮ㄩ棬鍚嶇О
+      deptName: undefined,
+      // 榛樿瀵嗙爜
+      initPassword: undefined,
+      // 鏃ユ湡鑼冨洿
+      dateRange: [],
+      dateRangefs: [],
+      // 宀椾綅閫夐」
+      postOptions: [],
+      ruleForm: {
+        type: [],
+      },
+      zcform: {},
+      dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
+      inputVisible: false,
+      Labelchange: false,
+      ycvalue: "",
+      yfsvalue: "",
+      inputValue: "",
+      preachform: "",
+      previewVisible: false, //褰卞儚闅忚棰勮寮规
+      radio: "",
+      radios: [],
+      previewtype: 2, //棰勮褰卞儚闅忚绫诲瀷
+      total: 0, // 鎬绘潯鏁�
+      ImportQuantity: 999, //瀵煎奖鍍忛殢璁挎暟閲�
+      //棰勮褰卞儚闅忚淇℃伅
+      previewvalue: {
+        username: "杩欎釜鍖荤敓瀵逛綘鎬庝箞鏍�",
+      },
+      value: [],
+      list: [],
+
+      sourcetype: [
+        {
+          value: 1,
+          label: "绉戝",
+          children: [],
+        },
+        {
+          value: 2,
+          label: "鐥呭尯",
+          children: [],
+        },
+        {
+          value: 3,
+          label: "鍏ㄩ儴",
+        },
+      ],
+      loading: false,
+      cardlist: [
+        {
+          name: "闂ㄨ瘖鏈嶅姟鎬婚噺",
+          value: 0,
+        },
+        // {
+        //   name: "鎮h�呰繃婊�",
+        //   value: 0,
+        // },
+        {
+          name: "搴旈殢璁�",
+          value: 0,
+        },
+        {
+          name: "鍙戦�佸け璐�",
+          value: 0,
+        },
+        {
+          name: "寰呴殢璁�",
+          value: 0,
+        },
+        // {
+        //   name: "宸插彂閫�",
+        //   value: 0,
+        // },
+
+        // {
+        //   name: "琛ㄥ崟宸插彂閫�",
+        //   value: 0,
+        // },
+      ],
+      zcrules: {
+        date1: [
+          { required: true, message: "璇烽�夋嫨闅忚鏂瑰紡", trigger: "change" },
+        ],
+        resource: [
+          { required: true, message: "璇烽�夋嫨闅忚鏃堕棿", trigger: "blur" },
+        ],
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {
+        phonenumber: "",
+        totagid: "",
+        types: "",
+        nickName: "",
+        qystatus: "",
+        btstatus: "",
+      },
+      topicoptionssort: [
+        {
+          value: 0,
+          label: "鍑洪櫌鏃堕棿(姝e簭)",
+        },
+        {
+          value: 1,
+          label: "鍑洪櫌鏃堕棿(鍊掑簭)",
+        },
+        {
+          value: 2,
+          label: "鍙戦�佹椂闂�(姝e簭)",
+        },
+        {
+          value: 3,
+          label: "鍙戦�佹椂闂�(鍊掑簭)",
+        },
+      ],
+      // 鏌ヨ鍙傛暟
+      topqueryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        sendstate: null,
+        sort: 2, //0 鍑洪櫌鏃堕棿(姝e簭)    1 鍑洪櫌鏃堕棿(鍊掑簭)   2 鍙戦�佹椂闂�(姝e簭)    3 鍙戦�佹椂闂�(鍊掑簭)
+        serviceType: 3,
+        searchscope: 3,visitCount: 1,
+        scopetype: [],
+        leaveldeptcodes: [],
+        leavehospitaldistrictcodes: [],
+      },
+      propss: { multiple: true },
+      options: [],
+
+      topicoptions: [
+        {
+          value: null,
+          label: "鍏ㄩ儴",
+        },
+        {
+          value: 1,
+          label: "琛ㄥ崟宸查鍙�",
+        },
+        {
+          value: 2,
+          label: "寰呴殢璁�",
+        },
+        {
+          value: 3,
+          label: "琛ㄥ崟宸插彂閫�",
+        },
+        {
+          value: 4,
+          label: "涓嶆墽琛�",
+        },
+        {
+          value: 5,
+          label: "鍙戦�佸け璐�",
+        },
+        {
+          value: 6,
+          label: "宸插畬鎴�",
+        },
+      ],
+      sextype: [
+        {
+          value: 1,
+          label: "鐢�",
+        },
+        {
+          value: 2,
+          label: "濂�",
+        },
+      ],
+      topicoptionsyj: [
+        {
+          value: 1,
+          label: "寮傚父",
+        },
+        {
+          value: 0,
+          label: "姝e父",
+        },
+      ],
+      url: "http://9.208.2.190:8090/smartor/serviceExternal/query360PatInfo",
+      postData: {
+        XiaoXiTou: {
+          FaSongFCSJC: "ZJHES",
+          FaSongJGID: localStorage.getItem("orgid"),
+          FaSongJGMC: localStorage.getItem("orgname"),
+          FaSongSJ: "2025-01-09聽17:29:36",
+          FaSongXTJC: "SUIFANGXT",
+          FaSongXTMC: "闅忚绯荤粺",
+          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
+          XiaoXiLX: "SC_LC_360STCX",
+          XiaoXiMC: "360聽瑙嗗浘鏌ヨ",
+          ZuHuID: localStorage.getItem("ZuHuID"),
+          ZuHuMC: localStorage.getItem("orgname"),
+        },
+        YeWuXX: {
+          BingRenXX: {
+            ZhengJianHM: "",
+            ZhengJianLXDM: "01",
+            ZhengJianLXMC: "灞呮皯韬唤璇�",
+            ZuZhiJGID: localStorage.getItem("orgid"),
+            ZuZhiJGMC: localStorage.getItem("orgname"),
+          },
+          YongHuXX: {
+            XiTongID: "SUIFANGXT",
+            XiTongMC: "闅忚绯荤粺",
+            YongHuID: "1400466972205912064",
+            YongHuXM: "JNRMYY",
+            ZuZhiJGID: localStorage.getItem("orgid"),
+            ZuZhiJGMC: localStorage.getItem("orgname"),
+            idp: "lyra",
+          },
+        },
+      },
+      amendtag: false,
+      errtype: "",
+      leavehospitaldistrictcode: "",
+      serviceState: [],
+      checkboxlist: [],
+      // 琛ㄥ崟鏍¢獙
+      rules: {},
+    };
+  },
+  watch: {},
+  created() {
+    this.serviceState = store.getters.serviceState;
+    this.checkboxlist = store.getters.checkboxlist;
+    this.errtype = this.$route.query.errtype;
+    this.leavehospitaldistrictcode =
+      this.$route.query.leavehospitaldistrictcode;
+    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
+      return {
+        label: dept.deptName,
+        value: dept.deptCode,
+      };
+    });
+    this.sourcetype[1].children = store.getters.belongWards.map((dept) => {
+      return {
+        label: dept.districtName,
+        value: dept.districtCode,
+      };
+    });
+    if (this.errtype) {
+      this.toleadExport(2);
+    } else {
+      this.getList(1);
+    }
+    this.getConfigKey("sys.user.initPassword").then((response) => {
+      this.initPassword = response.msg;
+    });
+  },
+  activated() {
+    this.getList(1);
+  },
+  methods: {
+    /** 鏌ヨ闅忚鏈嶅姟鍒楄〃 */
+    getList(refresh) {
+      // 榛樿鍏ㄩ儴
+
+      if (this.topqueryParams.searchscope == 3) {
+        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
+          (obj) => obj.deptCode
+        );
+        this.topqueryParams.leavehospitaldistrictcodes =
+          store.getters.belongWards.map((obj) => obj.districtCode);
+      }
+      // 鎺ュ彈寮傚父璺宠浆
+      if (this.errtype) {
+        this.topqueryParams.leavehospitaldistrictcodes.push(
+          this.leavehospitaldistrictcode
+        );
+        console.log(this.topqueryParams.leavehospitaldistrictcodes, "11");
+      }
+      this.loading = true;
+      if (
+        this.topqueryParams.leavehospitaldistrictcodes[0] &&
+        this.topqueryParams.leaveldeptcodes[0]
+      ) {
+        this.topqueryParams.deptOrDistrict = 2;
+      } else {
+        this.topqueryParams.deptOrDistrict = 1;
+      }
+      getTaskservelist(this.topqueryParams).then((response) => {
+        this.userList = response.rows[0].serviceSubtaskList;
+        this.total = response.total;
+        if (refresh) {
+          this.cardlist[0].value =
+            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
+          // this.cardlist[1].value = response.rows[0].wzx;
+          this.cardlist[1].value = response.rows[0].ysf;
+          this.ycvalue = response.rows[0].yc;
+          this.cardlist[2].value = response.rows[0].fssb;
+          this.cardlist[3].value = response.rows[0].dsf;
+          // this.cardlist[4].value = response.rows[0].yfs2;
+          this.yfsvalue = response.rows[0].yfs;
+        }
+        this.loading = false;
+        this.userList.forEach((item) => {
+          let idArray = null;
+          if (item.endtime) {
+            item.endDay = this.daysBetween(item.endtime);
+          }
+
+          if (item.preachform) {
+            if (item.endtime) {
+              item.preachformson = item.preachform;
+              idArray = item.preachform.split(",");
+            }
+
+            item.preachform = idArray.map((value) => {
+              // 鏌ユ壘id瀵瑰簲鐨勫璞�
+              const item = this.checkboxlist.find(
+                (item) => item.value == value
+              );
+              // 濡傛灉鎵惧埌瀵瑰簲鐨刬d锛岃繑鍥瀕abel鍊硷紝鍚﹀垯杩斿洖null
+              return item ? item.label : null;
+            });
+          }
+        });
+        this.total = response.total;
+      });
+    },
+    affiliation() {
+      this.topqueryParams.drcode = store.getters.hisUserId;
+      this.topqueryParams.nurseId = store.getters.hisUserId;
+      this.getList(1);
+    },
+    onthatday() {
+      this.topqueryParams.startSendDateTime = this.getCurrentDate();
+      this.topqueryParams.endSendDateTime = this.getCurrentDate();
+      this.getList(1);
+    },
+    getCurrentDate() {
+      const now = new Date();
+      return now.toISOString().slice(0, 10); // 鎴彇鍓�10涓瓧绗︼紝鍗� YYYY-MM-DD
+    },
+    buidegetTasklist(type) {
+      if (this.topqueryParams.searchscope == 3) {
+        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
+          (obj) => obj.deptCode
+        );
+        this.topqueryParams.leavehospitaldistrictcodes =
+          store.getters.belongWards.map((obj) => obj.districtCode);
+      }
+      // 鎺ュ彈寮傚父璺宠浆
+      if (this.errtype) {
+        this.topqueryParams.leavehospitaldistrictcodes.push(
+          this.leavehospitaldistrictcode
+        );
+      }
+      let obj = {
+        pageNum: 1,
+        pageSize: 10,
+        leavehospitaldistrictcodes:
+          this.topqueryParams.leavehospitaldistrictcodes,
+        sendstates: [2, 3],
+        leaveldeptcodes: this.topqueryParams.leaveldeptcodes,
+      };
+      buidegetTasklist(obj).then((response) => {
+        this.userList = response.rows[0].serviceSubtaskList;
+        this.total = response.total;
+        if (refresh) {
+          this.cardlist[0].value =
+            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
+          this.cardlist[1].value = response.rows[0].wzx;
+          this.cardlist[2].value = response.rows[0].ysf;
+          this.ycvalue = response.rows[0].yc;
+          this.cardlist[3].value = response.rows[0].fssb;
+          this.cardlist[4].value = response.rows[0].dsf;
+          // this.cardlist[5].value = response.rows[0].yfs2;
+          this.yfsvalue = response.rows[0].yfs;
+        }
+        this.loading = false;
+        this.userList.forEach((item) => {
+          let idArray = null;
+          if (item.endtime) {
+            item.endDay = this.daysBetween(item.endtime);
+          }
+
+          if (item.preachform) {
+            if (item.endtime) {
+              item.preachformson = item.preachform;
+              idArray = item.preachform.split(",");
+            }
+
+            item.preachform = idArray.map((value) => {
+              // 鏌ユ壘id瀵瑰簲鐨勫璞�
+              const item = this.checkboxlist.find(
+                (item) => item.value == value
+              );
+              // 濡傛灉鎵惧埌瀵瑰簲鐨刬d锛岃繑鍥瀕abel鍊硷紝鍚﹀垯杩斿洖null
+              return item ? item.label : null;
+            });
+          }
+        });
+        this.total = response.total;
+      });
+    },
+    // 鏌ョ湅闂ㄨ瘖闅忚璇︽儏
+    Referencequestion(row) {
+      this.previewVisible = true;
+    },
+    // 娣诲姞寮规鎼滅储
+    remoteMethod(query) {
+      if (query !== "") {
+        this.loading = true;
+        setTimeout(() => {
+          this.loading = false;
+          this.options = this.list.filter((item) => {
+            return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;
+          });
+        }, 200);
+      } else {
+        this.options = [];
+      }
+    },
+    // 褰卞儚闅忚鐘舵�佷慨鏀�
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
+      this.$modal
+        .confirm('纭瑕�"' + text + '""' + row.userName + '"鐢ㄦ埛鍚楋紵')
+        .then(function () {
+          return changeUserStatus(row.userId, row.status);
+        })
+        .then(() => {
+          this.$modal.msgSuccess(text + "鎴愬姛");
+        })
+        .catch(function () {
+          row.status = row.status === "0" ? "1" : "0";
+        });
+    },
+
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        userId: undefined,
+        deptId: undefined,
+        userName: undefined,
+        nickName: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: [],
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery(refresh) {
+      if (this.topqueryParams.searchscope == 3) {
+        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
+          (obj) => obj.deptCode
+        );
+        this.topqueryParams.leavehospitaldistrictcodes =
+          store.getters.belongWards.map((obj) => obj.districtCode);
+      }
+      this.topqueryParams.pageNum = 1;
+      this.topqueryParams.startOutHospTime = this.dateRange[0];
+      this.topqueryParams.endOutHospTime = this.dateRange[1];
+      this.topqueryParams.startSendDateTime = this.dateRangefs[0];
+      this.topqueryParams.endSendDateTime = this.dateRangefs[1];
+      this.getList(refresh);
+    },
+    // 鎮h�呰寖鍥村鐞�
+    handleChange(value) {
+      let type = value[0];
+      let code = value.slice(-1)[0];
+      this.topqueryParams.leavehospitaldistrictcodes = [];
+      this.topqueryParams.leaveldeptcodes = [];
+      if (type == 1) {
+        this.topqueryParams.leaveldeptcodes.push(code);
+        this.topqueryParams.leavehospitaldistrictcodes = [];
+        this.topqueryParams.searchscope = 1;
+      } else if (type == 2) {
+        this.topqueryParams.leavehospitaldistrictcodes.push(code);
+        this.topqueryParams.leaveldeptcodes = [];
+        this.topqueryParams.searchscope = 2;
+      } else {
+        this.topqueryParams.searchscope = 3;
+      }
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.dateRange = [];
+      this.dateRangefs = [];
+      this.topqueryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        sendstate: 2,
+        sort: 2, //0 鍑洪櫌鏃堕棿(姝e簭)    1 鍑洪櫌鏃堕棿(鍊掑簭)   2 鍙戦�佹椂闂�(姝e簭)    3 鍙戦�佹椂闂�(鍊掑簭)
+        serviceType: 3,
+        searchscope: 3,
+        visitCount: 1,
+        scopetype: [],
+        leaveldeptcodes: [],
+        leavehospitaldistrictcodes: [],
+      };
+      this.handleQuery(1);
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    //鍒犻櫎閫夐」
+    handleClose(tag) {
+      this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
+    },
+    //瑙﹀彂鏂板杈撳叆
+    showInput() {
+      this.inputVisible = true;
+      this.$nextTick((_) => {
+        this.$refs.saveTagInput.$refs.input.focus();
+      });
+    },
+    //鑾峰彇澶卞幓鐒︾偣瑙﹀彂
+    handleInputConfirm() {
+      let inputValue = this.inputValue;
+      if (inputValue) {
+        this.dynamicTags.push(inputValue);
+      }
+      this.inputVisible = false;
+      this.inputValue = "";
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.$router.push({
+        path: "/followvisit/QuestionnaireTask",
+        query: {
+          type: 2,
+          serviceType: 3,
+        },
+      });
+    },
+    //鎮h��360璺宠浆
+    gettoken360(sfzh, drcode, drname) {
+      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
+      if (this.postData.XiaoXiTou.ZuHuMC == "涓芥按甯備腑鍖婚櫌") {
+        this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728";
+        this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY";
+      }
+      query360PatInfo(this.postData).then((res) => {
+        if (res.data.url) {
+          window.open(res.data.url, "_blank");
+          // this.linkUrl = res.data.url;
+        } else {
+          this.$modal.msgWarning("360鏌ヨ鏃犵粨鏋�");
+        }
+      });
+    },
+
+    /** 閲嶇疆瀵嗙爜鎸夐挳鎿嶄綔 */
+    handleResetPwd(row) {
+      this.$prompt('璇疯緭鍏�"' + row.userName + '"鐨勬柊瀵嗙爜', "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        closeOnClickModal: false,
+        inputPattern: /^.{5,20}$/,
+        inputErrorMessage: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿",
+      })
+        .then(({ value }) => {
+          resetUserPwd(row.userId, value).then((response) => {
+            this.$modal.msgSuccess("淇敼鎴愬姛锛屾柊瀵嗙爜鏄細" + value);
+          });
+        })
+        .catch(() => {});
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.Labelchange = false;
+      this.reset();
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm: function () {
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          this.form.isoperation = 2;
+          this.form.notrequiredFlag = 1;
+          alterpatient(this.form)
+            .then((response) => {
+              console.log(response);
+            })
+            .then(() => {
+              this.getList(1);
+              this.$modal.msgSuccess("鎮h�呰繃婊ゆ垚鍔�");
+            });
+
+          this.reset();
+          this.Labelchange = false;
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const userIds = row.userId || this.ids;
+      this.$modal
+        .confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�')
+        .then(function () {
+          return delUser(userIds);
+        })
+        .then(() => {
+          this.getList(1);
+          this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+        })
+        .catch(() => {});
+    },
+    // 鍏ㄩ儴鍋滄
+    AllStop() {
+      this.$modal
+        .confirm("鏄惁鍋滄鍏ㄩ儴浠诲姟锛�")
+        .then(function () {
+          return console.log("鍋滄鎴愬姛");
+        })
+        .then(() => {
+          this.getList(1);
+          this.$modal.msgWarning("鍋滄鎴愬姛");
+        })
+        .catch(() => {});
+    },
+    // 鍏ㄩ儴寮�濮�
+    AllStarted() {
+      this.$modal
+        .confirm("鏄惁寮�鍚叏閮ㄤ换鍔★紵")
+        .then(function () {
+          return console.log("寮�鍚垚鍔�");
+        })
+        .then(() => {
+          this.getList(1);
+          this.$modal.msgSuccess("寮�鍚垚鍔�");
+        })
+        .catch(() => {});
+    },
+    // 浠诲姟閲嶇疆
+    TaskReset() {
+      this.$modal
+        .confirm("鏄惁閲嶇疆閫変腑鐨勪换鍔¢」锛�")
+        .then(function () {
+          return console.log("閫変腑鎴愬姛");
+        })
+        .then(() => {
+          this.getList(1);
+          this.$modal.msgSuccess("閲嶇疆鎴愬姛");
+        })
+        .catch(() => {});
+    },
+    // 璁剧疆鍙戦�佹椂闂�
+    Sendtimesetting() {
+      this.modificationVisible = true;
+    },
+    // 璺宠浆璇︽儏椤�
+    Seedetails(row) {
+      let type = "";
+      console.log(row, "rwo");
+      if (row.preachformson) {
+        if (row.preachformson.includes("3")) {
+          type = 1;
+        }
+      }
+      this.$router.push({
+        path: "/followvisit/record/detailpage/",
+        query: {
+          taskid: row.taskid,
+          patid: row.patid,
+          id: row.id,
+          Voicetype: type,
+          visitCount: this.topqueryParams.visitCount,
+        },
+      });
+    },
+    // 鍐嶆闅忚
+    followupvisit(row) {
+      this.zcform = row;
+      this.zcform.endtime = this.formatTime(this.zcform.endtime);
+      this.dialogFormVisible = true;
+    },
+    onSubmit() {},
+    // 鏆傚仠鏈嶅姟
+    handlestop(row) {
+      let objson = row;
+      this.$modal
+        .confirm(
+          '鏄惁纭鏆傚仠浠诲姟鍚嶇О涓�"' +
+            row.taskName +
+            '鎮h�呭悕绉颁负"' +
+            row.sendname +
+            '"鐨勬暟鎹」锛�'
+        )
+        .then(() => {
+          getTaskservelist({
+            patid: row.patid,
+            taskid: row.taskid,
+          }).then((res) => {
+            if (res.code == 200) {
+              objson.sendstate = 4;
+              objson.remark = "鏈嶅姟鏆傚仠";
+              Editsingletaskson(objson).then((res) => {
+                if (res.code) {
+                  this.$modal.msgSuccess("璁板綍鎴愬姛");
+                  this.getList(1);
+                }
+              });
+            }
+          });
+        })
+        .catch(() => {});
+    },
+    // 鎮h�呰繃婊よЕ鍙�
+    handleUpdate(row) {
+      particularpatient(row.patid).then((response) => {
+        this.form = response.data;
+      });
+      this.amendtag = true;
+      this.Labelchange = true;
+    },
+    // 渚挎嵎鎸夐挳
+    toleadExport(too) {
+      if (too == 1) {
+        this.topqueryParams.sendstate = 4;
+        this.topqueryParams.excep = null;
+      } else if (too == 2) {
+        this.topqueryParams.excep = 1;
+      }
+      this.handleQuery();
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.topqueryParams.pageNum = null;
+      this.topqueryParams.pageSize = null;
+      this.download(
+        "smartor/serviceSubtask/patItemExport",
+        {
+          ...this.topqueryParams,
+        },
+        `user_${new Date().getTime()}.xlsx`
+      );
+    },
+    // 寮傚父鍒楁覆鏌�
+    tableRowClassName({ row, rowIndex }) {
+      if (row.excep == 1) {
+        return "warning-row";
+      }
+      return "";
+    },
+    // 鍒涘缓鍐嶆闅忚鏈嶅姟
+    setupsubtask() {
+      this.$refs["zcform"].validate((valid) => {
+        if (valid) {
+          this.zcform.remark =
+            this.zcform.remark + "銆�" + this.getCurrentTime() + "銆�";
+          let form = structuredClone(this.zcform);
+          form.longSendTime = this.formatTime(form.date1);
+          form.finishtime = "";
+          if (form.resource) {
+            if (form.resource == 2) {
+              form.serviceType = 13;
+            }
+          } else {
+            this.$modal.msgError("鏈�夋嫨闅忚鏂瑰紡");
+          }
+          form.id = null;
+          form.sendstate = 2;
+          form.preachform = form.preachformson;
+          form.longTask = 0;
+          addserviceSubtask(form).then((res) => {
+            if (res.code == 200) {
+              this.$modal.msgSuccess("鍒涘缓鎴愬姛");
+            } else {
+              this.$modal.msgError("鍒涘缓澶辫触");
+            }
+            this.dialogFormVisible = false;
+          });
+        }
+      });
+    },
+    getCurrentTime() {
+      const now = new Date();
+      const year = now.getFullYear();
+      const month = String(now.getMonth() + 1).padStart(2, "0");
+      const day = String(now.getDate()).padStart(2, "0");
+      const hours = String(now.getHours()).padStart(2, "0");
+      const minutes = String(now.getMinutes()).padStart(2, "0");
+      const seconds = String(now.getSeconds()).padStart(2, "0");
+
+      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.el-button--primary.is-plain {
+  color: #ffffff;
+  background: #409eff;
+  border-color: #4fabe9;
+}
+
+.document {
+  // width: 100px;
+  height: 50px;
+}
+::v-deep.el-table .warning-row {
+  background: #eec4c4;
+}
+
+.documentf {
+  display: flex;
+  justify-content: flex-end;
+}
+
+.download {
+  text-align: center;
+
+  .el-upload__tip {
+    font-size: 23px;
+  }
+
+  .el-upload__text {
+    font-size: 23px;
+  }
+}
+
+.uploading {
+  margin-top: 20px;
+  margin: 20px;
+  padding: 30px;
+  background: #ffffff;
+  border: 1px solid #dcdfe6;
+  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+    0 0 6px 0 rgba(0, 0, 0, 0.04);
+}
+
+.el-tag + .el-tag {
+  margin-left: 10px;
+}
+
+.button-new-tag {
+  margin-left: 10px;
+  height: 32px;
+  line-height: 30px;
+  padding-top: 0;
+  padding-bottom: 0;
+}
+
+.input-new-tag {
+  width: 90px;
+  margin-left: 10px;
+  vertical-align: bottom;
+}
+
+.drexamine {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 30px;
+  background: #daeaf5;
+
+  img {
+    width: 100px;
+    height: 100px;
+  }
+}
+
+.qrcode-dialo {
+  // text-align: center;
+  //   display: flex;
+  margin: 20px;
+  padding: 30px;
+  background: #edf1f7;
+  border: 1px solid #dcdfe6;
+  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+    0 0 6px 0 rgba(0, 0, 0, 0.04);
+
+  .topic-dev {
+    margin-bottom: 25px;
+    font-size: 20px !important;
+
+    .dev-text {
+      margin-bottom: 10px;
+    }
+  }
+}
+::v-deep.leftvlue .el-card__body {
+  background: #d0e9fd;
+}
+::v-deep.leftvlue .el-card__body:hover {
+  background: #8dc8f8;
+  cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
+}
+::v-deep.errleftvlue .el-card__body {
+  background: #fdd0d7;
+}
+::v-deep.errleftvlue .el-card__body:hover {
+  background: #f88d96;
+  cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
+}
+
+::v-deep.ysfleftvlue .el-card__body {
+  background: #d0fdd8;
+}
+::v-deep.ysfleftvlue .el-card__body:hover {
+  background: #8df8a4;
+  cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
+}
+.button-bb {
+  font-weight: 500;
+  background-color: #2ba05c;
+  padding: 5px;
+  border-radius: 1px;
+  color: #ffffff;
+}
+.button-xq {
+  font-weight: 500;
+  background-color: #409eff;
+  padding: 5px;
+  border-radius: 1px;
+  color: #ffffff;
+}
+.button-sc {
+  font-weight: 500;
+  background-color: #b3a21f;
+  padding: 5px;
+  border-radius: 1px;
+  color: #ffffff;
+}
+.button-zx {
+  background: #4fabe9;
+  padding: 5px;
+  border-radius: 1px;
+  color: #ffffff;
+}
+
+::v-deep.el-radio-group {
+  span {
+    font-size: 24px;
+  }
+}
+
+// 閫夐」瀛椾綋鏀惧ぇ
+// ::v-deep.el-checkbox-group {
+//   span {
+//     font-size: 24px;
+//   }
+// }
+</style>
diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue
index ba36907..3ed901e 100644
--- a/src/views/followvisit/record/detailpage/index.vue
+++ b/src/views/followvisit/record/detailpage/index.vue
@@ -206,7 +206,12 @@
     </div>
     <div class="Followuserinfos">
       <div>
-        <el-form ref="form" :model="form" label-width="120px">
+        <el-form
+          ref="userform"
+          :model="form"
+          :rules="userrules"
+          label-width="120px"
+        >
           <div class="headline">
             <div>浜哄伐澶勭悊</div>
             <el-row :gutter="20">
@@ -215,6 +220,13 @@
                   <el-input
                     placeholder="鑱旂郴鐢佃瘽缂哄け"
                     v-model="userform.telcode"
+                  >
+                    <el-button
+                      slot="append"
+                      icon="el-icon-phone"
+                      @click="handleCall(userform.telcode, 'tel')"
+                      :disabled="!isValidPhone(userform.telcode)"
+                    ></el-button
                   ></el-input> </el-form-item
               ></el-col>
               <el-col :span="8"
@@ -222,6 +234,13 @@
                   <el-input
                     placeholder="鑱旂郴浜虹數璇濈己澶�"
                     v-model="userform.relativetelcode"
+                  >
+                    <el-button
+                      slot="append"
+                      icon="el-icon-phone"
+                      @click="handleCall(userform.relativetelcode, 'relative')"
+                      :disabled="!isValidPhone(userform.relativetelcode)"
+                    ></el-button
                   ></el-input> </el-form-item
               ></el-col>
               <el-col :span="8"
@@ -232,13 +251,37 @@
                   ></el-input> </el-form-item
               ></el-col>
             </el-row>
+
             <div style="margin-left: 30px">
               <el-button type="primary" plain @click="Editsingletasksonyic('')"
                 >淇濆瓨鏈嶅姟</el-button
               >
             </div>
           </div>
+          <el-row :gutter="20" v-if="callStatus !== 'idle'">
+            <el-col :span="24">
+              <el-alert
+                :title="callStatusText"
+                :type="callStatusType"
+                :closable="false"
+                show-icon
+              />
+            </el-col>
+          </el-row>
 
+          <!-- 鎸傛柇鎸夐挳锛堜粎鍦ㄩ�氳瘽涓樉绀猴級 -->
+          <el-row :gutter="20" v-if="callStatus === 'connected'">
+            <el-col :span="24" style="text-align: center; margin-top: 10px">
+              <el-button
+                type="danger"
+                icon="el-icon-phone"
+                @click="endCurrentCall"
+                :loading="isEndingCall"
+              >
+                鎸傛柇鐢佃瘽
+              </el-button>
+            </el-col>
+          </el-row>
           <el-form-item label="闅忚璁板綍">
             <el-input type="textarea" v-model="form.remark"></el-input>
           </el-form-item>
@@ -343,6 +386,14 @@
           </el-collapse-item>
         </el-collapse>
       </div>
+    </div>
+    <div>
+      <h2>涓�閿懠鍙姛鑳�</h2>
+      <CallButton
+        ref="callButton"
+        :phoneNumber="currentPhoneNumber"
+        style="display: none"
+      />
     </div>
     <div>
       <el-tabs v-model="activeName" type="border-card">
@@ -671,7 +722,7 @@
                 allow-create
                 default-first-option
                 @change="visitChange"
-                placeholder="璇烽�夋嫨闅忚鏂瑰紡"
+                placeholder="璇烽�夋嫨闅忚鏂瑰紡(渚濆嚭闄㈡椂闂存妧璁$畻)"
               >
                 <el-option
                   v-for="item in options"
@@ -691,6 +742,7 @@
                 :picker-options="pickerOptions"
                 align="right"
                 v-model="form.date1"
+                class="custom-disabled"
               ></el-date-picker>
             </el-form-item>
           </el-col>
@@ -735,11 +787,34 @@
   alterpatient,
   listcontactinformation,
 } from "@/api/patient/homepage";
+import CallButton from "@/components/CallButton";
 export default {
+  components: {
+    CallButton,
+  },
+
   dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
   data() {
+    const validatePhone = (rule, value, callback) => {
+      if (!value) {
+        return callback(new Error("璇疯緭鍏ヨ仈绯荤數璇�"));
+      }
+      setTimeout(() => {
+        if (!/^1[3-9]\d{9}$/.test(value)) {
+          callback(new Error("璇疯緭鍏ユ纭殑11浣嶆墜鏈哄彿鐮�"));
+        } else {
+          callback();
+        }
+      }, 300);
+    };
     return {
       userid: "",
+      currentPhoneNumber: "",
+      callType: "", // 鐢ㄤ簬鍖哄垎鏄摢涓數璇�
+      // 宸叉湁鏁版嵁...
+      callStatus: "idle", // idle, calling, connected, ended, failed
+      isEndingCall: false,
+      currentCall: null, // 褰撳墠閫氳瘽瀵硅薄
       input: "浠婂ぉ韬綋杩樹笉閿�",
       radio: "2",
       taskname: "",
@@ -757,6 +832,10 @@
           { required: true, message: "璇烽�夋嫨闅忚鏂瑰紡", trigger: "change" },
         ],
         date1: [{ required: true, message: "璇烽�夋嫨闅忚鏃堕棿", trigger: "blur" }],
+      },
+      userrules: {
+        telcode: [{ validator: validatePhone, trigger: "blur" }],
+        relativetelcode: [{ validator: validatePhone, trigger: "blur" }],
       },
       url: "http://9.208.2.190:8090/smartor/serviceExternal/query360PatInfo",
       postData: {
@@ -793,6 +872,10 @@
         },
       },
       pickerOptions: {
+        disabledDate(time) {
+          // 绂佺敤浠婂ぉ鍙婁箣鍓嶇殑鏃ユ湡
+          return time.getTime() < Date.now() - 24 * 60 * 60 * 1000;
+        },
         shortcuts: [
           {
             text: "涓冨ぉ鍚�",
@@ -884,7 +967,28 @@
       patid: null,
     };
   },
-
+  computed: {
+    callStatusText() {
+      const statusMap = {
+        idle: "鍑嗗鍛煎彨",
+        calling: `姝e湪鍛煎彨 ${this.currentPhoneNumber}...`,
+        connected: `宸叉帴閫� ${this.currentPhoneNumber}`,
+        ended: "閫氳瘽宸茬粨鏉�",
+        failed: "鍛煎彨澶辫触",
+      };
+      return statusMap[this.callStatus];
+    },
+    callStatusType() {
+      const typeMap = {
+        idle: "info",
+        calling: "warning",
+        connected: "success",
+        ended: "info",
+        failed: "error",
+      };
+      return typeMap[this.callStatus];
+    },
+  },
   created() {
     this.taskid = this.$route.query.taskid;
     this.id = this.$route.query.id;
@@ -979,17 +1083,29 @@
       // 鏍规嵁閫夋嫨鐨勯殢璁挎柟寮忚缃椂闂�
       const now = new Date();
       if (value.includes("涓冨ぉ鍚�")) {
-        this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 7);
+        this.form.date1 = new Date(
+          Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 7
+        );
       } else if (value.includes("15澶╁悗")) {
-        this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 15);
+        this.form.date1 = new Date(
+          Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 15
+        );
       } else if (value.includes("涓�涓湀鍚�")) {
-        this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 30);
+        this.form.date1 = new Date(
+          Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 30
+        );
       } else if (value.includes("涓変釜鏈堝悗")) {
-        this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 90);
+        this.form.date1 = new Date(
+          Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 90
+        );
       } else if (value.includes("鍏釜鏈堝悗")) {
-        this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 180);
+        this.form.date1 = new Date(
+          Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 180
+        );
       } else if (value.includes("涓�骞村悗")) {
-        this.form.date1 = new Date(now.getTime() + 3600 * 1000 * 24 * 365);
+        this.form.date1 = new Date(
+          Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 365
+        );
       }
     },
 
@@ -1123,10 +1239,10 @@
                     path: "/logisticsservice/record",
                   });
                 }
-              } else if (form.serviceType == 2) {
+              } else if (this.form.serviceType == 2) {
                 if (this.visitCount) {
                   this.$router.push({
-                    path: "/followvisit/again",
+                    path: "/logisticsservice/again",
                   });
                 } else {
                   this.$router.push({
@@ -1140,6 +1256,96 @@
           // 濡傛灉鏈変换浣曚竴涓紓姝ユ搷浣滃け璐ワ紝浼氳繘鍏ヨ繖閲�
           console.error("鍙戠敓閿欒锛�", error);
         });
+    },
+    // 楠岃瘉鐢佃瘽鍙风爜鏍煎紡骞惰繑鍥為敊璇俊鎭�
+validatePhoneNumber(phone) {
+  if (!phone) {
+    return { isValid: false, message: '璇疯緭鍏ョ數璇濆彿鐮�' };
+  }
+
+  // 鎵嬫満鍙锋鍒�
+  const mobileRegex = /^1[3-9]\d{9}$/;
+
+  // 甯﹀尯鍙风殑鍥哄畾鐢佃瘽锛堝畬鏁存牸寮忥級
+  const landlineFullRegex = /^0\d{2,3}-?\d{7,8}$/;
+
+  // 涓嶅甫鍖哄彿鐨勫浐瀹氱數璇濓紙浠呮湰鍦板彿鐮侊級
+  const landlineLocalRegex = /^\d{7,8}$/;
+
+  if (mobileRegex.test(phone)) {
+    return { isValid: true, type: 'mobile' };
+  } else if (landlineFullRegex.test(phone)) {
+    return { isValid: true, type: 'landline' };
+  } else if (landlineLocalRegex.test(phone)) {
+    return {
+      isValid: false,
+      message: '鏈湴鍙风爜璇锋坊鍔犲尯鍙凤紙濡�028-1234567锛�'
+    };
+  } else {
+    return {
+      isValid: false,
+      message: '璇疯緭鍏ユ纭殑鐢佃瘽鍙风爜锛堟墜鏈哄彿鎴栧甫鍖哄彿鐨勫浐瀹氱數璇濓級'
+    };
+  }
+},
+
+// 浣跨敤绀轰緥
+isValidPhone(phone) {
+  return this.validatePhoneNumber(phone).isValid;
+},
+    handleCall(phone, type) {
+      if (!this.isValidPhone(phone)) {
+        this.$message.error("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜");
+        return;
+      }
+
+      this.currentPhoneNumber = phone;
+      this.callType = type;
+      this.callStatus = "calling";
+
+      this.$nextTick(() => {
+        this.$refs.callButton.startCall();
+
+        // 鐩戝惉閫氳瘽鐘舵�佸彉鍖�
+        this.$refs.callButton.$on("call-status-change", (status) => {
+          this.handleCallStatusChange(status);
+        });
+      });
+    },
+
+    // 澶勭悊閫氳瘽鐘舵�佸彉鍖�
+    handleCallStatusChange(status) {
+      console.log(status,'status');
+
+      this.callStatus = status.type;
+
+      if (status.type === "connected") {
+        this.currentCall = {
+          phone: this.currentPhoneNumber,
+          type: this.callType,
+          startTime: new Date(),
+        };
+      } else if (status.type === "ended" || status.type === "failed") {
+        this.currentCall = null;
+      }
+
+      // 鍙互鏍规嵁鐘舵�佹墽琛屽叾浠栨搷浣�
+      if (status.type === "failed") {
+        this.$message.error(`鍛煎彨澶辫触: ${status.text}`);
+      }
+    },
+
+    // 缁撴潫褰撳墠閫氳瘽
+    endCurrentCall() {
+      if (!this.currentCall) return;
+
+      this.isEndingCall = true;
+      this.$refs.callButton.endCall();
+
+      // 3绉掑悗閲嶇疆鐘舵��
+      setTimeout(() => {
+        this.isEndingCall = false;
+      }, 3000);
     },
     yuyingetdetail() {
       this.tableDatatop.forEach((item, index) => {
@@ -1186,7 +1392,7 @@
             })
             .catch(() => {
               if (this.form.serviceType == 13) {
-                if (this.visitCount) {
+                if (this.visitCount != 1) {
                   this.$router.push({
                     path: "/logisticsservice/zbAgain",
                   });
@@ -1196,7 +1402,7 @@
                   });
                 }
               } else if (form.serviceType == 2) {
-                if (this.visitCount) {
+                if (this.visitCount != 1) {
                   this.$router.push({
                     path: "/followvisit/again",
                   });
@@ -1232,11 +1438,12 @@
           this.form = res.rows[0].serviceSubtaskList.find(
             (item) => item.id == this.id
           );
+          console.log(this.form.serviceType, "serviceType");
+
           this.logsheetlist = res.rows[0].serviceSubtaskList;
           this.templateid = this.logsheetlist[0].templateid;
           const targetDate = new Date(this.form.longSendTime); // 鐩爣鏃ユ湡
           const now = new Date(); // 褰撳墠鏃堕棿
-          this.form.endtime = this.formatTime(this.form.endtime);
           if (now < targetDate && this.form.sendstate == 2) {
             this.$confirm("褰撳墠鏈嶅姟鏈埌鍙戦�佹椂闂磋璋ㄦ厧淇敼", "鎻愮ず", {
               confirmButtonText: "纭畾",
@@ -1388,7 +1595,6 @@
           form.finishtime = "";
           if (form.resource) {
             if (form.resource == 2) {
-              form.serviceType = 13;
               form.visitDeptCode = localStorage.getItem("deptCode");
               form.visitDeptName = "闅忚涓績";
             } else {
@@ -1401,16 +1607,18 @@
           }
           // form.id = null;
           form.sendstate = 2;
+          console.log(form.serviceType, "form.serviceType");
+
           addserviceSubtask(form).then((res) => {
             if (res.code == 200) {
               this.$modal.msgSuccess("鍒涘缓鎴愬姛");
               if (form.serviceType == 13) {
                 this.$router.push({
-                  path: "/logisticsservice/again",
+                  path: "/logisticsservice/zbAgain",
                 });
               } else if (form.serviceType == 2) {
                 this.$router.push({
-                  path: "/logisticsservice/zbAgain",
+                  path: "/logisticsservice/again",
                 });
               }
             } else {
@@ -1614,6 +1822,19 @@
   background-color: #f57676;
   border-color: #f57676;
 }
+.el-icon-phone {
+  transition: all 0.3s;
+}
+.el-button[disabled] .el-icon-phone {
+  color: #c0c4cc;
+}
+.el-button:not([disabled]) .el-icon-phone {
+  color: #409eff;
+}
+.el-button:not([disabled]):hover .el-icon-phone {
+  color: #66b1ff;
+  transform: scale(1.1);
+}
 .mulsz {
   font-size: 25px;
   margin-top: 20px;
diff --git a/src/views/followvisit/record/index.vue b/src/views/followvisit/record/index.vue
index 1063d26..6192c55 100644
--- a/src/views/followvisit/record/index.vue
+++ b/src/views/followvisit/record/index.vue
@@ -879,10 +879,10 @@
           name: "寰呴殢璁�",
           value: 0,
         },
-        {
-          name: "宸插彂閫�",
-          value: 0,
-        },
+        // {
+        //   name: "宸插彂閫�",
+        //   value: 0,
+        // },
 
         // {
         //   name: "琛ㄥ崟宸插彂閫�",
@@ -1049,7 +1049,7 @@
           this.ycvalue = response.rows[0].yc;
           this.cardlist[2].value = response.rows[0].fssb;
           this.cardlist[3].value = response.rows[0].dsf;
-          this.cardlist[4].value = response.rows[0].yfs2;
+          // this.cardlist[4].value = response.rows[0].yfs2;
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
@@ -1127,7 +1127,7 @@
           this.ycvalue = response.rows[0].yc;
           this.cardlist[3].value = response.rows[0].fssb;
           this.cardlist[4].value = response.rows[0].dsf;
-          this.cardlist[5].value = response.rows[0].yfs2;
+          // this.cardlist[5].value = response.rows[0].yfs2;
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
diff --git a/src/views/followvisit/record/physical/index.vue b/src/views/followvisit/record/physical/index.vue
new file mode 100644
index 0000000..58077c6
--- /dev/null
+++ b/src/views/followvisit/record/physical/index.vue
@@ -0,0 +1,1433 @@
+<template>
+  <!-- 鑱婅繛椤甸潰璁板綍 -->
+  <div class="Followupdetailspage" id="app-container">
+    <div class="Followuserinfo">
+      <div>
+        <div class="userinfo-text">
+          <!-- <span>鎮h�呮湇鍔¤鎯�</span> -->
+          <div class="headline">
+            <div>鎮h�呮湇鍔¤鎯�</div>
+            <div style="margin-left: 20px">
+              <el-button
+                v-if="!Whetherall"
+                type="primary"
+                @click="getTaskservelist()"
+                >鏌ョ湅鎮h�呭叏閮ㄦ湇鍔�</el-button
+              >
+              <el-button v-else type="success" @click="getTaskservelist(id)"
+                >鍙睍绀烘湰娆℃湇鍔′俊鎭�</el-button
+              >
+            </div>
+            <div style="margin-left: 20px; color: #59a0f0">
+              <el-link
+                href="https://9.208.2.207:6060/search-homepage"
+                target="_blank"
+                :underline="true"
+              >
+                鍓嶅線CDSS鏌ヨ
+              </el-link>
+            </div>
+          </div>
+          <!-- <el-button type="success">闅忚鍚庣煭淇�</el-button> -->
+        </div>
+      </div>
+      <div>
+        <el-table
+          :data="logsheetlist"
+          :row-class-name="tableRowClassName"
+          style="width: 100%"
+        >
+          <el-table-column
+            prop="sendname"
+            align="center"
+            label="濮撳悕"
+            width="100"
+          >
+            <template slot-scope="scope">
+              <el-button
+                size="medium"
+                type="text"
+                @click="
+                  gettoken360(
+                    scope.row.sfzh,
+                    scope.row.drcode,
+                    scope.row.drname
+                  )
+                "
+                ><span class="button-textsc">{{
+                  scope.row.sendname
+                }}</span></el-button
+              >
+            </template>
+          </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="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="Seedetails(scope.row)"
+                ><span class="button-zx"
+                  ><i class="el-icon-s-order"></i>鏌ョ湅</span
+                ></el-button
+              >
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+    </div>
+    <div class="Followuserinfos">
+      <div>
+        <el-form
+          ref="userform"
+          :model="form"
+          :rules="userrules"
+          label-width="120px"
+        >
+          <div class="headline">
+            <div>浜哄伐澶勭悊</div>
+            <el-form-item label="鑱旂郴鐢佃瘽">
+              <el-input placeholder="鑱旂郴鐢佃瘽缂哄け" v-model="form.phone">
+                <el-button
+                  slot="append"
+                  icon="el-icon-phone"
+                  @click="handleCall(form.phone, 'tel')"
+                  :disabled="!isValidPhone(form.phone)"
+                ></el-button
+              ></el-input>
+            </el-form-item>
+          </div>
+
+          <el-form-item label="闅忚璁板綍">
+            <el-input type="textarea" v-model="form.remark"></el-input>
+          </el-form-item>
+
+          <el-form-item label="澶勭悊鎰忚">
+            <div>
+              <el-button plain type="warning" @click="Editsingletaskson('1')"
+                >鏆備笉澶勭悊</el-button
+              >
+              <el-button plain type="success" @click="Editsingletaskson('2')"
+                >鐥呮儏绋冲畾</el-button
+              >
+              <el-button plain type="primary" @click="Editsingletaskson('3')"
+                >閫氱煡灏辫瘖</el-button
+              >
+              <!-- <el-button type="danger" @click="Editsingletaskson('4')"
+    >澶辫</el-button
+  > -->
+              <el-button plain type="info" @click="Editsingletaskson('5')"
+                >涓績闅忚</el-button
+              >
+              <el-button
+                type="primary"
+                round
+                v-if="this.form.isVisitAgain != 2"
+                @click="sendAgain()"
+                >鍐嶆闅忚</el-button
+              >
+
+              <el-button type="success" @click="Editsingletasksonyic('')"
+                >淇濆瓨鏈嶅姟</el-button
+              >
+            </div>
+          </el-form-item>
+        </el-form>
+        <!-- <el-collapse>
+          <el-collapse-item title="鏌ョ湅褰撳墠鎮h�呬俊鎭�" name="1">
+            <div class="detailed">
+              <el-form ref="userform" :model="userform" label-width="100px">
+                <el-row :gutter="20">
+                  <el-col :span="12">
+                    <el-form-item label="鎮h�呭鍚�" prop="name">
+                      <el-input
+                        v-model="userform.name"
+                        placeholder="璇疯緭鍏ュ鍚�"
+                        maxlength="30"
+                      ></el-input> </el-form-item
+                  ></el-col>
+                </el-row>
+                <el-row :gutter="20">
+                  <el-col :span="12"
+                    ><el-form-item label="鑱旂郴鏂瑰紡" prop="telcode">
+                      <el-input
+                        v-model="userform.telcode"
+                        placeholder="璇疯緭鍏ヨ仈绯绘柟寮�"
+                        maxlength="20"
+                      /> </el-form-item
+                  ></el-col>
+                  <el-col :span="12">
+                    <el-form-item label="浜插睘鑱旂郴鏂瑰紡" prop="name">
+                      <el-input
+                        v-model="userform.relativetelcode"
+                        placeholder="璇疯緭鍏ュ鍚�"
+                        maxlength="20"
+                      ></el-input> </el-form-item
+                  ></el-col>
+                </el-row>
+                <el-row :gutter="20">
+                  <el-col :span="24">
+                    <el-form-item label="鍑虹敓鍦�" prop="birthplace">
+                      <el-input
+                        v-model="userform.birthplace"
+                        placeholder="鍥姐�佺渷銆佸湴甯傘�佸尯鍘裤�佽閬撶瓑璇︾粏淇℃伅"
+                        maxlength="50"
+                      /> </el-form-item
+                  ></el-col>
+                </el-row>
+                <el-row :gutter="20">
+                  <el-col :span="24"
+                    ><el-form-item label="灞呬綇鍦�" prop="placeOfResidence">
+                      <el-input
+                        v-model="userform.placeOfResidence"
+                        placeholder="鍥姐�佺渷銆佸湴甯傘�佸尯鍘裤�佽閬撶瓑璇︾粏淇℃伅"
+                        maxlength="50"
+                      /> </el-form-item
+                  ></el-col>
+                </el-row>
+
+              </el-form>
+            </div>
+          </el-collapse-item>
+        </el-collapse> -->
+      </div>
+    </div>
+    <div>
+      <CallButton
+        ref="callButton"
+        :phoneNumber="currentPhoneNumber"
+        style="display: none"
+      />
+    </div>
+    <el-dialog
+      title="鎮h�呭啀娆¢殢璁�"
+      v-dialogDrags
+      :visible.sync="dialogFormVisible"
+    >
+      <el-form ref="zcform" :rules="zcrules" :model="form" label-width="80px">
+        <el-form-item label="浠诲姟鍚嶇О">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="form.taskName"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="鎮h�呭悕绉�">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="form.sendname"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="骞撮緞">
+          <el-input style="width: 400px" disabled v-model="form.age"></el-input>
+        </el-form-item>
+        <el-form-item label="绉戝">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="form.deptname"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="鐥呭尯">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="form.leavehospitaldistrictname"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="鍑洪櫌鏃堕棿">
+          <el-input
+            style="width: 400px"
+            disabled
+            v-model="form.endtime"
+          ></el-input>
+        </el-form-item>
+        <div class="headline">涓婃闅忚</div>
+        <el-divider></el-divider>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="闅忚鏂瑰紡">
+              <el-select
+                v-model="form.visitType2"
+                filterable
+                allow-create
+                default-first-option
+                disabled
+                placeholder="璇烽�夋嫨闅忚鏂瑰紡"
+                class="custom-disabled"
+              >
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="闅忚鏃堕棿">
+              <el-date-picker
+                type="date"
+                disabled
+                placeholder="閫夋嫨鏃ユ湡"
+                :picker-options="pickerOptions"
+                align="right"
+                v-model="form.date2"
+                class="custom-disabled"
+              ></el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-form-item label="闅忚璁板綍">
+          <el-input
+            class="custom-disabled"
+            type="textarea"
+            disabled
+            v-model="form.remark2"
+          ></el-input>
+        </el-form-item>
+        <div class="headline">涓嬫闅忚</div>
+        <el-divider></el-divider>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="闅忚鏂瑰紡" prop="date1">
+              <el-select
+                v-model="form.visitType"
+                filterable
+                allow-create
+                default-first-option
+                @change="visitChange"
+                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-col>
+          <el-col :span="12">
+            <el-form-item label="闅忚鏃堕棿" prop="date1">
+              <el-date-picker
+                type="date"
+                placeholder="閫夋嫨鏃ユ湡"
+                :picker-options="pickerOptions"
+                align="right"
+                v-model="form.date1"
+              ></el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item label="闅忚鏂瑰紡" prop="resource">
+          <el-radio-group v-model="form.resource">
+            <el-radio label="1">鏈梾鍖洪殢璁�</el-radio>
+            <el-radio label="2">闅忚涓績闅忚</el-radio>
+          </el-radio-group>
+        </el-form-item>
+
+        <el-form-item label="闅忚璁板綍">
+          <el-input type="textarea" v-model="form.remark"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="warning" @click="dialogFormVisible = false"
+          >鍙� 娑�</el-button
+        >
+        <el-button type="primary" @click="setupsubtask">纭鍒涘缓鏈嶅姟</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  getsearchrResults,
+  getPersonVoices,
+  addserviceSubtask,
+  getTaskservelist,
+  getTaskFollowup,
+  Editsingletaskson,
+  serviceSubtaskDetailedit,
+  serviceSubtaskDetailadd,
+  updatePersonVoices,
+  addPersonVoices,
+  query360PatInfo,
+} from "@/api/AiCentre/index";
+import {
+  messagelistpatient,
+  alterpatient,
+  listcontactinformation,
+} from "@/api/patient/homepage";
+import CallButton from "@/components/CallButton";
+export default {
+  components: {
+    CallButton,
+  },
+
+  dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
+  data() {
+    const validatePhone = (rule, value, callback) => {
+      if (!value) {
+        return callback(new Error("璇疯緭鍏ヨ仈绯荤數璇�"));
+      }
+      setTimeout(() => {
+        if (!/^1[3-9]\d{9}$/.test(value)) {
+          callback(new Error("璇疯緭鍏ユ纭殑11浣嶆墜鏈哄彿鐮�"));
+        } else {
+          callback();
+        }
+      }, 300);
+    };
+    return {
+      userid: "",
+      currentPhoneNumber: "",
+      callType: "", // 鐢ㄤ簬鍖哄垎鏄摢涓數璇�
+      input: "浠婂ぉ韬綋杩樹笉閿�",
+      radio: "2",
+      taskname: "",
+      voice: "",
+      templateid: "",
+      again: "",
+      zcform: {},
+      form: {},
+      tableDatatop: [], //棰樼洰琛�
+      voiceDatatop: [], //棰樼洰琛�
+      dynamicTags: [],
+      zcrules: {
+        resource: [
+          { required: true, message: "璇烽�夋嫨闅忚鏂瑰紡", trigger: "change" },
+        ],
+        date1: [{ required: true, message: "璇烽�夋嫨闅忚鏃堕棿", trigger: "blur" }],
+      },
+      userrules: {
+        telcode: [{ validator: validatePhone, trigger: "blur" }],
+        relativetelcode: [{ validator: validatePhone, trigger: "blur" }],
+      },
+      url: "http://9.208.2.190:8090/smartor/serviceExternal/query360PatInfo",
+      postData: {
+        XiaoXiTou: {
+          FaSongFCSJC: "ZJHES",
+          FaSongJGID: localStorage.getItem("orgid"),
+          FaSongJGMC: localStorage.getItem("orgname"),
+          FaSongSJ: "2025-01-09聽17:29:36",
+          FaSongXTJC: "SUIFANGXT",
+          FaSongXTMC: "闅忚绯荤粺",
+          XiaoXiID: "5FA92AFB-9833-4608-87C7-F56A654AC171",
+          XiaoXiLX: "SC_LC_360STCX",
+          XiaoXiMC: "360聽瑙嗗浘鏌ヨ",
+          ZuHuID: localStorage.getItem("ZuHuID"),
+          ZuHuMC: localStorage.getItem("orgname"),
+        },
+        YeWuXX: {
+          BingRenXX: {
+            ZhengJianHM: "",
+            ZhengJianLXDM: "01",
+            ZhengJianLXMC: "灞呮皯韬唤璇�",
+            ZuZhiJGID: localStorage.getItem("orgid"),
+            ZuZhiJGMC: localStorage.getItem("orgname"),
+          },
+          YongHuXX: {
+            XiTongID: "SUIFANGXT",
+            XiTongMC: "闅忚绯荤粺",
+            YongHuID: "1400466972205912064",
+            YongHuXM: "JNRMYY",
+            ZuZhiJGID: localStorage.getItem("orgid"),
+            ZuZhiJGMC: localStorage.getItem("orgname"),
+            idp: "lyra",
+          },
+        },
+      },
+      pickerOptions: {
+        shortcuts: [
+          {
+            text: "涓冨ぉ鍚�",
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() + 3600 * 1000 * 24 * 7);
+              picker.$emit("pick", date);
+            },
+          },
+          {
+            text: "15澶╁悗",
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() + 3600 * 1000 * 24 * 15);
+              picker.$emit("pick", date);
+            },
+          },
+          {
+            text: "涓�涓湀鍚�",
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() + 3600 * 1000 * 24 * 30);
+              picker.$emit("pick", date);
+            },
+          },
+          {
+            text: "涓変釜鏈堝悗",
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() + 3600 * 1000 * 24 * 90);
+              picker.$emit("pick", date);
+            },
+          },
+          {
+            text: "鍏釜鏈堝悗",
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() + 3600 * 1000 * 24 * 180);
+              picker.$emit("pick", date);
+            },
+          },
+          {
+            text: "涓�骞村悗",
+            onClick(picker) {
+              const date = new Date();
+              date.setTime(date.getTime() + 3600 * 1000 * 24 * 365);
+              picker.$emit("pick", date);
+            },
+          },
+        ],
+      },
+      options: [
+        {
+          value: "涓冨ぉ鍚�",
+          label: "涓冨ぉ鍚�",
+        },
+        {
+          value: "15澶╁悗",
+          label: "15澶╁悗",
+        },
+        {
+          value: "涓�涓湀鍚�",
+          label: "涓�涓湀鍚�",
+        },
+        {
+          value: "涓変釜鏈堝悗",
+          label: "涓変釜鏈堝悗",
+        },
+        {
+          value: "鍏釜鏈堝悗",
+          label: "鍏釜鏈堝悗",
+        },
+        {
+          value: "涓�骞村悗",
+          label: "涓�骞村悗",
+        },
+      ],
+      userform: {},
+      Whetherall: true, //鏄惁鍏ㄩ儴璁板綍灞曠ず
+      dialogFormVisible: false,
+      Voicetype: 0, //鏄惁涓鸿闊虫湇鍔�
+      visitCount: null,
+      logsheetlist: [],
+      topicobj: {},
+      sendname: null,
+      serviceType: null,
+      id: null,
+      taskid: null,
+      patid: null,
+    };
+  },
+
+  created() {
+    this.taskid = this.$route.query.taskid;
+    this.id = this.$route.query.id;
+    this.sendname = this.$route.query.sendname;
+    this.patid = this.$route.query.patid;
+    this.again = this.$route.query.again;
+    this.Voicetype = this.$route.query.Voicetype;
+    this.visitCount = this.$route.query.visitCount;
+    this.serviceType = this.$route.query.serviceType;
+
+    this.getTaskservelist();
+  },
+
+  methods: {
+    // 鑾峰彇闂嵎鏁版嵁
+
+    //鎮h��360璺宠浆
+    gettoken360(sfzh, drcode, drname) {
+      this.postData.YeWuXX.BingRenXX.ZhengJianHM = sfzh;
+      if (this.postData.XiaoXiTou.ZuHuMC == "涓芥按甯備腑鍖婚櫌") {
+        this.postData.YeWuXX.YongHuXX.YongHuID = "1400398571877961728";
+        this.postData.YeWuXX.YongHuXX.YongHuXM = "LSZYY";
+      }
+      query360PatInfo(this.postData).then((res) => {
+        if (res.data.url) {
+          window.open(res.data.url, "_blank");
+          // this.linkUrl = res.data.url;
+        } else {
+          this.$modal.msgWarning("360鏌ヨ鏃犵粨鏋�");
+        }
+      });
+    },
+    // 鑾峰彇鍩虹淇℃伅
+    getuserinfo() {
+      const queryParams = {
+        pid: Number(this.patid),
+        allhosp: "0",
+        pageNum: 1,
+      };
+      // 鎮h�呭熀纭�淇℃伅
+      messagelistpatient(queryParams).then((response) => {
+        if (response.rows[0]) {
+          this.userform = response.rows[0];
+          // this.dynamicTags = response.rows[0].tagList.map(this.processElement);
+        }
+      });
+      listcontactinformation({ patid: this.patid }).then((response) => {
+        this.tableData = response.rows;
+        if (this.tableData.length) {
+          this.userform.relativetelcode = this.tableData[0].contactway;
+          this.userform.relation = this.tableData[0].relation;
+        }
+      });
+    },
+    // 鍐嶆闅忚鏃堕棿閫夊彇
+    visitChange(value) {
+      // 鏍规嵁閫夋嫨鐨勯殢璁挎柟寮忚缃椂闂�
+      const now = new Date();
+      if (value.includes("涓冨ぉ鍚�")) {
+        this.form.date1 = new Date(
+          Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 7
+        );
+      } else if (value.includes("15澶╁悗")) {
+        this.form.date1 = new Date(
+          Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 15
+        );
+      } else if (value.includes("涓�涓湀鍚�")) {
+        this.form.date1 = new Date(
+          Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 30
+        );
+      } else if (value.includes("涓変釜鏈堝悗")) {
+        this.form.date1 = new Date(
+          Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 90
+        );
+      } else if (value.includes("鍏釜鏈堝悗")) {
+        this.form.date1 = new Date(
+          Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 180
+        );
+      } else if (value.includes("涓�骞村悗")) {
+        this.form.date1 = new Date(
+          Date.parse(this.form.endtime) + 3600 * 1000 * 24 * 365
+        );
+      }
+    },
+
+    // 鑾峰彇璇煶鏁版嵁
+    getPersonVoices(id) {
+      let obj = {
+        taskid: this.taskid,
+        patid: this.patid,
+        subId: id ? id : this.id,
+      };
+
+      getPersonVoices(obj).then((res) => {
+        if (res.code == 200) {
+          this.voiceDatatop = res.data.serviceSubtaskDetails;
+          this.voice = res.data.voice;
+          this.activeName = "yy";
+          this.taskname = res.data.taskName;
+          // 闂嵎灞曠ず鏁版嵁澶勭悊
+          this.tableDatatop = res.data.filteredDetails;
+          this.tableDatatop.forEach((item) => {
+            if (item.targetvalue) {
+              item.scriptResult = item.targetvalue.split("&");
+            } else {
+              item.scriptResult = [];
+            }
+          });
+
+          if (!this.tableDatatop.length) {
+            this.puttaskid(this.templateid);
+          }
+        }
+      });
+    },
+    // 鑾峰彇闂嵎瀹屾暣鏁版嵁姣斿
+    puttaskid(id) {
+      getTaskFollowup(id).then((res) => {
+        if (res.code == 200) {
+          this.tableDatatop = res.data.ivrTaskTemplateScriptVOList;
+          this.tableDatatop.forEach((item) => {
+            item.id = null;
+            // 绫诲瀷鍒ゆ柇璧嬪��
+            if (item.ivrTaskScriptTargetoptionList) {
+              item.targetvalue = 1;
+              item.questiontext = item.scriptContent;
+              item.targetvalue = item.ivrTaskScriptTargetoptionList
+                .map((obj) => obj.targetvalue)
+                .join("&");
+            }
+            if (item.targetvalue) {
+              item.scriptResult = item.targetvalue.split("&");
+            } else {
+              item.scriptResult = [];
+            }
+          });
+        }
+      });
+    },
+    // 鍖绘姢浜哄憳瀛樺偍鏁版嵁
+    getdetail() {
+      let excep = "";
+      const promises = [];
+      this.tableDatatop.forEach((item) => {
+        var objs = item.svyLibTemplateTargetoptions.find(
+          (items) => items.optioncontent == item.scriptResult
+        );
+        if (obj) {
+          if (objs.isabnormal) {
+            excep = 1;
+          }
+        }
+        let obj = {
+          asrtext: null,
+          patid: this.patid,
+          subId: this.id,
+          taskid: this.taskid,
+          scriptid: item.id,
+          excep: excep,
+          questiontext: item.scriptContent,
+        };
+        if (item.scriptType == 2 && item.scriptResult[0]) {
+          obj.asrtext = item.scriptResult.join("&");
+        } else if (item.scriptType != 2 && item.scriptResult) {
+          obj.asrtext = item.scriptResult;
+        }
+
+        if (item.isoption == 3) {
+          promises.push(serviceSubtaskDetailedit(obj));
+        } else {
+          promises.push(serviceSubtaskDetailadd(obj));
+        }
+      });
+      // 浣跨敤 Promise.all 绛夊緟鎵�鏈夊紓姝ユ搷浣滃畬鎴�
+      Promise.all(promises)
+        .then((results) => {
+          // 鎵�鏈夊紓姝ユ搷浣滄垚鍔熷畬鎴愬悗鐨勯�昏緫
+          results.forEach((res) => {
+            if (res.code !== 200) {
+              this.$modal.error("淇敼澶辫触");
+            }
+          });
+          this.Editsingletasksonyic(6);
+
+          this.$modal
+            .confirm(
+              '浠诲姟淇濆瓨鎴愬姛鏄惁閽堝鎮h�咃細"' +
+                this.logsheetlist[0].sendname +
+                '"鍐嶆闅忚锛�',
+              "纭",
+              {
+                confirmButtonText: "纭畾",
+                cancelButtonText: "鍙栨秷",
+                showCancelButton: true,
+                dangerouslyUseHTMLString: true,
+                confirmButtonClass: "custom-confirm-button", // 鑷畾涔夌‘璁ゆ寜閽殑绫诲悕
+                cancelButtonClass: "custom-cancel-button", // 鑷畾涔夊彇娑堟寜閽殑绫诲悕
+              }
+            )
+            .then(() => {
+              document.querySelector("#app").scrollTo(0, 0);
+              this.formtidy();
+              this.dialogFormVisible = true;
+            })
+            .catch(() => {
+              if (this.form.serviceType == 13) {
+                if (this.visitCount) {
+                  this.$router.push({
+                    path: "/logisticsservice/zbAgain",
+                  });
+                } else {
+                  this.$router.push({
+                    path: "/logisticsservice/record",
+                  });
+                }
+              } else if (form.serviceType == 2) {
+                if (this.visitCount) {
+                  this.$router.push({
+                    path: "/followvisit/again",
+                  });
+                } else {
+                  this.$router.push({
+                    path: "/followvisit/discharge",
+                  });
+                }
+              }
+            });
+        })
+        .catch((error) => {
+          // 濡傛灉鏈変换浣曚竴涓紓姝ユ搷浣滃け璐ワ紝浼氳繘鍏ヨ繖閲�
+          console.error("鍙戠敓閿欒锛�", error);
+        });
+    },
+    // 楠岃瘉鎵嬫満鍙锋牸寮�
+    isValidPhone(phone) {
+      return /^1[3-9]\d{9}$/.test(phone);
+    },
+    // 鍛煎彨澶勭悊
+    handleCall(phone, type) {
+      if (this.isValidPhone(phone)) {
+        this.currentPhoneNumber = phone;
+        this.callType = type;
+
+        // 绛夊緟涓嬩竴涓猼ick纭繚鍊煎凡鏇存柊
+        this.$nextTick(() => {
+          this.$refs.callButton.startCall();
+
+          // 鍙�夛細鏍规嵁涓嶅悓绫诲瀷鍋氫笉鍚屽鐞�
+          if (type === "tel") {
+            console.log("姝e湪鍛煎彨鎮h�呮湰浜�:", phone);
+          } else {
+            console.log("姝e湪鍛煎彨鑱旂郴浜�:", phone);
+          }
+        });
+      }
+    },
+    yuyingetdetail() {
+      this.tableDatatop.forEach((item, index) => {
+        item.scriptResult = item.scriptResult.join("&");
+        item.templatequestionnum = index + 1;
+        item.subId = this.id;
+        item.taskid = this.taskid;
+        item.asrtext = item.matchedtext;
+        if (!item.id) {
+          item.isoperation = 1;
+        }
+        item.patid = this.patid;
+        item.templateid = item.templateID;
+      });
+      let obj = {
+        serviceSubtaskDetailList: this.tableDatatop,
+        param1: this.taskid,
+        param2: this.patid,
+        subId: this.id,
+      };
+
+      addPersonVoices(obj).then((res) => {
+        if (res.code == 200) {
+          this.$modal.msgSuccess("鏈嶅姟淇濆瓨鎴愬姛");
+          this.$modal
+            .confirm(
+              '浠诲姟淇濆瓨鎴愬姛鏄惁閽堝鎮h�咃細"' +
+                this.userform.name +
+                '"鍐嶆闅忚锛�',
+              "纭",
+              {
+                confirmButtonText: "纭畾",
+                cancelButtonText: "鍙栨秷",
+                showCancelButton: true,
+                dangerouslyUseHTMLString: true,
+                confirmButtonClass: "custom-confirm-button", // 鑷畾涔夌‘璁ゆ寜閽殑绫诲悕
+                cancelButtonClass: "custom-cancel-button", // 鑷畾涔夊彇娑堟寜閽殑绫诲悕
+              }
+            )
+            .then(() => {
+              document.querySelector("#app").scrollTo(0, 0);
+              this.formtidy();
+              this.dialogFormVisible = true;
+            })
+            .catch(() => {
+              if (this.form.serviceType == 13) {
+                if (this.visitCount) {
+                  this.$router.push({
+                    path: "/logisticsservice/zbAgain",
+                  });
+                } else {
+                  this.$router.push({
+                    path: "/logisticsservice/record",
+                  });
+                }
+              } else if (form.serviceType == 2) {
+                if (this.visitCount) {
+                  this.$router.push({
+                    path: "/followvisit/again",
+                  });
+                } else {
+                  this.$router.push({
+                    path: "/followvisit/discharge",
+                  });
+                }
+              }
+            });
+        }
+      });
+    },
+    // 鍐嶆闅忚鏁版嵁鏇存浛
+    formtidy() {
+      this.form.visitType2 = this.form.visitType;
+      this.form.date2 = this.form.longSendTime;
+      this.form.remark2 = this.form.remark;
+    },
+    // 鑾峰彇鎮h�呰褰�
+    getTaskservelist(id) {
+      if (id) {
+        this.Whetherall = false;
+      } else {
+        this.Whetherall = true;
+      }
+
+      getTaskservelist({
+        patid: this.patid,
+        subId: id,
+      }).then((res) => {
+        if (res.code == 200) {
+          this.form = res.rows[0].serviceSubtaskList.find(
+            (item) => item.id == this.id
+          );
+          if (!this.form.remark) {
+            this.form.remark = this.form.taskDesc;
+          }
+          this.logsheetlist = res.rows[0].serviceSubtaskList;
+          this.templateid = this.logsheetlist[0].templateid;
+          const targetDate = new Date(this.form.longSendTime); // 鐩爣鏃ユ湡
+          const now = new Date(); // 褰撳墠鏃堕棿
+          this.form.endtime = this.formatTime(this.form.endtime);
+          if (now < targetDate && this.form.sendstate == 2) {
+            this.$confirm("褰撳墠鏈嶅姟鏈埌鍙戦�佹椂闂磋璋ㄦ厧淇敼", "鎻愮ず", {
+              confirmButtonText: "纭畾",
+              cancelButtonText: "鍙栨秷",
+              type: "warning",
+            })
+              .then(() => {})
+              .catch(() => {});
+          }
+          this.getuserinfo();
+        }
+      });
+    },
+    Editsingletaskson(son) {
+      let objson = {};
+      getTaskservelist({
+        patid: this.patid,
+        subId: this.id,
+      }).then((res) => {
+        if (res.code == 200) {
+          objson = res.rows[0].serviceSubtaskList[0];
+          objson.suggest = son;
+          Editsingletaskson(objson).then((res) => {
+            if (res.code) {
+              this.$modal.msgSuccess("鏈嶅姟璁板綍鎴愬姛");
+              this.getTaskservelist();
+            }
+          });
+        }
+      });
+    },
+    Editsingletasksonyic(sendstate) {
+      let objson = {};
+      getTaskservelist({
+        patid: this.patid,
+        subId: this.id,
+      }).then((res) => {
+        if (res.code == 200) {
+          objson = res.rows[0].serviceSubtaskList.find(
+            (item) => item.id == this.id
+          );
+          objson.remark = this.form.remark;
+          if (sendstate) objson.sendstate = sendstate;
+          Editsingletaskson(objson).then((res) => {
+            if (res.code) {
+              this.$modal.msgSuccess("鏈嶅姟淇敼鎴愬姛");
+              alterpatient(this.userform).then((res) => {
+                if (res.code == 200) {
+                  this.$modal.msgSuccess("鍩虹淇℃伅淇濆瓨鎴愬姛");
+                } else {
+                  this.$modal.msgError("鍩虹淇℃伅淇敼澶辫触");
+                }
+              });
+              this.getTaskservelist();
+            }
+          });
+        }
+      });
+    },
+    // 寮傚父鍒楁覆鏌�
+    tableRowClassName({ row, rowIndex }) {
+      if (row.id == this.id) {
+        return "warning-row";
+      }
+      return "";
+    },
+    // 璋冭捣鍐嶆鍙戦��
+    sendAgain() {
+      document.querySelector("#app").scrollTo(0, 0);
+      // scrollTo(0, 0)
+      this.formtidy();
+      this.dialogFormVisible = true;
+    },
+    // 鏌ョ湅璇︽儏
+    Seedetails(row) {
+      this.$modal
+        .confirm('鏄惁鏌ョ湅浠诲姟涓�"' + row.taskName + '"鐨勬湇鍔¤鎯呮暟鎹紵')
+        .then(() => {
+          if (row.preachformson) {
+            if (row.preachformson.includes("3")) {
+              this.Voicetype = 1;
+            }
+          }
+          this.taskid = row.taskid;
+          this.id = row.id;
+          this.patid = row.patid;
+          this.serviceType = row.serviceType;
+          this.getTaskservelist();
+        })
+        .catch(() => {});
+    },
+    handleOptionChange(a, b, c) {
+      const result = c.find((item) => item.optioncontent == a);
+      if (result.nextQuestion == 0) {
+        this.tableDatatop = this.tableDatatop.reduce((acc, item, i) => {
+          acc.push(i > b ? { ...item, astrict: 1 } : item);
+          return acc;
+        }, []);
+      } else {
+        this.tableDatatop = this.tableDatatop.reduce((acc, item, i) => {
+          acc.push(i > b ? { ...item, astrict: 0 } : item);
+          return acc;
+        }, []);
+      }
+      if (this.Voicetype) {
+        var obj = this.tableDatatop[b].ivrTaskScriptTargetoptionList.find(
+          (item) => item.optioncontent == a
+        );
+      } else {
+        var obj = this.tableDatatop[b].svyLibTemplateTargetoptions.find(
+          (item) => item.optioncontent == a
+        );
+      }
+      if (obj.isabnormal) {
+        this.tableDatatop[b].isabnormal = true;
+      } else {
+        this.tableDatatop[b].isabnormal = false;
+      }
+      this.$forceUpdate();
+    },
+    overdata() {
+      this.tableDatatop.forEach((item, index) => {
+        var obj = item.svyLibTemplateTargetoptions.find(
+          (items) => items.optioncontent == item.scriptResult
+        );
+        if (obj) {
+          if (obj.isabnormal) {
+            this.tableDatatop[index].isabnormal = true;
+          } else {
+            this.tableDatatop[index].isabnormal = false;
+          }
+          this.$forceUpdate();
+        }
+      });
+    },
+    // 鍒涘缓鍐嶆闅忚鏈嶅姟
+    setupsubtask() {
+      this.$refs["zcform"].validate((valid) => {
+        if (valid) {
+          this.form.remark =
+            this.form.remark + "銆�" + this.getCurrentTime() + "銆�";
+          let form = structuredClone(this.form);
+          form.longSendTime = this.formatTime(form.date1);
+          form.finishtime = "";
+          if (form.resource) {
+            if (form.resource == 2) {
+              form.serviceType = 13;
+              form.visitDeptCode = localStorage.getItem("deptCode");
+              form.visitDeptName = "闅忚涓績";
+            } else {
+              form.visitDeptCode = form.deptcode;
+              form.visitDeptName = form.deptname;
+            }
+          } else {
+            this.$modal.msgError("鏈�夋嫨闅忚鏂瑰紡");
+            return;
+          }
+          // form.id = null;
+          form.sendstate = 2;
+          addserviceSubtask(form).then((res) => {
+            if (res.code == 200) {
+              this.$modal.msgSuccess("鍒涘缓鎴愬姛");
+              if (form.serviceType == 13) {
+                this.$router.push({
+                  path: "/logisticsservice/again",
+                });
+              } else if (form.serviceType == 2) {
+                this.$router.push({
+                  path: "/logisticsservice/zbAgain",
+                });
+              }
+            } else {
+              this.$modal.msgError("鍒涘缓澶辫触");
+            }
+            document.querySelector("#app").scrollTo(0, 0);
+            this.dialogFormVisible = false;
+          });
+        }
+      });
+    },
+    getCurrentTime() {
+      const now = new Date();
+      const year = now.getFullYear();
+      const month = String(now.getMonth() + 1).padStart(2, "0");
+      const day = String(now.getDate()).padStart(2, "0");
+      const hours = String(now.getHours()).padStart(2, "0");
+      const minutes = String(now.getMinutes()).padStart(2, "0");
+      const seconds = String(now.getSeconds()).padStart(2, "0");
+
+      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+    },
+    updateScore(a, b, c) {},
+  },
+};
+</script>
+
+<style lang="scss">
+.Followupdetailspage {
+  margin: 10px;
+}
+.Followuserinfo {
+  margin: 20px 10px;
+  align-items: center;
+  padding: 30px;
+  background: #ffff;
+  border: 1px solid #dcdfe6;
+  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+    0 0 6px 0 rgba(0, 0, 0, 0.04);
+  .userinfo-text {
+    font-size: 20px;
+    margin-right: 20px;
+    margin-bottom: 10px;
+  }
+  .userinfo-value {
+    color: rgb(15, 139, 211);
+    span {
+      margin-right: 20px;
+    }
+  }
+}
+::v-deep.el-table .warning-row {
+  background: #c4e2ee;
+}
+.Followuserinfos {
+  margin: 20px 10px;
+  align-items: center;
+  padding: 30px;
+  background: #ffff;
+  border: 1px solid #dcdfe6;
+  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+    0 0 6px 0 rgba(0, 0, 0, 0.04);
+  .userinfo-text {
+    font-size: 20px;
+    margin-right: 20px;
+    margin-bottom: 10px;
+  }
+  .userinfo-value {
+    color: rgb(15, 139, 211);
+    span {
+      margin-right: 20px;
+    }
+  }
+}
+.borderdiv {
+  min-height: 60vh;
+  font-size: 20px;
+  padding: 30px;
+  .title {
+    font-size: 22px;
+    font-weight: bold;
+    margin-bottom: 20px;
+    text-align: center;
+  }
+  .leftside {
+    margin: 30px 0;
+    span {
+      width: 400px;
+      margin-left: 20px;
+      padding: 10px;
+      color: #fff;
+      background: rgb(110, 196, 247);
+      border-radius: 10px;
+    }
+  }
+  .offside {
+    display: flex;
+    flex-direction: row-reverse;
+    .offside-value {
+      padding: 10px;
+      background: rgb(217, 173, 253);
+      border-radius: 10px;
+      color: #fff;
+      margin-right: 20px;
+    }
+  }
+}
+.CONTENT {
+  padding: 10px;
+  .title {
+    font-size: 22px;
+    font-weight: bold;
+    margin-bottom: 20px;
+    text-align: center;
+  }
+}
+.preview-left {
+  margin: 20px;
+  //   margin: 20px;
+  padding: 30px;
+  // background: #ffff;
+  border: 1px solid #dcdfe6;
+  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+    0 0 6px 0 rgba(0, 0, 0, 0.04);
+  .topic-dev {
+    margin-bottom: 25px;
+    font-size: 20px !important;
+    .dev-text {
+      margin-bottom: 10px;
+    }
+  }
+}
+.scriptTopic-isabnormal {
+  color: red;
+}
+.detailed {
+  width: 88%;
+  border-radius: 8px;
+  padding: 30px;
+  margin-bottom: 30px;
+  background-color: #ddf0f8;
+  .bg-purple {
+    margin-bottom: 20px;
+  }
+  .spanvalue {
+    display: inline-block;
+    min-width: 200px;
+    border-bottom: 1px solid rgb(172, 172, 172);
+  }
+}
+.headline {
+  font-size: 24px;
+  height: 40px;
+  border-left: 5px solid #41a1be;
+  padding-left: 5px;
+  margin-bottom: 10px;
+  display: flex;
+  // justify-content: space-between;
+  .Add-details {
+    font-size: 18px;
+    color: #02a7f0;
+    cursor: pointer;
+  }
+}
+.red-star {
+  ::v-deep.el-radio__label {
+    position: relative;
+    padding-right: 10px; /* 鏍规嵁闇�瑕佽皟鏁� */
+  }
+  ::v-deep.el-radio__label::after {
+    content: "*";
+    color: red;
+    position: absolute;
+    right: -5px; /* 鏍规嵁闇�瑕佽皟鏁� */
+    top: 0;
+  }
+  ::v-deep.el-input-group__textarea {
+    white-space: pre-wrap; /* 淇濇寔绌虹櫧绗﹀簭鍒楀苟姝e父鎹㈣ */
+    word-break: break-all; /* 鍦ㄩ暱鍗曡瘝鎴朥RL鍦板潃鍐呴儴杩涜鎹㈣ */
+  }
+  ::v-deep.el-checkbox__label {
+    position: relative;
+    padding-right: 10px; /* 鏍规嵁闇�瑕佽皟鏁� */
+  }
+  ::v-deep.el-checkbox__label::after {
+    content: "*";
+    color: red;
+    position: absolute;
+    right: -5px; /* 鏍规嵁闇�瑕佽皟鏁� */
+    top: 0;
+  }
+}
+::v-deep.offside-value .el-radio__label {
+  color: #fff;
+}
+::v-deep.el-link.el-link--default {
+  color: #02a7f0 !important;
+}
+.el-message-box__btns button:nth-child(2) {
+  margin-left: 10px;
+  background-color: #f57676;
+  border-color: #f57676;
+}
+.el-icon-phone {
+  transition: all 0.3s;
+}
+.el-button[disabled] .el-icon-phone {
+  color: #c0c4cc;
+}
+.el-button:not([disabled]) .el-icon-phone {
+  color: #409eff;
+}
+.el-button:not([disabled]):hover .el-icon-phone {
+  color: #66b1ff;
+  transform: scale(1.1);
+}
+.mulsz {
+  font-size: 25px;
+  margin-top: 20px;
+}
+.el-input.is-disabled .el-input__inner {
+  background-color: #fff; /* 鑳屾櫙棰滆壊 */
+  border-color: #dcdfe6; /* 杈规棰滆壊 */
+  color: #080808 !important; /* 鏂囧瓧棰滆壊 */
+  cursor: not-allowed; /* 榧犳爣鏍峰紡 */
+}
+.el-textarea.is-disabled .el-textarea__inner {
+  background-color: #fff; /* 鑳屾櫙棰滆壊 */
+  border-color: #dcdfe6; /* 杈规棰滆壊 */
+  color: #080808 !important; /* 鏂囧瓧棰滆壊 */
+  cursor: not-allowed; /* 榧犳爣鏍峰紡 */
+}
+</style>
diff --git a/src/views/followvisit/satisfaction/index.vue b/src/views/followvisit/satisfaction/index.vue
index 1a45f3c..59915c3 100644
--- a/src/views/followvisit/satisfaction/index.vue
+++ b/src/views/followvisit/satisfaction/index.vue
@@ -11,44 +11,23 @@
         v-show="showSearch"
         label-width="98px"
       >
-        <el-form-item label="浠诲姟鍚嶇О">
-          <el-input v-model="topqueryParams.name"></el-input>
+        <el-form-item label="鐥呭尯鍚嶇О">
+          <el-input
+            placeholder="璇疯緭鍏ユ偅鑰呯梾鍖�"
+            v-model="topqueryParams.hospitaldistrictname"
+          ></el-input>
         </el-form-item>
-        <el-form-item label="鍙戣捣浜�">
-          <el-input v-model="topqueryParams.name"></el-input>
+        <el-form-item label="绉戝鍚嶇О">
+          <el-input
+            placeholder="璇疯緭鍏ユ偅鑰呯瀹�"
+            v-model="topqueryParams.deptname"
+          ></el-input>
         </el-form-item>
-        <el-form-item label="鍙戣捣鏃堕棿">
-          <el-date-picker
-            v-model="dateRange"
-            style="width: 240px"
-            value-format="yyyy-MM-dd"
-            type="daterange"
-            range-separator="-"
-            start-placeholder="寮�濮嬫棩鏈�"
-            end-placeholder="缁撴潫鏃ユ湡"
-          ></el-date-picker>
-        </el-form-item>
-        <el-form-item label="璋冩煡绫诲瀷" prop="status">
-          <el-select v-model="topqueryParams.topic" placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="item in topicoptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="璋冩煡鐘舵��" prop="status">
-          <el-select v-model="topqueryParams.topic" placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="item in topicoptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
-          </el-select>
+        <el-form-item label="鎮h�呭悕绉�">
+          <el-input
+            placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
+            v-model="topqueryParams.patName"
+          ></el-input>
         </el-form-item>
         <el-form-item>
           <el-button
@@ -66,51 +45,6 @@
       <el-divider></el-divider>
       <el-row :gutter="10" class="mb8">
         <el-col :span="1.5">
-          <el-select v-model="tasktopic" placeholder="璇烽�夋嫨鏂板绫诲瀷">
-            <el-option
-              v-for="item in taskoptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
-          </el-select>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="primary"
-            icon="el-icon-plus"
-            size="medium"
-            :disabled="!tasktopic"
-            @click="handleAdd"
-            >鏂板</el-button
-          >
-        </el-col>
-        <el-col :span="1.5">
-          <el-button
-            type="success"
-            plain
-            icon="el-icon-edit"
-            size="medium"
-            :disabled="single"
-            @click="handleUpdate"
-            v-hasPermi="['system:user:edit']"
-            >淇敼</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
@@ -119,7 +53,6 @@
                 icon="el-icon-download"
                 size="medium"
                 @click="handleExport"
-                v-hasPermi="['system:user:export']"
                 >瀵煎嚭</el-button
               >
             </div>
@@ -138,146 +71,255 @@
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="50" align="center" />
-        <el-table-column
-          label="搴忓彿"
-          align="center"
-          key="userId"
-          prop="userId"
-        />
+        <el-table-column label="缂栧彿" align="center" key="id" prop="id" />
 
         <el-table-column
-          label="浣忛櫌缂栧彿"
+          label="鐥呭尯"
           align="center"
-          sortable
-          key="userName"
-          prop="userName"
+          width="120"
+          key="hospitaldistrictname"
+          prop="hospitaldistrictname"
+          :show-overflow-tooltip="true"
+        />
+        <el-table-column
+          label="绉戝"
+          width="120"
+          align="center"
+          key="deptname"
+          prop="deptname"
           :show-overflow-tooltip="true"
         />
         <el-table-column
           label="濮撳悕"
-          width="100"
           align="center"
+          key="patName"
+          prop="patName"
+          width="120"
+        />
+        <el-table-column
+          label="鑱旂郴鐢佃瘽"
+          align="center"
+          key="phone"
+          prop="phone"
+          width="150"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          label="鐪熷疄鎬�(20)"
+          align="center"
+          key="authenticity"
+          prop="authenticity"
           sortable
-          key="userName"
-          prop="userName"
-          :show-overflow-tooltip="true"
-        />
-        <el-table-column
-          label="骞撮緞"
-          align="center"
-          key="age"
-          prop="age"
           width="120"
-        />
-        <el-table-column
-          label="璋冩煡妯℃澘"
-          align="center"
-          key="types"
-          prop="types"
-        />
-        <el-table-column
-          label="璋冩煡绫诲瀷"
-          align="center"
-          key="types"
-          prop="types"
-        />
-        <el-table-column
-          label="璋冩煡鍐呭"
-          align="center"
-          key="nickName"
-          prop="nickName"
-        />
-        <el-table-column
-          label="浣忛櫌鐥呭尯"
-          align="center"
-          key="nickName"
-          prop="nickName"
-        />
-        <el-table-column
-          label="搴婂彿"
-          align="center"
-          key="nickName"
-          prop="nickName"
-        />
-        <el-table-column
-          label="涓绘不鍖荤敓"
-          align="center"
-          key="nickName"
-          prop="nickName"
-        />
-        <el-table-column
-          label="绠″簥鎶ゅ+"
-          align="center"
-          key="nickName"
-          prop="nickName"
-        />
-
-        <el-table-column
-          label="鎵ц鐘舵��"
-          align="center"
-          key="topicnumber"
-          prop="topicnumber"
-          width="120"
-          :show-overflow-tooltip="true"
         >
           <template slot-scope="scope">
-            <div>鎵ц瀹屾垚/鎵ц澶辫触</div>
+            <el-input-number
+              v-if="scope.row.editing"
+              v-model="scope.row.authenticity"
+              :min="0"
+              :max="20"
+              size="small"
+              controls-position="right"
+            />
+            <span v-else>{{ scope.row.authenticity }}</span>
           </template>
         </el-table-column>
         <el-table-column
-          label="璇婃柇"
+          label="涓�鍛ㄥ唴瀹屾垚(20)"
           align="center"
-          key="topicnumberaa"
-          prop="topicnumberaa"
+          key="weekFinish"
+          prop="weekFinish"
           sortable
+          width="150"
+        >
+          <template slot-scope="scope">
+            <el-input-number
+              v-if="scope.row.editing"
+              v-model="scope.row.weekFinish"
+              :min="0"
+              :max="20"
+              size="small"
+              controls-position="right"
+            />
+            <span v-else>{{ scope.row.weekFinish }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="瑙勮寖鎬�(10)"
+          align="center"
+          key="standard"
+          prop="standard"
           width="120"
-          :show-overflow-tooltip="true"
-        />
+          sortable
+        >
+          <template slot-scope="scope">
+            <el-input-number
+              v-if="scope.row.editing"
+              v-model="scope.row.standard"
+              :min="0"
+              :max="20"
+              size="small"
+              controls-position="right"
+            />
+            <span v-else>{{ scope.row.standard }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="鍙婃椂鎬�(10)"
+          align="center"
+          key="timeliness"
+          prop="timeliness"
+          sortable
+          width="150"
+        >
+          <template slot-scope="scope">
+            <el-input-number
+              v-if="scope.row.editing"
+              v-model="scope.row.timeliness"
+              :min="0"
+              :max="20"
+              size="small"
+              controls-position="right"
+            />
+            <span v-else>{{ scope.row.timeliness }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="瀹f暀鎯呭喌(10)"
+          align="center"
+          key="library"
+          prop="library"
+          sortable
+          width="150"
+        >
+          <template slot-scope="scope">
+            <el-input-number
+              v-if="scope.row.editing"
+              v-model="scope.row.library"
+              :min="0"
+              :max="20"
+              size="small"
+              controls-position="right"
+            />
+            <span v-else>{{ scope.row.library }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="鐜婊℃剰搴�(10)"
+          align="center"
+          key="environment"
+          prop="environment"
+          sortable
+          width="150"
+        >
+          <template slot-scope="scope">
+            <el-input-number
+              v-if="scope.row.editing"
+              v-model="scope.row.environment"
+              :min="0"
+              :max="20"
+              size="small"
+              controls-position="right"
+            />
+            <span v-else>{{ scope.row.environment }}</span>
+          </template>
+        </el-table-column>
 
         <el-table-column
-          label="鍏ラ櫌鏃堕棿"
-          sortable
+          label="鍖荤敓婊℃剰搴�(10)"
           align="center"
+          key="doctorSatisfaction"
+          prop="doctorSatisfaction"
+          width="150"
+          sortable
+        >
+          <template slot-scope="scope">
+            <el-input-number
+              v-if="scope.row.editing"
+              v-model="scope.row.doctorSatisfaction"
+              :min="0"
+              :max="20"
+              size="small"
+              controls-position="right"
+            />
+            <span v-else>{{ scope.row.doctorSatisfaction }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="鎶ゅ+婊℃剰搴�(10)"
+          align="center"
+          key="nurseSatisfaction"
+          prop="nurseSatisfaction"
+          width="150"
+          sortable
+        >
+          <template slot-scope="scope">
+            <el-input-number
+              v-if="scope.row.editing"
+              v-model="scope.row.nurseSatisfaction"
+              :min="0"
+              :max="20"
+              size="small"
+              controls-position="right"
+            />
+            <span v-else>{{ scope.row.nurseSatisfaction }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="鎬诲垎"
+          fixed="right"
+          align="center"
+          key="total"
+          prop="total"
+          sortable
+        >
+        </el-table-column>
+        <el-table-column
+          label="瀹屾垚鏃ユ湡"
+          fixed="right"
+          width="150"
+          align="center"
+          key="createTime"
           prop="createTime"
-          width="160"
+          sortable
         >
-          <template slot-scope="scope">
-            <span>{{ formatTime(scope.row.createTime) }}</span>
-          </template>
         </el-table-column>
+
         <el-table-column
-          label="浠诲姟璇︽儏"
+          label="鎿嶄綔"
           align="center"
+          fixed="right"
           width="200"
           class-name="small-padding fixed-width"
         >
           <template slot-scope="scope">
             <el-button
+              v-if="!scope.row.editing"
               size="medium"
               type="text"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['system:user:edit']"
-              ><span class="button-xq"
-                ><i class="el-icon-s-data"></i>璇︽儏</span
-              ></el-button
-            >
-            <el-button
-              size="medium"
-              type="text"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['system:user:edit']"
-              ><span class="button-bb"
-                ><i class="el-icon-s-order"></i>鎶ヨ〃</span
-              ></el-button
-            >
-            <el-button
-              size="medium"
-              type="text"
-              @click="handleUpdate(scope.row)"
-              v-hasPermi="['system:user:edit']"
-              ><span class="button-sc"
+              @click="handleDelete(scope.row)"
+              ><span class="button-zx"
                 ><i class="el-icon-delete"></i>鍒犻櫎</span
               ></el-button
+            >
+            <el-button
+              size="medium"
+              type="text"
+              @click="toggleEdit(scope.row, scope.$index)"
+            >
+              <span class="button-textxga">
+                <i
+                  :class="scope.row.editing ? 'el-icon-check' : 'el-icon-edit'"
+                ></i>
+                {{ scope.row.editing ? "淇濆瓨" : "缂栬緫" }}
+              </span>
+            </el-button>
+            <el-button
+              v-if="scope.row.editing"
+              size="medium"
+              type="text"
+              @click="handleCancel(scope.row, scope.$index)"
+              >鍙栨秷</el-button
             >
           </template>
         </el-table-column>
@@ -291,73 +333,16 @@
         @pagination="getList"
       />
     </el-row>
-    <!-- 娣诲姞鎴栦慨鏀瑰奖鍍忛殢璁垮璇濇 -->
-    <el-dialog
-      :title="title"
-      :visible.sync="addalteropen"
-      width="700px"
-      append-to-body
-    >
-      <el-form ref="form" :model="form" label-width="100px">
-        <el-row :gutter="20">
-          <el-col :span="12"
-            ><el-form-item label="浠诲姟鍚嶇О">
-              <el-input v-model="form.name"></el-input> </el-form-item
-          ></el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="24"
-            ><el-form-item label="鎵�灞炵瀹�">
-              <el-select v-model="form.region" placeholder="璇烽�夋嫨绉戝">
-                <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
-                <el-option label="鍖哄煙浜�" value="beijing"></el-option>
-              </el-select> </el-form-item></el-col
-        ></el-row>
-        <el-row :gutter="20">
-          <el-col :span="24"
-            ><el-form-item label="闅忚绫诲瀷">
-              <el-select v-model="form.region" placeholder="璇烽�夋嫨闅忚绫诲瀷">
-                <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
-                <el-option label="鍖哄煙浜�" value="beijing"></el-option>
-              </el-select> </el-form-item
-          ></el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="24">
-            <el-form-item label="鏈嶅姟妯″潡">
-              <el-select v-model="form.region" placeholder="璇烽�夋嫨妯″潡">
-                <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
-                <el-option label="鍖哄煙浜�" value="beijing"></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="24">
-            <el-form-item label="褰卞儚闅忚瑕佹眰">
-              <el-input type="textarea" v-model="form.desc"></el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">鎻� 浜�</el-button>
-        <el-button @click="cancel">杩� 鍥�</el-button>
-      </div>
-    </el-dialog>
   </div>
 </template>
 
 <script>
 import {
-  listUser,
-  getUser,
-  delUser,
-  addUser,
-  updateUser,
-  resetUserPwd,
+  listsatisfaction,
+  delsatisfaction,
+  updatesatisfaction,
   changeUserStatus,
-} from "@/api/system/user";
+} from "@/api/AiCentre/index";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 
@@ -426,58 +411,7 @@
       value: [],
       list: [],
       loading: false,
-      states: [
-        "Alabama",
-        "Alaska",
-        "Arizona",
-        "Arkansas",
-        "California",
-        "Colorado",
-        "Connecticut",
-        "Delaware",
-        "Florida",
-        "Georgia",
-        "Hawaii",
-        "Idaho",
-        "Illinois",
-        "Indiana",
-        "Iowa",
-        "Kansas",
-        "Kentucky",
-        "Louisiana",
-        "Maine",
-        "Maryland",
-        "Massachusetts",
-        "Michigan",
-        "Minnesota",
-        "Mississippi",
-        "Missouri",
-        "Montana",
-        "Nebraska",
-        "Nevada",
-        "New Hampshire",
-        "New Jersey",
-        "New Mexico",
-        "New York",
-        "North Carolina",
-        "North Dakota",
-        "Ohio",
-        "Oklahoma",
-        "Oregon",
-        "Pennsylvania",
-        "Rhode Island",
-        "South Carolina",
-        "South Dakota",
-        "Tennessee",
-        "Texas",
-        "Utah",
-        "Vermont",
-        "Virginia",
-        "Washington",
-        "West Virginia",
-        "Wisconsin",
-        "Wyoming",
-      ],
+      states: [],
       pickerOptions: {
         disabledDate(time) {
           return time.getTime() > Date.now();
@@ -610,13 +544,11 @@
     /** 鏌ヨ褰卞儚闅忚鍒楄〃 */
     getList() {
       this.loading = true;
-      listUser(this.addDateRange(this.topqueryParams, this.dateRange)).then(
-        (response) => {
-          this.userList = response.rows;
-          this.total = response.total;
-          this.loading = false;
-        }
-      );
+      listsatisfaction(this.topqueryParams).then((response) => {
+        this.userList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
     },
     // 鏌ョ湅褰卞儚闅忚璇︽儏
     Referencequestion(row) {
@@ -635,21 +567,6 @@
       } else {
         this.options = [];
       }
-    },
-    // 褰卞儚闅忚鐘舵�佷慨鏀�
-    handleStatusChange(row) {
-      let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
-      this.$modal
-        .confirm('纭瑕�"' + text + '""' + row.userName + '"鐢ㄦ埛鍚楋紵')
-        .then(function () {
-          return changeUserStatus(row.userId, row.status);
-        })
-        .then(() => {
-          this.$modal.msgSuccess(text + "鎴愬姛");
-        })
-        .catch(function () {
-          row.status = row.status === "0" ? "1" : "0";
-        });
     },
     // 鍙栨秷鎸夐挳
     cancel() {
@@ -721,43 +638,46 @@
         path: "/Intelligentcenter/satisfaction/particulars",
         query: { type: this.tasktopic },
       });
-      // getUser().then((response) => {
-      //   this.postOptions = response.posts;
-      //   this.roleOptions = response.roles;
-      //   this.title = "鏂板褰卞儚闅忚";
-      //   this.form.password = this.initPassword;
-      // });
     },
     /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const userId = row.userId || this.ids;
-      getUser(userId).then((response) => {
-        this.form = response.data;
-        this.postOptions = response.posts;
-        this.roleOptions = response.roles;
-        this.$set(this.form, "postIds", response.postIds);
-        this.$set(this.form, "roleIds", response.roleIds);
-        this.addalteropen = true;
-        this.title = "淇敼鐢ㄦ埛";
-        this.form.password = "";
-      });
-    },
-    /** 閲嶇疆瀵嗙爜鎸夐挳鎿嶄綔 */
-    handleResetPwd(row) {
-      this.$prompt('璇疯緭鍏�"' + row.userName + '"鐨勬柊瀵嗙爜', "鎻愮ず", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        closeOnClickModal: false,
-        inputPattern: /^.{5,20}$/,
-        inputErrorMessage: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿",
-      })
-        .then(({ value }) => {
-          resetUserPwd(row.userId, value).then((response) => {
-            this.$modal.msgSuccess("淇敼鎴愬姛锛屾柊瀵嗙爜鏄細" + value);
+    toggleEdit(row, index) {
+      if (row.editing) {
+        // 淇濆瓨閫昏緫
+        updatesatisfaction(row).then((response) => {
+          this.$modal.msgSuccess("淇敼鎴愬姛");
+          this.$set(this.userList, index, {
+            ...row,
+            editing: false,
+            // 璁$畻鎬诲垎
+            total: this.calculateTotal(row),
           });
-        })
-        .catch(() => {});
+        });
+
+        // 杩欓噷鍙互娣诲姞API璋冪敤淇濆瓨鏁版嵁
+      } else {
+        // 杩涘叆缂栬緫妯″紡
+        this.$set(this.userList, index, {
+          ...row,
+          editing: true,
+          // 淇濆瓨鍘熷鏁版嵁鐢ㄤ簬鍙兘鐨勫彇娑堟搷浣�
+          originalData: { ...row },
+        });
+      }
+    },
+    handleCancel(row, index) {
+      this.$set(this.userList, index, row.originalData);
+    },
+    calculateTotal(row) {
+      return (
+        (row.authenticity || 0) +
+        (row.weekFinish || 0) +
+        (row.standard || 0) +
+        (row.timeliness || 0) +
+        (row.library || 0) +
+        (row.environment || 0) +
+        (row.doctorSatisfaction || 0) +
+        (row.nurseSatisfaction || 0)
+      );
     },
 
     /** 鎻愪氦鎸夐挳 */
@@ -765,14 +685,8 @@
       this.$refs["form"].validate((valid) => {
         if (valid) {
           if (this.form.userId != undefined) {
-            updateUser(this.form).then((response) => {
+            updatesatisfaction(this.form).then((response) => {
               this.$modal.msgSuccess("淇敼鎴愬姛");
-              this.open = false;
-              this.getList();
-            });
-          } else {
-            addUser(this.form).then((response) => {
-              this.$modal.msgSuccess("鏂板鎴愬姛");
               this.open = false;
               this.getList();
             });
@@ -782,11 +696,11 @@
     },
     /** 鍒犻櫎鎸夐挳鎿嶄綔 */
     handleDelete(row) {
-      const userIds = row.userId || this.ids;
+      const userIds = row.id || this.ids;
       this.$modal
-        .confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�')
+        .confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + row.patName + '"鐨勬暟鎹」锛�')
         .then(function () {
-          return delUser(userIds);
+          return delsatisfaction(userIds);
         })
         .then(() => {
           this.getList();
@@ -797,7 +711,7 @@
     /** 瀵煎嚭鎸夐挳鎿嶄綔 */
     handleExport() {
       this.download(
-        "system/user/export",
+        "smartor/satisfaction/export",
         {
           ...this.topqueryParams,
         },
@@ -909,11 +823,22 @@
   font-weight: 500;
   color: #dd302a;
 }
+// .button-zx {
+//   background: #e94f4f;
+//   padding: 5px;
+//   border-radius: 1px;
+//   color: #ffffff;
+// }
+.el-table .cell .el-input-number {
+  width: 100%;
+}
+
+/* 鎸夐挳鏍峰紡 */
 .button-zx {
-  background: #4fabe9;
-  padding: 5px;
-  border-radius: 1px;
-  color: #ffffff;
+  color: #f56c6c;
+}
+.button-textxga {
+  color: #409eff;
 }
 
 ::v-deep.el-radio-group {
diff --git a/src/views/followvisit/technology/index.vue b/src/views/followvisit/technology/index.vue
index 5697c8b..dde2ab3 100644
--- a/src/views/followvisit/technology/index.vue
+++ b/src/views/followvisit/technology/index.vue
@@ -823,10 +823,10 @@
           name: "寰呴殢璁�",
           value: 0,
         },
-        {
-          name: "宸插彂閫�",
-          value: 0,
-        },
+        // {
+        //   name: "宸插彂閫�",
+        //   value: 0,
+        // },
 
         // {
         //   name: "琛ㄥ崟宸插彂閫�",
@@ -999,7 +999,7 @@
           this.ycvalue = response.rows[0].yc;
           this.cardlist[2].value = response.rows[0].fssb;
           this.cardlist[3].value = response.rows[0].dsf;
-          this.cardlist[4].value = response.rows[0].yfs2;
+          // this.cardlist[4].value = response.rows[0].yfs2;
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
@@ -1061,7 +1061,7 @@
           this.ycvalue = response.rows[0].yc;
           this.cardlist[3].value = response.rows[0].fssb;
           this.cardlist[4].value = response.rows[0].dsf;
-          this.cardlist[5].value = response.rows[0].yfs2;
+          // this.cardlist[5].value = response.rows[0].yfs2;
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
diff --git a/src/views/followvisit/zbAgain/index.vue b/src/views/followvisit/zbAgain/index.vue
index 624a23d..e53487e 100644
--- a/src/views/followvisit/zbAgain/index.vue
+++ b/src/views/followvisit/zbAgain/index.vue
@@ -929,10 +929,10 @@
           name: "寰呴殢璁�",
           value: 0,
         },
-        {
-          name: "宸插彂閫�",
-          value: 0,
-        },
+        // {
+        //   name: "宸插彂閫�",
+        //   value: 0,
+        // },
 
         // {
         //   name: "琛ㄥ崟宸插彂閫�",
@@ -1157,7 +1157,7 @@
           this.ycvalue = response.rows[0].yc;
           this.cardlist[2].value = response.rows[0].fssb;
           this.cardlist[3].value = response.rows[0].dsf;
-          this.cardlist[4].value = response.rows[0].yfs2;
+          // this.cardlist[4].value = response.rows[0].yfs2;
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
@@ -1237,7 +1237,7 @@
           this.ycvalue = response.rows[0].yc;
           this.cardlist[3].value = response.rows[0].fssb;
           this.cardlist[4].value = response.rows[0].dsf;
-          this.cardlist[5].value = response.rows[0].yfs2;
+          // this.cardlist[5].value = response.rows[0].yfs2;
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
diff --git a/src/views/index.vue b/src/views/index.vue
index 984673c..d76be1a 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -105,13 +105,13 @@
                 ></el-radio-button>
               </el-radio-group>
             </div>
-            <!-- 涓棿echars -->
+            <!-- 涓儴绾挎�ф煴鐘跺浘 -->
             <div class="boxEchars">
               <div class="echars1" id="echars"></div>
             </div>
           </div>
         </el-col>
-        <!-- 涓棿鍜屽彸杈� -->
+        <!-- 鍙宠竟鍒楄〃 -->
         <el-col :span="4" class="aside">
           <div class="grid-content bg-purple" style="margin-top: -180px">
             <div class="title">
@@ -134,9 +134,7 @@
                 ></el-table-column>
 
                 <el-table-column prop="rc" class-name="rc">
-                  <template slot-scope="scope">
-                    {{ scope.row.rc }}娆�
-                  </template>
+                  <template slot-scope="scope"> {{ scope.row.rc }}娆� </template>
                 </el-table-column>
               </el-table>
             </div>
@@ -292,7 +290,7 @@
   getechartsListCountdata,
   getechartsMedOuthospList,
   getechartsMedInhospList,
-  getechartsandData,
+  getServiceStatistics,
   getDeptRanking,
 } from "@/api/AiCentre/index";
 import dayjs from "dayjs";
@@ -308,8 +306,13 @@
       mypPieCharts: null,
       lastWidth: window.innerWidth,
       lastHeight: window.innerHeight,
-      radio1: "鍛�",
+      radio1: "鏈�",
       ticketStatistics: {},
+      timeTypeMap: {
+        鍛�: "day",
+        鏈�: "month",
+        骞�: "year",
+      },
       DischargeData: {
         rs: "",
         rc: "",
@@ -352,7 +355,7 @@
     this.getgraphdata();
     this.getranking();
     this.$nextTick(function () {
-      this.getregionAmountCollect();
+      this.myEcharts2();
       this.getnodeCollect();
       this.getSkuTop();
     });
@@ -379,7 +382,7 @@
       this.getgraphdata();
       this.getranking();
       this.getTopdata();
-      this.getregionAmountCollect();
+      this.myEcharts2();
       this.getnodeCollect();
       this.getSkuTop();
     },
@@ -396,15 +399,15 @@
     },
     // top鎺掕
     async getSkuTop() {
-       let Rankingdata = {
+      let Rankingdata = {
         startDate: this.endatd,
         endDate: this.statd,
         cy: 1,
       };
       await getDeptRanking(Rankingdata).then((res) => {
         if (res.code == 200) {
-          this.SkuTop=res.rows.sort((a, b) => b.rc - a.rc);
-          console.log(this.SkuTop,'this.SkuTop');
+          this.SkuTop = res.rows.sort((a, b) => b.rc - a.rc);
+          console.log(this.SkuTop, "this.SkuTop");
         }
       });
 
@@ -451,26 +454,141 @@
         }
       });
     },
-    // 鑾峰彇灏辫瘖鏁伴噺
-    getranking() {
-
-    },
     // 鑾峰彇涓儴绾挎煴鍥炬暟鎹�
-    getgraphdata() {
-      let Outhospdata = {
+    getranking() {},
+
+    async getgraphdata() {
+      let params = {
         startDate: this.endatd,
         endDate: this.statd,
-        cy: 1,
+        timeType:
+          this.radio1 === "鍛�"
+            ? "day"
+            : this.radio1 === "鏈�"
+            ? "month"
+            : "year",
       };
-      let Inhospdata = {
-        startDate: this.endatd,
-        endDate: this.statd,
-        cy: 1,
+
+      try {
+        const res = await getServiceStatistics(params);
+        if (res.code === 200) {
+          this.processChartData(res.data);
+        }
+      } catch (error) {
+        console.error("鑾峰彇鍥捐〃鏁版嵁澶辫触:", error);
+      }
+    },
+    processChartData(data) {
+      // 鎸夋椂闂存帓搴忕‘淇濇暟鎹『搴忔纭�
+      const sortedData = [...data].sort(
+        (a, b) => new Date(a.timePeriod) - new Date(b.timePeriod)
+      );
+
+      const xAxisData = [];
+      const dischargeFollowData = [];
+      const outpatientFollowData = [];
+      const pmiData = [];
+      const pmoData = [];
+
+      sortedData.forEach((item) => {
+        // 鏍规嵁鏃堕棿绫诲瀷鏍煎紡鍖栨樉绀�
+        let timeLabel = item.timePeriod;
+        if (this.radio1 === "鍛�") {
+          timeLabel = dayjs(item.timePeriod).format("MM-DD");
+        } else if (this.radio1 === "鏈�") {
+          timeLabel = item.timePeriod.split("-")[1] + "鏈�";
+        } else {
+          timeLabel = item.timePeriod.split("-")[0] + "骞�";
+        }
+
+        xAxisData.push(timeLabel);
+        dischargeFollowData.push(item.dischargeFollowCount);
+        outpatientFollowData.push(item.outpatientFollowCount);
+        pmiData.push(item.pmiCount);
+        pmoData.push(item.pmoCount);
+      });
+
+      // 鏇存柊鍥捐〃
+      this.updateChart(
+        xAxisData,
+        dischargeFollowData,
+        outpatientFollowData,
+        pmiData,
+        pmoData
+      );
+    },
+    updateChart(
+      xAxisData,
+      dischargeFollowData,
+      outpatientFollowData,
+      pmiData,
+      pmoData
+    ) {
+      if (!this.myChart2) {
+        this.myEcharts2();
+        return;
+      }
+
+      // 璁$畻闅忚閲忕殑鏈�澶у��
+      const maxFollow = Math.max(
+        ...dischargeFollowData,
+        ...outpatientFollowData
+      );
+      // 璁$畻鏈嶅姟浜烘鐨勬渶澶у��
+      const maxService = Math.max(...pmiData, ...pmoData);
+
+      // 鍔ㄦ�佽绠梚nterval鍊�
+      const followInterval = this.calculateOptimalInterval(maxFollow);
+      const serviceInterval = this.calculateOptimalInterval(maxService);
+
+      const option = {
+        xAxis: {
+          data: xAxisData,
+        },
+        yAxis: [
+          {
+            interval: followInterval,
+            max: Math.ceil(maxFollow / followInterval) * followInterval,
+          },
+          {
+            interval: serviceInterval,
+            max: Math.ceil(maxService / serviceInterval) * serviceInterval,
+          },
+        ],
+        series: [
+          { data: dischargeFollowData },
+          { data: outpatientFollowData },
+          { data: pmiData },
+          { data: pmoData },
+        ],
       };
-      getechartsMedOuthospList(Outhospdata).then((res) => {});
-      getechartsMedInhospList(Inhospdata).then((res) => {});
+
+      this.myChart2.setOption(option);
     },
 
+    // 璁$畻鏈�浼樼殑interval鍊�
+    calculateOptimalInterval(maxValue) {
+      if (maxValue <= 0) return 50; // 榛樿鍊�
+
+      // 鏍规嵁鏈�澶у�艰绠楀悎閫傜殑闂撮殧
+      const magnitude = Math.pow(10, Math.floor(Math.log10(maxValue)));
+      const stepRatio = maxValue / magnitude;
+
+      let interval;
+      if (stepRatio > 5) {
+        interval = magnitude;
+      } else if (stepRatio > 2) {
+        interval = magnitude / 2;
+      } else {
+        interval = magnitude / 5;
+      }
+
+      // 纭繚interval鏄暣鏁�
+      interval = Math.round(interval);
+
+      // 闄愬埗鏈�灏忛棿闅�
+      return Math.max(interval, 50);
+    },
     // 鑾峰彇绾跨姸鍥炬椂闂�
     async getregionAmountCollect() {
       //getregionAmountCollect(1, this.endatd, this.statd);
@@ -480,11 +598,12 @@
       this.series = [123, 123, 223, 212, 432, 123, 442, 234];
       this.myEcharts2();
     },
-    // 绾挎�у浘
+    // 绾挎�у浘鍙婃煴鐘跺浘
     myEcharts2() {
       var echarts = require("echarts");
       var myChart2 = echarts.init(document.getElementById("echars"));
       this.myChart2 = myChart2;
+
       var option2 = {
         tooltip: {
           trigger: "axis",
@@ -504,30 +623,12 @@
           },
         },
         legend: {
-          data: [
-            "鍑洪櫌闅忚閲�",
-            "闂ㄨ瘖闅忚閲�",
-            // "鍦ㄩ櫌闅忚閲�",
-            // "闂ㄨ瘖澶嶈瘖閫氱煡",
-            "鍑洪櫌鏈嶅姟浜烘",
-            "闂ㄨ瘖鏈嶅姟浜烘",
-          ],
+          data: ["鍑洪櫌闅忚閲�", "闂ㄨ瘖闅忚閲�", "鍑洪櫌鏈嶅姟浜烘", "闂ㄨ瘖鏈嶅姟浜烘"],
         },
         xAxis: [
           {
             type: "category",
-            data: [
-              "涓�鏈�",
-              "浜屾湀",
-              "涓夋湀",
-              "鍥涙湀",
-              "浜旀湀",
-              "鍏湀",
-              "涓冩湀",
-              "鍏湀",
-              "涔濇湀",
-              "鍗佹湀",
-            ],
+            data: [], // 鍒濆涓虹┖锛屽皢閫氳繃API鏁版嵁濉厖
             axisPointer: {
               type: "shadow",
             },
@@ -538,18 +639,14 @@
             type: "value",
             name: "闅忚閲�",
             min: 0,
-            max: 250,
-            interval: 50,
             axisLabel: {
               formatter: "{value} 浜�",
             },
           },
           {
             type: "value",
-            name: "澶嶈瘖/璇勪及娆℃暟",
+            name: "鏈嶅姟浜烘",
             min: 0,
-            max: 250,
-            interval: 50,
             axisLabel: {
               formatter: "{value} 娆�",
             },
@@ -565,18 +662,8 @@
                 return value + " 浜�";
               },
             },
-            data: [120, 150, 165, 90, 140, 200, 130, 85, 175, 95, 110, 160],
+            data: [], // 鍒濆涓虹┖锛屽皢閫氳繃API鏁版嵁濉厖
           },
-          // {
-          //   name: "褰卞儚闅忚閲�",
-          //   type: "bar",
-          //   tooltip: {
-          //     valueFormatter: function (value) {
-          //       return value + " 浜�";
-          //     },
-          //   },
-          //   data: [102, 190, 135, 88, 175, 160, 83, 145, 200, 110, 97, 180],
-          // },
           {
             name: "闂ㄨ瘖闅忚閲�",
             type: "bar",
@@ -585,21 +672,8 @@
                 return value + " 浜�";
               },
             },
-            data: [145, 92, 178, 134, 167, 85, 199, 112, 156, 88, 120, 145],
+            data: [], // 鍒濆涓虹┖锛屽皢閫氳繃API鏁版嵁濉厖
           },
-
-          // {
-          //   name: "鍑洪櫌澶嶈瘖閫氱煡",
-          //   type: "line",
-          //   smooth: 0.3,
-          //   yAxisIndex: 1,
-          //   tooltip: {
-          //     valueFormatter: function (value) {
-          //       return value + " 娆�";
-          //     },
-          //   },
-          //   data: [45, 123, 78, 156, 89, 34, 199, 112, 67, 145, 88, 175],
-          // },
           {
             name: "鍑洪櫌鏈嶅姟浜烘",
             type: "line",
@@ -610,7 +684,7 @@
                 return value + " 娆�";
               },
             },
-            data: [102, 190, 135, 88, 175, 160, 83, 145, 200, 110, 97, 180],
+            data: [], // 鍒濆涓虹┖锛屽皢閫氳繃API鏁版嵁濉厖
           },
           {
             name: "闂ㄨ瘖鏈嶅姟浜烘",
@@ -622,29 +696,15 @@
                 return value + " 娆�";
               },
             },
-            data: [120, 150, 165, 90, 140, 200, 130, 85, 175, 95, 110, 160],
+            data: [], // 鍒濆涓虹┖锛屽皢閫氳繃API鏁版嵁濉厖
           },
         ],
       };
-      myChart2.on("updateAxisPointer", function (event) {
-        const xAxisInfo = event.axesInfo[0];
-        if (xAxisInfo) {
-          const dimension = xAxisInfo.value + 1;
-          myChart2.setOption({
-            series: {
-              id: "pie",
-              label: {
-                formatter: "{b}: {@[" + dimension + "]} ",
-              },
-              encode: {
-                value: dimension,
-                tooltip: dimension,
-              },
-            },
-          });
-        }
-      });
+
       myChart2.setOption(option2);
+
+      // 鍒濆鍔犺浇鏁版嵁
+      this.getgraphdata();
     },
     // 楗肩姸鍥�
     myPieChart() {
diff --git a/src/views/knowledge/education/compilequer/index.vue b/src/views/knowledge/education/compilequer/index.vue
index 1060bfa..59ebeef 100644
--- a/src/views/knowledge/education/compilequer/index.vue
+++ b/src/views/knowledge/education/compilequer/index.vue
@@ -703,7 +703,7 @@
         });
       }
       // 瀹f暀鍒嗙被
-      getheLibraryAssort({}).then((res) => {
+      getheLibraryAssort({ hetype: 1 }).then((res) => {
         this.sortlist = res.rows;
         console.log(this.sortlist);
       });
diff --git a/src/views/login.vue b/src/views/login.vue
index 4550afd..d506da5 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -119,6 +119,8 @@
         { value: "47231022633110211A2101", label: "涓芥按甯備腑鍖婚櫌" },
         { value: "47246102433112211A2101", label: "缂欎簯鍘夸腑鍖诲尰闄� " },
         { value: "47240018433118111A2101", label: "榫欐硥甯備腑鍖诲尰闄� " },
+        { value: "47243006833112611A2101", label: "搴嗗厓鍘夸腑鍖诲尰闄� " },
+        { value: "47234002X33112111A2101", label: "闈掔敯鍘夸腑鍖诲尰闄� " },
        ],
       loginRules: {
         username: [
@@ -195,9 +197,12 @@
           this.loginForm.orgid = '1',
           this.$store
             .dispatch("Login", this.loginForm)
-            .then(() => {
-              // this.$router.push({ path: this.redirect || "/" }).catch(() => {});
-              this.$router.push({ path:"/followvisit/discharge" }).catch(() => {});
+            .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;
diff --git a/src/views/patient/follow/index.vue b/src/views/patient/follow/index.vue
index 6c7d903..06f2765 100644
--- a/src/views/patient/follow/index.vue
+++ b/src/views/patient/follow/index.vue
@@ -11,11 +11,19 @@
           v-show="showSearch"
           label-width="98px"
         >
-          <el-form-item label="濮撳悕"
-          width="100" prop="name">
+          <el-form-item label="鎮h�呭鍚�" width="100" prop="name">
             <el-input
               v-model="queryParams.name"
               placeholder="璇疯緭鍏ュ鍚�"
+              clearable
+              style="width: 200px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="杩囨护鍖荤敓" width="100" prop="filterDrname">
+            <el-input
+              v-model="queryParams.filterDrname"
+              placeholder="璇疯緭鍏ュ尰鐢熷鍚�"
               clearable
               style="width: 200px"
               @keyup.enter.native="handleQuery"
@@ -37,9 +45,7 @@
             </el-select>
           </el-form-item> -->
 
-
           <el-row>
-
             <el-form-item>
               <el-button
                 type="primary"
@@ -58,7 +64,6 @@
           </el-row>
         </el-form>
 
-
         <el-table
           v-loading="loading"
           :data="userList"
@@ -74,12 +79,18 @@
           <el-table-column
             fixed
             label="濮撳悕"
-          width="100"
+            width="100"
             align="center"
             key="name"
             prop="name"
           />
-          <el-table-column label="鎬у埆"width="100" align="center" key="sex" prop="sex">
+          <el-table-column
+            label="鎬у埆"
+            width="100"
+            align="center"
+            key="sex"
+            prop="sex"
+          >
             <template slot-scope="scope">
               <span>{{ scope.row.sex == 1 ? "鐢�" : "濂�" }}</span>
             </template>
@@ -128,6 +139,12 @@
             prop="placeOfResidence"
             width="180"
             :show-overflow-tooltip="true"
+          />
+          <el-table-column
+            label="杩囨护鍖荤敓"
+            align="center"
+            key="filterDrname"
+            prop="filterDrname"
           />
           <el-table-column
             label="鎮h�呮爣绛�"
@@ -185,7 +202,6 @@
                     query: { id: scope.row.id },
                   })
                 "
-
                 ><span class="button-textsc"
                   ><i class="el-icon-zoom-in"></i>鏌ョ湅</span
                 ></el-button
@@ -194,7 +210,6 @@
                 size="medium"
                 type="text"
                 @click="handleDelete(scope.row)"
-
                 ><span class="button-textxga"
                   ><i class="el-icon-edit"></i>鍙栨秷杩囨护</span
                 ></el-button
@@ -212,8 +227,6 @@
         />
       </el-col>
     </el-row>
-
-
   </div>
 </template>
 
@@ -295,7 +308,7 @@
       propss: { multiple: true },
       optionstag: [], //鏍囩鍒楄〃
       Patientrange: [
-      {
+        {
           value: 0,
           label: "鎵�灞炴偅鑰�",
         },
@@ -437,13 +450,13 @@
     },
     /** 閲嶇疆鎸夐挳鎿嶄綔 */
     resetQuery() {
-      this.queryParams={
+      (this.queryParams = {
         pageNum: 1,
         pageSize: 10,
         allhosp: "1",
         notrequiredFlag: 1,
-      },
-      this.handleQuery();
+      }),
+        this.handleQuery();
     },
     // 澶氶�夋閫変腑鏁版嵁
     handleSelectionChange(selection) {
@@ -490,16 +503,16 @@
       const userIds = row.id || this.ids;
       this.$modal
         .confirm('鏄惁纭鍙栨秷鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」杩囨护锛�')
-        .then( ()=> {
-          row.notrequiredFlag=0
+        .then(() => {
+          row.notrequiredFlag = 0;
           alterpatient(row)
-          .then((response) => {
-            console.log(response);
-          })
-          .then(() => {
-            this.getList();
-            this.$modal.msgSuccess("淇敼鎴愬姛");
-          });
+            .then((response) => {
+              console.log(response);
+            })
+            .then(() => {
+              this.getList();
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+            });
         })
 
         .catch(() => {});
diff --git a/src/views/patient/medtechnician/Compositeeditdetails.vue b/src/views/patient/medtechnician/Compositeeditdetails.vue
index cca2e90..0b1e6d5 100644
--- a/src/views/patient/medtechnician/Compositeeditdetails.vue
+++ b/src/views/patient/medtechnician/Compositeeditdetails.vue
@@ -816,7 +816,7 @@
 .headline {
   font-size: 24px;
   height: 40px;
-  border-left: 5px solid #5788fe;
+  border-left: 5px solid #5788FE;
   padding-left: 5px;
   margin-bottom: 10px;
   display: flex;
diff --git a/src/views/patient/medtechnician/SpecializedService.vue b/src/views/patient/medtechnician/SpecializedService.vue
deleted file mode 100644
index a5a9493..0000000
--- a/src/views/patient/medtechnician/SpecializedService.vue
+++ /dev/null
@@ -1,1315 +0,0 @@
-<template>
-  <div class="app-container">
-    <div class="leftvlue" style="margin-bottom: 20px">
-      <el-row :gutter="10">
-        <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index">
-          <el-card
-            shadow="hover"
-            :body-style="item.router ? ' cursor: pointer' : 'cursor: default'"
-          >
-            <div style="padding: 8px" @click="$router.push(item.router)">
-              <span>{{ item.name }}</span>
-              <div
-                style="
-                  text-align: center;
-                  font-size: 18px;
-                  margin-top: 10px;
-                  font-weight: 600;
-                "
-              >
-              {{ item.value ? item.value : 0 }}
-              </div>
-            </div>
-          </el-card>
-        </el-col>
-      </el-row>
-    </div>
-    <el-row :gutter="20">
-      <!--鐢ㄦ埛鏁版嵁-->
-      <el-form
-        :model="topqueryParams"
-        ref="queryForm"
-        size="small"
-        :inline="true"
-        v-show="showSearch"
-        label-width="98px"
-      >
-        <el-form-item label="浠诲姟缁勫悕绉�">
-          <el-input
-            v-model="topqueryParams.taskName"
-            placeholder="璇烽�夋嫨浠诲姟缁勫悕绉�"
-          ></el-input>
-        </el-form-item>
-
-        <el-form-item label="鍑洪櫌鏃堕棿">
-          <el-date-picker
-            v-model="dateRange"
-            style="width: 240px"
-            value-format="yyyy-MM-dd"
-            type="daterange"
-            range-separator="-"
-            start-placeholder="寮�濮嬫棩鏈�"
-            end-placeholder="缁撴潫鏃ユ湡"
-          ></el-date-picker>
-        </el-form-item>
-
-        <el-form-item label="鎮h�呭鍚�" prop="sendname">
-          <el-input
-            v-model="topqueryParams.sendname"
-            placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="鎮h�呰寖鍥�" prop="status">
-          <el-cascader
-            v-model="topqueryParams.scopetype"
-            placeholder="榛樿鍏ㄩ儴"
-            :options="sourcetype"
-            :props="{ expandTrigger: 'hover' }"
-            @change="handleChange"
-          ></el-cascader>
-        </el-form-item>
-
-        <el-form-item label="浠诲姟缁勭姸鎬�" prop="status">
-          <el-select v-model="topqueryParams.sendstate" placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="item in topicoptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-
-        <el-form-item>
-          <el-button
-            type="primary"
-            icon="el-icon-search"
-            size="medium"
-            @click="handleQuery"
-            >鎼滅储</el-button
-          >
-          <el-button icon="el-icon-refresh" size="medium" @click="resetQuery"
-            >閲嶇疆</el-button
-          >
-        </el-form-item>
-      </el-form>
-      <el-divider></el-divider>
-      <el-row :gutter="10" class="mb8">
-        <el-col :span="1.5">
-          <el-button
-            type="primary"
-            plain
-            icon="el-icon-plus"
-            size="medium"
-            @click="handleAdd"
-            >鏂板</el-button
-          >
-        </el-col>
-        <el-col :span="1.5">
-          <div class="documentf">
-            <div class="document">
-              <el-button
-                type="warning"
-                plain
-                icon="el-icon-upload2"
-                size="medium"
-                @click="handleExport"
-                >瀵煎嚭</el-button
-              >
-            </div>
-          </div>
-        </el-col>
-        <el-col :span="1.5">
-          <div class="documentf">
-            <div class="document">
-              <el-button
-                type="warning"
-                plain
-                icon="el-icon-warning-outline"
-                size="medium"
-                @click="toleadExport(1)"
-                >鎵ц澶辫触</el-button
-              >
-            </div>
-          </div>
-        </el-col>
-        <el-col :span="1.5">
-          <div class="documentf">
-            <div class="document">
-              <el-button
-                type="danger"
-                plain
-                icon="el-icon-warning"
-                size="medium"
-                @click="toleadExport(2)"
-                >缁撴灉寮傚父</el-button
-              >
-            </div>
-          </div>
-        </el-col>
-      </el-row>
-      <el-table
-        v-loading="loading"
-        :data="userList"
-        height="808"
-        :row-class-name="tableRowClassName"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" width="50" align="center" />
-        <el-table-column
-          label="浠诲姟缁勫悕绉�"
-          fixed
-          align="center"
-          key="taskName"
-          prop="taskName"
-          width="180"
-        />
-        <!-- <el-table-column label="搴忓彿" fixed align="center" key="id" prop="id" /> -->
-        <el-table-column
-          label="濮撳悕"
-          width="100"
-          fixed
-          align="center"
-          key="sendname"
-          prop="sendname"
-        />
-        <el-table-column
-          label="浠诲姟缁勭姸鎬�"
-          align="center"
-          key="sendstate"
-          prop="sendstate"
-          width="120"
-        >
-          <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="danger" :disable-transitions="false">宸插畬鎴�</el-tag>
-            </div>
-          </template>
-        </el-table-column>
-        <!-- <el-table-column
-          label="浠诲姟缁勫紓甯歌鏄�"
-          width="120"
-          align="center"
-          key="remark"
-          prop="remark" -->
-        />
-
-        <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="updateBy"
-          prop="updateBy"
-          width="120"
-        />
-        <el-table-column
-          label="闅忚瀹屾垚鏃堕棿"
-          sortable
-          align="center"
-          prop="finishtime"
-          width="160"
-        >
-          <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.finishtime) }}</span>
-          </template>
-        </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="搴旈殢璁挎棩鏈�"
-          width="200"
-          align="center"
-          key="longSendTime"
-          prop="longSendTime"
-        >
-          <template slot-scope="scope">
-            <span>{{ formatTime(scope.row.longSendTime) }}</span>
-          </template></el-table-column
-        >
-        <el-table-column
-          label="鍑洪櫌澶╂暟"
-          width="120"
-          align="center"
-          key="endDay"
-          prop="endDay"
-        >
-          <template slot-scope="scope">
-            <span>{{
-              scope.row.endDay ? scope.row.endDay + "澶�" : ""
-            }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="韬唤璇佸彿鐮�"
-          width="200"
-          align="center"
-          key="sfzh"
-          prop="sfzh"
-        />
-        <el-table-column
-          label="鑱旂郴鐢佃瘽"
-          width="200"
-          align="center"
-          key="phone"
-          prop="phone"
-        />
-        <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"
-          sortable
-          key="medicalRecordNo"
-          prop="medicalRecordNo"
-          width="120"
-        /> -->
-
-        <!-- <el-table-column label="骞撮緞" align="center" key="age" prop="age" /> -->
-        <!-- <el-table-column label="鎬у埆"width="100" align="center" key="sex" prop="sex" /> -->
-        <!-- <el-table-column label="搴婂彿" align="center" key="badNo" prop="badNo" /> -->
-        <el-table-column
-          label="绉戝"
-          align="center"
-          key="deptname"
-          prop="deptname"
-          width="120"
-        >
-        </el-table-column>
-        <el-table-column
-          label="鐥呭尯"
-          align="center"
-          key="leavehospitaldistrictname"
-          prop="leavehospitaldistrictname"
-          width="120"
-        >
-        </el-table-column>
-
-        <!-- <el-table-column
-          label="鐤剧梾鍚嶇О"
-          align="center"
-          key="icdName"
-          prop="icdName"
-          width="120"
-          :show-overflow-tooltip="true"
-        >
-        </el-table-column> -->
-
-        <el-table-column
-          label="鍑洪櫌闅忚妯℃澘鍚嶇О"
-          align="center"
-          key="templatename"
-          prop="templatename"
-          width="200"
-        />
-        <el-table-column
-
-          label="浠诲姟缁勬墽琛屾柟寮�"
-          align="center"
-          key="preachform"
-          prop="preachform"
-          width="160"
-          :show-overflow-tooltip="true"
-        >
-          <template slot-scope="scope">
-            <span v-for="item in scope.row.preachform"
-              >{{ item }}銆�
-            </span>
-          </template>
-        </el-table-column>
-        <el-table-column
-
-          label="浠诲姟缁勫彂閫佹祦绋�"
-          align="center"
-          key="serviceSubtaskRecordList"
-          prop="serviceSubtaskRecordList"
-          width="160"
-          :show-overflow-tooltip="true"
-        >
-          <template slot-scope="scope">
-            <span v-for="item in scope.row.serviceSubtaskRecordList"
-              >{{ item.remark }}銆�
-            </span>
-          </template>
-        </el-table-column>
-        <el-table-column
-
-          label="浠诲姟缁勭粨鏋滆鏄�"
-          fixed="right"
-          width="120"
-          align="center"
-          key="remark"
-          prop="remark"
-        >
-          <template slot-scope="scope" v-if="scope.row.remark">
-            <el-tag
-              type="success"
-              v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4"
-              >{{ scope.row.remark }}</el-tag
-            >
-            <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="鎿嶄綔"
-          fixed="right"
-          align="center"
-          width="200"
-          class-name="small-padding fixed-width"
-        >
-          <template slot-scope="scope">
-            <!-- <el-tooltip
-              class="item"
-              effect="dark"
-              content="閲嶆柊闅忚"
-              placement="top"
-            >
-              <el-button
-                size="medium"
-                type="text"
-                @click="followupvisit(scope.row)"
-                v-hasPermi="['system:user:edit']"
-                ><span class="button-bb"
-                  ><i class="el-icon-s-promotion"></i></span
-              ></el-button>
-            </el-tooltip> -->
-            <!-- <el-tooltip
-              class="item"
-              effect="dark"
-              content="鍋滄"
-              placement="top"
-            >
-              <el-button
-                size="medium"
-                type="text"
-                @click="handlestop(scope.row)"
-                v-hasPermi="['system:user:edit']"
-                ><span class="button-sc"><i class="el-icon-delete"></i></span
-              ></el-button>
-            </el-tooltip> -->
-            <el-button size="medium" type="text" @click="Seedetails(scope.row)"
-              ><span class="button-zx"
-                ><i class="el-icon-s-order"></i>鏌ョ湅璇︽儏</span
-              ></el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        :page.sync="topqueryParams.pageNum"
-        :limit.sync="topqueryParams.pageSize"
-        @pagination="getList"
-      />
-    </el-row>
-    <!-- 娣诲姞鎴栦慨鏀瑰奖鍍忛殢璁垮璇濇 -->
-    <el-dialog
-      :title="title"
-      :visible.sync="addalteropen"
-      width="700px"
-      append-to-body
-    >
-      <el-form ref="form" :model="form" label-width="100px">
-        <el-row :gutter="20">
-          <el-col :span="12"
-            ><el-form-item label="浠诲姟缁勫悕绉�">
-              <el-input v-model="form.name"></el-input> </el-form-item
-          ></el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="24"
-            ><el-form-item label="鎵�灞炵瀹�">
-              <el-select v-model="form.region" placeholder="璇烽�夋嫨绉戝">
-                <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
-                <el-option label="鍖哄煙浜�" value="beijing"></el-option>
-              </el-select> </el-form-item></el-col
-        ></el-row>
-        <el-row :gutter="20">
-          <el-col :span="24"
-            ><el-form-item label="闅忚绫诲瀷">
-              <el-select v-model="form.region" placeholder="璇烽�夋嫨闅忚绫诲瀷">
-                <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
-                <el-option label="鍖哄煙浜�" value="beijing"></el-option>
-              </el-select> </el-form-item
-          ></el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="24">
-            <el-form-item label="鏈嶅姟妯″潡">
-              <el-select v-model="form.region" placeholder="璇烽�夋嫨妯″潡">
-                <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
-                <el-option label="鍖哄煙浜�" value="beijing"></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="24">
-            <el-form-item label="褰卞儚闅忚瑕佹眰">
-              <el-input type="textarea" v-model="form.desc"></el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">鎻� 浜�</el-button>
-        <el-button @click="cancel">杩� 鍥�</el-button>
-      </div>
-    </el-dialog>
-    <!-- 淇敼鍙戦�佹椂闂村璇濇 -->
-    <el-dialog
-      title="鍙戦�佹椂闂磋缃�"
-      :visible.sync="modificationVisible"
-      width="45%"
-    >
-      <div style="margin-bottom: 20px; color: red">
-        缁熶竴淇敼褰撳ぉ鏈彂閫佺殑浠诲姟缁勬椂闂�
-      </div>
-
-      <el-form
-        :model="ruleForm"
-        :rules="rules"
-        ref="ruleForm"
-        label-width="120px"
-        class="demo-ruleForm"
-      >
-        <el-form-item label="鍙戦�佹棩鏈�">
-          <el-date-picker
-            v-model="ruleForm.value1"
-            type="date"
-            placeholder="閫夋嫨鏃ユ湡"
-          >
-          </el-date-picker>
-        </el-form-item>
-
-        <el-form-item label="鏃堕棿娈�" prop="type">
-          <el-checkbox-group v-model="ruleForm.type">
-            <el-checkbox label="涓婂崍" name="type"></el-checkbox>
-            <el-checkbox label="涓嬪崍" name="type"></el-checkbox>
-            <el-checkbox label="鏅氫笂" name="type"></el-checkbox>
-          </el-checkbox-group>
-        </el-form-item>
-        <el-form-item label="涓婂崍鏃堕棿鍖洪棿" required>
-          <el-time-picker
-            is-range
-            v-model="ruleForm.value2"
-            range-separator="鑷�"
-            start-placeholder="寮�濮嬫椂闂�"
-            end-placeholder="缁撴潫鏃堕棿"
-            placeholder="閫夋嫨鏃堕棿鑼冨洿"
-          >
-          </el-time-picker>
-        </el-form-item>
-        <el-form-item label="涓嬪崍鏃堕棿鍖洪棿" required>
-          <el-time-picker
-            is-range
-            v-model="ruleForm.value3"
-            range-separator="鑷�"
-            start-placeholder="寮�濮嬫椂闂�"
-            end-placeholder="缁撴潫鏃堕棿"
-            placeholder="閫夋嫨鏃堕棿鑼冨洿"
-          >
-          </el-time-picker>
-        </el-form-item>
-        <el-form-item label="鏅氫笂鏃堕棿鍖洪棿" required>
-          <el-time-picker
-            is-range
-            v-model="ruleForm.value4"
-            range-separator="鑷�"
-            start-placeholder="寮�濮嬫椂闂�"
-            end-placeholder="缁撴潫鏃堕棿"
-            placeholder="閫夋嫨鏃堕棿鑼冨洿"
-          >
-          </el-time-picker>
-        </el-form-item>
-      </el-form>
-
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="modificationVisible = false">鍙� 娑�</el-button>
-        <el-button type="primary" @click="modificationVisible = false"
-          >纭� 瀹�</el-button
-        >
-      </span>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  listUser,
-  getUser,
-  delUser,
-  addUser,
-  updateUser,
-  resetUserPwd,
-  changeUserStatus,
-} from "@/api/system/user";
-import { getTaskservelist } from "@/api/AiCentre/index";
-import Treeselect from "@riophae/vue-treeselect";
-import store from "@/store";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-
-export default {
-  name: "Discharge",
-  dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
-  components: { Treeselect },
-  data() {
-    return {
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鏄剧ず鎼滅储鏉′欢
-      showSearch: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鐢ㄦ埛琛ㄦ牸鏁版嵁
-      userList: null,
-      // 寮瑰嚭灞傛爣棰�
-      title: "鏂板褰卞儚闅忚",
-      // 鏄惁鏄剧ず淇敼銆佹坊鍔犲脊鍑哄眰
-      addalteropen: false,
-      // 淇敼鍙戦�佹椂闂村璇濇
-      modificationVisible: false,
-      // 閮ㄩ棬鍚嶇О
-      deptName: undefined,
-      // 榛樿瀵嗙爜
-      initPassword: undefined,
-      // 鏃ユ湡鑼冨洿
-      dateRange: [],
-      // 宀椾綅閫夐」
-      postOptions: [],
-      ruleForm: {
-        type: [],
-      },
-      sourcetype: [
-        {
-          value: 1,
-          label: "绉戝",
-          children: [],
-        },
-        {
-          value: 2,
-          label: "鐥呭尯",
-          children: [],
-        },
-        {
-          value: 3,
-          label: "鍏ㄩ儴",
-        },
-      ],
-      dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
-      inputVisible: false,
-      inputValue: "",
-      previewVisible: false, //褰卞儚闅忚棰勮寮规
-      radio: "",
-      radios: [],
-      previewtype: 2, //棰勮褰卞儚闅忚绫诲瀷
-      total: 0, // 鎬绘潯鏁�
-      ImportQuantity: 999, //瀵煎奖鍍忛殢璁挎暟閲�
-      //棰勮褰卞儚闅忚淇℃伅
-      previewvalue: {
-        username: "杩欎釜鍖荤敓瀵逛綘鎬庝箞鏍�",
-      },
-      value: [],
-      list: [],
-      source: [
-        {
-          value: 0,
-          label: "鎵�灞炴偅鑰�",
-        },
-        {
-          value: 1,
-          label: "绉戝鎮h��",
-        },
-        {
-          value: 2,
-          label: "鐥呭尯鎮h��",
-        },
-      ],
-      loading: false,
-      cardlist: [
-        {
-          name: "鍏ㄩ儴鏈嶅姟",
-          value: 0,
-        },
-        {
-          name: "搴旈殢璁�",
-          value: 0,
-        },
-        {
-          name: "涓嶆墽琛�",
-          value: 0,
-        },
-        {
-          name: "寮傚父",
-          value: 0,
-        },
-        {
-          name: "鍙戦�佸け璐�",
-          value: 0,
-        },
-        {
-          name: "琛ㄥ崟宸查鍙�",
-          value: 0,
-        },
-        {
-          name: "琛ㄥ崟宸插彂閫�",
-          value: 0,
-        },
-      ],
-      pickerOptions: {
-        disabledDate(time) {
-          return time.getTime() > Date.now();
-        },
-        shortcuts: [
-          {
-            text: "浠婂ぉ",
-            onClick(picker) {
-              picker.$emit("pick", new Date());
-            },
-          },
-          {
-            text: "鏄ㄥぉ",
-            onClick(picker) {
-              const date = new Date();
-              date.setTime(date.getTime() - 3600 * 1000 * 24);
-              picker.$emit("pick", date);
-            },
-          },
-          {
-            text: "涓�鍛ㄥ墠",
-            onClick(picker) {
-              const date = new Date();
-              date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
-              picker.$emit("pick", date);
-            },
-          },
-        ],
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {
-        phonenumber: "",
-        totagid: "",
-        types: "",
-        nickName: "",
-        qystatus: "",
-        btstatus: "",
-      },
-      // 鏌ヨ鍙傛暟
-      topqueryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        serviceType: 2,
-        sendstate:2,
-        searchscope: 2,
-        scopetype: [],
-        leaveldeptcodes: [],
-        leavehospitaldistrictcodes: [],
-      },
-      propss: { multiple: true },
-      options: [],
-
-      topicoptions: [
-        {
-          value: 1,
-          label: "琛ㄥ崟宸查鍙�",
-        },
-        {
-          value: 2,
-          label: "寰呴殢璁�",
-        },
-        {
-          value: 3,
-          label: "琛ㄥ崟宸插彂閫�",
-        },
-        {
-          value: 4,
-          label: "涓嶆墽琛�",
-        },
-        {
-          value: 5,
-          label: "鍙戦�佸け璐�",
-        },
-        {
-          value: 6,
-          label: "宸插畬鎴�",
-        },
-      ],
-      topicoptionsyj: [
-        {
-          value: 1,
-          label: "寮傚父",
-        },
-        {
-          value: 0,
-          label: "姝e父",
-        },
-      ],
-      serviceState: [],
-      checkboxlist: [],
-      // 琛ㄥ崟鏍¢獙
-      rules: {},
-    };
-  },
-  watch: {},
-  created() {
-    this.serviceState = store.getters.serviceState;
-    this.checkboxlist = store.getters.checkboxlist;
-    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
-      return {
-        label: dept.deptName,
-        value: dept.deptCode,
-      };
-    });
-    this.sourcetype[1].children = store.getters.belongWards.map((dept) => {
-      return {
-        label: dept.districtName,
-        value: dept.districtCode,
-      };
-    });
-    this.getList();
-    this.getConfigKey("sys.user.initPassword").then((response) => {
-      this.initPassword = response.msg;
-    });
-  },
-  activated() {
-    this.getList();
-  },
-  methods: {
-    /** 鏌ヨ褰卞儚闅忚鏈嶅姟鍒楄〃 */
-    getList() {
-      if (this.topqueryParams.searchscope == 1) {
-        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
-          (obj) => obj.deptCode
-        );
-        this.topqueryParams.leavehospitaldistrictcodes = null;
-      } else if (this.topqueryParams.searchscope == 2) {
-        this.topqueryParams.leavehospitaldistrictcodes =
-          store.getters.belongWards.map((obj) => obj.districtCode);
-        this.topqueryParams.leaveldeptcodes = null;
-      } else {
-        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
-          (obj) => obj.deptCode
-        );
-        this.topqueryParams.leavehospitaldistrictcodes =
-          store.getters.belongWards.map((obj) => obj.districtCode);
-      }
-      this.loading = true;
-      if (this.topqueryParams.leavehospitaldistrictcodes[0]&&this.topqueryParams.leaveldeptcodes[0]) {
-        this.topqueryParams.deptOrDistrict=2;
-      }else{
-        this.topqueryParams.deptOrDistrict=1;
-      }
-      getTaskservelist(this.topqueryParams).then((response) => {
-        this.userList = response.rows[0].serviceSubtaskList;
-        this.cardlist[0].value =
-          Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
-        this.cardlist[1].value = response.rows[0].ysf;
-        this.cardlist[2].value = response.rows[0].wzx;
-        this.cardlist[3].value = response.rows[0].yc;
-        this.cardlist[4].value = response.rows[0].fssb;
-        this.cardlist[5].value = response.rows[0].blq;
-        this.cardlist[6].value = response.rows[0].yfs;
-        this.userList.forEach((item) => {
-          if (item.endtime) {
-            item.endDay = this.daysBetween(item.endtime);
-          }
-          const idArray = item.preachform.split(",");
-          item.preachform = idArray.map((value) => {
-            // 鏌ユ壘id瀵瑰簲鐨勫璞�
-            const item = this.checkboxlist.find((item) => item.value == value);
-            // 濡傛灉鎵惧埌瀵瑰簲鐨刬d锛岃繑鍥瀕abel鍊硷紝鍚﹀垯杩斿洖null
-            return item ? item.label : null;
-          });
-        });
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鏌ョ湅褰卞儚闅忚璇︽儏
-    Referencequestion(row) {
-      this.previewVisible = true;
-    },
-    // 娣诲姞寮规鎼滅储
-    remoteMethod(query) {
-      if (query !== "") {
-        this.loading = true;
-        setTimeout(() => {
-          this.loading = false;
-          this.options = this.list.filter((item) => {
-            return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;
-          });
-        }, 200);
-      } else {
-        this.options = [];
-      }
-    },
-    // 褰卞儚闅忚鐘舵�佷慨鏀�
-    handleStatusChange(row) {
-      let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
-      this.$modal
-        .confirm('纭瑕�"' + text + '""' + row.userName + '"鐢ㄦ埛鍚楋紵')
-        .then(function () {
-          return changeUserStatus(row.userId, row.status);
-        })
-        .then(() => {
-          this.$modal.msgSuccess(text + "鎴愬姛");
-        })
-        .catch(function () {
-          row.status = row.status === "0" ? "1" : "0";
-        });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.addalteropen = false;
-      this.reset();
-    },
-      // 鎮h�呰寖鍥村鐞�
-      handleChange(value) {
-      let type = value[0];
-      let code = value.slice(-1)[0];
-      this.topqueryParams.leavehospitaldistrictcodes = [];
-      this.topqueryParams.leaveldeptcodes = [];
-
-      if (type == 1) {
-        this.topqueryParams.leaveldeptcodes.push(code);
-        this.topqueryParams.leavehospitaldistrictcodes = [];
-        this.topqueryParams.searchscope = 1;
-      } else if (type == 2) {
-        this.topqueryParams.leavehospitaldistrictcodes.push(code);
-        this.topqueryParams.leaveldeptcodes = [];
-        this.topqueryParams.searchscope = 2;
-      } else {
-        this.topqueryParams.searchscope = 3;
-      }
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        userId: undefined,
-        deptId: undefined,
-        userName: undefined,
-        nickName: undefined,
-        password: undefined,
-        phonenumber: undefined,
-        email: undefined,
-        sex: undefined,
-        status: "0",
-        remark: undefined,
-        postIds: [],
-        roleIds: [],
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      if (this.topqueryParams.searchscope == 1) {
-        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
-          (obj) => obj.deptCode
-        );
-        this.topqueryParams.leavehospitaldistrictcodes = null;
-      } else if (this.topqueryParams.searchscope == 2) {
-        this.topqueryParams.leavehospitaldistrictcodes =
-          store.getters.belongWards.map((obj) => obj.districtCode);
-        this.topqueryParams.leaveldeptcodes = null;
-      } else {
-        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
-          (obj) => obj.deptCode
-        );
-        this.topqueryParams.leavehospitaldistrictcodes =
-          store.getters.belongWards.map((obj) => obj.districtCode);
-      }
-      this.topqueryParams.pageNum = 1;
-      this.topqueryParams.startOutHospTime = this.dateRange[0];
-      this.topqueryParams.endOutHospTime = this.dateRange[1];
-
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.dateRange = [];
-      this.topqueryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        serviceType: 2,
-        searchscope: 2,
-        sendstate:2,
-      };
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map((item) => item.userId);
-      this.single = selection.length != 1;
-      this.multiple = !selection.length;
-    },
-    //鍒犻櫎閫夐」
-    handleClose(tag) {
-      this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
-    },
-    //瑙﹀彂鏂板杈撳叆
-    showInput() {
-      this.inputVisible = true;
-      this.$nextTick((_) => {
-        this.$refs.saveTagInput.$refs.input.focus();
-      });
-    },
-    //鑾峰彇澶卞幓鐒︾偣瑙﹀彂
-    handleInputConfirm() {
-      let inputValue = this.inputValue;
-      if (inputValue) {
-        this.dynamicTags.push(inputValue);
-      }
-      this.inputVisible = false;
-      this.inputValue = "";
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.$router.push({
-        path: "/followvisit/QuestionnaireTask",
-        query: {
-          type: 2,
-          serviceType: 2,
-        },
-      });
-    },
-
-    /** 閲嶇疆瀵嗙爜鎸夐挳鎿嶄綔 */
-    handleResetPwd(row) {
-      this.$prompt('璇疯緭鍏�"' + row.userName + '"鐨勬柊瀵嗙爜', "鎻愮ず", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        closeOnClickModal: false,
-        inputPattern: /^.{5,20}$/,
-        inputErrorMessage: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿",
-      })
-        .then(({ value }) => {
-          resetUserPwd(row.userId, value).then((response) => {
-            this.$modal.msgSuccess("淇敼鎴愬姛锛屾柊瀵嗙爜鏄細" + value);
-          });
-        })
-        .catch(() => {});
-    },
-
-    /** 鎻愪氦鎸夐挳 */
-    submitForm: function () {
-      this.$refs["form"].validate((valid) => {
-        if (valid) {
-          if (this.form.userId != undefined) {
-            updateUser(this.form).then((response) => {
-              this.$modal.msgSuccess("淇敼鎴愬姛");
-              this.open = false;
-              this.getList();
-            });
-          } else {
-            addUser(this.form).then((response) => {
-              this.$modal.msgSuccess("鏂板鎴愬姛");
-              this.open = false;
-              this.getList();
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const userIds = row.userId || this.ids;
-      this.$modal
-        .confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�')
-        .then(function () {
-          return delUser(userIds);
-        })
-        .then(() => {
-          this.getList();
-          this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-        })
-        .catch(() => {});
-    },
-    // 鍏ㄩ儴鍋滄
-    AllStop() {
-      this.$modal
-        .confirm("鏄惁鍋滄鍏ㄩ儴浠诲姟缁勶紵")
-        .then(function () {
-          return console.log("鍋滄鎴愬姛");
-        })
-        .then(() => {
-          this.getList();
-          this.$modal.msgWarning("鍋滄鎴愬姛");
-        })
-        .catch(() => {});
-    },
-    // 鍏ㄩ儴寮�濮�
-    AllStarted() {
-      this.$modal
-        .confirm("鏄惁寮�鍚叏閮ㄤ换鍔$粍锛�")
-        .then(function () {
-          return console.log("寮�鍚垚鍔�");
-        })
-        .then(() => {
-          this.getList();
-          this.$modal.msgSuccess("寮�鍚垚鍔�");
-        })
-        .catch(() => {});
-    },
-    // 浠诲姟缁勯噸缃�
-    TaskReset() {
-      this.$modal
-        .confirm("鏄惁閲嶇疆閫変腑鐨勪换鍔$粍椤癸紵")
-        .then(function () {
-          return console.log("閫変腑鎴愬姛");
-        })
-        .then(() => {
-          this.getList();
-          this.$modal.msgSuccess("閲嶇疆鎴愬姛");
-        })
-        .catch(() => {});
-    },
-    // 璁剧疆鍙戦�佹椂闂�
-    Sendtimesetting() {
-      this.modificationVisible = true;
-    },
-    // 璺宠浆璇︽儏椤�
-    Seedetails(row) {
-      this.$router.push({
-        path: "/followvisit/record/detailpage/",
-        query: { taskid: row.taskid, patid: row.patid, id: row.id },
-      });
-    },
-    // 渚挎嵎鎸夐挳
-    toleadExport(too) {
-      if (too == 1) {
-        this.topqueryParams.sendstate = 4;
-        this.topqueryParams.excep = null;
-      } else if (too == 2) {
-        this.topqueryParams.excep = 1;
-      }
-      this.handleQuery();
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-         this.topqueryParams.pageNum = null;
-      this.topqueryParams.pageSize = null;
-      this.download(
-        "smartor/serviceSubtask/patItemExport",
-        {
-          ...this.topqueryParams,
-        },
-        `user_${new Date().getTime()}.xlsx`
-      );
-    },
-    // 寮傚父鍒楁覆鏌�
-    tableRowClassName({ row, rowIndex }) {
-      if (row.excep == 1) {
-        return "warning-row";
-      }
-      return "";
-    },
-  },
-};
-</script>
-
-<style lang="scss" scoped>
-.el-button--primary.is-plain {
-  color: #ffffff;
-  background: #409eff;
-  border-color: #4fabe9;
-}
-
-.document {
-  // width: 100px;
-  height: 50px;
-}
-::v-deep.el-table .warning-row {
-  background: #eec4c4;
-}
-
-.documentf {
-  display: flex;
-  justify-content: flex-end;
-}
-
-.download {
-  text-align: center;
-
-  .el-upload__tip {
-    font-size: 23px;
-  }
-
-  .el-upload__text {
-    font-size: 23px;
-  }
-}
-
-.uploading {
-  margin-top: 20px;
-  margin: 20px;
-  padding: 30px;
-  background: #ffffff;
-  border: 1px solid #dcdfe6;
-  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
-    0 0 6px 0 rgba(0, 0, 0, 0.04);
-}
-
-.el-tag + .el-tag {
-  margin-left: 10px;
-}
-
-.button-new-tag {
-  margin-left: 10px;
-  height: 32px;
-  line-height: 30px;
-  padding-top: 0;
-  padding-bottom: 0;
-}
-
-.input-new-tag {
-  width: 90px;
-  margin-left: 10px;
-  vertical-align: bottom;
-}
-
-.drexamine {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  padding: 30px;
-  background: #daeaf5;
-
-  img {
-    width: 100px;
-    height: 100px;
-  }
-}
-
-.qrcode-dialo {
-  // text-align: center;
-  //   display: flex;
-  margin: 20px;
-  padding: 30px;
-  background: #edf1f7;
-  border: 1px solid #dcdfe6;
-  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
-    0 0 6px 0 rgba(0, 0, 0, 0.04);
-
-  .topic-dev {
-    margin-bottom: 25px;
-    font-size: 20px !important;
-
-    .dev-text {
-      margin-bottom: 10px;
-    }
-  }
-}
-::v-deep.leftvlue .el-card__body {
-  background: #d0e9fd;
-}
-::v-deep.leftvlue .el-card__body:hover {
-  background: #8dc8f8;
-  cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
-}
-.button-bb {
-  font-weight: 500;
-  background-color: #2ba05c;
-  padding: 5px;
-  border-radius: 1px;
-  color: #ffffff;
-}
-.button-xq {
-  font-weight: 500;
-  background-color: #409eff;
-  padding: 5px;
-  border-radius: 1px;
-  color: #ffffff;
-}
-.button-sc {
-  font-weight: 500;
-  background-color: #dd302a;
-  padding: 5px;
-  border-radius: 1px;
-  color: #ffffff;
-}
-.button-zx {
-  background: #4fabe9;
-  padding: 5px;
-  border-radius: 1px;
-  color: #ffffff;
-}
-
-::v-deep.el-radio-group {
-  span {
-    font-size: 24px;
-  }
-}
-
-// 閫夐」瀛椾綋鏀惧ぇ
-// ::v-deep.el-checkbox-group {
-//   span {
-//     font-size: 24px;
-//   }
-// }
-</style>
diff --git a/src/views/patient/patient/behospitalized.vue b/src/views/patient/patient/behospitalized.vue
index 1395d88..e6f8312 100644
--- a/src/views/patient/patient/behospitalized.vue
+++ b/src/views/patient/patient/behospitalized.vue
@@ -638,7 +638,7 @@
       (obj) => obj.deptCode
     );
     this.getList();
-    this.listDept();
+    // this.listDept();
     this.gettabList();
   },
   methods: {
diff --git a/src/views/patient/patient/hospital.vue b/src/views/patient/patient/hospital.vue
index 09d0dde..de94d9e 100644
--- a/src/views/patient/patient/hospital.vue
+++ b/src/views/patient/patient/hospital.vue
@@ -45,6 +45,15 @@
               @keyup.enter.native="handleQuery"
             />
           </el-form-item>
+          <el-form-item label="绉戝鍚嶇О" prop="inhospno">
+            <el-input
+              v-model="queryParams.deptname"
+              placeholder="璇疯緭鍏ョ瀹ゅ悕绉�"
+              clearable
+              style="width: 250px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
 
           <el-form-item label="鎮h�呰寖鍥�" prop="status">
             <el-cascader
@@ -256,6 +265,13 @@
             align="center"
             key="bedNo"
             prop="bedNo"
+            width="120"
+          />
+          <el-table-column
+            label="缁忕鍖荤敓"
+            align="center"
+            key="managementDoctor"
+            prop="managementDoctor"
             width="120"
           />
           <el-table-column
@@ -615,7 +631,7 @@
       (obj) => obj.deptCode
     );
     this.getList();
-    this.listDept();
+    // this.listDept();
     this.gettabList();
   },
   methods: {
diff --git a/src/views/patient/patient/index.vue b/src/views/patient/patient/index.vue
index b4d407a..18b054b 100644
--- a/src/views/patient/patient/index.vue
+++ b/src/views/patient/patient/index.vue
@@ -554,6 +554,17 @@
             </el-form-item>
           </el-col>
         </el-row>
+        <el-row v-if="amendtag">
+          <el-col :span="8">
+            <el-form-item label="杩囨护鍖荤敓" width="100" prop="filterDrname">
+              <el-input
+                v-model="form.filterDrname"
+                placeholder="璇疯緭鍏ュ尰鐢熷鍚�"
+                maxlength="30"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-row v-if="!amendtag">
           <el-col :span="8">
             <el-form-item label="姘戞棌" prop="name">
@@ -1272,8 +1283,8 @@
     handleUpdate(row) {
       const userIds = row.id || this.ids;
       particularpatient(userIds).then((response) => {
-        console.log(response);
         this.form = response.data;
+        this.form.filterDrname = store.getters.nickName;
       });
       this.amendtag = true;
       this.Labelchange = true;
diff --git a/src/views/patient/patient/outpatient.vue b/src/views/patient/patient/outpatient.vue
index d317a51..02b2368 100644
--- a/src/views/patient/patient/outpatient.vue
+++ b/src/views/patient/patient/outpatient.vue
@@ -20,6 +20,33 @@
               @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"
@@ -39,18 +66,7 @@
               @change="handleChange"
             ></el-cascader>
           </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 label="灏辫瘖鏃ユ湡">
+          <el-form-item label="灏辫瘖鏃ユ湡">
               <el-date-picker
                 v-model="dateRange"
                 style="width: 240px"
@@ -70,6 +86,18 @@
               >
               </el-date-picker> -->
             </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"
diff --git a/src/views/patient/propaganda/Missioncreation.vue b/src/views/patient/propaganda/Missioncreation.vue
index 2c5ed42..e272911 100644
--- a/src/views/patient/propaganda/Missioncreation.vue
+++ b/src/views/patient/propaganda/Missioncreation.vue
@@ -124,14 +124,33 @@
                       </el-select> </el-form-item
                   ></el-col>
                 </el-row>
-                <el-form-item label="鍙戦�佽缃細" v-if="currenttype != 2">
+                <el-form-item label="鎵ц鍛ㄦ湡" prop="longTask">
+                  <el-radio-group v-model="form.longTask">
+                    <el-radio :label="0">鑷畾涔夊懆鏈�</el-radio>
+                    <el-radio :label="1">闀挎湡浠诲姟</el-radio>
+                  </el-radio-group>
+                </el-form-item>
+                <el-row :gutter="20" v-if="form.longTask">
+                  <el-col :span="8">
+                    <el-form-item label="鍛ㄦ湡鏃堕棿" prop="name">
+                      <el-input
+                        v-model="form.sendDay"
+                        placeholder="榛樿5澶╁悗"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+                <el-form-item label="鎵ц璁剧疆" v-if="!form.longTask">
                   <el-radio-group v-model="form.sendType">
                     <el-radio :label="1">鏃堕棿娈靛彂閫�</el-radio>
                     <el-radio :label="3">鏃堕棿鐐瑰彂閫�</el-radio>
                     <el-radio :label="2">鍗冲埢鍙戦��</el-radio>
                   </el-radio-group>
                 </el-form-item>
-                <el-form-item label="鍙戦�佹棩鏈燂細" v-if="form.sendType == 1">
+                <el-form-item
+                  label="鎵ц鏃ユ湡锛�"
+                  v-if="form.sendType == 1 && !form.longTask"
+                >
                   <el-date-picker
                     v-model="daytime"
                     @change="changeTimeday"
@@ -144,7 +163,10 @@
                   </el-date-picker>
                 </el-form-item>
 
-                <el-form-item label="鍙戦�佹椂闂寸偣锛�" v-if="form.sendType == 3">
+                <el-form-item
+                  label="鎵ц鏃堕棿鐐癸細"
+                  v-if="form.sendType == 3 && !form.longTask"
+                >
                   <div style="display: flex">
                     <div style="margin-right: 10px">
                       <el-date-picker
@@ -159,7 +181,10 @@
                   </div>
                 </el-form-item>
 
-                <el-form-item label="鍙戦�佹椂闂存锛�" v-if="form.sendType == 1">
+                <el-form-item
+                  label="鎵ц鏃堕棿娈碉細"
+                  v-if="form.sendType == 1 && !form.longTask"
+                >
                   <div style="display: flex">
                     <div style="margin-right: 10px">
                       <span style="font-size: 18px; margin-right: 10px">鈶�</span>
@@ -390,7 +415,6 @@
                         icon="el-icon-upload2"
                         size="medium"
                         @click="handleImport"
-
                         >瀵煎叆</el-button
                       >
                     </el-col>
@@ -514,11 +538,19 @@
     <!-- 妯℃澘棰勮 -->
     <el-dialog title="妯℃澘棰勮" :visible.sync="previewtf" width="60%">
       <div class="preview-left">
-        <!-- 鍗曢�� -->
-        <div v-html="htmlRichText"></div>
+        <!-- 鏍规嵁妯℃澘绫诲瀷鏄剧ず涓嶅悓鍐呭 -->
+        <div v-if="currentTemplateType == '2'">
+          <!-- 閫氱煡妯℃澘鍙樉绀虹函鏂囨湰鍐呭 -->
+          <div style="white-space: pre-wrap; font-size: 16px; line-height: 1.6">
+            {{ plainTextContent }}
+          </div>
+        </div>
+        <div v-else>
+          <!-- 鍏朵粬绫诲瀷妯℃澘鏄剧ず瀵屾枃鏈唴瀹� -->
+          <div v-html="htmlRichText"></div>
+        </div>
       </div>
       <span slot="footer" class="dialog-footer">
-        <!-- <el-button @click="previewGo">鍓嶅線妯℃澘璇︽儏淇敼</el-button> -->
         <el-button type="primary" @click="previewFn">纭浣跨敤</el-button>
       </span>
     </el-dialog>
@@ -590,13 +622,16 @@
 
         <el-table :data="uploadingData" style="width: 100%">
           <el-table-column prop="serial" label="鎮h�卛d"> </el-table-column>
-          <el-table-column prop="name" label="濮撳悕"
-          width="100"> </el-table-column>
-          <el-table-column prop="sex" label="鎬у埆"width="100"> </el-table-column>
-          <el-table-column prop="idcardno" width="300" label="璇佷欢鍙风爜"> </el-table-column>
+          <el-table-column prop="name" label="濮撳悕" width="100">
+          </el-table-column>
+          <el-table-column prop="sex" label="鎬у埆" width="100">
+          </el-table-column>
+          <el-table-column prop="idcardno" width="300" label="璇佷欢鍙风爜">
+          </el-table-column>
           <el-table-column prop="goday" label="鍑虹敓鏃ユ湡"> </el-table-column>
-          <el-table-column prop="telcode" width="200" label="鑱旂郴鏂瑰紡"> </el-table-column>
-          <el-table-column prop="createTime"  width="200" label="鍒涘缓鏃ユ湡">
+          <el-table-column prop="telcode" width="200" label="鑱旂郴鏂瑰紡">
+          </el-table-column>
+          <el-table-column prop="createTime" width="200" label="鍒涘缓鏃ユ湡">
           </el-table-column>
         </el-table>
         <!-- <pagination
@@ -637,26 +672,20 @@
               <el-form-item label="瀹f暀鍚嶇О">
                 <el-input v-model="topqueryParams.preachname"></el-input>
               </el-form-item>
-              <el-form-item label="瀹f暀鍒嗙被" prop="region">
+              <el-form-item label="瀹f暀绫诲瀷" prop="region">
                 <el-select
-                  v-model="topqueryParams.assortid"
+                  v-model="topqueryParams.hetype"
                   size="medium"
                   filterable
                   placeholder="璇烽�夋嫨鍒嗙被"
                 >
-                  <el-option-group
-                    v-for="group in sortlist"
-                    :key="group.id"
-                    :label="group.assortname"
+                  <el-option
+                    v-for="item in heLibraryAssortList"
+                    :key="item.id"
+                    :label="item.value"
+                    :value="item.id"
                   >
-                    <el-option
-                      v-for="item in group.heLibraryAssortList"
-                      :key="item.id"
-                      :label="item.assortname"
-                      :value="item.id"
-                    >
-                    </el-option>
-                  </el-option-group>
+                  </el-option>
                 </el-select>
               </el-form-item>
 
@@ -751,6 +780,8 @@
     return {
       title: "瀹f暀鍐呭鍒楄〃",
       currenttype: 1, //1瀹f暀2闂ㄨ瘖3鍑洪櫌4澶嶈瘖5浣撴6闂嵎
+      currentTemplateType: "", // 褰撳墠妯℃澘绫诲瀷
+      plainTextContent: "", // 绾枃鏈唴瀹�
       id: "", //
       previewid: "", //浠诲姟妯℃澘浼犻�抜d
       libName: "",
@@ -800,7 +831,7 @@
       tableLabelxj: [
         { label: "鍒涘缓浜�", width: "", prop: "createBy" },
         { label: "瀹f暀鍚嶇О", width: "180", prop: "preachname" },
-        { label: "瀹f暀鎻忚堪", width: "180", prop: "preachcontent" },
+        { label: "瀹f暀鍐呭", width: "180", prop: "preachcontent" },
         // { label: "瀹f暀褰㈠紡", width: "", prop: "playType" },
         { label: "閫傜敤鏂瑰紡", width: "", prop: "suitway" },
         { label: "淇敼鏃ユ湡", width: "", prop: "uploadTime" },
@@ -914,15 +945,23 @@
       ],
       variableListTime: [],
       sortlist: [],
+      heLibraryAssortList: [
+        { id: 1, value: "瀹f暀" },
+        { id: 2, value: "閫氱煡" },
+      ],
       tasktopic: null, //鏂板绫诲瀷
       SelectPatientslist: [],
       form: {
         patTaskRelevances: [],
         sendType: 1,
+        longTask: 0,
         templatename: "",
         templateid: null,
         libtemplateid: null,
-        kcb: "浜茬埍鐨勬偅鑰�-瀹跺睘锛屾垜浠槸"+localStorage.getItem("orgname")+"鐨勫尰鎶や汉鍛橈紝涓轰簡鏇村ソ鍦颁簡瑙f偍鐨勫悍澶嶆儏鍐碉紝璇锋偍鎶戒竴鐐瑰疂璐垫椂闂达紝瑙傜湅杩欎唤瀹f暀璧勮銆�",
+        kcb:
+          "浜茬埍鐨勬偅鑰�-瀹跺睘锛屾垜浠槸" +
+          localStorage.getItem("orgname") +
+          "鐨勫尰鎶や汉鍛橈紝涓轰簡鏇村ソ鍦颁簡瑙f偍鐨勫悍澶嶆儏鍐碉紝璇锋偍鎶戒竴鐐瑰疂璐垫椂闂达紝瑙傜湅杩欎唤瀹f暀璧勮銆�",
         jsy: "鐢熸椿涓婅鍔抽�哥粨鍚堬紝娉ㄦ剰浼戞伅鍜岃惀鍏伙紝閫傚綋閿荤偧锛屾垝鐑熼檺閰掞紝淇濇寔蹇冩儏鑸掔晠锛屽畾鏈熷璇娿�傞偅鏈瀹f暀鍐呭灏卞埌杩欓噷锛岀鎮ㄨ韩浣撳仴搴凤紒",
       },
       taskoptions: [
@@ -970,7 +1009,7 @@
     this.belongDepts = store.getters.belongDepts;
     this.form.typename = this.$route.query.typename;
     this.form.serviceType = Number(this.$route.query.serviceType);
-    this.listDept();
+    // this.listDept();
     this.Acquisitiontype();
     this.Getdetails();
     this.getheLibraryAssort();
@@ -1087,7 +1126,7 @@
     submitForm(formName) {
       this.form.preachform = this.checkList.join(",");
       // this.formatFn(1);
-      if (!this.form.patTaskRelevances[0]) {
+      if (!this.form.patTaskRelevances[0]&&this.form.longTask==0) {
         this.$modal.msgError("璇烽�夋嫨鐥呬汉");
         return;
       }
@@ -1105,7 +1144,7 @@
         this.form.isoperation = 2;
       } else {
         this.form.isoperation = 1;
-        this.form.sendState=1;
+        this.form.sendState = 1;
       }
       if (!this.form.type) {
         this.form.type = this.$route.query.type;
@@ -1133,28 +1172,33 @@
     // ----------------------琛ㄦ牸瀛愮粍浠朵簨浠�
     // 閫夋嫨妯℃澘骞堕瑙�
     selectfn(row, type) {
-      // 妯℃澘鎯呭喌涓嬭幏鍙栨ā鏉夸俊鎭�
       this.libName = row.preachname;
       this.htmlRichText = null;
       this.libId = row.id;
-      console.log(row, "row");
       this.Tasktemplate = row;
+
+      // 璁剧疆褰撳墠妯℃澘绫诲瀷
+      this.currentTemplateType = row.hetype || "1"; // 榛樿涓哄鏁欑被鍨�
+
       this.previewtf = true;
       this.previewid = row.svyid;
-      console.log(this.questionList, "questionList");
-      // this.Variablehandling(row.svyLibScripts, 1);
-      console.log(row.htmlRichText);
-      axios
-        .get(row.htmlRichText)
-        .then((response) => {
-          console.log(response.data, "鏁版嵁"); // 杈撳嚭鑾峰彇鍒扮殑鏂囦欢鍐呭
-          this.htmlRichText = response.data;
-          this.htmlRichText = this.addStyleToImages(this.htmlRichText);
-        })
-        .catch((error) => {
-          this.$modal.msgError("鑾峰彇瀵屾枃鏈け璐�");
-          console.error("Failed to fetch file:", error);
-        });
+
+      if (this.currentTemplateType == "2") {
+        // 濡傛灉鏄�氱煡妯℃澘锛岃幏鍙栫函鏂囨湰鍐呭
+        this.plainTextContent = row.preachcontent;
+      } else {
+        // 鍏朵粬绫诲瀷妯℃澘鑾峰彇瀵屾枃鏈唴瀹�
+        axios
+          .get(row.htmlRichText)
+          .then((response) => {
+            this.htmlRichText = response.data;
+            this.htmlRichText = this.addStyleToImages(this.htmlRichText);
+          })
+          .catch((error) => {
+            this.$modal.msgError("鑾峰彇瀵屾枃鏈け璐�");
+            console.error("Failed to fetch file:", error);
+          });
+      }
     },
     // 棰勮妯℃澘
     previewfnm() {
@@ -1165,16 +1209,24 @@
         this.Tasktemplate = res.rows[0];
         this.previewtf = true;
         this.previewid = res.rows[0].svyid;
-        axios
-          .get(res.rows[0].htmlRichText)
-          .then((response) => {
-            this.htmlRichText = response.data;
-            this.htmlRichText = this.addStyleToImages(this.htmlRichText);
-          })
-          .catch((error) => {
-            this.$modal.msgError("鑾峰彇瀵屾枃鏈け璐�");
-            console.error("Failed to fetch file:", error);
-          });
+        this.currentTemplateType = res.rows[0].hetype || "1"; // 榛樿涓哄鏁欑被鍨�
+
+        if (this.currentTemplateType == "2") {
+          // 濡傛灉鏄�氱煡妯℃澘锛岃幏鍙栫函鏂囨湰鍐呭
+          this.plainTextContent = res.rows[0].preachcontent;
+        } else {
+          // 鍏朵粬绫诲瀷妯℃澘鑾峰彇瀵屾枃鏈唴瀹�
+          axios
+            .get(res.rows[0].htmlRichText)
+            .then((response) => {
+              this.htmlRichText = response.data;
+              this.htmlRichText = this.addStyleToImages(this.htmlRichText);
+            })
+            .catch((error) => {
+              this.$modal.msgError("鑾峰彇瀵屾枃鏈け璐�");
+              console.error("Failed to fetch file:", error);
+            });
+        }
       });
     },
     addStyleToImages(html) {
@@ -1257,7 +1309,7 @@
     handleExport() {},
 
     // 閫夋嫨鎮h�呰〃鏁版嵁
-    handleSelectionChange(selection,type) {
+    handleSelectionChange(selection, type) {
       console.log("澶氶�夋偅鑰�");
       this.SelectPatientslist = selection;
       this.multiple = !selection.length;
@@ -1272,8 +1324,8 @@
             item.sfzh = item.idcardno;
           }
           if (type) {
-            item.hospType=type
-          }else{
+            item.hospType = type;
+          } else {
             item.hospType = this.patientqueryParams.allhosp;
           }
           this.overallCase.push(item);
@@ -1351,7 +1403,10 @@
         templateid: null,
         libtemplateid: null,
         serviceType: Number(this.$route.query.serviceType),
-        kcb: "浜茬埍鐨勬偅鑰�-瀹跺睘锛屾垜浠槸"+localStorage.getItem("orgname")+"鐨勫尰鎶や汉鍛橈紝涓轰簡鏇村ソ鍦颁簡瑙f偍鐨勫悍澶嶆儏鍐碉紝璇锋偍鎶戒竴鐐瑰疂璐垫椂闂达紝瀹屾垚杩欎唤闅忚闂嵎銆�",
+        kcb:
+          "浜茬埍鐨勬偅鑰�-瀹跺睘锛屾垜浠槸" +
+          localStorage.getItem("orgname") +
+          "鐨勫尰鎶や汉鍛橈紝涓轰簡鏇村ソ鍦颁簡瑙f偍鐨勫悍澶嶆儏鍐碉紝璇锋偍鎶戒竴鐐瑰疂璐垫椂闂达紝瑙傜湅杩欎唤瀹f暀璧勮銆�",
         jsy: "鐢熸椿涓婅鍔抽�哥粨鍚堬紝娉ㄦ剰浼戞伅鍜岃惀鍏伙紝閫傚綋閿荤偧锛屾垝鐑熼檺閰掞紝淇濇寔蹇冩儏鑸掔晠锛屽畾鏈熷璇娿�傞偅鏈鍥炶灏卞埌杩欓噷锛岀鎮ㄨ韩浣撳仴搴凤紒",
       };
 
@@ -1584,9 +1639,9 @@
         this.$refs.upload.submit();
         this.dractive++;
       } else if (this.dractive == 2) {
-        this.handleSelectionChange(this.uploadingData,4);
+        this.handleSelectionChange(this.uploadingData, 4);
         this.upload.open = false;
-        this.dractive = 1
+        this.dractive = 1;
       }
     },
 
@@ -1737,6 +1792,23 @@
     }
   }
 }
+/* 鏂板鏍峰紡 */
+.preview-left {
+  padding: 20px;
+  max-height: 70vh;
+  overflow-y: auto;
+}
+
+/* 绾枃鏈唴瀹规牱寮� */
+.plain-text-content {
+  white-space: pre-wrap;
+  font-size: 16px;
+  line-height: 1.6;
+  padding: 15px;
+  background: #f9f9f9;
+  border-radius: 4px;
+}
+
 .download {
   text-align: center;
   .el-upload__tip {
diff --git a/src/views/patient/propaganda/QuestionnaireTask.vue b/src/views/patient/propaganda/QuestionnaireTask.vue
index c9d61e8..a8e83be 100644
--- a/src/views/patient/propaganda/QuestionnaireTask.vue
+++ b/src/views/patient/propaganda/QuestionnaireTask.vue
@@ -438,7 +438,7 @@
       </div>
       <!-- 浠诲姟璇︽儏 -->
       <div v-if="Editprogress == 2">
-        <el-alert title="鍦ㄦ湰闃舵閫夋嫨瀹f暀鐥呬汉" type="success" effect="dark">
+        <el-alert title="鍦ㄦ湰闃舵閫夋嫨闅忚鐥呬汉" type="success" effect="dark">
         </el-alert>
         <div class="leftvlue-jbxx">
           <div class="examine-jic">
@@ -550,6 +550,12 @@
               <el-form-item label="鎮h�呰瘖鏂細">
                 <el-input
                   v-model="patientqueryParams.leavediagname"
+                  @keyup.enter.native="handleQuery"
+                ></el-input>
+              </el-form-item>
+              <el-form-item label="涓绘不鍖荤敓锛�">
+                <el-input
+                  v-model="patientqueryParams.drname"
                   @keyup.enter.native="handleQuery"
                 ></el-input>
               </el-form-item>
@@ -1026,7 +1032,6 @@
       patientqueryParams: {
         pageNum: 1, //
         pageSize: 10,
-        topica: 1, //0鍏ㄩ儴1绉戝2鐥呭尯
         leavehospitaldistrictcodes: [],
         leaveldeptcodes: [],
       },
@@ -1109,11 +1114,11 @@
       },
       taskoptions: [
         {
-          value: "1",
+          value: "4",
           label: "鍑洪櫌鐥呬汉",
         },
         {
-          value: "4",
+          value: "1",
           label: "鍦ㄩ櫌鐥呬汉",
         },
         {
@@ -1687,11 +1692,7 @@
       this.overallCase.forEach((item) => {
         this.allpids.push(item.patid);
       });
-      if (
-        this.patientqueryParams.allhosp == 1 ||
-        (this.patientqueryParams.allhosp == 1 &&
-          this.patientqueryParams.cry == 1)
-      ) {
+      if (this.patientqueryParams.allhosp == 4) {
         this.tableLabelhz = [
           // { label: "鍏ラ櫌鏃ユ湡", width: "170", prop: "starttime" },
           { label: "鍑洪櫌鏃ユ湡", width: "150", prop: "endtime" },
@@ -1706,7 +1707,7 @@
           { label: "绉戝", width: "180", prop: "dept" },
           { label: "鐥呭尯", width: "150", prop: "leavehospitaldistrictname" },
         ];
-      } else if (this.patientqueryParams.allhosp == 4) {
+      } else if (this.patientqueryParams.allhosp == 1) {
         this.tableLabelhz = [
           { label: "鍏ラ櫌鏃ユ湡", width: "150", prop: "starttime" },
           { label: "鎮h��", width: "", prop: "name" },
@@ -1728,21 +1729,16 @@
       }
       // 鏉ユ簮鍒ゆ柇
 
-      if (this.patientqueryParams.searchscope == 1) {
-        this.patientqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
-          (obj) => obj.deptCode
-        );
+      if (this.patientqueryParams.allhosp == 4) {
+        this.patientqueryParams.hospitaldistrictcodes = [];
+        this.patientqueryParams.deptcodes = [];
+      } else if (this.patientqueryParams.allhosp == 1) {
+        this.patientqueryParams.deptcodes =
+          this.patientqueryParams.leaveldeptcodes;
+        this.patientqueryParams.hospitaldistrictcodes =
+          this.patientqueryParams.leavehospitaldistrictcodes;
         this.patientqueryParams.leavehospitaldistrictcodes = [];
-      } else if (this.patientqueryParams.searchscope == 2) {
-        this.patientqueryParams.leavehospitaldistrictcodes =
-          store.getters.belongWards.map((obj) => obj.districtCode);
         this.patientqueryParams.leaveldeptcodes = [];
-      } else {
-        this.patientqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
-          (obj) => obj.deptCode
-        );
-        this.patientqueryParams.leavehospitaldistrictcodes =
-          store.getters.belongWards.map((obj) => obj.districtCode);
       }
       getTaskpatientQC(this.patientqueryParams).then((response) => {
         this.patientuserList = response.rows;
@@ -1829,7 +1825,6 @@
     getList() {},
     handleQuery() {
       // 鑾峰彇澶栭儴鎮h��
-      console.log(this.patientqueryParams.allhosp, "aaalll");
 
       if (this.patientqueryParams.allhosp == 6) {
         this.Externallist();
@@ -1837,19 +1832,22 @@
 
         return;
       }
-      if (this.patientqueryParams.topica == 0) {
+      if (this.patientqueryParams.searchscope == 1) {
+        this.patientqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
+          (obj) => obj.deptCode
+        );
+        this.patientqueryParams.leavehospitaldistrictcodes = [];
+      } else if (this.patientqueryParams.searchscope == 2) {
         this.patientqueryParams.leavehospitaldistrictcodes =
-          store.getters.leavehospitaldistrictcodes;
-        this.patientqueryParams.leaveldeptcodes = store.getters.leaveldeptcodes;
-      } else if (this.patientqueryParams.topica == 1) {
-        this.patientqueryParams.leavehospitaldistrictcodes = null;
-        this.patientqueryParams.leaveldeptcodes = store.getters.leaveldeptcodes;
-      } else if (this.patientqueryParams.topica == 2) {
+          store.getters.belongWards.map((obj) => obj.districtCode);
+        this.patientqueryParams.leaveldeptcodes = [];
+      } else {
+        this.patientqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
+          (obj) => obj.deptCode
+        );
         this.patientqueryParams.leavehospitaldistrictcodes =
-          store.getters.leavehospitaldistrictcodes;
-        this.patientqueryParams.leaveldeptcodes = null;
+          store.getters.belongWards.map((obj) => obj.districtCode);
       }
-
       if (
         !this.patientqueryParams.leavehospitaldistrictcodes ||
         !this.patientqueryParams.leavehospitaldistrictcodes[0]
diff --git a/src/views/patient/propaganda/particty copy.vue b/src/views/patient/propaganda/particty copy.vue
index e10301d..0bfc80c 100644
--- a/src/views/patient/propaganda/particty copy.vue
+++ b/src/views/patient/propaganda/particty copy.vue
@@ -714,7 +714,7 @@
     this.serviceType = Number(this.$route.query.serviceType);
     this.form.serviceType = Number(this.$route.query.serviceType);
     this.form.nhh = this.$route.query.nhh;
-    this.listDept();
+    // this.listDept();
     this.Acquisitiontype();
     this.Getdetails();
   },
diff --git a/src/views/patient/questionnaire/index.vue b/src/views/patient/questionnaire/index.vue
index ba76b66..15a7093 100644
--- a/src/views/patient/questionnaire/index.vue
+++ b/src/views/patient/questionnaire/index.vue
@@ -739,10 +739,10 @@
           name: "寰呴殢璁�",
           value: 0,
         },
-        {
-          name: "宸插彂閫�",
-          value: 0,
-        },
+        // {
+        //   name: "宸插彂閫�",
+        //   value: 0,
+        // },
 
         // {
         //   name: "琛ㄥ崟宸插彂閫�",
@@ -883,7 +883,7 @@
           this.ycvalue = response.rows[0].yc;
           this.cardlist[2].value = response.rows[0].fssb;
           this.cardlist[3].value = response.rows[0].dsf;
-          this.cardlist[4].value = response.rows[0].yfs2;
+          // this.cardlist[4].value = response.rows[0].yfs2;
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
diff --git a/src/views/patient/shadow/index.vue b/src/views/patient/shadow/index.vue
index 62b7cd5..a6f3b66 100644
--- a/src/views/patient/shadow/index.vue
+++ b/src/views/patient/shadow/index.vue
@@ -739,10 +739,10 @@
           name: "寰呴殢璁�",
           value: 0,
         },
-        {
-          name: "宸插彂閫�",
-          value: 0,
-        },
+        // {
+        //   name: "宸插彂閫�",
+        //   value: 0,
+        // },
 
         // {
         //   name: "琛ㄥ崟宸插彂閫�",
@@ -883,7 +883,7 @@
           this.ycvalue = response.rows[0].yc;
           this.cardlist[2].value = response.rows[0].fssb;
           this.cardlist[3].value = response.rows[0].dsf;
-          this.cardlist[4].value = response.rows[0].yfs2;
+          // this.cardlist[4].value = response.rows[0].yfs2;
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
diff --git a/src/views/patient/subsequent/index.vue b/src/views/patient/subsequent/index.vue
index 641797b..1003a53 100644
--- a/src/views/patient/subsequent/index.vue
+++ b/src/views/patient/subsequent/index.vue
@@ -1141,7 +1141,7 @@
         }
       }
       this.$router.push({
-        path: "/followvisit/record/detailpage/",
+        path: "/followvisit/record/physical/",
         query: {
           taskid: row.taskid,
           patid: row.patid,
diff --git a/src/views/repositoryai/general/particulars/index.vue b/src/views/repositoryai/general/particulars/index.vue
index 48608e6..eb9de9c 100644
--- a/src/views/repositoryai/general/particulars/index.vue
+++ b/src/views/repositoryai/general/particulars/index.vue
@@ -573,7 +573,7 @@
   padding: 10px;
   .leftvlue-jbxx {
     font-size: 24px;
-    border-left: 5px solid #5788fe;
+    border-left: 5px solid #5788FE;
     padding-left: 5px;
     margin: 15px 0;
   }
@@ -594,7 +594,7 @@
   }
   .leftvlue-jbxx {
     font-size: 24px;
-    border-left: 5px solid #5788fe;
+    border-left: 5px solid #5788FE;
     padding-left: 5px;
     margin: 15px 0;
   }
diff --git a/src/views/repositoryai/templateku/configurat/measurement.vue b/src/views/repositoryai/templateku/configurat/measurement.vue
index d9fc2a2..85a1685 100644
--- a/src/views/repositoryai/templateku/configurat/measurement.vue
+++ b/src/views/repositoryai/templateku/configurat/measurement.vue
@@ -155,7 +155,6 @@
       this.timeout = this.$route.query.timeout;
       // 闃叉鐢ㄦ埛澶氭杩炵画鐐瑰嚮鍙戣捣璇锋眰锛屾墍浠ヨ鍏堝叧闂笂娆$殑ws璇锋眰銆�
       closeWebsocket();
-      console.log(this.id);
       const obj = {
         type: "text",
         userId: this.userid,
diff --git a/src/views/shortmessage/healthinformation/compilequer/index.vue b/src/views/shortmessage/healthinformation/compilequer/index.vue
index f872f3b..8a6e6ef 100644
--- a/src/views/shortmessage/healthinformation/compilequer/index.vue
+++ b/src/views/shortmessage/healthinformation/compilequer/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="Questionnairemanagement">
+  <div class="NotificationManagement">
     <!-- 宸︿晶鏍� -->
     <div class="sidecolumn">
       <el-steps finish-status="success" :active="Editprogress" simple>
@@ -10,13 +10,6 @@
             >
           </template>
         </el-step>
-        <el-step>
-          <template slot="title">
-            <span style="cursor: pointer" @click="Editprogress = 2"
-              >閫氱煡鍐呭</span
-            >
-          </template>
-        </el-step>
       </el-steps>
     </div>
     <!-- 鍙充晶鏁版嵁 -->
@@ -24,6 +17,7 @@
       <!-- 鍩烘湰淇℃伅 -->
       <div v-if="Editprogress == 1">
         <div class="leftvlue-jbxx">鍩烘湰淇℃伅</div>
+        <el-divider></el-divider>
         <el-form
           :model="ruleForm"
           :rules="rules"
@@ -58,20 +52,20 @@
             <el-col :span="12"> </el-col>
           </el-row>
           <el-form-item label="閫氱煡鏍囬" prop="preachname">
-            <div style="width: 30%">
+            <div style="width: 60%">
               <el-input
                 v-model="ruleForm.preachname"
                 placeholder="璇疯緭鍏ユ爣棰�"
               ></el-input>
             </div>
           </el-form-item>
-          <el-form-item label="閫氱煡鎻忚堪" prop="preachcontent">
-            <div style="width: 60%">
+          <el-form-item label="閫氱煡鍐呭" prop="preachcontent">
+            <div style="width: 80%">
               <el-input
                 type="textarea"
-                :rows="2"
+                :rows="5"
                 v-model="ruleForm.preachcontent"
-                placeholder="璇疯緭鍏ユ弿杩�"
+                placeholder="璇疯緭鍏ラ�氱煡鍐呭"
               ></el-input>
             </div>
           </el-form-item>
@@ -109,21 +103,6 @@
             </div>
           </el-form-item>
 
-          <el-form-item label="鏂囦欢" prop="sickness">
-            <div style="width: 40%">
-              <el-upload
-                class="upload-demo"
-                action="https://jsonplaceholder.typicode.com/posts/"
-                :on-change="handleChange"
-                :file-list="fileList"
-              >
-                <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
-                <div slot="tip" class="el-upload__tip">
-                  鍙兘涓婁紶jpg/png/xsl鏂囦欢锛屼笖涓嶈秴杩�50mb
-                </div>
-              </el-upload>
-            </div>
-          </el-form-item>
           <el-form-item label="鏍囩" prop="desc">
             <div class="xinz-inf">
               <el-tag
@@ -142,6 +121,7 @@
                 @change="handleInputConfirm"
                 filterable
                 remote
+                allow-create
                 reserve-keyword
                 default-first-option
                 :remote-method="remoteMethodtag"
@@ -175,53 +155,23 @@
             ></el-col>
             <el-col :span="9">
               <el-form-item label="鍙敤鐘舵��" prop="region">
-                <el-select
-                  v-model="ruleForm.isavailable"
-                  size="medium"
-                  filterable
-                  placeholder="璇烽�夋嫨鍒嗙被"
-                >
-                  <el-option
-                    class="ruleFormaa"
-                    v-for="item in usable"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value"
+                <el-radio-group v-model="ruleForm.isAvailable">
+                  <el-radio
+                    v-for="(item, index) in usable"
+                    :label="item.value"
+                    >{{ item.label }}</el-radio
                   >
-                  </el-option>
-                </el-select> </el-form-item
-            ></el-col>
+                </el-radio-group>
+              </el-form-item></el-col
+            >
           </el-row>
-          <el-form-item label="閫氱煡鏂瑰紡" prop="region">
-            <el-select
-              v-model="ruleForm.suitway"
-              size="medium"
-              multiple
-              filterable
-              placeholder="璇烽�夋嫨鍒嗙被"
-            >
-              <el-option
-                class="ruleFormaa"
-                v-for="item in mode"
-                :key="item.label"
-                :label="item.label"
-                :value="item.label"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <!-- <el-form-item label="閫傜敤鐤剧梾" prop="region">
-            <el-button type="warning" @click="$refs.child.handleAddpatient()"
-              >娣诲姞鐤剧梾</el-button
-            >
-          </el-form-item> -->
           <el-form-item label="閫傜敤闄㈠尯" prop="region">
             <el-select
               v-model="ruleForm.campus"
               size="medium"
               multiple
               filterable
-              placeholder="璇烽�夋嫨鍒嗙被"
+              placeholder="璇烽�夋嫨闄㈠尯"
             >
               <el-option
                 class="ruleFormaa"
@@ -248,105 +198,12 @@
             </el-cascader>
           </el-form-item>
           <el-form-item>
-            <el-button type="success" @click="nextstep('ruleForm')"
-              >涓嬩竴姝�</el-button
-            >
             <el-button type="success" @click="Departmenttreatment('ruleForm')"
               >淇濆瓨</el-button
             >
             <el-button type="info" @click="closeFm('ruleForm')">鍏抽棴</el-button>
           </el-form-item>
         </el-form>
-      </div>
-      <!-- 閫氱煡鍐呭 -->
-      <div v-if="Editprogress == 2">
-        <el-row :gutter="20">
-          <el-col :span="4"><div class="leftvlue-jbxx">閫氱煡鍐呭</div></el-col>
-        </el-row>
-
-        <div>
-          <el-form
-            :model="ruleForm"
-            :rules="rules"
-            ref="ruleForm"
-            label-width="100px"
-            class="demo-ruleForm"
-          >
-            <el-row gutter="20">
-              <el-col :span="12">
-                <el-form-item label="璧勬枡褰㈠紡" prop="region">
-                  <el-select
-                    v-model="ruleForm.shape"
-                    placeholder="璇烽�夋嫨鍐呭褰㈠紡"
-                  >
-                    <el-option
-                      v-for="item in xjxsoptions"
-                      :key="item.value"
-                      :label="item.label"
-                      :value="item.value"
-                    >
-                    </el-option>
-                  </el-select>
-                </el-form-item>
-              </el-col>
-              <el-col :span="12">
-                <div>
-                  <el-button @click="laststep('ruleForm')">涓婁竴姝�</el-button>
-                  <el-button
-                    type="success"
-                    @click="Departmenttreatment('ruleForm')"
-                    >淇濆瓨</el-button
-                  >
-                  <el-button
-                    type="warning"
-                    @click="Departmenttreatment('ruleForm')"
-                    >鍙﹀瓨鏂扮増鏈�</el-button
-                  >
-                  <el-button type="info" @click="closeFm('ruleForm')"
-                    >鍏抽棴</el-button
-                  >
-                </div></el-col
-              >
-            </el-row>
-          </el-form>
-        </div>
-        <div>
-          <el-upload
-            class="upload-demo"
-            :action="uploadImgUrlword"
-            :on-success="uploadEditorSuccessword"
-            :on-error="uploadEditorErrorword"
-            :before-upload="beforeEditorUploadword"
-            :headers="headers"
-          >
-            <el-button size="small" type="primary">word鏂囦欢涓婁紶</el-button>
-          </el-upload>
-          <div id="quillEditorQiniu">
-            <!-- 鍩轰簬elementUi鐨勪笂浼犵粍浠� el-upload begin-->
-            <el-upload
-              class="avatar-uploader"
-              :action="uploadImgUrl"
-              :accept="'image/*,video/*'"
-              :show-file-list="false"
-              :on-success="uploadEditorSuccess"
-              :on-error="uploadEditorError"
-              :before-upload="beforeEditorUpload"
-              :headers="headers"
-            >
-            </el-upload>
-            <!-- 鍩轰簬elementUi鐨勪笂浼犵粍浠� el-upload end-->
-            <quill-editor
-              class="editor"
-              v-model="content"
-              ref="customQuillEditor"
-              :options="editorOption"
-              @blur="onEditorBlur"
-              @focus="onEditorFocus"
-              @change="onEditorChange"
-            >
-            </quill-editor>
-          </div>
-        </div>
       </div>
     </div>
     <!-- 娣诲姞閫傜敤鐤剧梾绐楀彛 -->
@@ -361,9 +218,7 @@
 </template>
 
 <script>
-import { quillEditor } from "vue-quill-editor";
 import axios from "axios";
-
 import {
   getheLibraryAssort,
   delheLibraryAssort,
@@ -379,115 +234,33 @@
   illnesslistget,
   getillness,
 } from "@/api/AiCentre/index";
-import OptionalForm from "@/components/OptionalForm"; //姝e垯缁勪欢
-
+import OptionalForm from "@/components/OptionalForm";
 import { listDept } from "@/api/system/dept";
-// import * as Quill from "quill";
-import Quill from "quill";
 import { listtag } from "@/api/system/label";
 import store from "@/store";
-
-// 杩欓噷寮曞叆淇敼杩囩殑video妯″潡骞舵敞鍐�
-import Video from "./video";
-Quill.register(Video, true);
-//鑾峰彇鐧诲綍token锛屽紩鍏ユ枃浠讹紝濡傛灉鍙槸绠�鍗曟祴璇曪紝娌℃湁涓婁紶鏂囦欢鏄惁鐧诲綍鐨勯檺鍒剁殑璇濓紝
-//杩欎釜token鍙互涓嶇敤鑾峰彇锛屾枃浠跺彲浠ヤ笉寮曞叆锛屾妸涓婇潰瀵瑰簲鐨勪笂浼犳枃浠舵惡甯﹁姹傚ご  :headers="headers" 杩欎釜浠g爜鍒犳帀鍗冲彲
 import { getToken } from "@/utils/auth";
-const toolbarOptions = [
-  ["bold", "italic", "underline", "strike"], // toggled buttons
-  ["blockquote", "code-block"],
-
-  [{ header: 1 }, { header: 2 }], // custom button values
-  [{ list: "ordered" }, { list: "bullet" }],
-  [{ script: "sub" }, { script: "super" }], // superscript/subscript
-  [{ indent: "-1" }, { indent: "+1" }], // outdent/indent
-  [{ direction: "rtl" }], // text direction
-
-  [{ size: ["small", false, "large", "huge"] }], // custom dropdown
-  [{ header: [1, 2, 3, 4, 5, 6, false] }],
-
-  [{ color: [] }, { background: [] }], // dropdown with defaults from theme
-  [{ font: [] }],
-  [{ align: [] }],
-  ["link", "image", "video"],
-  ["clean"], // remove formatting button
-];
 
 export default {
+  name: "NotificationManagement",
   components: { OptionalForm },
   data() {
     return {
       headers: {
         Authorization: "Bearer " + getToken(),
       },
-      uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/upload",
-      uploadImgUrlword: process.env.VUE_APP_BASE_API + "/common/uploadShow",
-      uploadUrlPath: "娌℃湁鏂囦欢涓婁紶",
-      quillUpdateImg: false,
-      fileList: [
-        {
-          name: "food.jpeg",
-          url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
-        },
-        {
-          name: "food2.jpeg",
-          url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
-        },
-      ],
-      content: "", //鏈�缁堜繚瀛樼殑鍐呭
-      fileName: "", //鏂囦欢鍚�
       dynamicTags: [],
       inputVisible: false,
       illnessVisible: false,
-      dialogVisiblepatient: false, //閫傜敤鐤剧梾绐楀彛
+      dialogVisiblepatient: false,
       inputValue: "",
-      // 瀵屾枃鏈�
-      editorOption: {
-        placeholder: "浣犳兂璇翠粈涔堬紵",
-        modules: {
-          imageResize: {
-            displayStyles: {
-              backgroundColor: "black",
-              border: "none",
-              color: "white",
-            },
-            modules: ["Resize", "DisplaySize", "Toolbar"],
-          },
-          toolbar: {
-            container: toolbarOptions, // 宸ュ叿鏍�
-            handlers: {
-              image: function (value) {
-                if (value) {
-                  document
-                    .querySelector("#quillEditorQiniu .avatar-uploader input")
-                    .click();
-                } else {
-                  this.quill.format("image", false);
-                }
-              },
-              video: function (value) {
-                if (value) {
-                  document
-                    .querySelector("#quillEditorQiniu .avatar-uploader input")
-                    .click();
-                } else {
-                  this.quill.format("video", false);
-                }
-              },
-            },
-          },
-        },
-      },
-
-      sidecolumnrabs: "left", //鏂瑰悜
-      Editprogress: 1, //缂栬緫杩涘害
-      currentVersion: "1.2.3", //褰撳墠鐗堟湰
-      loading: false, // 閬僵灞�
-      drawer: false, //鎺у埗灞曞紑
-      radio: "false", //鍗曢�夐閫変腑
-      radios: [], //澶氶�夐閫変腑
-      radioas: "", //濉┖棰樼瓟妗�
-      // 鎬绘潯鏁�
+      sidecolumnrabs: "left",
+      Editprogress: 1,
+      currentVersion: "1.2.3",
+      loading: false,
+      drawer: false,
+      radio: "false",
+      radios: [],
+      radioas: "",
       total: 1,
       hetype: "",
       id: null,
@@ -513,42 +286,24 @@
       deptList: [],
       tempDetpRelevanceslist: [],
       props: { multiple: true, value: "deptId", label: "deptName" },
-      xjxsoptions: [
-        {
-          value: "1",
-          label: "鍥炬枃",
-        },
-        {
-          value: "2",
-          label: "瑙嗛",
-        },
-        {
-          value: "3",
-          label: "闊抽",
-        },
-      ],
-      valssu: [
-        {
-          idd: 1,
-          wssd: "浣犳渶杩戞�庝箞鏍�",
-          sdadd: ["sss", "ssccss", "ssaas", "ss"],
-        },
-      ],
-      addvalue: "娣诲姞棰樼洰",
-
       variablelist: [
         { variatename: "濮撳悕", variate: "${name}", default: 1 },
         { variatename: "鐢佃瘽", variate: "${phone}", default: 1 },
         { variatename: "鐥呮儏", variate: "${illness}", default: 1 },
       ],
-      // 鏌ヨ鍙傛暟
       queryParams: {
         pageNum: 1,
         pageSize: 10,
       },
     };
   },
-
+  activated() {
+    if (this.id != this.$route.query.id) {
+      this.gettabList();
+      this.getList();
+      this.illnessUpdate();
+    }
+  },
   created() {
     this.gettabList();
     this.getList();
@@ -559,18 +314,7 @@
     this.precedencetype = store.getters.precedencetype;
     this.courtyardlist = store.getters.courtyardlist;
   },
-  watch: {
-    content(newVal, oldVal) {
-      //this.$emit('input', newVal);
-      console.log(newVal, "A");
-      console.log(oldVal, "B");
-    },
-  },
-
   methods: {
-    processElement(element) {
-      return { ...element, isoperation: null };
-    },
     // 鑾峰彇椤甸潰鏁版嵁
     getList() {
       this.loading = true;
@@ -579,16 +323,13 @@
       if (this.id) {
         getlibraryinfo({ id: this.id }).then((res) => {
           this.ruleForm = res.data[0];
-          this.ruleForm.campus = this.ruleForm.campus.split(",");
+          if (this.ruleForm.campus)
+            this.ruleForm.campus = this.ruleForm.campus.split(",");
           this.dynamicTags = res.data[0].heLibraryTagList.map(
             this.processElement
           );
-          this.Getmissioncontent(this.ruleForm.richText);
           if (this.ruleForm.deptNames) {
             this.tempDetpRelevanceslist = JSON.parse(this.ruleForm.deptNames);
-          }
-          if (this.ruleForm.suitway) {
-            this.ruleForm.suitway = this.ruleForm.suitway.split(",");
           }
           this.variablelist = this.ruleForm.otherdata
             ? JSON.parse(this.ruleForm.otherdata)
@@ -598,51 +339,46 @@
       // 閫氱煡鍒嗙被
       getheLibraryAssort({ hetype: 2 }).then((res) => {
         this.sortlist = res.rows;
-        console.log(this.sortlist);
       });
       // 閮ㄩ棬
       listDept(this.queryParams).then((response) => {
         this.deptList = this.handleTree(response.data, "deptId");
       });
-      this.loading = false;
     },
-
+    processElement(element) {
+      return { ...element, isoperation: null };
+    },
     submitForm(formName) {
       let tgs = [];
       this.dynamicTags.forEach((item) => {
         tgs.push(item.tagname);
       });
-      this.ruleForm.campus = this.ruleForm.campus.join(",");
+      if (this.ruleForm.campus) {
+        this.ruleForm.campus = this.ruleForm.campus.join(",");
+      }
       this.ruleForm.labelInfo = tgs.length != 0 ? tgs.join(", ") : "";
       this.ruleForm.otherdata = JSON.stringify(this.variablelist);
-      this.ruleForm.hetype = 2;
-      console.log(22);
-      this.ruleForm.suitway =
-        this.ruleForm.suitway.length != 0
-          ? this.ruleForm.suitway.join(",")
-          : "";
+      this.ruleForm.hetype = 2; // 閫氱煡绫诲瀷
 
-      addrichText({
-        content: this.content,
-        fileName: this.fileName ? this.fileName : "娴嬭瘯.html",
-      }).then((res) => {
-        this.ruleForm.richText = res.msg;
-        if (this.id) {
-          this.ruleForm.isoperation = 2;
-          compilelibrary(this.ruleForm).then((res) => {
+      if (this.id) {
+        this.ruleForm.isoperation = 2;
+        compilelibrary(this.ruleForm).then((res) => {
+          if (res.code == 200) {
             this.$modal.msgSuccess("缂栬緫鎴愬姛");
             this.confirmillness();
             this.$router.go(-1);
-          });
-        } else {
-          this.ruleForm.isoperation = 1;
-          compilelibrary(this.ruleForm).then((res) => {
+          }
+        });
+      } else {
+        this.ruleForm.isoperation = 1;
+        compilelibrary(this.ruleForm).then((res) => {
+          if (res.code == 200) {
             this.$modal.msgSuccess("鏂板鎴愬姛");
             this.confirmillness(res.data);
             this.$router.go(-1);
-          });
-        }
-      });
+          }
+        });
+      }
     },
     // 淇濆瓨鐤剧梾
     confirmillness(guid) {
@@ -650,7 +386,6 @@
         if (guid) {
           item.outid = guid;
         } else {
-          console.log(this.ruleForm);
           item.outid = this.ruleForm.id;
         }
         item.icd10name = item.icdname;
@@ -662,20 +397,6 @@
       });
       this.illnessVisible = false;
       this.$modal.msgSuccess("缂栬緫鎴愬姛");
-    },
-    getFileNameFromPath(path) {
-      const parts = path.split("/");
-      return parts[parts.length - 1];
-    },
-    // 涓嬩竴姝�
-    nextstep() {
-      if (this.Editprogress <= 1) {
-        return this.Editprogress++;
-      }
-    },
-    // 涓婁竴姝�
-    laststep() {
-      this.Editprogress = this.Editprogress - 1;
     },
     // 鍏抽棴
     closeFm() {
@@ -707,7 +428,6 @@
         );
         if (!condition) {
           listDept({ deptId: item }).then((res) => {
-            console.log("dept");
             res.data[0].type = 2;
             this.ruleForm.tempDetpRelevances.push(res.data[0]);
           });
@@ -724,12 +444,7 @@
       setTimeout(() => {
         this.submitForm();
       }, 1000);
-      // this.submitForm();
     },
-    // 淇濆瓨棰樼洰淇℃伅
-    Saveproblem() {},
-    /** 鏌ヨ棰樼洰鍒楄〃 */
-
     // 鏂板鍙橀噺
     addvariable() {
       this.variablelist.push({
@@ -741,16 +456,12 @@
     delvariable(item) {
       const index = this.variablelist.indexOf(item);
       if (index !== -1) {
-        this.variablelist.splice(index, 1); // 浠庣储寮曚綅缃垹闄や竴涓厓绱�
+        this.variablelist.splice(index, 1);
       } else {
         console.log("鏈壘鍒拌瀵硅薄");
       }
     },
-    // 鎺у埗鏂囦欢
-    handleChange(file, fileList) {
-      this.fileList = fileList.slice(-3);
-    },
-    // 鏍囩-----------------
+    // 鏍囩鐩稿叧鏂规硶
     gettabList() {
       const tagqueryParams = {
         pageNum: 1,
@@ -762,11 +473,9 @@
       });
     },
     handleClosetag(tag) {
-      console.log(tag);
       const lindex = this.ruleForm.heLibraryTagList.findIndex(
         (item) => item.tagname == tag.tagname
       );
-      console.log(lindex);
       this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
       this.ruleForm.heLibraryTagList[lindex].isoperation = 3;
     },
@@ -812,7 +521,7 @@
     showInput() {
       this.inputVisible = true;
     },
-    // 鐤剧梾-----------------------
+    // 鐤剧梾鐩稿叧鏂规硶
     illnessUpdate() {
       if (this.id) {
         getillness({ outid: this.$route.query.id, type: 6 }).then((res) => {
@@ -823,9 +532,6 @@
         });
       }
     },
-
-    // --------------------------
-
     // 棰勮妯℃澘
     PreviewTemplate() {
       this.drawer = true;
@@ -833,129 +539,12 @@
     resetForm(formName) {
       this.$refs[formName].resetFields();
     },
-
-    //涓婁紶鍥剧墖涔嬪墠async
-    beforeEditorUpload(res, file) {
-      //鏄剧ず涓婁紶鍔ㄧ敾
-      this.quillUpdateImg = true;
-      //  const res1 = await uploadImage()
-      // console.log(res1,'=====');
-      // this.$emit('before',res, file)
-      console.log(res);
-      console.log(file);
-    },
-    // 涓婁紶鍥剧墖鎴愬姛
-    uploadEditorSuccess(res, file) {
-      console.log("涓婁紶鎴愬姛");
-      // this.$emit('upload',res, file)
-      console.log(res, file);
-      //鎷兼帴鍑轰笂浼犵殑鍥剧墖鍦ㄦ湇鍔″櫒鐨勫畬鏁村湴鍧�
-      let imgUrl = res.url;
-      let type = imgUrl.substring(imgUrl.lastIndexOf(".") + 1);
-      console.log(type);
-      // 鑾峰彇瀵屾枃鏈粍浠跺疄渚�
-      let quill = this.$refs.customQuillEditor.quill;
-      // 鑾峰彇鍏夋爣鎵�鍦ㄤ綅缃�
-      let length = quill.getSelection().index;
-      // 鎻掑叆鍥剧墖||瑙嗛  res.info涓烘湇鍔″櫒杩斿洖鐨勫浘鐗囧湴鍧�
-      if (type == "mp4" || type == "MP4") {
-        window.jsValue = imgUrl;
-        quill.insertEmbed(length, "video", imgUrl);
-      } else {
-        quill.insertEmbed(length, "image", imgUrl);
-      }
-      // 璋冩暣鍏夋爣鍒版渶鍚�
-      quill.setSelection(length + 1);
-      //鍙栨秷涓婁紶鍔ㄧ敾
-      this.quillUpdateImg = false;
-    },
-    // 澶卞幓鐒︾偣浜嬩欢
-    onEditorBlur(e) {
-      console.log("onEditorBlur: ", e);
-    },
-    // 鑾峰緱鐒︾偣浜嬩欢
-    onEditorFocus(e) {
-      console.log("onEditorFocus: ", e);
-    },
-    // 鍐呭鏀瑰彉浜嬩欢
-    onEditorChange(e) {
-      console.log("onEditorChange: ", e);
-    },
-    // 涓婁紶(鏂囦欢)鍥剧墖澶辫触
-    uploadEditorError(res, file) {
-      console.log(res, "word");
-      console.log(file, "word");
-      //椤甸潰鎻愮ず
-      this.$message.error("涓婁紶鍥剧墖澶辫触");
-      //鍙栨秷涓婁紶鍔ㄧ敾
-      this.quillUpdateImg = false;
-    },
-    //涓婁紶缁勪欢杩斿洖鐨勭粨鏋�
-    uploadResult: function (res) {
-      this.uploadUrlPath = res;
-    },
-    // 涓婁紶(鏂囦欢)鍥剧墖澶辫触
-    uploadEditorErrorword(res, file) {
-      console.log(res);
-      console.log(file);
-      //椤甸潰鎻愮ず
-      this.$message.error("涓婁紶鍥剧墖澶辫触");
-      //鍙栨秷涓婁紶鍔ㄧ敾
-      this.quillUpdateImg = false;
-    },
-    //涓婁紶鍥剧墖涔嬪墠async
-    beforeEditorUploadword(res, file) {
-      //鏄剧ず涓婁紶鍔ㄧ敾
-      this.quillUpdateImg = true;
-      //  const res1 = await uploadImage()
-      // console.log(res1,'=====');
-      // this.$emit('before',res, file)
-      console.log(res);
-      console.log(file);
-    },
-    // 涓婁紶鍥剧墖鎴愬姛
-    uploadEditorSuccessword(res, file) {
-      console.log("涓婁紶鎴愬姛");
-      const data = null;
-      console.log(res, file, "word");
-      axios
-        .get(res.url)
-        .then((response) => {
-          console.log(response.data, "鏁版嵁"); // 杈撳嚭鑾峰彇鍒扮殑鏂囦欢鍐呭
-          this.content = response.data;
-          this.texturl = res.url;
-          this.fileName = this.getFileNameFromPath(res.url);
-        })
-        .catch((error) => {
-          console.error("Failed to fetch file:", error);
-        });
-    },
-    Getmissioncontent(url) {
-      axios
-        .get(url)
-        .then((response) => {
-          console.log(response.data, "鏁版嵁"); // 杈撳嚭鑾峰彇鍒扮殑鏂囦欢鍐呭
-          this.content = response.data;
-          this.fileName = this.getFileNameFromPath(res.url);
-        })
-        .catch((error) => {
-          console.error("Failed to fetch file:", error);
-        });
-    },
   },
 };
 </script>
 
 <style lang="scss" scoped>
-.Questionnairemanagement {
-  // display: flex;
-}
 .sidecolumn {
-  // width: 300px;
-  // min-height: 100vh;
-  // text-align: center;
-  //   display: flex;
-  //   margin-top: 20px;
   margin: 20px;
   margin-bottom: 0;
   padding: 20px;
@@ -964,47 +553,34 @@
   -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
     0 0 6px 0 rgba(0, 0, 0, 0.04);
 }
+
 .leftvlue {
-  //   display: flex;
-  //   flex: 1;
   margin: 20px;
   padding: 30px;
   background: #ffff;
   border: 1px solid #dcdfe6;
   -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
     0 0 6px 0 rgba(0, 0, 0, 0.04);
-  .mulsz {
-    font-size: 20px;
-  }
+
   .leftvlue-jbxx {
-    margin-bottom: 50px;
-    font-size: 20px;
-    span {
-      position: absolute;
-      right: 80px;
-    }
-  }
-  .demo-cascader {
-    margin-right: 20px;
-  }
-  .PreviewTemplate {
-    color: #02a7f0;
-    cursor: pointer;
-    font-size: 20px;
-    margin: 0 20px;
+    font-size: 24px;
+    height: 30px;
+    border-left: 3px solid #41a1be;
+    padding-left: 3px;
   }
 }
+
 .xinz-inf {
   font-size: 18px;
   white-space: nowrap;
   overflow: hidden;
   text-overflow: ellipsis;
-
   line-height: 48px;
 
   .el-tag + .el-tag {
     margin-left: 10px;
   }
+
   .button-new-tag {
     margin-left: 10px;
     height: 32px;
@@ -1012,176 +588,41 @@
     padding-top: 0;
     padding-bottom: 0;
   }
+
   .input-new-tag {
     width: 90px;
     margin-left: 10px;
     vertical-align: bottom;
   }
 }
-.preview-left {
-  margin: 20px;
-  //   margin: 20px;
-  padding: 30px;
-  background: #ffff;
-  border: 1px solid #dcdfe6;
-  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
-    0 0 6px 0 rgba(0, 0, 0, 0.04);
-  .topic-dev {
-    margin-bottom: 25px;
-    font-size: 20px !important;
-    .dev-text {
-      margin-bottom: 10px;
-    }
-  }
-}
-.addtopic {
-  margin-top: 30px;
-}
-.presentation {
-  margin: 20px 0;
-  display: flex;
-  .presentation-left {
-    width: 50%;
-    height: 500px;
-    .button-textxg {
-      color: #024df0;
-    }
-    .button-textsc {
-      color: #f52727;
-    }
-  }
-  .presentation-right {
-    width: 50%;
-    height: 500px;
-    padding: 20px;
-    font-size: 18px;
-    border: 1px solid #909091;
-    span {
-      padding: 0 35px;
-      margin-right: 10px;
-      border-bottom: 1px solid #909091;
-    }
-    .headline {
-      font-size: 20px;
-      border-left: 3px solid #41a1be;
-      padding-left: 5px;
-      margin: 15px 0;
-    }
-  }
-}
-::v-deep .addtopic-input {
-  input {
-    background: #02a7f0;
-    color: #edf1f7;
-    width: 150px;
-  }
-}
-::v-deep.el-step.is-vertical .el-step__title {
+
+::v-deep .el-step.is-vertical .el-step__title {
   font-size: 25px;
 }
+
 ::v-deep.el-input--medium {
   font-size: 18px !important;
 }
-::v-deep.ruleFormaa.el-select {
-  display: inline-block;
-  position: relative;
-  width: 700px;
-}
-.el-select__tags {
+
+::v-deep.el-select__tags {
   font-size: 20px;
   max-width: 888px !important;
 }
+
 ::v-deep.el-radio__inner {
   width: 22px;
   height: 22px;
 }
-// ::v-deep.topic-dev.el-radio__label {
-//   font-size: 24px;
-// }
+
 ::v-deep.el-radio-group {
   span {
     font-size: 24px;
   }
 }
+
 ::v-deep.el-checkbox-group {
   span {
     font-size: 24px;
   }
-}
-.editor {
-  line-height: normal !important;
-  height: 600px;
-  margin-bottom: 80px;
-}
-.ql-snow .ql-tooltip[data-mode="link"]::before {
-  content: "璇疯緭鍏ラ摼鎺ュ湴鍧�:";
-}
-.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
-  border-right: 0px;
-  content: "淇濆瓨";
-  padding-right: 0px;
-}
-
-.ql-snow .ql-tooltip[data-mode="video"]::before {
-  content: "璇疯緭鍏ヨ棰戝湴鍧�:";
-}
-
-.ql-snow .ql-picker.ql-size .ql-picker-label::before,
-.ql-snow .ql-picker.ql-size .ql-picker-item::before {
-  content: "14px";
-}
-.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
-.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
-  content: "10px";
-}
-.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
-.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
-  content: "18px";
-}
-.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
-.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
-  content: "32px";
-}
-
-.ql-snow .ql-picker.ql-header .ql-picker-label::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item::before {
-  content: "鏂囨湰";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
-  content: "鏍囬1";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
-  content: "鏍囬2";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
-  content: "鏍囬3";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
-  content: "鏍囬4";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
-  content: "鏍囬5";
-}
-.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
-.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
-  content: "鏍囬6";
-}
-
-.ql-snow .ql-picker.ql-font .ql-picker-label::before,
-.ql-snow .ql-picker.ql-font .ql-picker-item::before {
-  content: "鏍囧噯瀛椾綋";
-}
-.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
-.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
-  content: "琛嚎瀛椾綋";
-}
-.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
-.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
-  content: "绛夊瀛椾綋";
 }
 </style>
diff --git a/src/views/shortmessage/healthinformation/index.vue b/src/views/shortmessage/healthinformation/index.vue
index ee7d665..009fdf7 100644
--- a/src/views/shortmessage/healthinformation/index.vue
+++ b/src/views/shortmessage/healthinformation/index.vue
@@ -141,7 +141,6 @@
                   icon="el-icon-plus"
                   size="medium"
                   @click="handleAdd"
-                  v-hasPermi="['system:user:add']"
                   >鏂板</el-button
                 >
               </el-col>

--
Gitblit v1.9.3