WXL
2025-12-29 cd574e3394883b79eac5d63f3b11bca852dbc7a0
页面推送
已修改41个文件
1199 ■■■■ 文件已修改
src/views/OfficeRelated/conference/index.vue 480 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/GetWitness/GetWitnessInfo.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/GetWitness/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/GetWitness/organProcurement.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/OrganUtilization/OrganUtilizationInfo.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/OrganUtilization/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/OrganUtilization/organUtilization.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/affirm/affirmInfo.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/affirm/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/allocation/allocationInfo.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/allocation/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/allocation/organAllocation.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/appear/index.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/assess/assessInfo.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/assess/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/course/components/DeathJudgmentStage.vue 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/course/components/EthicalReviewStage.vue 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/course/components/api/mockMaintenanceApi.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/course/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/decide/DecideInfo.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/decide/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/ethicalReview/ethicalReviewInfo.vue 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/ethicalReview/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/maintain/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/maintain/maintainInfo.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/maintain/mockMaintenanceApi.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/transfer/TransportEdit.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/transfer/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/transfer/transportDetail.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/project/DonationProcess/index.vue 261 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/project/donatebaseinfo/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/project/donateconsolationfund/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/project/donorcharge/donorcharge/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/project/donorcharge/donorchargedetail/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/project/fundcheck/ethicalExpertFeeCheck/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/project/fundcheck/expertFeeCheck/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/project/fundcheck/medicalCostCheck/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/project/fundcheck/officeExpenseCheck/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/project/fundcheck/performanceCheck/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/project/organallocation/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/project/organization/index.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/OfficeRelated/conference/index.vue
@@ -222,10 +222,11 @@
        />
      </div>
    </el-card>
    <el-dialog
      title="会议纪要"
      :visible.sync="minutesDialogVisible"
      width="600px"
      width="700px"
    >
      <div v-if="currentRecord.meetingMinutes">
        <el-alert
@@ -237,12 +238,45 @@
        <div class="minutes-content">
          <el-card>
            <div
              style="white-space: pre-line; line-height: 1.6; max-height: 400px; overflow-y: auto;"
              style="white-space: pre-line; line-height: 1.6; max-height: 300px; overflow-y: auto;"
            >
              {{ currentRecord.meetingMinutes }}
            </div>
          </el-card>
        </div>
        <!-- 会议纪要附件展示 -->
        <div
          class="minutes-attachments"
          v-if="
            currentRecord.minutesAttachments &&
              currentRecord.minutesAttachments.length > 0
          "
        >
          <el-divider content-position="left">会议纪要附件</el-divider>
          <div class="attachment-list">
            <div
              v-for="file in currentRecord.minutesAttachments"
              :key="file.id"
              class="attachment-item"
            >
              <el-link
                type="primary"
                :href="file.url"
                target="_blank"
                class="file-link"
              >
                <i
                  :class="getFileIcon(file.type)"
                  style="margin-right: 8px;"
                ></i>
                {{ file.name }}
                <span class="file-size">({{ formatFileSize(file.size) }})</span>
              </el-link>
            </div>
          </div>
        </div>
        <div
          class="minutes-meta"
          style="margin-top: 16px; color: #909399; font-size: 12px;"
@@ -327,19 +361,101 @@
            {{ currentRecord.content }}
          </div>
        </el-descriptions-item>
        <el-descriptions-item
          label="附件"
          :span="2"
          v-if="currentRecord.attachments && currentRecord.attachments.length"
        <el-descriptions-item label="会议详情附件" :span="2">
          <div class="detail-attachments">
            <div
              v-if="
                currentRecord.detailAttachments &&
                  currentRecord.detailAttachments.length > 0
              "
              class="attachment-grid"
        >
          <div
            v-for="file in currentRecord.attachments"
                v-for="file in currentRecord.detailAttachments"
                :key="file.id"
                class="attachment-card"
              >
                <el-card shadow="hover" class="file-card">
                  <div class="file-content">
                    <i :class="getFileIcon(file.type)" class="file-icon"></i>
                    <div class="file-info">
                      <div class="file-name" :title="file.name">
                        {{ file.name }}
                      </div>
                      <div class="file-meta">
                        <span class="file-size">{{
                          formatFileSize(file.size)
                        }}</span>
                        <span class="file-time">{{
                          formatDateTime(file.uploadTime)
                        }}</span>
                      </div>
                    </div>
                  </div>
                  <div class="file-actions">
                    <el-button
                      type="text"
                      size="mini"
                      @click="handlePreview(file)"
                      >预览</el-button
                    >
                    <el-button
                      type="text"
                      size="mini"
                      @click="handleDownload(file)"
                      >下载</el-button
                    >
                  </div>
                </el-card>
              </div>
            </div>
            <div v-else class="no-attachment">
              <el-empty
                description="暂无会议详情附件"
                :image-size="50"
              ></el-empty>
            </div>
          </div>
        </el-descriptions-item>
        <!-- 会议概要附件 -->
        <el-descriptions-item label="会议概要附件" :span="2">
          <div class="summary-attachments">
            <div
              v-if="
                currentRecord.summaryAttachments &&
                  currentRecord.summaryAttachments.length > 0
              "
              class="attachment-list"
            >
              <div
                v-for="file in currentRecord.summaryAttachments"
            :key="file.id"
            class="attachment-item"
          >
            <el-link type="primary" :href="file.url" target="_blank">
              <i class="el-icon-document"></i> {{ file.name }}
                <el-link
                  type="primary"
                  :href="file.url"
                  target="_blank"
                  class="file-link"
                >
                  <i
                    :class="getFileIcon(file.type)"
                    style="margin-right: 8px;"
                  ></i>
                  {{ file.name }}
                  <span class="file-size"
                    >({{ formatFileSize(file.size) }})</span
                  >
            </el-link>
              </div>
            </div>
            <div v-else class="no-attachment">
              <el-empty
                description="暂无会议概要附件"
                :image-size="50"
              ></el-empty>
            </div>
          </div>
        </el-descriptions-item>
      </el-descriptions>
@@ -404,7 +520,109 @@
        <el-form-item label="会议地点" prop="location">
          <el-input v-model="editForm.location" placeholder="请输入会议地点" />
        </el-form-item>
        <el-form-item label="会议详情附件">
          <div class="attachment-upload-section">
            <div class="section-title">会议相关资料</div>
            <div class="upload-tip">上传会议讨论材料、背景资料等相关文件</div>
            <el-upload
              class="detail-upload"
              action="#"
              :auto-upload="false"
              :on-change="handleDetailFileChange"
              :file-list="editForm.detailAttachments"
              :limit="10"
              multiple
            >
              <el-button size="small" type="primary" icon="el-icon-upload">
                上传详情附件
              </el-button>
              <div slot="tip" class="el-upload__tip">
                支持文档、图片等格式,单个文件不超过20MB
              </div>
            </el-upload>
            <div
              v-if="
                editForm.detailAttachments &&
                  editForm.detailAttachments.length > 0
              "
              class="uploaded-files"
            >
              <div
                v-for="(file, index) in editForm.detailAttachments"
                :key="file.uid || index"
                class="file-item"
              >
                <span class="file-name">{{ file.name }}</span>
                <el-button
                  type="text"
                  size="mini"
                  @click="handleRemoveDetailFile(index)"
                  style="color: #F56C6C;"
                >
                  删除
                </el-button>
              </div>
            </div>
          </div>
        </el-form-item>
        <el-form-item label="会议概要" prop="summary">
          <el-input
            v-model="editForm.summary"
            type="textarea"
            :rows="2"
            placeholder="请输入会议概要"
            maxlength="200"
            show-word-limit
          />
        </el-form-item>
        <!-- 会议概要附件上传 -->
        <el-form-item label="会议概要附件">
          <div class="attachment-upload-section">
            <div class="section-title">会议纪要材料</div>
            <div class="upload-tip">上传会议纪要、决议文件等相关材料</div>
            <el-upload
              class="summary-upload"
              action="#"
              :auto-upload="false"
              :on-change="handleSummaryFileChange"
              :file-list="editForm.summaryAttachments"
              :limit="5"
              multiple
            >
              <el-button size="small" type="primary" icon="el-icon-upload">
                上传概要附件
              </el-button>
              <div slot="tip" class="el-upload__tip">
                支持PDF、Word等文档格式,单个文件不超过10MB
              </div>
            </el-upload>
            <div
              v-if="
                editForm.summaryAttachments &&
                  editForm.summaryAttachments.length > 0
              "
              class="uploaded-files"
            >
              <div
                v-for="(file, index) in editForm.summaryAttachments"
                :key="file.uid || index"
                class="file-item"
              >
                <span class="file-name">{{ file.name }}</span>
                <el-button
                  type="text"
                  size="mini"
                  @click="handleRemoveSummaryFile(index)"
                  style="color: #F56C6C;"
                >
                  删除
                </el-button>
              </div>
            </div>
          </div>
        </el-form-item>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="开始时间" prop="startTime">
