# 毕业设计双选系统
**Repository Path**: hopper/graduationMachingSystem
## Basic Information
- **Project Name**: 毕业设计双选系统
- **Description**: 毕业设计师生双选系统
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-11-21
- **Last Updated**: 2025-11-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Graduation Project Matching System
## Introduction
The Graduation Project Matching System is a full-stack application based on **Monorepo** architecture, designed to help universities efficiently manage the student-teacher matching process for graduation projects. The system supports student team formation, preference submission, teacher review, intelligent allocation, and grade management with a complete workflow.
Built on **RuoYi framework** and integrated with **Tauri** for cross-platform desktop applications (Windows/macOS/Linux), offering both web and desktop deployment options.
## Core Features
### Student Portal
- Registration, login, and profile management
- Team creation and management (leader/member roles)
- Teacher preference submission (multiple ranked choices)
- View allocation results
- Grade inquiry
### Teacher Portal
- Profile management
- View student preference lists
- Team review and confirmation
- Grade assessment and management
### Admin Portal
- Student/Teacher information management
- Major management, team management
- Intelligent allocation algorithm (preference-based with capacity constraints)
- Manual adjustment of allocation results
- Grade statistics and export
- System configuration (dictionaries, menus, role permissions, etc.)
### System Features
- Multi-role permission management (RBAC-based)
- Intelligent matching algorithm (preference priority + capacity limits)
- Real-time notification system
- Data import/export (Excel)
- Operation log auditing
- Cache optimization (Redis)
- File storage (MinIO/OSS)
## Technology Stack
### Frontend
- **Framework**: Vue 3.2.45 + Vite 3.2.3
- **UI Components**: Element Plus 2.11.1
- **State Management**: Pinia 2.0.22
- **Router**: Vue Router 4.1.4
- **Desktop**: Tauri 2.x (Windows/macOS/Linux support)
- **HTTP Client**: Axios 0.27.2
- **Others**: VueQuill, ECharts, Fuse.js, Cropper, etc.
### Backend
- **Framework**: Midway.js 3.20 (Koa-based)
- **ORM**: TypeORM 0.3.25
- **Database**: PostgreSQL / MySQL
- **Cache**: Redis (cache-manager)
- **Authentication**: JWT + bcryptjs
- **File Storage**: MinIO
- **API Docs**: Swagger
- **Others**: Captcha, ExcelJS, Nodemailer, etc.
### Engineering
- **Package Manager**: pnpm 10.17.1 (Workspace Monorepo)
- **Code Quality**: ESLint + Prettier + Husky + Commitlint
- **Testing**: Vitest + @vitest/browser
- **Build**: Vite + Rollup
## Project Structure
```
graduationMachingSystem/
├── apps/
│ ├── frontend/ # Frontend app (Vue 3 + Tauri)
│ │ ├── src/
│ │ │ ├── views/ # Page views
│ │ │ │ ├── home/ # Home page (student/teacher)
│ │ │ │ ├── myTeam/ # Team management
│ │ │ │ ├── group/ # Team list
│ │ │ │ ├── allocate/ # Allocation management
│ │ │ │ ├── grade/ # Grade management
│ │ │ │ ├── student/ # Student management
│ │ │ │ └── system/ # System management
│ │ │ ├── components/ # Shared components
│ │ │ ├── layout/ # Layout components
│ │ │ └── api/ # API interfaces
│ │ └── src-tauri/ # Tauri desktop configuration
│ └── backend/ # Backend app (Midway.js)
│ ├── src/
│ │ ├── controller/ # Controllers
│ │ ├── service/ # Business logic
│ │ ├── entity/ # Database entities
│ │ ├── middleware/ # Middleware
│ │ └── config/ # Configuration files
├── packages/
│ ├── components/ # Shared component library
│ └── utils/ # Shared utilities
├── scripts/ # Build scripts
├── package.json # Root configuration
└── pnpm-workspace.yaml # pnpm workspace config
```
## Quick Start
### Prerequisites
- Node.js >= 20.19.0
- pnpm >= 10.17.1
- PostgreSQL >= 13 or MySQL >= 8.0
- Redis >= 6.0
- Rust (only required for building Tauri desktop app)
### Installation
```bash
# Clone the repository
git clone https://gitee.com/yi-jingqq/graduationMachingSystem.git
cd graduationMachingSystem
# Install all dependencies (managed by Monorepo)
pnpm install
```
### Backend Configuration
1. **Database Configuration**
Configure database connection in `apps/backend/src/config/config.default.ts`:
```typescript
// PostgreSQL example
typeorm: {
dataSource: {
default: {
type: 'postgres',
host: '127.0.0.1',
port: 5432,
username: 'your_username',
password: 'your_password',
database: 'graduationSystem',
synchronize: false,
logging: false,
}
}
}
```
2. **Redis Configuration**
```typescript
redis: {
client: {
port: 6379,
host: '127.0.0.1',
password: '',
db: 0,
}
}
```
3. **MinIO Configuration (Optional)**
```typescript
oss: {
client: {
endPoint: 'your-minio-endpoint',
accessKey: 'your-access-key',
secretKey: 'your-secret-key',
}
}
```
### Run Backend
```bash
# Navigate to backend directory
cd apps/backend
# Development mode (with hot reload)
pnpm dev
# Production build
pnpm build
# Production run
pnpm start
```
Backend runs at: `http://localhost:7001`
### Run Frontend (Web)
```bash
# Navigate to frontend directory
cd apps/frontend
# Development mode
pnpm dev
# Production build
pnpm build:prod
# Preview build
pnpm preview
```
Frontend runs at: `http://localhost:8888`
### Build Desktop Application (Tauri)
```bash
# Navigate to frontend directory
cd apps/frontend
# Development mode (desktop app)
pnpm tauri-dev
# Build Windows desktop app
pnpm tauri-build:win
# Build macOS desktop app
pnpm tauri-build:macos
# Build Linux desktop app
pnpm tauri-build:linux
# Build for all platforms
pnpm tauri-build:all
```
After build, installers are located in `apps/frontend/src-tauri/target/release/bundle/`
## Access URLs
- **Frontend Web**: http://localhost:8888
- **Backend API**: http://localhost:7001
- **API Documentation**: http://localhost:7001/swagger-ui/index.html
- **Desktop App**: Run the generated installer
## Default Account
The system creates a default admin account after initialization:
- Username: admin
- Password: admin123
(Recommend changing password immediately after first login)
## Main Modules
### 1. Team Management Module (`myTeam`)
- Students can create teams (automatically become team leader)
- Leaders can invite members (by student ID)
- Members can apply to join teams
- Support team info editing and disbanding
### 2. Preference Submission Module (`home`)
- Students submit teacher preferences (multiple ranked choices)
- Teachers view student preference lists
- Preferences can be modified before deadline
### 3. Intelligent Allocation Module (`allocate`)
- Preference-based priority algorithm
- Consider teacher capacity constraints
- View by major dimension
- Support manual adjustment of results
- Generate allocation reports
### 4. Grade Management Module (`grade`)
- Teachers input grades
- Multi-dimensional grading criteria
- Grade review workflow
- Grade statistics and export
### 5. System Management Module (`system`)
- User management (students/teachers/admins)
- Role and permission management
- Menu management
- Dictionary management
- Department management
- Operation logs
## Development Guide
### Monorepo Workflow
```bash
# Install all dependencies in root directory
pnpm install
# Run all apps (parallel)
pnpm dev
# Build all apps
pnpm build
# Run tests
pnpm test
# Code formatting
pnpm lint:prettier
# ESLint check
pnpm lint:eslint
```
### Git Commit Convention
This project uses Commitizen + Commitlint for commit standardization:
```bash
# Use interactive commit
pnpm commit
# Commit format
# feat: new feature
# fix: bug fix
# docs: documentation
# style: formatting
# refactor: code refactoring
# test: testing
# chore: build/tooling
```
### Generate Database Entities (TypeORM)
```bash
cd apps/backend
pnpm generate-models
```
## Deployment
### Backend Deployment
1. Build project:
```bash
cd apps/backend
pnpm build
```
2. Deploy files:
- `dist/` directory (compiled code)
- `package.json`
- `bootstrap.js`
3. Start in production:
```bash
NODE_ENV=production node ./bootstrap.js
```
### Frontend Deployment
1. Build project:
```bash
cd apps/frontend
pnpm build:prod
```
2. Deploy `dist/` directory to static server (Nginx/CDN)
### Nginx Configuration Example
```nginx
server {
listen 80;
server_name your-domain.com;
# Frontend
location / {
root /path/to/frontend/dist;
try_files $uri $uri/ /index.html;
}
# Backend API proxy
location /prod-api/ {
proxy_pass http://localhost:7001/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
## Desktop Application Features
- Support Windows 7+ / macOS 10.13+ / Linux
- Native performance with low memory footprint
- Local file access support
- Auto-update (configurable)
- System tray integration
- Native dialogs
## FAQ
### 1. Frontend cannot connect to backend?
Check `baseURL` configuration in `apps/frontend/src/utils/request.js`
### 2. Tauri build failed?
Ensure Rust environment is installed: https://tauri.app/v1/guides/getting-started/prerequisites
### 3. Database connection failed?
Check database configuration, network connection, and firewall settings
### 4. pnpm install failed?
```bash
# Clear cache
pnpm store prune
# Reinstall
pnpm install
```
## Support
- Submit Issue: https://github.com/graduationMachingSystem/issues
- Repository: https://gitee.com/yi-jingqq/graduationMachingSystem
## License
[MIT License](LICENSE)
Copyright (c) 2024-2025 GraduationMachingSystem Team
## Acknowledgements
- [RuoYi Framework](http://ruoyi.vip/)
- [Vue.js](https://vuejs.org/)
- [Element Plus](https://element-plus.org/)
- [Midway.js](https://midwayjs.org/)
- [Tauri](https://tauri.app/)