ufutx-pc-website/README.md

250 lines
5.7 KiB
Markdown
Raw Normal View History

2025-06-09 10:23:45 +08:00
# Vue 3 + TypeScript + Vite + Axios 基础框架
这是一个基于 **Vue 3**、**TypeScript** 和 **Vite** 的现代化前端基础框架,集成了 **Axios** 请求封装、**ESLint** 代码检查、**Prettier** 代码格式化等工具,帮助你快速搭建高质量的前端项目。
## 项目特性
- **核心框架**Vue 3、Vue Router、Pinia状态管理
- **构建工具**Vite 4极速构建
- **类型支持**TypeScript 5严格类型检查
- **HTTP 请求**Axios 封装(支持拦截器、错误处理、文件上传/下载)
- **代码规范**ESLint + Prettier统一代码风格
- **样式方案**LessCSS 预处理)
- **提交规范**Git 钩子(提交前自动检查代码)
## 快速开始
### 环境准备
- **Node.js**v18+(推荐使用 [nvm](https://github.com/nvm-sh/nvm) 管理)
- **包管理器**npm 或 pnpm
### 初始化项目
```bash
# 克隆仓库
git clone https://github.com/your-repo/vue3-ts-template.git
cd vue3-ts-template
# 安装依赖
npm install
# 启动开发服务器
npm run dev
```
### 主要命令
| 命令 | 描述 |
|-----------------|---------------------------------|
| `npm run dev` | 启动开发服务器 |
| `npm run build` | 构建生产环境包 |
| `npm run preview` | 预览生产环境包 |
| `npm run lint` | 代码检查并自动修复 |
| `npm run format` | 使用 Prettier 格式化代码 |
## 目录结构
```
src/
├── api/ # API 请求封装
├── assets/ # 静态资源
├── components/ # 通用组件
├── router/ # 路由配置
├── store/ # 状态管理 (Pinia)
├── utils/ # 工具函数
│ └── request.ts # Axios 封装
├── views/ # 页面组件
├── App.vue # 根组件
└── main.ts # 入口文件
```
## HTTP 请求封装
框架已封装完整的 Axios 请求工具,支持 **GET**、**POST**、**PUT**、**DELETE**、**文件上传** 和 **文件下载**,内置错误处理。
### 使用示例
```typescript
import request from '@/utils/request'
// GET 请求
const fetchUsers = async () => {
try {
const res = await request.get('/api/users', { page: 1, limit: 10 })
console.log('用户列表:', res)
} catch (error) {
console.error('请求失败:', error)
}
}
// POST 请求
const createUser = async (data: any) => {
try {
const res = await request.post('/api/users', data)
console.log('创建成功:', res)
} catch (error) {
console.error('创建失败:', error)
}
}
// 文件上传
const uploadFile = async (file: File) => {
try {
const res = await request.upload('/api/upload', file)
console.log('上传成功:', res)
} catch (error) {
console.error('上传失败:', error)
}
}
// 文件下载
const downloadFile = async () => {
try {
await request.download('/api/download/report', null, '报告.pdf')
console.log('下载完成')
} catch (error) {
console.error('下载失败:', error)
}
}
```
## 代码规范
### ESLint + Prettier
框架使用 ESLint 和 Prettier 统一代码风格,配置文件:
- `.eslintrc.cjs`ESLint 规则
- `.prettierrc.cjs`Prettier 规则
### 自动格式化
推荐在 VSCode 中安装以下插件,实现保存时自动格式化:
- ESLint
- Prettier
- Volar
## 状态管理
使用 **Pinia** 作为状态管理工具,示例:
```typescript
// store/userStore.ts
import { defineStore } from 'pinia'
import request from '@/utils/request'
export const useUserStore = defineStore('user', {
state: () => ({
userList: [],
loading: false,
error: null
}),
actions: {
async fetchUsers() {
this.loading = true
try {
const res = await request.get('/api/users')
this.userList = res
} catch (error) {
this.error = error
} finally {
this.loading = false
}
}
}
})
```
## 部署
### 构建生产环境包
```bash
npm run build
```
构建后的文件会输出到 `dist` 目录。
### 部署到 GitHub Pages
```bash
npm run deploy
```
需先配置 `package.json` 中的 `homepage` 字段。
## 常见问题
### 1. Axios 请求拦截器类型错误
如果遇到 `InternalAxiosRequestConfig` 类型错误,请确保:
1. 导入正确的类型:
```typescript
import { type InternalAxiosRequestConfig } from 'axios'
```
2. 请求拦截器使用正确的类型:
```typescript
service.interceptors.request.use(
(config: InternalAxiosRequestConfig) => {
// ...
return config
}
)
```
### 2. 跨域问题
在开发环境中,可通过 `vite.config.ts` 配置代理:
```typescript
// vite.config.ts
import { defineConfig } from 'vite'
export default defineConfig({
server: {
proxy: {
'/api': {
target: 'http://localhost:3000',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}
}
}
})
```
``
目前的基础框架默认不包含 PC 端和移动端适配 的配置,需要根据项目需求添加相应方案。以下是几种常见的适配方法及其实现步骤:
一、现有框架适配状态
你的项目当前是 基础框架,未集成任何适配方案,默认行为是:
PC 端:按设计稿尺寸直接渲染,大屏幕可能显得紧凑。
移动端:内容可能过大,需要手动缩放或滚动查看
``
## 贡献指南
1. Fork 仓库
2. 创建特性分支:`git checkout -b feature/new-feature`
3. 提交代码:`git commit -m 'Add new feature'`
4. 推送分支:`git push origin feature/new-feature`
5. 提交 Pull Request
## 许可证
本项目采用 [MIT 许可证](LICENSE)。