WXL
4 天以前 475a352a4bfd7ac3a81e8c7c92d3bb64e2e01037
src/views/business/maintain/maintainInfo.vue
@@ -4,12 +4,7 @@
    <el-card class="detail-card">
      <div slot="header" class="clearfix">
        <span class="detail-title">供者基本信息</span>
        <el-button
          v-if="isEdit"
          type="primary"
          style="float: right; padding: 3px 0"
          @click="handleSave"
        >
        <el-button type="success" style="float: right;" @click="handleSave">
          保存信息
        </el-button>
      </div>
@@ -17,18 +12,18 @@
      <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" :readonly="!isEdit" />
            <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="donorName">
              <el-input v-model="form.donorName" :readonly="!isEdit" />
            <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.gender" :disabled="!isEdit" style="width: 100%">
              <el-select v-model="form.sex" style="width: 100%">
                <el-option label="男" value="0" />
                <el-option label="女" value="1" />
              </el-select>
@@ -39,38 +34,61 @@
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="年龄" prop="age">
              <el-input v-model="form.age" :readonly="!isEdit" />
              <el-input v-model="form.age" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="疾病诊断" prop="diagnosis">
              <el-input v-model="form.diagnosis" :readonly="!isEdit" />
            <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="hospitalName">
              <el-input v-model="form.hospitalName" :readonly="!isEdit" />
            <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="patientStatus">
              <el-select v-model="form.patientStatus" :disabled="!isEdit" style="width: 100%">
                <el-option label="DCD" value="1" />
            <el-form-item label="患者状态" prop="recordstate">
              <el-select v-model="form.recordstate" style="width: 100%">
                <!-- <el-option label="DCD" value="1" />
                <el-option label="DBD" value="2" />
                <el-option label="DBCD" value="3" />
                <el-option label="已完成捐献" value="4" />
                <el-option label="未完成捐献" value="5" />
                <el-option label="未完成捐献" value="5" /> -->
                <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-form-item
              align="left"
              label="患者捐献状态"
              prop="donationcategory"
            >
              <el-radio-group v-model="form.recordstate">
                <el-radio
                  v-for="dict in dict.type.sys_DonationCategory || []"
                  :key="dict.value"
                  :label="dict.value"
                  >{{ dict.label }}</el-radio
                >
              </el-radio-group>
            </el-form-item> -->
          </el-col>
          <el-col :span="8">
            <el-form-item label="未完成原因" prop="incompleteReason" v-if="form.patientStatus === '5'">
            <el-form-item
              label="未完成原因"
              prop="incompleteReason"
              v-if="form.recordstate === '5'"
            >
              <el-input
                v-model="form.incompleteReason"
                :readonly="!isEdit"
                placeholder="请输入未完成捐献的原因"
              />
            </el-form-item>
@@ -79,51 +97,59 @@
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="入院时间" prop="admissionTime">
            <el-form-item label="上报时间" prop="reporttime">
              <el-date-picker
                v-model="form.admissionTime"
                v-model="form.reporttime"
                type="datetime"
                value-format="yyyy-MM-dd HH:mm:ss"
                style="width: 100%"
                :disabled="!isEdit"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="出院时间" prop="dischargeTime">
            <el-form-item label="死亡时间" prop="deathTime">
              <el-date-picker
                v-model="form.dischargeTime"
                v-model="form.deathTime"
                type="datetime"
                value-format="yyyy-MM-dd HH:mm:ss"
                style="width: 100%"
                :disabled="!isEdit"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="协调员" prop="coordinator">
              <el-input v-model="form.coordinator" :readonly="!isEdit" />
            <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" :disabled="!isEdit" style="width: 100%">
                <el-option label="A型" value="A" />
            <el-form-item label="血型" prop="bloodtype">
              <el-select v-model="form.bloodtype" style="width: 100%">
                <!-- <el-option label="A型" value="A" />
                <el-option label="B型" value="B" />
                <el-option label="O型" value="O" />
                <el-option label="AB型" value="AB" />
                <el-option label="AB型" value="AB" /> -->
                <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因子" prop="rhFactor">
              <el-select v-model="form.rhFactor" :disabled="!isEdit" style="width: 100%">
                <el-option label="阳性" value="positive" />
                <el-option label="阴性" value="negative" />
              </el-select>
            <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>
