19c62799136bb984e968fcb6b0a4d2371d018270..f055c750cfe0c2d371112e53291b352348bdde2d
4 天以前 WXL (wul)
同步
f055c7 对比 | 目录
4 天以前 WXL (wul)
同步
a78b97 对比 | 目录
4 天以前 WXL (wul)
分机号动态使用
f2bd87 对比 | 目录
4 天以前 WXL (wul)
电话更新
1aaa23 对比 | 目录
4 天以前 WXL (wul)
电话更新
071e3e 对比 | 目录
4 天以前 WXL (wul)
电话更新
66cc73 对比 | 目录
4 天以前 WXL (wul)
电话更新
0bd13d 对比 | 目录
4 天以前 WXL (wul)
缩放
9fd8b6 对比 | 目录
4 天以前 WXL (wul)
任务派发患者模式更新
176b37 对比 | 目录
4 天以前 WXL (wul)
任务派发患者模式更新
80a72a 对比 | 目录
6 天以前 WXL (wul)
测试完成
6bc24b 对比 | 目录
6 天以前 sinake
拨号失败后二次拨号
ebff66 对比 | 目录
8 天以前 WXL (wul)
测试分支发布
f5221c 对比 | 目录
10 天以前 WXL (wul)
测试完成
2d38ba 对比 | 目录
10 天以前 WXL (wul)
测试完成
30898b 对比 | 目录
10 天以前 WXL (wul)
测试完成
64aba5 对比 | 目录
10 天以前 WXL (wul)
测试完成
0bccc4 对比 | 目录
10 天以前 WXL (wul)
测试完成
61ec40 对比 | 目录
10 天以前 WXL (wul)
测试完成
aa17f1 对比 | 目录
10 天以前 WXL (wul)
测试完成
8a14aa 对比 | 目录
10 天以前 sinake
冲突
93f18e 对比 | 目录
10 天以前 sinake
修改语音IP
e08ef7 对比 | 目录
10 天以前 WXL (wul)
测试完成
57c1e9 对比 | 目录
10 天以前 WXL (wul)
测试完成
47df2b 对比 | 目录
已添加3个文件
已修改14个文件
1259 ■■■■■ 文件已修改
src/api/AiCentre/index.js 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/AiCentre/phoneCall.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/order/Xftp-8.0.0084p.exe 补丁 | 查看 | 原始文档 | blame | 历史
src/components/CallButton/index.vue 123 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/PatientSelection/index.vue 585 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/user.js 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/sipService-cs.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/sipService.js 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/discharge/index.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/record/detailpage/index.vue 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/tasklist/index.vue 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/outsideChainwtnew.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/follow/index.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/propaganda/QuestionnaireTask.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/propaganda/index.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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";
src/api/AiCentre/phoneCall.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
import request from "@/utils/request";
// åˆ é™¤å¤–部患者表
export function CallgetList() {
  return request({
    url: "/smartor/ServiceTelInfo/getList",
    method: "get",
  });
}
// æŸ¥è¯¢å¤–部患者表
export function CallsetState(data) {
  return request({
    url: "/smartor/ServiceTelInfo/setState",
    method: "get",
    params: data,
  });
}
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
  })
src/assets/order/Xftp-8.0.0084p.exe
Binary files differ
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();
  },
    // åˆå§‹åŒ–SIP连接
  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;
        // æ­£ç¡®è®¾ç½® 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>
