WXL
17 小时以前 9b2c74ee4f08fad01c2a16bc6e36df073bfa1dd5
src/views/business/maintain/maintainInfo.vue
@@ -1,7 +1,8 @@
<template>
  <div class="maintenance-detail">
    <case-basic-info :case-id="caseId" :show-attachment="true" />
    <!-- 基础信息 -->
    <el-card class="detail-card">
    <!-- <el-card class="detail-card">
      <div slot="header" class="clearfix">
        <span class="detail-title">供者基本信息</span>
        <el-button type="success" style="float: right;" @click="handleSave">
@@ -53,11 +54,6 @@
          <el-col :span="8">
            <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
                  v-for="dict in dict.type.sys_DonationCategory || []"
                  :key="dict.value"
@@ -66,20 +62,6 @@
                ></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
@@ -127,10 +109,6 @@
          <el-col :span="8">
            <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
                  v-for="dict in dict.type.sys_BloodType"
                  :key="dict.value"
@@ -163,11 +141,11 @@
          />
        </el-form-item>
      </el-form>
    </el-card>
    </el-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"
@@ -257,6 +235,82 @@
            </el-table>
          </el-card>
        </el-tab-pane>
        <el-tab-pane label="护理核查记录" name="hlihc">
          <el-card class="record-card">
            <div slot="header" class="clearfix">
              <span class="detail-title">护理核查记录</span>
              <el-button
                type="primary"
                size="mini"
                icon="el-icon-plus"
                @click="handleAddRecord"
              >
                新增核查记录
              </el-button>
            </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="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
                    size="mini"
                    type="text"
                    icon="el-icon-delete"
                    style="color: #F56C6C;"
                    @click="handleDeleteRecord(scope.row)"
                    >删除</el-button
                  >
                </template>
              </el-table-column>
            </el-table>
          </el-card>
        </el-tab-pane>
        <!-- 肝功能肾功能 -->
        <el-tab-pane label="肝功能肾功能" name="liverKidney">
@@ -291,78 +345,6 @@
    </el-card>
    <!-- 护理核查记录 -->
    <el-card class="record-card">
      <div slot="header" class="clearfix">
        <span class="detail-title">护理核查记录</span>
        <el-button
          type="primary"
          size="mini"
          icon="el-icon-plus"
          @click="handleAddRecord"
        >
          新增核查记录
        </el-button>
      </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="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
              size="mini"
              type="text"
              icon="el-icon-delete"
              style="color: #F56C6C;"
              @click="handleDeleteRecord(scope.row)"
              >删除</el-button
            >
          </template>
        </el-table-column>
      </el-table>
    </el-card>
    <!-- 培养记录编辑对话框 -->
    <el-dialog
@@ -423,9 +405,16 @@
        </el-row>
        <el-form-item label="附件">
          <upload-attachment
            :file-list="cultureForm.attachments"
          <UploadAttachment
            ref="cultureUploadAttachment"
            :file-list="cultureFileList"
            :limit="10"
            :accept="attachmentAccept"
            :multiple="true"
            @change="handleCultureAttachmentChange"
            @upload-success="handleCultureUploadSuccess"
            @upload-error="handleCultureUploadError"
            @remove="handleCultureAttachmentRemove"
          />
        </el-form-item>
      </el-form>
@@ -486,9 +475,16 @@
        </el-form-item>
        <el-form-item label="附件">
          <upload-attachment
            :file-list="recordForm.attachments"
          <UploadAttachment
            ref="recordUploadAttachment"
            :file-list="recordFileList"
            :limit="10"
            :accept="attachmentAccept"
            :multiple="true"
            @change="handleRecordAttachmentChange"
            @upload-success="handleRecordUploadSuccess"
            @upload-error="handleRecordUploadError"
            @remove="handleRecordAttachmentRemove"
          />
        </el-form-item>
      </el-form>
