giime 0.8.13 → 0.9.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/index.css +55 -56
  2. package/es/api/gstore/request.mjs +4 -8
  3. package/es/api/gstore/request.mjs.map +1 -1
  4. package/es/api/guardBasic/request.mjs +4 -7
  5. package/es/api/guardBasic/request.mjs.map +1 -1
  6. package/es/api/materialApi/request.mjs +4 -7
  7. package/es/api/materialApi/request.mjs.map +1 -1
  8. package/es/api/productCenter/request.mjs +4 -7
  9. package/es/api/productCenter/request.mjs.map +1 -1
  10. package/es/api/resource/request.mjs +4 -7
  11. package/es/api/resource/request.mjs.map +1 -1
  12. package/es/api/shopAdmin/request.mjs +4 -10
  13. package/es/api/shopAdmin/request.mjs.map +1 -1
  14. package/es/api/utils/createModes.mjs +1 -1
  15. package/es/api/utils/index.mjs +1 -1
  16. package/es/api/utils/resetAxiosBaseUrl.d.ts +2 -4
  17. package/es/api/utils/resetAxiosBaseUrl.mjs +10 -6
  18. package/es/api/utils/resetAxiosBaseUrl.mjs.map +1 -1
  19. package/es/components/src/business/loginDialog/LoginDialog.vue2.mjs +15 -18
  20. package/es/components/src/business/loginDialog/LoginDialog.vue2.mjs.map +1 -1
  21. package/es/giime/index.mjs +4 -2
  22. package/es/giime/index.mjs.map +1 -1
  23. package/es/giime/version.d.ts +1 -1
  24. package/es/giime/version.mjs +1 -1
  25. package/es/giime/version.mjs.map +1 -1
  26. package/es/hooks/base/index.mjs +1 -1
  27. package/es/hooks/base/useDownload/index.d.ts +20 -0
  28. package/es/hooks/base/useDownload/index.mjs +1 -1
  29. package/es/hooks/base/useDownload/index.mjs.map +1 -1
  30. package/es/hooks/index.mjs +1 -1
  31. package/es/index.css +55 -56
  32. package/es/utils/__tests__/http/devProxy.test.d.ts +1 -0
  33. package/es/utils/index.d.ts +1 -0
  34. package/es/utils/index.mjs +3 -1
  35. package/es/utils/index.mjs.map +1 -1
  36. package/es/utils/src/http/createModes.d.ts +23 -0
  37. package/es/utils/src/http/createModes.mjs +26 -13
  38. package/es/utils/src/http/createModes.mjs.map +1 -1
  39. package/es/utils/src/http/devProxy.d.ts +89 -2
  40. package/es/utils/src/http/devProxy.mjs +59 -53
  41. package/es/utils/src/http/devProxy.mjs.map +1 -1
  42. package/es/utils/src/http/index.d.ts +1 -0
  43. package/es/utils/src/http/index.mjs +2 -1
  44. package/es/utils/src/http/index.mjs.map +1 -1
  45. package/es/utils/src/tenant.d.ts +19 -0
  46. package/es/utils/src/tenant.mjs +22 -0
  47. package/es/utils/src/tenant.mjs.map +1 -0
  48. package/lib/api/gstore/request.js +4 -8
  49. package/lib/api/gstore/request.js.map +1 -1
  50. package/lib/api/guardBasic/request.js +4 -7
  51. package/lib/api/guardBasic/request.js.map +1 -1
  52. package/lib/api/materialApi/request.js +4 -7
  53. package/lib/api/materialApi/request.js.map +1 -1
  54. package/lib/api/productCenter/request.js +4 -7
  55. package/lib/api/productCenter/request.js.map +1 -1
  56. package/lib/api/resource/request.js +4 -7
  57. package/lib/api/resource/request.js.map +1 -1
  58. package/lib/api/shopAdmin/request.js +4 -10
  59. package/lib/api/shopAdmin/request.js.map +1 -1
  60. package/lib/api/utils/createModes.js +2 -0
  61. package/lib/api/utils/createModes.js.map +1 -1
  62. package/lib/api/utils/index.js +2 -0
  63. package/lib/api/utils/index.js.map +1 -1
  64. package/lib/api/utils/resetAxiosBaseUrl.d.ts +2 -4
  65. package/lib/api/utils/resetAxiosBaseUrl.js +10 -6
  66. package/lib/api/utils/resetAxiosBaseUrl.js.map +1 -1
  67. package/lib/components/src/business/loginDialog/LoginDialog.vue2.js +14 -17
  68. package/lib/components/src/business/loginDialog/LoginDialog.vue2.js.map +1 -1
  69. package/lib/giime/index.js +11 -0
  70. package/lib/giime/index.js.map +1 -1
  71. package/lib/giime/version.d.ts +1 -1
  72. package/lib/giime/version.js +1 -1
  73. package/lib/giime/version.js.map +1 -1
  74. package/lib/hooks/base/index.js +3 -0
  75. package/lib/hooks/base/index.js.map +1 -1
  76. package/lib/hooks/base/useDownload/index.d.ts +20 -0
  77. package/lib/hooks/base/useDownload/index.js +3 -0
  78. package/lib/hooks/base/useDownload/index.js.map +1 -1
  79. package/lib/hooks/index.js +3 -0
  80. package/lib/hooks/index.js.map +1 -1
  81. package/lib/index.css +55 -56
  82. package/lib/utils/__tests__/http/devProxy.test.d.ts +1 -0
  83. package/lib/utils/index.d.ts +1 -0
  84. package/lib/utils/index.js +8 -0
  85. package/lib/utils/index.js.map +1 -1
  86. package/lib/utils/src/http/createModes.d.ts +23 -0
  87. package/lib/utils/src/http/createModes.js +27 -12
  88. package/lib/utils/src/http/createModes.js.map +1 -1
  89. package/lib/utils/src/http/devProxy.d.ts +89 -2
  90. package/lib/utils/src/http/devProxy.js +58 -51
  91. package/lib/utils/src/http/devProxy.js.map +1 -1
  92. package/lib/utils/src/http/index.d.ts +1 -0
  93. package/lib/utils/src/http/index.js +4 -0
  94. package/lib/utils/src/http/index.js.map +1 -1
  95. package/lib/utils/src/tenant.d.ts +19 -0
  96. package/lib/utils/src/tenant.js +26 -0
  97. package/lib/utils/src/tenant.js.map +1 -0
  98. package/package.json +1 -1
