10月27日学习进度

leapssisbird / 2025-01-20 / 原文

<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { getAllWorkInfoService } from '@/api/scbg.js'

// 查询表单数据
const formInline = ref({
    status: '',
    generalOrder: '',
    workerId: ''
})

// 工作信息数据
const workInfos = ref([])

// 统计数据
const statistics = ref({
    unstarted: 0,
    completed: 0,
    inProgress: 0
})

// 获取工作信息数据
const getWorkInfo = async () => {
    try {
        const result = await getAllWorkInfoService()
        workInfos.value = result.data
        
        // 计算统计数据
        statistics.value = workInfos.value.reduce((acc, curr) => {
            switch(curr.status) {
                case '未领取':
                    acc.unstarted++
                    break
                case '已完成':
                    acc.completed++
                    break
                case '进行中':
                    acc.inProgress++
                    break
            }
            return acc
        }, { unstarted: 0, completed: 0, inProgress: 0 })
    } catch (error) {
        console.error('获取数据失败:', error)
    }
}

// 查询方法
const onSubmit = () => {
    getWorkInfo()
}

// 操作方法
const handleApprove = (index: number, row: any) => {
    // 处理批准逻辑
    console.log('批准', row)
}

const handleReject = (index: number, row: any) => {
    // 处理驳回逻辑
    console.log('驳回', row)
}

// 页面加载时获取数据
onMounted(() => {
    getWorkInfo()
})

// 添加获取状态类型的方法
const getStatusType = (status) => {
    switch(status) {
        case '进行中':
            return 'success'  // 绿色
        case '已完成':
            return ''        // 默认蓝色
        case '未领取':
            return 'danger'  // 红色
        default:
            return 'info'
    }
}
</script>

<template>
    <h1>生产报工</h1>
    <el-form :inline="true" :model="formInline" class="demo-form-inline">
        <el-form-item label="报工状态">
            <el-select
                v-model="formInline.status"
                placeholder="请选择报工状态"
                clearable
            >
                <el-option label="未领取" value="未领取" />
                <el-option label="进行中" value="进行中" />
                <el-option label="已完成" value="已完成" />
            </el-select>
        </el-form-item>
        <el-form-item label="总制令">
            <el-input v-model="formInline.generalOrder" placeholder="请输入总制令" clearable />
        </el-form-item>
        <el-form-item label="工号">
            <el-input v-model="formInline.workerId" placeholder="请输入工号" clearable />
        </el-form-item>

        <el-form-item>
            <el-button type="primary" @click="onSubmit">查询</el-button>
        </el-form-item>
    </el-form>

    <el-row :gutter="20" class="mb-4">
        <el-col :span="8">
            <el-card class="box-card">
                <template #header>
                    <div class="card-header">
                        <span>未领取订单数量</span>
                    </div>
                </template>
                <div class="text-item">
                    <span class="value">{{ statistics.unstarted }}</span>
                </div>
            </el-card>
        </el-col>
        <el-col :span="8">
            <el-card class="box-card">
                <template #header>
                    <div class="card-header">
                        <span>已完成订单数量</span>
                    </div>
                </template>
                <div class="text-item">
                    <span class="value">{{ statistics.completed }}</span>
                </div>
            </el-card>
        </el-col>
        <el-col :span="8">
            <el-card class="box-card">
                <template #header>
                    <div class="card-header">
                        <span>进行中订单数量</span>
                    </div>
                </template>
                <div class="text-item">
                    <span class="value">{{ statistics.inProgress }}</span>
                </div>
            </el-card>
        </el-col>
    </el-row>

    <el-table :data="workInfos" 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="process" label="工序" />
        <el-table-column prop="teamName" label="班组" />
        <el-table-column prop="name" label="工人姓名" />
        <el-table-column prop="quantity" label="数量" />
        <el-table-column prop="status" label="状态">
            <template #default="scope">
                <el-tag 
                    :type="getStatusType(scope.row.status)"
                >
                    {{ scope.row.status }}
                </el-tag>
            </template>
        </el-table-column>
    </el-table>
</template>

<style scoped>
.demo-form-inline .el-input {
    --el-input-width: 220px;
}

.demo-form-inline .el-select {
    --el-select-width: 220px;
}

.text-item {
    text-align: center;
}

.value {
    font-size: 24px;
    font-weight: bold;
    color: var(--el-color-primary);
}
</style>