|
@@ -0,0 +1,282 @@
|
|
|
|
|
+<template>
|
|
|
|
|
+ <div class="semi-product">
|
|
|
|
|
+ <!-- 半成品概览 -->
|
|
|
|
|
+ <el-row :gutter="20" class="overview-row">
|
|
|
|
|
+ <el-col :span="6">
|
|
|
|
|
+ <el-card class="stat-card">
|
|
|
|
|
+ <div class="stat-content">
|
|
|
|
|
+ <div class="stat-icon" style="background-color: #409eff;">
|
|
|
|
|
+ <!-- Replace Box icon with text symbol -->
|
|
|
|
|
+ <span style="font-size:28px; color:#fff;">📦</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="stat-info">
|
|
|
|
|
+ <div class="stat-label">半成品总数</div>
|
|
|
|
|
+ <div class="stat-value">-</div>
|
|
|
|
|
+ <div class="stat-unit">种</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </el-card>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :span="6">
|
|
|
|
|
+ <el-card class="stat-card">
|
|
|
|
|
+ <div class="stat-content">
|
|
|
|
|
+ <div class="stat-icon" style="background-color: #67c23a;">
|
|
|
|
|
+ <!-- Replace Goods icon with text symbol -->
|
|
|
|
|
+ <span style="font-size:28px; color:#fff;">📦</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="stat-info">
|
|
|
|
|
+ <div class="stat-label">库存数量</div>
|
|
|
|
|
+ <div class="stat-value">-</div>
|
|
|
|
|
+ <div class="stat-unit">件</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </el-card>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :span="6">
|
|
|
|
|
+ <el-card class="stat-card">
|
|
|
|
|
+ <div class="stat-content">
|
|
|
|
|
+ <div class="stat-icon" style="background-color: #909399;">
|
|
|
|
|
+ <!-- Replace Goods icon with text symbol -->
|
|
|
|
|
+ <span style="font-size:28px; color:#fff;">📦</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="stat-info">
|
|
|
|
|
+ <div class="stat-label">预计可生产成品</div>
|
|
|
|
|
+ <div class="stat-value">-</div>
|
|
|
|
|
+ <div class="stat-unit">件</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </el-card>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+
|
|
|
|
|
+ <!-- 搜索与操作栏 -->
|
|
|
|
|
+ <el-card class="search-card">
|
|
|
|
|
+ <el-row :gutter="20" align="middle">
|
|
|
|
|
+ <el-col :span="6">
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ placeholder="搜索半成品名称/编码"
|
|
|
|
|
+ clearable
|
|
|
|
|
+ >
|
|
|
|
|
+ <template #prefix>
|
|
|
|
|
+ <!-- Replace Search icon with text symbol -->
|
|
|
|
|
+ <span style="font-size:16px; color:#909399;">🔍</span>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-input>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :span="4">
|
|
|
|
|
+ <el-select placeholder="状态筛选" clearable>
|
|
|
|
|
+ <el-option label="全部" value="" />
|
|
|
|
|
+ <el-option label="在库" value="in-stock" />
|
|
|
|
|
+ <el-option label="在制" value="in-production" />
|
|
|
|
|
+ <el-option label="待检" value="pending" />
|
|
|
|
|
+ <el-option label="已用" value="used" />
|
|
|
|
|
+ </el-select>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :span="4">
|
|
|
|
|
+ <el-select placeholder="类别筛选" clearable>
|
|
|
|
|
+ <el-option label="全部" value="" />
|
|
|
|
|
+ <el-option label="电子元件" value="electronics" />
|
|
|
|
|
+ <el-option label="机械部件" value="mechanics" />
|
|
|
|
|
+ <el-option label="外壳模组" value="housing" />
|
|
|
|
|
+ <el-option label="电路板" value="pcb" />
|
|
|
|
|
+ </el-select>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :span="6">
|
|
|
|
|
+ <el-button type="primary">
|
|
|
|
|
+ <!-- Replace Search icon with text -->
|
|
|
|
|
+ 🔍 搜索
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ <el-button>
|
|
|
|
|
+ <!-- Replace RefreshLeft icon with text -->
|
|
|
|
|
+ 🔄 重置
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :span="4" style="text-align: right;">
|
|
|
|
|
+ <el-button type="success">
|
|
|
|
|
+ <!-- Replace Plus icon with text -->
|
|
|
|
|
+ ➕ 新增半成品
|
|
|
|
|
+ </el-button>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+ </el-card>
|
|
|
|
|
+
|
|
|
|
|
+ <!-- 可组装成品能力 -->
|
|
|
|
|
+ <el-card class="assembly-card" style="margin-bottom: 20px;">
|
|
|
|
|
+ <template #header>
|
|
|
|
|
+ <div style="display:flex; justify-content:space-between; align-items:center;">
|
|
|
|
|
+ <span>可组装成品能力(基于入库库存)</span>
|
|
|
|
|
+ <el-button type="primary" size="small">刷新</el-button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ <el-table stripe style="width: 100%">
|
|
|
|
|
+ <el-table-column label="成品编码" width="180" />
|
|
|
|
|
+ <el-table-column label="名称" width="220" />
|
|
|
|
|
+ <el-table-column label="可组装数量" width="140" />
|
|
|
|
|
+ <el-table-column label="所需半成品及库存" />
|
|
|
|
|
+ </el-table>
|
|
|
|
|
+ </el-card>
|
|
|
|
|
+
|
|
|
|
|
+ <!-- 半成品列表 -->
|
|
|
|
|
+ <el-card class="table-card">
|
|
|
|
|
+ <el-table stripe style="width: 100%">
|
|
|
|
|
+ <el-table-column type="selection" width="55" />
|
|
|
|
|
+ <el-table-column label="编码" width="120" fixed />
|
|
|
|
|
+ <el-table-column label="半成品名称" width="200" />
|
|
|
|
|
+ <el-table-column label="类别" width="120" />
|
|
|
|
|
+ <el-table-column label="库存数量" width="100" />
|
|
|
|
|
+ <el-table-column label="安全库存" width="100" />
|
|
|
|
|
+ <el-table-column label="状态" width="100" />
|
|
|
|
|
+ <el-table-column label="可用于组装" width="150" />
|
|
|
|
|
+ <el-table-column label="供应商" width="150" />
|
|
|
|
|
+ <el-table-column label="采购周期" width="100" />
|
|
|
|
|
+ <el-table-column label="单价(元)" width="100" />
|
|
|
|
|
+ <el-table-column label="库存价值(元)" width="120" />
|
|
|
|
|
+ <el-table-column label="操作" width="240" fixed="right">
|
|
|
|
|
+ <template #default>
|
|
|
|
|
+ <el-button type="primary" size="small">详情</el-button>
|
|
|
|
|
+ <el-button type="success" size="small">编辑</el-button>
|
|
|
|
|
+ <el-button type="warning" size="small">组装</el-button>
|
|
|
|
|
+ <el-button type="danger" size="small">删除</el-button>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+ </el-table>
|
|
|
|
|
+
|
|
|
|
|
+ <el-pagination
|
|
|
|
|
+ :current-page="1"
|
|
|
|
|
+ :page-size="10"
|
|
|
|
|
+ :total="0"
|
|
|
|
|
+ :page-sizes="[10, 20, 50, 100]"
|
|
|
|
|
+ layout="total, sizes, prev, pager, next, jumper"
|
|
|
|
|
+ style="margin-top: 20px; justify-content: flex-end;"
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-card>
|
|
|
|
|
+
|
|
|
|
|
+ <!-- 半成品分析图表 -->
|
|
|
|
|
+ <el-row :gutter="20" class="charts-row">
|
|
|
|
|
+ <el-col :span="12">
|
|
|
|
|
+ <el-card>
|
|
|
|
|
+ <template #header>
|
|
|
|
|
+ <span>半成品库存分布</span>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ <div style="height: 300px; display: flex; align-items: center; justify-content: center; color: #909399;">
|
|
|
|
|
+ 暂无图表数据
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </el-card>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :span="12">
|
|
|
|
|
+ <el-card>
|
|
|
|
|
+ <template #header>
|
|
|
|
|
+ <span>半成品使用趋势</span>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ <div style="height: 300px; display: flex; align-items: center; justify-content: center; color: #909399;">
|
|
|
|
|
+ 暂无图表数据
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </el-card>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ <!-- 半成品周转分析 -->
|
|
|
|
|
+ <el-card class="turnover-card">
|
|
|
|
|
+ <template #header>
|
|
|
|
|
+ <span>半成品周转效率分析</span>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ <el-table stripe>
|
|
|
|
|
+ <el-table-column label="半成品名称" width="200" />
|
|
|
|
|
+ <el-table-column label="平均周转天数" width="150" />
|
|
|
|
|
+ <el-table-column label="使用率" width="120" />
|
|
|
|
|
+ <el-table-column label="月消耗量" width="120" />
|
|
|
|
|
+ <el-table-column label="再订货点" width="120" />
|
|
|
|
|
+ <el-table-column label="库存状态" width="120" />
|
|
|
|
|
+ <el-table-column label="优化建议" min-width="250" />
|
|
|
|
|
+ </el-table>
|
|
|
|
|
+ </el-card>
|
|
|
|
|
+ </div>
|
|
|
|
|
+</template>
|
|
|
|
|
+
|
|
|
|
|
+<script setup>
|
|
|
|
|
+ // REMOVED ALL ICON IMPORTS (no @element-plus/icons-vue dependency)
|
|
|
|
|
+</script>
|
|
|
|
|
+
|
|
|
|
|
+<style scoped>
|
|
|
|
|
+ .semi-product {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .overview-row {
|
|
|
|
|
+ margin-bottom: 20px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .stat-card {
|
|
|
|
|
+ cursor: pointer;
|
|
|
|
|
+ transition: all 0.3s;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .stat-card:hover {
|
|
|
|
|
+ transform: translateY(-5px);
|
|
|
|
|
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .stat-content {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: 15px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .stat-icon {
|
|
|
|
|
+ width: 56px;
|
|
|
|
|
+ height: 56px;
|
|
|
|
|
+ border-radius: 12px;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ color: #fff;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .stat-info {
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .stat-label {
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ color: #909399;
|
|
|
|
|
+ margin-bottom: 8px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .stat-value {
|
|
|
|
|
+ font-size: 28px;
|
|
|
|
|
+ font-weight: bold;
|
|
|
|
|
+ color: #303133;
|
|
|
|
|
+ line-height: 1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .stat-unit {
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ color: #909399;
|
|
|
|
|
+ margin-top: 4px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .search-card {
|
|
|
|
|
+ margin-bottom: 20px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .table-card {
|
|
|
|
|
+ margin-bottom: 20px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .charts-row {
|
|
|
|
|
+ margin-bottom: 20px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .card-header {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .bom-card,
|
|
|
|
|
+ .turnover-card {
|
|
|
|
|
+ margin-bottom: 20px;
|
|
|
|
|
+ }
|
|
|
|
|
+</style>
|