WXL
3 天以前 dc082351978a1e9f75d7a1471a0ca7ebeac552a5
src/views/business/maintain/maintainInfo.vue
@@ -1,147 +1,6 @@
<template>
  <div class="maintenance-detail">
    <case-basic-info :case-id="caseId" :show-attachment="true" />
    <!-- 基础信息 -->
    <!-- <el-card class="detail-card">
      <div slot="header" class="clearfix">
        <span class="detail-title">供者基本信息</span>
        <el-button type="success" style="float: right;" @click="handleSave">
          保存信息
        </el-button>
      </div>
      <el-form :model="form" ref="form" label-width="120px">
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="住院号" prop="caseNo">
              <el-input v-model="form.caseNo" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="捐献者姓名" prop="name">
              <el-input v-model="form.name" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="性别" prop="gender">
              <el-select v-model="form.sex" style="width: 100%">
                <el-option label="男" value="0" />
                <el-option label="女" value="1" />
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="年龄" prop="age">
              <el-input v-model="form.age" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="疾病诊断" prop="diagnosisname">
              <el-input v-model="form.diagnosisname" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="首诊医疗机构" prop="treatmenthospitalname">
              <el-input v-model="form.treatmenthospitalname" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="患者状态" prop="recordstate">
              <el-select v-model="form.recordstate" style="width: 100%">
                <el-option
                  v-for="dict in dict.type.sys_DonationCategory || []"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item
              label="未完成原因"
              prop="incompleteReason"
              v-if="form.recordstate === '5'"
            >
              <el-input
                v-model="form.incompleteReason"
                placeholder="请输入未完成捐献的原因"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="上报时间" prop="reporttime">
              <el-date-picker
                v-model="form.reporttime"
                type="datetime"
                value-format="yyyy-MM-dd HH:mm:ss"
                style="width: 100%"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="死亡时间" prop="deathTime">
              <el-date-picker
                v-model="form.deathTime"
                type="datetime"
                value-format="yyyy-MM-dd HH:mm:ss"
                style="width: 100%"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="协调员" prop="coordinatorName">
              <el-input v-model="form.coordinatorName" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="血型" prop="bloodtype">
              <el-select v-model="form.bloodtype" style="width: 100%">
                <el-option
                  v-for="dict in dict.type.sys_BloodType"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="Rh(D)" prop="rhYin">
              <el-radio-group v-model="form.rhYin">
                <el-radio
                  v-for="dict in dict.type.sys_bloodtype_rhd || []"
                  :key="dict.value"
                  :label="dict.value"
                  >{{ dict.label }}</el-radio
                >
              </el-radio-group>
            </el-form-item>
          </el-col>
        </el-row>
        <el-form-item label="特殊病史" prop="specialMedicalHistory">
          <el-input
            type="textarea"
            :rows="3"
            v-model="form.specialMedicalHistory"
            placeholder="记录特殊病史信息"
          />
        </el-form-item>
      </el-form>
    </el-card> -->
    <el-card class="assessment-card">
      <div slot="header" class="clearfix">
@@ -150,9 +9,17 @@
          type="primary"
          size="mini"
          @click="toggleEditMode"
          style="float: right;"
          style="float: right;margin-left: 20px;"
        >
          {{ isEdit ? "完成编辑" : "开始编辑" }}
          保存编辑
        </el-button>
        <el-button
          type="success"
          size="mini"
          @click="accomplish"
          style="float: right;margin-left: 20px;"
        >
          完成编辑
        </el-button>
      </div>
@@ -188,8 +55,17 @@
                  <el-tag
                    :type="scope.row.result === '阴性' ? 'success' : 'danger'"
                    effect="plain"
                    @click="handleResultClick(scope.row)"
                    style="cursor: pointer;"
                  >
                    {{ scope.row.result }}
                    <i
                      v-if="
                        scope.row.result === '阳性' && scope.row.positiveDetails
                      "
                      class="el-icon-info"
                      style="margin-left: 4px;"
                    ></i>
                  </el-tag>
                </template>
              </el-table-column>
@@ -396,6 +272,7 @@
                v-model="cultureForm.result"
                placeholder="请选择培养结果"
                style="width: 100%"
                @change="handleResultChange"
              >
                <el-option label="阴性" value="阴性" />
                <el-option label="阳性" value="阳性" />
@@ -403,7 +280,19 @@
            </el-form-item>
          </el-col>
        </el-row>
        <el-form-item
          v-if="cultureForm.result === '阳性'"
          label="阳性详情"
          prop="positiveDetails"
        >
          <el-input
            type="textarea"
            :rows="2"
            v-model="cultureForm.positiveDetails"
            placeholder="请输入阳性结果的详细信息"
            clearable
          />
        </el-form-item>
        <el-form-item label="附件">
          <UploadAttachment
            ref="cultureUploadAttachment"
@@ -635,6 +524,7 @@
        cultureType: "",
        sampleTime: "",
        result: "阴性",
        positiveDetails: "", // 新增:阳性详情
        attachments: []
      },
      cultureFileList: [],