@@ -505,11 +501,67 @@
    </el-dialog>
    <!-- 附件预览对话框 -->
    <attachment-preview
      :visible="attachmentPreviewVisible"
      :file-list="currentAttachmentList"
    <el-dialog
      :title="attachmentPreviewTitle"
      @close="attachmentPreviewVisible = false"
      :visible.sync="attachmentPreviewVisible"
      width="900px"
      @close="handleAttachmentPreviewClose"
    >
      <el-table :data="currentAttachmentList" style="width: 100%" size="small">
        <el-table-column label="文件名" min-width="200">
          <template slot-scope="scope">
            <i
              class="el-icon-document"
              :style="{ color: getFileIconColor(scope.row.fileName) }"
            ></i>
            <span class="file-name">{{ scope.row.fileName }}</span>
          </template>
        </el-table-column>
        <el-table-column label="文件类型" width="100">
          <template slot-scope="scope">
            <el-tag :type="getFileTagType(scope.row.fileName)" size="small">
              {{ getFileTypeText(scope.row.fileName) }}
            </el-tag>
          </template>
        </el-table-column>
        <el-table-column label="上传时间" width="160">
          <template slot-scope="scope">
            <span>{{ formatDateTime(scope.row.uploadTime) }}</span>
          </template>
        </el-table-column>
        <el-table-column label="文件大小" width="100">
          <template slot-scope="scope">
            <span>{{ formatFileSize(scope.row.fileSize) }}</span>
          </template>
        </el-table-column>
        <el-table-column label="操作" width="150" fixed="right">
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="primary"
              @click="handlePreviewAttachment(scope.row)"
              :disabled="!isPreviewable(scope.row.fileName)"
            >
              预览
            </el-button>
            <el-button
              size="mini"
              type="success"
              @click="handleDownloadAttachment(scope.row)"
            >
              下载
            </el-button>
          </template>
        </el-table-column>
      </el-table>
    </el-dialog>
    <!-- 文件预览弹窗 -->
    <FilePreviewDialog
      :visible="filePreviewVisible"
      :file="currentPreviewFile"
      @close="filePreviewVisible = false"
      @download="handleDownloadAttachment"
    />
  </div>
