diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..cbf979b --- /dev/null +++ b/.drone.yml @@ -0,0 +1,69 @@ +kind: pipeline +type: docker +name: 武术系统前端自动部署 + +# 只在 main 分支触发 +trigger: + branch: + - main + event: + - push + +steps: + # 步骤1:安装依赖 + - name: 安装依赖 + image: node:18-alpine + commands: + - echo "开始安装 npm 依赖..." + - npm install + - echo "✅ 依赖安装完成" + + # 步骤2:构建生产版本 + - name: 构建前端项目 + image: node:18-alpine + commands: + - echo "开始构建前端项目..." + - npm run build + - ls -lh dist/ + - echo "✅ 前端构建完成" + + # 步骤3:传输文件到服务器 + - name: 传输构建产物 + image: appleboy/drone-scp + settings: + host: 154.30.6.21 + username: root + key: + from_secret: ssh_key + port: 22 + target: /app/martial/frontend-build + source: + - dist/* + - Dockerfile + - nginx.conf + strip_components: 0 + + # 步骤4:在服务器上构建镜像并部署 + - name: 部署到生产环境 + image: appleboy/drone-ssh + settings: + host: 154.30.6.21 + username: root + key: + from_secret: ssh_key + port: 22 + script: + - cd /app/martial/frontend-build + - docker build -f Dockerfile.deploy -t martial/frontend:latest . + - docker rm -f martial-frontend || true + - docker run -d --name martial-frontend --restart always -p 5173:80 --network martial_martial-network -e TZ=Asia/Shanghai martial/frontend:latest + - docker ps | grep martial-frontend + - echo "✅ 前端部署完成" + + # 步骤5:健康检查 + - name: 健康检查 + image: curlimages/curl:latest + commands: + - sleep 5 + - curl -f http://154.30.6.21/ || exit 1 + - echo "✅ 前端访问正常" diff --git a/.env.production b/.env.production index 9be1caf..805843c 100644 --- a/.env.production +++ b/.env.production @@ -6,7 +6,8 @@ VITE_APP_ENV = 'https://2df1-223-74-180-188.ngrok-free.app ' #接口地址 #填写前缀 [/api] 需要用nginx进行反向代理 #填写地址 [https://api.bladex.cn] 只需要保证接口支持跨域即可, 无需再做代理 -VITE_APP_API=/api +# 改为空字符串,因为 BladeX 的端点路径已包含完整路径(/blade-auth, /blade-system, /api/martial) +VITE_APP_API= #页面基础路径 VITE_APP_BASE=/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c996938 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +# 构建阶段 +FROM node:18-alpine AS builder + +WORKDIR /build + +# 复制 package 文件和 npm 配置 +COPY package*.json ./ +COPY .npmrc ./ + +# 安装依赖(.npmrc 中已配置私有 registry 和认证) +RUN npm install + +# 复制源码 +COPY . . + +# 构建生产版本 +RUN npm run build + +# 运行阶段:使用 Nginx 服务静态文件 +FROM nginx:alpine + +LABEL maintainer="JohnSion" +LABEL description="武术比赛管理系统前端" + +# 复制构建产物到 Nginx 目录 +COPY --from=builder /build/dist /usr/share/nginx/html + +# 复制 Nginx 配置 +COPY nginx.conf /etc/nginx/conf.d/default.conf + +# 暴露端口 +EXPOSE 80 + +# 健康检查 +HEALTHCHECK --interval=30s --timeout=3s CMD wget -q --spider http://localhost/ || exit 1 + +# 启动 Nginx +CMD ["nginx", "-g", "daemon off;"] diff --git a/README.md b/README.md index e69de29..d3a59f7 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,270 @@ +# 武术赛事通 - 前端项目 + +基于 Vue 3 + Vite + Element Plus 构建 + +## 🌐 在线访问 + +- **生产环境**: https://martial.johnsion.club +- **后端 API**: https://martial-api.johnsion.club +- **API 文档**: https://martial-doc.johnsion.club + +## 📦 技术栈 + +- **框架**: Vue 3.4 (Composition API) +- **构建工具**: Vite 5 +- **UI 组件**: Element Plus +- **表单/表格**: Avue +- **HTTP 库**: Axios +- **路由**: Vue Router 4 +- **状态管理**: Vuex 4 +- **样式**: Sass/SCSS + +## 📁 项目结构 + +``` +martial-web/ +├── src/ +│ ├── main.js # 应用入口 +│ ├── App.vue # 根组件 +│ ├── router/ # 路由配置 +│ ├── store/ # Vuex 状态管理 +│ ├── views/ # 页面组件 +│ ├── components/ # 通用组件 +│ ├── api/ # API 接口 +│ └── utils/ # 工具函数 +├── public/ # 静态资源 +├── .env.development # 开发环境配置 +├── .env.production # 生产环境配置 +├── vite.config.js # Vite 配置 +├── nginx.conf # Nginx 配置(生产环境容器使用) +├── Dockerfile # 完整构建 Dockerfile +├── Dockerfile.deploy # 部署 Dockerfile +└── .drone.yml # Drone CI/CD 配置 +``` + +## 🚀 本地开发 + +### 环境要求 + +- Node.js >= 18 +- npm >= 9 + +### 安装依赖 + +```bash +npm install +``` + +### 开发运行 + +```bash +npm run dev +``` + +访问 http://localhost:5173 + +### 生产构建 + +```bash +npm run build +``` + +构建产物在 `dist/` 目录 + +### 预览生产构建 + +```bash +npm run serve +``` + +## 🐳 Docker 部署 + +### 方法一:完整构建(开发/测试) + +```bash +docker build -t martial/frontend:latest -f Dockerfile . +docker run -d -p 80:80 martial/frontend:latest +``` + +### 方法二:部署已构建产物(生产推荐) + +```bash +# 先本地构建 +npm run build + +# 使用 Dockerfile.deploy 轻量化部署 +docker build -t martial/frontend:latest -f Dockerfile.deploy . + +# 运行容器 +docker run -d \ + --name martial-frontend \ + --restart always \ + -p 5173:80 \ + --network martial_martial-network \ + -e TZ=Asia/Shanghai \ + martial/frontend:latest +``` + +## 🔄 CI/CD 自动部署 + +项目使用 Drone CI/CD 进行自动化部署。 + +### 部署流程 + +当推送到 `main` 分支时,自动触发: + +1. **安装依赖** - `npm install` +2. **构建项目** - `npm run build` +3. **传输文件** - SCP 上传 dist、Dockerfile.deploy、nginx.conf 到服务器 +4. **构建镜像** - 在服务器上执行 `docker build -f Dockerfile.deploy` +5. **部署容器** - 停止旧容器,启动新容器 +6. **健康检查** - 验证服务可访问 + +### 查看构建状态 + +访问 https://martial-ci.johnsion.club + +## ⚙️ 配置说明 + +### 环境变量 + +**开发环境** (`.env.development`): +```env +VITE_APP_API=/api # API 前缀(开发时走 Vite 代理) +``` + +**生产环境** (`.env.production`): +```env +VITE_APP_API= # 留空(因为 BladeX 端点路径已完整) +``` + +### Nginx 配置 + +生产环境 nginx 配置(`nginx.conf`): + +```nginx +# 前端路由(Vue Router history 模式) +location / { + try_files $uri $uri/ /index.html; +} + +# API 代理到后端(通过宿主机网关地址) +location /blade-auth/ { + proxy_pass http://172.21.0.1:8123/blade-auth/; +} + +location /blade-system/ { + proxy_pass http://172.21.0.1:8123/blade-system/; +} + +location /api/ { + proxy_pass http://172.21.0.1:8123/api/; +} +``` + +### Vite 配置 + +开发环境代理配置(`vite.config.js`): + +```js +server: { + proxy: { + '/api': { + target: 'http://localhost:8123', + changeOrigin: true + } + } +} +``` + +## 🔧 常见问题 + +### 问题1: "No endpoint POST /api/blade-auth/oauth/token" + +**原因**: 错误配置 `VITE_APP_API` 为 `/api` 前缀,导致请求 `/api/blade-auth/oauth/token` + +**解决**: 检查 `.env.production` 中 `VITE_APP_API=`(留空) + +### 问题2: 容器启动报 "host not found in upstream martial-backend" + +**原因**: nginx.conf 中使用 Docker 服务名 `martial-backend`,但容器无法解析 + +**解决**: 使用宿主机网关地址 `172.21.0.1:8123` 代替 + +### 问题3: 端口 80 占用 + +**原因**: 宿主机 Caddy 已占用 80 端口 + +**解决**: 前端容器使用其他端口(如 5173),由 Caddy 反向代理 + +## 📝 开发规范 + +### 代码风格 + +- 使用 ESLint + Prettier +- 遵循 Vue 3 组合式 API 最佳实践 +- 组件命名使用PascalCase +- 文件命名使用kebab-case + +### Git 提交规范 + +``` +feat: 新功能 +fix: 修复 Bug +docs: 文档更新 +style: 代码格式调整 +refactor: 重构 +perf: 性能优化 +test: 测试相关 +chore: 构建/工具配置 +``` + +## 🏗️ 生产架构 + +### 部署拓扑 + +``` +互联网 + ↓ +Cloudflare CDN + ↓ +Caddy (80/443端口,自动 HTTPS) + ↓ +martial.johnsion.club → localhost:5173 (前端 Nginx 容器) + ├── 静态文件 → 直接返回 Vue 应用 + └── /blade-auth, /blade-system, /api → 代理到后端 172.21.0.1:8123 +``` + +### 网络架构 + +``` +Docker Network: martial_martial-network (bridge) +├── martial-frontend (172.21.0.x) - 端口映射 5173:80 +├── martial-mysql (172.21.0.x) - 端口映射 33066:3306 +└── martial-redis (172.21.0.x) - 端口映射 63379:6379 + +宿主机: +├── Caddy (80/443) - 反向代理服务 +├── Java 后端 (8123) - martial-master 应用 +└── Drone CI/CD (8080) - 自动化部署 +``` + +## 🔐 安全考虑 + +- 生产环境启用 HTTPS 证书(Caddy 自动签发) +- API 接口通过 Nginx 代理,隔离后端 +- 敏感配置通过 Drone Secrets 管理 +- 容器间网络隔离,仅暴露必要端口 + +## 📚 相关链接 + +- [后端仓库](https://git.waypeak.work/martial/martial-master) +- [BladeX 框架](https://bladex.cn) +- [Vue 3 文档](https://cn.vuejs.org/) +- [Element Plus](https://element-plus.org/) +- [Vite 文档](https://vitejs.dev/) + +## 👥 贡献者 + +- **开发者**: JohnSion +- **AI 助手**: Claude Code diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..887693e --- /dev/null +++ b/nginx.conf @@ -0,0 +1,50 @@ +server { + listen 80; + server_name localhost; + + # 前端静态文件目录 + root /usr/share/nginx/html; + index index.html; + + # Gzip 压缩 + gzip on; + gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; + + # 前端路由(Vue Router history 模式) + location / { + try_files $uri $uri/ /index.html; + } + + # API 代理到后端(直接访问宿主机上的后端服务) + location /api/ { + proxy_pass http://172.21.0.1:8123/api/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + # BladeX 认证模块代理 + location /blade-auth/ { + proxy_pass http://172.21.0.1:8123/blade-auth/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + # BladeX 系统模块代理 + location /blade-system/ { + proxy_pass http://172.21.0.1:8123/blade-system/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + # 缓存静态资源 + location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ { + expires 7d; + add_header Cache-Control "public, immutable"; + } +} diff --git a/package-lock.json b/package-lock.json index 6b30878..e3e8872 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "saber", + "name": "martial-web", "version": "4.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "saber", + "name": "martial-web", "version": "4.0.1", "dependencies": { "@element-plus/icons-vue": "^2.3.1", @@ -850,7 +850,6 @@ "version": "4.17.12", "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", - "peer": true, "dependencies": { "@types/lodash": "*" } @@ -873,7 +872,6 @@ "version": "2.3.4", "resolved": "https://registry.npmmirror.com/@uppy/core/-/core-2.3.4.tgz", "integrity": "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==", - "peer": true, "dependencies": { "@transloadit/prettier-bytes": "0.0.7", "@uppy/store-default": "^2.1.1", @@ -902,7 +900,6 @@ "version": "2.1.3", "resolved": "https://registry.npmmirror.com/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz", "integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==", - "peer": true, "dependencies": { "@uppy/companion-client": "^2.2.2", "@uppy/utils": "^4.1.2", @@ -1057,7 +1054,6 @@ "version": "1.1.7", "resolved": "https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz", "integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==", - "peer": true, "dependencies": { "is-url": "^1.2.4" }, @@ -1088,7 +1084,6 @@ "version": "1.1.19", "resolved": "https://registry.npmmirror.com/@wangeditor/core/-/core-1.1.19.tgz", "integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==", - "peer": true, "dependencies": { "@types/event-emitter": "^0.3.3", "event-emitter": "^0.3.5", @@ -1118,7 +1113,6 @@ "version": "5.1.23", "resolved": "https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.1.23.tgz", "integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==", - "peer": true, "dependencies": { "@uppy/core": "^2.1.1", "@uppy/xhr-upload": "^2.0.3", @@ -1475,7 +1469,6 @@ "version": "11.13.1", "resolved": "https://registry.npmmirror.com/diagram-js/-/diagram-js-11.13.1.tgz", "integrity": "sha512-6kO0rBN6aBIQiMELfv1oX2Ohes/brlIPuOVZUYAioeWM0EyuazhAXgHeq8iKFt29daU9NGRr4n78esGx8QjtjQ==", - "peer": true, "dependencies": { "@bpmn-io/diagram-js-ui": "^0.2.2", "clsx": "^1.2.1", @@ -1513,7 +1506,6 @@ "version": "3.0.0", "resolved": "https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz", "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==", - "peer": true, "dependencies": { "ssr-window": "^3.0.0-alpha.1" } @@ -1539,7 +1531,6 @@ "version": "2.7.3", "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.7.3.tgz", "integrity": "sha512-OaqY1kQ2xzNyRFyge3fzM7jqMwux+464RBEqd+ybRV9xPiGxtgnj/sVK4iEbnKnzQIa9XK03DOIFzoToUhu1DA==", - "peer": true, "dependencies": { "@ctrl/tinycolor": "^3.4.1", "@element-plus/icons-vue": "^2.3.1", @@ -1865,8 +1856,7 @@ "node_modules/is-hotkey": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.2.0.tgz", - "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==", - "peer": true + "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==" }, "node_modules/is-number": { "version": "7.0.0", @@ -1941,14 +1931,12 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "peer": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "peer": true + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, "node_modules/lodash-unified": { "version": "1.0.3", @@ -1963,44 +1951,37 @@ "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "peer": true + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "peer": true + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "peer": true + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.foreach": { "version": "4.5.0", "resolved": "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", - "peer": true + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==" }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "peer": true + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" }, "node_modules/lodash.throttle": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", - "peer": true + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" }, "node_modules/lodash.toarray": { "version": "4.4.0", "resolved": "https://registry.npmmirror.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==", - "peer": true + "integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==" }, "node_modules/magic-string": { "version": "0.30.10", @@ -2115,7 +2096,6 @@ "url": "https://github.com/sponsors/ai" } ], - "peer": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -2307,7 +2287,6 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", "dev": true, - "peer": true, "dependencies": { "@types/estree": "1.0.5" }, @@ -2366,7 +2345,6 @@ "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.2.tgz", "integrity": "sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==", "dev": true, - "peer": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -2402,7 +2380,6 @@ "version": "0.72.8", "resolved": "https://registry.npmmirror.com/slate/-/slate-0.72.8.tgz", "integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==", - "peer": true, "dependencies": { "immer": "^9.0.6", "is-plain-object": "^5.0.0", @@ -2424,7 +2401,6 @@ "version": "3.5.1", "resolved": "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.5.1.tgz", "integrity": "sha512-wHMNIOjkm/YNE5EM3RCbr/+DVgPg6AqQAX1eOxO46zYNvCXjKP5Y865tqQj3EXnaMBjkxmQA5jFuDpDK/dbfiA==", - "peer": true, "engines": { "node": ">=8.3.0" } @@ -2616,7 +2592,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.12.tgz", "integrity": "sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==", "dev": true, - "peer": true, "dependencies": { "esbuild": "^0.20.1", "postcss": "^8.4.38", @@ -2784,7 +2759,6 @@ "version": "3.4.27", "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz", "integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.4.27", "@vue/compiler-sfc": "3.4.27", diff --git a/vite.config.js b/vite.config.js index 03ebad9..5e41777 100644 --- a/vite.config.js +++ b/vite.config.js @@ -18,12 +18,14 @@ export default ({ mode, command }) => { proxy: { '/api': { target: 'http://localhost:8123', - // target: 'http://120.197.149.12:8480', - // target: 'https://2df1-223-74-180-188.ngrok-free.app ', - //target: 'https://saber3.bladex.cn/api', changeOrigin: true, rewrite: path => path.replace(/^\/api/, ''), }, + // 武术业务模块保留 /api 前缀 + '/api': { + target: 'http://localhost:8123', + changeOrigin: true, + }, }, }, resolve: { diff --git a/yarn.lock b/yarn.lock index f3dabe0..992561d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37,121 +37,11 @@ resolved "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz" integrity sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg== -"@esbuild/aix-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz" - integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== - -"@esbuild/android-arm@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz" - integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== - -"@esbuild/android-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz" - integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== - -"@esbuild/android-x64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz" - integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== - -"@esbuild/darwin-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz" - integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== - -"@esbuild/darwin-x64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz" - integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== - -"@esbuild/freebsd-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz" - integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== - -"@esbuild/freebsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz" - integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== - -"@esbuild/linux-arm@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz" - integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== - -"@esbuild/linux-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz" - integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== - -"@esbuild/linux-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz" - integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== - -"@esbuild/linux-loong64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz" - integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== - -"@esbuild/linux-mips64el@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz" - integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== - -"@esbuild/linux-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz" - integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== - -"@esbuild/linux-riscv64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz" - integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== - -"@esbuild/linux-s390x@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz" - integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== - "@esbuild/linux-x64@0.20.2": version "0.20.2" resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz" integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== -"@esbuild/netbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz" - integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== - -"@esbuild/openbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz" - integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== - -"@esbuild/sunos-x64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz" - integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== - -"@esbuild/win32-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz" - integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== - -"@esbuild/win32-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz" - integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== - -"@esbuild/win32-x64@0.20.2": - version "0.20.2" - resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz" - integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== - "@floating-ui/core@^1.5.3": version "1.5.3" resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-1.5.3.tgz" @@ -250,61 +140,6 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@rollup/rollup-android-arm-eabi@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz" - integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ== - -"@rollup/rollup-android-arm64@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz" - integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA== - -"@rollup/rollup-darwin-arm64@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz" - integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w== - -"@rollup/rollup-darwin-x64@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz" - integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA== - -"@rollup/rollup-linux-arm-gnueabihf@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz" - integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA== - -"@rollup/rollup-linux-arm-musleabihf@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz" - integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A== - -"@rollup/rollup-linux-arm64-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz" - integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw== - -"@rollup/rollup-linux-arm64-musl@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz" - integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ== - -"@rollup/rollup-linux-powerpc64le-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz" - integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA== - -"@rollup/rollup-linux-riscv64-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz" - integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg== - -"@rollup/rollup-linux-s390x-gnu@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz" - integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg== - "@rollup/rollup-linux-x64-gnu@4.18.0": version "4.18.0" resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz" @@ -315,21 +150,6 @@ resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz" integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg== -"@rollup/rollup-win32-arm64-msvc@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz" - integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA== - -"@rollup/rollup-win32-ia32-msvc@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz" - integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg== - -"@rollup/rollup-win32-x64-msvc@4.18.0": - version "4.18.0" - resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz" - integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g== - "@saber/nf-design-base-elp@^1.2.0": version "1.2.0" resolved "https://center.javablade.com/api/packages/blade/npm/%40saber%2Fnf-design-base-elp/-/1.2.0/nf-design-base-elp-1.2.0.tgz" @@ -1001,11 +821,6 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz"