| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import { ref } from 'vue';
- import { useMessage } from '@jeesite/core/hooks/web/useMessage';
- import { useGo } from '@jeesite/core/hooks/web/usePage';
- import { timeSeriesJump } from '@jeesite/otg/api/otgApi';
- import type { TimeSeriesQuery } from '@jeesite/otg/api/types/query';
- import {
- BEHAVIOR_SPACETIME_JUMP_QUERY_KEY,
- buildTimeSeriesJumpQuery,
- persistBehaviorSpacetimeJumpResult,
- hasMeaningfulJumpPayload,
- resolveBehaviorSpacetimeJumpPayload,
- serializeBehaviorSpacetimeJumpPayload,
- } from '@jeesite/otg/utils/timeSeriesJump';
- interface JumpToBehaviorSpacetimeOptions {
- onBeforeNavigate?: () => void;
- }
- const buildTimeSeriesJumpRequest = (query: ReturnType<typeof buildTimeSeriesJumpQuery>) => {
- return {
- hasLocal: query.hasLocal || 'N',
- tableNameEn: query.tableNameEn || query.tableName,
- id: query.id || query.rowId,
- } satisfies Pick<TimeSeriesQuery, 'hasLocal' | 'tableNameEn' | 'id'>;
- };
- const sharedJumping = ref(false);
- let activeJumpPromise: Promise<boolean> | null = null;
- let activeJumpKey = '';
- export function useTimeSeriesJump() {
- const go = useGo();
- const { createMessage } = useMessage();
- const jumpToBehaviorSpacetime = async (
- query: Partial<TimeSeriesQuery> & Record<string, unknown>,
- options?: JumpToBehaviorSpacetimeOptions,
- ) => {
- const requestQuery = buildTimeSeriesJumpQuery(query);
- const jumpRequest = buildTimeSeriesJumpRequest(requestQuery);
- if (!jumpRequest.id || !jumpRequest.tableNameEn) {
- createMessage.warning('当前记录缺少行为时空主键,暂时无法跳转。');
- return false;
- }
- const jumpKey = JSON.stringify(jumpRequest);
- if (sharedJumping.value && activeJumpPromise) {
- return activeJumpKey === jumpKey ? activeJumpPromise : false;
- }
- const currentPromise = (async () => {
- sharedJumping.value = true;
- activeJumpKey = jumpKey;
- try {
- const resp = await timeSeriesJump(jumpRequest);
- persistBehaviorSpacetimeJumpResult(resp);
- const payload = resolveBehaviorSpacetimeJumpPayload(resp, requestQuery);
- if (!hasMeaningfulJumpPayload(payload)) {
- createMessage.warning('行为时空跳转参数为空,暂时无法跳转。');
- return false;
- }
- options?.onBeforeNavigate?.();
- await go({
- path: '/behaviorSpacetime/index',
- query: {
- [BEHAVIOR_SPACETIME_JUMP_QUERY_KEY]: serializeBehaviorSpacetimeJumpPayload(payload),
- },
- });
- return true;
- } catch {
- createMessage.error('跳转行为时空分析失败,请稍后重试。');
- return false;
- } finally {
- if (activeJumpPromise === currentPromise) {
- activeJumpPromise = null;
- activeJumpKey = '';
- sharedJumping.value = false;
- }
- }
- })();
- activeJumpPromise = currentPromise;
- return currentPromise;
- };
- return {
- jumping: sharedJumping,
- jumpToBehaviorSpacetime,
- };
- }
|