import { onMounted, onUnmounted } from "vue"; import { emitter } from "@/utils/mitt"; //Session 读取(与顶栏站点切换器写入格式一致:sessionStorage + JSON) const getCurrentStationId = () => { const value = sessionStorage.getItem("currentStationId"); if (!value) return null; try { return JSON.parse(value); } catch { return null; } }; /** * 站点范围组合式函数:页面站点筛选与全局"当前站点"联动 * 1. 页面初始化时,若站点筛选为空则默认选中全局当前站点(onMounted 中先于页面自身加载执行) * 2. 全局站点切换时(顶栏站点选择器),联动更新页面筛选并刷新列表 * * @param formQuery 页面查询条件对象(需包含 stationId 字段) * @param loadData 页面数据加载方法,切换站点时以 refresh=true 重新加载 * @param options.follow 是否响应全局站点切换,默认 true */ export const useStationScope = ( formQuery: any, loadData?: (refresh?: boolean) => void, options?: { follow?: boolean } ) => { const follow = options?.follow !== false; const onStationChange = (stationId: any) => { if (!follow || !stationId) return; //站点未变化时不重复加载 if (formQuery.stationId === stationId) return; formQuery.stationId = stationId; if (loadData) loadData(true); }; onMounted(() => { //初始化:站点筛选为空时默认选中全局当前站点 if (!formQuery.stationId) { const currentStationId = getCurrentStationId(); if (currentStationId) { formQuery.stationId = currentStationId; } } emitter.on("stationChangeRefresh", onStationChange); }); onUnmounted(() => { emitter.off("stationChangeRefresh", onStationChange); }); };