From 0a61e57f9d118c7498eb746a7fd3f0997c5777a3 Mon Sep 17 00:00:00 2001 From: wangrui233 Date: Tue, 27 Oct 2026 23:44:33 +0800 Subject: [PATCH] init --- .env.development | 6 +++--- .env.production | 2 +- mock/index.ts | 38 ++++++++++++++++++------------------ mock/plugin.ts | 2 +- src/api/auth/index.ts | 2 +- src/api/file/index.ts | 2 +- src/api/miniapp/index.ts | 4 ++-- src/api/system/user/index.ts | 2 +- src/views/file/index.vue | 11 ++++------- vite.config.ts | 9 +++++++-- 10 files changed, 40 insertions(+), 38 deletions(-) diff --git a/.env.development b/.env.development index ca4c295..fb17dcc 100644 --- a/.env.development +++ b/.env.development @@ -4,13 +4,13 @@ VITE_APP_TITLE = 'Portal 管理后台' # 部署基础路径 VITE_APP_BASE_URL = '/' -# 接口前缀(本地走 Vite proxy) -VITE_APP_BASE_API = '/' +# 接口前缀留空:请求直接以 /api/... 发起,由 Vite proxy 的 /api 规则转发到后端 +VITE_APP_BASE_API = '' # 后端真实地址 VITE_APP_API_URL = 'http://localhost:8080' -# 是否启用本地 mock(true 时拦截全部 /api/v1 请求;false 时仅命中标记 alwaysMock 的接口) +# 是否启用本地 mock(true 时拦截 /api 请求) VITE_USE_MOCK = 'false' # 开发端口 diff --git a/.env.production b/.env.production index fa327c8..3e24ad5 100644 --- a/.env.production +++ b/.env.production @@ -1,6 +1,6 @@ VITE_APP_TITLE = 'Portal 管理后台' VITE_APP_BASE_URL = '/' -VITE_APP_BASE_API = '/api/v1' +VITE_APP_BASE_API = '' VITE_APP_API_URL = 'https://api.example.com' VITE_USE_MOCK = 'false' VITE_APP_PORT = '3000' diff --git a/mock/index.ts b/mock/index.ts index ce9381f..02ca2dd 100644 --- a/mock/index.ts +++ b/mock/index.ts @@ -33,7 +33,7 @@ const pickString = (value: unknown, fallback = '') => (typeof value === 'string' export const mockRules: MockRule[] = [ { method: 'POST', - pattern: /^\/api\/v1\/auth\/login$/, + pattern: /^\/api\/auth\/login$/, handler: (ctx) => ({ accessToken: 'mock-access-token', refreshToken: 'mock-refresh-token', @@ -44,12 +44,12 @@ export const mockRules: MockRule[] = [ }, { method: 'POST', - pattern: /^\/api\/v1\/auth\/logout$/, + pattern: /^\/api\/auth\/logout$/, handler: () => true, }, { method: 'GET', - pattern: /^\/api\/v1\/auth\/me$/, + pattern: /^\/api\/auth\/me$/, handler: () => ({ userId: 1, username: 'admin', @@ -70,12 +70,12 @@ export const mockRules: MockRule[] = [ }, { method: 'GET', - pattern: /^\/api\/v1\/auth\/routes$/, + pattern: /^\/api\/auth\/routes$/, handler: () => menuRoutes, }, { method: 'GET', - pattern: /^\/api\/v1\/api\/admin\/users$/, + pattern: /^\/api\/api\/admin\/users$/, handler: (ctx) => { const page = toNumber(ctx.query.page, 1) const size = toNumber(ctx.query.size, 20) @@ -94,12 +94,12 @@ export const mockRules: MockRule[] = [ }, { method: 'GET', - pattern: /^\/api\/v1\/api\/admin\/users\/(\d+)$/, + pattern: /^\/api\/api\/admin\/users\/(\d+)$/, handler: (ctx) => users.find((item) => item.id === toNumber(ctx.params[0])) ?? null, }, { method: 'PUT', - pattern: /^\/api\/v1\/api\/admin\/users\/(\d+)$/, + pattern: /^\/api\/api\/admin\/users\/(\d+)$/, handler: (ctx) => { const target = users.find((item) => item.id === toNumber(ctx.params[0])) if (!target) return false @@ -113,7 +113,7 @@ export const mockRules: MockRule[] = [ }, { method: 'POST', - pattern: /^\/api\/v1\/api\/admin\/users\/(\d+)\/status$/, + pattern: /^\/api\/api\/admin\/users\/(\d+)\/status$/, handler: (ctx) => { const target = users.find((item) => item.id === toNumber(ctx.params[0])) if (!target) return false @@ -125,7 +125,7 @@ export const mockRules: MockRule[] = [ }, { method: 'GET', - pattern: /^\/api\/v1\/api\/admin\/miniapps$/, + pattern: /^\/api\/api\/admin\/miniapps$/, handler: (ctx) => { const { status } = ctx.query const pageNum = toNumber(ctx.query.pageNum, 1) @@ -142,7 +142,7 @@ export const mockRules: MockRule[] = [ }, { method: 'GET', - pattern: /^\/api\/v1\/api\/admin\/miniapps\/(\d+)$/, + pattern: /^\/api\/api\/admin\/miniapps\/(\d+)$/, handler: (ctx) => { const target = miniApps.find((item) => item.id === toNumber(ctx.params[0])) if (!target) return null @@ -152,7 +152,7 @@ export const mockRules: MockRule[] = [ }, { method: 'POST', - pattern: /^\/api\/v1\/api\/admin\/miniapps$/, + pattern: /^\/api\/api\/admin\/miniapps$/, handler: (ctx) => { const id = miniApps.length + 1 const created: MockMiniApp = { @@ -172,7 +172,7 @@ export const mockRules: MockRule[] = [ }, { method: 'PUT', - pattern: /^\/api\/v1\/api\/admin\/miniapps\/(\d+)$/, + pattern: /^\/api\/api\/admin\/miniapps\/(\d+)$/, handler: (ctx) => { const target = miniApps.find((item) => item.id === toNumber(ctx.params[0])) if (!target) return false @@ -189,7 +189,7 @@ export const mockRules: MockRule[] = [ }, { method: 'DELETE', - pattern: /^\/api\/v1\/api\/admin\/miniapps\/([\d,]+)$/, + pattern: /^\/api\/api\/admin\/miniapps\/([\d,]+)$/, handler: (ctx) => { const ids = ctx.params[0].split(',').map((id) => toNumber(id)) ids.forEach((id) => { @@ -201,7 +201,7 @@ export const mockRules: MockRule[] = [ }, { method: 'GET', - pattern: /^\/api\/v1\/api\/admin\/files$/, + pattern: /^\/api\/api\/admin\/files$/, handler: (ctx) => { const { keyword, uploader_type, page, size } = ctx.query const pageNum = toNumber(page, 1) @@ -221,7 +221,7 @@ export const mockRules: MockRule[] = [ }, { method: 'POST', - pattern: /^\/api\/v1\/api\/admin\/files\/upload$/, + pattern: /^\/api\/api\/admin\/files\/upload$/, handler: () => { const id = files.length + 1 const rand = Math.random().toString(36).slice(2, 10) @@ -251,7 +251,7 @@ export const mockRules: MockRule[] = [ }, { method: 'DELETE', - pattern: /^\/api\/v1\/api\/admin\/files\/(\d+)$/, + pattern: /^\/api\/api\/admin\/files\/(\d+)$/, handler: (ctx) => { const id = toNumber(ctx.params[0]) const index = files.findIndex((item) => item.id === id) @@ -262,7 +262,7 @@ export const mockRules: MockRule[] = [ { // 统计每个小程序的用户数(有真实用户的取真实值,其余返回稳定模拟值) method: 'GET', - pattern: /^\/api\/v1\/api\/admin\/dashboard\/user-count-by-miniapp$/, + pattern: /^\/api\/api\/admin\/dashboard\/user-count-by-miniapp$/, alwaysMock: true, handler: () => miniApps.map((app) => { @@ -276,7 +276,7 @@ export const mockRules: MockRule[] = [ }, { method: 'GET', - pattern: /^\/api\/v1\/api\/admin\/monitor\/server-info$/, + pattern: /^\/api\/api\/admin\/monitor\/server-info$/, alwaysMock: true, handler: () => ({ hostname: 'portal-server-01', @@ -293,7 +293,7 @@ export const mockRules: MockRule[] = [ { // 实时状态:每次请求生成浮动指标,模拟监控采集中 method: 'GET', - pattern: /^\/api\/v1\/api\/admin\/monitor\/server-status$/, + pattern: /^\/api\/api\/admin\/monitor\/server-status$/, alwaysMock: true, handler: () => { const cpuUsage = Math.round((20 + Math.random() * 60) * 10) / 10 diff --git a/mock/plugin.ts b/mock/plugin.ts index ab977a6..4346f8e 100644 --- a/mock/plugin.ts +++ b/mock/plugin.ts @@ -1,7 +1,7 @@ import type { Plugin } from 'vite' import { mockRules, type MockContext } from './index' -const MOCK_PREFIX = '/api/v1' +const MOCK_PREFIX = '/api' function readBody(req: NodeJS.ReadableStream): Promise { return new Promise((resolve) => { diff --git a/src/api/auth/index.ts b/src/api/auth/index.ts index 986065a..7b4ebd7 100644 --- a/src/api/auth/index.ts +++ b/src/api/auth/index.ts @@ -3,7 +3,7 @@ import type { LoginForm, LoginResult, UserInfo } from '@/types/auth' import type { RouteVO } from '@/types/router' import { staticMenuRoutes } from '@/config/static-routes' -// 叠加在 VITE_APP_BASE_API(/api/v1) 之上,经 Vite proxy 剥离 /api/v1 后命中后端 /api/admin +// 请求直接以 /api/admin 发起,由 Vite proxy 的 /api 规则转发到后端 const ADMIN_BASE = '/api/admin' export const AuthAPI = { diff --git a/src/api/file/index.ts b/src/api/file/index.ts index 120f162..62f7033 100644 --- a/src/api/file/index.ts +++ b/src/api/file/index.ts @@ -2,7 +2,7 @@ import request from '@/utils/request' import type { PageResult } from '@/types/common' import type { FileQuery, FileUploadVO, FileVO } from '@/types/file' -// 叠加在 VITE_APP_BASE_API(/api/v1) 之上,经 Vite proxy 剥离 /api/v1 后命中后端 /api/admin/files +// 请求直接以 /api/admin/files 发起,由 Vite proxy 的 /api 规则转发到后端 const BASE_URL = '/api/admin/files' export const FileAPI = { diff --git a/src/api/miniapp/index.ts b/src/api/miniapp/index.ts index 10856c1..f46fe73 100644 --- a/src/api/miniapp/index.ts +++ b/src/api/miniapp/index.ts @@ -2,8 +2,8 @@ import request from '@/utils/request' import type { PageResult } from '@/types/common' import type { MiniAppForm, MiniAppQuery, MiniAppStatus, MiniAppVO } from '@/types/miniapp' -// 前端基础路径 VITE_APP_BASE_API 为 /api/v1,经 Vite proxy 整体剥离后转发到 Go 后端; -// 此处拼接 /api/admin/miniapps,剥离 /api/v1 后即可精确命中后端 /api/admin/miniapps +// 请求直接以 /api/admin/miniapps 发起,由 Vite proxy 的 /api 规则转发到 Go 后端; +// 精确命中后端 /api/admin/miniapps const BASE_URL = '/api/admin/miniapps' export const MiniAppAPI = { diff --git a/src/api/system/user/index.ts b/src/api/system/user/index.ts index d4a1621..9c52175 100644 --- a/src/api/system/user/index.ts +++ b/src/api/system/user/index.ts @@ -2,7 +2,7 @@ import request from '@/utils/request' import type { PageResult } from '@/types/common' import type { UserForm, UserQuery, UserStatus, UserVO } from '@/types/system/user' -// 叠加在 VITE_APP_BASE_API(/api/v1) 上,经 Vite proxy 剥离 /api/v1 后命中后端 /api/admin/users +// 请求直接以 /api/admin/users 发起,由 Vite proxy 的 /api 规则转发到后端 const BASE_URL = '/api/admin/users' export const UserAPI = { diff --git a/src/views/file/index.vue b/src/views/file/index.vue index cfb4ee3..af66ab7 100644 --- a/src/views/file/index.vue +++ b/src/views/file/index.vue @@ -8,9 +8,6 @@ defineOptions({ name: 'File' }) - /** 经 Vite proxy 拼接前缀,使本地静态访问也走后端代理(避免硬编码域名/端口) */ - const previewUrl = (url: string) => `${import.meta.env.VITE_APP_BASE_API}${url}` - const loading = ref(false) const total = ref(0) const list = ref([]) @@ -79,12 +76,12 @@ } function handlePreview(row: FileVO) { - window.open(previewUrl(row.url), '_blank') + window.open(row.url, '_blank') } function handleDownload(row: FileVO) { const link = document.createElement('a') - link.href = previewUrl(row.url) + link.href = row.url link.download = row.origin_name || row.filename link.click() } @@ -163,8 +160,8 @@