From a78b97b7eda94afd0c869770c16688c020880a4a Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期三, 17 九月 2025 15:35:46 +0800
Subject: [PATCH] 同步

---
 src/api/AiCentre/index.js                          |   28 
 src/utils/sipService-cs.js                         |    1 
 src/views/followvisit/tasklist/index.vue           |   48 +
 src/store/modules/user.js                          |  108 +++++
 src/api/AiCentre/phoneCall.js                      |   18 
 src/api/system/config.js                           |    2 
 src/utils/sipService.js                            |   53 ++
 src/components/PatientSelection/index.vue          |  585 +++++++++++++++++++++++++++
 src/views/patient/propaganda/QuestionnaireTask.vue |   27 
 src/views/system/user/index.vue                    |    5 
 src/assets/order/Xftp-8.0.0084p.exe                |    0 
 src/views/patient/propaganda/index.vue             |    7 
 src/views/followvisit/record/detailpage/index.vue  |  202 +++++++++
 src/components/CallButton/index.vue                |  123 +++++
 src/views/followvisit/discharge/index.vue          |    3 
 src/views/outsideChainwtnew.vue                    |   47 +
 src/views/patient/follow/index.vue                 |    3 
 17 files changed, 1,170 insertions(+), 90 deletions(-)

diff --git a/src/api/AiCentre/index.js b/src/api/AiCentre/index.js
index 60f658f..9af0b74 100644
--- a/src/api/AiCentre/index.js
+++ b/src/api/AiCentre/index.js
@@ -1,14 +1,14 @@
-export * from './indicator'
-export * from './Problemspeaking'
-export * from './Followup'
-export * from './general'
-export * from './publicity'
-export * from './Qtemplate'
-export * from './questionnaire'
-export * from './SingleTask'
-export * from './external'
-export * from './patientexternal'
-export * from './EChartsdata'
-export * from './satisfactionse'
-export * from './satisfaction'
-
+export * from "./indicator";
+export * from "./Problemspeaking";
+export * from "./Followup";
+export * from "./general";
+export * from "./publicity";
+export * from "./Qtemplate";
+export * from "./questionnaire";
+export * from "./SingleTask";
+export * from "./external";
+export * from "./patientexternal";
+export * from "./EChartsdata";
+export * from "./satisfactionse";
+export * from "./satisfaction";
+export * from "./phoneCall";
diff --git a/src/api/AiCentre/phoneCall.js b/src/api/AiCentre/phoneCall.js
new file mode 100644
index 0000000..84769dc
--- /dev/null
+++ b/src/api/AiCentre/phoneCall.js
@@ -0,0 +1,18 @@
+import request from "@/utils/request";
+
+
+// 鍒犻櫎澶栭儴鎮h�呰〃
+export function CallgetList() {
+  return request({
+    url: "/smartor/ServiceTelInfo/getList",
+    method: "get",
+  });
+}
+// 鏌ヨ澶栭儴鎮h�呰〃
+export function CallsetState(data) {
+  return request({
+    url: "/smartor/ServiceTelInfo/setState",
+    method: "get",
+    params: data,
+  });
+}
diff --git a/src/api/system/config.js b/src/api/system/config.js
index ed66326..3f5ab8b 100644
--- a/src/api/system/config.js
+++ b/src/api/system/config.js
@@ -28,7 +28,7 @@
 // 鏂板鍙傛暟閰嶇疆
 export function addConfig(data) {
   return request({
-    url: '/system/config/add',
+    url: '/system/config',
     method: 'post',
     data: data
   })
diff --git a/src/assets/order/Xftp-8.0.0084p.exe b/src/assets/order/Xftp-8.0.0084p.exe
new file mode 100644
index 0000000..a3a2a02
--- /dev/null
+++ b/src/assets/order/Xftp-8.0.0084p.exe
Binary files differ
diff --git a/src/components/CallButton/index.vue b/src/components/CallButton/index.vue
index 0aa24ce..453b877 100644
--- a/src/components/CallButton/index.vue
+++ b/src/components/CallButton/index.vue
@@ -28,6 +28,7 @@
 
 <script>
 import sipService from "@/utils/sipService";
+import { CallsetState, CallgetList } from "@/api/AiCentre/index";
 
 export default {
   props: {
@@ -37,17 +38,20 @@
     },
   },
   data() {
-    const randomNum = Math.floor(Math.random() * 20) + 1000; // 鍐呴儴瀹氫箟
+    const randomNum = Math.floor(Math.random() * 20) + 1000; // 瀹氫箟闅忔満鍒嗘満鍙�
     return {
       isCalling: false,
+      randomNum: randomNum,
+      randomID: null,
       callStatus: "idle", // idle, calling, connected, ended
       sipStatus: "鏈繛鎺�",
       sipStatusClass: "status-disconnected",
       sipConfig: {
-        wsUrl: "wss://1192.170.66.107:7443",
-        sipUri: `${randomNum}` + "@1192.170.66.107",
+        wsUrl: "wss://192.168.10.124:7443",
+        sipUri: "",
         password: "Smartor@2023",
         displayName: "Web 灏忛緳",
+        // realm: "9.208.5.18:8090",
         // realm: "9.208.5.18:8090",
       },
     };
@@ -62,6 +66,15 @@
       };
       return statusMap[this.callStatus];
     },
+    countdownText() {
+      if (this.sipStatus !== "宸叉敞鍐�") return "";
+
+      const { canCall, reason } = sipService.canMakeCall();
+      if (!canCall && reason.includes("绛夊緟")) {
+        return reason;
+      }
+      return "";
+    },
     callStatusClass() {
       return `status-${this.callStatus}`;
     },
@@ -69,19 +82,22 @@
       return this.isCalling ? "閫氳瘽涓�..." : "涓�閿懠鍙�";
     },
   },
