二次开发:补全 PRO 功能 + 优化体验

- 新增站点自定义(标题/Favicon/登录页描述)
- 新增在线自定义 CSS/JS 编辑器
- 扩展备份迁移支持面板配置导出导入
- 默认账号改为 admin/1234
- 设置按钮改为橙色更醒目
- 修复登录页误报"登录过期"弹窗
- 修复 i18n 双重 apps 块导致翻译失效

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
yuming
2026-05-15 14:29:03 +08:00
parent 25f46209d9
commit d6daf1dce6
24 changed files with 587 additions and 46 deletions
+86
View File
@@ -0,0 +1,86 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## 项目简介
Sun-Panel 是服务器/NAS 导航面板应用,前后端分离架构:
- **前端**Vue 3 + TypeScript + Vite + Naive UI + Pinia
- **后端**Go + Gin + GORM,支持 SQLite(默认)或 MySQL,可选 Redis
## 常用命令
### 前端
```bash
pnpm dev # 启动开发服务器,端口 1002
pnpm build # 生产构建(类型检查 + Vite 打包)
pnpm lint # ESLint 检查
pnpm lint:fix # 自动修复
pnpm type-check # 仅 TypeScript 类型检查
```
### 后端
```bash
cd service
go run main.go # 启动,默认端口 3002
```
### Docker 全量构建
```bash
docker build -t sun-panel .
```
## 架构要点
### 前后端通信
开发时,Vite 将 `/api/*``/uploads/*` 代理到 `http://127.0.0.1:3002`(由 `.env``VITE_APP_API_BASE_URL` 控制)。生产部署时前后端同端口,Go 直接 serve 静态文件。
### 前端分层
```
src/api/ → API 调用函数(按模块分:panel/ system/ 等)
src/store/ → Pinia 状态(auth/user/panel/admin/notice/moduleConfig/app
src/views/ → 页面组件(home/login/exception
src/components/ → UI 组件(apps/ common/ deskModule/
src/utils/request/ → axios 封装,含 token 拦截器
src/hooks/ → Composition APIuseTheme/useLanguage/useBasicLayout/useIconRender
src/locales/ → 国际化(zh-CN.json / en-US.json
```
### 后端分层
```
service/router/ → 路由注册,入口 A_ENTER.go
service/api/api_v1/ → Handler 层,中间件在 middleware/
service/lib/ → 业务逻辑(user/cache/monitor/siteFavicon 等)
service/models/ → GORM 模型
service/global/ → 全局变量(Db/Logger/Redis 等)
service/initialize/ → 启动初始化流程,入口 A_ENTER.go
```
后端每个子目录都以 `A_ENTER.go` 作为该模块的入口聚合文件。
### 路由分组(后端)
- `/system/*` — 登录/用户/系统设置,需 LoginInterceptor
- `/panel/*` — 面板数据/图标管理,需 LoginInterceptor
- `/openness/*` — 无需认证的公开接口
### 配置文件
后端使用 INI 格式配置,示例见 `service/assets/conf.example.ini`。关键字段:
- `database_drive``sqlite`(默认)或 `mysql`
- `cache_drive` / `queue_drive``memory`(默认)或 `redis`
- `source_path`:上传文件存储路径,默认 `./uploads`
## 开发注意
- 前端路径别名 `@` 指向 `src/`
- 提交前 Husky + lint-staged 会自动对 `.ts/.tsx/.vue` 运行 `eslint --fix`
- TypeScript 开启 `strict``noUnusedLocals`,避免引入 `any`
- 国际化新增文案需同时更新 `zh-CN.json``en-US.json`