src/views/production/index.vue
@@ -1,5 +1,5 @@
<template>
  <div class="app-container">
  <div>
    <!-- 搜索表单 -->
    <el-form :inline="true" :model="queryParams" class="search-form">
      <el-form-item label="搜索">
@@ -39,12 +39,20 @@
          :border="true"
          style="width: 100%;height: calc(100vh - 26em)"
      >
        <template #coal="{ row }">
        <template #coalId="{ row }">
          <div class="coal-tags">
            <el-tag v-for="coal in parseCoalArray(row.coal)" :key="coal" size="small">
              {{ getCoalNameById(coal) }}
            </el-tag>
            <span v-if="!row.coal">--</span>
            <template v-if="row.coalId">
              <el-tag
                v-for="coal in parseCoalArray(row.coalId)"
                :key="coal"
                size="small"
                type="primary"
                class="coal-tag"
              >
                {{ getDisplayCoalName(coal) }}
              </el-tag>
            </template>
            <span v-else class="no-data">--</span>
          </div>
        </template>
      </ETable>      <!-- 分页组件 -->
@@ -70,7 +78,7 @@
</template>
<script setup>
import {onMounted} from "vue";
import {onMounted, ref} from "vue";
import {ElMessage} from "element-plus";
import {Plus, Delete} from "@element-plus/icons-vue";
import ProductionDialog from "./components/ProductionDialog.vue";
@@ -83,13 +91,12 @@
import {useCoalData} from "./components/useCoalData.js";
import {getCoalInfoList} from "@/api/production";
// 煤种信息列表
const coalInfoList = ref([]);
// 表格列配置
const columns = [
  {prop: "coalId", label: "煤种", minWidth: 150,
    formatter: (row) => {
      return coalInfoList.value.find(item => item.id == row.coalId)?.coal || '--';
    }
  },
  {prop: "coalId", label: "煤种", minWidth: 150, slot: true},
  {prop: "productionQuantity", label: "生产数量", minWidth: 120},
  {prop: "laborCost", label: "人工成本", minWidth: 150},
  {prop: "energyConsumptionCost", label: "能耗成本", minWidth: 120},
@@ -124,6 +131,20 @@
// 使用煤种数据组合式函数
const {getCoalNameById, getCoalData} = useCoalData();
// 获取煤种显示名称(带备用逻辑)
const getDisplayCoalName = (coalId) => {
  // 优先使用 useCoalData 的方法
  let name = getCoalNameById(coalId);
  // 如果没有找到,尝试从 coalInfoList 中查找
  if (name === coalId && coalInfoList.value.length > 0) {
    const found = coalInfoList.value.find(item => item.id == coalId);
    name = found ? found.coal : coalId;
  }
  return name || coalId;
};
// 处理生产数据更新
const handleProductionAndProcessing = (row, rows) => {
  const index = tableData.value.findIndex(item => item.id === rows.id);
@@ -139,13 +160,26 @@
    ElMessage.success("操作成功");
  });
};
const coalInfoList = ref([]);
// 组件挂载时加载数据
onMounted(async () => {
  await getCoalData(); // 预加载煤种数据
  getList();
  let res = await getCoalInfoList()
  coalInfoList.value = res.data;
  try {
    // 并行加载煤种数据和表格数据
    await Promise.all([
      getCoalData(), // 预加载煤种数据
      (async () => {
        const res = await getCoalInfoList();
        if (res.code === 200) {
          coalInfoList.value = res.data;
        }
      })()
    ]);
    // 加载表格数据
    getList();
  } catch (error) {
    ElMessage.error('数据加载失败,请刷新页面重试');
  }
});
</script>
@@ -187,8 +221,9 @@
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  align-items: center;
  .el-tag {
  .coal-tag {
    margin-right: 4px;
    margin-bottom: 4px;
@@ -196,5 +231,10 @@
      margin-right: 0;
    }
  }
  .no-data {
    color: #999;
    font-style: italic;
  }
}
</style>