-  mounted() {
-    // 娴嬭瘯
-    const ws = new WebSocket("wss://9.208.5.18:7443");
-    ws.onopen = () => console.log("WebSocket 杩炴帴鎴愬姛");
-    ws.onerror = (e) => console.error("WebSocket 閿欒:", e);
+  created() {
+    // CallgetList();
+  },
 
-
-    // 鍒濆鍖朣IP杩炴帴
-
+  async mounted() {
+    await this.CallgetList();
     sipService.init(this.sipConfig);
+    // 璁剧疆鐘舵�佸洖璋�
     sipService.onStatusChange = (status) => {
       this.sipStatus = status.text;
       this.sipStatusClass = `status-${status.type}`;
+
+      // 澶勭悊娉ㄥ唽澶辫触鍜屾柇寮�杩炴帴鎯呭喌
+      if (status.type === "failed" || status.type === "disconnected") {
+        this.overCallsetState(); // 閲婃斁鍒嗘満鍙�
+      }
     };
 
     // 鐩戝惉閫氳瘽鐘舵�佸彉鍖�
@@ -101,23 +117,98 @@
       }
 
       try {
+        // 鍏堟鏌ユ槸鍚﹀彲浠ュ懠鍙�
+        const { canCall, reason } = sipService.canMakeCall();
+        if (!canCall) {
+          const { canCall, reason } = sipService.canMakeCall();
+          //this.$message.warning(reason);
+          //return;
+        }
         this.callStatus = "calling";
         this.isCalling = true;
+        console.log("寮�濮嬪懠鍙細", sipService);
 
-        await sipService.makeCall(this.phoneNumber);
+        await sipService.makeCall("0" + this.phoneNumber);
       } catch (error) {
-        console.error("鍛煎彨澶辫触:", error);
-        this.callStatus = "ended";
-        this.isCalling = false;
-        this.$message.error(`鍛煎彨澶辫触: ${error.message}`);
+        let registrationTime = Date.now(); // 璁板綍娉ㄩ攢鎴愬姛鏃堕棿
+        console.log(registrationTime, "鍛煎彨澶辫触鏃堕棿");
+        console.error("鍛煎彨澶辫触1:", error);
+        // this.callStatus = "ended";
+        // this.isCalling = false;
+        //this.$message.error(`鍛煎彨澶辫触: ${error.message}`);
+        try {
+          // 鍏堟鏌ユ槸鍚﹀彲浠ュ懠鍙�
+          const { canCall, reason } = sipService.canMakeCall();
+          if (!canCall) {
+            const { canCall, reason } = sipService.canMakeCall();
+          }
+          this.callStatus = "calling";
+          this.isCalling = true;
+          console.log("寮�濮嬪懠鍙細", sipService);
+
+          await sipService.makeCall("0" + this.phoneNumber);
+        } catch (error) {
+          this.callStatus = "ended";
+          this.isCalling = false;
+        }
+      }
+    },
+    // 鏌ヨ鍙敤鍒嗘満鍙�
+    async CallgetList() {
+      try {
+        const res = await CallgetList();
+        this.randomNum = res.data[0].tel;
+        this.randomID = res.data[0].id;
+        // 姝g‘璁剧疆 sipUri
+        this.sipConfig.sipUri = `${this.randomNum}@192.168.10.124`;
+        this.startCallsetState();
+      } catch (error) {
+        console.error("鑾峰彇鍒嗘満鍙峰け璐�:", error);
+        this.updateStatus("failed", "鑾峰彇鍒嗘満鍙峰け璐�");
+      }
+    },
+    async startCallsetState() {
+      try {
+        await CallsetState({ id: this.randomID, state: 1 });
+        console.log("鍒嗘満鍙风姸鎬佹洿鏂颁负浣跨敤涓�");
+      } catch (error) {
+        console.error("鏇存柊鍒嗘満鍙风姸鎬佸け璐�:", error);
       }
     },
 
+    async overCallsetState() {
+      try {
+        if (this.randomID) {
+          await CallsetState({ id: this.randomID, state: 0 });
+          console.log("鍒嗘満鍙风姸鎬佹洿鏂颁负鍙敤");
+        }
+      } catch (error) {
+        console.error("閲婃斁鍒嗘満鍙峰け璐�:", error);
+      }
+    },
     endCall() {
       sipService.endCall();
       this.callStatus = "ended";
       this.isCalling = false;
     },
+    cleanupResources() {
+      // 缁撴潫閫氳瘽
+      if (this.isCalling) {
+        sipService.endCall();
+      }
+
+      // 閲婃斁鍒嗘満鍙�
+      this.overCallsetState();
+
+      // 鏂紑 SIP 杩炴帴
+      if (sipService.ua) {
+        sipService.ua.stop();
+      }
+    },
+  },
+  beforeUnmount() {
+    // 缁勪欢閿�姣佹椂纭繚閲婃斁璧勬簮
+    this.cleanupResources();
   },
 };
 </script>
