tangweijie 5099f2e87e Initial commit: Vue3 + TypeScript 前端项目
- Vue 3 + TypeScript + Element Plus 前端界面
- Pinia 状态管理
- Vue Router 4 路由管理
- Axios HTTP 客户端
- MSW (Mock Service Worker) 开发环境模拟
- 账户管理界面 (列表、详情、三科目余额展示)
- 交易管理界面 (列表、详情)
- 对账管理界面 (三账校验)
- 完善的 API 客户端封装
- Docker 容器化配置
- Nginx 配置用于生产环境
2026-01-05 17:57:11 +08:00

369 lines
7.5 KiB
Markdown
Raw Permalink 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.

# RustJR 前端 - 账户管理系统
基于 Vue 3 + TypeScript + Element Plus 的现代化前端应用,对接 Rust 后端 API。
## ✨ 技术栈
### 核心框架
- **Vue 3** - 渐进式前端框架,使用 Composition API
- **TypeScript** - 类型安全的 JavaScript 超集
- **Pinia** - Vue 官方状态管理库
- **Vue Router 4** - 官方路由管理器
### UI 组件库
- **Element Plus** - 基于 Vue 3 的组件库
- **@element-plus/icons-vue** - Element Plus 图标库
### HTTP 客户端
- **Axios** - HTTP 请求库,支持请求/响应拦截器
- **@tanstack/vue-query** - 数据获取和缓存 (可选)
### 构建工具
- **Vite** - 下一代前端构建工具
- **ESLint** - 代码质量检查
- **Prettier** - 代码格式化
### 开发工具
- **TypeScript** - 类型检查
- **Vue DevTools** - Vue 开发调试工具
## 🏗️ 项目结构
```
src/
├── api/ # API 服务层
│ ├── client.ts # 统一 HTTP 客户端
│ ├── account.ts # 账户相关 API
│ ├── transaction.ts # 交易相关 API
│ └── reconciliation.ts # 对账相关 API
├── components/ # 可复用组件
│ ├── common/ # 通用组件
│ ├── forms/ # 表单组件
│ └── tables/ # 表格组件
├── composables/ # Vue Composition 函数
│ ├── useAuth.ts # 认证相关
│ ├── useApi.ts # API 调用
│ └── useValidation.ts # 表单验证
├── layouts/ # 布局组件
├── pages/ # 页面组件
│ ├── Dashboard.vue # 仪表板
│ ├── Accounts.vue # 账户管理
│ ├── Transactions.vue # 交易管理
│ └── Reconciliation.vue # 对账管理
├── router/ # 路由配置
├── stores/ # Pinia 状态管理
│ ├── auth.ts # 认证状态
│ ├── account.ts # 账户状态
│ └── transaction.ts # 交易状态
├── types/ # TypeScript 类型定义
│ ├── account.ts # 账户类型
│ ├── transaction.ts # 交易类型
│ └── api.ts # API 类型
├── utils/ # 工具函数
│ ├── format.ts # 格式化工具
│ ├── validation.ts # 验证工具
│ └── constants.ts # 常量定义
└── styles/ # 样式文件
└── main.css # 全局样式
```
## 🚀 快速开始
### 1. 环境要求
- Node.js 16+
- npm 或 yarn 或 pnpm
### 2. 安装依赖
```bash
# 安装项目依赖
npm install
# 或使用 yarn
yarn install
# 或使用 pnpm
pnpm install
```
### 3. 环境配置
复制环境配置文件:
```bash
cp .env.example .env.local
```
编辑 `.env.local`
```env
# API 基础地址 (对应后端地址)
VITE_API_BASE_URL=http://localhost:8080/api
# 应用配置
VITE_APP_NAME=账户管理系统
VITE_APP_VERSION=1.0.0
```
### 4. 启动开发服务器
```bash
# 使用 npm
npm run dev
# 或使用 yarn
yarn dev
# 或使用 pnpm
pnpm dev
```
应用将在 `http://localhost:3001` 启动。
### 5. 构建生产版本
```bash
# 构建生产版本
npm run build
# 预览生产版本
npm run preview
```
## 🔧 前后端联调
### API 接口对接
项目使用了统一的 API 客户端 (`src/api/client.ts`),具有以下特性:
#### 请求拦截器
- 自动添加认证 token
- 添加请求ID用于追踪
- 统一的错误处理
#### 响应拦截器
- 统一的状态码处理
- 自动 token 过期处理
- 业务错误统一处理
#### 使用示例
```typescript
import { AccountAPI } from '@/api'
// 获取账户列表
const accounts = await AccountAPI.getAccountList({
page: 1,
pageSize: 20
})
// 创建交易
const transaction = await TransactionAPI.createTransaction({
txnType: TransactionType.TRANSFER,
fromAccountId: 1,
toAccountId: 2,
amount: 1000.00,
remark: '转账备注'
})
```
### 类型安全
项目使用 TypeScript 确保类型安全:
- 所有 API 请求/响应都有完整的类型定义
- 状态管理使用类型化的 store
- 组件 props 有严格的类型检查
### 状态管理
使用 Pinia 进行状态管理:
```typescript
import { useAccountStore } from '@/stores'
// 在组件中使用
const accountStore = useAccountStore()
// 获取数据
await accountStore.fetchAccounts()
// 监听状态变化
watch(() => accountStore.accounts, (newAccounts) => {
console.log('账户列表更新:', newAccounts)
})
```
## 📱 页面功能
### 1. 仪表板 (Dashboard)
- 账户余额汇总
- 今日交易统计
- 系统状态概览
- 快捷操作入口
### 2. 账户管理 (Accounts)
- 账户列表查看
- 账户余额详情
- 冻结/解冻操作
- 账户创建/编辑
### 3. 交易管理 (Transactions)
- 交易记录查询
- 交易详情查看
- 交易状态跟踪
- 交易操作 (重试/取消)
### 4. 对账管理 (Reconciliation)
- 对账批次管理
- 三账校验结果
- 差异处理
- 对账报告导出
## 🎨 样式和主题
项目使用 Element Plus 的默认主题,可以通过以下方式自定义:
### 全局样式
```css
/* src/styles/main.css */
:root {
--el-color-primary: #409eff;
--el-color-success: #67c23a;
--el-color-warning: #e6a23c;
--el-color-danger: #f56c6c;
}
```
### 组件样式覆盖
```vue
<template>
<el-button class="custom-button">自定义按钮</el-button>
</template>
<style scoped>
.custom-button {
background-color: #custom-color;
}
</style>
```
## 🔒 认证和权限
### JWT 认证
项目使用 JWT 进行身份认证:
- 登录后 token 自动保存到 localStorage
- 请求拦截器自动添加 Authorization 头
- token 过期自动跳转登录页面
### 权限控制
基于角色的权限控制:
```typescript
import { useAuthStore } from '@/stores'
const authStore = useAuthStore()
// 检查权限
if (authStore.hasPermission('account.create')) {
// 显示创建账户按钮
}
```
## 🧪 测试
```bash
# 运行单元测试
npm run test
# 运行 E2E 测试 (需要额外配置)
npm run test:e2e
```
## 📦 部署
### 构建配置
```typescript
// vite.config.ts
export default defineConfig({
build: {
outDir: 'dist',
sourcemap: false,
minify: 'terser',
},
server: {
proxy: {
'/api': {
target: 'http://your-backend-url',
changeOrigin: true,
},
},
},
})
```
### 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;
}
}
```
## 🤝 开发规范
### 代码风格
- 使用 ESLint + Prettier 保持代码风格一致
- 遵循 Vue 3 Composition API 最佳实践
- 组件使用 `<script setup>` 语法糖
### Git 提交规范
```bash
feat: 新功能
fix: 修复bug
docs: 文档更新
style: 代码格式化
refactor: 代码重构
test: 测试相关
chore: 构建过程或工具配置
```
### 命名约定
- **组件**: PascalCase (`AccountList.vue`)
- **方法**: camelCase (`fetchAccounts()`)
- **常量**: UPPER_SNAKE_CASE (`API_BASE_URL`)
- **文件**: kebab-case (`account-list.vue`)
## 🔗 相关链接
- [Vue 3 官方文档](https://v3.vuejs.org/)
- [Element Plus 文档](https://element-plus.org/)
- [Pinia 文档](https://pinia.vuejs.org/)
- [TypeScript 文档](https://www.typescriptlang.org/)
## 📄 许可证
MIT License