WXL
2026-01-28 bcb9976e7680ce67fadb6fec7ab5fca36552cdbc
src/views/business/assess/assessInfo.vue
@@ -76,13 +76,131 @@
          当前角色:{{ currentDepartment }}评估人员
        </span>
      </div>
      <el-row>
        <el-form-item label-width="100px" label="评估器官">
          <el-checkbox-group v-model="organdecision">
            <el-checkbox
              v-for="item in organselection"
              :key="item"
              :label="item"
              >{{ item }}
            </el-checkbox>
          </el-checkbox-group>
          <el-input
            v-if="organdecision.includes('其他')"
            v-model="assessmentData.organdecisionOther"
            placeholder="请输入其他捐献决定的具体内容"
            style="margin-top: 10px; width: 300px;"
          ></el-input>
        </el-form-item>
      </el-row>
      <el-table
        :data="organAssessmentList"
        v-loading="assessmentLoading"
        style="width: 100%"
        :row-class-name="getRowClassName"
        :expand-row-keys="expandedRowKeys"
        @expand-change="handleExpandChange"
        row-key="organType"
      >
        <el-table-column type="expand" width="60">
          <template slot-scope="scope">
            <div class="organ-expand-content" v-if="scope.row.expanded">
              <el-tabs
                v-model="scope.row.activeAssessmentTab"
                type="card"
                class="organ-detail-tabs"
              >
                <!-- 动态生成评估Tab -->
                <el-tab-pane
                  v-for="(assessment, index) in scope.row.assessments"
                  :key="index"
                  :label="`第${index + 1}次评估`"
                  :name="`assessment_${index}`"
                >
                  <organ-assessment-form
                    :organ-data="scope.row"
                    :assessment-data="assessment"
                    :assessment-index="index"
                    :readonly="!canAssessOrgan(scope.row)"
                    @save="handleSaveOrganAssessment"
                    @add-assessment="handleAddAssessment"
                  />
                </el-tab-pane>
                <!-- 添加评估按钮 -->
                <el-tab-pane name="add" v-if="canAssessOrgan(scope.row)">
                  <template slot="label">
                    <el-button
                      type="text"
                      icon="el-icon-plus"
                      @click.stop="handleAddNewAssessment(scope.row)"
                      size="mini"
                    >
                      新增评估
                    </el-button>
                  </template>
                  <div class="add-assessment-prompt">
                    <el-empty description="点击上方按钮添加新的评估"></el-empty>
                  </div>
                </el-tab-pane>
                <!-- 评估汇总Tab -->
                <el-tab-pane label="评估汇总" name="summary">
                  <div class="assessment-summary">
                    <el-descriptions title="评估结果汇总" :column="2" border>
                      <el-descriptions-item label="器官类型">{{
                        scope.row.organName
                      }}</el-descriptions-item>
                      <el-descriptions-item label="评估科室">{{
                        scope.row.department
                      }}</el-descriptions-item>
                      <el-descriptions-item label="评估次数" :span="2">
                        <el-tag type="info"
                          >{{ scope.row.assessments.length }}次</el-tag
                        >
                      </el-descriptions-item>
                      <el-descriptions-item label="最新评估时间" :span="2">
                        {{ getLatestAssessmentTime(scope.row) || "-" }}
                      </el-descriptions-item>
                    </el-descriptions>
                    <!-- 附件汇总 -->
                    <el-card header="所有评估附件" style="margin-top: 20px;">
                      <el-table
                        :data="getAllAttachments(scope.row)"
                        size="small"
                        empty-text="暂无附件"
                      >
                        <el-table-column label="附件名称" prop="fileName" />
                        <el-table-column label="评估阶段" width="120">
                          <template slot-scope="{ row }">
                            第{{ row.assessmentIndex + 1 }}次评估
                          </template>
                        </el-table-column>
                        <el-table-column
                          label="上传时间"
                          prop="uploadTime"
                          width="180"
                        />
                        <el-table-column label="操作" width="120">
                          <template slot-scope="{ row }">
                            <el-button
                              type="text"
                              @click="handlePreviewAttachment(row)"
                              >预览</el-button
                            >
                          </template>
                        </el-table-column>
                      </el-table>
                    </el-card>
                  </div>
                </el-tab-pane>
              </el-tabs>
            </div>
          </template>
        </el-table-column>
        <el-table-column
          label="器官类型"
          align="center"
