| | |
| | | @selection-change="handleSelectionChange" |
| | | @pagination="pagination"> |
| | | <template #completionStatus="{ row }"> |
| | | <el-progress :percentage="toProgressPercentage(row?.completionStatus)" |
| | | :color="progressColor(toProgressPercentage(row?.completionStatus))" |
| | | :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''" /> |
| | | <el-progress :percentage="toBarPercentage(row?.completionStatus)" |
| | | :color="progressColor(row?.completionStatus)" |
| | | :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''"> |
| | | <span>{{ progressText(row?.completionStatus) }}</span> |
| | | </el-progress> |
| | | </template> |
| | | <template #processRouteStatus="{ row }"> |
| | | <div v-if="row.processRouteStatus && row.processRouteStatus.length" |
| | |
| | | <div class="step-circle" |
| | | :class="{ 'is-completed': item.percentage >= 100 }"> |
| | | <span class="step-percentage" |
| | | :style="{ color: item.percentage >= 70 ? item.percentage >= 100 ? '#67c23a' : '#f56c6c' : '#000' }">{{ item.percentage }}%</span> |
| | | :style="{ color: processStepColor(item.percentage) }">{{ percentLabel(item.percentage) }}</span> |
| | | </div> |
| | | <div class="step-name">{{ item.name }}</div> |
| | | </div> |
| | |
| | | |
| | | const toProgressPercentage = val => { |
| | | const n = Number(val); |
| | | if (!Number.isFinite(n)) return 0; |
| | | if (n <= 0) return 0; |
| | | if (n >= 100) return 100; |
| | | return Math.round(n); |
| | | if (!Number.isFinite(n) || n <= 0) return 0; |
| | | return Math.round(n * 100) / 100; |
| | | }; |
| | | |
| | | const toBarPercentage = val => Math.min(100, toProgressPercentage(val)); |
| | | |
| | | const progressText = val => `${toProgressPercentage(val)}%`; |
| | | |
| | | const percentLabel = val => `${Math.round(toProgressPercentage(val))}%`; |
| | | |
| | | const processStepColor = percentage => { |
| | | const p = toProgressPercentage(percentage); |
| | | if (p >= 100) return "#67c23a"; |
| | | if (p >= 70) return "#f56c6c"; |
| | | return "#000"; |
| | | }; |
| | | |
| | | // 30/50/80/100 分段颜色:红/橙/蓝/绿 |