diff --git a/CHANGELOG.md b/CHANGELOG.md
index 54d6cda0..695b0cd4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,7 +7,8 @@
- 功能优化:支持 GPT-4o 图片编辑功能。
- 功能新增:对话页面支持 AI 输出语音播报(TTS)。
- 功能优化:替换瀑布流组件,优化用户体验。
-- 功能优化:生成思维导图时候自动缓存上一次的结果
+- 功能优化:生成思维导图时候自动缓存上一次的结果。
+- 功能优化:优化 MJ 绘图页面,增加 MJ-V7 模型支持。
## v4.2.1
diff --git a/api/handler/admin/user_handler.go b/api/handler/admin/user_handler.go
index f15274bc..6f8a59fa 100644
--- a/api/handler/admin/user_handler.go
+++ b/api/handler/admin/user_handler.go
@@ -20,6 +20,7 @@ import (
"time"
"github.com/go-redis/redis/v8"
+ "github.com/golang-jwt/jwt/v5"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
@@ -320,3 +321,36 @@ func (h *UserHandler) LoginLog(c *gin.Context) {
resp.SUCCESS(c, vo.NewPage(total, page, pageSize, logs))
}
+
+// GenLoginLink 生成登录链接
+func (h *UserHandler) GenLoginLink(c *gin.Context) {
+ id := c.Query("id")
+ if id == "" {
+ resp.ERROR(c, types.InvalidArgs)
+ return
+ }
+ var user model.User
+ if err := h.DB.Where("id = ?", id).First(&user).Error; err != nil {
+ resp.ERROR(c, "用户不存在")
+ return
+ }
+
+ // 创建 token
+ token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
+ "user_id": user.Id,
+ "expired": time.Now().Add(time.Second * time.Duration(h.App.Config.Session.MaxAge)).Unix(),
+ })
+ tokenString, err := token.SignedString([]byte(h.App.Config.Session.SecretKey))
+ if err != nil {
+ resp.ERROR(c, "Failed to generate token, "+err.Error())
+ return
+ }
+ // 保存到 redis
+ sessionKey := fmt.Sprintf("users/%d", user.Id)
+ if _, err = h.redis.Set(c, sessionKey, tokenString, 0).Result(); err != nil {
+ resp.ERROR(c, "error with save token: "+err.Error())
+ return
+ }
+
+ resp.SUCCESS(c, tokenString)
+}
\ No newline at end of file
diff --git a/api/main.go b/api/main.go
index 729b4cef..47910b97 100644
--- a/api/main.go
+++ b/api/main.go
@@ -331,6 +331,7 @@ func main() {
group.POST("save", h.Save)
group.GET("remove", h.Remove)
group.GET("loginLog", h.LoginLog)
+ group.GET("genLoginLink", h.GenLoginLink)
group.POST("resetPass", h.ResetPass)
}),
fx.Invoke(func(s *core.AppServer, h *admin.ChatAppHandler) {
diff --git a/api/service/dalle/service.go b/api/service/dalle/service.go
index dbd97794..2306f446 100644
--- a/api/service/dalle/service.go
+++ b/api/service/dalle/service.go
@@ -35,15 +35,13 @@ type Service struct {
uploadManager *oss.UploaderManager
taskQueue *store.RedisQueue
userService *service.UserService
- wsService *service.WebsocketService
}
-func NewService(db *gorm.DB, manager *oss.UploaderManager, redisCli *redis.Client, userService *service.UserService, wsService *service.WebsocketService) *Service {
+func NewService(db *gorm.DB, manager *oss.UploaderManager, redisCli *redis.Client, userService *service.UserService) *Service {
return &Service{
httpClient: req.C().SetTimeout(time.Minute * 3),
db: db,
taskQueue: store.NewRedisQueue("DallE_Task_Queue", redisCli),
- wsService: wsService,
uploadManager: manager,
userService: userService,
}
diff --git a/api/service/mj/service.go b/api/service/mj/service.go
index d692ce9f..532b82fd 100644
--- a/api/service/mj/service.go
+++ b/api/service/mj/service.go
@@ -28,17 +28,15 @@ type Service struct {
client *Client // MJ Client
taskQueue *store.RedisQueue
db *gorm.DB
- wsService *service.WebsocketService
uploaderManager *oss.UploaderManager
userService *service.UserService
}
-func NewService(redisCli *redis.Client, db *gorm.DB, client *Client, manager *oss.UploaderManager, wsService *service.WebsocketService, userService *service.UserService) *Service {
+func NewService(redisCli *redis.Client, db *gorm.DB, client *Client, manager *oss.UploaderManager, userService *service.UserService) *Service {
return &Service{
db: db,
taskQueue: store.NewRedisQueue("MidJourney_Task_Queue", redisCli),
client: client,
- wsService: wsService,
uploaderManager: manager,
userService: userService,
}
diff --git a/api/service/sd/service.go b/api/service/sd/service.go
index ef6c4e8a..2047923e 100644
--- a/api/service/sd/service.go
+++ b/api/service/sd/service.go
@@ -33,16 +33,14 @@ type Service struct {
taskQueue *store.RedisQueue
db *gorm.DB
uploadManager *oss.UploaderManager
- wsService *service.WebsocketService
userService *service.UserService
}
-func NewService(db *gorm.DB, manager *oss.UploaderManager, levelDB *store.LevelDB, redisCli *redis.Client, wsService *service.WebsocketService, userService *service.UserService) *Service {
+func NewService(db *gorm.DB, manager *oss.UploaderManager, redisCli *redis.Client, userService *service.UserService) *Service {
return &Service{
httpClient: req.C(),
taskQueue: store.NewRedisQueue("StableDiffusion_Task_Queue", redisCli),
db: db,
- wsService: wsService,
uploadManager: manager,
userService: userService,
}
diff --git a/api/service/suno/service.go b/api/service/suno/service.go
index 685153da..14e36e88 100644
--- a/api/service/suno/service.go
+++ b/api/service/suno/service.go
@@ -35,18 +35,16 @@ type Service struct {
uploadManager *oss.UploaderManager
taskQueue *store.RedisQueue
notifyQueue *store.RedisQueue
- wsService *service.WebsocketService
userService *service.UserService
}
-func NewService(db *gorm.DB, manager *oss.UploaderManager, redisCli *redis.Client, wsService *service.WebsocketService, userService *service.UserService) *Service {
+func NewService(db *gorm.DB, manager *oss.UploaderManager, redisCli *redis.Client, userService *service.UserService) *Service {
return &Service{
httpClient: req.C().SetTimeout(time.Minute * 3),
db: db,
taskQueue: store.NewRedisQueue("Suno_Task_Queue", redisCli),
notifyQueue: store.NewRedisQueue("Suno_Notify_Queue", redisCli),
uploadManager: manager,
- wsService: wsService,
userService: userService,
}
}
diff --git a/api/service/video/video.go b/api/service/video/video.go
index 6e83c7c2..42628c13 100644
--- a/api/service/video/video.go
+++ b/api/service/video/video.go
@@ -36,16 +36,14 @@ type Service struct {
db *gorm.DB
uploadManager *oss.UploaderManager
taskQueue *store.RedisQueue
- wsService *service.WebsocketService
userService *service.UserService
}
-func NewService(db *gorm.DB, manager *oss.UploaderManager, redisCli *redis.Client, wsService *service.WebsocketService, userService *service.UserService) *Service {
+func NewService(db *gorm.DB, manager *oss.UploaderManager, redisCli *redis.Client, userService *service.UserService) *Service {
return &Service{
httpClient: req.C().SetTimeout(time.Minute * 3),
db: db,
taskQueue: store.NewRedisQueue("Video_Task_Queue", redisCli),
- wsService: wsService,
uploadManager: manager,
userService: userService,
}
diff --git a/web/public/images/mj/mj-v7.png b/web/public/images/mj/mj-v7.png
new file mode 100644
index 00000000..4d9aa371
Binary files /dev/null and b/web/public/images/mj/mj-v7.png differ
diff --git a/web/src/assets/css/common.styl b/web/src/assets/css/common.styl
index 7701983e..7faea9eb 100644
--- a/web/src/assets/css/common.styl
+++ b/web/src/assets/css/common.styl
@@ -125,6 +125,7 @@
//.el-message-box
.el-message-box{
--el-messagebox-border-radius: 10px
+ --el-messagebox-padding-primary: 24px
}
.el-message-box__container{
//border-top: 1px solid #dbd3f4;
diff --git a/web/src/views/Home.vue b/web/src/views/Home.vue
index aa19bee7..4d946412 100644
--- a/web/src/views/Home.vue
+++ b/web/src/views/Home.vue
@@ -58,7 +58,9 @@