diff --git a/src/components/PatientSelection/index.vue b/src/components/PatientSelection/index.vue
new file mode 100644
index 0000000..d63746e
--- /dev/null
+++ b/src/components/PatientSelection/index.vue
@@ -0,0 +1,585 @@
+<template>
+  <div>
+    <el-dialog
+      title="娲惧彂鎮h�呴�夋嫨"
+      :visible.sync="dialogVisiblepatient"
+      width="70%"
+      :before-close="handleClosehz"
+    >
+      <div class="examine-jic">
+        <div style="margin: 0 10px 20px 10px">
+          <el-card class="box-card">
+            <el-tag
+              v-for="item in overallCase"
+              :key="item.icdid"
+              type="primary"
+              closables
+              @close="handleClose(item)"
+            >
+              {{ item.name }}
+            </el-tag>
+            <div style="margin-top: 20px; text-align: right">
+              鍏遍�夋嫨<span
+                style="font-size: 18px; color: #409eff; margin: 0 10px"
+                >{{ overallCase.length }}</span
+              >浣嶆偅鑰�
+            </div>
+          </el-card>
+        </div>
+        <div class="jic-value">
+          <el-row :gutter="20">
+            <!--鐢ㄦ埛鏁版嵁-->
+            <el-form
+              :model="patientqueryParams"
+              ref="queryForm"
+              size="small"
+              :inline="true"
+              label-width="98px"
+            >
+              <el-form-item label="鎮h�咃細">
+                <el-input
+                  v-model="patientqueryParams.name"
+                  @keyup.enter.native="handleQuery"
+                ></el-input>
+              </el-form-item>
+              <el-form-item label="鎮h�呯被鍨�">
+                <el-select
+                  v-model="patientqueryParams.allhosp"
+                  placeholder="璇烽�夋嫨鏂板绫诲瀷"
+                >
+                  <el-option
+                    v-for="item in taskoptions"
+                    :label="item.label"
+                    :value="item.value"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="鎮h�呰瘖鏂細">
+                <el-input
+                  v-model="patientqueryParams.leavediagname"
+                  @keyup.enter.native="handleQuery"
+                ></el-input>
+              </el-form-item>
+              <el-form-item label="涓绘不鍖荤敓锛�">
+                <el-input
+                  v-model="patientqueryParams.drname"
+                  @keyup.enter.native="handleQuery"
+                ></el-input>
+              </el-form-item>
+
+              <el-form-item>
+                <el-button
+                  type="primary"
+                  icon="el-icon-search"
+                  size="medium"
+                  @click="handleQuery"
+                  >鎼滅储</el-button
+                >
+                <el-button
+                  icon="el-icon-refresh"
+                  size="medium"
+                  @click="resetQuery"
+                  >閲嶇疆</el-button
+                >
+              </el-form-item>
+            </el-form>
+            <!-- 閫夋嫨鎮h�呭垪琛� -->
+            <el-table
+              ref="multipleTable"
+              :data="donorchargeList"
+              tooltip-effect="dark"
+              style="width: 100%"
+              @selection-change="handleSelectionChange"
+            >
+              <el-table-column
+                fixed="left"
+                class="checkall"
+                type="selection"
+                width="55"
+              >
+              </el-table-column>
+              <div v-for="(item, index) in tableLabel">
+                <el-table-column
+                  v-if="item.label == '鍑洪櫌鏃ユ湡'"
+                  :key="index"
+                  :prop="item.prop"
+                  :width="item.width"
+                  :label="item.label"
+                  :formatter="formatData"
+                >
+                  <template slot-scope="scope">
+                    <span>{{ formatTime(scope.row.endtime) }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column
+                  v-if="item.label == '鎬у埆'"
+                  :key="index"
+                  :prop="item.prop"
+                  :width="item.width"
+                  :label="item.label"
+                  :formatter="formatData"
+                >
+                  <template slot-scope="scope">
+                    <span>{{ scope.row.sex == 1 ? "鐢�" : "濂�" }}</span>
+                  </template>
+                </el-table-column>
+
+                <el-table-column
+                  v-if="item.label != '鎬у埆' && item.label != '鍑洪櫌鏃ユ湡'"
+                  :key="index"
+                  :prop="item.prop"
+                  :width="item.width"
+                  :label="item.label"
+                  :formatter="formatData"
+                >
+                </el-table-column>
+              </div>
+            </el-table>
+          </el-row>
+          <pagination
+            v-show="patienttotal > 0"
+            :total="patienttotal"
+            :page.sync="patientqueryParams.pageNum"
+            :limit.sync="patientqueryParams.pageSize"
+            @pagination="handleQuery"
+          />
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="$emit('addoption')">鍙� 娑�</el-button>
+        <el-button type="primary" @click="AddDispatchpatients"
+          >纭畾娣诲姞</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  getillnesslist,
+  deltargetillness,
+  getTaskpatientQC,
+  Questionnairetaskgetson,
+  Externallist,
+  Editsingletask,
+} from "@/api/AiCentre/index";
+export default {
+  name: "Diseasetotality",
+  data() {
+    return {
+      patienttotal: 0, //
+      allpids: [],
+      // 褰撳墠椤甸�変腑鏁版嵁
+      multipleSelection: [],
+      overallpatin: [],
+      form: {},
+      patientqueryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        allhosp: "4",
+        pids: null,
+      },
+      donorchargeList: [],
+      donorchargeanlList: [], //妗堜緥鍒楄〃
+      taskoptions: [
+        {
+          value: "4",
+          label: "鍑洪櫌鐥呬汉",
+        },
+        {
+          value: "1",
+          label: "鍦ㄩ櫌鐥呬汉",
+        },
+        {
+          value: "2",
+          label: "闂ㄨ瘖鐥呬汉",
+        },
+        {
+          value: "3",
+          label: "浣撴鐥呬汉",
+        },
+        {
+          value: "6",
+          label: "闄㈠鎮h��",
+        },
+        {
+          value: "5",
+          label: "鎵嬫湳鐥呬汉",
+        },
+      ],
+      overallCase:[],
+      tableLabel: [
+        { label: "鍑洪櫌鏃ユ湡", width: "150", prop: "inhosptime" },
+        { label: "鎮h��", width: "", prop: "name" },
+        { label: "鎮h�呰瘖鏂�", width: "", prop: "leavediagname" },
+        { label: "韬唤璇�", width: "200", prop: "idcardno" },
+        { label: "鎬у埆", width: "", prop: "sex" },
+        { label: "骞撮緞", width: "", prop: "age" },
+        { label: "璐d换鎶ゅ+", width: "", prop: "nurseName" },
+        { label: "涓绘不鍖荤敓", width: "", prop: "drname" },
+        { label: "绉戝", width: "240", prop: "dept" },
+        { label: "鐥呭尯", width: "240", prop: "leavehospitaldistrictname" },
+      ],
+    };
+  },
+
+  props: {
+    dialogVisiblepatient: {
+      type: Boolean,
+      default: () => {
+        return false;
+      },
+    },
+
+    // 5闂嵎妯℃澘銆�3闅忚妯℃澘銆�6瀹f暀
+    type: {
+      type: Number,
+      default: () => {
+        return 5;
+      },
+    },
+  },
+
+  created() {},
+
+  mounted() {
+    // this.handleAddpatient();
+  },
+
+  watch: {},
+
+  methods: {
+    //   鏁版嵁杩囨护
+    formatData(row, column, cellValue) {
+      if (column.property === "createType") {
+        if (cellValue === 1) {
+          return "鑷姩";
+        }
+        return "鎵嬪姩";
+      }
+      if (
+        column.property === "createTime" ||
+        column.property === "inhosptime"
+      ) {
+        if (cellValue === null) {
+          return "";
+        }
+        return dayjs(cellValue).format("YYYY-MM-DD ");
+      }
+      return cellValue;
+    },
+    handleClosehz() {
+      this.$emit("addoption");
+    },
+    // 閫夋嫨鏁版嵁鏍囩鍒犻櫎浜嬩欢
+    handleClose(item) {
+      console.log(item);
+      if (this.multipleSelection.indexOf(item) == -1 && !item.outid) {
+        this.overallCase.splice(this.overallCase.indexOf(item), 1);
+      } else if (item.outid) {
+        this.$modal
+          .confirm('鏄惁纭鍒犻櫎鍚嶇О涓�"' + item.icd10name + '"鐨勬暟鎹」锛�')
+          .then(() => {
+            this.multipleSelection.splice(
+              this.multipleSelection.indexOf(item),
+              1
+            );
+            deltargetillness(item.id).then((res) => {
+              if (res.code == 200) {
+                this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+                this.overallCase.splice(this.overallCase.indexOf(item), 1);
+              }
+            });
+            // 鍙栨秷鎸傝浇鐘舵��
+            this.$refs.multipleTable.toggleRowSelection(item, false);
+          })
+          .catch(() => {});
+      } else {
+        this.overallCase.splice(this.overallCase.indexOf(item), 1);
+        this.multipleSelection.splice(this.multipleSelection.indexOf(item), 1);
+        // 鍙栨秷鎸傝浇鐘舵��
+        this.$refs.multipleTable.toggleRowSelection(item, false);
+      }
+    },
+    resetQuery() {
+      this.patientqueryParams.name = null;
+      this.handleAddpatient();
+    },
+    // 瑙﹀彂鏌ヨ浜嬩欢
+    handleAddpatients() {
+      this.$emit("kkoption");
+
+      getillnesslist(this.patientqueryParams).then((res) => {
+        this.donorchargeList = res.rows;
+        this.patienttotal = res.total;
+        this.Restorecheck();
+      });
+    },
+    // 瑙﹀彂鏌ヨ浜嬩欢
+    handleAddpatient(taskid) {
+      this.$emit("kkoption");
+      if (taskid != this.taskid) {
+        this.recover();
+      }
+      if (taskid) {
+        this.taskid = taskid;
+        Questionnairetaskgetson({ taskid: this.taskid }).then((res) => {
+          if (res.code == 200) {
+            this.form = res.data;
+            this.overallpatin = this.form.patTaskRelevances.concat();
+            this.allpids = [];
+            this.overallpatin.forEach((item) => {
+              this.allpids.push(item.patid);
+            });
+            if (this.allpids[0]) {
+              this.patientqueryParams.pids = this.allpids;
+            } else {
+              this.patientqueryParams.pids = null;
+            }
+            this.handleQuery();
+          }
+        });
+      }
+    },
+    handleQuery() {
+      // 鑾峰彇澶栭儴鎮h��
+      if (this.patientqueryParams.allhosp == 6) {
+        this.Externallist();
+        return;
+      }
+      console.log(11);
+
+      if (this.patientqueryParams.allhosp == 4) {
+        this.tableLabel = [
+          // { label: "鍏ラ櫌鏃ユ湡", width: "170", prop: "starttime" },
+          { label: "鍑洪櫌鏃ユ湡", width: "150", prop: "endtime" },
+          { label: "鎮h��", width: "", prop: "name" },
+          { label: "鎮h�呰瘖鏂�", width: "", prop: "leavediagname" },
+          { label: "韬唤璇�", width: "200", prop: "idcardno" },
+          { label: "鎬у埆", width: "", prop: "sex" },
+          { label: "骞撮緞", width: "", prop: "age" },
+          { label: "鍑洪櫌澶╂暟", width: "", prop: "endDay" },
+          { label: "璐d换鎶ゅ+", width: "", prop: "nurseName" },
+          { label: "鍖荤敓", width: "", prop: "drname" },
+          { label: "绉戝", width: "180", prop: "dept" },
+          { label: "鐥呭尯", width: "150", prop: "leavehospitaldistrictname" },
+        ];
+      } else if (this.patientqueryParams.allhosp == 1) {
+        this.tableLabel = [
+          { label: "鍏ラ櫌鏃ユ湡", width: "150", prop: "starttime" },
+          { label: "鎮h��", width: "", prop: "name" },
+          { label: "鎮h�呰瘖鏂�", width: "", prop: "leavediagname" },
+          { label: "韬唤璇�", width: "200", prop: "idcardno" },
+          { label: "鎬у埆", width: "", prop: "sex" },
+          { label: "骞撮緞", width: "", prop: "age" },
+          { label: "鍑洪櫌澶╂暟", width: "", prop: "endDay" },
+          { label: "璐d换鎶ゅ+", width: "", prop: "nurseName" },
+          { label: "鍖荤敓", width: "", prop: "drname" },
+          { label: "绉戝", width: "180", prop: "dept" },
+          { label: "鐥呭尯", width: "150", prop: "leavehospitaldistrictname" },
+        ];
+      }
+      console.log(this.patientqueryParams.allhosp);
+
+      // 鑾峰彇鎮h�呮暟鎹�
+      getTaskpatientQC(this.patientqueryParams).then((response) => {
+        this.donorchargeList = response.rows;
+        this.donorchargeList.forEach((item) => {
+          if (item.endtime) {
+            item.endDay = this.daysBetween(item.endtime);
+          }
+        });
+        this.Restorecheck();
+
+        this.patienttotal = response.total;
+      });
+    },
+    // 鑾峰彇澶栭儴鎮h�呭鍏ュ垪琛�
+    Externallist() {
+      this.tableLabel = [
+        { label: "鎮h��", width: "", prop: "name" },
+        { label: "韬唤璇�", width: "200", prop: "idcardno" },
+        { label: "鎬у埆", width: "", prop: "sex" },
+        { label: "骞撮緞", width: "", prop: "age" },
+        { label: "鍑洪櫌澶╂暟", width: "", prop: "endDay" },
+      ];
+      this.patientqueryParams.pageSize = 1000;
+
+      Externallist(this.patientqueryParams).then((response) => {
+        this.donorchargeList = response.rows;
+        this.donorchargeList.forEach((item) => {
+          if (item.endtime) {
+            item.endDay = this.daysBetween(item.endtime);
+          }
+        });
+        // this.dialogVisiblepatient = true;
+        this.patienttotal = response.total;
+      });
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      if (this.decision) return;
+      // 鍒ゆ柇鏄惁鏈夊垹闄�
+      if (this.multipleSelection.length <= selection.length) {
+        this.multipleSelection = selection;
+      } else {
+        this.multipleSelection.forEach((item) => {
+          if (selection.includes(item)) {
+          } else {
+            if (this.multipleSelection.length == 1) {
+              this.multipleSelection = [];
+            } else {
+              this.multipleSelection.splice(
+                this.multipleSelection.indexOf(item),
+                1
+              );
+            }
+            if (this.overallCase.length == 1) {
+              this.overallCase = [];
+            } else {
+              this.overallCase.splice(this.overallCase.indexOf(item), 1);
+            }
+          }
+        });
+      }
+      // 璧嬪�肩粰鏁翠綋閫変腑鏁扮粍
+      this.multipleSelection.forEach((item) => {
+        if (this.overallCase.every((obj) => obj.name != item.name)) {
+          item.isoperation = 1;
+          item.patid = item.id;
+          item.hospType = this.patientqueryParams.allhosp;
+          item.sfzh = item.idcardno;
+          item.deptCode = item.deptcode;
+          item.deptName = item.dept;
+          item.admindate = item.inhosptime;
+          item.diagname = item.leavediagname;
+          item.sfzh = item.idcardno;
+          if (this.patientqueryParams.allhosp == 6) {
+            item.patfrom = 1;
+          }
+          this.overallCase.push(item);
+        }
+      });
+      console.log(this.multipleSelection, "瑙﹀彂閫夋嫨鍚巑ultipleSelection");
+    },
+    // 鍒囨崲椤靛悗鎭㈠閫変腑
+    Restorecheck() {
+      console.log(this.overallCase, "this.overallCase");
+      const allid = this.overallCase.map((item) => item.name);
+      const overlap = this.donorchargeList.filter((value) => {
+        return allid.includes(value.name);
+      });
+      // 淇濇寔ids鍜屽綋鍓嶉〉闈㈢殑鍚屾鎬�
+      this.multipleSelection = overlap;
+      console.log(this.multipleSelection, "杩涘叆鍒嗛〉multipleSelection");
+
+      this.toggleSelection(overlap);
+    },
+    // 鎸傝浇閫夋嫨鐘舵��
+    toggleSelection(rows) {
+      if (rows) {
+        this.decision = true;
+        this.$nextTick(() => {
+          rows.forEach((row) => {
+            this.$refs.multipleTable.toggleRowSelection(row, true);
+          });
+          this.decision = false;
+        });
+        console.log(123);
+      } else {
+        this.$refs.multipleTable.clearSelection();
+      }
+    },
+    AddDispatchpatients() {
+      console.log(this.overallCase);
+      this.form.patTaskRelevances.push(...this.overallCase);
+      console.log(this.form.patTaskRelevances);
+      this.form.isoperation=2;
+      Editsingletask(this.form).then((res) => {
+        if (res.code == 200) {
+          if (this.form.taskid) {
+            this.$modal.msgSuccess("淇敼鎴愬姛");
+          } else {
+            this.$modal.msgSuccess("鏂板鎴愬姛");
+          }
+          this.recover();
+      this.$emit("addoption");
+
+        }
+      });
+      // this.dialogVisiblepatient = false;
+      // this.$emit("addoption");
+    },
+    recover() {
+      this.donorchargeList = [];
+      this.donorchargeanlList = [];
+      this.multipleSelection = [];
+      this.allpids = [];
+      this.overallpatin = [];
+      this.form = {};
+      this.patientqueryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        allhosp: "4",
+        pids: null,
+      };
+      this.overallCase = [];
+      // this.dialogVisiblepatient = false;
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.examine-jic {
+  .headline {
+    font-size: 24px;
+    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;
+    }
+  }
+  .jic-value {
+    font-size: 20px;
+    border-top: 1px solid #a7abac;
+    padding: 10px;
+    margin-bottom: 10px;
+    .details-jic {
+      padding: 10px 15px;
+      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);
+      .details-title {
+        display: flex;
+        justify-content: space-between;
+        margin-bottom: 10px;
+        div:nth-child(2) {
+          color: #02a7f0;
+          cursor: pointer;
+        }
+      }
+      .details-renw {
+        background: #e4ebfc;
+        padding: 15px 5px;
+        border-radius: 5px;
+        margin-bottom: 20px;
+      }
+    }
+  }
+}
+::v-deep.el-table .el-table__header th:first-child .el-checkbox {
+  display: none;
+}
+.el-tag + .el-tag {
+  margin-left: 10px;
+  margin-bottom: 10px;
+}
+</style>
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 142aace..173997e 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -1,5 +1,7 @@
 import { login, logout, getInfo } from "@/api/login";
 import { getToken, setToken, removeToken } from "@/utils/auth";