</template>
@@ -518,20 +570,24 @@
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";
import FilePreviewDialog from "@/components/FilePreviewDialog";
import LiverKidneyPanel from "@/components/MaintainComponents/LiverKidneyPanel.vue";
import BloodRoutinePanel from "@/components/MaintainComponents/BloodRoutinePanel.vue";
import UrineRoutinePanel from "@/components/MaintainComponents/UrineRoutinePanel.vue";
import CaseBasicInfo from "@/components/CaseBasicInfo";
import store from "@/store";
import dayjs from "dayjs";
export default {
  name: "MaintenanceDetail",
  components: {
    Pagination,
    UploadAttachment,
    AttachmentPreview,
    FilePreviewDialog,
    LiverKidneyPanel,
    BloodRoutinePanel,
    UrineRoutinePanel
    UrineRoutinePanel,
    CaseBasicInfo
  },
  dicts: [
    "sys_donornode",
@@ -544,7 +600,8 @@
  data() {
    return {
      isEdit: false,
      caseId: null,
      isEdit: true,
      currentMaintenanceId: null,
      isEditMode: false,
      form: {
@@ -565,9 +622,8 @@
        incompleteReason: ""
      },
      activeTab: "culture",
      liverKidneyData: {}, // 从 maintainList 接口获取的数据
      bloodRoutineData: {}, // 从 maintainList 接口获取的数据
      liverKidneyData: {}, // 从 maintainList 接口获取的数据
      extracontentinfo: {},
      // 培养结果相关数据
      cultureList: [],
      cultureLoading: false,
@@ -581,6 +637,7 @@
        result: "阴性",
        attachments: []
      },
      cultureFileList: [],
      cultureRules: {
        cultureType: [
          { required: true, message: "请选择培养类型", trigger: "change" }
@@ -614,6 +671,7 @@
        checkRecord: "",
        attachments: []
      },
      recordFileList: [],
      recordRules: {
        recordTime: [
          { required: true, message: "请选择核查时间", trigger: "change" }
@@ -631,6 +689,15 @@
      currentAttachmentList: [],
      attachmentPreviewTitle: "",
      // 文件预览相关
      filePreviewVisible: false,
      currentPreviewFile: null,
      // 附件相关配置
      attachmentLimit: 10,
      attachmentAccept:
        ".pdf,.jpg,.jpeg,.png,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt",
      // 评估数据存储
      assessmentData: {
        liverKidney: {},
@@ -642,6 +709,8 @@
    };
  },
  created() {
    this.caseId = this.$route.query.infoid;
    this.loadMaintenanceData();
  },
  watch: {
@@ -650,7 +719,7 @@
    }
  },
  methods: {
    // 加载维护数据[1,3](@ref)
    // 加载维护数据
    async loadMaintenanceData() {
      try {
        this.cultureLoading = true;
@@ -660,7 +729,7 @@
        const queryParams = {};
        if (id) {
          queryParams.id = id;
          queryParams.infoid = infoid;
          this.currentMaintenanceId = id;
          this.isEditMode = true;
        } else if (infoid) {
@@ -672,22 +741,26 @@
          return;
        }
        queryParams.infoid = infoid;
        const response = await maintainList(queryParams);
        if (response.code === 200) {
          let maintenanceData = response.data[0];
          // 处理数组响应
          if (Array.isArray(maintenanceData)) {
            maintenanceData = maintenanceData[0] || {};
          }
          if (maintenanceData.extracontent) {
            this.extracontentinfo = JSON.parse(maintenanceData.extracontent);
            if (this.extracontentinfo.specialMedicalHistory) {
              this.form.specialMedicalHistory = this.extracontentinfo.specialMedicalHistory;
            }
          }
          // 解析itemDesc字段中的JSON数据[6,8](@ref)
          if (maintenanceData.itemDesc) {
            try {
              const itemDescData = JSON.parse(maintenanceData.itemDesc);
              const itemDescData = maintenanceData.itemDesc;
              this.assessmentData = { ...this.assessmentData, ...itemDescData };
              // 填充各个模块的数据
              if (itemDescData.cultureResults) {
                this.cultureList = itemDescData.cultureResults;
              }
@@ -708,7 +781,6 @@
            }
          }
          // 填充基础表单数据
          this.form = { ...this.form, ...maintenanceData };
          this.$message.success("数据加载成功");
        } else {
@@ -723,36 +795,38 @@
      }
    },
    // 保存所有数据[1,2](@ref)
    // 保存所有数据
    async handleSave() {
      try {
        // 构建保存数据
        const saveData = {
          ...this.form,
          itemDesc: JSON.stringify({
          itemDesc: {
            liverKidney: this.assessmentData.liverKidney,
            bloodRoutine: this.assessmentData.bloodRoutine,
            urineRoutine: this.assessmentData.urineRoutine,
            cultureResults: this.cultureList,
            nursingRecords: this.recordList
          })
          }
        };
        this.extracontentinfo.specialMedicalHistory = this.form.specialMedicalHistory;
        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.currentMaintenanceId) {
            this.currentMaintenanceId = response.data;
          }
          // this.donatebaseinfoEdit({
          //   id: this.$route.query.infoid,
          //   extracontent: JSON.stringify(this.extracontentinfo)
          // });
          if (!this.isEditMode && response.data && response.data.id) {
            this.currentMaintenanceId = response.data.id;
            this.isEditMode = true;
@@ -784,6 +858,7 @@
        result: "阴性",
        attachments: []
      };
      this.cultureFileList = [];
      this.cultureDialogVisible = true;
      this.$nextTick(() => {
        this.$refs.cultureForm && this.$refs.cultureForm.clearValidate();
@@ -793,6 +868,16 @@
    handleEditCulture(row) {
      this.cultureDialogTitle = "编辑培养记录";
      this.cultureForm = { ...row };
      this.cultureFileList = row.attachments
        ? row.attachments.map(item => ({
            uid: item.id || Math.random(),
            name: item.fileName,
            fileSize: item.fileSize,
            url: item.path || item.fileUrl,
            uploadTime: item.uploadTime,
            status: "success"
          }))
        : [];
      this.cultureDialogVisible = true;
      this.$nextTick(() => {
        this.$refs.cultureForm && this.$refs.cultureForm.clearValidate();
@@ -805,7 +890,6 @@
          this.cultureSaveLoading = true;
          if (this.cultureForm.id) {
            // 编辑现有记录
            const index = this.cultureList.findIndex(
              item => item.id === this.cultureForm.id
            );
@@ -813,7 +897,6 @@
              this.cultureList.splice(index, 1, { ...this.cultureForm });
            }
          } else {
            // 新增记录
            this.cultureForm.id = Date.now();
            this.cultureList.push({ ...this.cultureForm });
          }
@@ -849,10 +932,11 @@
          .toISOString()
          .replace("T", " ")
          .substring(0, 19),
        recorder: "当前用户",
        recorder: store.getters.name,
        checkRecord: "",
        attachments: []
      };
      this.recordFileList = [];
      this.recordDialogVisible = true;
      this.$nextTick(() => {
        this.$refs.recordForm && this.$refs.recordForm.clearValidate();
@@ -862,6 +946,16 @@
    handleEditRecord(row) {
      this.recordDialogTitle = "编辑护理核查记录";
      this.recordForm = { ...row };
      this.recordFileList = row.attachments
        ? row.attachments.map(item => ({
            uid: item.id || Math.random(),
            name: item.fileName,
            fileSize: item.fileSize,
            url: item.path || item.fileUrl,
            uploadTime: item.uploadTime,
            status: "success"
          }))
        : [];
      this.recordDialogVisible = true;
      this.$nextTick(() => {
        this.$refs.recordForm && this.$refs.recordForm.clearValidate();
@@ -874,7 +968,6 @@
          this.recordSaveLoading = true;
          if (this.recordForm.id) {
            // 编辑现有记录
            const index = this.recordList.findIndex(
              item => item.id === this.recordForm.id
            );
@@ -882,7 +975,6 @@
              this.recordList.splice(index, 1, { ...this.recordForm });
            }
          } else {
            // 新增记录
            this.recordForm.id = Date.now();
            this.recordList.push({ ...this.recordForm });
          }
@@ -907,13 +999,90 @@
        .catch(() => {});
    },
    // 附件相关方法
    // 培养记录附件相关方法
    handleCultureAttachmentChange(fileList) {
      this.cultureForm.attachments = fileList;
      this.cultureFileList = fileList;
    },
    handleCultureUploadSuccess({ file, fileList, response }) {
      if (response.code === 200) {
        const attachmentObj = {
          fileName: file.name,
          path: response.fileUrl || file.url,
          fileUrl: response.fileUrl || file.url,
          fileType: this.getFileExtension(file.name),
          fileSize: file.size,
          uploadTime: dayjs().format("YYYY-MM-DD HH:mm:ss")
        };
        if (!Array.isArray(this.cultureForm.attachments)) {
          this.cultureForm.attachments = [];
        }
        this.cultureForm.attachments.push(attachmentObj);
        this.cultureFileList = fileList;
        this.$message.success("文件上传成功");
      }
    },
    handleCultureUploadError({ file, fileList, error }) {
      console.error("培养记录附件上传失败:", error);
      this.$message.error("文件上传失败,请重试");
    },
    handleCultureAttachmentRemove(file) {
      if (file.url) {
        const index = this.cultureForm.attachments.findIndex(
          item => item.path === file.url || item.fileUrl === file.url
        );
        if (index > -1) {
          this.cultureForm.attachments.splice(index, 1);
          this.$message.success("附件删除成功");
        }
      }
    },
    // 护理记录附件相关方法
    handleRecordAttachmentChange(fileList) {
      this.recordForm.attachments = fileList;
      this.recordFileList = fileList;
    },
    handleRecordUploadSuccess({ file, fileList, response }) {
      if (response.code === 200) {
        const attachmentObj = {
          fileName: file.name,
          path: response.fileUrl || file.url,
          fileUrl: response.fileUrl || file.url,
          fileType: this.getFileExtension(file.name),
          fileSize: file.size,
          uploadTime: dayjs().format("YYYY-MM-DD HH:mm:ss")
        };
        if (!Array.isArray(this.recordForm.attachments)) {
          this.recordForm.attachments = [];
        }
        this.recordForm.attachments.push(attachmentObj);
        this.recordFileList = fileList;
        this.$message.success("文件上传成功");
      }
    },
    handleRecordUploadError({ file, fileList, error }) {
      console.error("护理记录附件上传失败:", error);
      this.$message.error("文件上传失败,请重试");
    },
    handleRecordAttachmentRemove(file) {
      if (file.url) {
        const index = this.recordForm.attachments.findIndex(
          item => item.path === file.url || item.fileUrl === file.url
        );
        if (index > -1) {
          this.recordForm.attachments.splice(index, 1);
          this.$message.success("附件删除成功");
        }
      }
    },
    handleViewCultureAttachments(row) {
@@ -926,6 +1095,130 @@
      this.currentAttachmentList = row.attachments || [];
      this.attachmentPreviewTitle = `护理核查记录附件 - ${row.recorder}`;
      this.attachmentPreviewVisible = true;
    },
    handleAttachmentPreviewClose() {
      this.currentAttachmentList = [];
      this.attachmentPreviewTitle = "";
    },
    handlePreviewAttachment(file) {
      this.currentPreviewFile = {
        fileName: file.fileName,
        fileUrl: file.path || file.fileUrl,
        fileType: this.getFileType(file.fileName)
      };
      this.filePreviewVisible = true;
    },
    handleDownloadAttachment(file) {
      const fileUrl = file.path || file.fileUrl;
      const fileName = file.fileName;
      if (fileUrl) {
        const link = document.createElement("a");
        link.href = fileUrl;
        link.download = fileName;
        link.style.display = "none";
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
        this.$message.success("开始下载文件");
      } else {
        this.$message.warning("文件路径不存在,无法下载");
      }
    },
    /** 获取文件类型 */
    getFileType(fileName) {
      if (!fileName) return "other";
      const extension = fileName
        .split(".")
        .pop()
        .toLowerCase();
      const imageTypes = ["jpg", "jpeg", "png", "gif", "bmp", "webp"];
      const pdfTypes = ["pdf"];
      const officeTypes = ["doc", "docx", "xls", "xlsx", "ppt", "pptx"];
      if (imageTypes.includes(extension)) return "image";
      if (pdfTypes.includes(extension)) return "pdf";
      if (officeTypes.includes(extension)) return "office";
      return "other";
    },
    /** 获取文件图标颜色 */
    getFileIconColor(fileName) {
      const type = this.getFileType(fileName);
      const colorMap = {
        image: "#67C23A",
        pdf: "#F56C6C",
        office: "#409EFF",
        other: "#909399"
      };
      return colorMap[type] || "#909399";
    },
    /** 获取文件标签类型 */
    getFileTagType(fileName) {
      const type = this.getFileType(fileName);
      const typeMap = {
        image: "success",
        pdf: "danger",
        office: "primary",
        other: "info"
      };
      return typeMap[type] || "info";
    },
    /** 获取文件类型文本 */
    getFileTypeText(fileName) {
      const type = this.getFileType(fileName);
      const textMap = {
        image: "图片",
        pdf: "PDF",
        office: "文档",
        other: "其他"
      };
      return textMap[type] || "未知";
    },
    /** 检查是否可预览 */
    isPreviewable(fileName) {
      const type = this.getFileType(fileName);
      return ["image", "pdf"].includes(type);
    },
    /** 获取文件扩展名 */
    getFileExtension(filename) {
      return filename
        .split(".")
        .pop()
        .toLowerCase();
    },
    /** 格式化文件大小 */
    formatFileSize(bytes) {
      if (!bytes || bytes === 0) return "0 B";
      const k = 1024;
      const sizes = ["B", "KB", "MB", "GB"];
      const i = Math.floor(Math.log(bytes) / Math.log(k));
      return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
    },
    /** 日期时间格式化 */
    formatDateTime(dateTime) {
      if (!dateTime) return "";
      try {
        const date = new Date(dateTime);
        if (isNaN(date.getTime())) return dateTime;
        const year = date.getFullYear();
        const month = String(date.getMonth() + 1).padStart(2, "0");
        const day = String(date.getDate()).padStart(2, "0");
        const hours = String(date.getHours()).padStart(2, "0");
        const minutes = String(date.getMinutes()).padStart(2, "0");
        return `${year}-${month}-${day} ${hours}:${minutes}`;
      } catch (error) {
        return dateTime;
      }
    },
    // 评估数据变更处理
@@ -991,4 +1284,9 @@
.fixed-width .el-button {
  margin: 0 2px;
}
.file-name {
  font-size: 13px;
  margin-left: 8px;
}
</style>