feat:云同步,部分功能生效

This commit is contained in:
ShaoHua
2026-06-12 00:49:03 +08:00
parent c54f2e2ecc
commit a7ba814833
34 changed files with 1532 additions and 471 deletions
+54 -7
View File
@@ -1,6 +1,9 @@
import { defineConfig } from 'vite'
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
import { dirname, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
const __dirname = dirname(fileURLToPath(import.meta.url))
export default defineConfig(({ mode }) => {
// Use `vite build --mode maui` to emit artifacts into the MAUI app's `wwwroot` for embedded hosting.
@@ -8,6 +11,20 @@ export default defineConfig(({ mode }) => {
? resolve(__dirname, '../Hua.Todo.Maui/wwwroot')
: resolve(__dirname, 'dist')
// 主动加载 .env 文件,vite.config.ts 执行时 Vite 尚未自动加载
const env = loadEnv(mode, __dirname, '')
// Dev 模式下各端点的代理目标,严格从环境变量读取:
// - VITE_API_TARGET(必需): API 及云同步共用的代理目标
// - VITE_CLOUD_SYNC_URL(可选): 云同步独立远端地址,未设置时回退到 VITE_API_TARGET
// Build 模式下 proxy 配置不生效(无 dev server),仅 dev 模式使用
const apiTarget = env.VITE_API_TARGET
const cloudSyncTarget = env.VITE_CLOUD_SYNC_URL || apiTarget
if (!apiTarget) {
throw new Error(`[vite.config] 缺少必需的环境变量: VITE_API_TARGET。请检查 .env.${mode} 文件。`)
}
return {
plugins: [vue()],
build: {
@@ -15,16 +32,46 @@ export default defineConfig(({ mode }) => {
emptyOutDir: true,
},
define: {
'window.__API_BASE_URL__': JSON.stringify('/api')
// 非 MAUI 模式下静态替换 API 基地址;MAUI 模式下由宿主在运行时注入
...(mode !== 'maui' ? { 'window.__API_BASE_URL__': JSON.stringify('/api') } : {}),
// MAUI 模式标识:用于区分云同步请求的行为
'window.__IS_MAUI__': JSON.stringify(mode === 'maui'),
},
server: {
port: 5174,
proxy: {
// 本地 API 代理到后端
'/api': {
target: 'http://localhost:5173',
changeOrigin: true,
secure: false,
},
target: apiTarget,
changeOrigin: true,
secure: false,
},
// 云同步端点代理到远端服务器
'/auth': {
target: cloudSyncTarget,
changeOrigin: true,
secure: false,
},
'/tasks': {
target: cloudSyncTarget,
changeOrigin: true,
secure: false,
},
'/sync': {
target: cloudSyncTarget,
changeOrigin: true,
secure: false,
},
'/security': {
target: cloudSyncTarget,
changeOrigin: true,
secure: false,
},
'/cloud-sync': {
target: cloudSyncTarget,
changeOrigin: true,
secure: false,
},
},
},
}