@@ -133,78 +159,135 @@
            type="textarea"
            :rows="3"
            v-model="form.specialMedicalHistory"
            :readonly="!isEdit"
            placeholder="记录特殊病史信息"
          />
        </el-form-item>
      </el-form>
    </el-card>
    <!-- 培养结果记录 -->
 <!-- 培养结果记录 -->
    <el-card class="culture-card">
    <el-card class="assessment-card">
      <div slot="header" class="clearfix">
        <span class="detail-title">培养结果记录</span>
        <span class="detail-title">供者评估各项记录</span>
        <el-button
          type="primary"
          size="mini"
          icon="el-icon-plus"
          @click="handleAddCulture"
          @click="toggleEditMode"
          style="float: right;"
        >
          新增培养记录
          {{ isEdit ? "完成编辑" : "开始编辑" }}
        </el-button>
      </div>
      <el-table :data="cultureList" v-loading="cultureLoading">
        <el-table-column label="培养类型" align="center" prop="cultureType" width="120">
          <template slot-scope="scope">
            <dict-tag :options="cultureTypeOptions" :value="scope.row.cultureType" />
          </template>
        </el-table-column>
        <el-table-column label="采样时间" align="center" prop="sampleTime" width="160" />
        <el-table-column label="培养结果" align="center" prop="result" width="100">
          <template slot-scope="scope">
            <el-tag :type="scope.row.result === '阴性' ? 'success' : 'danger'" effect="plain">
              {{ scope.row.result }}
            </el-tag>
          </template>
        </el-table-column>
        <el-table-column label="菌种" align="center" prop="bacteria" width="120" />
        <el-table-column label="药敏结果" align="center" prop="drugSensitivity" min-width="150" show-overflow-tooltip />
        <el-table-column label="检测机构" align="center" prop="testingInstitution" width="120" />
        <el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width">
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="text"
              icon="el-icon-edit"
              @click="handleEditCulture(scope.row)"
            >编辑</el-button>
            <el-button
              size="mini"
              type="text"
              icon="el-icon-delete"
              style="color: #F56C6C;"
              @click="handleDeleteCulture(scope.row)"
            >删除</el-button>
            <el-button
              size="mini"
              type="text"
              icon="el-icon-view"
              @click="handleViewCulture(scope.row)"
            >详情</el-button>
          </template>
        </el-table-column>
      </el-table>
      <el-tabs v-model="activeTab" type="card" @tab-click="handleTabClick">
        <!-- 培养结果记录 -->
        <el-tab-pane label="培养结果" name="culture">
          <el-card class="culture-card">
            <div slot="header" class="clearfix">
              <span class="detail-title">培养结果记录</span>
              <el-button
                type="primary"
                size="mini"
                icon="el-icon-plus"
                @click="handleAddCulture"
              >
                新增培养记录
              </el-button>
            </div>
      <!-- 分页组件 -->
      <pagination
        v-show="cultureTotal > 0"
        :total="cultureTotal"
        :page.sync="cultureQueryParams.pageNum"
        :limit.sync="cultureQueryParams.pageSize"
        @pagination="getCultureList"
      />
            <el-table :data="cultureList" v-loading="cultureLoading">
              <el-table-column
                label="培养类型"
                align="center"
                prop="cultureType"
              />
              <el-table-column
                label="采样时间"
                align="center"
                prop="sampleTime"
              />
              <el-table-column label="培养结果" align="center" prop="result">
                <template slot-scope="scope">
                  <el-tag
                    :type="scope.row.result === '阴性' ? 'success' : 'danger'"
                    effect="plain"
                  >
                    {{ scope.row.result }}
                  </el-tag>
                </template>
              </el-table-column>
              <el-table-column label="附件" align="center">
                <template slot-scope="scope">
                  <el-button
                    v-if="
                      scope.row.attachments && scope.row.attachments.length > 0
                    "
                    size="mini"
                    type="text"
                    @click="handleViewCultureAttachments(scope.row)"
                  >
                    查看附件({{ scope.row.attachments.length }})
                  </el-button>
                  <span v-else>无附件</span>
                </template>
              </el-table-column>
              <el-table-column
                label="操作"
                align="center"
                width="200"
                class-name="small-padding fixed-width"
              >
                <template slot-scope="scope">
                  <el-button
                    size="mini"
                    type="text"
                    icon="el-icon-edit"
                    @click="handleEditCulture(scope.row)"
                    >编辑</el-button
                  >
                  <el-button
                    size="mini"
                    type="text"
                    icon="el-icon-delete"
                    style="color: #F56C6C;"
                    @click="handleDeleteCulture(scope.row)"
                    >删除</el-button
                  >
                </template>
              </el-table-column>
            </el-table>
          </el-card>
        </el-tab-pane>
        <!-- 肝功能肾功能 -->
        <el-tab-pane label="肝功能肾功能" name="liverKidney">
          <liver-kidney-panel
            ref="liverKidney"
            :initial-data="assessmentData.liverKidney"
            :is-editing="isEdit && activeTab === 'liverKidney'"
            @data-change="handleLiverKidneyDataChange"
          />
        </el-tab-pane>
        <!-- 血常规 -->
        <el-tab-pane label="血常规" name="bloodRoutine">
          <blood-routine-panel
            ref="bloodRoutine"
            :initial-data="assessmentData.bloodRoutine"
            :is-editing="isEdit && activeTab === 'bloodRoutine'"
            @data-change="handleBloodRoutineDataChange"
          />
        </el-tab-pane>
        <!-- 尿常规 -->
        <el-tab-pane label="尿常规" name="urineRoutine">
          <urine-routine-panel
            ref="urineRoutine"
            :initial-data="assessmentData.urineRoutine"
            :is-editing="isEdit && activeTab === 'urineRoutine'"
            @data-change="handleUrineRoutineDataChange"
          />
        </el-tab-pane>
      </el-tabs>
    </el-card>
    <!-- 护理核查记录 -->