@@ -96,54 +214,51 @@
            />
          </template>
        </el-table-column>
        <el-table-column
          label="评估科室"
          align="center"
          prop="department"
          width="120"
        />
        <el-table-column
          label="评估人员"
          align="center"
          prop="assessor"
        />
        <!-- 新增:第一次评估状态 -->
        <el-table-column label="第一次评估" align="center" >
        <el-table-column label="评估人员" align="center" prop="assessor" />
        <!-- 动态显示评估状态列 -->
        <el-table-column
          v-for="(assessment, index) in getMaxAssessmentCount()"
          :key="index"
          :label="`第${index + 1}次评估`"
          align="center"
          width="120"
        >
          <template slot-scope="scope">
            <el-tag
              :type="getAssessmentTagType(scope.row.firstAssessment.status)"
              v-if="scope.row.assessments[index]"
              :type="getAssessmentTagType(scope.row.assessments[index].status)"
              size="small"
            >
              {{ getAssessmentStatusText(scope.row.firstAssessment.status) }}
              {{ getAssessmentStatusText(scope.row.assessments[index].status) }}
            </el-tag>
            <el-tag v-else type="info" size="small">未评估</el-tag>
          </template>
        </el-table-column>
        <el-table-column label="整体状态" align="center" width="100">
          <template slot-scope="scope">
            <el-tag
              :type="scope.row.assessmentStatus === '1' ? 'success' : 'primary'"
              size="small"
            >
              {{ scope.row.assessmentStatus === "1" ? "已完成" : "评估中" }}
            </el-tag>
          </template>
        </el-table-column>
        <!-- 新增:第二次评估状态 -->
        <el-table-column label="第二次评估" align="center" >
          <template slot-scope="scope">
            <el-tag
              :type="getAssessmentTagType(scope.row.secondAssessment.status)"
              size="small"
            >
              {{ getAssessmentStatusText(scope.row.secondAssessment.status) }}
            </el-tag>
          </template>
        </el-table-column>
        <el-table-column label="整体状态" align="center" >
          <template slot-scope="scope">
            <el-tag
              :type="scope.row.assessmentStatus === '1' ? 'success' : 'warning'"
              size="small"
            >
              {{ scope.row.assessmentStatus === "1" ? "已评估" : "待评估" }}
            </el-tag>
          </template>
        </el-table-column>
        <el-table-column
          label="操作"
          align="center"
          width="180"
          width="150"
          class-name="small-padding fixed-width"
        >
          <template slot-scope="scope">
