WXL
2025-12-29 d10d3662fffb40ec0002b0a6010fd57f6a21ca84
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
<template>
  <base-stage :stage-data="stageData" :case-info="caseInfo">
    <template #header>
      <el-alert
        :title="alertTitle"
        :type="alertType"
        :description="alertDescription"
        show-icon
        :closable="false"
      />
    </template>
 
    <el-row :gutter="20" style="margin-top: 20px;">
      <el-col :span="8">
        <el-card>
          <div slot="header" class="card-header">
            <span>评估概况</span>
          </div>
          <div class="assessment-stats">
            <div class="stat-item">
              <span class="stat-label">评估状态:</span>
              <el-tag :type="getStatusTag(stageData.status)">
                {{ getStatusText(stageData.status) }}
              </el-tag>
            </div>
            <div class="stat-item">
              <span class="stat-label">评估医生:</span>
              <span>{{ stageData.operator || '待分配' }}</span>
            </div>
            <div class="stat-item">
              <span class="stat-label">开始时间:</span>
              <span>{{ formatTime(stageData.updateTime) }}</span>
            </div>
            <div class="stat-item">
              <span class="stat-label">完成时间:</span>
              <span>{{ formatTime(stageData.completeTime) || '-' }}</span>
            </div>
          </div>
        </el-card>
      </el-col>
 
      <el-col :span="16">
        <el-card>
          <div slot="header" class="card-header">
            <span>评估项目进度</span>
          </div>
          <div class="progress-list">
            <div v-for="item in assessmentItems" :key="item.name" class="progress-item">
              <div class="progress-info">
                <span class="item-name">{{ item.name }}</span>
                <span class="item-status">
                  <el-tag :type="item.status === 'completed' ? 'success' : 'warning'" size="small">
                    {{ item.status === 'completed' ? '已完成' : '待评估' }}
                  </el-tag>
                </span>
              </div>
              <el-progress
                :percentage="item.status === 'completed' ? 100 : 0"
                :show-text="false"
                :status="item.status === 'completed' ? 'success' : 'exception'"
              />
            </div>
          </div>
        </el-card>
      </el-col>
    </el-row>
 
    <el-card style="margin-top: 20px;">
      <div slot="header" class="card-header">
        <span>评估详情记录</span>
        <el-button type="primary" size="small" @click="handleViewReport">
          查看评估报告
        </el-button>
      </div>
      <el-descriptions :column="2" border>
        <el-descriptions-item label="生理指标评估">
          {{ assessmentDetails.physiological || '待评估' }}
        </el-descriptions-item>
        <el-descriptions-item label="器官功能评估">
          {{ assessmentDetails.organFunction || '待评估' }}
        </el-descriptions-item>
        <el-descriptions-item label="感染性疾病筛查">
          {{ assessmentDetails.infectionScreening || '待筛查' }}
        </el-descriptions-item>
        <el-descriptions-item label="恶性肿瘤筛查">
          {{ assessmentDetails.cancerScreening || '待筛查' }}
        </el-descriptions-item>
        <el-descriptions-item label="评估结论">
          <el-tag :type="assessmentDetails.conclusion ? 'success' : 'warning'">
            {{ assessmentDetails.conclusion || '评估中' }}
          </el-tag>
        </el-descriptions-item>
        <el-descriptions-item label="评估医生意见">
          {{ assessmentDetails.doctorOpinion || '待填写' }}
        </el-descriptions-item>
      </el-descriptions>
    </el-card>
  </base-stage>
</template>
 
<script>
import BaseStage from './BaseStage.vue';
 
export default {
  name: 'MedicalAssessmentStage',
  components: { BaseStage },
  props: {
    stageData: {
      type: Object,
      default: () => ({})
    },
    caseInfo: {
      type: Object,
      default: () => ({})
    }
  },
  computed: {
    alertTitle() {
      const status = this.stageData.status;
      return status === 'completed' ? '医学评估完成' :
             status === 'in_progress' ? '医学评估进行中' : '待开始医学评估';
    },
    alertType() {
      const status = this.stageData.status;
      return status === 'completed' ? 'success' :
             status === 'in_progress' ? 'warning' : 'info';
    },
    alertDescription() {
      const status = this.stageData.status;
      return status === 'completed' ? '所有医学评估项目已完成,供者符合捐献条件' :
             status === 'in_progress' ? '医学评估正在进行中,请关注评估进度' : '等待开始医学评估流程';
    }
  },
  data() {
    return {
      assessmentItems: [
        { name: '生理指标评估', status: 'completed' },
        { name: '器官功能评估', status: 'completed' },
        { name: '感染性疾病筛查', status: 'completed' },
        { name: '恶性肿瘤筛查', status: 'completed' },
        { name: '遗传性疾病筛查', status: 'completed' },
        { name: '心理状态评估', status: 'completed' }
      ],
      assessmentDetails: {
        physiological: '各项生理指标正常,符合捐献要求',
        organFunction: '主要器官功能良好,无禁忌症',
        infectionScreening: '传染病筛查均为阴性',
        cancerScreening: '无恶性肿瘤迹象',
        conclusion: '适合器官捐献',
        doctorOpinion: '供者身体状况良好,符合捐献医学标准'
      }
    };
  },
  methods: {
    getStatusText(status) {
      const map = {
        'completed': '已完成',
        'in_progress': '进行中',
        'pending': '未开始'
      };
      return map[status] || '未知';
    },
    handleViewReport() {
      this.$message.info('查看医学评估报告功能');
    }
  }
};
</script>
 
<style scoped>
.assessment-stats {
  padding: 10px 0;
}
 
.stat-item {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 15px;
  padding: 8px 0;
  border-bottom: 1px solid #f0f0f0;
}
 
.stat-label {
  color: #606266;
  font-weight: 500;
}
 
.progress-list {
  padding: 10px 0;
}
 
.progress-item {
  margin-bottom: 15px;
}
 
.progress-info {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 8px;
}
 
.item-name {
  color: #606266;
  font-size: 14px;
}
</style>