@@ -1,12 +1,99 @@
1
1
  import type { ProxyOptions } from 'vite';
2
+ /**
3
+ * 自动代理配置选项
4
+ */
5
+ export interface AutoProxyOptions {
6
+ /** 需要排除的环境变量名称数组 */
7
+ excludeKeys?: string[];
8
+ /** 是否禁用本地开发环境代理(禁用后不会代理到 localhost) */
9
+ disableLocal?: boolean;
10
+ /** 需要排除的路径数组(支持带或不带尾部斜杠,如 '/third/am' 或 '/third/am/') */
11
+ excludePaths?: string[];
12
+ }
2
13
  /**
3
14
  * 默认开发代理配置
4
15
  * https://cn.vitejs.dev/config/#server-proxy
5
16
  */
6
17
  export declare const giimeDevProxy: Record<string, string | ProxyOptions>;
7
18
  /**
8
- * 根据环境动态生成代理配置
19
+ * 自动生成代理配置(通过扫描环境变量)
20
+ * - 自动读取环境变量中以斜杠开头的 VITE_ 变量
21
+ * - 根据 VITE_GIIME_MODE 自动确定代理目标服务器
22
+ * - 支持排除特定环境变量
23
+ * - 支持禁用本地开发环境代理
24
+ *
25
+ * @param env 环境变量对象
26
+ * @param options 配置选项
27
+ * @param options.excludeKeys 需要排除的环境变量名称数组
28
+ * @param options.disableLocal 是否禁用本地开发环境代理
29
+ * @returns 代理配置对象
30
+ *
31
+ * @example
32
+ * // 基础用法 - 自动扫描环境变量
33
+ * export default defineConfig({
34
+ * server: {
35
+ * proxy: autoGenerateProxy(process.env)
36
+ * }
37
+ * })
38
+ *
39
+ * @example
40
+ * // 排除特定环境变量并禁用本地代理
41
+ * export default defineConfig({
42
+ * server: {
43
+ * proxy: autoGenerateProxy(process.env, {
44
+ * excludeKeys: ['VITE_APP_TITLE', 'VITE_PUBLIC_PATH'],
45
+ * disableLocal: true
46
+ * })
47
+ * }
48
+ * })
49
+ *
50
+ * @example
51
+ * // 排除特定路径(支持带或不带尾部斜杠)
52
+ * export default defineConfig({
53
+ * server: {
54
+ * proxy: autoGenerateProxy(process.env, {
55
+ * excludePaths: ['/third/am', '/third/gstore/']
56
+ * })
57
+ * }
58
+ * })
59
+ */
60
+ export declare const autoGenerateProxy: (env: Record<string, string>, options?: AutoProxyOptions) => Record<string, string | ProxyOptions>;
61
+ /**
62
+ * 根据环境动态生成代理配置(融合版)
63
+ * - 包含预定义的 API 服务类型代理配置
64
+ * - 包含自动扫描环境变量的代理配置
65
+ *
9
66
  * @param env 环境变量对象
67
+ * @param options 自动代理配置选项
10
68
  * @returns 代理配置对象
69
+ *
70
+ * @example
71
+ * // 基础用法
72
+ * export default defineConfig({
73
+ * server: {
74
+ * proxy: giimeDevProxyFn(process.env)
75
+ * }
76
+ * })
77
+ *
78
+ * @example
79
+ * // 带选项
80
+ * export default defineConfig({
81
+ * server: {
82
+ * proxy: giimeDevProxyFn(process.env, {
83
+ * excludeKeys: ['VITE_APP_TITLE'],
84
+ * disableLocal: true
85
+ * })
86
+ * }
87
+ * })
88
+ *
89
+ * @example
90
+ * // 排除特定路径
91
+ * export default defineConfig({
92
+ * server: {
93
+ * proxy: giimeDevProxyFn(process.env, {
94
+ * excludePaths: ['/third/am', '/third/am/']
95
+ * })
96
+ * }
97
+ * })
11
98
  */