+import { login, logout, getInfo } from "@/api/login";
+import { getToken, setToken, removeToken } from "@/utils/auth";
 
 const user = {
   state: {
@@ -11,9 +13,81 @@
     hisUserId: "",
     belongWards: [],
     belongDepts: [],
+    name: "",
+    nickName: "",
+    Id: "",
+    avatar: "",
+    hisUserId: "",
+    belongWards: [],
+    belongDepts: [],
     roles: [],
     permissions: [],
     // 鏈嶅姟绫诲瀷
+    Serviceauthority: [
+      {
+        value: "1",
+        label: "鎮h�呮姤鍛�",
+        route: "followvisit/QuestionnaireTask",
+        raw: {
+          cssClass: "",
+          listClass: "",
+        },
+      },
+      {
+        value: "2",
+        label: "蹇冪數闅忚",
+        route: "followvisit/QuestionnaireTask",
+        raw: {
+          cssClass: "",
+          listClass: "",
+        },
+      },
+      {
+        value: "3",
+        label: "浣撴闅忚",
+        route: "followvisit/particty",
+        raw: {
+          cssClass: "",
+          listClass: "",
+        },
+      },
+      {
+        value: "4",
+        label: "瀹f暀鍏虫��",
+        route: "followvisit/Missioncreation",
+        raw: {
+          cssClass: "",
+          listClass: "",
+        },
+      },
+      {
+        value: "5",
+        label: "鍑洪櫌闅忚",
+        route: "followvisit/particty",
+        raw: {
+          cssClass: "",
+          listClass: "",
+        },
+      },
+      {
+        value: "6",
+        label: "闂ㄨ瘖闅忚",
+        route: "followvisit/particty",
+        raw: {
+          cssClass: "",
+          listClass: "",
+        },
+      },
+      {
+        value: "7",
+        label: "閫氱煡鏈嶅姟",
+        route: "followvisit/Missioncreation",
+        raw: {
+          cssClass: "",
+          listClass: "",
+        },
+      },
+    ],
     Serviceauthority: [
       {
         value: "1",
@@ -137,15 +211,43 @@
             if (orgid == "H41010500003") {
               localStorage.setItem("orgname", "娌冲崡涓尰鑽ぇ瀛︾涓�闄勫睘鍖婚櫌");
               localStorage.setItem("ZuHuID", "1400361376454545408"); // 璇锋浛鎹负瀹為檯鐨刏uHuID
-              localStorage.setItem("deptCode", "1017"); // 璇锋浛鎹负瀹為檯鐨勮棰樼粍浠g爜
+              localStorage.setItem("deptCode", "1017"); // 璇锋浛鎹负瀹為檯鐨勭瀹や唬鐮�
             } else if (orgid == "H41082200269") {
               localStorage.setItem("orgname", "鍗氱埍鍘夸汉姘戝尰闄�");
               localStorage.setItem("ZuHuID", "1400360867068907520"); // 璇锋浛鎹负瀹為檯鐨刏uHuID
-              localStorage.setItem("deptCode", "01040201"); // 璇锋浛鎹负瀹為檯鐨勮棰樼粍浠g爜
+              localStorage.setItem("deptCode", "01040201"); // 璇锋浛鎹负瀹為檯鐨勭瀹や唬鐮�
             } else if (orgid == "H41078202417") {
               localStorage.setItem("orgname", "杈夊幙甯備腑鍖婚櫌");
               localStorage.setItem("ZuHuID", "1429338802177000002"); // 璇锋浛鎹负瀹為檯鐨刏uHuID
-              localStorage.setItem("deptCode", ""); // 璇锋浛鎹负瀹為檯鐨勮棰樼粍浠g爜
+              localStorage.setItem("deptCode", ""); // 璇锋浛鎹负瀹為檯鐨勭瀹や唬鐮�
+            } else if (orgid == "47255004333112711A1001") {
+              localStorage.setItem("orgname", "鏅畞鐣叉棌鑷不鍘夸汉姘戝尰闄�");
+              localStorage.setItem("ZuHuID", "1400361376454545408");
+              localStorage.setItem("deptCode", "1017");
+            } else if (orgid == "47231022633110211A2101") {
+              localStorage.setItem("orgname", "涓芥按甯備腑鍖婚櫌");
+              localStorage.setItem("ZuHuID", "1400360867068907520");
+              localStorage.setItem("deptCode", "01040201");
+            } else if (orgid == "47246102433112211A2101") {
+              localStorage.setItem("orgname", "缂欎簯鍘夸腑鍖诲尰闄�");
+              localStorage.setItem("ZuHuID", "1429338802177000002");
+              localStorage.setItem("deptCode", "");
+            } else if (orgid == "47240018433118111A2101") {
+              localStorage.setItem("orgname", "榫欐硥甯備腑鍖诲尰闄�");
+              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", "");
+            } else if (orgid == "47240004533118111A1001") {
+              localStorage.setItem("orgname", "榫欐硥甯備汉姘戝尰闄�");
+              localStorage.setItem("ZuHuID", "1429338802177000007");
+              localStorage.setItem("deptCode", "");
             }
             resolve();
           })
diff --git a/src/utils/sipService-cs.js b/src/utils/sipService-cs.js
index 1654ccc..7c63647 100644
--- a/src/utils/sipService-cs.js
+++ b/src/utils/sipService-cs.js
@@ -12,6 +12,7 @@
   init(config) {
     try {
       this.updateStatus("connecting", "杩炴帴涓�...");
+console.log(config);
 
       this.ua = new JsSIP.UA({
         sockets: [new JsSIP.WebSocketInterface(config.wsUrl)],
diff --git a/src/utils/sipService.js b/src/utils/sipService.js
index 8589481..a8ce592 100644
--- a/src/utils/sipService.js
+++ b/src/utils/sipService.js
@@ -7,6 +7,8 @@
     this.onStatusChange = null;
     this.onCallStatusChange = null;
     this.onIncomingCall = null;
+    this.isRegistered = false; // 鏂板娉ㄥ唽鐘舵�佹爣蹇�
+    this.registrationTime = null; // 鏂板娉ㄥ唽鎴愬姛鏃堕棿鎴�
   }
 
   init(config) {
@@ -28,12 +30,25 @@
       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("registered", () => {
+        this.isRegistered = true;
+        this.registrationTime = Date.now(); // 璁板綍娉ㄥ唽鎴愬姛鏃堕棿
+        console.log(this.registrationTime, "娉ㄥ唽鏃堕棿");
+
+        this.updateStatus("registered", "宸叉敞鍐�");
+      });
+
+      this.ua.on("registrationFailed", (e) => {
+        this.isRegistered = false;
+        this.updateStatus("failed", `娉ㄥ唽澶辫触: ${e.cause}`);
+      });
+
+      this.ua.on("unregistered", () => {
+        this.isRegistered = false;
+        let registrationTime = Date.now(); // 璁板綍娉ㄩ攢鎴愬姛鏃堕棿
+        console.log(registrationTime, "娉ㄩ攢鏃堕棿");
+        this.updateStatus("disconnected", "宸叉敞閿�");
+      });
       this.ua.on("disconnected", () =>
         this.updateStatus("disconnected", "杩炴帴鏂紑")
       );
@@ -49,8 +64,30 @@
       throw error;
     }
   }
+  // 鏂板鏂规硶锛氭鏌ユ槸鍚﹀彲浠ュ懠鍙�
+  canMakeCall(minDelay = 2000) {
+    if (!this.isRegistered) {
+      return { canCall: false, reason: "SIP鏈敞鍐岋紝鏃犳硶鍛煎彨" };
+    }
 
+    const now = Date.now();
+    const timeSinceRegistration = now - this.registrationTime;
+
+    if (timeSinceRegistration < minDelay) {
+      const remaining = minDelay - timeSinceRegistration;
+      return {
+        canCall: false,
+        reason: `娉ㄥ唽鎴愬姛锛岃绛夊緟 ${Math.ceil(remaining / 1000)} 绉掑悗鍐嶅懠鍙玚,
+      };
+    }
+
+    return { canCall: true, reason: "" };
+  }
   makeCall(targetNumber) {
+    const { canCall, reason } = this.canMakeCall();
+    if (!canCall) {
+      return Promise.reject(new Error(reason));
+    }
     return new Promise((resolve, reject) => {
       try {
         if (!this.ua) {
@@ -84,7 +121,7 @@
         };
 
         this.currentSession = this.ua.call(
-          `sip:${targetNumber}@1192.170.66.107`,
+          `sip:${targetNumber}@192.168.10.124`,
           options
         );
 
@@ -165,7 +202,7 @@
         errorMessage = "浼氳瘽鍙傛暟涓嶆弧瓒虫湇鍔″櫒瑕佹眰";
         break;
       default:
-        errorMessage = `鍛煎彨澶辫触: ${e.cause || e.message}`;
+        errorMessage = `鍛煎彨澶辫触3: ${e.cause || e.message}`;
     }
 
     this.updateCallStatus("failed55", errorMessage);
diff --git a/src/views/followvisit/discharge/index.vue b/src/views/followvisit/discharge/index.vue
index 9b5834a..daaba95 100644
--- a/src/views/followvisit/discharge/index.vue
+++ b/src/views/followvisit/discharge/index.vue
@@ -1414,8 +1414,7 @@
       });
     },
     affiliation() {
-
-      this.topqueryParams.managementDoctorCode= store.getters.hisUserId;
+      this.topqueryParams.managementDoctor = store.getters.hisUserId;
       this.getList(1);
     },
     onthatday() {
diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue
index d60e385..61ab466 100644
--- a/src/views/followvisit/record/detailpage/index.vue
+++ b/src/views/followvisit/record/detailpage/index.vue
@@ -254,6 +254,7 @@
       />
     </el-dialog>
     <div class="action-container">
+      <!-- 闅忚鍐呭 -->
       <div class="call-action">
         <div class="call-container">
           <!-- <div class="call-header">
@@ -549,6 +550,7 @@
           </div>
         </div>
       </div>
+      <!-- 浜哄伐澶勭悊 -->
       <div class="manual-action">
         <div class="Followuserinfos">
           <div>
@@ -2150,6 +2152,16 @@
       this.getTaskservelist();
     },
   },
+  // deactivated() {
+  //   console.log(11);
+  // },
+  beforeRouteLeave(to, from, next) {
+    this.$refs.callButton.cleanupResources();
+    next(); // 纭繚璋冪敤 nex
+  },
+  // beforeRouteUpdate() {
+  //   console.log(33);
+  // },
 };
 </script>
 
@@ -2533,4 +2545,194 @@
   color: #080808 !important;
   cursor: not-allowed;
 }
+/* 鍘熸湁鐨勬牱寮忎繚鎸佷笉鍙橈紝娣诲姞浠ヤ笅鍝嶅簲寮忎唬鐮� */
+
+.Followupdetailspage {
+  margin: 10px;
+  display: flex;
+  flex-direction: column;
+  gap: 20px;
+}
+
+.action-container {
+  display: flex;
+  flex-direction: row; /* 榛樿妯悜鎺掑垪 */
+  gap: 20px;
+  margin: 0 10px 20px 10px;
+
+  /* 褰撶缉鏀炬瘮渚嬪ぇ浜�100%鎴栧睆骞曞搴﹁緝灏忔椂鏀逛负涓婁笅鎺掑垪 */
+  @media screen and (max-width: 1200px), (min-resolution: 1.1dppx) {
+    flex-direction: column;
+
+    .call-action,
+    .manual-action {
+      width: 100% !important;
+    }
+  }
+}
+
+.call-action {
+  width: 65%;
+  min-width: 0;
+}
+
+.manual-action {
+  flex: 1;
+  min-width: 0;
+}
+
+/* 璋冩暣鍐呴儴鍏冪礌鐨勫搷搴斿紡甯冨眬 */
+.Followuserinfos {
+  .el-form {
+    /* 琛ㄥ崟鍝嶅簲寮忚皟鏁� */
+    .el-row {
+      margin: 0 -10px;
+    }
+
+    .el-col {
+      padding: 0 10px;
+    }
+
+    @media screen and (max-width: 768px) {
+      .el-col {
+        width: 100%;
+        margin-bottom: 15px;
+
+        &:last-child {
+          margin-bottom: 0;
+        }
+      }
+    }
+  }
+}
+
+/* 璋冩暣琛ㄦ牸鐨勫搷搴斿紡琛ㄧ幇 */
+.el-table {
+  ::v-deep .el-table__body-wrapper {
+    overflow-x: auto;
+  }
+
+  /* 鍦ㄥ皬灞忓箷涓婅皟鏁磋〃鏍煎垪瀹� */
+  @media screen and (max-width: 992px) {
+    .el-table-column {
+      min-width: 120px;
+    }
+  }
+}
+
+/* 璋冩暣鏍囩閫夋嫨鍣ㄧ殑鍝嶅簲寮忓竷灞� */
+.tag-selector-container {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  gap: 10px;
+
+  @media screen and (max-width: 576px) {
+    flex-direction: column;
+    align-items: flex-start;
+
+    .el-select {
+      width: 100%;
+      margin-right: 0 !important;
+    }
+  }
+}
+
+/* 璋冩暣鎸夐挳缁勭殑鍝嶅簲寮忓竷灞� */
+.el-form-item.label-processing-opinion {
+  .el-button-group {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 10px;
+
+    .el-button {
+      flex: 1;
+      min-width: 120px;
+    }
+  }
+}
+
+/* 璋冩暣閫夐」鍗$殑鍝嶅簲寮忚〃鐜� */
+.el-tabs {
+  ::v-deep .el-tabs__nav-wrap {
+    overflow-x: auto;
+    white-space: nowrap;
+
+    &::after {
+      display: none;
+    }
+  }
+}
+
+/* 璋冩暣棰勮鍖哄煙鐨勫搷搴斿紡琛ㄧ幇 */
+.preview-left {
+  @media screen and (max-width: 768px) {
+    margin: 10px;
+    padding: 15px;
+
+    .topic-dev,
+    .scriptTopic-dev {
+      margin-bottom: 15px;
+    }
+  }
+}
+
+/* 璋冩暣瀵硅瘽妗嗙殑鍝嶅簲寮忚〃鐜� */
+.el-dialog {
+  @media screen and (max-width: 992px) {
+    width: 90% !important;
+    margin-top: 5vh !important;
+
+    .el-dialog__body {
+      padding: 15px;
+    }
+  }
+
+  @media screen and (max-width: 576px) {
+    width: 95% !important;
+
+    .el-form-item {
+      margin-bottom: 15px;
+    }
+  }
+}
+
+/* 纭繚鍐呭鍦ㄧ缉鏀炬椂淇濇寔鍙鎬� */
+.headline {
+  font-size: clamp(18px, 2vw, 24px); /* 浣跨敤clamp鍑芥暟纭繚瀛椾綋澶у皬鍦ㄥ悎鐞嗚寖鍥村唴 */
+}
+
+/* 涓虹Щ鍔ㄨ澶囦紭鍖栨粴鍔ㄤ綋楠� */
+@media screen and (max-width: 768px) {
+  .Followuserinfo,
+  .Followuserinfos {
+    padding: 15px;
+    margin: 5px;
+  }
+
+  .CONTENT {
+    min-height: auto;
+    padding: 5px;
+  }
+}
+
+/* 缂╂斁妫�娴嬫牱寮� */
+@media screen and (min-resolution: 1.1dppx),
+  screen and (-webkit-min-device-pixel-ratio: 1.1),
+  screen and (max-width: 1200px) {
+  .action-container {
+    flex-direction: column;
+  }
+
+  .call-action,
+  .manual-action {
+    width: 100%;
+  }
+
+  /* 璋冩暣鍐呴儴鍏冪礌闂磋窛 */
+  .call-container,
+  .Followuserinfos {
+    margin-bottom: 20px;
+  }
+}
 </style>
diff --git a/src/views/followvisit/tasklist/index.vue b/src/views/followvisit/tasklist/index.vue
index 30283cc..667df2d 100644
--- a/src/views/followvisit/tasklist/index.vue
+++ b/src/views/followvisit/tasklist/index.vue
@@ -250,8 +250,15 @@
               size="medium"
               type="text"
               @click="handleUpdate(scope.row, 1)"
-              ><span class="button-xj"
-                ><i class="el-icon-circle-plus-outline"></i>渚濈収鏂板</span
+              ><span class="button-xj">渚濈収鏂板</span></el-button
+            >
+            <el-button
+              v-if="scope.row.sendState != 5"
+              size="medium"
+              type="text"
+              @click="handleAddpatient(scope.row.taskid, scope.row.type)"
+              ><span class="button-hz"
+                ><i class="el-icon-circle-plus-outline"></i>鏂板鎮h��</span
               ></el-button
             >
             <el-button
@@ -259,9 +266,7 @@
               size="medium"
               type="text"
               @click="stop(scope.row)"
-              ><span class="button-zt"
-                ><i class="el-icon-circle-plus-outline"></i>鏆傚仠</span
-              ></el-button
+              ><span class="button-zt">鏆傚仠</span></el-button
             >
           </template>
         </el-table-column>
@@ -373,6 +378,13 @@
         >
       </div>
     </el-dialog>
+    <!-- 閫夋嫨鎮h�呭脊妗� -->
+    <Patient-Selection
+      ref="Patient"
+      :dialogVisiblepatient="dialogVisiblepatient"
+      @addoption="addoption"
+      @kkoption="dialogVisiblepatient = true"
+    />
   </div>
 </template>
 
@@ -387,23 +399,19 @@
 } from "@/api/system/user";
 import {
   getTasklist,
-  getTaskInfo,
-  Editsingletask,
   delTaskInfo,
-  Questionnairetasklist,
-  Questionnairetaskget,
-  Questionnairetasksponsor,
   TaskTemplateSendExecution,
 } from "@/api/AiCentre/index";
 import store from "@/store";
-
+import PatientSelection from "@/components/PatientSelection"; //姝e垯缁勪欢
+import SFtable from "@/components/SFtable"; //琛ㄦ牸缁勪欢
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 
 export default {
   name: "Tasklist",
   dicts: ["sys_normal_disable", "sys_user_sex", "task_status"],
-  components: { Treeselect },
+  components: { Treeselect, PatientSelection },
   data() {
     return {
       // 閬僵灞�
@@ -441,6 +449,8 @@
         showTimeNight: [],
         showTimeNoon: [],
       },
+      dialogVisiblepatient: false,
+      Patientlist: [],
       taskformVisible: false,
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
@@ -1041,6 +1051,14 @@
       const item = data.find((item) => item.value === value);
       return item ? item.label : null;
     },
+    handleAddpatient(taskid) {
+      this.$refs.Patient.handleAddpatient(taskid);
+      this.dialogVisiblepatient = true; // 鎵嬪姩鎺у埗寮圭獥鏄剧ず
+    },
+    addoption() {
+      this.dialogVisiblepatient = false; // 鎵嬪姩鎺у埗寮圭獥鏄剧ず
+      this.handleQuery();
+    },
   },
 };
 </script>
@@ -1170,6 +1188,12 @@
   border-radius: 1px;
   color: #ffffff;
 }
+.button-hz {
+  background: #63d37b;
+  padding: 5px;
+  border-radius: 1px;
+  color: #ffffff;
+}
 
 ::v-deep.el-radio-group {
   span {
diff --git a/src/views/outsideChainwtnew.vue b/src/views/outsideChainwtnew.vue
index 178d0d6..24fc1d3 100644
--- a/src/views/outsideChainwtnew.vue
+++ b/src/views/outsideChainwtnew.vue
@@ -8,7 +8,9 @@
             {{
               kcb
                 ? kcb
-                : "浜茬埍鐨勬偅鑰�-瀹跺睘锛屾垜浠槸"+localStorage.getItem("orgname")+"鐨勫尰鎶や汉鍛橈紝涓轰簡鏇村ソ鍦颁簡瑙f偍鐨勫悍澶嶆儏鍐碉紝璇锋偍鎶戒竴鐐瑰疂璐垫椂闂达紝瀹屾垚杩欎唤闅忚闂嵎銆�"
+                : "浜茬埍鐨勬偅鑰�-瀹跺睘锛屾垜浠槸" +
+                  localStorage.getItem("orgname") +
+                  "鐨勫尰鎶や汉鍛橈紝涓轰簡鏇村ソ鍦颁簡瑙f偍鐨勫悍澶嶆儏鍐碉紝璇锋偍鎶戒竴鐐瑰疂璐垫椂闂达紝瀹屾垚杩欎唤闅忚闂嵎銆�"
             }}
             <!-- 浜茬埍鐨勬偅鑰�/瀹跺睘鎮ㄥソ锛屼负浜嗘洿濂界殑浜嗚В鎮ㄥ嚭闄㈠悗鐨勫悍澶嶆儏鍐碉紝缁欐偍閫傚綋鍙婃椂鐨勫仴搴锋寚瀵硷紝璇锋偍鎶戒竴鐐瑰疂璐垫椂闂达紝瀹屾垚杩欎唤鍑洪櫌闅忚闂嵎璋冩煡銆� -->
           </div>
@@ -277,31 +279,36 @@
   methods: {
     // 瑙f瀽urlid
     geturlinfo() {
-       // let url = window.location.href;
-       let url = this.$route.query.p;
-       console.log(url,"url");
+      // let url = window.location.href;
+      let url = this.$route.query.p;
+      console.log(url, "url");
       // let url = 'http://218.108.11.22:8093/sf/003';
       // let urlid = this.extractLastSegmentFromUrl(url);
 
-      geturlinfo( url ).then((res) => {
-       if (res.code==200) {
-         this.getQuestionnaire(res.data.param1,res.data.param2,res.data.param3,res.data.param5,)
-       }
+      geturlinfo(url).then((res) => {
+        if (res.code == 200) {
+          this.getQuestionnaire(
+            res.data.param1,
+            res.data.param2,
+            res.data.param3,
+            res.data.param5
+          );
+        }
       });
     },
-//     extractLastSegmentFromUrl(url) {
-//     // 鎵惧埌鏈�鍚庝竴涓�'/'鐨勪綅缃�
-//     const lastSlashIndex = url.lastIndexOf('/');
-//     // 濡傛灉鎵惧埌浜�'/'锛屾埅鍙栧叾鍚庣殑鎵�鏈夊瓧绗�
-//     if (lastSlashIndex !== -1) {
-//         return url.substring(lastSlashIndex + 1);
-//     }
-//     // 濡傛灉娌℃湁鎵惧埌'/'锛岃繑鍥炵┖瀛楃涓�
-//     return '';
-// },
+    //     extractLastSegmentFromUrl(url) {
+    //     // 鎵惧埌鏈�鍚庝竴涓�'/'鐨勪綅缃�
+    //     const lastSlashIndex = url.lastIndexOf('/');
+    //     // 濡傛灉鎵惧埌浜�'/'锛屾埅鍙栧叾鍚庣殑鎵�鏈夊瓧绗�
+    //     if (lastSlashIndex !== -1) {
+    //         return url.substring(lastSlashIndex + 1);
+    //     }
+    //     // 濡傛灉娌℃湁鎵惧埌'/'锛岃繑鍥炵┖瀛楃涓�
+    //     return '';
+    // },
 
     // 鑾峰彇鏁版嵁
-    getQuestionnaire(param1,param2,param3) {
+    getQuestionnaire(param1, param2, param3) {
       this.taskid = decodeURIComponent(param1);
       this.patid = decodeURIComponent(param2);
       this.taskname = decodeURIComponent(param3);
@@ -409,7 +416,7 @@
         var obj = item.svyLibTemplateTargetoptions.find(
           (items) => items.optioncontent == item.scriptResult
         );
-        console.log(obj,'obj');
+        console.log(obj, "obj");
 
         if (obj) {
           if (obj.isabnormal) {
diff --git a/src/views/patient/follow/index.vue b/src/views/patient/follow/index.vue
index ec4b99f..634ae88 100644
--- a/src/views/patient/follow/index.vue
+++ b/src/views/patient/follow/index.vue
@@ -630,6 +630,9 @@
 .button-textxga {
   color: #de7897;
 }
+.button-textxga {
+  color: #de7897;
+}
 .button-textsc {
   color: #3664d9;
 }
diff --git a/src/views/patient/propaganda/QuestionnaireTask.vue b/src/views/patient/propaganda/QuestionnaireTask.vue
index b95bfb4..696495f 100644
--- a/src/views/patient/propaganda/QuestionnaireTask.vue
+++ b/src/views/patient/propaganda/QuestionnaireTask.vue
@@ -432,8 +432,11 @@
             </div>
           </div>
         </div>
-        <el-button type="success" @click="nextstep('ruleForm')">{{
-          quote ? "绔嬪嵆鍒涘缓" : "浠诲姟璇︽儏閰嶇疆"
+        <el-button type="primary" @click="nextstep('ruleForm')">{{
+          quote ? "绔嬪嵆鍒涘缓" : "娲惧彂鎮h�呴厤缃�"
+        }}</el-button>
+        <el-button type="success" @click="submitForm('ruleForm')">{{
+          quote ? "绔嬪嵆鍒涘缓" : "纭鏈嶅姟閰嶇疆"
         }}</el-button>
         <el-button @click="resetForm('ruleForm')">閲嶇疆</el-button>
       </div>
@@ -517,7 +520,7 @@
         </div>
         <el-button type="primary" @click="laststep()">涓婁竴姝�</el-button>
         <el-button type="success" @click="submitForm('ruleForm')">{{
-          quote ? "绔嬪嵆鍒涘缓" : "纭浠诲姟閰嶇疆"
+          quote ? "绔嬪嵆鍒涘缓" : "纭鏈嶅姟閰嶇疆"
         }}</el-button>
         <el-button @click="resetForm('ruleForm')">閲嶇疆</el-button>
       </div>
@@ -911,7 +914,7 @@
   taskdiaggetlist,
   taskopergetlist,
 } from "@/api/AiCentre/index";
-import OptionalForm from "@/components/OptionalForm"; //姝e垯缁勪欢
+import OptionalForm from "@/components/OptionalForm"; //鐤剧梾娣诲姞缁勪欢
 import SFtable from "@/components/SFtable"; //琛ㄦ牸缁勪欢
 import { MessageBox } from "element-ui";
 
@@ -1286,7 +1289,11 @@
           },
           { label: "寰俊灏忕▼搴�", value: '6' },
         ];
-      } else if (this.form.serviceType == 6||this.form.serviceType == 14||this.form.serviceType == 15) {
+      } else if (
+        this.form.serviceType == 6 ||
+        this.form.serviceType == 14 ||
+        this.form.serviceType == 15
+      ) {
         this.checkboxlist = [
           {
             value: "3",
@@ -1448,11 +1455,11 @@
         this.$modal.msgError("璇烽�夋嫨浠诲姟鍏宠仈鏉′欢");
         return;
       }
-
-      if (!this.form.patTaskRelevances[0] && !this.form.longTask) {
-        this.$modal.msgError("璇烽�夋嫨鐥呬汉");
-        return;
-      }
+      //鏆傚仠浠诲姟鎮h�呴檺鍒�
+      // if (!this.form.patTaskRelevances[0] && !this.form.longTask) {
+      //   this.$modal.msgError("璇烽�夋嫨鐥呬汉");
+      //   return;
+      // }
 
       if (!this.form.templatename && !this.templateor) {
         this.$modal.msgError("鏈�夋嫨妯℃澘");
diff --git a/src/views/patient/propaganda/index.vue b/src/views/patient/propaganda/index.vue
index 760a7da..4c9bd64 100644
--- a/src/views/patient/propaganda/index.vue
+++ b/src/views/patient/propaganda/index.vue
@@ -753,6 +753,8 @@
         serviceType: 4,
         searchscope: 2,
         sendstate: 2,
+         leaveldeptcodes: [],
+        leavehospitaldistrictcodes: [],
       },
       propss: { multiple: true },
       options: [],
@@ -831,7 +833,7 @@
   methods: {
     /** 鏌ヨ闂ㄨ瘖瀹f暀鏈嶅姟鍒楄〃 */
     getList() {
-       if (this.topqueryParams.searchscope == 3) {
+      if (this.topqueryParams.searchscope == 3) {
         this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
           (obj) => obj.deptCode
         );
@@ -839,6 +841,8 @@
           store.getters.belongWards.map((obj) => obj.districtCode);
       }
       this.loading = true;
+      console.log(this.topqueryParams.leavehospitaldistrictcodes);
+      console.log(this.topqueryParams.leaveldeptcodes);
 
       if (
         this.topqueryParams.leavehospitaldistrictcodes[0] &&
@@ -848,6 +852,7 @@
       } else {
         this.topqueryParams.deptOrDistrict = 1;
       }
+      console.log(55);
       getTaskservelist(this.topqueryParams).then((response) => {
         this.userList = response.rows[0].serviceSubtaskList;
         this.userList.forEach((item) => {
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index 73f0311..64a85ad 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -846,7 +846,6 @@
         }
         console.log(this.form.wardCodes, "wardCodes");
         console.log(this.form.deptCodes, "deptCodes");
-
         this.postOptions = response.posts;
         this.roleOptions = response.roles;
         this.$set(this.form, "postIds", response.postIds);
@@ -927,7 +926,7 @@
     adduserdept() {
       if (this.form.wardCodes[0]) {
         this.form.wardCodes.forEach((dept) => {
-          const containsId8 = null;
+          let containsId8 = null;
           if (this.belongWards) {
             containsId8 = this.belongWards.some(
               (item) => item.deptCode == dept
@@ -948,7 +947,7 @@
       }
       if (this.form.deptCodes[0]) {
         this.form.deptCodes.forEach((dept) => {
-          const containsId8 = null;
+          let containsId8 = null;
           if (this.belongDepts) {
             containsId8 = this.belongDepts.some(
               (item) => item.deptCode == dept

--
Gitblit v1.9.3