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