WXL (wul)
2 天以前 d3c60e18b95b50751f8088fa2d23cd8ff7f173bc
src/views/patient/propaganda/QuestionnaireTask.vue
@@ -370,27 +370,103 @@
                  </el-row>
                </el-row>
                <el-row v-if="form.appltype == 4">
                  <el-col :span="20"
                    ><el-form-item label="适用手术" prop="region">
                      <el-select
                        v-model="form.oplevelcode"
                        style="width: 400px"
                        @remove-tag="removeopera"
                        size="medium"
                        :remote-method="remoteopcode"
                        filterable
                        remote
                        placeholder="请选择手术"
                  <el-form-item label="适用手术" prop="region">
                    <el-select
                      v-model="form.oplevelcode"
                      style="width: 400px"
                      @remove-tag="removeopera"
                      size="medium"
                      :remote-method="remoteopcode"
                      filterable
                      remote
                      placeholder="请选择手术"
                    >
                      <el-option
                        class="ruleFormaa"
                        v-for="item in baseoperaList"
                        :label="item.label"
                        :value="item.value"
                      >
                        <el-option
                          class="ruleFormaa"
                          v-for="item in baseoperaList"
                          :label="item.label"
                          :value="item.value"
                      </el-option>
                    </el-select>
                  </el-form-item>
                  <div
                    style="
                      margin-bottom: 20px;
                      padding: 8px 12px;
                      background-color: #f0f9ff;
                      border-left: 4px solid #409eff;
                    "
                  >
                    <p
                      style="
                        margin: 0;
                        color: #606266;
                        font-size: 13px;
                        line-height: 1.4;
                      "
                    >
                      <i
                        class="el-icon-info"
                        style="color: #409eff; margin-right: 6px"
                      ></i>
                      针对同一手术类型在多科室/病区下存在的情况,可选择性配置固定科室/病区
                    </p>
                  </div>
                  <!-- 新增:手术关联下的科室配置(单选) -->
                  <el-row :gutter="20" style="margin-top: 20px">
                    <el-col :span="12">
                      <el-form-item label="关联科室" prop="diseaseDept">
                        <el-select
                          v-model="diseaseDept"
                          style="width: 100%"
                          clearable
                          filterable
                          placeholder="请选择科室(可选)"
                          value-key="deptCode"
                          @change="handleDiseaseDeptChange"
                        >
                        </el-option>
                      </el-select> </el-form-item
                  ></el-col>
                          <el-option
                            v-for="item in belongDepts"
                            :key="item.deptCode"
                            :label="item.deptName"
                            :value="item"
                          ></el-option>
                        </el-select>
                        <div v-if="diseaseDept" class="selected-info">
                          已选择: {{ diseaseDept.deptName }} ({{
                            diseaseDept.deptCode
                          }})
                        </div>
                      </el-form-item>
                    </el-col>
                    <el-col :span="12">
                      <el-form-item label="关联病区" prop="diseaseWard">
                        <el-select
                          v-model="diseaseWard"
                          style="width: 100%"
                          clearable
                          filterable
                          placeholder="请选择病区(可选)"
                          value-key="districtCode"
                          @change="handleDiseaseWardChange"
                        >
                          <el-option
                            v-for="item in belongWards"
                            :key="item.districtCode"
                            :label="item.districtName"
                            :value="item"
                          ></el-option>
                        </el-select>
                        <div v-if="diseaseWard" class="selected-info">
                          已选择: {{ diseaseWard.districtName }} ({{
                            diseaseWard.districtCode
                          }})
                        </div>
                      </el-form-item>
                    </el-col>
                  </el-row>
                </el-row>
                <el-row>
                  <el-col :span="12"
@@ -1097,8 +1173,8 @@
      // 时间处理
      daytime: [], //日期
      applydaytime: [], //计算日期
      diseaseDept: null, // 疾病关联下的科室(存储整个对象)
      diseaseWard: null, // 疾病关联下的病区(存储整个对象)
      diseaseDept: null, // 疾病或手术关联下的科室(存储整个对象)
      diseaseWard: null, // 疾病或手术关联下的病区(存储整个对象)
      diseaseDepts: "",
      diseaseWards: "",
      time1: "", //上午时间段