@@ -222,47 +305,63 @@
      </div>
      <el-table :data="recordList" v-loading="recordLoading">
        <el-table-column label="核查时间" align="center" prop="recordTime" width="160" />
        <el-table-column label="核查人" align="center" prop="recorder" width="100" />
        <el-table-column label="体温(℃)" align="center" prop="temperature"  />
        <el-table-column label="心率(次/分)" align="center" prop="heartRate"  />
        <el-table-column label="血压(mmHg)" align="center" prop="bloodPressure" width="160" />
        <el-table-column label="呼吸(次/分)" align="center" prop="respirationRate"  />
        <el-table-column label="血氧饱和度(%)" align="center" prop="oxygenSaturation" width="160" />
        <el-table-column label="尿量(ml/h)" align="center" prop="urineOutput"  />
        <el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
        <el-table-column
          label="核查时间"
          align="center"
          prop="recordTime"
          width="160"
        />
        <el-table-column
          label="核查人"
          align="center"
          prop="recorder"
          width="100"
        />
        <el-table-column
          label="核查记录"
          align="center"
          prop="checkRecord"
          min-width="200"
          show-overflow-tooltip
        />
        <el-table-column label="附件" align="center" width="120">
          <template slot-scope="scope">
            <el-button
              v-if="scope.row.attachments && scope.row.attachments.length > 0"
              size="mini"
              type="text"
              @click="handleViewRecordAttachments(scope.row)"
            >
              查看附件({{ scope.row.attachments.length }})
            </el-button>
            <span v-else>无附件</span>
          </template>
        </el-table-column>
        <el-table-column
          label="操作"
          align="center"
          width="180"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="text"
              icon="el-icon-edit"
              @click="handleEditRecord(scope.row)"
            >编辑</el-button>
              >编辑</el-button
            >
            <el-button
              size="mini"
              type="text"
              icon="el-icon-delete"
              style="color: #F56C6C;"
              @click="handleDeleteRecord(scope.row)"
            >删除</el-button>
            <el-button
              size="mini"
              type="text"
              icon="el-icon-view"
              @click="handleViewRecord(scope.row)"
            >详情</el-button>
              >删除</el-button
            >
          </template>
        </el-table-column>
      </el-table>
      <!-- 分页组件 -->
      <pagination
        v-show="recordTotal > 0"
        :total="recordTotal"
        :page.sync="recordQueryParams.pageNum"
        :limit.sync="recordQueryParams.pageSize"
        @pagination="getRecordList"
      />
    </el-card>
    <!-- 培养记录编辑对话框 -->
@@ -272,16 +371,25 @@
      width="700px"
      :close-on-click-modal="false"
    >
      <el-form :model="cultureForm" ref="cultureForm" :rules="cultureRules" label-width="120px">
      <el-form
        :model="cultureForm"
        ref="cultureForm"
        :rules="cultureRules"
        label-width="120px"
      >
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="培养类型" prop="cultureType">
              <el-select v-model="cultureForm.cultureType" placeholder="请选择培养类型" style="width: 100%">
              <el-select
                v-model="cultureForm.cultureType"
                placeholder="请选择培养类型"
                style="width: 100%"
              >
                <el-option
                  v-for="item in cultureTypeOptions"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                  :value="item.label"
                />
              </el-select>
            </el-form-item>
@@ -302,54 +410,34 @@
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="培养结果" prop="result">
              <el-select v-model="cultureForm.result" placeholder="请选择培养结果" style="width: 100%">
              <el-select
                v-model="cultureForm.result"
                placeholder="请选择培养结果"
                style="width: 100%"
              >
                <el-option label="阴性" value="阴性" />
                <el-option label="阳性" value="阳性" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="菌种" prop="bacteria">
              <el-input v-model="cultureForm.bacteria" placeholder="请输入检测到的菌种" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-form-item label="药敏结果" prop="drugSensitivity">
          <el-input
            type="textarea"
            :rows="3"
            v-model="cultureForm.drugSensitivity"
            placeholder="请输入药敏试验结果"
          />
        </el-form-item>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="检测机构" prop="testingInstitution">
              <el-input v-model="cultureForm.testingInstitution" placeholder="请输入检测机构" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="标本类型" prop="specimenType">
              <el-input v-model="cultureForm.specimenType" placeholder="请输入标本类型" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-form-item label="备注" prop="remarks">
          <el-input
            type="textarea"
            :rows="2"
            v-model="cultureForm.remarks"
            placeholder="请输入备注信息"
        <el-form-item label="附件">
          <upload-attachment
            :file-list="cultureForm.attachments"
            @change="handleCultureAttachmentChange"
          />
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="cultureDialogVisible = false">取消</el-button>
        <el-button type="primary" @click="handleSaveCulture" :loading="cultureSaveLoading">保存</el-button>
        <el-button
          type="primary"
          @click="handleSaveCulture"
          :loading="cultureSaveLoading"
          >保存</el-button
        >
      </span>
    </el-dialog>
