| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 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);
- });
- };
|