This commit is contained in:
code@server 2026-01-14 02:08:43 +08:00
parent 96d403a342
commit d8ae9c87ef
7 changed files with 119 additions and 51 deletions

View File

@ -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

30
admin/Dockerfile Normal file
View File

@ -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;"]

28
admin/nginx.conf Normal file
View File

@ -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;
}

View File

@ -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"
}
}

View File

@ -26,6 +26,6 @@ export function logout(): Promise<void> {
*
* @returns
*/
export function getCurrentAdmin(): Promise<LoginResponse['adminUser']> {
export function getCurrentAdmin(): Promise<Omit<LoginResponse, 'token'>> {
return request.get('/admin/auth/current')
}

View File

@ -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 图标

View File

@ -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'
}
}
})