@@ -357,10 +445,15 @@
    <el-dialog
      :title="recordDialogTitle"
      :visible.sync="recordDialogVisible"
      width="800px"
      width="700px"
      :close-on-click-modal="false"
    >
      <el-form :model="recordForm" ref="recordForm" :rules="recordRules" label-width="120px">
      <el-form
        :model="recordForm"
        ref="recordForm"
        :rules="recordRules"
        label-width="120px"
      >
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="核查时间" prop="recordTime">
@@ -375,245 +468,321 @@
          </el-col>
          <el-col :span="12">
            <el-form-item label="核查人" prop="recorder">
              <el-input v-model="recordForm.recorder" placeholder="请输入核查人姓名" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="体温(℃)" prop="temperature">
              <el-input-number
                v-model="recordForm.temperature"
                :min="30" :max="45" :step="0.1"
                controls-position="right"
                style="width: 100%"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="心率(次/分)" prop="heartRate">
              <el-input-number
                v-model="recordForm.heartRate"
                :min="0" :max="200"
                controls-position="right"
                style="width: 100%"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="呼吸(次/分)" prop="respirationRate">
              <el-input-number
                v-model="recordForm.respirationRate"
                :min="0" :max="60"
                controls-position="right"
                style="width: 100%"
              <el-input
                v-model="recordForm.recorder"
                placeholder="请输入核查人姓名"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="血压(mmHg)" prop="bloodPressure">
              <el-input v-model="recordForm.bloodPressure" placeholder="格式:收缩压/舒张压" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="血氧饱和度(%)" prop="oxygenSaturation">
              <el-input-number
                v-model="recordForm.oxygenSaturation"
                :min="0" :max="100"
                controls-position="right"
                style="width: 100%"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="尿量(ml/h)" prop="urineOutput">
              <el-input-number
                v-model="recordForm.urineOutput"
                :min="0" :max="1000"
                controls-position="right"
                style="width: 100%"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="中心静脉压" prop="cvp">
              <el-input-number
                v-model="recordForm.cvp"
                :min="0" :max="20" :step="0.1"
                controls-position="right"
                style="width: 100%"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-form-item label="备注" prop="remarks">
        <el-form-item label="核查记录" prop="checkRecord">
          <el-input
            type="textarea"
            :rows="3"
            v-model="recordForm.remarks"
            placeholder="请输入核查备注信息"
            :rows="4"
            v-model="recordForm.checkRecord"
            placeholder="请输入核查记录内容"
          />
        </el-form-item>
        <el-form-item label="附件">
          <upload-attachment
            :file-list="recordForm.attachments"
            @change="handleRecordAttachmentChange"
          />
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="recordDialogVisible = false">取消</el-button>
        <el-button type="primary" @click="handleSaveRecord" :loading="recordSaveLoading">保存</el-button>
        <el-button
          type="primary"
          @click="handleSaveRecord"
          :loading="recordSaveLoading"
          >保存</el-button
        >
      </span>
    </el-dialog>
    <!-- 附件预览对话框 -->
    <attachment-preview
      :visible="attachmentPreviewVisible"
      :file-list="currentAttachmentList"
      :title="attachmentPreviewTitle"
      @close="attachmentPreviewVisible = false"
    />
  </div>
