diff --git a/admin/.env.production b/admin/.env.production index 6fb36dc..2e63226 100644 --- a/admin/.env.production +++ b/admin/.env.production @@ -4,7 +4,7 @@ VITE_APP_TITLE=相宜相亲后台管理系统 # API基础地址 - 生产环境请修改为实际地址 -VITE_API_BASE_URL=https://api.example.com +VITE_API_BASE_URL=https://app.zpc-xy.com/xyqj/adminapi/api # 静态资源服务器地址 - 生产环境请修改为实际地址 -VITE_STATIC_BASE_URL=https://static.example.com +VITE_STATIC_BASE_URL=https://app.zpc-xy.com/xyqj/adminapi diff --git a/admin/Dockerfile b/admin/Dockerfile new file mode 100644 index 0000000..f1d4772 --- /dev/null +++ b/admin/Dockerfile @@ -0,0 +1,30 @@ +# 构建阶段 +FROM node:20-alpine AS build + +WORKDIR /app + +# 复制 package 文件 +COPY package*.json ./ + +# 删除 lock 文件并重新安装 +RUN rm -f package-lock.json && npm install + +# 复制源代码 +COPY . . + +# 构建应用 +RUN npm run build + +# 生产阶段 +FROM nginx:alpine + +# 复制构建产物到 nginx +COPY --from=build /app/dist /usr/share/nginx/html + +# 复制 nginx 配置 +COPY nginx.conf /etc/nginx/conf.d/default.conf + +# 暴露端口 +EXPOSE 80 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/admin/nginx.conf b/admin/nginx.conf new file mode 100644 index 0000000..687ae6f --- /dev/null +++ b/admin/nginx.conf @@ -0,0 +1,28 @@ +server { + listen 80; + server_name localhost; + root /usr/share/nginx/html; + index index.html; + + # 处理前端路由 + location / { + try_files $uri $uri/ /index.html; + } + + # 静态资源缓存 + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + } + + # 安全头 + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Content-Type-Options "nosniff" always; + add_header X-XSS-Protection "1; mode=block" always; + + # 压缩 + gzip on; + gzip_vary on; + gzip_min_length 1024; + gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json; +} diff --git a/admin/package.json b/admin/package.json index 365bed3..5af7cb9 100644 --- a/admin/package.json +++ b/admin/package.json @@ -13,33 +13,33 @@ "test:watch": "vitest" }, "dependencies": { - "@element-plus/icons-vue": "^2.3.2", + "@element-plus/icons-vue": "^2.1.0", "@types/nprogress": "^0.2.3", - "axios": "^1.13.2", - "echarts": "^6.0.0", - "element-plus": "^2.13.0", + "axios": "^1.6.8", + "echarts": "^5.4.3", + "element-plus": "^2.7.8", "nprogress": "^0.2.0", - "pinia": "^3.0.4", - "vue": "^3.5.13", - "vue-router": "^4.6.4" + "pinia": "^2.1.7", + "vue": "^3.3.13", + "vue-router": "^4.2.5" }, "devDependencies": { "@eslint/js": "^9.28.0", - "@types/node": "^25.0.3", - "@typescript-eslint/eslint-plugin": "^8.33.0", - "@typescript-eslint/parser": "^8.33.0", - "@vitejs/plugin-vue": "^5.2.3", - "@vitest/coverage-v8": "^4.0.16", - "eslint": "^9.28.0", - "eslint-plugin-vue": "^10.1.0", - "fast-check": "^4.5.3", - "prettier": "^3.5.3", - "sass": "^1.97.1", - "typescript": "~5.8.3", - "unplugin-auto-import": "^20.3.0", - "unplugin-vue-components": "^30.0.0", - "vite": "^6.3.5", - "vitest": "^4.0.16", - "vue-tsc": "^2.2.10" + "@types/node": "^20.16.11", + "@typescript-eslint/eslint-plugin": "^7.18.0", + "@typescript-eslint/parser": "^7.18.0", + "@vitejs/plugin-vue": "^5.1.4", + "@vitest/coverage-v8": "^1.6.0", + "eslint": "^8.57.1", + "eslint-plugin-vue": "^9.28.0", + "fast-check": "^3.22.0", + "prettier": "^3.3.3", + "sass": "^1.79.4", + "typescript": "~5.6.3", + "unplugin-auto-import": "^0.18.3", + "unplugin-vue-components": "^0.27.4", + "vite": "^5.4.8", + "vitest": "^1.6.0", + "vue-tsc": "^2.1.6" } } diff --git a/admin/src/api/auth.ts b/admin/src/api/auth.ts index 1e6077b..8e2e242 100644 --- a/admin/src/api/auth.ts +++ b/admin/src/api/auth.ts @@ -26,6 +26,6 @@ export function logout(): Promise { * 获取当前管理员信息 * @returns 管理员用户信息 */ -export function getCurrentAdmin(): Promise { +export function getCurrentAdmin(): Promise> { return request.get('/admin/auth/current') } diff --git a/admin/src/main.ts b/admin/src/main.ts index 86f2db9..f6c7cfe 100644 --- a/admin/src/main.ts +++ b/admin/src/main.ts @@ -11,6 +11,13 @@ import '@/assets/styles/index.scss' import router from './router' import App from './App.vue' +// 输出版本信息到控制台 +console.log('🚀 XiangYi Admin System') +console.log('📦 Vue Version:', '3.4.38') +console.log('🎨 Element Plus Version:', '2.8.4') +console.log('🕒 Build Time:', new Date().toISOString()) +console.log('🔄 Cache Buster:', Math.random().toString(36).substr(2, 9)) + const app = createApp(App) // 注册 Element Plus 图标 diff --git a/admin/vite.config.ts b/admin/vite.config.ts index 2d207e7..87ec672 100644 --- a/admin/vite.config.ts +++ b/admin/vite.config.ts @@ -1,34 +1,35 @@ import { defineConfig, loadEnv } from 'vite' import vue from '@vitejs/plugin-vue' import { resolve } from 'path' -import AutoImport from 'unplugin-auto-import/vite' -import Components from 'unplugin-vue-components/vite' -import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' +// import AutoImport from 'unplugin-auto-import/vite' +// import Components from 'unplugin-vue-components/vite' +// import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), '') return { plugins: [ - vue(), - AutoImport({ - imports: ['vue', 'vue-router', 'pinia'], - resolvers: [ - ElementPlusResolver() - ], - dts: 'src/auto-imports.d.ts', - eslintrc: { - enabled: true - } - }), - Components({ - resolvers: [ - ElementPlusResolver() - ], - dts: 'src/components.d.ts', - // 自动导入组件的目录 - dirs: ['src/components'] - }) + vue() + // 暂时禁用自动导入插件来解决兼容性问题 + // AutoImport({ + // imports: ['vue', 'vue-router', 'pinia'], + // resolvers: [ + // ElementPlusResolver() + // ], + // dts: 'src/auto-imports.d.ts', + // eslintrc: { + // enabled: true + // } + // }), + // Components({ + // resolvers: [ + // ElementPlusResolver() + // ], + // dts: 'src/components.d.ts', + // // 自动导入组件的目录 + // dirs: ['src/components'] + // }) ], resolve: { alias: { @@ -59,12 +60,14 @@ export default defineConfig(({ mode }) => { rollupOptions: { output: { manualChunks: { + vue: ['vue', 'vue-router', 'pinia'], 'element-plus': ['element-plus'], - echarts: ['echarts'], - vue: ['vue', 'vue-router', 'pinia'] + echarts: ['echarts'] } } - } + }, + target: 'es2015', + minify: 'esbuild' } } })