@@ -151,133 +266,35 @@
              v-if="canAssessOrgan(scope.row)"
              size="mini"
              type="text"
              @click="handleOrganAssess(scope.row)"
              @click="handleToggleExpand(scope.row)"
            >
              评估
              {{
                expandedRowKeys.includes(scope.row.organType) ? "收起" : "详情"
              }}
            </el-button>
            <el-button v-else size="mini" type="text" disabled
              >无权限</el-button
            >
            <el-button
              size="mini"
              type="text"
              @click="handleViewOrganDetail(scope.row)"
            >
              详情
            </el-button>
          </template>
        </el-table-column>
      </el-table>
      <!-- 器官评估详情 - 改为Tab页形式 -->
      <el-dialog
        :title="`${currentOrgan.organName}评估详情`"
        :visible.sync="organDetailVisible"
        width="90%"
        top="5vh"
        class="organ-detail-dialog"
      >
        <el-tabs v-model="activeAssessmentTab" type="card">
          <!-- 第一次评估Tab -->
          <el-tab-pane label="第一次评估" name="first">
            <organ-assessment-form
              :organ-data="currentOrgan"
              :assessment-data="currentOrgan.firstAssessment"
              assessment-type="first"
              :readonly="!canAssessOrgan(currentOrgan)"
              @save="handleSaveOrganAssessment"
            />
          </el-tab-pane>
          <!-- 第二次评估Tab -->
          <el-tab-pane label="第二次评估" name="second">
            <organ-assessment-form
              :organ-data="currentOrgan"
              :assessment-data="currentOrgan.secondAssessment"
              assessment-type="second"
              :readonly="!canAssessOrgan(currentOrgan)"
              @save="handleSaveOrganAssessment"
            />
          </el-tab-pane>
          <!-- 评估汇总Tab -->
          <el-tab-pane label="评估汇总" name="summary">
            <div class="assessment-summary">
              <el-descriptions title="评估结果汇总" :column="2" border>
                <el-descriptions-item label="器官类型">
                  {{ currentOrgan.organName }}
                </el-descriptions-item>
                <el-descriptions-item label="评估科室">
                  {{ currentOrgan.department }}
                </el-descriptions-item>
                <el-descriptions-item label="第一次评估状态">
                  <el-tag :type="getAssessmentTagType(currentOrgan.firstAssessment.status)">
                    {{ getAssessmentStatusText(currentOrgan.firstAssessment.status) }}
                  </el-tag>
                </el-descriptions-item>
                <el-descriptions-item label="第二次评估状态">
                  <el-tag :type="getAssessmentTagType(currentOrgan.secondAssessment.status)">
                    {{ getAssessmentStatusText(currentOrgan.secondAssessment.status) }}
                  </el-tag>
                </el-descriptions-item>
                <el-descriptions-item label="第一次评估时间" :span="2">
                  {{ currentOrgan.firstAssessment.assessmentTime || '-' }}
                </el-descriptions-item>
                <el-descriptions-item label="第二次评估时间" :span="2">
                  {{ currentOrgan.secondAssessment.assessmentTime || '-' }}
                </el-descriptions-item>
              </el-descriptions>
              <!-- 附件汇总 -->
              <el-card header="评估附件" style="margin-top: 20px;">
                <el-table :data="getAllAttachments(currentOrgan)" size="small">
                  <el-table-column label="附件名称" prop="fileName" />
                  <el-table-column label="评估阶段" >
                    <template slot-scope="{row}">
                      {{ row.assessmentType === 'first' ? '第一次评估' : '第二次评估' }}
                    </template>
                  </el-table-column>
                  <el-table-column label="上传时间" prop="uploadTime" width="180" />
                  <el-table-column label="操作" width="120">
                    <template slot-scope="{row}">
                      <el-button type="text" @click="handlePreviewAttachment(row)">预览</el-button>
                    </template>
                  </el-table-column>
                </el-table>
              </el-card>
            </div>
          </el-tab-pane>
        </el-tabs>
        <div slot="footer" class="dialog-footer">
          <el-button @click="organDetailVisible = false">关闭</el-button>
          <el-button
            v-if="canAssessOrgan(currentOrgan)"
            type="primary"
            @click="handleSaveAllAssessments"
          >
            保存所有评估
          </el-button>
        </div>
      </el-dialog>
    </el-card>
    <!-- 附件预览弹窗 -->
    <!-- <attachment-preview
      :visible="attachmentVisible"
      :attachment-list="attachmentList"
      @close="attachmentVisible = false"
    /> -->
    <!-- 文件预览弹窗 -->
    <FilePreviewDialog
      :visible="attachmentVisible"
      :file="attachmentList"
      :file="currentPreviewFile"
      @close="attachmentVisible = false"
    />
  </div>