</template>
<script>
import { getMaintenanceDetail, updateMaintenance } from "./mockMaintenanceApi";
import { listCultureResults, addCultureResult, updateCultureResult, deleteCultureResult } from "./mockMaintenanceApi";
import { listNursingRecords, addNursingRecord, updateNursingRecord, deleteNursingRecord } from "./mockMaintenanceApi";
import { maintainList, maintainedit, maintainAdd } from "@/api/businessApi";
import Pagination from "@/components/Pagination";
import UploadAttachment from "@/components/UploadAttachment";
import AttachmentPreview from "@/components/AttachmentPreview";
import LiverKidneyPanel from "./components/LiverKidneyPanel.vue";
import BloodRoutinePanel from "./components/BloodRoutinePanel.vue";
import UrineRoutinePanel from "./components/UrineRoutinePanel.vue";
export default {
 name: "MaintenanceDetail",
  components: { Pagination },
  name: "MaintenanceDetail",
  components: {
    Pagination,
    UploadAttachment,
    AttachmentPreview,
    LiverKidneyPanel,
    BloodRoutinePanel,
    UrineRoutinePanel
  },
  dicts: [
    "sys_donornode",
    "sys_BloodType",
    "sys_EthicalReview",
    "sys_BaseAssessConclusion",
    "sys_bloodtype_rhd",
    "sys_DonationCategory"
  ],
  data() {
    return {
      isEdit: false,
      currentMaintenanceId: null,
      isEditMode: false,
      form: {
        id: undefined,
        caseNo: '',
        donorName: '',
        gender: '',
        age: '',
        diagnosis: '',
        hospitalName: '',
        patientStatus: '1',
        admissionTime: '',
        dischargeTime: '',
        coordinator: '',
        bloodType: '',
        rhFactor: '',
        specialMedicalHistory: '',
        incompleteReason: ''
        caseNo: "",
        name: "",
        gender: "",
        age: "",
        diagnosisname: "",
        treatmenthospitalname: "",
        recordstate: "1",
        reporttime: "",
        deathTime: "",
        coordinatorName: "",
        bloodtype: "",
        rhFactor: "",
        specialMedicalHistory: "",
        incompleteReason: ""
      },
      activeTab: "culture",
      liverKidneyData: {}, // 从 maintainList 接口获取的数据
      bloodRoutineData: {}, // 从 maintainList 接口获取的数据
      liverKidneyData: {}, // 从 maintainList 接口获取的数据
      // 培养结果相关数据
      cultureList: [],
      cultureLoading: false,
      cultureTotal: 0,
      cultureQueryParams: {
        pageNum: 1,
        pageSize: 10
      },
      cultureDialogVisible: false,
      cultureDialogTitle: '',
      cultureDialogTitle: "",
      cultureSaveLoading: false,
      cultureForm: {
        id: undefined,
        cultureType: '',
        sampleTime: '',
        result: '阴性',
        bacteria: '',
        drugSensitivity: '',
        testingInstitution: '',
        specimenType: '',
        remarks: ''
        cultureType: "",
        sampleTime: "",
        result: "阴性",
        attachments: []
      },
      cultureRules: {
        cultureType: [{ required: true, message: '请选择培养类型', trigger: 'change' }],
        sampleTime: [{ required: true, message: '请选择采样时间', trigger: 'change' }],
        result: [{ required: true, message: '请选择培养结果', trigger: 'change' }]
        cultureType: [
          { required: true, message: "请选择培养类型", trigger: "change" }
        ],
        sampleTime: [
          { required: true, message: "请选择采样时间", trigger: "change" }
        ],
        result: [
          { required: true, message: "请选择培养结果", trigger: "change" }
        ]
      },
      cultureTypeOptions: [
        { value: '1', label: '血培养' },
        { value: '2', label: '痰培养' },
        { value: '3', label: '尿培养' },
        { value: '4', label: '伤口分泌物' },
        { value: '5', label: '脑脊液培养' },
        { value: '6', label: '其他' }
        { value: "1", label: "血培养" },
        { value: "2", label: "痰培养" },
        { value: "3", label: "尿培养" },
        { value: "4", label: "伤口分泌物" },
        { value: "5", label: "脑脊液培养" },
        { value: "6", label: "其他" }
      ],
      // 护理核查记录相关数据
      recordList: [],
      recordLoading: false,
      recordTotal: 0,
      recordQueryParams: {
        pageNum: 1,
        pageSize: 10
      },
      recordDialogVisible: false,
      recordDialogTitle: '',
      recordDialogTitle: "",
      recordSaveLoading: false,
      recordForm: {
        id: undefined,
        recordTime: '',
        recorder: '',
        temperature: 36.5,
        heartRate: 80,
        bloodPressure: '120/80',
        respirationRate: 18,
        oxygenSaturation: 98,
        urineOutput: 50,
        cvp: 8,
        remarks: ''
        recordTime: "",
        recorder: "",
        checkRecord: "",
        attachments: []
      },
      recordRules: {
        recordTime: [{ required: true, message: '请选择核查时间', trigger: 'change' }],
        recorder: [{ required: true, message: '请输入核查人', trigger: 'blur' }],
        temperature: [{ required: true, message: '请输入体温', trigger: 'blur' }]
        recordTime: [
          { required: true, message: "请选择核查时间", trigger: "change" }
        ],
        recorder: [
          { required: true, message: "请输入核查人", trigger: "blur" }
        ],
        checkRecord: [
          { required: true, message: "请输入核查记录", trigger: "blur" }
        ]
      },
      // 附件预览相关
      attachmentPreviewVisible: false,
      currentAttachmentList: [],
      attachmentPreviewTitle: "",
      // 评估数据存储
      assessmentData: {
        liverKidney: {},
        bloodRoutine: {},
        urineRoutine: {},
        cultureResults: [],
        nursingRecords: []
      }
    };
  },
 created() {
    const id = this.$route.query.id;
    this.isEdit = this.$route.query.edit === 'true';
    if (id) {
      this.getDetail(id);
      this.getCultureList();
      this.getRecordList();
  created() {
    this.loadMaintenanceData();
  },
  watch: {
    $route(to, from) {
      this.loadMaintenanceData();
    }
  },
  methods: {
     // 获取详情
    getDetail(id) {
      getMaintenanceDetail(id).then(response => {
        if (response.code === 200) {
          this.form = response.data;
    // 加载维护数据[1,3](@ref)
    async loadMaintenanceData() {
      try {
        this.cultureLoading = true;
        this.recordLoading = true;
        const { id, infoid } = this.$route.query;
        const queryParams = {};
        if (id) {
          queryParams.id = id;
          this.currentMaintenanceId = id;
          this.isEditMode = true;
        } else if (infoid) {
          queryParams.infoid = infoid;
          this.currentMaintenanceId = null;
          this.isEditMode = false;
        } else {
          this.$message.error("缺少必要的路由参数");
          return;
        }
      });
        const response = await maintainList(queryParams);
        if (response.code === 200) {
          let maintenanceData = response.data[0];
          // 处理数组响应
          if (Array.isArray(maintenanceData)) {
            maintenanceData = maintenanceData[0] || {};
          }
          // 解析itemDesc字段中的JSON数据[6,8](@ref)
          if (maintenanceData.itemDesc) {
            try {
              const itemDescData = JSON.parse(maintenanceData.itemDesc);
              this.assessmentData = { ...this.assessmentData, ...itemDescData };
              // 填充各个模块的数据
              if (itemDescData.cultureResults) {
                this.cultureList = itemDescData.cultureResults;
              }
              if (itemDescData.nursingRecords) {
                this.recordList = itemDescData.nursingRecords;
              }
              if (itemDescData.liverKidney) {
                this.assessmentData.liverKidney = itemDescData.liverKidney;
              }
              if (itemDescData.bloodRoutine) {
                this.assessmentData.bloodRoutine = itemDescData.bloodRoutine;
              }
              if (itemDescData.urineRoutine) {
                this.assessmentData.urineRoutine = itemDescData.urineRoutine;
              }
            } catch (error) {
              console.error("解析itemDesc JSON失败:", error);
            }
          }
          // 填充基础表单数据
          this.form = { ...this.form, ...maintenanceData };
          this.$message.success("数据加载成功");
        } else {
          this.$message.error("数据加载失败:" + (response.msg || "未知错误"));
        }
      } catch (error) {
        console.error("加载维护数据失败:", error);
        this.$message.error("数据加载失败");
      } finally {
        this.cultureLoading = false;
        this.recordLoading = false;
      }
    },
    // 保存所有数据[1,2](@ref)
    async handleSave() {
      try {
        // 构建保存数据
        const saveData = {
          ...this.form,
          itemDesc: JSON.stringify({
            liverKidney: this.assessmentData.liverKidney,
            bloodRoutine: this.assessmentData.bloodRoutine,
            urineRoutine: this.assessmentData.urineRoutine,
            cultureResults: this.cultureList,
            nursingRecords: this.recordList
          })
        };
        let response;
        if (this.isEditMode && this.currentMaintenanceId) {
          // 编辑模式,调用maintainedit接口[1](@ref)
          saveData.id = this.currentMaintenanceId;
          response = await maintainedit(saveData);
        } else {
          // 新增模式,调用maintainAdd接口[2](@ref)
          response = await maintainAdd(saveData);
        }
        if (response.code === 200) {
          this.$message.success("保存成功");
          this.isEdit = false;
          // 如果是新增保存,更新当前ID
          if (!this.isEditMode && response.data && response.data.id) {
            this.currentMaintenanceId = response.data.id;
            this.isEditMode = true;
          }
        } else {
          this.$message.error("保存失败:" + (response.msg || "未知错误"));
        }
      } catch (error) {
        console.error("保存数据失败:", error);
        this.$message.error("保存失败");
      }
    },
    // 切换编辑模式
    toggleEditMode() {
      this.isEdit = !this.isEdit;
      if (!this.isEdit) {
        this.handleSave();
      }
    },
    // 培养记录相关方法
    getCultureList() {
      this.cultureLoading = true;
      listCultureResults(this.form.id, this.cultureQueryParams).then(response => {
        if (response.code === 200) {
          this.cultureList = response.data.rows;
          this.cultureTotal = response.data.total;
        }
        this.cultureLoading = false;
      }).catch(() => {
        this.cultureLoading = false;
      });
    },
    handleAddCulture() {
      this.cultureDialogTitle = '新增培养记录';
      this.cultureDialogTitle = "新增培养记录";
      this.cultureForm = {
        id: undefined,
        cultureType: '',
        sampleTime: '',
        result: '阴性',
        bacteria: '',
        drugSensitivity: '',
        testingInstitution: '',
        specimenType: '',
        remarks: ''
        cultureType: "",
        sampleTime: "",
        result: "阴性",
        attachments: []
      };
      this.cultureDialogVisible = true;
      this.$nextTick(() => {
@@ -622,7 +791,7 @@
    },
    handleEditCulture(row) {
      this.cultureDialogTitle = '编辑培养记录';
      this.cultureDialogTitle = "编辑培养记录";
      this.cultureForm = { ...row };
      this.cultureDialogVisible = true;
      this.$nextTick(() => {
@@ -630,94 +799,59 @@
      });
    },
    handleViewCulture(row) {
      this.$alert(`
        <div>
          <p><strong>培养类型:</strong>${this.getCultureTypeLabel(row.cultureType)}</p>
          <p><strong>采样时间:</strong>${row.sampleTime}</p>
          <p><strong>培养结果:</strong>${row.result}</p>
          <p><strong>菌种:</strong>${row.bacteria || '无'}</p>
          <p><strong>药敏结果:</strong>${row.drugSensitivity || '无'}</p>
          <p><strong>检测机构:</strong>${row.testingInstitution}</p>
        </div>
      `, '培养记录详情', {
        dangerouslyUseHTMLString: true,
        customClass: 'detail-dialog'
      });
    },
    handleSaveCulture() {
      this.$refs.cultureForm.validate(valid => {
        if (valid) {
          this.cultureSaveLoading = true;
          const api = this.cultureForm.id ? updateCultureResult : addCultureResult;
          const requestData = {
            ...this.cultureForm,
            maintenanceId: this.form.id
          };
          api(requestData).then(response => {
            if (response.code === 200) {
              this.$message.success(this.cultureForm.id ? '修改成功' : '新增成功');
              this.cultureDialogVisible = false;
              this.getCultureList();
          if (this.cultureForm.id) {
            // 编辑现有记录
            const index = this.cultureList.findIndex(
              item => item.id === this.cultureForm.id
            );
            if (index !== -1) {
              this.cultureList.splice(index, 1, { ...this.cultureForm });
            }
            this.cultureSaveLoading = false;
          }).catch(() => {
            this.cultureSaveLoading = false;
          });
          } else {
            // 新增记录
            this.cultureForm.id = Date.now();
            this.cultureList.push({ ...this.cultureForm });
          }
          this.$message.success(this.cultureForm.id ? "修改成功" : "新增成功");
          this.cultureDialogVisible = false;
          this.cultureSaveLoading = false;
        }
      });
    },
    handleDeleteCulture(row) {
      this.$confirm('确定要删除这条培养记录吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteCultureResult(row.id).then(response => {
          if (response.code === 200) {
            this.$message.success('删除成功');
            this.getCultureList();
          }
        });
      }).catch(() => {});
      this.$confirm("确定要删除这条培养记录吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          this.cultureList = this.cultureList.filter(
            item => item.id !== row.id
          );
          this.$message.success("删除成功");
        })
        .catch(() => {});
    },
    getCultureTypeLabel(value) {
      const type = this.cultureTypeOptions.find(item => item.value === value);
      return type ? type.label : '未知';
    },
    // 护理核查记录相关方法
    getRecordList() {
      this.recordLoading = true;
      listNursingRecords(this.form.id, this.recordQueryParams).then(response => {
        if (response.code === 200) {
          this.recordList = response.data.rows;
          this.recordTotal = response.data.total;
        }
        this.recordLoading = false;
      }).catch(() => {
        this.recordLoading = false;
      });
    },
    // 护理记录相关方法
    handleAddRecord() {
      this.recordDialogTitle = '新增护理核查记录';
      this.recordDialogTitle = "新增护理核查记录";
      this.recordForm = {
        id: undefined,
        recordTime: new Date().toISOString().replace('T', ' ').substring(0, 19),
        recorder: '当前用户', // 实际项目中从用户信息获取
        temperature: 36.5,
        heartRate: 80,
        bloodPressure: '120/80',
        respirationRate: 18,
        oxygenSaturation: 98,
        urineOutput: 50,
        cvp: 8,
        remarks: ''
        recordTime: new Date()
          .toISOString()
          .replace("T", " ")
          .substring(0, 19),
        recorder: "当前用户",
        checkRecord: "",
        attachments: []
      };
      this.recordDialogVisible = true;
      this.$nextTick(() => {
@@ -726,7 +860,7 @@
    },
    handleEditRecord(row) {
      this.recordDialogTitle = '编辑护理核查记录';
      this.recordDialogTitle = "编辑护理核查记录";
      this.recordForm = { ...row };
      this.recordDialogVisible = true;
      this.$nextTick(() => {
@@ -734,77 +868,92 @@
      });
    },
    handleViewRecord(row) {
      this.$alert(`
        <div>
          <p><strong>核查时间:</strong>${row.recordTime}</p>
          <p><strong>核查人:</strong>${row.recorder}</p>
          <p><strong>生命体征:</strong></p>
          <ul>
            <li>体温:${row.temperature}℃</li>
            <li>心率:${row.heartRate}次/分</li>
            <li>血压:${row.bloodPressure}mmHg</li>
            <li>呼吸:${row.respirationRate}次/分</li>
            <li>血氧饱和度:${row.oxygenSaturation}%</li>
            <li>尿量:${row.urineOutput}ml/h</li>
          </ul>
          <p><strong>备注:</strong>${row.remarks || '无'}</p>
        </div>
      `, '护理核查记录详情', {
        dangerouslyUseHTMLString: true,
        customClass: 'detail-dialog'
      });
    },
    handleSaveRecord() {
      this.$refs.recordForm.validate(valid => {
        if (valid) {
          this.recordSaveLoading = true;
          const api = this.recordForm.id ? updateNursingRecord : addNursingRecord;
          const requestData = {
            ...this.recordForm,
            maintenanceId: this.form.id
          };
          api(requestData).then(response => {
            if (response.code === 200) {
              this.$message.success(this.recordForm.id ? '修改成功' : '新增成功');
              this.recordDialogVisible = false;
              this.getRecordList();
          if (this.recordForm.id) {
            // 编辑现有记录
            const index = this.recordList.findIndex(
              item => item.id === this.recordForm.id
            );
            if (index !== -1) {
              this.recordList.splice(index, 1, { ...this.recordForm });
            }
            this.recordSaveLoading = false;
          }).catch(() => {
            this.recordSaveLoading = false;
          });
          } else {
            // 新增记录
            this.recordForm.id = Date.now();
            this.recordList.push({ ...this.recordForm });
          }
          this.$message.success(this.recordForm.id ? "修改成功" : "新增成功");
          this.recordDialogVisible = false;
          this.recordSaveLoading = false;
        }
      });
    },
    handleDeleteRecord(row) {
      this.$confirm('确定要删除这条护理核查记录吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteNursingRecord(row.id).then(response => {
          if (response.code === 200) {
            this.$message.success('删除成功');
            this.getRecordList();
          }
        });
      }).catch(() => {});
      this.$confirm("确定要删除这条护理核查记录吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          this.recordList = this.recordList.filter(item => item.id !== row.id);
          this.$message.success("删除成功");
        })
        .catch(() => {});
    },
    // 保存基本信息
    handleSave() {
      this.$refs.form.validate(valid => {
        if (valid) {
          updateMaintenance(this.form).then(response => {
            if (response.code === 200) {
              this.$message.success("保存成功");
              this.isEdit = false;
            }
          });
    // 附件相关方法
    handleCultureAttachmentChange(fileList) {
      this.cultureForm.attachments = fileList;
    },
    handleRecordAttachmentChange(fileList) {
      this.recordForm.attachments = fileList;
    },
    handleViewCultureAttachments(row) {
      this.currentAttachmentList = row.attachments || [];
      this.attachmentPreviewTitle = `培养记录附件 - ${row.cultureType}`;
      this.attachmentPreviewVisible = true;
    },
    handleViewRecordAttachments(row) {
      this.currentAttachmentList = row.attachments || [];
      this.attachmentPreviewTitle = `护理核查记录附件 - ${row.recorder}`;
      this.attachmentPreviewVisible = true;
    },
    // 评估数据变更处理
    handleLiverKidneyDataChange(data) {
      this.assessmentData.liverKidney = data;
    },
    handleBloodRoutineDataChange(data) {
      this.assessmentData.bloodRoutine = data;
    },
    handleUrineRoutineDataChange(data) {
      this.assessmentData.urineRoutine = data;
    },
    handleTabClick(tab) {
      this.$nextTick(() => {
        let tableRef = null;
        if (tab.name === "liverKidney") {
          tableRef = this.$refs.liverKidney;
        } else if (tab.name === "bloodRoutine") {
          tableRef = this.$refs.bloodRoutine;
        } else if (tab.name === "urineRoutine") {
          tableRef = this.$refs.urineRoutine;
        }
        if (tableRef && tableRef.doLayout) {
          tableRef.doLayout();
        }
      });
    }
@@ -821,7 +970,7 @@
  margin-bottom: 20px;
}
.culture-card {
.assessment-card {
  margin-bottom: 20px;
}
@@ -832,47 +981,14 @@
.detail-title {
  font-size: 16px;
  font-weight: bold;
}
.maintenance-detail {
  padding: 20px;
}
.detail-card {
  margin-bottom: 20px;
  margin-right: 20px;
}
.culture-card {
  margin-bottom: 20px;
}
.record-card {
  margin-bottom: 20px;
}
.detail-title {
  font-size: 16px;
  font-weight: bold;
}
.fixed-width .el-button {
  margin: 0 2px;
}
/* 详情对话框样式 */
:deep(.detail-dialog) {
  width: 500px;
}
:deep(.detail-dialog .el-message-box__content) {
  line-height: 1.8;
}
:deep(.detail-dialog ul) {
  margin: 10px 0;
  padding-left: 20px;
}
:deep(.detail-dialog li) {
  margin-bottom: 5px;
}
</style>