WXL
2025-12-28 40bd04c1299a0edf63771b90b5f9e78bfb943474
src/views/business/maintain/maintainInfo.vue
@@ -28,7 +28,11 @@
          </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.gender"
                :disabled="!isEdit"
                style="width: 100%"
              >
                <el-option label="男" value="0" />
                <el-option label="女" value="1" />
              </el-select>
@@ -57,7 +61,11 @@
        <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-select
                v-model="form.patientStatus"
                :disabled="!isEdit"
                style="width: 100%"
              >
                <el-option label="DCD" value="1" />
                <el-option label="DBD" value="2" />
                <el-option label="DBCD" value="3" />
@@ -67,7 +75,11 @@
            </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.patientStatus === '5'"
            >
              <el-input
                v-model="form.incompleteReason"
                :readonly="!isEdit"
@@ -110,7 +122,11 @@
        <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-select
                v-model="form.bloodType"
                :disabled="!isEdit"
                style="width: 100%"
              >
                <el-option label="A型" value="A" />
                <el-option label="B型" value="B" />
                <el-option label="O型" value="O" />
@@ -120,7 +136,11 @@
          </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-select
                v-model="form.rhFactor"
                :disabled="!isEdit"
                style="width: 100%"
              >
                <el-option label="阳性" value="positive" />
                <el-option label="阴性" value="negative" />
              </el-select>
@@ -139,9 +159,22 @@
        </el-form-item>
      </el-form>
    </el-card>
    <el-card class="assessment-card">
      <div slot="header" class="clearfix">
        <span class="detail-title">供者评估各项记录</span>
        <el-button
          type="primary"
          size="mini"
          @click="toggleEditMode"
          style="float: right;"
        >
          {{ isEdit ? "完成编辑" : "开始编辑" }}
        </el-button>
      </div>
      <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>
@@ -156,48 +189,75 @@
      </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
                label="培养类型"
                align="center"
                prop="cultureType"
              >
                <!-- <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">
              <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">
                  <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">
              <!-- 附件列 -->
              <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
                  >
            <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>
                    >删除</el-button
                  >
          </template>
        </el-table-column>
      </el-table>
      <!-- 分页组件 -->
      <pagination
        v-show="cultureTotal > 0"
        :total="cultureTotal"
@@ -206,8 +266,39 @@
        @pagination="getCultureList"
      />
    </el-card>
        </el-tab-pane>
    <!-- 护理核查记录 -->
        <!-- 肝功能肾功能 -->
        <el-tab-pane label="肝功能肾功能" name="liverKidney">
          <liver-kidney-panel
            ref="liverKidney"
            :is-editing="isEdit && activeTab === 'liverKidney'"
            @data-change="handleLiverKidneyDataChange"
          />
        </el-tab-pane>
        <!-- 血常规 -->
        <el-tab-pane label="血常规" name="bloodRoutine">
          <blood-routine-panel
            ref="bloodRoutine"
            :is-editing="isEdit && activeTab === 'bloodRoutine'"
            @data-change="handleBloodRoutineDataChange"
          />
        </el-tab-pane>
        <!-- 尿常规 -->
        <el-tab-pane label="尿常规" name="urineRoutine">
          <urine-routine-panel
            ref="urineRoutine"
            :is-editing="isEdit && activeTab === 'urineRoutine'"
            @data-change="handleUrineRoutineDataChange"
          />
        </el-tab-pane>
      </el-tabs>
    </el-card>
    <!-- 培养结果记录 -->
    <!-- 简化后的护理核查记录 -->
    <el-card class="record-card">
      <div slot="header" class="clearfix">
        <span class="detail-title">护理核查记录</span>
@@ -222,40 +313,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"
        >
            <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>
          </template>
            >删除</el-button
          >
        </el-table-column>
      </el-table>
      <!-- 分页组件 -->
      <pagination
        v-show="recordTotal > 0"
        :total="recordTotal"
@@ -264,7 +378,6 @@
        @pagination="getRecordList"
      />
    </el-card>
    <!-- 培养记录编辑对话框 -->
    <el-dialog
      :title="cultureDialogTitle"