</template>
<script>
import { getAssessment, updateOrganAssessment, completeAssessment } from "./mockAssessmentApi";
import {
  getAssessment,
  updateOrganAssessment,
  completeAssessment
} from "./mockAssessmentApi";
import FilePreviewDialog from "@/components/FilePreviewDialog";
import OrganAssessmentForm from "./components/OrganAssessmentForm.vue";
@@ -291,27 +308,19 @@
      organAssessmentList: [],
      attachmentList: [],
      assessmentLoading: false,
      // 器官详情相关数据
      organDetailVisible: false,
      currentOrgan: {
        organType: '',
        organName: '',
        department: '',
        firstAssessment: this.getDefaultAssessment(),
        secondAssessment: this.getDefaultAssessment()
      },
      activeAssessmentTab: 'first',
      organdecision: [],
      // 展开行相关
      expandedRowKeys: [],
      currentPreviewFile: null,
      attachmentVisible: false,
      currentUser: {
        id: "001",
        name: "张医生",
        department: "心脏外科",
        role: "department"
        department: "协调员",
        role: "coordinator"
      },
      attachmentVisible: false,
      //department:心脏、coordinator:协调员
      // 字典选项
      genderOptions: [
        { value: "0", label: "男" },
@@ -336,6 +345,19 @@
        { value: "intestine", label: "肠道" },
        { value: "cornea", label: "角膜" },
        { value: "skin", label: "皮肤" }
      ],
      organselection: [
        "肝脏",
        "双肾",
        "左肾",
        "右肾",
        "心脏",
        "肺脏",
        "胰腺",
        "小肠",
        "双眼组织",
        "遗体",
        "其他"
      ]
    };
  },
@@ -347,9 +369,13 @@
      return this.currentUser.department;
    },
    allOrgansAssessed() {
      return this.organAssessmentList.every(organ =>
        organ.firstAssessment.status === 'assessed' &&
        organ.secondAssessment.status === 'assessed'
      return this.organAssessmentList.every(
        organ =>
          organ.assessments &&
          organ.assessments.length > 0 &&
          organ.assessments.every(
            assessment => assessment.status === "assessed"
          )
      );
    }
  },
