/** * 煤种数据管理组合式函数 * 提供煤种数据的获取、缓存、转换等功能 */ import { ref, computed, watch } from 'vue'; import { getCoalFieldList } from '@/api/basicInformation/coalQualityMaintenance'; import { ElMessage } from 'element-plus'; // 全局煤种数据缓存 const coalData = ref([]); const isLoading = ref(false); const isLoaded = ref(false); export function useCoalData() { // 获取煤种数据 const getCoalData = async (forceRefresh = false) => { if (isLoaded.value && !forceRefresh) { return coalData.value; } if (isLoading.value) { // 如果正在加载,等待加载完成 return new Promise((resolve) => { const unwatch = watch(isLoading, (loading) => { if (!loading) { unwatch(); resolve(coalData.value); } }); }); } isLoading.value = true; try { const res = await getCoalFieldList(); if (res.code === 200) { coalData.value = res.data; isLoaded.value = true; return coalData.value; } else { ElMessage.error('获取煤种数据失败'); return []; } } catch (error) { ElMessage.error('获取煤种数据失败'); console.error('煤种数据获取错误:', error); return []; } finally { isLoading.value = false; } }; // 根据ID获取煤种名称 const getCoalNameById = (id) => { if (!id || coalData.value.length === 0) return id; const coal = coalData.value.find(item => item.id == id); return coal ? coal.fieldName : id; }; // 根据名称获取煤种ID const getCoalIdByName = (name) => { if (!name || coalData.value.length === 0) return ''; const coal = coalData.value.find(item => item.fieldName === name); return coal ? coal.id : ''; }; // 生成下拉选项 const coalOptions = computed(() => { return coalData.value.map(item => ({ label: item.fieldName, value: item.fieldName, key: item.id })); }); // 生成key-value映射 const coalMap = computed(() => { const map = {}; coalData.value.forEach(item => { map[item.id] = item.fieldName; }); return map; }); return { coalData: computed(() => coalData.value), coalOptions, coalMap, isLoading: computed(() => isLoading.value), isLoaded: computed(() => isLoaded.value), getCoalData, getCoalNameById, getCoalIdByName }; }