广丰卷烟厂数采质量分析系统
zhuguifei
2026-03-02 80ff784bf60637cd348ae665fc907f7b1e527dd8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import { useRouter } from 'vue-router';
import type { RouteLocationRaw } from 'vue-router';
import type { RouteKey } from '@elegant-router/types';
import { router as globalRouter } from '@/router';
 
/**
 * Router push
 *
 * Jump to the specified route, it can replace function router.push
 *
 * @param inSetup Whether is in vue script setup
 */
export function useRouterPush(inSetup = true) {
  const router = inSetup ? useRouter() : globalRouter;
  const route = globalRouter.currentRoute;
 
  const routerPush = router.push;
 
  const routerBack = router.back;
 
  async function routerPushByKey(key: RouteKey, options?: App.Global.RouterPushOptions) {
    const { query, params } = options || {};
 
    const routeLocation: RouteLocationRaw = {
      name: key
    };
 
    if (Object.keys(query || {}).length) {
      routeLocation.query = query;
    }
 
    if (Object.keys(params || {}).length) {
      routeLocation.params = params;
    }
 
    return routerPush(routeLocation);
  }
 
  function routerPushByKeyWithMetaQuery(key: RouteKey) {
    const allRoutes = router.getRoutes();
    const meta = allRoutes.find(item => item.name === key)?.meta || null;
 
    const query: Record<string, string> = {};
 
    meta?.query?.forEach(item => {
      query[item.key] = item.value;
    });
 
    return routerPushByKey(key, { query });
  }
 
  async function toHome() {
    return routerPushByKey('root');
  }
 
  /**
   * Navigate to login page
   *
   * @param loginModule The login module
   * @param redirectUrl The redirect url, if not specified, it will be the current route fullPath
   */
  async function toLogin(loginModule?: UnionKey.LoginModule, redirectUrl?: string) {
    const module = loginModule || 'pwd-login';
 
    const options: App.Global.RouterPushOptions = {
      params: {
        module
      }
    };
 
    const redirect = redirectUrl || route.value.fullPath;
 
    options.query = {
      redirect
    };
 
    return routerPushByKey('login', options);
  }
 
  /**
   * Toggle login module
   *
   * @param module
   */
  async function toggleLoginModule(module: UnionKey.LoginModule) {
    const query = route.value.query as Record<string, string>;
 
    return routerPushByKey('login', { query, params: { module } });
  }
 
  /**
   * Redirect from login
   *
   * @param [needRedirect=true] Whether to redirect after login. Default is `true`
   */
  async function redirectFromLogin(needRedirect = true) {
    const redirect = route.value.query?.redirect as string;
 
    if (needRedirect && redirect) {
      await routerPush(redirect);
    } else {
      await toHome();
    }
  }
 
  return {
    routerPush,
    routerBack,
    routerPushByKey,
    routerPushByKeyWithMetaQuery,
    toLogin,
    toggleLoginModule,
    redirectFromLogin,
    toHome
  };
}