# ginfast-ui
**Repository Path**: qxkjsoft/ginfast-ui
## Basic Information
- **Project Name**: ginfast-ui
- **Description**: ginfast前端
- **Primary Language**: TypeScript
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 11
- **Forks**: 9
- **Created**: 2025-10-20
- **Last Updated**: 2025-12-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# GinFast
> 一个基于 Vue3 + Vite6 + TypeScript + Arco Design 的现代化后台管理模板,开箱即用的企业级中后台解决方案。
## 简介
GinFast 是一个功能完备、高颜值、高性能的后台管理模板,致力于为开发者提供一个稳定、可扩展、易于维护的前端框架。项目采用现代化的技术栈和模块化分层架构,结合 Arco Design UI 组件库,实现了企业级应用所需的各种功能。
### 核心特性
- **现代化技术栈**:Vue3 Composition API + Vite6 + TypeScript + Pinia
- **开箱即用**:内置动态路由、权限控制、多主题、国际化、标签页管理等功能
- **代码规范**:集成 ESLint、Prettier、Stylelint 等工具,确保代码风格统一
- **高性能**:Vite 构建工具提供极速的开发体验和优化的生产构建
- **易扩展**:模块化架构设计,便于功能扩展和维护
## 技术栈
| 类别 | 技术栈 |
|------|--------|
| 前端框架 | Vue3 (Composition API) |
| 构建工具 | Vite 6.x |
| 编程语言 | TypeScript |
| 状态管理 | Pinia + pinia-plugin-persistedstate |
| 路由管理 | Vue Router 4.x |
| UI 组件库 | Arco Design Vue 2.57.0 |
| 样式处理 | Sass (sass-embedded), CSS Modules |
| HTTP 请求 | Axios |
| 国际化 | vue-i18n 10.0.0-alpha.3 |
| 代码校验 | ESLint + Stylelint |
| 格式化 | Prettier |
| Git 规范 | husky + lint-staged + commitlint |
## 功能特性
- ✅ **动态路由**:支持前端和后端控制的动态路由生成
- ✅ **权限控制**:RBAC 权限模型,支持菜单权限和按钮权限
- ✅ **多主题**:支持暗黑模式和自定义主题
- ✅ **国际化**:多语言支持(i18n)
- ✅ **标签页管理**:多标签页操作和缓存
- ✅ **页面缓存**:基于 keep-alive 的页面状态保持
- ✅ **Mock 数据**:本地开发 Mock 数据支持
- ✅ **响应式布局**:适配多种屏幕尺寸
- ✅ **SVG 图标**:SVG 图标系统支持
- ✅ **代码规范**:完善的代码规范和提交规范
## 目录结构
```
GinFast/
├── public/ # 静态资源(不参与打包)
├── src/
│ ├── api/ # 所有接口请求定义,按模块分类
│ ├── assets/ # 图片、字体等静态资源
│ ├── components/ # 全局通用组件
│ ├── config/ # 全局常量配置
│ ├── directives/ # 自定义指令
│ ├── globals/ # 全局挂载函数或属性
│ ├── hooks/ # Composition API 封装
│ ├── lang/ # 多语言配置
│ ├── layout/ # 主布局组件
│ ├── mock/ # 本地 Mock 数据服务
│ ├── router/ # 路由配置
│ ├── store/ # Pinia 状态管理
│ ├── style/ # 全局样式与 SCSS 变量
│ ├── typings/ # TypeScript 类型声明扩展
│ ├── utils/ # 工具函数库
│ ├── views/ # 页面视图组件
│ ├── main.ts # 应用入口
│ ├── App.vue # 根组件
│ └── vite-env.d.ts # 类型声明
├── build/ # Vite 构建相关配置
├── .husky/ # Git 提交钩子
├── .vscode/ # 推荐编辑器配置
├── env 文件系列 # 环境变量配置
└── 各类 lint 配置文件 # ESLint, Prettier, Stylelint, commitlint 等
```
## 环境要求
- **Node.js**: >= 18.12.0 (推荐 20.12.0+)
- **pnpm**: >= 8.7.0
- **git**: 用于克隆项目代码和版本控制
## 快速开始
### 克隆项目
```bash
# GitHub
git clone https://github.com/qxkjsoft/ginfast-ui.git
# 进入项目目录
cd ginfast-ui
```
### 安装依赖
```bash
# 必须使用 pnpm 安装依赖
pnpm install
```
### 开发调试
```bash
# 启动开发服务器
pnpm dev
```
### 构建部署
```bash
# 开发环境构建
pnpm build:dev
# 生产环境构建
pnpm build:prod
# 测试环境构建
pnpm build:test
# 构建后预览
pnpm preview
```
## 项目配置
### 环境变量
项目支持多种环境配置:
- `.env`: 默认环境变量
- `.env.development`: 开发环境变量
- `.env.test`: 测试环境变量
- `.env.production`: 生产环境变量
### 代理配置
在 `vite.config.ts` 中配置开发服务器代理:
```ts
server: {
proxy: {
"/api": {
target: env.VITE_APP_BASE_URL,
changeOrigin: true
}
}
}
```
## 核心模块
### 路由系统
项目采用动态路由机制,支持前端和后端两种控制模式:
- 静态路由:定义在 `src/router/route.ts` 中
- 动态路由:通过 Mock 数据或后端接口动态生成
### 权限控制
实现基于 RBAC 的权限控制模型:
1. **菜单权限**:通过路由配置控制菜单显示
2. **按钮权限**:通过自定义指令 `v-permission` 控制按钮显示
### 状态管理
使用 Pinia 进行全局状态管理,主要模块包括:
- 用户信息:`src/store/modules/user.ts`
- 路由配置:`src/store/modules/route-config.ts`
- 主题配置:`src/store/modules/theme-config.ts`
- 系统配置:`src/store/modules/sys-config.ts`
### 国际化
支持多语言切换,语言包位于 `src/lang/modules/` 目录下。
### 主题系统
支持暗黑模式和自定义主题,配置位于 `src/store/modules/theme-config.ts`。
## 构建优化
项目采用多种构建优化策略:
1. **代码分割**:将大型第三方库单独分包
2. **Tree Shaking**:移除未使用的代码
3. **压缩优化**:生产环境去除 console 和 debugger
4. **资源内联**:小资源内联以减少 HTTP 请求
## 浏览器支持
- 现代浏览器(Chrome, Firefox, Safari, Edge 最近2个版本)
- 不支持 IE 浏览器
## 插件开发规范
项目支持插件化开发,允许开发者通过插件方式扩展系统功能。插件目录位于 `src/plugins/` 下,每个插件作为一个独立的文件夹。
### 插件目录结构
```
plugins/
├── example/ # 插件示例
│ ├── api/ # 插件API接口定义
│ ├── store/ # 插件状态管理
│ └── views/ # 插件页面视图
```
### 插件开发步骤
1. **创建插件目录**
在 `src/plugins/` 目录下创建插件文件夹,建议使用有意义的插件名称。
2. **插件API定义**
在插件目录下创建 `api/` 文件夹,用于定义插件的接口请求:
```typescript
// src/plugins/[plugin-name]/api/[plugin-name].ts
import { http } from '@/utils/http';
import { baseUrlApi } from "@/api/utils";
import { BaseResult } from "@/api/types";
// 定义数据接口
export interface ExampleData {
id: number;
name: string;
description: string;
}
// 定义API请求方法
export const getExampleList = (params: any) => {
return http.request("get", baseUrlApi("plugins/example/list"), { params });
};
```
3. **插件状态管理**
在插件目录下创建 `store/` 文件夹,使用 Pinia 定义插件的状态管理:
```typescript
// src/plugins/[plugin-name]/store/[plugin-name].ts
import { defineStore } from 'pinia';
import { ref, computed } from 'vue';
import { getExampleList } from '../api/example';
export const useExamplePluginStore = defineStore('example-plugin', () => {
// State
const dataList = ref([]);
const loading = ref(false);
// Getters
const getDataList = computed(() => dataList.value);
const isLoading = computed(() => loading.value);
// Actions
const fetchDataList = async (params?: any) => {
loading.value = true;
try {
const response = await getExampleList(params);
dataList.value = response.data.list || [];
} finally {
loading.value = false;
}
};
return {
// State
dataList,
loading,
// Getters
getDataList,
isLoading,
// Actions
fetchDataList
};
});
```
4. **插件页面视图**
在插件目录下创建 `views/` 文件夹,开发插件的页面组件:
```vue
```
5. **插件路由配置**
插件页面会自动被路由系统识别,无需手动配置路由。路由系统会自动扫描 `src/plugins/**/*.vue` 文件并进行动态加载。
6. **插件权限控制**
插件可以使用系统的权限控制机制,通过 `v-hasPerm` 指令控制按钮权限:
```vue
新增数据
```
### 插件开发最佳实践
1. **命名规范**
- 插件文件夹使用小写字母和连字符分隔,如 `user-management`
- 插件Store命名使用 `use[PluginName]PluginStore` 格式
- 插件API文件命名与插件名称保持一致
2. **代码组织**
- 按功能模块组织代码,保持目录结构清晰
- 重复使用的组件应提取到 `src/components/` 目录
- 工具函数应提取到 `src/utils/` 目录
3. **类型安全**
- 所有接口数据应定义 TypeScript 接口
- 使用泛型确保API响应类型安全
- 避免使用 `any` 类型
4. **状态管理**
- 使用 Pinia 进行状态管理
- 合理划分 state、getters、actions
- 使用 `storeToRefs` 解构响应式状态
## 免责声明:
> 1、GIN-FAST仅限自己学习使用,一切商业行为与GIN-FAST无关。
> 2、用户不得利用GIN-FAST从事非法行为,用户应当合法合规的使用,发现用户在使用产品时有任何的非法行为,GIN-FAST有权配合有关机关进行调查或向政府部门举报,GIN-FAST不承担用户因非法行为造成的任何法律责任,一切法律责任由用户自行承担,如因用户使用造成第三方损害的,用户应当依法予以赔偿。
> 3、所有与使用GIN-FAST相关的资源直接风险均由用户承担。