feat: 添加 PWA 插件支持,更新环境变量处理,优化可见性选项

This commit is contained in:
xiongxiao
2026-03-18 17:00:49 +08:00
committed by cnb
parent 0b08b82356
commit bc9ce9e5df
6 changed files with 31 additions and 15 deletions

View File

@@ -44,6 +44,7 @@
"react-dom": "^19.2.4", "react-dom": "^19.2.4",
"react-hook-form": "^7.71.2", "react-hook-form": "^7.71.2",
"sonner": "^2.0.7", "sonner": "^2.0.7",
"vite-plugin-pwa": "^1.2.0",
"zod": "^4.3.6", "zod": "^4.3.6",
"zustand": "^5.0.12" "zustand": "^5.0.12"
}, },

View File

@@ -17,16 +17,17 @@
"registry": "" "registry": ""
} }
], ],
"scripts": {
"auth": "ev sync clone -l -i https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/public/auth.json"
},
"sync": { "sync": {
"AGENTS.md": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/AGENTS.md", "AGENTS.md": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/AGENTS.md",
"vite.config.ts": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/vite.config.ts", "vite.config.ts": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/vite.config.ts",
"src/main.tsx": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/main.tsx", "src/main.tsx": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/main.tsx",
"src/agents/app.ts": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/agents/app.ts", "public/auth.json": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/public/auth.json",
"src/agents/index.ts": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/agents/index.ts", "src/agents/index.ts": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/agents/index.ts",
"src/modules/basename.ts": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/modules/basename.ts", "src/modules/basename.ts": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/modules/basename.ts",
"src/modules/query.ts": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/modules/query.ts", "src/modules/query.ts": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/modules/query.ts",
"src/pages/page.tsx": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/pages/page.tsx",
"src/routes/__root.tsx": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/routes/__root.tsx",
"src/routes/demo.tsx": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/routes/demo.tsx", "src/routes/demo.tsx": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/routes/demo.tsx",
"src/routes/index.tsx": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/routes/index.tsx", "src/routes/index.tsx": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/routes/index.tsx",
"src/routes/login.tsx": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/routes/login.tsx", "src/routes/login.tsx": "https://kevisual.cn/root/ai/kevisual/frontend/vite-react-template/src/routes/login.tsx",

View File

@@ -19,4 +19,14 @@ export const getDynamicBasename = (): string => {
} }
// 默认使用构建时的 basename // 默认使用构建时的 basename
return basename return basename
}
export const openLink = (path: string, target: string = '_self') => {
if (path.startsWith('http://') || path.startsWith('https://')) {
window.open(path, target);
return;
}
const url = new URL(path, window.location.origin);
url.pathname = wrapBasename(url.pathname);
window.open(url.toString(), target);
} }

View File

@@ -83,7 +83,6 @@ export const BaseHeader = (props: { main?: React.ComponentType | null }) => {
{meInfo} {meInfo}
</div> </div>
</div> </div>
<hr />
</> </>
) )
} }

View File

@@ -49,7 +49,7 @@ export function CreateRepoDialog({ open, onOpenChange }: CreateRepoDialogProps)
path: '', path: '',
license: '', license: '',
description: '', description: '',
visibility: 'public' visibility: 'Public'
}) })
} }
}, [open, reset]) }, [open, reset])
@@ -104,16 +104,16 @@ export function CreateRepoDialog({ open, onOpenChange }: CreateRepoDialogProps)
<Controller <Controller
name="visibility" name="visibility"
control={control} control={control}
defaultValue="public" defaultValue="Public"
render={({ field }) => ( render={({ field: { onChange, value } }) => (
<Select {...field}> <Select onValueChange={onChange} value={value}>
<SelectTrigger id="visibility"> <SelectTrigger id="visibility">
<SelectValue placeholder="选择可见性" /> <SelectValue placeholder="选择可见性" />
</SelectTrigger> </SelectTrigger>
<SelectContent> <SelectContent>
<SelectItem value="public"> (public)</SelectItem> <SelectItem value="Public"> (public)</SelectItem>
<SelectItem value="private"> (private)</SelectItem> <SelectItem value="Private"> (private)</SelectItem>
<SelectItem value="protected"> (protected)</SelectItem> <SelectItem value="Protected"> (protected)</SelectItem>
</SelectContent> </SelectContent>
</Select> </Select>
)} )}

View File

@@ -4,12 +4,14 @@ import path from 'path';
import pkgs from './package.json'; import pkgs from './package.json';
import tailwindcss from '@tailwindcss/vite'; import tailwindcss from '@tailwindcss/vite';
import { tanstackRouter } from '@tanstack/router-plugin/vite' import { tanstackRouter } from '@tanstack/router-plugin/vite'
import 'dotenv/config'; import dotenv from 'dotenv';
import { VitePWA } from 'vite-plugin-pwa';
const isDev = process.env.NODE_ENV === 'development'; const env = dotenv.config().parsed || {};
const isDev = env.NODE_ENV === 'development' || process.env.NODE_ENV === 'development';
const basename = isDev ? '/' : pkgs?.basename || '/'; const basename = isDev ? '/' : pkgs?.basename || '/';
let target = process.env.VITE_API_URL || 'http://localhost:51515'; let target = env.VITE_API_URL || process.env.API_URL || 'http://localhost:51515';
const apiProxy = { target: target, changeOrigin: true, ws: true, rewriteWsOrigin: true, secure: false, cookieDomainRewrite: 'localhost' }; const apiProxy = { target: target, changeOrigin: true, ws: true, rewriteWsOrigin: true, secure: false, cookieDomainRewrite: 'localhost' };
let proxy = { let proxy = {
'/root/': apiProxy, '/root/': apiProxy,
@@ -27,7 +29,10 @@ export default defineConfig({
autoCodeSplitting: true, autoCodeSplitting: true,
}), }),
react(), react(),
tailwindcss() tailwindcss(),
VitePWA({
injectRegister: 'auto',
}),
], ],
resolve: { resolve: {
alias: { alias: {