@@ -272,16 +385,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 +424,35 @@
        <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 +460,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,203 +483,374 @@
          </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 {
  listCultureResults,
  addCultureResult,
  updateCultureResult,
  deleteCultureResult
} from "./mockMaintenanceApi";
import {
  listNursingRecords,
  addNursingRecord,
  updateNursingRecord,
  deleteNursingRecord
} from "./mockMaintenanceApi";
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 },
  components: {
    Pagination,
    UploadAttachment,
    AttachmentPreview,
    LiverKidneyPanel,
    BloodRoutinePanel,
    UrineRoutinePanel
  },
  data() {
    return {
      isEdit: false,
      isEdit: true,
      form: {
        id: undefined,
        caseNo: '',
        donorName: '',
        gender: '',
        age: '',
        diagnosis: '',
        hospitalName: '',
        patientStatus: '1',
        admissionTime: '',
        dischargeTime: '',
        coordinator: '',
        bloodType: '',
        rhFactor: '',
        specialMedicalHistory: '',
        incompleteReason: ''
        caseNo: "",
        donorName: "",
        gender: "",
        age: "",
        diagnosis: "",
        hospitalName: "",
        patientStatus: "1",
        admissionTime: "",
        dischargeTime: "",
        coordinator: "",
        bloodType: "",
        rhFactor: "",
        specialMedicalHistory: "",
        incompleteReason: ""
      },
      activeTab: "culture",
      // 培养结果相关数据
      // 培养结果相关数据
      cultureList: [
        {
          id: 1,
          cultureType: "血培养",
          sampleTime: "2024-12-19 10:30:00",
          result: "阴性",
          bacteria: "",
          drugSensitivity: "",
          testingInstitution: "北京医学检验中心",
          specimenType: "血液",
          remarks: "常规检测",
          attachments: [
            {
              id: 1,
              fileName: "血培养报告.pdf",
              fileUrl:
                "http://localhost:8080/profile/upload/2025/12/27/1.COPO供体评估表.pdf",
              fileSize: 1024000,
              uploadTime: "2024-12-19 11:00:00"
            }
          ]
        },
        {
          id: 3,
          cultureType: "血培养",
          sampleTime: "2024-12-20 09:15:00",
          result: "阴性",
          bacteria: "",
          drugSensitivity: "",
          testingInstitution: "广州检测中心",
          specimenType: "尿液",
          remarks: "清洁中段尿标本",
          attachments: []
        },
        {
          id: 2,
          cultureType: "痰培养结果",
          sampleTime: "2024-12-19 14:20:00",
          result: "阳性",
          bacteria: "金黄色葡萄球菌",
          drugSensitivity: "对青霉素敏感,对头孢类中介",
          testingInstitution: "上海医学检验所",
          specimenType: "痰液",
          remarks: "药敏试验完成",
          attachments: [
            {
              id: 2,
              fileName: "痰培养结果.jpg",
              fileUrl:
                "https://img95.699pic.com/photo/40142/8262.jpg_wh860.jpg",
              fileSize: 512000,
              uploadTime: "2024-12-19 15:30:00"
            },
            {
              id: 3,
              fileName: "药敏报告.pdf",
              fileUrl:
                "http://localhost:8080/profile/upload/2025/12/27/(吴龙8.7)每日工作总结.pdf",
              fileSize: 768000,
              uploadTime: "2024-12-19 16:00:00"
            }
          ]
      },
      // 培养结果相关数据
      cultureList: [],
        {
          id: 4,
          cultureType: "真菌培养",
          sampleTime: "2024-12-20 11:45:00",
          result: "阳性",
          bacteria: "大肠杆菌",
          drugSensitivity: "对左氧氟沙星敏感",
          testingInstitution: "深圳人民医院",
          specimenType: "伤口分泌物",
          remarks: "术后伤口感染监测",
          attachments: [
            {
              id: 4,
              fileName: "真菌培养.pdf",
              fileUrl: "/reports/culture4.pdf",
              fileSize: 890000,
              uploadTime: "2024-12-20 13:20:00"
            }
          ]
        }
      ],
      cultureLoading: false,
      cultureTotal: 0,
      cultureTotal: 5,
      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: [],
      recordList: [
        {
          id: 1,
          recordTime: "2024-12-19 08:30:00",
          recorder: "张护士",
          temperature: 36.8,
          heartRate: 78,
          bloodPressure: "120/80",
          respirationRate: 18,
          oxygenSaturation: 98,
          urineOutput: 60,
          cvp: 8,
          checkRecord: "患者生命体征平稳,意识清楚,配合治疗",
          remarks: "夜间睡眠良好",
          attachments: [
            {
              id: 1,
              fileName: "早班护理记录.jpg",
              fileUrl: "/records/nursing1.jpg",
              fileSize: 1024000,
              uploadTime: "2024-12-19 09:00:00"
            }
          ]
        },
        {
          id: 2,
          recordTime: "2024-12-19 14:30:00",
          recorder: "李护士",
          temperature: 37.2,
          heartRate: 82,
          bloodPressure: "118/76",
          respirationRate: 16,
          oxygenSaturation: 97,
          urineOutput: 45,
          cvp: 7.5,
          checkRecord: "患者午后体温略有升高,观察中",
          remarks: "建议增加水分摄入",
          attachments: []
        },
        {
          id: 3,
          recordTime: "2024-12-19 20:30:00",
          recorder: "王护士",
          temperature: 36.9,
          heartRate: 75,
          bloodPressure: "122/78",
          respirationRate: 17,
          oxygenSaturation: 98,
          urineOutput: 55,
          cvp: 8.2,
          checkRecord: "晚间生命体征稳定,患者休息良好",
          remarks: "夜间监测无异常",
          attachments: [
            {
              id: 2,
              fileName: "晚班护理记录.pdf",
              fileUrl: "/records/nursing3.pdf",
              fileSize: 890000,
              uploadTime: "2024-12-19 21:00:00"
            },
            {
              id: 3,
              fileName: "体征监测表.xlsx",
              fileUrl: "/records/monitoring3.xlsx",
              fileSize: 256000,
              uploadTime: "2024-12-19 21:15:00"
            }
          ]
        },
        {
          id: 4,
          recordTime: "2024-12-20 08:30:00",
          recorder: "赵护士",
          temperature: 36.7,
          heartRate: 80,
          bloodPressure: "119/77",
          respirationRate: 18,
          oxygenSaturation: 99,
          urineOutput: 65,
          cvp: 7.8,
          checkRecord: "晨间生命体征正常,患者精神状态良好",
          remarks: "准备今日检查",
          attachments: []
        },
        {
          id: 5,
          recordTime: "2024-12-20 12:30:00",
          recorder: "刘护士",
          temperature: 37.1,
          heartRate: 85,
          bloodPressure: "121/79",
          respirationRate: 19,
          oxygenSaturation: 96,
          urineOutput: 40,
          cvp: 8.5,
          checkRecord: "午间体温略有波动,继续观察",
          remarks: "已通知医生",
          attachments: [
            {
              id: 4,
              fileName: "午间护理记录.jpg",
              fileUrl: "/records/nursing5.jpg",
              fileSize: 765000,
              uploadTime: "2024-12-20 13:00:00"
            }
          ]
        }
      ],
      recordLoading: false,
      recordTotal: 0,
      recordTotal: 4,
      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: ""
    };
  },
 created() {
    const id = this.$route.query.id;
    this.isEdit = this.$route.query.edit === 'true';
    // this.isEdit = this.$route.query.edit === "true";
    if (id) {
      this.getDetail(id);
      this.getCultureList();
@@ -587,33 +866,78 @@
        }
      });
    },
    // 培养记录附件变更
    handleCultureAttachmentChange(fileList) {
      this.cultureForm.attachments = fileList;
    },
    // 护理记录附件变更
    handleRecordAttachmentChange(fileList) {
      this.recordForm.attachments = fileList;
    },
    // 查看培养记录附件
    handleViewCultureAttachments(row) {
      console.log(22, row.attachments);
      this.currentAttachmentList = row.attachments || [];
      this.attachmentPreviewTitle = `培养记录附件 - ${row.cultureType}`;
      this.attachmentPreviewVisible = true;
    },
    handleTabClick(tab) {
      this.$nextTick(() => {
        console.log(tab.name, 88);
        const tableRef=null;
        if (tab.name == "liverKidney") {
           tableRef = this.$refs.liverKidney; // 请替换为您的表格 ref
        } else if (tab.name == "bloodRoutine") {
           tableRef = this.$refs.bloodRoutine; // 请替换为您的表格 ref
        } else if (tab.name == "bloodRoutine") {
           tableRef = this.$refs.bloodRoutine; // 请替换为您的表格 ref
        }
        // 如果是 el-table,尝试调用其 doLayout 方法
        if (tableRef && tableRef.doLayout) {
          tableRef.doLayout();
        }
        // 或者,更通用的强制重新渲染方式
        this.$forceUpdate(); // 慎用,可能引发其他问题[1](@ref)
      });
    },
    // 查看护理记录附件
    handleViewRecordAttachments(row) {
      this.currentAttachmentList = row.attachments || [];
      this.attachmentPreviewTitle = `护理核查记录附件 - ${row.recorder}`;
      this.attachmentPreviewVisible = true;
    },
    // 培养记录相关方法
    getCultureList() {
      this.cultureLoading = true;
      listCultureResults(this.form.id, this.cultureQueryParams).then(response => {
      listCultureResults(this.form.id, this.cultureQueryParams)
        .then(response => {
        if (response.code === 200) {
          this.cultureList = response.data.rows;
          this.cultureTotal = response.data.total;
            // this.cultureList = response.data.rows;
            // this.cultureTotal = response.data.total;
        }
        this.cultureLoading = false;
      }).catch(() => {
        })
        .catch(() => {
        this.cultureLoading = false;
      });
    },
    handleAddCulture() {
      this.cultureDialogTitle = '新增培养记录';
      this.cultureDialogTitle = "新增培养记录";
      this.cultureForm = {
        id: undefined,
        cultureType: '',
        sampleTime: '',
        result: '阴性',
        bacteria: '',
        drugSensitivity: '',
        testingInstitution: '',
        specimenType: '',
        remarks: ''
        cultureType: "",
        sampleTime: "",
        result: "阴性",
        bacteria: "",
        drugSensitivity: "",
        testingInstitution: "",
        specimenType: "",
        remarks: ""
      };
      this.cultureDialogVisible = true;
      this.$nextTick(() => {
@@ -622,7 +946,7 @@
    },
    handleEditCulture(row) {
      this.cultureDialogTitle = '编辑培养记录';
      this.cultureDialogTitle = "编辑培养记录";
      this.cultureForm = { ...row };
      this.cultureDialogVisible = true;
      this.$nextTick(() => {
@@ -631,39 +955,67 @@
    },
    handleViewCulture(row) {
      this.$alert(`
      this.$alert(
        `
        <div>
          <p><strong>培养类型:</strong>${this.getCultureTypeLabel(row.cultureType)}</p>
          <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'
      });
          customClass: "detail-dialog"
        }
      );
    },
    toggleEditMode() {
      this.isEdit = !this.isEdit;
      // if (!this.isEdit) {
      //   this.saveAllData();
      // }
    },
    handleLiverKidneyDataChange(data) {
      console.log("肝功能肾功能数据变更:", data);
      // 处理数据保存或临时存储
    },
    handleBloodRoutineDataChange(data) {
      console.log("血常规功能数据变更:", data);
      // 处理数据保存或临时存储
    },
    handleUrineRoutineDataChange(data) {
      console.log("尿常规功能数据变更:", data);
      // 处理数据保存或临时存储
    },
    // 保存培养记录
    handleSaveCulture() {
      this.$refs.cultureForm.validate(valid => {
        if (valid) {
          this.cultureSaveLoading = true;
          const api = this.cultureForm.id ? updateCultureResult : addCultureResult;
          const api = this.cultureForm.id
            ? updateCultureResult
            : addCultureResult;
          const requestData = {
            ...this.cultureForm,
            maintenanceId: this.form.id
          };
          api(requestData).then(response => {
          api(requestData)
            .then(response => {
            if (response.code === 200) {
              this.$message.success(this.cultureForm.id ? '修改成功' : '新增成功');
                this.$message.success(
                  this.cultureForm.id ? "修改成功" : "新增成功"
                );
              this.cultureDialogVisible = false;
              this.getCultureList();
            }
            this.cultureSaveLoading = false;
          }).catch(() => {
            })
            .catch(() => {
            this.cultureSaveLoading = false;
          });
        }
@@ -671,53 +1023,60 @@
    },
    handleDeleteCulture(row) {
      this.$confirm('确定要删除这条培养记录吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
      this.$confirm("确定要删除这条培养记录吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
        deleteCultureResult(row.id).then(response => {
          if (response.code === 200) {
            this.$message.success('删除成功');
              this.$message.success("删除成功");
            this.getCultureList();
          }
        });
      }).catch(() => {});
        })
        .catch(() => {});
    },
    getCultureTypeLabel(value) {
      const type = this.cultureTypeOptions.find(item => item.value === value);
      return type ? type.label : '未知';
      return type ? type.label : "未知";
    },
    // 护理核查记录相关方法
    getRecordList() {
      this.recordLoading = true;
      listNursingRecords(this.form.id, this.recordQueryParams).then(response => {
      listNursingRecords(this.form.id, this.recordQueryParams)
        .then(response => {
        if (response.code === 200) {
          this.recordList = response.data.rows;
          this.recordTotal = response.data.total;
            // this.recordList = response.data.rows;
            // this.recordTotal = response.data.total;
        }
        this.recordLoading = false;
      }).catch(() => {
        })
        .catch(() => {
        this.recordLoading = false;
      });
    },
    handleAddRecord() {
      this.recordDialogTitle = '新增护理核查记录';
      this.recordDialogTitle = "新增护理核查记录";
      this.recordForm = {
        id: undefined,
        recordTime: new Date().toISOString().replace('T', ' ').substring(0, 19),
        recorder: '当前用户', // 实际项目中从用户信息获取
        recordTime: new Date()
          .toISOString()
          .replace("T", " ")
          .substring(0, 19),
        recorder: "当前用户", // 实际项目中从用户信息获取
        temperature: 36.5,
        heartRate: 80,
        bloodPressure: '120/80',
        bloodPressure: "120/80",
        respirationRate: 18,
        oxygenSaturation: 98,
        urineOutput: 50,
        cvp: 8,
        remarks: ''
        remarks: ""
      };
      this.recordDialogVisible = true;
      this.$nextTick(() => {
@@ -726,7 +1085,7 @@
    },
    handleEditRecord(row) {
      this.recordDialogTitle = '编辑护理核查记录';
      this.recordDialogTitle = "编辑护理核查记录";
      this.recordForm = { ...row };
      this.recordDialogVisible = true;
      this.$nextTick(() => {
@@ -735,7 +1094,8 @@
    },
    handleViewRecord(row) {
      this.$alert(`
      this.$alert(
        `
        <div>
          <p><strong>核查时间:</strong>${row.recordTime}</p>
          <p><strong>核查人:</strong>${row.recorder}</p>
@@ -748,32 +1108,41 @@
            <li>血氧饱和度:${row.oxygenSaturation}%</li>
            <li>尿量:${row.urineOutput}ml/h</li>
          </ul>
          <p><strong>备注:</strong>${row.remarks || '无'}</p>
          <p><strong>备注:</strong>${row.remarks || "无"}</p>
        </div>
      `, '护理核查记录详情', {
      `,
        "护理核查记录详情",
        {
        dangerouslyUseHTMLString: true,
        customClass: 'detail-dialog'
      });
          customClass: "detail-dialog"
        }
      );
    },
    handleSaveRecord() {
      this.$refs.recordForm.validate(valid => {
        if (valid) {
          this.recordSaveLoading = true;
          const api = this.recordForm.id ? updateNursingRecord : addNursingRecord;
          const api = this.recordForm.id
            ? updateNursingRecord
            : addNursingRecord;
          const requestData = {
            ...this.recordForm,
            maintenanceId: this.form.id
          };
          api(requestData).then(response => {
          api(requestData)
            .then(response => {
            if (response.code === 200) {
              this.$message.success(this.recordForm.id ? '修改成功' : '新增成功');
                this.$message.success(
                  this.recordForm.id ? "修改成功" : "新增成功"
                );
              this.recordDialogVisible = false;
              this.getRecordList();
            }
            this.recordSaveLoading = false;
          }).catch(() => {
            })
            .catch(() => {
            this.recordSaveLoading = false;
          });
        }
@@ -781,18 +1150,20 @@
    },
    handleDeleteRecord(row) {
      this.$confirm('确定要删除这条护理核查记录吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
      this.$confirm("确定要删除这条护理核查记录吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
        deleteNursingRecord(row.id).then(response => {
          if (response.code === 200) {
            this.$message.success('删除成功');
              this.$message.success("删除成功");
            this.getRecordList();
          }
        });
      }).catch(() => {});
        })
        .catch(() => {});
    },
    // 保存基本信息
@@ -853,7 +1224,41 @@
  font-size: 16px;
  font-weight: bold;
}
.medical-panel {
  padding: 20px;
}
.attachment-section {
  margin-top: 20px;
  padding: 15px;
  border: 1px solid #ebeef5;
  border-radius: 4px;
}
.attachment-title {
  font-weight: bold;
  margin-bottom: 10px;
  color: #409eff;
}
.required-item::before {
  content: "*";
  color: #f56c6c;
  margin-right: 4px;
}
.assessment-card {
  margin-bottom: 20px;
}
.medical-table {
  width: 100%;
  margin-bottom: 20px;
}
.dynamic-column {
  min-width: 120px;
}
.fixed-width .el-button {
  margin: 0 2px;
}