소스 검색

高德地图: Key/安全码加入运行期 config.js 支持部署后热替换

  - public/config.js 新增 amapKey / amapSecurityCode 字段(默认空)
  - src/utils/brand.js 新增 amap 导出,优先级 __APP_CONFIG__ > VUE_APP_AMAP_* > 默认值;pick 改为具名导出
  - TongzhouTrafficMap / EvaluationTrafficMap 的 props default 改读 brand.js 的 amap,移除对 process.env 的直接依赖
画安 3 주 전
부모
커밋
18fcd91e8b
4개의 변경된 파일21개의 추가작업 그리고 10개의 파일을 삭제
  1. 7 3
      public/config.js
  2. 3 2
      src/components/TongzhouTrafficMap.vue
  3. 3 2
      src/components/ui/EvaluationTrafficMap.vue
  4. 8 3
      src/utils/brand.js

+ 7 - 3
public/config.js

@@ -1,17 +1,21 @@
 /**
- * 运行期品牌配置(不进 webpack 打包,部署后可直接编辑 dist/config.js 切换品牌
+ * 运行期配置(不进 webpack 打包,部署后可直接编辑 dist/config.js 热替换
  *
- * 优先级:window.__APP_CONFIG__ > VUE_APP_BRAND_* (.env) > 代码默认值
+ * 优先级:window.__APP_CONFIG__ > VUE_APP_* (.env) > 代码默认值
  *
  * 字段说明:
  *  - brandTitle:          顶部大标题文字
  *  - brandCompany:        登录页底部公司名
  *  - brandLogoUrl:        Logo 图片路径(相对站点根,默认指向 brand/logo.png)
  *  - brandLoginTitleUrl:  登录页标题图(如不需要可置空字符串,会回退为文字标题)
+ *  - amapKey:             高德地图 Web 端 Key(部署前去高德控制台申请并加白名单)
+ *  - amapSecurityCode:    高德地图安全密钥 securityJsCode
  */
 window.__APP_CONFIG__ = {
   brandTitle:         '交通信号控制平台—灵•智',
   brandCompany:       '北京东土正创科技有限公司',
   brandLogoUrl:       'brand/logo.png',
-  brandLoginTitleUrl: 'brand/login-title.png'
+  brandLoginTitleUrl: 'brand/login-title.png',
+  amapKey:            '',
+  amapSecurityCode:   ''
 };

+ 3 - 2
src/components/TongzhouTrafficMap.vue

@@ -50,13 +50,14 @@
 import AMapLoader from '@amap/amap-jsapi-loader';
 import { getIntersectionCategory } from '@/mock/api';
 import MapSearchBox from '@/components/ui/MapSearchBox.vue';
+import { amap as amapConfig } from '@/utils/brand';
 
 export default {
   name: "TrafficMap",
   components: { MapSearchBox },
   props: {
-    amapKey: { type: String, default: () => process.env.VUE_APP_AMAP_KEY || 'db2da7e3e248c3b2077d53fc809be63f' },
-    securityJsCode: { type: String, default: () => process.env.VUE_APP_AMAP_SECURITY_CODE || 'a7413c674852c5eaf01d90813c5b7ef6' },
+    amapKey: { type: String, default: () => amapConfig.key },
+    securityJsCode: { type: String, default: () => amapConfig.securityCode },
     mode: { type: String, default: '', validator: (value) => ['', '路口', '干线', '特勤'].includes(value) },
     // 是否渲染地图搜索框。默认关闭,仅 Home 显式开启。
     showSearch: { type: Boolean, default: false },

+ 3 - 2
src/components/ui/EvaluationTrafficMap.vue

@@ -6,12 +6,13 @@
 
 <script>
 import AMapLoader from '@amap/amap-jsapi-loader';
+import { amap as amapConfig } from '@/utils/brand';
 
 export default {
   name: "EvaluationTrafficMap",
   props: {
-    amapKey: { type: String, default: () => process.env.VUE_APP_AMAP_KEY || 'db2da7e3e248c3b2077d53fc809be63f' },
-    securityJsCode: { type: String, default: () => process.env.VUE_APP_AMAP_SECURITY_CODE || 'a7413c674852c5eaf01d90813c5b7ef6' },
+    amapKey: { type: String, default: () => amapConfig.key },
+    securityJsCode: { type: String, default: () => amapConfig.securityCode },
     mode: { 
       type: String, 
       default: 'overview',

+ 8 - 3
src/utils/brand.js

@@ -1,7 +1,7 @@
 /**
- * 品牌信息统一入口
+ * 运行期配置统一入口(品牌 + 高德地图等)
  *
- * 优先级:window.__APP_CONFIG__(部署后可改) > VUE_APP_BRAND_*(构建期 .env) > 默认值。
+ * 优先级:window.__APP_CONFIG__(部署后可改 dist/config.js) > VUE_APP_*(构建期 .env) > 默认值。
  * 静态资源(logo / 标题图)通过 BASE_URL 拼接,指向 public/ 下的文件,因此 build 后亦可替换。
  */
 
@@ -9,7 +9,7 @@ const runtime = (typeof window !== 'undefined' && window.__APP_CONFIG__) || {};
 const env = process.env || {};
 const baseUrl = env.BASE_URL || '/';
 
-function pick(runtimeKey, envKey, fallback) {
+export function pick(runtimeKey, envKey, fallback) {
   const v = runtime[runtimeKey];
   if (v !== undefined && v !== null && v !== '') return v;
   const e = env[envKey];
@@ -30,6 +30,11 @@ export const brand = {
   loginTitle: asAssetUrl(pick('brandLoginTitleUrl', 'VUE_APP_BRAND_LOGIN_TITLE_URL','brand/login-title.png')),
 };
 
+export const amap = {
+  key:          pick('amapKey',          'VUE_APP_AMAP_KEY',          'db2da7e3e248c3b2077d53fc809be63f'),
+  securityCode: pick('amapSecurityCode', 'VUE_APP_AMAP_SECURITY_CODE','a7413c674852c5eaf01d90813c5b7ef6'),
+};
+
 if (typeof document !== 'undefined' && brand.title) {
   document.title = brand.title;
 }