Files
AIGC/demo/frontend/README.md
2025-10-21 16:50:33 +08:00

426 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AIGC Demo - Vue.js 前端
这是一个基于 Vue.js 3 + Element Plus 的现代化前端应用,为 AIGC Demo 项目提供用户界面。
## 🚀 技术栈
- **Vue.js 3** - 渐进式 JavaScript 框架
- **Element Plus** - Vue 3 组件库
- **Vue Router** - 官方路由管理器
- **Pinia** - Vue 状态管理库
- **Axios** - HTTP 客户端
- **Vite** - 现代化构建工具
## 📁 项目结构
```
frontend/
├── src/
│ ├── components/ # 公共组件
│ │ ├── NavBar.vue # 导航栏
│ │ └── Footer.vue # 页脚
│ ├── views/ # 页面组件
│ │ ├── Home.vue # 首页
│ │ ├── Login.vue # 登录页
│ │ ├── Register.vue # 注册页
│ │ ├── Orders.vue # 订单列表
│ │ └── ...
│ ├── router/ # 路由配置
│ │ └── index.js
│ ├── stores/ # 状态管理
│ │ ├── user.js # 用户状态
│ │ └── orders.js # 订单状态
│ ├── api/ # API 接口
│ │ ├── request.js # Axios 配置
│ │ ├── auth.js # 认证接口
│ │ ├── orders.js # 订单接口
│ │ └── payments.js # 支付接口
│ ├── assets/ # 静态资源
│ ├── utils/ # 工具函数
│ ├── App.vue # 根组件
│ └── main.js # 入口文件
├── index.html # HTML 模板
├── package.json # 依赖配置
├── vite.config.js # Vite 配置
└── README.md # 说明文档
```
## 🛠️ 安装和运行
### 前置要求
- Node.js 16+
- npm 或 yarn
### 安装依赖
```bash
cd frontend
npm install
```
### 开发模式
```bash
npm run dev
```
访问 http://localhost:3000
### 构建生产版本
```bash
npm run build
```
### 预览生产版本
```bash
npm run preview
```
## 🔧 配置说明
### Vite 配置
```javascript
// vite.config.js
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': resolve(__dirname, 'src')
}
},
server: {
port: 3000,
proxy: {
'/api': {
target: 'http://localhost:8080', // 后端服务地址
changeOrigin: true
}
}
}
})
```
### API 代理
前端开发服务器会自动将 `/api` 请求代理到后端服务器 `http://localhost:8080`,这样避免了跨域问题。
## 📱 功能特性
### 🎨 现代化 UI
- **Element Plus** 组件库,提供丰富的 UI 组件
- **响应式设计**,支持桌面、平板、手机
- **主题定制**,统一的视觉风格
- **图标支持**Element Plus Icons
### 🔐 用户认证
- **登录/注册**,完整的用户认证流程
- **表单验证**,实时验证用户输入
- **状态管理**Pinia 管理用户状态
- **路由守卫**,保护需要认证的页面
### 📋 订单管理
- **订单列表**,分页、筛选、搜索
- **订单详情**,完整信息展示
- **订单创建**,动态表单
- **状态管理**,订单状态流转
### 💳 支付集成
- **多种支付方式**支付宝、PayPal
- **支付状态跟踪**,实时状态更新
- **支付记录**,完整的支付历史
### 👨‍💼 管理功能
- **用户管理**,用户列表和操作
- **订单管理**,管理员订单管理
- **权限控制**,基于角色的访问控制
## 🔄 状态管理
### 用户状态 (stores/user.js)
```javascript
export const useUserStore = defineStore('user', () => {
const user = ref(null)
const token = ref(localStorage.getItem('token'))
const isAuthenticated = computed(() => !!token.value && !!user.value)
const loginUser = async (credentials) => { /* ... */ }
const registerUser = async (userData) => { /* ... */ }
const logoutUser = async () => { /* ... */ }
return { user, token, isAuthenticated, loginUser, registerUser, logoutUser }
})
```
### 订单状态 (stores/orders.js)
```javascript
export const useOrderStore = defineStore('orders', () => {
const orders = ref([])
const currentOrder = ref(null)
const loading = ref(false)
const fetchOrders = async (params) => { /* ... */ }
const createNewOrder = async (orderData) => { /* ... */ }
const updateOrder = async (id, status) => { /* ... */ }
return { orders, currentOrder, loading, fetchOrders, createNewOrder, updateOrder }
})
```
## 🌐 API 接口
### 认证接口
```javascript
// 登录
POST /api/auth/login
{
"username": "user",
"password": "password"
}
// 注册
POST /api/auth/register
{
"username": "newuser",
"email": "user@example.com",
"password": "password"
}
// 获取当前用户
GET /api/auth/me
```
### 订单接口
```javascript
// 获取订单列表
GET /api/orders?page=0&size=10&status=PENDING
// 获取订单详情
GET /api/orders/{id}
// 创建订单
POST /api/orders/create
{
"orderType": "PRODUCT",
"currency": "CNY",
"orderItems": [...]
}
// 更新订单状态
POST /api/orders/{id}/status
{
"status": "PAID",
"notes": "备注"
}
```
## 🎯 路由配置
```javascript
const routes = [
{
path: '/',
name: 'Home',
component: Home,
meta: { title: '首页' }
},
{
path: '/login',
name: 'Login',
component: Login,
meta: { title: '登录', guest: true }
},
{
path: '/orders',
name: 'Orders',
component: Orders,
meta: { title: '订单管理', requiresAuth: true }
},
{
path: '/admin/orders',
name: 'AdminOrders',
component: AdminOrders,
meta: { title: '订单管理', requiresAuth: true, requiresAdmin: true }
}
]
```
## 🔒 权限控制
### 路由守卫
```javascript
router.beforeEach((to, from, next) => {
const userStore = useUserStore()
// 检查是否需要认证
if (to.meta.requiresAuth && !userStore.isAuthenticated) {
next('/login')
return
}
// 检查是否需要管理员权限
if (to.meta.requiresAdmin && !userStore.isAdmin) {
next('/')
return
}
next()
})
```
### API 拦截器
```javascript
// 请求拦截器 - 添加认证头
api.interceptors.request.use((config) => {
const token = localStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
})
// 响应拦截器 - 处理错误
api.interceptors.response.use(
(response) => response.data,
(error) => {
if (error.response?.status === 401) {
// 未授权,跳转到登录页
localStorage.removeItem('token')
window.location.href = '/login'
}
return Promise.reject(error)
}
)
```
## 📱 响应式设计
### 断点配置
```css
/* 移动端 */
@media (max-width: 768px) {
.page-header {
flex-direction: column;
}
}
/* 平板 */
@media (min-width: 769px) and (max-width: 1024px) {
.content {
padding: 20px;
}
}
/* 桌面端 */
@media (min-width: 1025px) {
.container {
max-width: 1200px;
}
}
```
## 🚀 部署
### 构建生产版本
```bash
npm run build
```
构建完成后,`dist` 目录包含所有静态文件。
### Nginx 配置
```nginx
server {
listen 80;
server_name your-domain.com;
location / {
root /path/to/dist;
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
## 🔧 开发工具
### VS Code 推荐插件
- **Vue Language Features (Volar)** - Vue 3 支持
- **TypeScript Vue Plugin (Volar)** - TypeScript 支持
- **ESLint** - 代码检查
- **Prettier** - 代码格式化
- **Auto Rename Tag** - 自动重命名标签
- **Bracket Pair Colorizer** - 括号配对着色
### 调试工具
- **Vue DevTools** - Vue 开发者工具
- **Pinia DevTools** - Pinia 状态管理工具
- **Element Plus DevTools** - Element Plus 组件调试
## 📝 开发规范
### 组件命名
- 组件文件名使用 PascalCase`UserProfile.vue`
- 组件名使用 PascalCase`UserProfile`
### 文件结构
```
components/
├── common/ # 通用组件
├── layout/ # 布局组件
└── business/ # 业务组件
```
### 代码风格
- 使用 Composition API
- 优先使用 `<script setup>` 语法
- 使用 TypeScript 类型定义
- 遵循 ESLint 规则
## 🤝 贡献指南
1. Fork 项目
2. 创建功能分支:`git checkout -b feature/new-feature`
3. 提交更改:`git commit -am 'Add new feature'`
4. 推送分支:`git push origin feature/new-feature`
5. 提交 Pull Request
## 📄 许可证
MIT License
---
**注意**: 这是一个演示项目,生产环境使用前请进行充分的安全测试和性能优化。