@@ -1503,13 +1579,16 @@
      if (this.submitLoading) {
        return;
      }
      // 第二步:开启加载状态,禁用按钮
      // 开启加载状态
      this.submitLoading = true;
      console.log(this.submitLoading);
      try {
        if (this.time4 && this.form.sendType == 3)
        // 时间处理
        if (this.time4 && this.form.sendType == 3) {
          this.form.showTimeMorn = this.time4;
        }
        this.form.sendTimeslot = [
          {
            begantime: this.time4,
@@ -1517,8 +1596,8 @@
            xh: 1,
          },
        ];
        console.log(1);
        // 根据应用类型清理字段
        if (this.form.appltype == 1) {
          this.leavehospitaldistrictcodes = [];
          this.form.oplevelcode = null;
@@ -1536,75 +1615,90 @@
          this.illnesscodes = [];
          this.leavehospitaldistrictcodes = [];
        }
        // 校验:服务类型
        if (this.checkList) {
          this.form.preachform = this.checkList.join(",");
          this.form.preachformList = this.selectedOrder;
        } else {
          this.$modal.msgError("请选择服务类型");
          this.submitLoading = false;
          return;
        }
        console.log(2);
        if (
        // 校验:疾病关联科室或病区
        if (this.form.appltype == 3 || this.form.appltype == 4) {
          const hasDept = this.diseaseDept?.deptCode;
          const hasWard = this.diseaseWard?.districtCode;
          if (!hasDept && !hasWard) {
            this.$modal.msgError("需关联科室或病区");
            this.submitLoading = false;
            return;
          }
        }
        // 校验:任务关联条件
        const hasCondition =
          this.deptcodesWards[0] ||
          this.leavehospitaldistrictcodes[0] ||
          this.diagglist[0] ||
          this.form.oplevelcode ||
          this.form.longTask == 2 ||
          this.serviceType == 3
        ) {
        } else {
          this.serviceType == 3;
        if (!hasCondition) {
          this.$modal.msgError("请选择任务关联条件");
          this.submitLoading = false;
          return;
        }
        //暂停任务患者限制
        // if (!this.form.patTaskRelevances[0] && !this.form.longTask) {
        //   this.$modal.msgError("请选择病人");
        //   return;
        // }
        console.log(3);
        // 校验:模板
        if (!this.form.templatename && !this.templateor) {
          this.$modal.msgError("未选择模板");
          this.submitLoading = false;
          return;
        }
        if (
        // 校验:时间信息
        const isValidTime =
          (this.form.sendType == 1 && this.time1) ||
          this.form.sendType == 2
        ) {
        } else if (
          this.form.sendType == 2 ||
          (this.form.sendType == 3 && this.time4) ||
          this.form.longTask
        ) {
        } else {
          this.form.longTask;
        if (!isValidTime) {
          this.submitLoading = false;
          return this.$modal.msgError("时间信息缺失");
          this.$modal.msgError("时间信息缺失");
          return;
        }
        // 处理文本参数
        const filteredArray = this.variableList.filter(
          (item) =>
            item.name !== "姓名" && item.name !== "电话" && item.name !== "地址"
        );
        this.form.textParam = this.convertFormat2ToFormat1(filteredArray);
        // 设置操作类型
        if (this.form.taskid) {
          this.form.isoperation = 2;
        } else {
          this.form.isoperation = 1;
        }
        // 设置类型
        if (!this.form.type) {
          this.form.type = this.$route.query.type;
        }
        console.log(4);
        // 组装提交数据
        this.form.serviceType = this.serviceType;
        this.form.deptcode = this.deptcodesWards.join(",");
        this.form.leavehospitaldistrictcode =
          this.leavehospitaldistrictcodes.join(",");
        // this.form.opcode = this.operationcodes.join(",");
        // 疾病关联的科室/病区
        if (this.form.appltype == 3) {
          if (this.diseaseDept) {
            this.form.deptcode = this.diseaseDept.deptCode;
@@ -1617,30 +1711,46 @@
          }
        }
        // 诊断信息
        this.form.icd10code = this.diagglist
          .map((item) => item.icdcode)
          .join(",");
        this.form.icd10name = this.diagglist
          .map((item) => item.icdname)
          .join(",");
        Editsingletask(this.form).then((res) => {
          if (res.code == 200) {
            if (this.form.taskid) {
              this.$modal.msgSuccess("修改成功");
        // 提交接口
        Editsingletask(this.form)
          .then((res) => {
            if (res.code == 200) {
              if (this.form.taskid) {
                this.$modal.msgSuccess("修改成功");
              } else {
                this.$modal.msgSuccess("新增成功");
              }
              this.$router.push({
                path: "/followvisit/tasklist",
                query: { tasktopic: this.form.serviceType },
              });
            } else {
              this.$modal.msgSuccess("新增成功");
              // ✅ 接口返回错误码时的处理
              this.$modal.msgError(res.msg || "操作失败");
            }
            this.$router.push({
              path: "/followvisit/tasklist",
              query: { tasktopic: this.form.serviceType },
            });
          })
          .catch((error) => {
            // ✅ 捕获接口请求异常
            console.error("提交失败:", error);
            this.$modal.msgError(error.message || "网络异常,请稍后重试");
          })
          .finally(() => {
            // ✅ 无论成功或失败,最终都关闭加载状态
            this.submitLoading = false;
          }
        });
          });
      } catch (error) {
        // ✅ 捕获同步代码异常
        console.error("表单提交异常:", error);
        this.$modal.msgError(error.message || "表单提交异常");
        this.submitLoading = false;
      } finally {
        // 第四步:无论成功或失败,最终都关闭加载状态
      }
    },
    handleDiseaseDeptChange(dept) {
@@ -2102,6 +2212,14 @@
            this.form.patTaskRelevances = this.form.patTaskRelevances
              ? this.form.patTaskRelevances
              : [];
            this.diseaseDept = {
              deptCode: this.form.deptcode,
              deptName: this.form.deptname,
            };
            this.diseaseWard = {
              districtCode: this.form.leavehospitaldistrictcode,
              districtName: this.form.leavehospitaldistrictname,
            };
            this.overallCase = this.form.patTaskRelevances.concat();
            this.checkList = this.form.preachform.split(",");
            this.selectedOrder = this.form.preachformList;