@@ -450,20 +668,27 @@
          />
        </el-form-item>
        <el-form-item label="附件上传">
        <!-- 会议纪要附件上传 -->
        <el-form-item label="会议纪要附件">
          <div class="attachment-upload-section">
            <div class="upload-tip">上传与会议纪要相关的补充材料</div>
          <el-upload
              class="minutes-upload"
            action="#"
            :auto-upload="false"
            :on-change="handleFileChange"
            :file-list="editForm.attachments"
              :on-change="handleMinutesFileChange"
              :file-list="editForm.minutesAttachments"
            :limit="5"
            multiple
          >
            <el-button size="small" type="primary">点击上传</el-button>
              <el-button size="small" type="primary" icon="el-icon-upload">
                上传纪要附件
              </el-button>
            <div slot="tip" class="el-upload__tip">
              支持上传文档、图片等文件,单个文件不超过10MB
                支持图片、文档等格式,单个文件不超过10MB
            </div>
          </el-upload>
          </div>
        </el-form-item>
        <el-form-item label="会议纪要" prop="meetingMinutes">
          <el-input
@@ -543,7 +768,10 @@
        endTime: "",
        summary: "",
        content: "",
        attachments: []
        attachments: [],
        detailAttachments: [], // 会议详情附件
        summaryAttachments: [], // 会议概要附件
        minutesAttachments: [] // 会议纪要附件
      },
      // 表单验证规则
      editRules: {
@@ -599,6 +827,24 @@
      } finally {
        this.loading = false;
      }
    },
    getFileIcon(fileType) {
      const iconMap = {
        pdf: "el-icon-document",
        doc: "el-icon-document",
        docx: "el-icon-document",
        xls: "el-icon-document",
        xlsx: "el-icon-document",
        ppt: "el-icon-document",
        pptx: "el-icon-document",
        jpg: "el-icon-picture",
        jpeg: "el-icon-picture",
        png: "el-icon-picture",
        gif: "el-icon-picture",
        zip: "el-icon-folder",
        rar: "el-icon-folder"
      };
      return iconMap[fileType] || "el-icon-document";
    },
    // 查看会议纪要
    handleViewMinutes(record) {
@@ -691,7 +937,9 @@
        const meetingMinutes = hasMinutes
          ? minutesExamples[Math.floor(Math.random() * minutesExamples.length)]
          : "";
        const hasDetailAttachments = Math.random() > 0.5;
        const hasSummaryAttachments = Math.random() > 0.6;
        const hasMinutesAttachments = Math.random() > 0.7;
        return {
          id: index + 1,
          title: `关于${
@@ -699,6 +947,47 @@
              Math.floor(Math.random() * 4)
            ]
          }的会议`,
           // 添加分类型附件
          detailAttachments: hasDetailAttachments ? [
            {
              id: `detail-${index}-1`,
              name: `会议材料-${index}.pdf`,
              type: 'pdf',
              size: 2048000,
              url: '/api/files/meeting-material.pdf',
              uploadTime: new Date(startTime.getTime() - 3600000).toISOString()
            },
            {
              id: `detail-${index}-2`,
              name: `背景资料-${index}.docx`,
              type: 'docx',
              size: 1024000,
              url: '/api/files/background.docx',
              uploadTime: new Date(startTime.getTime() - 7200000).toISOString()
            }
          ] : [],
          summaryAttachments: hasSummaryAttachments ? [
            {
              id: `summary-${index}-1`,
              name: `会议纪要-${index}.pdf`,
              type: 'pdf',
              size: 512000,
              url: '/api/files/meeting-summary.pdf',
              uploadTime: new Date(startTime.getTime() + 3600000).toISOString()
            }
          ] : [],
          minutesAttachments: hasMinutesAttachments ? [
            {
              id: `minutes-${index}-1`,
              name: `补充材料-${index}.jpg`,
              type: 'jpg',
              size: 1024000,
              url: '/api/files/supplement.jpg',
              uploadTime: new Date(startTime.getTime() + 7200000).toISOString()
            }
          ] : [],
          meetingType:
            meetingTypes[Math.floor(Math.random() * meetingTypes.length)],
          participants: uniqueParticipants,
@@ -868,7 +1157,51 @@
        })
        .catch(() => {});
    },
    // 新增方法:格式化文件大小
    formatFileSize(bytes) {
      if (!bytes) 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];
    },
    // 分类型文件上传处理
    handleDetailFileChange(file, fileList) {
      this.editForm.detailAttachments = fileList;
    },
    handleSummaryFileChange(file, fileList) {
      this.editForm.summaryAttachments = fileList;
    },
    handleMinutesFileChange(file, fileList) {
      this.editForm.minutesAttachments = fileList;
    },
    // 删除已上传的文件
    handleRemoveDetailFile(index) {
      this.editForm.detailAttachments.splice(index, 1);
    },
    handleRemoveSummaryFile(index) {
      this.editForm.summaryAttachments.splice(index, 1);
    },
    // 文件预览和下载
    handlePreview(file) {
      // 实现文件预览逻辑
      this.$message.info(`预览文件: ${file.name}`);
    },
    handleDownload(file) {
      // 实现文件下载逻辑
      const link = document.createElement("a");
      link.href = file.url;
      link.download = file.name;
      link.click();
      this.$message.success(`开始下载: ${file.name}`);
    },
    // 保存记录
    async handleSave() {
      try {
@@ -947,7 +1280,9 @@
        meetingMinutes: "",
        minutesCreateTime: "",
        minutesCreator: "",
        attachments: []
        detailAttachments: [],
        summaryAttachments: [],
        minutesAttachments: []
      };
    }
  }
