# 🗄️ EasySQL

<div align="center">

![EasySQL](https://img.shields.io/badge/EasySQL-v2.0-06b6d4?style=for-the-badge)
![Electron](https://img.shields.io/badge/Electron-33-47848f?style=for-the-badge&logo=electron)
![React](https://img.shields.io/badge/React-18-61dafb?style=for-the-badge&logo=react)
![TypeScript](https://img.shields.io/badge/TypeScript-5-3178c6?style=for-the-badge&logo=typescript)
![Node.js](https://img.shields.io/badge/Node.js-18+-339933?style=for-the-badge&logo=node.js)

**现代化多数据库管理工具**

*轻量、高性能、跨平台*

</div>

---

## ✨ 特性

- 🚀 **跨平台** - 基于 Electron，支持 Windows、macOS、Linux
- ⚡ **高性能** - 原生数据库驱动，毫秒级响应
- 🎨 **精美 UI** - 简约现代浅色主题，圆角设计，柔和阴影
- 🔌 **多数据库** - 支持 MySQL、PostgreSQL、SQLite、SQL Server、MongoDB、Redis、MariaDB
- 📝 **智能编辑器** - Monaco Editor，SQL 语法高亮、智能补全
- 📊 **数据编辑** - 支持直接编辑表格数据，虚拟滚动大数据量，列宽可拖动调整
- 📅 **日期选择器** - 智能识别日期字段，内置精确到秒的日期时间选择器
- 🛠️ **表设计器** - Navicat 风格，可视化编辑字段、索引、外键、表选项
- 🗃️ **完整管理** - 创建/删除/重命名/复制数据库和表
- 📤 **导入导出** - 支持 JSON、Navicat NCX 格式连接配置导入导出（含密码解密）
- 🔄 **批量操作** - 支持多选连接批量删除管理

## 🗃️ 支持的数据库

| 数据库 | 状态 | 驱动 |
|--------|------|------|
| 🐬 MySQL | ✅ | mysql2 |
| 🐘 PostgreSQL | ✅ | pg |
| 💾 SQLite | ✅ | sql.js |
| 📊 SQL Server | ✅ | mssql |
| 🦭 MariaDB | ✅ | mysql2 |
| 🍃 MongoDB | ✅ | mongodb |
| ⚡ Redis | ✅ | ioredis |

## 🚀 快速开始

### 环境要求

- Node.js 18+
- npm 或 yarn

### 安装

```bash
# 克隆项目
git clone https://github.com/your-repo/easysql.git
cd easysql

# 安装依赖
npm install

# 开发模式运行
npm run electron:dev

# 构建应用（自动递增版本号）
npm run electron:build
```

## 📸 界面预览

```
┌─────────────────────────────────────────────────────────────────┐
│ 🗄️ EasySQL v2.0                                    ─  □  ✕     │
├────────────────┬────────────────────────────────────────────────┤
│                │  🏠 主页  │  📝 查询1  │  📋 users  │  +        │
│ + 新建连接     │ ┌──────────────────────────────────────────┐   │
│                │ │ SELECT * FROM users                      │   │
│ ─ 连接 ─────── │ │ WHERE status = 'active'                  │   │
│                │ │ ORDER BY created_at DESC                 │   │
│ 🐬 MySQL本地   │ │ LIMIT 100;                               │   │
│ 🐘 PostgreSQL  │ ├──────────────────────────────────────────┤   │
│ 📊 SQL Server  │ │ ┌────┬────────┬─────────┬────────────┐   │   │
│                │ │ │ id │ name   │ email   │ created_at │   │   │
│ ─ mydb ─────── │ │ ├────┼────────┼─────────┼────────────┤   │   │
│   📋 users     │ │ │ 1  │ Alice  │ a@...   │ 2024-01-01 │   │   │
│   📋 orders    │ │ │ 2  │ Bob    │ b@...   │ 2024-01-02 │   │   │
│   📋 products  │ │ └────┴────────┴─────────┴────────────┘   │   │
├────────────────┴────────────────────────────────────────────────┤
│ ● 就绪  ·  2 行 (0.05s)                         EasySQL v2.0   │
└─────────────────────────────────────────────────────────────────┘
```

## 🛠️ 技术栈

- **运行时**: Electron 33
- **前端**: React 18 + TypeScript 5
- **样式**: Tailwind CSS 3
- **构建**: Vite 5
- **编辑器**: Monaco Editor
- **数据库驱动**: mysql2, pg, sql.js, mssql, mongodb, ioredis

## 📁 项目结构

```
easysql/
├── electron/              # Electron 主进程
│   ├── main.js            # 主程序入口
│   └── preload.js         # 预加载脚本
├── src/                   # React 前端
│   ├── components/        # UI 组件
│   │   ├── TitleBar.tsx          # 标题栏
│   │   ├── Sidebar.tsx           # 侧边栏（连接/数据库/表树）
│   │   ├── MainContent.tsx       # 主内容区
│   │   ├── SqlEditor.tsx         # SQL 编辑器（Monaco）
│   │   ├── VirtualDataTable.tsx  # 虚拟滚动数据表格
│   │   ├── TableDesigner.tsx     # 表设计器（Navicat 风格）
│   │   ├── ConnectionModal.tsx   # 连接配置弹窗
│   │   ├── CreateDatabaseModal.tsx  # 新建数据库弹窗
│   │   ├── CreateTableModal.tsx  # 快速新建表弹窗
│   │   └── InputDialog.tsx       # 通用输入对话框
│   ├── lib/
│   │   ├── electron-api.ts    # Electron API 封装
│   │   └── hooks.ts           # 自定义 Hooks
│   ├── App.tsx
│   ├── types.ts
│   └── index.css
├── scripts/
│   ├── bump-version.js    # 版本号递增脚本
│   └── generate-icons.js  # 图标生成脚本
├── index.html
├── package.json
├── tailwind.config.js
├── tsconfig.json
└── vite.config.ts
```

## ⌨️ 快捷键

| 快捷键 | 功能 |
|--------|------|
| `Ctrl+Enter` | 执行 SQL |
| `Ctrl+S` | 保存文件/保存修改 |
| `Ctrl+O` | 打开 SQL 文件 |
| `Ctrl+Shift+F` | 格式化 SQL |
| `Ctrl+Q` | 新建查询 |
| `Ctrl+W` | 关闭当前标签 |
| `Ctrl+C` | 复制选中单元格 |
| `Ctrl+F` | 搜索（侧边栏/表格） |
| `双击连接` | 快速连接数据库 |
| `双击单元格` | 编辑单元格数据 |
| `右键菜单` | 连接/数据库/表操作 |

## 🔧 配置说明

连接配置保存在用户配置目录：
- Windows: `%APPDATA%\easysql\connections.json`
- macOS: `~/Library/Application Support/easysql/connections.json`
- Linux: `~/.config/easysql/connections.json`

## 📦 npm 脚本

| 命令 | 说明 |
|------|------|
| `npm run dev` | 启动 Vite 开发服务器 |
| `npm run build` | 构建前端资源 |
| `npm run electron:dev` | 开发模式运行 Electron |
| `npm run electron:build` | 打包应用（自动递增补丁版本） |
| `npm run electron:build:minor` | 打包应用（递增次版本） |
| `npm run electron:build:major` | 打包应用（递增主版本） |
| `npm run version:patch` | 只递增补丁版本号 |
| `npm run version:minor` | 只递增次版本号 |
| `npm run version:major` | 只递增主版本号 |
| `npm run icons` | 生成应用图标 |

## 📋 版本号管理

项目使用语义化版本号 (SemVer)：`主版本.次版本.补丁版本`

```bash
# 递增补丁版本 2.0.0 -> 2.0.1
npm run version:patch

# 递增次版本 2.0.0 -> 2.1.0
npm run version:minor

# 递增主版本 2.0.0 -> 3.0.0
npm run version:major

# 构建时自动递增版本号
npm run electron:build        # patch
npm run electron:build:minor  # minor
npm run electron:build:major  # major
```

## 🤝 贡献

欢迎提交 Issue 和 Pull Request！

## 📄 License

MIT

---

<div align="center">
Made with ❤️ using Electron + React + Node.js
</div>