@@ -647,7 +537,8 @@
        ],
        result: [
          { required: true, message: "请选择培养结果", trigger: "change" }
        ]
        ],
        positiveDetails: [] // 动态验证规则
      },
      cultureTypeOptions: [
        { value: "1", label: "血培养" },
@@ -794,7 +685,46 @@
        this.recordLoading = false;
      }
    },
    // 处理培养结果选择变化
    handleResultChange(value) {
      this.$nextTick(() => {
        if (value === "阳性") {
          this.cultureRules.positiveDetails = [
            { required: true, message: "请输入阳性详情", trigger: "blur" }
          ];
        } else {
          this.cultureRules.positiveDetails = [];
          this.cultureForm.positiveDetails = "";
        }
        // 清除验证
        if (this.$refs.cultureForm) {
          this.$refs.cultureForm.clearValidate("positiveDetails");
        }
      });
    },
    // 处理点击培养结果标签
    handleResultClick(row) {
      if (row.result === "阳性" && row.positiveDetails) {
        this.$alert(
          `<div style="padding: 10px;">
        <h4 style="margin-bottom: 10px; color: #f56c6c;">阳性详情:</h4>
        <div style="background: #fef0f0; padding: 15px; border-radius: 4px; border-left: 4px solid #f56c6c;">
          <p style="margin: 0; white-space: pre-wrap; line-height: 1.5;">${row.positiveDetails}</p>
        </div>
      </div>`,
          "阳性结果详情",
          {
            dangerouslyUseHTMLString: true,
            confirmButtonText: "关闭",
            customClass: "result-details-dialog",
            showClose: false
          }
        );
      } else if (row.result === "阳性") {
        this.$message.warning("该阳性记录暂无详情信息");
      }
    },
    // 保存所有数据
    async handleSave() {
      try {
@@ -808,6 +738,9 @@
            nursingRecords: this.recordList
          }
        };
        if (saveData.state == 1 || !saveData.state) {
          saveData.state = 2;
        }
        this.extracontentinfo.specialMedicalHistory = this.form.specialMedicalHistory;
        let response;
        if (this.isEditMode && this.currentMaintenanceId) {
@@ -847,7 +780,19 @@
        this.handleSave();
      }
    },
    accomplish() {
      this.$confirm("是否完成该案例捐献确认步骤?", "提醒", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          this.form.state = 3;
          this.handleSave();
        })
        .catch(() => {});
    },
    // 培养记录相关方法
    handleAddCulture() {
      this.cultureDialogTitle = "新增培养记录";
@@ -865,9 +810,13 @@
      });
    },
    // 5. 修改编辑培养记录方法
    handleEditCulture(row) {
      this.cultureDialogTitle = "编辑培养记录";
      this.cultureForm = { ...row };
      this.cultureForm = {
        ...row,
        positiveDetails: row.positiveDetails || "" // 确保有positiveDetails字段
      };
      this.cultureFileList = row.attachments
        ? row.attachments.map(item => ({
            uid: item.id || Math.random(),
@@ -881,27 +830,44 @@
      this.cultureDialogVisible = true;
      this.$nextTick(() => {
        this.$refs.cultureForm && this.$refs.cultureForm.clearValidate();
        // 如果编辑时是阳性结果,设置验证规则
        if (row.result === "阳性") {
          this.cultureRules.positiveDetails = [
            { required: true, message: "请输入阳性详情", trigger: "blur" }
          ];
        }
      });
    },
    // 6. 修改保存培养记录方法
    handleSaveCulture() {
      this.$refs.cultureForm.validate(valid => {
        if (valid) {
          this.cultureSaveLoading = true;
          if (this.cultureForm.id) {
          // 构建保存数据
          const saveData = {
            ...this.cultureForm,
            // 如果是阴性,清空阳性详情
            positiveDetails:
              this.cultureForm.result === "阳性"
                ? this.cultureForm.positiveDetails || ""
                : ""
          };
          if (saveData.id) {
            const index = this.cultureList.findIndex(
              item => item.id === this.cultureForm.id
              item => item.id === saveData.id
            );
            if (index !== -1) {
              this.cultureList.splice(index, 1, { ...this.cultureForm });
              this.cultureList.splice(index, 1, { ...saveData });
            }
          } else {
            this.cultureForm.id = Date.now();
            this.cultureList.push({ ...this.cultureForm });
            saveData.id = Date.now();
            this.cultureList.push({ ...saveData });
          }
          this.$message.success(this.cultureForm.id ? "修改成功" : "新增成功");
          this.$message.success(saveData.id ? "修改成功" : "新增成功");
          this.cultureDialogVisible = false;
          this.cultureSaveLoading = false;
        }
@@ -1289,4 +1255,22 @@
  font-size: 13px;
  margin-left: 8px;
}
/* 7. 添加一些样式 */
.result-details-dialog {
  width: 500px;
}
.result-details-dialog .el-message-box__content {
  padding: 0;
}
.result-details-dialog .el-message-box__header {
  background: #fef0f0;
  border-bottom: 1px solid #fde2e2;
}
.result-details-dialog .el-message-box__title {
  color: #f56c6c;
  font-weight: bold;
}
</style>