src/components/PatientSelection/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,585 @@
<template>
  <div>
    <el-dialog
      title="派发患者选择"
      :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="患者:">
                <el-input
                  v-model="patientqueryParams.name"
                  @keyup.enter.native="handleQuery"
                ></el-input>
              </el-form-item>
              <el-form-item label="患者类型">
                <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="患者诊断:">
                <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>
            <!-- é€‰æ‹©æ‚£è€…列表 -->
            <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: "院外患者",
        },
        {
          value: "5",
          label: "手术病人",
        },
      ],
      overallCase:[],
      tableLabel: [
        { label: "出院日期", width: "150", prop: "inhosptime" },
        { label: "患者", width: "", prop: "name" },
        { label: "患者诊断", width: "", prop: "leavediagname" },
        { label: "身份证", width: "200", prop: "idcardno" },
        { label: "性别", width: "", prop: "sex" },
        { label: "年龄", width: "", prop: "age" },
        { label: "责任护士", 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宣教
    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() {
      // èŽ·å–å¤–éƒ¨æ‚£è€…
      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: "患者", width: "", prop: "name" },
          { label: "患者诊断", width: "", prop: "leavediagname" },
          { label: "身份证", width: "200", prop: "idcardno" },
          { label: "性别", width: "", prop: "sex" },
          { label: "年龄", width: "", prop: "age" },
          { label: "出院天数", width: "", prop: "endDay" },
          { label: "责任护士", 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: "患者", width: "", prop: "name" },
          { label: "患者诊断", width: "", prop: "leavediagname" },
          { label: "身份证", width: "200", prop: "idcardno" },
          { label: "性别", width: "", prop: "sex" },
          { label: "年龄", width: "", prop: "age" },
          { label: "出院天数", width: "", prop: "endDay" },
          { label: "责任护士", width: "", prop: "nurseName" },
          { label: "医生", width: "", prop: "drname" },
          { label: "科室", width: "180", prop: "dept" },
          { label: "病区", width: "150", prop: "leavehospitaldistrictname" },
        ];
      }
      console.log(this.patientqueryParams.allhosp);
      // èŽ·å–æ‚£è€…æ•°æ®
      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;
      });
    },
    // èŽ·å–å¤–éƒ¨æ‚£è€…å¯¼å…¥åˆ—è¡¨
    Externallist() {
      this.tableLabel = [
        { label: "患者", 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, "触发选择后multipleSelection");
    },
    // åˆ‡æ¢é¡µåŽæ¢å¤é€‰ä¸­
    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>
src/store/modules/user.js
@@ -1,6 +1,7 @@
import { login, logout, getInfo } from "@/api/login";
import { getToken, setToken, removeToken } from "@/utils/auth";
const user = {
  state: {
    token: getToken(),
@@ -11,9 +12,81 @@
    hisUserId: "",
    belongWards: [],
    belongDepts: [],
    name: "",
    nickName: "",
    Id: "",
    avatar: "",
    hisUserId: "",
    belongWards: [],
    belongDepts: [],
    roles: [],
    permissions: [],
    // æœåŠ¡ç±»åž‹
    Serviceauthority: [
      {
        value: "1",
        label: "患者报告",
        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: "宣教关怀",
        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 +210,43 @@
            if (orgid == "H41010500003") {
              localStorage.setItem("orgname", "河南中医药大学第一附属医院");
              localStorage.setItem("ZuHuID", "1400361376454545408"); // è¯·æ›¿æ¢ä¸ºå®žé™…çš„ZuHuID
              localStorage.setItem("deptCode", "1017"); // è¯·æ›¿æ¢ä¸ºå®žé™…的课题组代码
              localStorage.setItem("deptCode", "1017"); // è¯·æ›¿æ¢ä¸ºå®žé™…的科室代码
            } else if (orgid == "H41082200269") {
              localStorage.setItem("orgname", "博爱县人民医院");
              localStorage.setItem("ZuHuID", "1400360867068907520"); // è¯·æ›¿æ¢ä¸ºå®žé™…çš„ZuHuID
              localStorage.setItem("deptCode", "01040201"); // è¯·æ›¿æ¢ä¸ºå®žé™…的课题组代码
              localStorage.setItem("deptCode", "01040201"); // è¯·æ›¿æ¢ä¸ºå®žé™…的科室代码
            } else if (orgid == "H41078202417") {
              localStorage.setItem("orgname", "辉县市中医院");
              localStorage.setItem("ZuHuID", "1429338802177000002"); // è¯·æ›¿æ¢ä¸ºå®žé™…çš„ZuHuID
              localStorage.setItem("deptCode", ""); // è¯·æ›¿æ¢ä¸ºå®žé™…的课题组代码
              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();
          })
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)],
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);
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() {
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>
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>新增患者</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>
    <!-- é€‰æ‹©æ‚£è€…弹框 -->
    <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"; //正则组件
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 {
src/views/outsideChainwtnew.vue
@@ -8,7 +8,9 @@
            {{
              kcb
                ? kcb
                : "亲爱的患者-家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。"
                : "亲爱的患者-家属,我们是" +
                  localStorage.getItem("orgname") +
                  "的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访问卷。"
            }}
            <!-- äº²çˆ±çš„æ‚£è€…/家属您好,为了更好的了解您出院后的康复情况,给您适当及时的健康指导,请您抽一点宝贵时间,完成这份出院随访问卷调查。 -->
          </div>
@@ -277,31 +279,36 @@
  methods: {
    // è§£æž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) {
src/views/patient/follow/index.vue
@@ -630,6 +630,9 @@
.button-textxga {
  color: #de7897;
}
.button-textxga {
  color: #de7897;
}
.button-textsc {
  color: #3664d9;
}
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 ? "立即创建" : "派发患者配置"
        }}</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"; //正则组件
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;
      }
      //暂停任务患者限制
      // if (!this.form.patTaskRelevances[0] && !this.form.longTask) {
      //   this.$modal.msgError("请选择病人");
      //   return;
      // }
      if (!this.form.templatename && !this.templateor) {
        this.$modal.msgError("未选择模板");
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: {
    /** æŸ¥è¯¢é—¨è¯Šå®£æ•™æœåŠ¡åˆ—è¡¨ */
    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) => {
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