12
- export declare const giimeDevProxyFn: (env: Record<string, string>) => Record<string, string | ProxyOptions>;
99
+ export declare const giimeDevProxyFn: (env: Record<string, string>, options?: AutoProxyOptions) => Record<string, string | ProxyOptions>;
@@ -4,66 +4,73 @@ var resolver = require('../vue/resolver.js');
4
4
  var key = require('../../../constants/key.js');
5
5
  var createModes = require('./createModes.js');
6
6
 
7
- const API_CONFIGS = [
8
- {
9
- path: "/gstore-api",
10
- defaultTarget: "https://third-ssl.giikin.cn/gstore/"
11
- },
12
- {
13
- path: "/material-api",
14
- defaultTarget: "https://manage-test.giikin.cn/middle",
15
- serviceType: "middle"
16
- },
17
- {
18
- path: "/shop-admin-api",
19
- defaultTarget: "https://shop-admin-api-ssl.giikin.cn"
20
- },
21
- {
22
- path: "/product-center-api",
23
- defaultTarget: "https://manage-dev.giikin.cn/product-center",
24
- serviceType: "product-center"
25
- },
26
- {
27
- path: "/guard-basic-api",
28
- defaultTarget: "https://manage-dev.giikin.cn/guard",
29
- serviceType: "guard"
30
- },
31
- {
32
- path: "/giime-guard-resource-api",
33
- defaultTarget: "https://manage-dev.giikin.cn/guard",
34
- serviceType: "guard"
35
- }
36
- ];
37
- const createProxyConfig = (path, target) => ({
38
- target,
39
- changeOrigin: true,
40
- rewrite: (p) => p.replace(new RegExp(`^${path}`), ""),
41
- bypass: resolver.bypass
42
- });
43
- const getTargetUrl = (config, mode) => {
44
- if (!config.serviceType || !mode) {
45
- return config.defaultTarget;
46
- }
47
- const modes = createModes.createModes({
48
- developmentPath: config.path,
49
- serviceType: config.serviceType
50
- });
51
- return modes.find((item) => item.mode === mode)?.url || `https://manage-dev.giikin.cn/${config.serviceType}`;
7
+ const normalizePath = (path) => {
8
+ return path.endsWith("/") ? path.slice(0, -1) : path;
9
+ };
10
+ const isPathExcluded = (path, excludePaths) => {
11
+ if (!excludePaths || excludePaths.length === 0) return false;
12
+ const normalizedPath = normalizePath(path);
13
+ return excludePaths.some((excludePath) => normalizePath(excludePath) === normalizedPath);
52
14
  };
53
- const generateProxyConfig = (mode) => {
15
+ const API_SERVICE_TYPES = ["/third/gstore", "/third/am", "/guard", "/fe/basic", "/middle", "/product-center"];
16
+ const resolveBaseUrl = (mode) => {
17
+ return createModes.getEnvConfig(mode).url;
18
+ };
19
+ const generateProxyConfig = (mode, excludePaths) => {
54
20
  const config = {};
55
- API_CONFIGS.forEach((apiConfig) => {
56
- const target = getTargetUrl(apiConfig, mode);
57
- config[apiConfig.path] = createProxyConfig(apiConfig.path, target);
21
+ const giimeMode = mode || "development";
22
+ const baseUrl = resolveBaseUrl(giimeMode);
23
+ API_SERVICE_TYPES.forEach((serviceType) => {
24
+ if (isPathExcluded(serviceType, excludePaths)) return;
25
+ config[serviceType] = {
26
+ target: baseUrl,
27
+ changeOrigin: true,
28
+ rewrite: (p) => p.replace(new RegExp(`^${serviceType.replace(/\//g, "\\/")}`), serviceType),
29
+ bypass: resolver.bypass
30
+ };
58
31
  });
59
32
  return config;
60
33
  };
61
34
  const giimeDevProxy = generateProxyConfig();
62
- const giimeDevProxyFn = (env) => {
35
+ const autoGenerateProxy = (env, options) => {
36
+ const proxy = {};
37
+ const giimeMode = env.VITE_GIIME_MODE || "development";
38
+ const proxyTarget = resolveBaseUrl(giimeMode);
39
+ const processedPaths = /* @__PURE__ */ new Set();
40
+ const excludeKeys = options?.excludeKeys || [];
41
+ const excludePaths = options?.excludePaths;
42
+ const disableLocal = options?.disableLocal || false;
43
+ for (const [key, value] of Object.entries(env)) {
44
+ if (!key.startsWith("VITE_")) continue;
45
+ if (excludeKeys.includes(key)) continue;
46
+ if (key === "VITE_BASE_URL") continue;
47
+ const cleanValue = value.replace(/['"]/g, "").trim();
48
+ if (!cleanValue.startsWith("/") || cleanValue === "/") continue;
49
+ if (disableLocal && giimeMode === "development") continue;
50
+ const normalizedPath = normalizePath(cleanValue);
51
+ if (isPathExcluded(normalizedPath, excludePaths)) continue;
52
+ if (processedPaths.has(normalizedPath)) continue;
53
+ proxy[normalizedPath] = {
54
+ target: proxyTarget,
55
+ changeOrigin: true,
56
+ rewrite: (p) => p.replace(new RegExp(`^${normalizedPath.replace(/\//g, "\\/")}`), normalizedPath),
57
+ bypass: resolver.bypass
58
+ };
59
+ processedPaths.add(normalizedPath);
60
+ }
61
+ return proxy;
62
+ };
63
+ const giimeDevProxyFn = (env, options) => {
63
64
  const mode = env[key.resetEnvMode];
64
- return generateProxyConfig(mode);
65
+ return {
66
+ ...generateProxyConfig(mode, options?.excludePaths),
67
+ // 预定义的服务类型配置
68
+ ...autoGenerateProxy(env, options)
69
+ // 自动扫描的配置
70
+ };
65
71
  };
66
72
 
73
+ exports.autoGenerateProxy = autoGenerateProxy;
67
74
  exports.giimeDevProxy = giimeDevProxy;
68
75
  exports.giimeDevProxyFn = giimeDevProxyFn;
69
76
  //# sourceMappingURL=devProxy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"devProxy.js","sources":["../../../../../../packages/utils/src/http/devProxy.ts"],"sourcesContent":["import type { ProxyOptions } from 'vite';\nimport { bypass } from '../vue/resolver';\n// background引用,先必须使用../../\nimport { resetEnvMode } from '../../../constants/key';\nimport { createModes } from './createModes';\n\n/**\n * API代理配置接口\n */\ninterface ApiProxyConfig {\n /** API路径 */\n path: string;\n /** 默认目标地址 */\n defaultTarget: string;\n /** 服务类型(用于createModes,同时也是URL后缀) */\n serviceType?: string;\n}\n\n/**\n * 所有API的基础配置\n */\nconst API_CONFIGS: ApiProxyConfig[] = [\n {\n path: '/gstore-api',\n defaultTarget: 'https://third-ssl.giikin.cn/gstore/',\n },\n {\n path: '/material-api',\n defaultTarget: 'https://manage-test.giikin.cn/middle',\n serviceType: 'middle',\n },\n {\n path: '/shop-admin-api',\n defaultTarget: 'https://shop-admin-api-ssl.giikin.cn',\n },\n {\n path: '/product-center-api',\n defaultTarget: 'https://manage-dev.giikin.cn/product-center',\n serviceType: 'product-center',\n },\n {\n path: '/guard-basic-api',\n defaultTarget: 'https://manage-dev.giikin.cn/guard',\n serviceType: 'guard',\n },\n {\n path: '/giime-guard-resource-api',\n defaultTarget: 'https://manage-dev.giikin.cn/guard',\n serviceType: 'guard',\n },\n];\n\n/**\n * 创建代理配置项\n * @param path API路径\n * @param target 目标地址\n * @returns 代理配置\n */\nconst createProxyConfig = (path: string, target: string): ProxyOptions => ({\n target,\n changeOrigin: true,\n rewrite: p => p.replace(new RegExp(`^${path}`), ''),\n bypass,\n});\n\n/**\n * 根据模式获取目标URL\n * @param config API配置\n * @param mode 环境模式\n * @returns 目标URL\n */\nconst getTargetUrl = (config: ApiProxyConfig, mode?: string): string => {\n if (!config.serviceType || !mode) {\n return config.defaultTarget;\n }\n\n const modes = createModes({\n developmentPath: config.path,\n serviceType: config.serviceType,\n });\n\n return modes.find(item => item.mode === mode)?.url || `https://manage-dev.giikin.cn/${config.serviceType}`;\n};\n\n/**\n * 生成代理配置对象\n * @param mode 环境模式(可选)\n * @returns 代理配置对象\n */\nconst generateProxyConfig = (mode?: string): Record<string, string | ProxyOptions> => {\n const config: Record<string, string | ProxyOptions> = {};\n\n API_CONFIGS.forEach(apiConfig => {\n const target = getTargetUrl(apiConfig, mode);\n config[apiConfig.path] = createProxyConfig(apiConfig.path, target);\n });\n\n return config;\n};\n\n/**\n * 默认开发代理配置\n * https://cn.vitejs.dev/config/#server-proxy\n */\nexport const giimeDevProxy: Record<string, string | ProxyOptions> = generateProxyConfig();\n\n/**\n * 根据环境动态生成代理配置\n * @param env 环境变量对象\n * @returns 代理配置对象\n */\nexport const giimeDevProxyFn = (env: Record<string, string>): Record<string, string | ProxyOptions> => {\n const mode = env[resetEnvMode];\n return generateProxyConfig(mode);\n};\n"],"names":["bypass","createModes","resetEnvMode"],"mappings":";;;;;;AAqBA,MAAM,WAAA,GAAgC;AAAA,EACpC;AAAA,IACE,IAAA,EAAM,aAAA;AAAA,IACN,aAAA,EAAe;AAAA,GACjB;AAAA,EACA;AAAA,IACE,IAAA,EAAM,eAAA;AAAA,IACN,aAAA,EAAe,sCAAA;AAAA,IACf,WAAA,EAAa;AAAA,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAM,iBAAA;AAAA,IACN,aAAA,EAAe;AAAA,GACjB;AAAA,EACA;AAAA,IACE,IAAA,EAAM,qBAAA;AAAA,IACN,aAAA,EAAe,6CAAA;AAAA,IACf,WAAA,EAAa;AAAA,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAM,kBAAA;AAAA,IACN,aAAA,EAAe,oCAAA;AAAA,IACf,WAAA,EAAa;AAAA,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAM,2BAAA;AAAA,IACN,aAAA,EAAe,oCAAA;AAAA,IACf,WAAA,EAAa;AAAA;AAEjB,CAAA;AAQA,MAAM,iBAAA,GAAoB,CAAC,IAAA,EAAc,MAAA,MAAkC;AAAA,EACzE,MAAA;AAAA,EACA,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,EAAS,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,CAAQ,IAAI,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA,EAAG,EAAE,CAAA;AAAA,UAClDA;AACF,CAAA,CAAA;AAQA,MAAM,YAAA,GAAe,CAAC,MAAA,EAAwB,IAAA,KAA0B;AACtE,EAAA,IAAI,CAAC,MAAA,CAAO,WAAA,IAAe,CAAC,IAAA,EAAM;AAChC,IAAA,OAAO,MAAA,CAAO,aAAA;AAAA,EAChB;AAEA,EAAA,MAAM,QAAQC,uBAAA,CAAY;AAAA,IACxB,iBAAiB,MAAA,CAAO,IAAA;AAAA,IACxB,aAAa,MAAA,CAAO;AAAA,GACrB,CAAA;AAED,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,KAAS,IAAI,CAAA,EAAG,GAAA,IAAO,CAAA,6BAAA,EAAgC,MAAA,CAAO,WAAW,CAAA,CAAA;AAC1G,CAAA;AAOA,MAAM,mBAAA,GAAsB,CAAC,IAAA,KAAyD;AACpF,EAAA,MAAM,SAAgD,EAAC;AAEvD,EAAA,WAAA,CAAY,QAAQ,CAAA,SAAA,KAAa;AAC/B,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,SAAA,EAAW,IAAI,CAAA;AAC3C,IAAA,MAAA,CAAO,UAAU,IAAI,CAAA,GAAI,iBAAA,CAAkB,SAAA,CAAU,MAAM,MAAM,CAAA;AAAA,EACnE,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACT,CAAA;AAMO,MAAM,gBAAuD,mBAAA;AAO7D,MAAM,eAAA,GAAkB,CAAC,GAAA,KAAuE;AACrG,EAAA,MAAM,IAAA,GAAO,IAAIC,gBAAY,CAAA;AAC7B,EAAA,OAAO,oBAAoB,IAAI,CAAA;AACjC;;;;;"}
1
+ {"version":3,"file":"devProxy.js","sources":["../../../../../../packages/utils/src/http/devProxy.ts"],"sourcesContent":["import type { ProxyOptions } from 'vite';\nimport { bypass } from '../vue/resolver';\n// background引用,先必须使用../../\nimport { resetEnvMode } from '../../../constants/key';\nimport { getEnvConfig } from './createModes';\n\n/**\n * 自动代理配置选项\n */\nexport interface AutoProxyOptions {\n /** 需要排除的环境变量名称数组 */\n excludeKeys?: string[];\n /** 是否禁用本地开发环境代理(禁用后不会代理到 localhost) */\n disableLocal?: boolean;\n /** 需要排除的路径数组(支持带或不带尾部斜杠,如 '/third/am' 或 '/third/am/') */\n excludePaths?: string[];\n}\n\n/**\n * 标准化路径(移除尾部斜杠)\n * @param path 原始路径\n * @returns 标准化后的路径\n */\nconst normalizePath = (path: string): string => {\n return path.endsWith('/') ? path.slice(0, -1) : path;\n};\n\n/**\n * 检查路径是否在排除列表中\n * @param path 需要检查的路径\n * @param excludePaths 排除路径列表\n * @returns 是否应该被排除\n */\nconst isPathExcluded = (path: string, excludePaths?: string[]): boolean => {\n if (!excludePaths || excludePaths.length === 0) return false;\n const normalizedPath = normalizePath(path);\n return excludePaths.some(excludePath => normalizePath(excludePath) === normalizedPath);\n};\n\n/**\n * 预定义的 API 服务类型列表\n */\nconst API_SERVICE_TYPES = ['/third/gstore', '/third/am', '/guard', '/fe/basic', '/middle', '/product-center'];\n\n/**\n * 根据模式获取基础URL\n * @param mode 环境模式\n * @returns 基础URL\n */\nconst resolveBaseUrl = (mode?: string): string => {\n return getEnvConfig(mode).url;\n};\n\n/**\n * 生成代理配置对象\n * @param mode 环境模式(可选)\n * @param excludePaths 需要排除的路径数组\n * @returns 代理配置对象\n */\nconst generateProxyConfig = (mode?: string, excludePaths?: string[]): Record<string, string | ProxyOptions> => {\n const config: Record<string, string | ProxyOptions> = {};\n // 使用 VITE_GIIME_MODE 确定代理目标,默认为 development\n const giimeMode = mode || 'development';\n const baseUrl = resolveBaseUrl(giimeMode);\n\n API_SERVICE_TYPES.forEach(serviceType => {\n // 跳过被排除的路径\n if (isPathExcluded(serviceType, excludePaths)) return;\n\n config[serviceType] = {\n target: baseUrl,\n changeOrigin: true,\n rewrite: (p: string) => p.replace(new RegExp(`^${serviceType.replace(/\\//g, '\\\\/')}`), serviceType),\n bypass,\n };\n });\n\n return config;\n};\n\n/**\n * 默认开发代理配置\n * https://cn.vitejs.dev/config/#server-proxy\n */\nexport const giimeDevProxy: Record<string, string | ProxyOptions> = generateProxyConfig();\n\n/**\n * 自动生成代理配置(通过扫描环境变量)\n * - 自动读取环境变量中以斜杠开头的 VITE_ 变量\n * - 根据 VITE_GIIME_MODE 自动确定代理目标服务器\n * - 支持排除特定环境变量\n * - 支持禁用本地开发环境代理\n *\n * @param env 环境变量对象\n * @param options 配置选项\n * @param options.excludeKeys 需要排除的环境变量名称数组\n * @param options.disableLocal 是否禁用本地开发环境代理\n * @returns 代理配置对象\n *\n * @example\n * // 基础用法 - 自动扫描环境变量\n * export default defineConfig({\n * server: {\n * proxy: autoGenerateProxy(process.env)\n * }\n * })\n *\n * @example\n * // 排除特定环境变量并禁用本地代理\n * export default defineConfig({\n * server: {\n * proxy: autoGenerateProxy(process.env, {\n * excludeKeys: ['VITE_APP_TITLE', 'VITE_PUBLIC_PATH'],\n * disableLocal: true\n * })\n * }\n * })\n *\n * @example\n * // 排除特定路径(支持带或不带尾部斜杠)\n * export default defineConfig({\n * server: {\n * proxy: autoGenerateProxy(process.env, {\n * excludePaths: ['/third/am', '/third/gstore/']\n * })\n * }\n * })\n */\nexport const autoGenerateProxy = (env: Record<string, string>, options?: AutoProxyOptions): Record<string, string | ProxyOptions> => {\n const proxy: Record<string, string | ProxyOptions> = {};\n\n // 使用 VITE_GIIME_MODE 确定代理目标,默认为 development\n const giimeMode = env.VITE_GIIME_MODE || 'development';\n const proxyTarget = resolveBaseUrl(giimeMode);\n\n const processedPaths = new Set<string>();\n const excludeKeys = options?.excludeKeys || [];\n const excludePaths = options?.excludePaths;\n const disableLocal = options?.disableLocal || false;\n\n // 遍历所有环境变量\n for (const [key, value] of Object.entries(env)) {\n // 只处理 VITE_ 开头的变量\n if (!key.startsWith('VITE_')) continue;\n\n // 跳过被排除的环境变量\n if (excludeKeys.includes(key)) continue;\n\n // 跳过 VITE_BASE_URL\n if (key === 'VITE_BASE_URL') continue;\n\n // 移除引号并获取清理后的值\n const cleanValue = value.replace(/['\"]/g, '').trim();\n\n // 只处理以斜杠开头且后续有值的路径(排除单独的 '/')\n if (!cleanValue.startsWith('/') || cleanValue === '/') continue;\n\n // 如果禁用本地代理且当前模式是 development,跳过\n if (disableLocal && giimeMode === 'development') continue;\n\n // 标准化路径:移除尾部斜杠\n const normalizedPath = normalizePath(cleanValue);\n\n // 跳过被排除的路径\n if (isPathExcluded(normalizedPath, excludePaths)) continue;\n\n // 跳过已处理的路径(避免重复配置)\n if (processedPaths.has(normalizedPath)) continue;\n\n // 生成代理配置\n proxy[normalizedPath] = {\n target: proxyTarget,\n changeOrigin: true,\n rewrite: (p: string) => p.replace(new RegExp(`^${normalizedPath.replace(/\\//g, '\\\\/')}`), normalizedPath),\n bypass,\n };\n\n processedPaths.add(normalizedPath);\n }\n\n return proxy;\n};\n\n/**\n * 根据环境动态生成代理配置(融合版)\n * - 包含预定义的 API 服务类型代理配置\n * - 包含自动扫描环境变量的代理配置\n *\n * @param env 环境变量对象\n * @param options 自动代理配置选项\n * @returns 代理配置对象\n *\n * @example\n * // 基础用法\n * export default defineConfig({\n * server: {\n * proxy: giimeDevProxyFn(process.env)\n * }\n * })\n *\n * @example\n * // 带选项\n * export default defineConfig({\n * server: {\n * proxy: giimeDevProxyFn(process.env, {\n * excludeKeys: ['VITE_APP_TITLE'],\n * disableLocal: true\n * })\n * }\n * })\n *\n * @example\n * // 排除特定路径\n * export default defineConfig({\n * server: {\n * proxy: giimeDevProxyFn(process.env, {\n * excludePaths: ['/third/am', '/third/am/']\n * })\n * }\n * })\n */\nexport const giimeDevProxyFn = (env: Record<string, string>, options?: AutoProxyOptions): Record<string, string | ProxyOptions> => {\n const mode = env[resetEnvMode];\n\n // 融合两种代理配置\n return {\n ...generateProxyConfig(mode, options?.excludePaths), // 预定义的服务类型配置\n ...autoGenerateProxy(env, options), // 自动扫描的配置\n };\n};\n"],"names":["getEnvConfig","bypass","resetEnvMode"],"mappings":"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"}
@@ -3,3 +3,4 @@ export * from './errorMessage';
3
3
  export * from './interceptors';
4
4
  export * from './devProxy';
5
5
  export * from './url';
6
+ export { envConfigs, getEnvConfig, type EnvConfig } from './createModes';
@@ -5,6 +5,7 @@ var errorMessage = require('./errorMessage.js');
5
5
  var interceptors = require('./interceptors.js');
6
6
  var devProxy = require('./devProxy.js');
7
7
  var url = require('./url.js');
8
+ var createModes = require('./createModes.js');
8
9
 
9
10
 
10
11
 
@@ -13,9 +14,12 @@ exports.errorMessage = errorMessage.errorMessage;
13
14
  exports.responseErrorMessage = errorMessage.responseErrorMessage;
14
15
  exports.req401Interceptors = interceptors.req401Interceptors;
15
16
  exports.res401Interceptors = interceptors.res401Interceptors;
17
+ exports.autoGenerateProxy = devProxy.autoGenerateProxy;
16
18
  exports.giimeDevProxy = devProxy.giimeDevProxy;
17
19
  exports.giimeDevProxyFn = devProxy.giimeDevProxyFn;
18
20
  exports.getDomain = url.getDomain;
19
21
  exports.getHeaderValue = url.getHeaderValue;
20
22
  exports.urlJoin = url.urlJoin;
23
+ exports.envConfigs = createModes.envConfigs;
24
+ exports.getEnvConfig = createModes.getEnvConfig;
21
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 基于环境模式和域名的租户类型判断
3
+ * 优先根据环境模式获取租户类型,其次根据域名判断
4
+ */
5
+ /** 租户类型 */
6
+ export type TenantType = 'giikin' | 'giiktok' | 'giimall';
7
+ /**
8
+ * 根据环境模式或域名获取租户类型
9
+ * 优先级:环境模式 > 域名 > 默认值(giikin)
10
+ */
11
+ export declare const getTenantType: () => TenantType;
12
+ /**
13
+ * 判断是否为 giiktok 租户
14
+ */
15
+ export declare const isGiiktok: () => boolean;
16
+ /**
17
+ * 判断是否为 giikin
18
+ */
19
+ export declare const isGiikin: () => boolean;
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ var key = require('../../constants/key.js');
4
+ var index = require('../../hooks/base/useGlobalConfig/index.js');
5
+ var createModes = require('./http/createModes.js');
6
+
7
+ const getTenantType = () => {
8
+ const hostname = window.location.hostname;
9
+ const importMetaEnv = index.useGlobalConfig("env");
10
+ const mode = importMetaEnv.value[key.resetEnvMode];
11
+ if (mode && createModes.envConfigs[mode]) {
12
+ return createModes.envConfigs[mode].tenant;
13
+ }
14
+ const envConfig = Object.values(createModes.envConfigs).find((config) => config.domain === hostname);
15
+ if (envConfig) {
16
+ return envConfig.tenant;
17
+ }
18
+ return "giikin";
19
+ };
20
+ const isGiiktok = () => getTenantType() === "giiktok";
21
+ const isGiikin = () => getTenantType() === "giikin";
22
+
23
+ exports.getTenantType = getTenantType;
24
+ exports.isGiikin = isGiikin;
25
+ exports.isGiiktok = isGiiktok;
26
+ //# sourceMappingURL=tenant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.js","sources":["../../../../../packages/utils/src/tenant.ts"],"sourcesContent":["/**\n * 基于环境模式和域名的租户类型判断\n * 优先根据环境模式获取租户类型,其次根据域名判断\n */\n\nimport { resetEnvMode } from '@giime/constants/key';\nimport { useGlobalConfig } from '@giime/hooks/base/useGlobalConfig';\nimport { envConfigs } from './http/createModes';\n\n/** 租户类型 */\nexport type TenantType = 'giikin' | 'giiktok' | 'giimall';\n\n/**\n * 根据环境模式或域名获取租户类型\n * 优先级:环境模式 > 域名 > 默认值(giikin)\n */\nexport const getTenantType = (): TenantType => {\n const hostname = window.location.hostname;\n const importMetaEnv = useGlobalConfig('env');\n const mode = importMetaEnv.value[resetEnvMode];\n\n // 1. 优先根据 resetEnvMode 获取租户类型\n if (mode && envConfigs[mode]) {\n return envConfigs[mode].tenant;\n }\n\n // 2. 其次根据域名获取租户类型\n const envConfig = Object.values(envConfigs).find(config => config.domain === hostname);\n if (envConfig) {\n return envConfig.tenant;\n }\n\n // 3. 默认返回 giikin\n return 'giikin';\n};\n\n/**\n * 判断是否为 giiktok 租户\n */\nexport const isGiiktok = () => getTenantType() === 'giiktok';\n\n/**\n * 判断是否为 giikin\n */\nexport const isGiikin = () => getTenantType() === 'giikin';\n"],"names":["useGlobalConfig","resetEnvMode","envConfigs"],"mappings":";;;;;;AAgBO,MAAM,gBAAgB,MAAkB;AAC7C,EAAA,MAAM,QAAA,GAAW,OAAO,QAAA,CAAS,QAAA;AACjC,EAAA,MAAM,aAAA,GAAgBA,sBAAgB,KAAK,CAAA;AAC3C,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,KAAA,CAAMC,gBAAY,CAAA;AAG7C,EAAA,IAAI,IAAA,IAAQC,sBAAA,CAAW,IAAI,CAAA,EAAG;AAC5B,IAAA,OAAOA,sBAAA,CAAW,IAAI,CAAA,CAAE,MAAA;AAAA,EAC1B;AAGA,EAAA,MAAM,SAAA,GAAY,OAAO,MAAA,CAAOA,sBAAU,EAAE,IAAA,CAAK,CAAA,MAAA,KAAU,MAAA,CAAO,MAAA,KAAW,QAAQ,CAAA;AACrF,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,SAAA,CAAU,MAAA;AAAA,EACnB;AAGA,EAAA,OAAO,QAAA;AACT;AAKO,MAAM,SAAA,GAAY,MAAM,aAAA,EAAc,KAAM;AAK5C,MAAM,QAAA,GAAW,MAAM,aAAA,EAAc,KAAM;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "giime",
3
- "version": "0.8.13",
3
+ "version": "0.9.0-beta.2",
4
4
  "description": "A Component Library for Vue 3",
5
5
  "keywords": [
6
6
  "giime",