flat: 添加高德地图全量代理

This commit is contained in:
Apcallover
2025-11-23 14:50:18 +08:00
parent ac6d3f7ea5
commit 317665addc
2 changed files with 78 additions and 1 deletions

View File

@@ -1,3 +1,4 @@
import './utils/amap_system';
import { AvatarDropdown, AvatarName, Footer, SelectLang } from '@/components';
import type { Settings as LayoutSettings } from '@ant-design/pro-components';
import { SettingDrawer } from '@ant-design/pro-components';
@@ -216,8 +217,9 @@ export async function render(oldRender: () => void) {
const checkRegion = 5 * 60 * 1000;
export const request = {
...errorConfig,
baseURL: process.env.NODE_ENV === 'development' ? '' : 'https://qd.zhaopinzao8dian.com/api',
// baseURL: process.env.NODE_ENV === 'development' ? '' : 'https://qd.zhaopinzao8dian.com/api',
// baseURL: 'http://39.98.44.136:8080',
baseURL: process.env.NODE_ENV === 'development' ? '' : 'http://10.213.6.207:19010/api',
requestInterceptors: [
(url: any, options: { headers: any }) => {
const headers = options.headers ? options.headers : [];

75
src/utils/amap_system.ts Normal file
View File

@@ -0,0 +1,75 @@
// amap_proxy.ts
const hookScript = (): void => {
// 1. 内网入口地址
const proxyBase = 'http://10.213.6.207:19010';
// 2. 域名映射表 (Key: 原始域名, Value: 内网代理路径)
// 注意:顺序很重要,长路径优先匹配(虽然后缀不同一般没事)
const domainMap: Record<string, string> = {
'https://webapi.amap.com/maps': '/maps', // 特殊处理 maps
'https://webapi.amap.com': '/webAmap',
'https://restapi.amap.com': '/restAmap',
'https://a.amap.com': '/amap',
'https://lbs.amap.com': '/lbs',
'http://vector.amap.com': '/vector', // http 协议
'https://vdata.amap.com': '/vdata',
// 批量处理 vdata01-04
'https://vdata01.amap.com': '/vdata01',
'https://vdata02.amap.com': '/vdata02',
'https://vdata03.amap.com': '/vdata03',
'https://vdata04.amap.com': '/vdata04',
// 批量处理 webst01-04
'https://webst01.is.autonavi.com': '/webst01',
'https://webst02.is.autonavi.com': '/webst02',
'https://webst03.is.autonavi.com': '/webst03',
'https://webst04.is.autonavi.com': '/webst04',
// 批量处理 wprd01-04
'https://wprd01.is.autonavi.com': '/wprd01',
'https://wprd02.is.autonavi.com': '/wprd02',
'https://wprd03.is.autonavi.com': '/wprd03',
'https://wprd04.is.autonavi.com': '/wprd04',
};
// 通用替换函数
const replaceUrl = (url: string): string => {
for (const [origin, path] of Object.entries(domainMap)) {
if (url.indexOf(origin) !== -1) {
// 将 https://vdata01.amap.com/xxx 替换为 http://10.213.6.207:19010/vdata01/xxx
return url.replace(origin, `${proxyBase}${path}`);
}
}
return url;
};
// --- 拦截 Script 标签 (JS API 加载) ---
const scriptDescriptor = Object.getOwnPropertyDescriptor(HTMLScriptElement.prototype, 'src');
if (scriptDescriptor && scriptDescriptor.set) {
const nativeSet = scriptDescriptor.set;
Object.defineProperty(HTMLScriptElement.prototype, 'src', {
set: function (url: string) {
const newUrl = replaceUrl(url);
nativeSet.call(this, newUrl);
},
get: scriptDescriptor.get,
configurable: true
});
}
// --- 拦截 XMLHttpRequest (瓦片、搜索、矢量数据) ---
const nativeOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (
method: string,
url: string | URL,
async: boolean = true,
user?: string | null,
password?: string | null
): void {
const strUrl = url.toString();
const newUrl = replaceUrl(strUrl);
return nativeOpen.call(this, method, newUrl, async, user, password);
};
console.log('高德地图内网全量代理已激活');
};
hookScript();