@@ -1019,4 +1354,115 @@
    justify-content: space-between;
  }
}
/* 新增附件相关样式 */
.attachment-upload-section {
  border: 1px solid #ebeef5;
  border-radius: 4px;
  padding: 15px;
  background-color: #fafafa;
}
.section-title {
  font-weight: bold;
  margin-bottom: 8px;
  color: #303133;
}
.upload-tip {
  font-size: 12px;
  color: #909399;
  margin-bottom: 10px;
}
.uploaded-files {
  margin-top: 10px;
}
.file-item {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 8px;
  border-bottom: 1px solid #f0f0f0;
}
.file-item:last-child {
  border-bottom: none;
}
.file-name {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.attachment-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 10px;
}
.file-card {
  transition: all 0.3s ease;
}
.file-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
.file-content {
  display: flex;
  align-items: center;
}
.file-icon {
  font-size: 24px;
  color: #409EFF;
  margin-right: 10px;
}
.file-info {
  flex: 1;
}
.file-name {
  font-size: 14px;
  font-weight: 500;
  margin-bottom: 4px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.file-meta {
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  color: #909399;
}
.file-actions {
  margin-top: 8px;
  text-align: center;
}
.file-link {
  display: flex;
  align-items: center;
}
.no-attachment {
  text-align: center;
  padding: 20px;
  color: #909399;
}
/* 响应式设计 */
@media (max-width: 768px) {
  .attachment-grid {
    grid-template-columns: 1fr;
  }
}
</style>
src/views/business/GetWitness/GetWitnessInfo.vue
@@ -26,7 +26,7 @@
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="案例编号" prop="caseNo">
            <el-form-item label="住院号" prop="caseNo">
              <el-input v-model="form.caseNo" readonly />
            </el-form-item>
          </el-col>
@@ -766,7 +766,7 @@
    this.getCoordinatorData();
  },
  methods: {
    // 生成案例编号
    // 生成住院号
    generateCaseNo() {
      const timestamp = Date.now().toString();
      this.form.hospitalNo = "D" + timestamp.slice(-6);
src/views/business/GetWitness/index.vue
@@ -161,7 +161,7 @@
        <el-table-column
          label="操作"
          align="center"
          width="150"
          width="210"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
src/views/business/GetWitness/organProcurement.js
@@ -5,7 +5,7 @@
    hospitalNo: "D202512001",
    caseNo: "C202512001",
    donorName: "张三",
    gender: "0",
    gender: "2",
    age: 45,
    birthDate: "1978-05-15",
    diagnosis: "脑外伤",
@@ -47,7 +47,7 @@
    hospitalNo: "D202512003",
    caseNo: "C202512003",
    donorName: "王五",
    gender: "0",
    gender: "2",
    age: 52,
    birthDate: "1971-03-10",
    diagnosis: "脑梗死",
src/views/business/OrganUtilization/OrganUtilizationInfo.vue
@@ -26,7 +26,7 @@
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="案例编号" prop="caseNo">
            <el-form-item label="住院号" prop="caseNo">
              <el-input v-model="form.caseNo" readonly />
            </el-form-item>
          </el-col>
@@ -943,7 +943,7 @@
    this.getCoordinatorData();
  },
  methods: {
    // 生成案例编号
    // 生成住院号
    generateCaseNo() {
      const timestamp = Date.now().toString();
      this.form.hospitalNo = "D" + timestamp.slice(-6);
src/views/business/OrganUtilization/index.vue
@@ -148,7 +148,7 @@
        <el-table-column
          label="操作"
          align="center"
          width="150"
          width="210"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
src/views/business/OrganUtilization/organUtilization.js
@@ -5,7 +5,7 @@
    hospitalNo: "D202512001",
    caseNo: "C202512001",
    donorName: "张三",
    gender: "0",
    gender: "2",
    age: 45,
    diagnosis: "脑外伤",
    registrant: "李协调员",
@@ -43,7 +43,7 @@
    hospitalNo: "D202512003",
    caseNo: "C202512003",
    donorName: "王五",
    gender: "0",
    gender: "2",
    age: 52,
    diagnosis: "脑梗死",
    registrant: "赵协调员",
src/views/business/affirm/affirmInfo.vue
@@ -17,7 +17,7 @@
      <el-form :model="form" ref="form" label-width="120px">
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="案例编号" prop="caseNo">
            <el-form-item label="住院号" prop="caseNo">
              <el-input v-model="form.caseNo" :readonly="!isEdit" />
            </el-form-item>
          </el-col>
@@ -81,7 +81,7 @@
            <el-form-item label="确认状态" prop="confirmationStatus">
              <el-select
                v-model="form.confirmationStatus"
                :disabled="!isEdit"
                style="width: 100%"
              >
                <el-option label="未确认" value="0" />
@@ -97,7 +97,7 @@
                type="datetime"
                value-format="yyyy-MM-dd HH:mm:ss"
                style="width: 100%"
                :disabled="!isEdit"
              />
            </el-form-item>
          </el-col>
src/views/business/affirm/index.vue
@@ -113,7 +113,7 @@
      >
        <el-table-column type="selection" width="55" align="center" />
        <el-table-column
          label="案例编号"
          label="住院号"
          align="center"
          prop="caseNo"
          width="120"
src/views/business/allocation/allocationInfo.vue
@@ -26,7 +26,7 @@
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="案例编号" prop="caseNo">
            <el-form-item label="住院号" prop="caseNo">
              <el-input v-model="form.caseNo" readonly />
            </el-form-item>
          </el-col>
@@ -582,7 +582,7 @@
    this.getHospitalData();
  },
  methods: {
    // 生成案例编号
    // 生成住院号
    generateCaseNo() {
      const timestamp = Date.now().toString();
      this.form.hospitalNo = "D" + timestamp.slice(-6);
src/views/business/allocation/index.vue
@@ -161,7 +161,7 @@
        <el-table-column
          label="操作"
          align="center"
          width="150"
          width="210"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
src/views/business/allocation/organAllocation.js
@@ -5,7 +5,7 @@
    hospitalNo: "D202512001",
    caseNo: "C202512001",
    donorName: "张三",
    gender: "0",
    gender: "2",
    age: 45,
    birthDate: "1978-05-15",
    diagnosis: "脑外伤",
@@ -35,7 +35,7 @@
    hospitalNo: "D202512003",
    caseNo: "C202512003",
    donorName: "王五",
    gender: "0",
    gender: "2",
    age: 52,
    birthDate: "1971-03-10",
    diagnosis: "脑梗死",
src/views/business/appear/index.vue
@@ -34,7 +34,7 @@
            <el-option label="全部" value="" />
            <el-option label="待审批" value="0" />
            <el-option label="已通过" value="1" />
            <el-option label="已驳回" value="2" />
            <el-option label="已终止" value="2" />
          </el-select>
        </el-form-item>
        <el-form-item>
@@ -198,14 +198,14 @@
            <el-form-item label="审批结果" prop="approveResult">
              <el-radio-group v-model="approveForm.approveResult">
                <el-radio label="1">通过</el-radio>
                <el-radio label="2">驳回</el-radio>
                <el-radio label="2">终止</el-radio>
              </el-radio-group>
            </el-form-item>
            <el-form-item label="审批意见" prop="approveOpinion">
              <el-input
                type="textarea"
                v-model="approveForm.approveOpinion"
                placeholder="请输入详细的审批意见,包括通过或驳回的理由"
                placeholder="请输入详细的审批意见,包括通过或终止的理由"
                :rows="6"
                maxlength="500"
                show-word-limit
@@ -294,7 +294,7 @@
      const statusMap = {
        "0": "warning", // 待审批
        "1": "success", // 已通过
        "2": "danger" // 已驳回
        "2": "danger" // 已终止
      };
      return statusMap[status];
    },
@@ -302,7 +302,7 @@
      const statusMap = {
        "0": "待审批",
        "1": "已通过",
        "2": "已驳回"
        "2": "已终止"
      };
      return statusMap[status];
    }
@@ -456,7 +456,7 @@
    handleDelete(row) {
      const ids = row.id || this.ids;
      this.$modal
        .confirm('是否确认删除案例编号为"' + ids + '"的数据项?')
        .confirm('是否确认删除住院号为"' + ids + '"的数据项?')
        .then(() => {
          // 模拟删除操作
          this.caseList = this.caseList.filter(item => !ids.includes(item.id));
src/views/business/assess/assessInfo.vue
@@ -13,7 +13,7 @@
      </div>
      <el-descriptions :column="2" border>
        <el-descriptions-item label="案例编号">{{
        <el-descriptions-item label="住院号">{{
          assessmentData.caseNo
        }}</el-descriptions-item>
        <el-descriptions-item label="潜在捐献者姓名">{{
src/views/business/assess/index.vue
@@ -125,7 +125,7 @@
      >
        <el-table-column type="selection" width="55" align="center" />
        <el-table-column
          label="案例编号"
          label="住院号"
          align="center"
          prop="caseNo"
          width="120"
src/views/business/course/components/DeathJudgmentStage.vue
@@ -36,10 +36,17 @@
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="判定医生" prop="judgmentDoctor">
              <el-input v-model="form.judgmentDoctor" :readonly="!isEdit" />
            <el-form-item label="判定医生一" prop="judgmentDoctor">
              <el-input v-model="form.judgmentDoctorone" :readonly="!isEdit" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="判定医生二" prop="judgmentDoctor">
              <el-input v-model="form.judgmentDoctortwo" :readonly="!isEdit" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="8">
            <el-form-item label="登记人" prop="registrant">
              <el-input v-model="form.registrant" :readonly="!isEdit" />
@@ -118,7 +125,9 @@
              <el-table-column label="文件类型" width="100" align="center">
                <template slot-scope="scope">
                  <el-tag size="small">{{ getFileType(scope.row.fileName) }}</el-tag>
                  <el-tag size="small">{{
                    getFileType(scope.row.fileName)
                  }}</el-tag>
                </template>
              </el-table-column>
@@ -140,11 +149,7 @@
                </template>
              </el-table-column>
              <el-table-column
                label="操作"
                width="180"
                align="center"
              >
              <el-table-column label="操作" width="180" align="center">
                <template slot-scope="scope">
                  <el-button
                    size="mini"
@@ -177,7 +182,10 @@
              v-if="getAttachmentsByType(type.value).length === 0"
              class="empty-attachment"
            >
              <el-empty description="暂无评估表附件" :image-size="80"></el-empty>
              <el-empty
                description="暂无评估表附件"
                :image-size="80"
              ></el-empty>
            </div>
          </div>
        </el-tab-pane>
@@ -204,7 +212,9 @@
        :auto-upload="false"
      >
        <i class="el-icon-upload"></i>
        <div class="el-upload__text">将评估表文件拖到此处,或<em>点击上传</em></div>
        <div class="el-upload__text">
          将评估表文件拖到此处,或<em>点击上传</em>
        </div>
        <div class="el-upload__tip" slot="tip">
          支持上传pdf、jpg、png、doc、docx、xls、xlsx格式文件,单个文件不超过10MB
        </div>
@@ -226,7 +236,10 @@
</template>
<script>
import { getDeathJudgmentDetail, updateDeathJudgment } from "./api/mockDeathJudgmentApi";
import {
  getDeathJudgmentDetail,
  updateDeathJudgment
} from "./api/mockDeathJudgmentApi";
export default {
  name: "DeathJudgmentDetail",
@@ -299,20 +312,21 @@
  },
  created() {
    const id = this.$route.query.id;
    this.isEdit = this.$route.path.includes('/edit') || this.$route.path.includes('/add');
    if (id && !this.$route.path.includes('/add')) {
    this.isEdit =
      this.$route.path.includes("/edit") || this.$route.path.includes("/add");
    if (id && !this.$route.path.includes("/add")) {
      this.getDetail(id);
    } else if (this.$route.path.includes('/add')) {
    } else if (this.$route.path.includes("/add")) {
      this.generateHospitalNo();
    }
    this.getAttachmentList();
  },
  methods: {
    // 生成案例编号
    // 生成住院号
    generateHospitalNo() {
      // 模拟生成案例编号:D + 时间戳后6位
      // 模拟生成住院号:D + 时间戳后6位
      const timestamp = Date.now().toString();
      this.form.hospitalNo = 'D' + timestamp.slice(-6);
      this.form.hospitalNo = "D" + timestamp.slice(-6);
    },
    // 获取详情
    getDetail(id) {
@@ -358,16 +372,19 @@
    },
    // 获取文件类型
    getFileType(fileName) {
      const ext = fileName.split('.').pop().toLowerCase();
      const ext = fileName
        .split(".")
        .pop()
        .toLowerCase();
      const typeMap = {
        'pdf': 'PDF',
        'doc': 'DOC',
        'docx': 'DOCX',
        'xls': 'XLS',
        'xlsx': 'XLSX',
        'jpg': 'JPG',
        'jpeg': 'JPEG',
        'png': 'PNG'
        pdf: "PDF",
        doc: "DOC",
        docx: "DOCX",
        xls: "XLS",
        xlsx: "XLSX",
        jpg: "JPG",
        jpeg: "JPEG",
        png: "PNG"
      };
      return typeMap[ext] || ext.toUpperCase();
    },
@@ -385,36 +402,39 @@
    // 上传前校验
    beforeUpload(file) {
      const allowedTypes = [
        'application/pdf',
        'image/jpeg',
        'image/png',
        'application/msword',
        'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'application/vnd.ms-excel',
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        "application/pdf",
        "image/jpeg",
        "image/png",
        "application/msword",
        "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
        "application/vnd.ms-excel",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
      ];
      const maxSize = 10 * 1024 * 1024; // 10MB
      // 校验文件类型
      const isTypeOk = allowedTypes.includes(file.type) ||
                      file.name.endsWith('.pdf') ||
                      file.name.endsWith('.jpg') ||
                      file.name.endsWith('.jpeg') ||
                      file.name.endsWith('.png') ||
                      file.name.endsWith('.doc') ||
                      file.name.endsWith('.docx') ||
                      file.name.endsWith('.xls') ||
                      file.name.endsWith('.xlsx');
      const isTypeOk =
        allowedTypes.includes(file.type) ||
        file.name.endsWith(".pdf") ||
        file.name.endsWith(".jpg") ||
        file.name.endsWith(".jpeg") ||
        file.name.endsWith(".png") ||
        file.name.endsWith(".doc") ||
        file.name.endsWith(".docx") ||
        file.name.endsWith(".xls") ||
        file.name.endsWith(".xlsx");
      if (!isTypeOk) {
        this.$message.error('文件格式不支持,请上传pdf、jpg、png、doc、docx、xls或xlsx格式文件');
        this.$message.error(
          "文件格式不支持,请上传pdf、jpg、png、doc、docx、xls或xlsx格式文件"
        );
        return false;
      }
      // 校验文件大小
      if (file.size > maxSize) {
        this.$message.error('文件大小不能超过10MB');
        this.$message.error("文件大小不能超过10MB");
        return false;
      }
@@ -431,7 +451,7 @@
    // 提交上传
    async submitUpload() {
      if (this.tempFileList.length === 0) {
        this.$message.warning('请先选择要上传的文件');
        this.$message.warning("请先选择要上传的文件");
        return;
      }
@@ -447,55 +467,62 @@
            fileName: file.name,
            fileSize: file.size,
            uploadTime: new Date().toISOString(),
            uploader: '当前用户',
            uploader: "当前用户",
            fileUrl: URL.createObjectURL(file.raw)
          };
          this.attachmentList.push(newAttachment);
        }
        this.$message.success('文件上传成功');
        this.$message.success("文件上传成功");
        this.uploadDialogVisible = false;
        this.tempFileList = [];
      } catch (error) {
        this.$message.error('文件上传失败');
        console.error('上传失败:', error);
        this.$message.error("文件上传失败");
        console.error("上传失败:", error);
      } finally {
        this.uploadLoading = false;
      }
    },
    // 删除附件
    handleRemoveAttachment(attachment) {
      this.$confirm('确定要删除这个评估表附件吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        const index = this.attachmentList.findIndex(item => item.id === attachment.id);
      this.$confirm("确定要删除这个评估表附件吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          const index = this.attachmentList.findIndex(
            item => item.id === attachment.id
          );
        if (index !== -1) {
          this.attachmentList.splice(index, 1);
          this.$message.success('评估表删除成功');
            this.$message.success("评估表删除成功");
        }
      }).catch(() => {});
        })
        .catch(() => {});
    },
    // 预览附件
    handlePreview(attachment) {
      if (attachment.fileName.endsWith('.pdf')) {
        window.open(attachment.fileUrl, '_blank');
      if (attachment.fileName.endsWith(".pdf")) {
        window.open(attachment.fileUrl, "_blank");
      } else if (attachment.fileName.match(/\.(jpg|jpeg|png)$/i)) {
        this.$alert(`<img src="${attachment.fileUrl}" style="max-width: 100%;" alt="${attachment.fileName}">`,
          '图片预览', {
        this.$alert(
          `<img src="${attachment.fileUrl}" style="max-width: 100%;" alt="${attachment.fileName}">`,
          "图片预览",
          {
            dangerouslyUseHTMLString: true,
            customClass: 'image-preview-dialog'
          });
            customClass: "image-preview-dialog"
          }
        );
      } else {
        this.$message.info('该文件类型暂不支持在线预览,请下载后查看');
        this.$message.info("该文件类型暂不支持在线预览,请下载后查看");
      }
    },
    // 下载附件
    handleDownload(attachment) {
      // 实际项目中调用下载接口
      const link = document.createElement('a');
      const link = document.createElement("a");
      link.href = attachment.fileUrl;
      link.download = attachment.fileName;
      link.click();
@@ -511,17 +538,17 @@
          updateDeathJudgment(this.form)
            .then(response => {
              if (response.code === 200) {
                this.$message.success('保存成功');
                if (this.$route.path.includes('/add')) {
                  this.$router.push('/case/deathJudgment');
                this.$message.success("保存成功");
                if (this.$route.path.includes("/add")) {
                  this.$router.push("/case/deathJudgment");
                } else {
                  this.isEdit = false;
                }
              }
            })
            .catch(error => {
              console.error('保存失败:', error);
              this.$message.error('保存失败');
              console.error("保存失败:", error);
              this.$message.error("保存失败");
            })
            .finally(() => {
              this.saveLoading = false;
@@ -531,17 +558,28 @@
    },
    // 文件大小格式化
    formatFileSize(size) {
      if (size === 0) return '0 B';
      if (size === 0) return "0 B";
      const k = 1024;
      const sizes = ['B', 'KB', 'MB', 'GB'];
      const sizes = ["B", "KB", "MB", "GB"];
      const i = Math.floor(Math.log(size) / Math.log(k));
      return parseFloat((size / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
      return parseFloat((size / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
    },
    // 时间格式化
    parseTime(time) {
      if (!time) return '';
      if (!time) return "";
      const date = new Date(time);
      return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')} ${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`;
      return `${date.getFullYear()}-${(date.getMonth() + 1)
        .toString()
        .padStart(2, "0")}-${date
        .getDate()
        .toString()
        .padStart(2, "0")} ${date
        .getHours()
        .toString()
        .padStart(2, "0")}:${date
        .getMinutes()
        .toString()
        .padStart(2, "0")}`;
    }
  }
};
src/views/business/course/components/EthicalReviewStage.vue
@@ -134,7 +134,7 @@
    <el-card class="expert-card">
      <div slot="header" class="clearfix">
        <span class="detail-title"
          >专家审查情况 (18位专家 + 1位主任专家)</span
          >专家审查情况 (18位专家 + 1位主委专家)</span
        >
        <div style="float: right;">
          <el-button
@@ -151,7 +151,7 @@
            @click="handleSendToChiefExpert"
            :disabled="!canSendToChiefExpert"
          >
            发送主任专家
            发送主委专家
          </el-button>
          <el-button
            size="mini"
@@ -177,7 +177,7 @@
          </el-col>
          <el-col :span="6">
            <div class="stat-item">
              <span class="stat-label">主任专家状态:</span>
              <span class="stat-label">主委专家状态:</span>
              <span class="stat-value">{{ chiefExpertStatus }}</span>
            </div>
          </el-col>
@@ -222,7 +222,7 @@
              size="mini"
              type="danger"
              style="margin-left: 5px;"
              >主任</el-tag
              >主委</el-tag
            >
          </template>
        </el-table-column>
@@ -230,7 +230,7 @@
        <el-table-column label="专家类型" width="100" align="center">
          <template slot-scope="scope">
            <span :class="scope.row.isChief ? 'chief-expert' : 'normal-expert'">
              {{ scope.row.isChief ? "主任专家" : "专家" }}
              {{ scope.row.isChief ? "主委专家" : "专家" }}
            </span>
          </template>
        </el-table-column>
@@ -325,7 +325,7 @@
        <el-form-item label="专家类型" prop="expertType">
          <el-radio-group v-model="sendForm.expertType">
            <el-radio label="normal">专家</el-radio>
            <el-radio label="chief">主任专家</el-radio>
            <el-radio label="chief">主委专家</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item
@@ -418,7 +418,7 @@
        // 专家(18位)- 初始状态为申请中
        {
          id: 1,
          expertName: "张教授",
          expertName: "陶昊",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -427,7 +427,7 @@
        },
        {
          id: 2,
          expertName: "李教授",
          expertName: "刘斌",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -436,7 +436,7 @@
        },
        {
          id: 3,
          expertName: "王教授",
          expertName: "于海初 ",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -445,7 +445,7 @@
        },
        {
          id: 4,
          expertName: "刘教授",
          expertName: "王红梅",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -454,7 +454,7 @@
        },
        {
          id: 5,
          expertName: "陈教授",
          expertName: "王春光",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -463,7 +463,7 @@
        },
        {
          id: 6,
          expertName: "杨教授",
          expertName: "王静",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -472,7 +472,7 @@
        },
        {
          id: 7,
          expertName: "黄教授",
          expertName: "边文超",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -481,7 +481,7 @@
        },
        {
          id: 8,
          expertName: "赵教授",
          expertName: "闫志勇",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -490,7 +490,7 @@
        },
        {
          id: 9,
          expertName: "周教授",
          expertName: "许凤",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -499,7 +499,7 @@
        },
        {
          id: 10,
          expertName: "吴教授",
          expertName: "许传屾",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -508,7 +508,7 @@
        },
        {
          id: 11,
          expertName: "徐教授",
          expertName: "张红岩",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -517,7 +517,7 @@
        },
        {
          id: 12,
          expertName: "孙教授",
          expertName: "杨苏民",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -526,7 +526,7 @@
        },
        {
          id: 13,
          expertName: "朱教授",
          expertName: "宋玉强",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -535,7 +535,7 @@
        },
        {
          id: 14,
          expertName: "马教授",
          expertName: "周传利",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -544,7 +544,7 @@
        },
        {
          id: 15,
          expertName: "胡教授",
          expertName: "荆凡波",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -553,7 +553,7 @@
        },
        {
          id: 16,
          expertName: "林教授",
          expertName: "矫文捷",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -562,7 +562,7 @@
        },
        {
          id: 17,
          expertName: "郭教授",
          expertName: "董震",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -571,17 +571,17 @@
        },
        {
          id: 18,
          expertName: "何教授",
          expertName: "蔡金贞",
          isChief: false,
          reviewStatus: "applying",
          expertConclusion: "",
          expertOpinion: "",
          reviewTime: ""
        },
        // 主任专家(1位)
        // 主委专家(1位)
        {
          id: 19,
          expertName: "主任专家",
          expertName: "孔心涓",
          isChief: true,
          reviewStatus: "applying",
          expertConclusion: "",
@@ -607,7 +607,7 @@
        { id: 1, name: "张教授", type: "normal" },
        { id: 2, name: "李教授", type: "normal" },
        { id: 3, name: "王教授", type: "normal" },
        { id: 4, name: "赵主任", type: "chief" }
        { id: 4, name: "赵主委", type: "chief" }
      ]
    };
  },
@@ -618,7 +618,7 @@
        expert => !expert.isChief && expert.expertConclusion === "approved"
      ).length;
    },
    // 计算属性:主任专家状态
    // 计算属性:主委专家状态
    chiefExpertStatus() {
      const chiefExpert = this.expertReviews.find(expert => expert.isChief);
      return chiefExpert
@@ -662,7 +662,7 @@
        ).length > 0
      );
    },
    // 是否可以发送给主任专家(需要至少12个专家同意)
    // 是否可以发送给主委专家(需要至少12个专家同意)
    canSendToChiefExpert() {
      return (
        this.approvedNormalExperts >= 12 &&
@@ -755,10 +755,10 @@
            expertOpinion: "",
            reviewTime: ""
          },
          // 主任专家(1位)
          // 主委专家(1位)
          {
            id: 19,
            expertName: "赵主任",
            expertName: "赵主委",
            isChief: true,
            reviewStatus: "applying",
            expertConclusion: "",
@@ -867,7 +867,7 @@
      this.sendDialogVisible = true;
    },
    // 发送给主任专家
    // 发送给主委专家
    handleSendToChiefExpert() {
      const chiefExpert = this.expertReviews.find(
        expert => expert.isChief && expert.reviewStatus === "applying"
@@ -984,7 +984,7 @@
        <div>
          <p><strong>专家姓名:</strong>${expert.expertName}</p>
          <p><strong>专家类型:</strong>${
            expert.isChief ? "主任专家" : "专家"
            expert.isChief ? "主委专家" : "专家"
          }</p>
          <p><strong>审查状态:</strong>${this.statusTextFilter(
            expert.reviewStatus
@@ -1476,7 +1476,7 @@
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
/* 主任专家行高亮 */
/* 主委专家行高亮 */
:deep(.chief-expert-row) {
  background-color: #fff7e6 !important;
}
src/views/business/course/components/api/mockMaintenanceApi.js
@@ -316,7 +316,7 @@
    setTimeout(() => {
      // 模拟导出数据处理
      const exportData = maintenanceData.rows.map(item => ({
        '案例编号': item.caseNo,
        '住院号': item.caseNo,
        '捐献者姓名': item.donorName,
        '性别': item.gender === '0' ? '男' : '女',
        '年龄': item.age,
src/views/business/course/index.vue
@@ -73,7 +73,7 @@
            </div>
            <el-descriptions :column="2" border>
              <el-descriptions-item label="案例编号">
              <el-descriptions-item label="住院号">
                {{ caseInfo.caseNo }}
              </el-descriptions-item>
              <el-descriptions-item label="住院号">
src/views/business/decide/DecideInfo.vue
@@ -18,7 +18,7 @@
      <el-form :model="form" ref="form" :rules="rules" label-width="120px">
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="案例编号" prop="hospitalNo">
            <el-form-item label="住院号" prop="hospitalNo">
              <el-input
                v-model="form.hospitalNo"
                :readonly="!isEdit"
@@ -84,10 +84,17 @@
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="判定医生" prop="judgmentDoctor">
              <el-input v-model="form.judgmentDoctor" :readonly="!isEdit" />
            <el-form-item label="判定医生一" prop="judgmentDoctor">
              <el-input v-model="form.judgmentDoctorone" :readonly="!isEdit" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="判定医生二" prop="judgmentDoctor">
              <el-input v-model="form.judgmentDoctortwo" :readonly="!isEdit" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="8">
            <el-form-item label="登记人" prop="registrant">
              <el-input v-model="form.registrant" :readonly="!isEdit" />
@@ -356,9 +363,9 @@
    this.getAttachmentList();
  },
  methods: {
    // 生成案例编号
    // 生成住院号
    generateHospitalNo() {
      // 模拟生成案例编号:D + 时间戳后6位
      // 模拟生成住院号:D + 时间戳后6位
      const timestamp = Date.now().toString();
      this.form.hospitalNo = 'D' + timestamp.slice(-6);
    },
src/views/business/decide/index.vue
@@ -163,6 +163,12 @@
          width="120"
        />
        <el-table-column
          label="判定医生二"
          align="center"
          prop="judgmentDoctortwo"
          width="120"
        />
        <el-table-column
          label="登记时间"
          align="center"
          prop="registrationTime"
@@ -185,7 +191,7 @@
        <el-table-column
          label="操作"
          align="center"
          width="180"
          width="210"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
src/views/business/ethicalReview/ethicalReviewInfo.vue
@@ -180,7 +180,7 @@
    <el-card class="expert-card">
      <div slot="header" class="clearfix">
        <span class="detail-title"
          >专家审查情况 (18位专家 + 1位主任专家)</span
          >专家审查情况 (18位专家 + 1位主委专家)</span
        >
        <div style="float: right;">
          <el-button
@@ -197,7 +197,7 @@
            @click="handleSendToChiefExpert"
            :disabled="!canSendToChiefExpert"
          >
            发送主任专家
            发送主委专家
          </el-button>
          <el-button
            size="mini"
@@ -223,7 +223,7 @@
          </el-col>
          <el-col :span="6">
            <div class="stat-item">
              <span class="stat-label">主任专家状态:</span>
              <span class="stat-label">主委专家状态:</span>
              <span class="stat-value">{{ chiefExpertStatus }}</span>
            </div>
          </el-col>
@@ -268,7 +268,7 @@
              size="mini"
              type="danger"
              style="margin-left: 5px;"
              >主任</el-tag
              >主委</el-tag
            >
          </template>
        </el-table-column>
@@ -276,7 +276,7 @@
        <el-table-column label="专家类型" width="100" align="center">
          <template slot-scope="scope">
            <span :class="scope.row.isChief ? 'chief-expert' : 'normal-expert'">
              {{ scope.row.isChief ? "主任专家" : "专家" }}
              {{ scope.row.isChief ? "主委专家" : "专家" }}
            </span>
          </template>
        </el-table-column>
@@ -371,7 +371,7 @@
        <el-form-item label="专家类型" prop="expertType">
          <el-radio-group v-model="sendForm.expertType">
            <el-radio label="normal">专家</el-radio>
            <el-radio label="chief">主任专家</el-radio>
            <el-radio label="chief">主委专家</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item
@@ -624,7 +624,7 @@
          expertOpinion: "",
          reviewTime: ""
        },
        // 主任专家(1位)
        // 主委专家(1位)
        {
          id: 19,
          expertName: "孔心涓",
@@ -653,7 +653,7 @@
        { id: 1, name: "张教授", type: "normal" },
        { id: 2, name: "李教授", type: "normal" },
        { id: 3, name: "王教授", type: "normal" },
        { id: 4, name: "赵主任", type: "chief" }
        { id: 4, name: "赵主委", type: "chief" }
      ]
    };
  },
@@ -664,7 +664,7 @@
        expert => !expert.isChief && expert.expertConclusion === "approved"
      ).length;
    },
    // 计算属性:主任专家状态
    // 计算属性:主委专家状态
    chiefExpertStatus() {
      const chiefExpert = this.expertReviews.find(expert => expert.isChief);
      return chiefExpert
@@ -708,7 +708,7 @@
        ).length > 0
      );
    },
    // 是否可以发送给主任专家(需要至少12个专家同意)
    // 是否可以发送给主委专家(需要至少12个专家同意)
    canSendToChiefExpert() {
      return (
        this.approvedNormalExperts >= 12 &&
@@ -801,10 +801,10 @@
            expertOpinion: "",
            reviewTime: ""
          },
          // 主任专家(1位)
          // 主委专家(1位)
          {
            id: 19,
            expertName: "赵主任",
            expertName: "赵主委",
            isChief: true,
            reviewStatus: "applying",
            expertConclusion: "",
@@ -913,7 +913,7 @@
      this.sendDialogVisible = true;
    },
    // 发送给主任专家
    // 发送给主委专家
    handleSendToChiefExpert() {
      const chiefExpert = this.expertReviews.find(
        expert => expert.isChief && expert.reviewStatus === "applying"
@@ -1030,7 +1030,7 @@
        <div>
          <p><strong>专家姓名:</strong>${expert.expertName}</p>
          <p><strong>专家类型:</strong>${
            expert.isChief ? "主任专家" : "专家"
            expert.isChief ? "主委专家" : "专家"
          }</p>
          <p><strong>审查状态:</strong>${this.statusTextFilter(
            expert.reviewStatus
@@ -1522,7 +1522,7 @@
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
/* 主任专家行高亮 */
/* 主委专家行高亮 */
:deep(.chief-expert-row) {
  background-color: #fff7e6 !important;
}
src/views/business/ethicalReview/index.vue
@@ -196,7 +196,7 @@
        <el-table-column
          label="操作"
          align="center"
          width="200"
          width="260"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
src/views/business/maintain/index.vue
@@ -115,7 +115,7 @@
      >
        <el-table-column type="selection" width="55" align="center" />
        <el-table-column
          label="案例编号"
          label="住院号"
          align="center"
          prop="caseNo"
          width="120"
src/views/business/maintain/maintainInfo.vue
@@ -17,7 +17,7 @@
      <el-form :model="form" ref="form" label-width="120px">
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="案例编号" prop="caseNo">
            <el-form-item label="住院号" prop="caseNo">
              <el-input v-model="form.caseNo" :readonly="!isEdit" />
            </el-form-item>
          </el-col>
src/views/business/maintain/mockMaintenanceApi.js
@@ -316,7 +316,7 @@
    setTimeout(() => {
      // 模拟导出数据处理
      const exportData = maintenanceData.rows.map(item => ({
        '案例编号': item.caseNo,
        '住院号': item.caseNo,
        '捐献者姓名': item.donorName,
        '性别': item.gender === '0' ? '男' : '女',
        '年龄': item.age,
src/views/business/transfer/TransportEdit.vue
@@ -22,8 +22,8 @@
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="案例编号" prop="caseNo">
              <el-input v-model="formData.caseNo" placeholder="请输入案例编号" />
            <el-form-item label="住院号" prop="caseNo">
              <el-input v-model="formData.caseNo" placeholder="请输入住院号" />
            </el-form-item>
          </el-col>
        </el-row>
@@ -191,7 +191,7 @@
      formData: this.getDefaultFormData(),
      formRules: {
        caseNo: [
          { required: true, message: '请输入案例编号', trigger: 'blur' }
          { required: true, message: '请输入住院号', trigger: 'blur' }
        ],
        donorName: [
          { required: true, message: '请输入捐献者姓名', trigger: 'blur' }
src/views/business/transfer/index.vue
@@ -17,10 +17,10 @@
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="案例编号" prop="caseNo">
        <el-form-item label="住院号" prop="caseNo">
          <el-input
            v-model="queryParams.caseNo"
            placeholder="请输入案例编号"
            placeholder="请输入住院号"
            clearable
            style="width: 200px"
            @keyup.enter.native="handleQuery"
@@ -158,7 +158,7 @@
      <el-table-column label="序号" type="index" width="60" align="center" />
      <el-table-column label="转运单号" align="center" prop="id" width="140" />
      <el-table-column
        label="案例编号"
        label="住院号"
        align="center"
        prop="caseNo"
        width="140"
src/views/business/transfer/transportDetail.vue
@@ -8,7 +8,7 @@
      </div>
      <el-descriptions :column="2" border>
        <el-descriptions-item label="转运单号">{{ transportData.id }}</el-descriptions-item>
        <el-descriptions-item label="案例编号">{{ transportData.caseNo }}</el-descriptions-item>
        <el-descriptions-item label="住院号">{{ transportData.caseNo }}</el-descriptions-item>
        <el-descriptions-item label="捐献者姓名">{{ transportData.donorName }}</el-descriptions-item>
        <el-descriptions-item label="性别">{{ transportData.gender }}</el-descriptions-item>
        <el-descriptions-item label="年龄">{{ transportData.age }}岁</el-descriptions-item>
src/views/project/DonationProcess/index.vue
@@ -28,7 +28,12 @@
          />
        </el-form-item>
        <el-form-item label="状态" prop="recordstate">
          <el-select v-model="queryParams.recordstate" placeholder="请选择状态" clearable size="small">
          <el-select
            v-model="queryParams.recordstate"
            placeholder="请选择状态"
            clearable
            size="small"
          >
            <el-option label="全部" value="" />
            <el-option label="待审核" value="0" />
            <el-option label="已审核" value="1" />
@@ -36,10 +41,16 @@
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"
          <el-button
            type="primary"
            icon="el-icon-search"
            size="mini"
            @click="handleQuery"
            >搜索</el-button
          >
          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
            >重置</el-button
          >
        </el-form-item>
      </el-form>
    </el-card>
@@ -63,7 +74,7 @@
            <div class="stat-icon">⏳</div>
            <div class="stat-info">
              <div class="stat-count">{{ stats.pendingCount }}</div>
              <div class="stat-label">待审核</div>
              捐献中
            </div>
          </div>
        </el-card>
@@ -74,7 +85,7 @@
            <div class="stat-icon">✅</div>
            <div class="stat-info">
              <div class="stat-count">{{ stats.approvedCount }}</div>
              <div class="stat-label">已审核</div>
              <div class="stat-label">已完成</div>
            </div>
          </div>
        </el-card>
@@ -100,13 +111,25 @@
      :default-sort="{ prop: 'donatetime', order: 'descending' }"
      style="width: 100%; margin-top: 20px;"
    >
      <el-table-column label="上报时间" align="center" prop="donatetime" width="110" fixed="left">
      <el-table-column
        label="上报时间"
        align="center"
        prop="donatetime"
        width="110"
        fixed="left"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span>
        </template>
      </el-table-column>
      <el-table-column label="进度" align="center" prop="coreteamassessconclusion" width="100" fixed="left">
      <el-table-column
        label="进度"
        align="center"
        prop="coreteamassessconclusion"
        width="100"
        fixed="left"
      >
        <template slot-scope="scope">
          <el-tag :type="getStatusTag(scope.row.recordstate)">
            {{ getStatusText(scope.row.recordstate) }}
@@ -118,26 +141,45 @@
      <el-table-column label="性别" align="center" prop="sex" width="80">
        <template slot-scope="scope">
          <span>{{ scope.row.sex === 1 ? '男' : '女' }}</span>
          <span>{{ scope.row.sex === 1 ? "男" : "女" }}</span>
        </template>
      </el-table-column>
      <el-table-column label="年龄" align="center" prop="age" width="80" />
      <el-table-column label="证件号码" align="center" prop="idcardno" width="180" />
      <el-table-column
        label="证件号码"
        align="center"
        prop="idcardno"
        width="180"
      />
      <el-table-column label="协调员" align="center" prop="reportername" width="100" />
      <el-table-column
        label="协调员"
        align="center"
        prop="reportername"
        width="100"
      />
      <el-table-column label="治疗医院" align="center" prop="treatmenthospitalname" width="150" show-overflow-tooltip />
      <el-table-column label="转为案例时间" align="center" prop="donatetime" width="110">
      <el-table-column
        label="转为案例时间"
        align="center"
        prop="donatetime"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span>
        </template>
      </el-table-column>
      <!-- 第一次医学评估 -->
      <el-table-column label="第一次评估结论" align="center" prop="coreteamassessconclusion" width="120">
      <el-table-column
        label="第一次评估结论"
        align="center"
        prop="coreteamassessconclusion"
        width="120"
      >
        <template slot-scope="scope">
          <dict-tag
            :options="dict.type.sys_BaseAssessConclusion"
@@ -146,14 +188,26 @@
        </template>
      </el-table-column>
      <el-table-column label="第一次评估时间" align="center" prop="coreteamassesstime" width="110">
      <el-table-column
        label="第一次评估时间"
        align="center"
        prop="coreteamassesstime"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}") }}</span>
          <span>{{
            parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}")
          }}</span>
        </template>
      </el-table-column>
      <!-- 第二次医学评估 -->
      <el-table-column label="第二次评估结论" align="center" prop="coreteamassessconclusion" width="120">
      <el-table-column
        label="第二次评估结论"
        align="center"
        prop="coreteamassessconclusion"
        width="120"
      >
        <template slot-scope="scope">
          <dict-tag
            :options="dict.type.sys_BaseAssessConclusion"
@@ -162,19 +216,36 @@
        </template>
      </el-table-column>
      <el-table-column label="第二次评估时间" align="center" prop="coreteamassesstime" width="110">
      <el-table-column
        label="第二次评估时间"
        align="center"
        prop="coreteamassesstime"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}") }}</span>
          <span>{{
            parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}")
          }}</span>
        </template>
      </el-table-column>
      <el-table-column label="亲属确认时间" align="center" prop="signdate" width="110">
      <el-table-column
        label="亲属确认时间"
        align="center"
        prop="signdate"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.signdate, "{y}-{m}-{d}") }}</span>
        </template>
      </el-table-column>
      <el-table-column label="伦理审查结论" align="center" prop="expertconclusion" width="120">
      <el-table-column
        label="伦理审查结论"
        align="center"
        prop="expertconclusion"
        width="120"
      >
        <template slot-scope="scope">
          <dict-tag
            :options="dict.type.sys_EthicalReview"
@@ -183,27 +254,55 @@
        </template>
      </el-table-column>
      <el-table-column label="伦理审查时间" align="center" prop="conclusiontime" width="110">
      <el-table-column
        label="伦理审查时间"
        align="center"
        prop="conclusiontime"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.conclusiontime, "{y}-{m}-{d}") }}</span>
        </template>
      </el-table-column>
      <el-table-column label="器官分配数量" align="center" prop="organcount" width="100" />
      <el-table-column
        label="器官分配数量"
        align="center"
        prop="organcount"
        width="100"
      />
      <el-table-column label="获取见证时间" align="center" prop="operationbegtime" width="110">
      <el-table-column
        label="获取见证时间"
        align="center"
        prop="operationbegtime"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.operationbegtime, "{y}-{m}-{d}") }}</span>
          <span>{{
            parseTime(scope.row.operationbegtime, "{y}-{m}-{d}")
          }}</span>
        </template>
      </el-table-column>
      <el-table-column label="完成登记时间" align="center" prop="completetime" width="110">
      <el-table-column
        label="完成登记时间"
        align="center"
        prop="completetime"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.completetime, "{y}-{m}-{d}") }}</span>
        </template>
      </el-table-column>
      <el-table-column label="捐献进度" align="center" prop="workflow" width="120" fixed="right">
      <el-table-column
        label="捐献进度"
        align="center"
        prop="workflow"
        width="120"
        fixed="right"
      >
        <template slot-scope="scope">
          <div v-if="!scope.row.terminationCase">
            <dict-tag
@@ -287,7 +386,7 @@
<script>
// 导入模拟数据生成工具
import Mock from 'mockjs';
import Mock from "mockjs";
export default {
  name: "Donatebaseinfo",
@@ -337,27 +436,29 @@
    /** 生成模拟数据 */
    generateMockData() {
      const mockTemplate = {
        'list|15-30': [{
          'id|+1': 1001,
          'name': '@cname',
          'sex|1': [1, 2], // 1:男, 2:女
          'age|18-65': 1,
          'idcardno': /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dX]$/,
          'reportername': '@cname',
          'treatmenthospitalname': '@ctitle(3, 5)医院',
          'donatetime': '@datetime("yyyy-MM-dd HH:mm:ss")',
          'coreteamassessconclusion|1': ['1', '2', '3'], // 评估结论
          'coreteamassesstime': '@datetime("yyyy-MM-dd HH:mm:ss")',
          'signdate': '@datetime("yyyy-MM-dd HH:mm:ss")',
          'expertconclusion|1': ['1', '2', '3'], // 伦理审查结论
          'conclusiontime': '@datetime("yyyy-MM-dd HH:mm:ss")',
          'organcount|0-5': 1,
          'operationbegtime': '@datetime("yyyy-MM-dd HH:mm:ss")',
          'completetime': '@datetime("yyyy-MM-dd HH:mm:ss")',
          'workflow|1': ['1', '2', '3', '4', '5'], // 工作流状态
          'recordstate|1': ['0', '1', '99'], // 0:待审核, 1:已审核, 99:已终止
          'terminationCase|1': [true, false]
        }]
        "list|15-30": [
          {
            "id|+1": 1001,
            name: "@cname",
            "sex|1": [1, 2], // 1:男, 2:女
            "age|18-65": 1,
            idcardno: /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dX]$/,
            reportername: "@cname",
            treatmenthospitalname: "@ctitle(3, 5)医院",
            donatetime: '@datetime("yyyy-MM-dd HH:mm:ss")',
            "coreteamassessconclusion|1": ["1", "2", "3"], // 评估结论
            coreteamassesstime: '@datetime("yyyy-MM-dd HH:mm:ss")',
            signdate: '@datetime("yyyy-MM-dd HH:mm:ss")',
            "expertconclusion|1": ["1", "2", "3"], // 伦理审查结论
            conclusiontime: '@datetime("yyyy-MM-dd HH:mm:ss")',
            "organcount|0-5": 1,
            operationbegtime: '@datetime("yyyy-MM-dd HH:mm:ss")',
            completetime: '@datetime("yyyy-MM-dd HH:mm:ss")',
            "workflow|1": ["1", "2", "3", "4", "5"], // 工作流状态
            "recordstate|1": ["0", "1", "99"], // 0:待审核, 1:已审核, 99:已终止
            "terminationCase|1": [true, false]
          }
        ]
      };
      return Mock.mock(mockTemplate).list;
@@ -385,13 +486,14 @@
          );
        }
        if (this.queryParams.recordstate) {
          filteredData = filteredData.filter(item =>
            item.recordstate === this.queryParams.recordstate
          filteredData = filteredData.filter(
            item => item.recordstate === this.queryParams.recordstate
          );
        }
        // 分页处理
        const startIndex = (this.queryParams.pageNum - 1) * this.queryParams.pageSize;
        const startIndex =
          (this.queryParams.pageNum - 1) * this.queryParams.pageSize;
        const endIndex = startIndex + this.queryParams.pageSize;
        this.donatebaseinfoList = filteredData.slice(startIndex, endIndex);
        this.total = filteredData.length;
@@ -405,40 +507,49 @@
    /** 更新统计数据 */
    updateStats(data) {
      this.stats.totalCount = data.length;
      this.stats.pendingCount = data.filter(item => item.recordstate === '0').length;
      this.stats.approvedCount = data.filter(item => item.recordstate === '1').length;
      this.stats.terminatedCount = data.filter(item => item.recordstate === '99').length;
      this.stats.pendingCount = data.filter(
        item => item.recordstate === "0"
      ).length;
      this.stats.approvedCount = data.filter(
        item => item.recordstate === "1"
      ).length;
      this.stats.terminatedCount = data.filter(
        item => item.recordstate === "99"
      ).length;
    },
    /** 获取状态标签样式 */
    getStatusTag(status) {
      const statusMap = {
        '0': 'warning',  // 待审核
        '1': 'success',  // 已审核
        '99': 'danger'   // 已终止
        "0": "warning", // 待审核
        "1": "success", // 已审核
        "99": "danger" // 已终止
      };
      return statusMap[status] || 'info';
      return statusMap[status] || "info";
    },
    /** 获取状态文本 */
    getStatusText(status) {
      const textMap = {
        '0': '待审核',
        '1': '已审核',
        '99': '已终止'
        "0": "捐献中",
        "1": "已完成",
        "99": "已终止"
      };
      return textMap[status] || '未知状态';
      return textMap[status] || "未知状态";
    },
    /** 时间格式化 */
    parseTime(time, format) {
      if (!time) return '-';
      if (!time) return "-";
      const date = new Date(time);
      const year = date.getFullYear();
      const month = (date.getMonth() + 1).toString().padStart(2, '0');
      const day = date.getDate().toString().padStart(2, '0');
      const month = (date.getMonth() + 1).toString().padStart(2, "0");
      const day = date
        .getDate()
        .toString()
        .padStart(2, "0");
      if (format === '{y}-{m}-{d}') {
      if (format === "{y}-{m}-{d}") {
        return `${year}-${month}-${day}`;
      }
      return time;
@@ -481,10 +592,14 @@
    /** 提交审核 */
    submitApprove() {
      // 模拟审核提交
      const index = this.donatebaseinfoList.findIndex(item => item.id === this.currentRecord.id);
      const index = this.donatebaseinfoList.findIndex(
        item => item.id === this.currentRecord.id
      );
      if (index !== -1) {
        this.donatebaseinfoList[index].recordstate = this.approveForm.approveResult;
        this.$message.success('审核成功');
        this.donatebaseinfoList[
          index
        ].recordstate = this.approveForm.approveResult;
        this.$message.success("审核成功");
        this.approveVisible = false;
        this.getList(); // 重新加载更新统计
      }
@@ -512,19 +627,19 @@
}
.stats-card.total {
  border-left: 4px solid #409EFF;
  border-left: 4px solid #409eff;
}
.stats-card.pending {
  border-left: 4px solid #E6A23C;
  border-left: 4px solid #e6a23c;
}
.stats-card.approved {
  border-left: 4px solid #67C23A;
  border-left: 4px solid #67c23a;
}
.stats-card.terminated {
  border-left: 4px solid #F56C6C;
  border-left: 4px solid #f56c6c;
}
.stat-content {
src/views/project/donatebaseinfo/index.vue
@@ -203,7 +203,7 @@
        </template>
      </el-table-column>
      <el-table-column
        label="捐献编号"
        label="住院号"
        align="center"
        prop="donorno"
        width="200"
@@ -373,7 +373,7 @@
        >
          <el-row style="margin-top: 40px">
            <el-col :span="8">
              <el-form-item label="捐献编号" prop="donorno">
              <el-form-item label="住院号" prop="donorno">
                <el-input v-model="form.donorno" disabled />
              </el-form-item>
            </el-col>
src/views/project/donateconsolationfund/index.vue
@@ -797,7 +797,7 @@
      updatedatas: {},
      //当前选中捐献者姓名
      curdonordoname: "",
      //当前选中捐献者案例编号
      //当前选中捐献者住院号
      curdonorno: "",
      // 遮罩层
      loading: true,
src/views/project/donorcharge/donorcharge/index.vue
@@ -46,7 +46,7 @@
          <span>{{ parseTime(scope.row.donatetime, '{y}-{m}-{d}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="案例编号" align="center" prop="donateno" />
      <el-table-column label="住院号" align="center" prop="donateno" />
      <el-table-column label="捐献姓名" align="center" prop="name" />
      <el-table-column label="捐献类别" align="center" prop="donationcategory" />
      <el-table-column label="捐献器官" align="center" prop="donateorgan" />
src/views/project/donorcharge/donorchargedetail/index.vue
@@ -45,10 +45,10 @@
          </el-col> </el-row
        ><el-row
          ><el-col :span="10"
            ><el-form-item label="案例编号" prop="donateno">
            ><el-form-item label="住院号" prop="donateno">
              <el-input
                v-model="form.donateno"
                placeholder="请输入案例编号"
                placeholder="请输入住院号"
                :disabled="true"
              />
            </el-form-item>
src/views/project/fundcheck/ethicalExpertFeeCheck/index.vue
@@ -842,7 +842,7 @@
      updatedatas: {},
      //当前选中捐献者姓名
      curdonordoname: "",
      //当前选中捐献者案例编号
      //当前选中捐献者住院号
      curdonorno: "",
      // 遮罩层
      loading: true,
src/views/project/fundcheck/expertFeeCheck/index.vue
@@ -530,7 +530,7 @@
      updatedatas: {},
      //当前选中捐献者姓名
      curdonordoname: "",
      //当前选中捐献者案例编号
      //当前选中捐献者住院号
      curdonorno: "",
      // 遮罩层
      loading: true,
src/views/project/fundcheck/medicalCostCheck/index.vue
@@ -550,7 +550,7 @@
      updatedatas: {},
      //当前选中捐献者姓名
      curdonordoname: "",
      //当前选中捐献者案例编号
      //当前选中捐献者住院号
      curdonorno: "",
      // 遮罩层
      loading: true,
src/views/project/fundcheck/officeExpenseCheck/index.vue
@@ -993,7 +993,7 @@
      updatedatas: {},
      //当前选中捐献者姓名
      curdonordoname: "",
      //当前选中捐献者案例编号
      //当前选中捐献者住院号
      curdonorno: "",
      // 遮罩层
      loading: true,
src/views/project/fundcheck/performanceCheck/index.vue
@@ -224,7 +224,7 @@
      updatedatas: {},
      //当前选中捐献者姓名
      curdonordoname: "",
      //当前选中捐献者案例编号
      //当前选中捐献者住院号
      curdonorno: "",
      // 遮罩层
      loading: true,
src/views/project/organallocation/index.vue
@@ -480,7 +480,7 @@
        city: null
      },
      //当前选中捐献案例编号
      //当前选中捐献住院号
      curdonorno: "",
      //当前捐献者id
      curInfoid: "",
src/views/project/organization/index.vue
@@ -243,21 +243,7 @@
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="5">
            <el-form-item label="医院性质" prop="hospitalnature">
              <el-select
                v-model="form.hospitalnature"
                placeholder="请选择医院性质"
              >
                <el-option
                  v-for="dict in dict.type.sys_HospitalNature"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="5">
            <el-form-item label="医院编码" prop="medicalcode">
              <el-input
@@ -277,6 +263,31 @@
                placeholder="选择注册时间"
              >
              </el-date-picker>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="10">
            <el-form-item label="医院性质" prop="hospitalnature">
              <el-select
                v-model="form.hospitalnature"
                placeholder="请选择医院性质"
              >
                <el-option
                  v-for="dict in dict.type.sys_HospitalNature"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="10">
            <el-form-item label="协调员" prop="coordinator">
              <el-input
                v-model="form.coordinator"
                placeholder="请输入机构协调员"
              />
            </el-form-item>
          </el-col>
        </el-row>
@@ -400,7 +411,7 @@
          { required: true, message: "组织名称不能为空", trigger: "blur" }
        ],
        hospitalnature: [
          { required: true, message: "医院性质不能为空", trigger: "blur" },
          { required: true, message: "医院性质不能为空", trigger: "blur" }
        ],
        regionallevel: [
          { required: true, message: "所属地市不能为空", trigger: "blur" }