Commit 6e26edb240fb5c0e91c1528bdf297e4a616ab94e
1 parent
d8a556a9
fix: 切换至hash路由并修复corpCode获取与API代理
- 路由改用createWebHashHistory,适配/iot/基础路径 - 修复hash模式下URL参数无法获取的问题,corpCode改用computed从route.query读取 - withCorpCode统一调用getApiUrl补全接口地址 - 更新vite代理配置及base路径
Showing
11 changed files
with
57 additions
and
29 deletions
.env.production
0 → 100644
| ... | ... | @@ -37,11 +37,9 @@ const route = useRoute() |
| 37 | 37 | const router = useRouter() |
| 38 | 38 | const currentRoute = computed(() => route.path) |
| 39 | 39 | |
| 40 | -// 从URL获取corpCode,全局共享 | |
| 41 | -function getCorpCode() { | |
| 42 | - return new URLSearchParams(window.location.search).get('corpCode') || '' | |
| 43 | -} | |
| 44 | -const corpCode = ref(getCorpCode()) | |
| 40 | +// 从URL获取corpCode,全局共享(hash模式下参数在#后面,需用route.query) | |
| 41 | +// 使用computed确保路由切换时corpCode始终同步 | |
| 42 | +const corpCode = computed(() => route.query.corpCode || '') | |
| 45 | 43 | provide('corpCode', corpCode) |
| 46 | 44 | |
| 47 | 45 | // 给URL拼接corpCode | ... | ... |
| ... | ... | @@ -110,10 +110,13 @@ const dtuSn = computed(() => props.device?._raw?.dtuSn || props.device?.name || |
| 110 | 110 | |
| 111 | 111 | // 从全局获取corpCode |
| 112 | 112 | const corpCode = inject('corpCode') |
| 113 | +import { getApiUrl } from '../config/api.js' | |
| 114 | + | |
| 113 | 115 | function withCorpCode(url) { |
| 114 | - if (!corpCode.value) return url | |
| 115 | - const sep = url.includes('?') ? '&' : '?' | |
| 116 | - return `${url}${sep}corpCode=${encodeURIComponent(corpCode.value)}` | |
| 116 | + const fullUrl = getApiUrl(url) | |
| 117 | + if (!corpCode.value) return fullUrl | |
| 118 | + const sep = fullUrl.includes('?') ? '&' : '?' | |
| 119 | + return `${fullUrl}${sep}corpCode=${encodeURIComponent(corpCode.value)}` | |
| 117 | 120 | } |
| 118 | 121 | |
| 119 | 122 | // API 数据 | ... | ... |
| ... | ... | @@ -124,10 +124,13 @@ const durationFilter = ref(null) |
| 124 | 124 | |
| 125 | 125 | // 从全局获取corpCode |
| 126 | 126 | const corpCode = inject('corpCode') |
| 127 | +import { getApiUrl } from '../config/api.js' | |
| 128 | + | |
| 127 | 129 | function withCorpCode(url) { |
| 128 | - if (!corpCode.value) return url | |
| 129 | - const sep = url.includes('?') ? '&' : '?' | |
| 130 | - return `${url}${sep}corpCode=${encodeURIComponent(corpCode.value)}` | |
| 130 | + const fullUrl = getApiUrl(url) | |
| 131 | + if (!corpCode.value) return fullUrl | |
| 132 | + const sep = fullUrl.includes('?') ? '&' : '?' | |
| 133 | + return `${fullUrl}${sep}corpCode=${encodeURIComponent(corpCode.value)}` | |
| 131 | 134 | } |
| 132 | 135 | |
| 133 | 136 | // 状态映射 | ... | ... |
| ... | ... | @@ -95,10 +95,13 @@ const dateRange = ref(null) |
| 95 | 95 | |
| 96 | 96 | // 从全局获取corpCode |
| 97 | 97 | const corpCode = inject('corpCode') |
| 98 | +import { getApiUrl } from '../config/api.js' | |
| 99 | + | |
| 98 | 100 | function withCorpCode(url) { |
| 99 | - if (!corpCode.value) return url | |
| 100 | - const sep = url.includes('?') ? '&' : '?' | |
| 101 | - return `${url}${sep}corpCode=${encodeURIComponent(corpCode.value)}` | |
| 101 | + const fullUrl = getApiUrl(url) | |
| 102 | + if (!corpCode.value) return fullUrl | |
| 103 | + const sep = fullUrl.includes('?') ? '&' : '?' | |
| 104 | + return `${fullUrl}${sep}corpCode=${encodeURIComponent(corpCode.value)}` | |
| 102 | 105 | } |
| 103 | 106 | |
| 104 | 107 | // 禁用未来日期 | ... | ... |
| ... | ... | @@ -143,10 +143,13 @@ const oeeData = ref(null) |
| 143 | 143 | |
| 144 | 144 | // 从全局获取corpCode |
| 145 | 145 | const corpCode = inject('corpCode') |
| 146 | +import { getApiUrl } from '../config/api.js' | |
| 147 | + | |
| 146 | 148 | function withCorpCode(url) { |
| 147 | - if (!corpCode.value) return url | |
| 148 | - const sep = url.includes('?') ? '&' : '?' | |
| 149 | - return `${url}${sep}corpCode=${encodeURIComponent(corpCode.value)}` | |
| 149 | + const fullUrl = getApiUrl(url) | |
| 150 | + if (!corpCode.value) return fullUrl | |
| 151 | + const sep = fullUrl.includes('?') ? '&' : '?' | |
| 152 | + return `${fullUrl}${sep}corpCode=${encodeURIComponent(corpCode.value)}` | |
| 150 | 153 | } |
| 151 | 154 | |
| 152 | 155 | // 布局常量 | ... | ... |
src/config/api.js
0 → 100644
| 1 | -import { createRouter, createWebHistory } from 'vue-router' | |
| 1 | +import { createRouter, createWebHashHistory } from 'vue-router' // 改用 Hash 模式 | |
| 2 | 2 | |
| 3 | 3 | const routes = [ |
| 4 | 4 | { |
| ... | ... | @@ -20,8 +20,8 @@ const routes = [ |
| 20 | 20 | ] |
| 21 | 21 | |
| 22 | 22 | const router = createRouter({ |
| 23 | - history: createWebHistory(), | |
| 23 | + history: createWebHashHistory('/iot/'), // 使用 Hash 模式 | |
| 24 | 24 | routes |
| 25 | 25 | }) |
| 26 | 26 | |
| 27 | -export default router | |
| 27 | +export default router | |
| \ No newline at end of file | ... | ... |
| ... | ... | @@ -319,10 +319,14 @@ const runStatusFilter = ref('') // runStatus 筛选: ''=全部, '0'=离线, '1'= |
| 319 | 319 | // 从全局获取corpCode(由App.vue提供) |
| 320 | 320 | const corpCode = inject('corpCode') |
| 321 | 321 | |
| 322 | +import { getApiUrl } from '../config/api.js' | |
| 323 | + | |
| 322 | 324 | // 给URL拼接corpCode |
| 323 | 325 | function withCorpCode(url) { |
| 324 | - const sep = url.includes('?') ? '&' : '?' | |
| 325 | - return `${url}${sep}corpCode=${encodeURIComponent(corpCode.value)}` | |
| 326 | + const fullUrl = getApiUrl(url) | |
| 327 | + if (!corpCode.value) return fullUrl | |
| 328 | + const sep = fullUrl.includes('?') ? '&' : '?' | |
| 329 | + return `${fullUrl}${sep}corpCode=${encodeURIComponent(corpCode.value)}` | |
| 326 | 330 | } |
| 327 | 331 | |
| 328 | 332 | // 各状态数量(接口返回后更新) | ... | ... |
| ... | ... | @@ -388,10 +388,13 @@ const lampStateFilter = ref('') // 灯状态筛选: ''=全部, '1'=绿, '2'=红, |
| 388 | 388 | |
| 389 | 389 | // 从全局获取corpCode |
| 390 | 390 | const corpCode = inject('corpCode') |
| 391 | +import { getApiUrl } from '../config/api.js' | |
| 392 | + | |
| 391 | 393 | function withCorpCode(url) { |
| 392 | - if (!corpCode.value) return url | |
| 393 | - const sep = url.includes('?') ? '&' : '?' | |
| 394 | - return `${url}${sep}corpCode=${encodeURIComponent(corpCode.value)}` | |
| 394 | + const fullUrl = getApiUrl(url) | |
| 395 | + if (!corpCode.value) return fullUrl | |
| 396 | + const sep = fullUrl.includes('?') ? '&' : '?' | |
| 397 | + return `${fullUrl}${sep}corpCode=${encodeURIComponent(corpCode.value)}` | |
| 395 | 398 | } |
| 396 | 399 | |
| 397 | 400 | // 各颜色数量(接口返回后更新,初始默认值) | ... | ... |
| ... | ... | @@ -2,20 +2,19 @@ import { fileURLToPath, URL } from 'node:url' |
| 2 | 2 | |
| 3 | 3 | import { defineConfig } from 'vite' |
| 4 | 4 | import vue from '@vitejs/plugin-vue' |
| 5 | -import vueDevTools from 'vite-plugin-vue-devtools' | |
| 6 | 5 | |
| 7 | 6 | // https://vite.dev/config/ |
| 8 | 7 | export default defineConfig({ |
| 8 | + base: '/iot/', | |
| 9 | 9 | plugins: [ |
| 10 | 10 | vue(), |
| 11 | - vueDevTools(), | |
| 12 | 11 | ], |
| 13 | 12 | server: { |
| 14 | 13 | proxy: { |
| 15 | 14 | '/api': { |
| 16 | - target: 'http://127.0.0.1:8080', | |
| 15 | + target: 'http://182.127.106.19:81', | |
| 17 | 16 | changeOrigin: true, |
| 18 | - rewrite: (path) => path.replace(/^\/api/, ''), | |
| 17 | + rewrite: (path) => path.replace(/^\/api/, '/iot-scheduler'), | |
| 19 | 18 | }, |
| 20 | 19 | }, |
| 21 | 20 | }, | ... | ... |