feat: 迁移 geekai-plus v4.3.1 到开源版

- 同步 Plus v4.3.1 功能源并移除商业 License 闭环
- 更新开源镜像命名、Docker 部署版本和 geekai 数据库配置
- 补充前端 ESLint 检查配置并修复存量解析与模板问题
- 保留 JWT、管理员权限、API Key 和 OAuth 等正常鉴权机制
This commit is contained in:
RockYang
2026-09-13 14:37:12 +08:00
parent 3e66c5ac5b
commit d4fd38ab7e
96 changed files with 7164 additions and 3047 deletions
+81 -5
View File
@@ -55,6 +55,8 @@ func (h *VideoHandler) RegisterRoutes() {
{
group.POST("create", h.Create)
group.GET("list", h.List)
group.GET("tasks", h.TaskList)
group.GET("works", h.WorkList)
group.GET("remove", h.Remove)
group.GET("publish", h.Publish)
group.GET("power-config", h.GetPowerConfig) // 获取算力配置
@@ -151,11 +153,13 @@ func (h *VideoHandler) Create(c *gin.Context) {
// 插入数据库
job := model.VideoJob{
UserId: uint(userId),
Type: data.Provider,
Prompt: data.Prompt,
Power: power,
Params: utils.JsonEncode(task),
UserId: uint(userId),
Type: data.Provider,
Prompt: data.Prompt,
Power: power,
Params: utils.JsonEncode(task),
Status: types.VideoStatusPending,
Progress: 0,
}
tx := h.DB.Create(&job)
if tx.Error != nil {
@@ -305,6 +309,78 @@ func (h *VideoHandler) List(c *gin.Context) {
resp.SUCCESS(c, vo.NewPage(total, page, pageSize, items))
}
// TaskList 任务列表:仅返回进行中的任务(pending / in_progress
func (h *VideoHandler) TaskList(c *gin.Context) {
userId := h.GetLoginUserId(c)
t := c.Query("type")
session := h.DB.Session(&gorm.Session{}).Where("user_id", userId)
if t != "" {
session = session.Where("type", t)
}
session = session.Where("status IN ?", []string{types.VideoStatusPending, types.VideoStatusInProgress})
var list []model.VideoJob
err := session.Order("id desc").Find(&list).Error
if err != nil {
resp.ERROR(c, err.Error())
return
}
items := make([]vo.VideoJob, 0, len(list))
for _, v := range list {
var item vo.VideoJob
if err := utils.CopyObject(v, &item); err != nil {
continue
}
item.CreatedAt = v.CreatedAt.Unix()
items = append(items, item)
}
resp.SUCCESS(c, items)
}
// WorkList 作品列表:仅返回 downloading / success / failed
func (h *VideoHandler) WorkList(c *gin.Context) {
userId := h.GetLoginUserId(c)
t := c.Query("type")
page := h.GetInt(c, "page", 1)
pageSize := h.GetInt(c, "page_size", 20)
session := h.DB.Session(&gorm.Session{}).Where("user_id", userId)
if t != "" {
session = session.Where("type", t)
}
session = session.Where(
"status IN ?",
[]string{types.VideoStatusDownloading, types.VideoStatusSuccess, types.VideoStatusFailed},
)
var total int64
session.Model(&model.VideoJob{}).Count(&total)
if page > 0 && pageSize > 0 {
offset := (page - 1) * pageSize
session = session.Offset(offset).Limit(pageSize)
}
var list []model.VideoJob
err := session.Order("id desc").Find(&list).Error
if err != nil {
resp.ERROR(c, err.Error())
return
}
items := make([]vo.VideoJob, 0, len(list))
for _, v := range list {
var item vo.VideoJob
if err := utils.CopyObject(v, &item); err != nil {
continue
}
item.CreatedAt = v.CreatedAt.Unix()
items = append(items, item)
}
resp.SUCCESS(c, vo.NewPage(total, page, pageSize, items))
}
func (h *VideoHandler) Remove(c *gin.Context) {
id := h.GetInt(c, "id", 0)
userId := h.GetLoginUserId(c)