You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
maotu-webtopo/src/utils/globalUtils.ts

89 lines
2.6 KiB
TypeScript

1 month ago
export {};
import { reactive, watch, onMounted } from 'vue';
import { modelApi } from '@/utils/request';
import { type DataItem } from '@/components/mt-edit/store/types';
import emitter from '@/utils/emitter';
import { useNodeByModelsStore } from '@/components/mt-edit/store/nodeByModels';
// 扩展 Window 接口
declare global {
interface Window {
vueGlobalFunction: (param: any) => void;
// 添加其他全局函数
anotherGlobalFunction: (param: string) => string;
globalData: Map<string, DataItem>;
globalNodeIdForModeId: Map<string, Array<string>>;
}
}
// 定义全局函数
function vueGlobalFunction(param: DataItem) {
console.log('全局函数被调用:', param);
window.globalData[param.id] = param;
// 延迟访问 store
try {
const nodeByModelsStore = useNodeByModelsStore();
// 去关系集合查看
if (nodeByModelsStore.nodeMap.has(param.id.toString())) {
const arr = nodeByModelsStore.nodeMap.get(param.id.toString());
arr.forEach((nodeId) => {
console.log('节点ID:', nodeId);
emitter.emit(nodeId, param.id);
});
}
} catch (error) {
console.warn('无法访问 Pinia store:', error.message);
// 可以选择稍后重试或使用备用逻辑
}
}
function anotherGlobalFunction(param: string) {
return param.toUpperCase();
}
const globalData: Map<string, DataItem> = new Map();
const globalNodeIdForModeId: Map<string, Array<string>> = new Map();
// 将函数附加到 window 对象
if (typeof window !== 'undefined') {
window.vueGlobalFunction = vueGlobalFunction;
window.anotherGlobalFunction = anotherGlobalFunction;
window.globalData = globalData;
window.globalNodeIdForModeId = globalNodeIdForModeId;
}
// 获取所有节点
async function getData() {
try {
const response = await modelApi.node_nrt_get();
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
// 更新全局数据 - 如果返回的是对象,则逐个设置键值对
if (data && typeof data === 'object') {
window.globalData = data;
}
console.log('全局数据已更新:', data);
} catch (error) {
console.error('获取数据失败:', error);
}
}
// 页面加载时立即获取数据
if (typeof window !== 'undefined') {
// 立即获取数据
getData();
}
// 监听页面刷新/加载事件
// window.addEventListener('load', () => {
// getData();
// });
// 也可以直接挂载到全局对象
// (window as any).myGlobalFunction = myGlobalFunction;
// (window as any).anotherGlobalFunction = anotherGlobalFunction;