@@ -361,11 +387,11 @@
    // 获取默认评估数据结构
    getDefaultAssessment() {
      return {
        status: 'pending', // pending, assessing, assessed
        assessmentTime: '',
        assessor: '',
        functionStatus: '',
        assessmentOpinion: '',
        status: "pending",
        assessmentTime: "",
        assessor: "",
        functionStatus: "",
        assessmentOpinion: "",
        attachments: [],
        clinicalData: {},
        labResults: {}
@@ -379,7 +405,9 @@
        .then(response => {
          if (response.code === 200) {
            this.assessmentData = response.data.caseInfo;
            this.organAssessmentList = this.transformOrganData(response.data.organAssessments || []);
            this.organAssessmentList = this.transformOrganData(
              response.data.organAssessments || []
            );
          }
          this.assessmentLoading = false;
        })
@@ -389,21 +417,27 @@
        });
    },
    // 转换器官数据格式,支持两次评估
    // 转换器官数据格式,支持多次评估
    transformOrganData(organList) {
      return organList.map(organ => {
        const organName = this.getOrganName(organ.organType);
        // 确保有两次评估的数据结构
        if (!organ.firstAssessment) {
          organ.firstAssessment = this.getDefaultAssessment();
        // 转换为多次评估的数据结构
        const assessments = [];
        if (organ.firstAssessment) {
          assessments.push({ ...organ.firstAssessment, index: 0 });
        }
        if (!organ.secondAssessment) {
          organ.secondAssessment = this.getDefaultAssessment();
        if (organ.secondAssessment) {
          assessments.push({ ...organ.secondAssessment, index: 1 });
        }
        // 可以继续添加更多评估...
        // 设置器官名称
        // 设置器官名称和评估数据
        organ.organName = organName;
        organ.assessments = assessments;
        organ.activeAssessmentTab =
          assessments.length > 0 ? "assessment_0" : "summary";
        organ.expanded = false;
        // 计算整体评估状态
        organ.assessmentStatus = this.calculateOverallStatus(organ);
@@ -412,54 +446,199 @@
      });
    },
    // 计算最大评估次数(用于表头显示)
    getMaxAssessmentCount() {
      const maxCount = Math.max(
        ...this.organAssessmentList.map(organ =>
          organ.assessments ? organ.assessments.length : 0
        )
      );
      return Math.max(maxCount, 2); // 至少显示2列
    },
    // 计算整体评估状态
    calculateOverallStatus(organ) {
      const firstDone = organ.firstAssessment.status === 'assessed';
      const secondDone = organ.secondAssessment.status === 'assessed';
      if (!organ.assessments || organ.assessments.length === 0) return "0";
      if (firstDone && secondDone) return '1'; // 已完成
      if (firstDone || secondDone) return '2'; // 部分完成
      return '0'; // 未开始
      const allAssessed = organ.assessments.every(
        assessment => assessment.status === "assessed"
      );
      const someAssessed = organ.assessments.some(
        assessment => assessment.status === "assessed"
      );
      if (allAssessed) return "1";
      if (someAssessed) return "2";
      return "0";
    },
    // 切换展开行
    handleToggleExpand(row) {
      const key = row.organType;
      const index = this.expandedRowKeys.indexOf(key);
      if (index > -1) {
        this.expandedRowKeys.splice(index, 1);
        row.expanded = false;
      } else {
        this.expandedRowKeys = [key];
        this.organAssessmentList.forEach(item => {
          item.expanded = item.organType === key;
        });
      }
    },
    // 展开行变化
    handleExpandChange(row, expandedRows) {
      this.expandedRowKeys = expandedRows.map(item => item.organType);
      this.organAssessmentList.forEach(item => {
        item.expanded = this.expandedRowKeys.includes(item.organType);
      });
    },
    // 添加新评估
    handleAddNewAssessment(organ) {
      const newAssessment = {
        ...this.getDefaultAssessment(),
        index: organ.assessments.length
      };
      organ.assessments.push(newAssessment);
      organ.activeAssessmentTab = `assessment_${organ.assessments.length - 1}`;
      // 更新整体状态
      organ.assessmentStatus = this.calculateOverallStatus(organ);
      this.$message.success("已添加新的评估");
    },
    // 处理添加评估事件
    handleAddAssessment(data) {
      const { organData, currentIndex } = data;
      this.handleAddNewAssessment(organData);
    },
    // 保存评估
    handleSaveOrganAssessment(saveData) {
      const { organData, assessmentData, assessmentIndex } = saveData;
      const organToUpdate = {
        ...organData,
        assessments: organData.assessments.map((assessment, index) =>
          index === assessmentIndex
            ? {
                ...assessmentData,
                status: "assessed",
                assessmentTime: new Date().toISOString(),
                assessor: this.currentUser.name
              }
            : assessment
        )
      };
      // 更新整体状态
      organToUpdate.assessmentStatus = this.calculateOverallStatus(
        organToUpdate
      );
      updateOrganAssessment(organToUpdate)
        .then(response => {
          if (response.code === 200) {
            this.$message.success(`第${assessmentIndex + 1}次评估保存成功`);
            this.getAssessmentDetail();
            // 更新当前展开行的数据
            const index = this.organAssessmentList.findIndex(
              item => item.organType === organData.organType
            );
            if (index !== -1) {
              this.organAssessmentList.splice(index, 1, organToUpdate);
            }
          }
        })
        .catch(error => {
          console.error("保存评估失败:", error);
          this.$message.error("保存失败");
        });
    },
    // 获取最新评估时间
    getLatestAssessmentTime(organ) {
      if (!organ.assessments || organ.assessments.length === 0) return null;
      const assessed = organ.assessments.filter(a => a.assessmentTime);
      if (assessed.length === 0) return null;
      return assessed.sort(
        (a, b) => new Date(b.assessmentTime) - new Date(a.assessmentTime)
      )[0].assessmentTime;
    },
    // 获取所有附件
    getAllAttachments(organ) {
      const attachments = [];
      if (organ.assessments) {
        organ.assessments.forEach((assessment, index) => {
          if (assessment.attachments) {
            assessment.attachments.forEach(att => {
              attachments.push({
                ...att,
                assessmentIndex: index,
                assessmentNumber: index + 1
              });
            });
          }
        });
      }
      return attachments;
    },
    // 预览附件
    handlePreviewAttachment(attachment) {
      this.currentPreviewFile = {
        fileName: attachment.fileName,
        fileUrl: attachment.path || attachment.fileUrl,
        fileType: this.getFileType(attachment.fileName)
      };
      this.attachmentVisible = true;
    },
    // 获取文件类型
    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";
    },
    // 获取评估状态标签类型
    getAssessmentTagType(status) {
      const typeMap = {
        'pending': 'info',
        'assessing': 'warning',
        'assessed': 'success'
        pending: "warning",
        assessing: "primary",
        assessed: "success"
      };
      return typeMap[status] || 'info';
      return typeMap[status] || "info";
    },
    // 获取评估状态文本
    getAssessmentStatusText(status) {
      const textMap = {
        'pending': '待评估',
        'assessing': '评估中',
        'assessed': '已评估'
      };
      return textMap[status] || '未知';
    },
    // 获取功能状态类型
    getFunctionStatusType(status) {
      const typeMap = {
        "1": "success", // 正常
        "2": "warning", // 轻度异常
        "3": "danger", // 重度异常
        "4": "info" // 无法评估
      };
      return typeMap[status] || "info";
    },
    // 获取功能状态文本
    getFunctionStatusText(status) {
      const textMap = {
        "1": "正常",
        "2": "轻度异常",
        "3": "重度异常",
        "4": "无法评估"
        pending: "待评估",
        assessing: "评估中",
        assessed: "已评估"
      };
      return textMap[status] || "未知";
    },
@@ -479,125 +658,6 @@
    // 获取行类名
    getRowClassName({ row }) {
      return this.canAssessOrgan(row) ? "assessable-row" : "non-assessable-row";
    },
    // 格式化时间
    formatTime(time) {
      if (!time) return '';
      return new Date(time).toLocaleString();
    },
    // 查看器官详情
    handleViewOrganDetail(organ) {
      this.currentOrgan = JSON.parse(JSON.stringify(organ));
      this.activeAssessmentTab = 'first';
      this.organDetailVisible = true;
    },
    // 器官评估
    handleOrganAssess(organ) {
      this.currentOrgan = JSON.parse(JSON.stringify(organ));
      this.activeAssessmentTab = 'first';
      this.organDetailVisible = true;
    },
    // 保存单个评估
    handleSaveOrganAssessment(assessmentData, assessmentType) {
      const organToUpdate = {
        ...this.currentOrgan,
        [assessmentType === 'first' ? 'firstAssessment' : 'secondAssessment']: {
          ...assessmentData,
          status: 'assessed',
          assessmentTime: new Date().toISOString(),
          assessor: this.currentUser.name
        }
      };
      // 更新整体状态
      organToUpdate.assessmentStatus = this.calculateOverallStatus(organToUpdate);
      updateOrganAssessment(organToUpdate)
        .then(response => {
          if (response.code === 200) {
            this.$message.success(`${assessmentType === 'first' ? '第一次' : '第二次'}评估保存成功`);
            this.getAssessmentDetail();
            // 自动切换到下一个未完成的评估或汇总页
            this.autoSwitchTab(assessmentType);
          }
        })
        .catch(error => {
          console.error("保存评估失败:", error);
          this.$message.error("保存失败");
        });
    },
    // 自动切换Tab页
    autoSwitchTab(currentType) {
      if (currentType === 'first' && this.currentOrgan.secondAssessment.status === 'pending') {
        this.activeAssessmentTab = 'second';
      } else if (currentType === 'second' ||
                (currentType === 'first' && this.currentOrgan.secondAssessment.status === 'assessed')) {
        this.activeAssessmentTab = 'summary';
      }
    },
    // 保存所有评估
    handleSaveAllAssessments() {
      this.$confirm("确认保存所有评估数据吗?", "确认保存", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(() => {
        const organToUpdate = JSON.parse(JSON.stringify(this.currentOrgan));
        // 更新整体状态
        organToUpdate.assessmentStatus = this.calculateOverallStatus(organToUpdate);
        updateOrganAssessment(organToUpdate)
          .then(response => {
            if (response.code === 200) {
              this.$message.success("所有评估数据保存成功");
              this.getAssessmentDetail();
              this.organDetailVisible = false;
            }
          })
          .catch(error => {
            console.error("保存评估失败:", error);
            this.$message.error("保存失败");
          });
      });
    },
    // 获取所有附件
    getAllAttachments(organ) {
      const attachments = [];
      if (organ.firstAssessment.attachments) {
        organ.firstAssessment.attachments.forEach(att => {
          attachments.push({
            ...att,
            assessmentType: 'first'
          });
        });
      }
      if (organ.secondAssessment.attachments) {
        organ.secondAssessment.attachments.forEach(att => {
          attachments.push({
            ...att,
            assessmentType: 'second'
          });
        });
      }
      return attachments;
    },
    // 预览附件
    handlePreviewAttachment(attachment) {
      // 实现附件预览逻辑
      console.log('预览附件:', attachment);
      this.$message.info('附件预览功能待实现');
    },
    // 状态过滤器
@@ -661,41 +721,36 @@
  margin-bottom: 20px;
}
.assessment-time {
  font-size: 12px;
  color: #909399;
  margin-top: 4px;
}
/* Tab页样式优化 */
.organ-detail-dialog ::v-deep .el-dialog__body {
/* 展开行样式 */
.organ-expand-content {
  padding: 20px;
  max-height: 70vh;
  overflow-y: auto;
  background: #fafafa;
  border-radius: 4px;
  margin: 10px 0;
}
.organ-detail-dialog ::v-deep .el-tabs__content {
  padding: 20px 0;
  min-height: 400px;
.organ-detail-tabs {
  background: white;
  border-radius: 4px;
  padding: 20px;
}
.add-assessment-prompt {
  text-align: center;
  padding: 40px 0;
}
.assessment-summary {
  padding: 10px;
}
.dialog-footer {
  text-align: right;
  padding-top: 20px;
  border-top: 1px solid #ebeef5;
}
/* 响应式设计 */
@media (max-width: 768px) {
  .organ-detail-dialog {
    width: 95% !important;
  .assessment-detail {
    padding: 10px;
  }
  .assessment-detail {
  .organ-expand-content {
    padding: 10px;
  }
}
@@ -708,16 +763,6 @@
  background-color: #fafafa;
}
::v-deep .el-descriptions__label {
  width: 120px;
  background-color: #f5f7fa;
  font-weight: bold;
}
.fixed-width .el-button {
  margin: 0 2px;
}
.jstitle {
  float: right;
  font-size: 18px !important;
@@ -726,21 +771,23 @@
  font-size: 12px;
}
/* Tab页激活状态样式 */
::v-deep .el-tabs__item.is-active {
  color: #409EFF;
/* 表格展开图标样式 */
::v-deep .el-table__expand-icon {
  cursor: pointer;
}
::v-deep .el-table__expanded-cell {
  padding: 0 !important;
}
/* 确保描述列表标签宽度一致 */
::v-deep .el-descriptions__label {
  width: 120px;
  background-color: #f5f7fa;
  font-weight: bold;
}
/* 评估表单样式 */
.assessment-form-section {
  margin-bottom: 20px;
}
.assessment-form-section h3 {
  margin-bottom: 15px;
  color: #303133;
  border-left: 4px solid #409EFF;
  padding-left: 10px;
.fixed-width .el-button {
  margin: 0 2px;
}
</style>