10月29日学习进度

leapssisbird / 2025-01-20 / 原文

<script setup lang="ts">
import { ref } from 'vue'
import { getZlService } from '@/api/scjh.js'

const zls = ref([
    {
        generalOrder: '',
        divisionOrder: '',
        subordinateOrder: '',
        productName: '',
        batch: '',
        quantity: '',
        startTime: '',
        endTime: '',
        status: '',
        currentProcess: '',
        totalProcess: '',
    },
])

const getZl = async () => {
    let result = await getZlService()
    zls.value = result.data
    console.log(zls.value)
}

/**
 * 高亮当前流程
 * @param totalProcess 总流程字符串
 * @param currentProcess 当前流程
 * @returns 包含高亮 HTML 的字符串
 */
const highlightCurrentProcess = (totalProcess: string, currentProcess: string): string => {
    if (!totalProcess || !currentProcess) return totalProcess
    const processes = totalProcess.split('->')
    return processes
        .map((process) =>
            process === currentProcess
                ? `<span style="color: red; font-weight: bold;">${process}</span>`
                : process
        )
        .join('->')
}

/**
 * 计算进度百分比
 * @param totalProcess 总流程字符串
 * @param currentProcess 当前流程
 * @returns 进度百分比(0-100)
 */
const calculateProgress = (totalProcess: string, currentProcess: string): number => {
    if (!totalProcess || !currentProcess) return 0
    const processes = totalProcess.split('->')
    const currentIndex = processes.indexOf(currentProcess)
    if (currentIndex === -1) return 0
    return Math.round(((currentIndex + 1) / processes.length) * 100)
}

getZl()
</script>

<template>
    <h1>实时监控</h1>

    <el-table :data="zls" border style="width: 100%">
        <el-table-column prop="generalOrder" label="总制令" />
        <el-table-column prop="divisionOrder" label="分制令" />
        <el-table-column prop="subordinateOrder" label="子制令" />
        <el-table-column prop="productName" label="产品名" />
        <el-table-column prop="batch" label="批次" />
        <el-table-column prop="quantity" label="数量" />
        <el-table-column prop="currentProcess" label="最新进展" >
            <template #default="{ row }">
                <el-tooltip
                    class="item"
                    effect="dark"
                    placement="top"
                    popper-class="tooltip-content"
                >
                    <template #content>
                        <div v-html="highlightCurrentProcess(row.totalProcess, row.currentProcess)"></div>
                    </template>
                    <span>{{ row.currentProcess }}</span>
                </el-tooltip>
            </template>
        </el-table-column>
        <el-table-column label="进度" width="300">
            <template #default="{ row }">
                <div style="display: flex; align-items: center;">
                    <!-- 进度条 -->
                    <el-progress
                        :stroke-width="20"
                        :percentage="calculateProgress(row.totalProcess, row.currentProcess)"
                        style="flex: 1;"
                        :show-text="false"
                    />

                    <span style="margin-left: 10px; font-size: 14px; font-weight: bold;">
                        {{ calculateProgress(row.totalProcess, row.currentProcess) }}%
                    </span>
                </div>
            </template>
        </el-table-column>
    </el-table>
</template>

<style>

.tooltip-content {
    font-size: 16px; /* 提高字体大小 */
    line-height: 1.5; /* 提升可读性 */
    max-width: 500px; /* 设置最大宽度 */
    word-wrap: break-word; /* 自动换行 */
}
</style>