WXL (wul)
5 天以前 70e4d2c33cc2e3af590d1816c0c703da341538cf
src/views/patient/propaganda/QuestionnaireTask.vue
@@ -214,32 +214,98 @@
                <!-- 药品关联 -->
                <el-row v-if="form.appltype == 6">
                  <el-col :span="20">
                    <el-form-item label="关联药品" prop="region">
                      <el-select
                        v-model="medicalCodes"
                        @remove-tag="removeMedical"
                        style="width: 400px"
                        size="medium"
                        multiple
                        filterable
                        remote
                        reserve-keyword
                        :remote-method="remoteSearchMedical"
                        placeholder="请输入药品名称搜索"
                        loading-text="搜索中..."
                      >
                        <el-option
                          v-for="item in medicalOptions"
                          :key="item.id"
                          :label="
                            item.itemName + ' (' + item.manufacturerName + ')'
                          "
                          :value="item.itemCode"
                        />
                      </el-select>
                    </el-form-item>
                  </el-col>
                  <el-form-item label="关联药品" prop="region">
                    <el-select
                      v-model="medicalCodes"
                      @remove-tag="removeMedical"
                      style="width: 400px"
                      size="medium"
                      multiple
                      filterable
                      remote
                      reserve-keyword
                      :remote-method="remoteSearchMedical"
                      placeholder="请输入药品名称搜索"
                      loading-text="搜索中..."
                    >
                      <el-option
                        v-for="item in medicalOptions"
                        :key="item.itemCode"
                        :label="
                          item.itemName + ' (' + item.manufacturerName + ')'
                        "
                        :value="item.itemCode"
                      />
                    </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">
                      <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
                            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>
                <!-- 科室关联 -->
@@ -313,7 +379,7 @@
                      </div>
                      <el-tag
                        v-for="tag in diagglist"
                        @close="removediagg(tag.icd10code)"
                        @close="removediagg(tag)"
                        type="warning"
                        closable
                        :disable-transitions="false"
@@ -647,7 +713,7 @@
                        </div>
                        <el-tag
                          v-for="tag in diagglist"
                          @close="removediagg(tag.icd10code)"
                          @close="removediagg(tag)"
                          type="warning"
                          closable
                          :disable-transitions="false"
@@ -1280,6 +1346,7 @@
  getTaskpatientQC,
  taskoperhospgetsondel,
  taskdiaghospgetsondel,
  taskmedicaldel,
  getillnesslist,
  getbaseopera,
  Externallist,
@@ -1296,6 +1363,7 @@
  getQtemplateclassify,
  taskdepthospgetsondel,
  taskdepthospgetsonlist,
  taskmedicallist,
  taskdiaggetlist,
  rwztaskdepthospgetsonlist,
  rwztaskdiaggetlist,
@@ -1677,6 +1745,7 @@
        this.form.serviceType == 8 ||
        this.form.serviceType == 12 ||
        this.form.serviceType == 13 ||
        this.form.serviceType == 20 ||
        this.form.serviceType == 9
      ) {
        this.checkboxlist = [
@@ -1813,21 +1882,6 @@
              districtCode: this.form.leavehospitaldistrictcode,
              districtName: this.form.leavehospitaldistrictname,
            };
            // 药品关联回显
            if (this.form.medicalCode) {
              this.medicalCodes = this.form.medicalCode
                .split(",")
                .filter(Boolean);
              // 加载已选药品的选项列表(用于展示 label)
              const codes = this.form.medicalCode;
              listMedication({
                itemCode: codes,
                pageNum: 1,
                pageSize: 200,
              }).then((res) => {
                this.medicalOptions = res.rows || [];
              });
            }
            this.overallCase = this.form.patTaskRelevances.concat();
            this.checkList = this.form.preachform
              ? this.form.preachform.split(",")
@@ -2057,6 +2111,8 @@
    listDept() {
      this.leavehospitaldistrictcodes = [];
      this.deptcodesWards = [];
      this.medicalCodes = [];
      this.medicalOptions = [];
      // this.queryParamsdept.taskId = this.form.taskid;
      this.queryParamsdept.taskId = this.form.taskid;
@@ -2104,6 +2160,22 @@
            });
          }
        });
        // 获取关联药品
        taskmedicallist(this.queryParamsdept).then((res) => {
          if (res.code == 200) {
            let arr = res.rows || [];
            arr.forEach((item) => {
              const code = item.itemCode || item.medicalCode;
              this.medicalCodes.push(code);
              this.medicalOptions.push({
                ...item,
                itemCode: code,
                itemName: item.itemName || item.medicalName,
                manufacturerName: item.manufacturerName || item.medicalCompany,
              });
            });
          }
        });
        taskdiaggetlist(this.queryParamsdept).then((res) => {
          if (res.code == 200) {
            let arr = res.rows;
@@ -2112,7 +2184,7 @@
                item.icdname = item.icd10name;
                this.diagglist.push(item);
              } else {
                getillnesslist({ icdname: item.icd10name }).then((res) => {
                getillnesslist({ icdcode: item.icd10code }).then((res) => {
                  item.icdname = res.rows[0].icdname;
                  this.diagglist.push(item);
                });
@@ -2163,25 +2235,26 @@
        });
      }
    },
    removediagg(row) {
    removediagg(tag) {
      // 任务组:本地删除即可,后端保存时统一更新
      if (this.form.appltype == 5) {
        this.diagglist = this.diagglist.filter((item) => item.icd10code != row);
        this.diagglist = this.diagglist.filter((item) => item != tag);
        return;
      }
      // 普通疾病关联:调后端接口逐条删除
      let result = this.diagglist
        .filter((item) => item.icd10code == row)
        .map((item) => item.id);
      if (result.length) {
        taskdiaghospgetsondel(result).then((res) => {
      // 普通疾病关联:判断是否有 id(已保存的记录才有 id)
      if (tag.id) {
        // id 存在,调后端接口删除
        taskdiaghospgetsondel([tag.id]).then((res) => {
          if (res.code) {
            this.diagglist = this.diagglist.filter(
              (item) => item.icd10code != row
            );
            this.diagglist = this.diagglist.filter((item) => item != tag);
            this.$modal.msgSuccess("删除成功");
          }
        });
      } else {
        // id 不存在(未保存的新记录),直接本地删除
        this.diagglist = this.diagglist.filter((item) => item != tag);
        this.$modal.msgSuccess("删除成功");
      }
    },
    remoteopcode(name) {
@@ -2199,9 +2272,16 @@
        }
      );
    },
    // 删除已选药品
    // 删除已选药品(单独接口)
    removeMedical(code) {
      this.medicalCodes = this.medicalCodes.filter((c) => c !== code);
      taskmedicaldel({ medicalCode: code, taskId: this.form.taskid }).then(
        (res) => {
          if (res.code == 200) {
            this.medicalCodes = this.medicalCodes.filter((c) => c !== code);
            this.$modal.msgSuccess("删除成功");
          }
        }
      );
    },
    // ---------- 患者选择 ----------
@@ -2761,8 +2841,12 @@
        this.form.icd10name = this.diagglist
          .map((item) => item.icdname)
          .join(",");
        // 疾病/手术关联的科室/病区校验
        if (this.form.appltype == 3 || this.form.appltype == 4) {
        // 疾病/手术/药品关联的科室/病区校验
        if (
          this.form.appltype == 3 ||
          this.form.appltype == 4 ||
          this.form.appltype == 6
        ) {
          const hasDept = this.diseaseDept?.deptCode;
          const hasWard = this.diseaseWard?.districtCode;
          if (!hasDept && !hasWard) {