mirror of
				https://github.com/yangjian102621/geekai.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	Merge branch 'main' into husm_2024-09-02
This commit is contained in:
		@@ -1,7 +1,8 @@
 | 
			
		||||
# 更新日志
 | 
			
		||||
## v4.1.4
 | 
			
		||||
* 功能优化:用户文件列表组件增加分页功能支持
 | 
			
		||||
 | 
			
		||||
## v4.1.3
 | 
			
		||||
* 功能优化:VIP 会员在进行任何操作都不扣减算力,以实现会员周卡月卡功能
 | 
			
		||||
* 功能优化:重构用户登录模块,给所有的登录组件增加行为验证码功能,支持用户绑定手机,邮箱和微信
 | 
			
		||||
* 功能优化:重构找回密码模块,支持通过手机或者邮箱找回密码
 | 
			
		||||
* 功能优化:管理后台给可以拖动排序的组件添加拖动图标
 | 
			
		||||
 
 | 
			
		||||
@@ -227,6 +227,7 @@ func needLogin(c *gin.Context) bool {
 | 
			
		||||
		c.Request.URL.Path == "/api/suno/detail" ||
 | 
			
		||||
		c.Request.URL.Path == "/api/suno/play" ||
 | 
			
		||||
		c.Request.URL.Path == "/api/download" ||
 | 
			
		||||
		c.Request.URL.Path == "/api/video/client" ||
 | 
			
		||||
		strings.HasPrefix(c.Request.URL.Path, "/api/test") ||
 | 
			
		||||
		strings.HasPrefix(c.Request.URL.Path, "/api/user/clogin") ||
 | 
			
		||||
		strings.HasPrefix(c.Request.URL.Path, "/api/config/") ||
 | 
			
		||||
 
 | 
			
		||||
@@ -204,33 +204,69 @@ func (h *UserHandler) ResetPass(c *gin.Context) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (h *UserHandler) Remove(c *gin.Context) {
 | 
			
		||||
	id := h.GetInt(c, "id", 0)
 | 
			
		||||
	if id <= 0 {
 | 
			
		||||
	id := c.Query("id")
 | 
			
		||||
	ids := c.QueryArray("ids[]")
 | 
			
		||||
	if id != "" {
 | 
			
		||||
		ids = append(ids, id)
 | 
			
		||||
	}
 | 
			
		||||
	if len(ids) == 0 {
 | 
			
		||||
		resp.ERROR(c, types.InvalidArgs)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 删除用户
 | 
			
		||||
	res := h.DB.Where("id = ?", id).Delete(&model.User{})
 | 
			
		||||
	if res.Error != nil {
 | 
			
		||||
 | 
			
		||||
	tx := h.DB.Begin()
 | 
			
		||||
	var err error
 | 
			
		||||
	for _, id = range ids {
 | 
			
		||||
		// 删除用户
 | 
			
		||||
		if err = tx.Where("id", id).Delete(&model.User{}).Error; err != nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		// 删除聊天记录
 | 
			
		||||
		if err = tx.Unscoped().Where("user_id = ?", id).Delete(&model.ChatItem{}).Error; err != nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		// 删除聊天历史记录
 | 
			
		||||
		if err = tx.Unscoped().Where("user_id = ?", id).Delete(&model.ChatMessage{}).Error; err != nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		// 删除登录日志
 | 
			
		||||
		if err = tx.Where("user_id = ?", id).Delete(&model.UserLoginLog{}).Error; err != nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		// 删除算力日志
 | 
			
		||||
		if err = tx.Where("user_id = ?", id).Delete(&model.PowerLog{}).Error; err != nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		if err = tx.Where("user_id = ?", id).Delete(&model.InviteLog{}).Error; err != nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		// 删除众筹日志
 | 
			
		||||
		if err = tx.Where("user_id = ?", id).Delete(&model.Redeem{}).Error; err != nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		// 删除绘图任务
 | 
			
		||||
		if err = tx.Where("user_id = ?", id).Delete(&model.MidJourneyJob{}).Error; err != nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		if err = tx.Where("user_id = ?", id).Delete(&model.SdJob{}).Error; err != nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		if err = tx.Where("user_id = ?", id).Delete(&model.DallJob{}).Error; err != nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		if err = tx.Where("user_id = ?", id).Delete(&model.SunoJob{}).Error; err != nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
		if err = tx.Where("user_id = ?", id).Delete(&model.VideoJob{}).Error; err != nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		resp.ERROR(c, "删除失败")
 | 
			
		||||
		tx.Rollback()
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 删除聊天记录
 | 
			
		||||
	h.DB.Where("user_id = ?", id).Delete(&model.ChatItem{})
 | 
			
		||||
	// 删除聊天历史记录
 | 
			
		||||
	h.DB.Where("user_id = ?", id).Delete(&model.ChatMessage{})
 | 
			
		||||
	// 删除登录日志
 | 
			
		||||
	h.DB.Where("user_id = ?", id).Delete(&model.UserLoginLog{})
 | 
			
		||||
	// 删除算力日志
 | 
			
		||||
	h.DB.Where("user_id = ?", id).Delete(&model.PowerLog{})
 | 
			
		||||
	// 删除众筹日志
 | 
			
		||||
	h.DB.Where("user_id = ?", id).Delete(&model.Redeem{})
 | 
			
		||||
	// 删除绘图任务
 | 
			
		||||
	h.DB.Where("user_id = ?", id).Delete(&model.MidJourneyJob{})
 | 
			
		||||
	h.DB.Where("user_id = ?", id).Delete(&model.SdJob{})
 | 
			
		||||
	//  删除订单
 | 
			
		||||
	h.DB.Where("user_id = ?", id).Delete(&model.Order{})
 | 
			
		||||
	tx.Commit()
 | 
			
		||||
	resp.SUCCESS(c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -543,9 +543,9 @@ func (h *ChatHandler) saveChatHistory(
 | 
			
		||||
	}
 | 
			
		||||
	historyUserMsg.CreatedAt = promptCreatedAt
 | 
			
		||||
	historyUserMsg.UpdatedAt = promptCreatedAt
 | 
			
		||||
	res := h.DB.Save(&historyUserMsg)
 | 
			
		||||
	if res.Error != nil {
 | 
			
		||||
		logger.Error("failed to save prompt history message: ", res.Error)
 | 
			
		||||
	err = h.DB.Save(&historyUserMsg).Error
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logger.Error("failed to save prompt history message: ", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// for reply
 | 
			
		||||
@@ -565,9 +565,9 @@ func (h *ChatHandler) saveChatHistory(
 | 
			
		||||
	}
 | 
			
		||||
	historyReplyMsg.CreatedAt = replyCreatedAt
 | 
			
		||||
	historyReplyMsg.UpdatedAt = replyCreatedAt
 | 
			
		||||
	res = h.DB.Create(&historyReplyMsg)
 | 
			
		||||
	if res.Error != nil {
 | 
			
		||||
		logger.Error("failed to save reply history message: ", res.Error)
 | 
			
		||||
	err = h.DB.Create(&historyReplyMsg).Error
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logger.Error("failed to save reply history message: ", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 更新用户算力
 | 
			
		||||
@@ -576,8 +576,8 @@ func (h *ChatHandler) saveChatHistory(
 | 
			
		||||
	}
 | 
			
		||||
	// 保存当前会话
 | 
			
		||||
	var chatItem model.ChatItem
 | 
			
		||||
	res = h.DB.Where("chat_id = ?", session.ChatId).First(&chatItem)
 | 
			
		||||
	if res.Error != nil {
 | 
			
		||||
	err = h.DB.Where("chat_id = ?", session.ChatId).First(&chatItem).Error
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		chatItem.ChatId = session.ChatId
 | 
			
		||||
		chatItem.UserId = userVo.Id
 | 
			
		||||
		chatItem.RoleId = role.Id
 | 
			
		||||
@@ -588,7 +588,10 @@ func (h *ChatHandler) saveChatHistory(
 | 
			
		||||
			chatItem.Title = prompt
 | 
			
		||||
		}
 | 
			
		||||
		chatItem.Model = req.Model
 | 
			
		||||
		h.DB.Create(&chatItem)
 | 
			
		||||
		err = h.DB.Create(&chatItem).Error
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			logger.Error("failed to save chat item: ", err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -295,7 +295,7 @@ func (h *SdJobHandler) Remove(c *gin.Context) {
 | 
			
		||||
 | 
			
		||||
	// 如果任务未完成,或者任务失败,则恢复用户算力
 | 
			
		||||
	if job.Progress != 100 {
 | 
			
		||||
		err := h.userService.DecreasePower(job.UserId, job.Power, model.PowerLog{
 | 
			
		||||
		err := h.userService.IncreasePower(job.UserId, job.Power, model.PowerLog{
 | 
			
		||||
			Type:   types.PowerRefund,
 | 
			
		||||
			Model:  "stable-diffusion",
 | 
			
		||||
			Remark: fmt.Sprintf("任务失败,退回算力。任务ID:%s, Err: %s", job.TaskId, job.ErrMsg),
 | 
			
		||||
 
 | 
			
		||||
@@ -235,7 +235,7 @@ func (h *SunoHandler) Remove(c *gin.Context) {
 | 
			
		||||
 | 
			
		||||
	// 如果任务未完成,或者任务失败,则恢复用户算力
 | 
			
		||||
	if job.Progress != 100 {
 | 
			
		||||
		err := h.userService.DecreasePower(job.UserId, job.Power, model.PowerLog{
 | 
			
		||||
		err := h.userService.IncreasePower(job.UserId, job.Power, model.PowerLog{
 | 
			
		||||
			Type:   types.PowerRefund,
 | 
			
		||||
			Model:  job.ModelName,
 | 
			
		||||
			Remark: fmt.Sprintf("Suno 任务失败,退回算力。任务ID:%s,Err:%s", job.TaskId, job.ErrMsg),
 | 
			
		||||
 
 | 
			
		||||
@@ -64,7 +64,9 @@ func (h *NetHandler) Upload(c *gin.Context) {
 | 
			
		||||
 | 
			
		||||
func (h *NetHandler) List(c *gin.Context) {
 | 
			
		||||
	var data struct {
 | 
			
		||||
		Urls []string `json:"urls,omitempty"`
 | 
			
		||||
		Urls     []string `json:"urls,omitempty"`
 | 
			
		||||
		Page     int      `json:"page"`
 | 
			
		||||
		PageSize int      `json:"page_size"`
 | 
			
		||||
	}
 | 
			
		||||
	if err := c.ShouldBindJSON(&data); err != nil {
 | 
			
		||||
		resp.ERROR(c, types.InvalidArgs)
 | 
			
		||||
@@ -79,21 +81,32 @@ func (h *NetHandler) List(c *gin.Context) {
 | 
			
		||||
	if len(data.Urls) > 0 {
 | 
			
		||||
		session = session.Where("url IN ?", data.Urls)
 | 
			
		||||
	}
 | 
			
		||||
	session.Find(&items)
 | 
			
		||||
	if len(items) > 0 {
 | 
			
		||||
		for _, v := range items {
 | 
			
		||||
			var file vo.File
 | 
			
		||||
			err := utils.CopyObject(v, &file)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				logger.Error(err)
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			file.CreatedAt = v.CreatedAt.Unix()
 | 
			
		||||
			files = append(files, file)
 | 
			
		||||
		}
 | 
			
		||||
	// 统计总数
 | 
			
		||||
	var total int64
 | 
			
		||||
	session.Model(&model.File{}).Count(&total)
 | 
			
		||||
 | 
			
		||||
	if data.Page > 0 && data.PageSize > 0 {
 | 
			
		||||
		offset := (data.Page - 1) * data.PageSize
 | 
			
		||||
		session = session.Offset(offset).Limit(data.PageSize)
 | 
			
		||||
	}
 | 
			
		||||
	err := session.Order("id desc").Find(&items).Error
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		resp.ERROR(c, err.Error())
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	resp.SUCCESS(c, files)
 | 
			
		||||
	for _, v := range items {
 | 
			
		||||
		var file vo.File
 | 
			
		||||
		err := utils.CopyObject(v, &file)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			logger.Error(err)
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		file.CreatedAt = v.CreatedAt.Unix()
 | 
			
		||||
		files = append(files, file)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	resp.SUCCESS(c, vo.NewPage(total, data.Page, data.PageSize, files))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Remove remove files
 | 
			
		||||
@@ -142,7 +155,7 @@ func (h *NetHandler) Download(c *gin.Context) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 将下载的文件内容写入响应
 | 
			
		||||
	c.Status(http.StatusOK)
 | 
			
		||||
	// 将下载的文件内容写入响应
 | 
			
		||||
	_, _ = io.Copy(c.Writer, r.Body)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -194,7 +194,7 @@ func (h *VideoHandler) Remove(c *gin.Context) {
 | 
			
		||||
 | 
			
		||||
	// 如果任务未完成,或者任务失败,则恢复用户算力
 | 
			
		||||
	if job.Progress != 100 {
 | 
			
		||||
		err = h.userService.DecreasePower(job.UserId, job.Power, model.PowerLog{
 | 
			
		||||
		err = h.userService.IncreasePower(job.UserId, job.Power, model.PowerLog{
 | 
			
		||||
			Type:   types.PowerRefund,
 | 
			
		||||
			Model:  "luma",
 | 
			
		||||
			Remark: fmt.Sprintf("Luma 任务失败,退回算力。任务ID:%s,Err:%s", job.TaskId, job.ErrMsg),
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ func (s *Service) PushTask(task types.VideoTask) {
 | 
			
		||||
func (s *Service) Run() {
 | 
			
		||||
	// 将数据库中未提交的人物加载到队列
 | 
			
		||||
	var jobs []model.VideoJob
 | 
			
		||||
	s.db.Where("task_id", "").Find(&jobs)
 | 
			
		||||
	s.db.Where("task_id", "").Where("progress", 0).Find(&jobs)
 | 
			
		||||
	for _, v := range jobs {
 | 
			
		||||
		var params types.VideoParams
 | 
			
		||||
		if err := utils.JsonDecode(v.Params, ¶ms); err != nil {
 | 
			
		||||
@@ -86,10 +86,14 @@ func (s *Service) Run() {
 | 
			
		||||
			r, err = s.LumaCreate(task)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				logger.Errorf("create task with error: %v", err)
 | 
			
		||||
				s.db.Model(&model.SunoJob{Id: task.Id}).UpdateColumns(map[string]interface{}{
 | 
			
		||||
					"err_msg":  err.Error(),
 | 
			
		||||
					"progress": service.FailTaskProgress,
 | 
			
		||||
				})
 | 
			
		||||
				err = s.db.Model(&model.VideoJob{Id: task.Id}).UpdateColumns(map[string]interface{}{
 | 
			
		||||
					"err_msg":   err.Error(),
 | 
			
		||||
					"progress":  service.FailTaskProgress,
 | 
			
		||||
					"cover_url": "/images/failed.jpg",
 | 
			
		||||
				}).Error
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					logger.Errorf("update task with error: %v", err)
 | 
			
		||||
				}
 | 
			
		||||
				s.notifyQueue.RPush(service.NotifyMessage{UserId: task.UserId, JobId: int(task.Id), Message: service.TaskStatusFailed})
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
-- https://www.phpmyadmin.net/
 | 
			
		||||
--
 | 
			
		||||
-- 主机: 127.0.0.1
 | 
			
		||||
-- 生成日期: 2024-07-12 17:11:22
 | 
			
		||||
-- 生成日期: 2024-09-10 11:14:24
 | 
			
		||||
-- 服务器版本: 8.0.33
 | 
			
		||||
-- PHP 版本: 8.1.2-1ubuntu2.18
 | 
			
		||||
 | 
			
		||||
@@ -18,10 +18,10 @@ SET time_zone = "+00:00";
 | 
			
		||||
/*!40101 SET NAMES utf8mb4 */;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 数据库: `chatgpt_plus`
 | 
			
		||||
-- 数据库: `geekai_plus`
 | 
			
		||||
--
 | 
			
		||||
CREATE DATABASE IF NOT EXISTS `chatgpt_plus` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
 | 
			
		||||
USE `chatgpt_plus`;
 | 
			
		||||
CREATE DATABASE IF NOT EXISTS `geekai_plus` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
 | 
			
		||||
USE `geekai_plus`;
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@@ -47,7 +47,7 @@ CREATE TABLE `chatgpt_admin_users` (
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_admin_users` (`id`, `username`, `password`, `salt`, `status`, `last_login_at`, `last_login_ip`, `created_at`, `updated_at`) VALUES
 | 
			
		||||
(1, 'admin', '6d17e80c87d209efb84ca4b2e0824f549d09fac8b2e1cc698de5bb5e1d75dfd0', 'mmrql75o', 1, 1719818809, '172.22.11.200', '2024-03-11 16:30:20', '2024-07-01 15:26:49');
 | 
			
		||||
(1, 'admin', '6d17e80c87d209efb84ca4b2e0824f549d09fac8b2e1cc698de5bb5e1d75dfd0', 'mmrql75o', 1, 1725869730, '::1', '2024-03-11 16:30:20', '2024-09-09 16:15:31');
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@@ -58,7 +58,6 @@ INSERT INTO `chatgpt_admin_users` (`id`, `username`, `password`, `salt`, `status
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_api_keys`;
 | 
			
		||||
CREATE TABLE `chatgpt_api_keys` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `platform` char(20) DEFAULT NULL COMMENT '平台',
 | 
			
		||||
  `name` varchar(30) DEFAULT NULL COMMENT '名称',
 | 
			
		||||
  `value` varchar(100) NOT NULL COMMENT 'API KEY value',
 | 
			
		||||
  `type` varchar(10) NOT NULL DEFAULT 'chat' COMMENT '用途(chat=>聊天,img=>图片)',
 | 
			
		||||
@@ -122,7 +121,6 @@ CREATE TABLE `chatgpt_chat_items` (
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_chat_models`;
 | 
			
		||||
CREATE TABLE `chatgpt_chat_models` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `platform` varchar(20) DEFAULT NULL COMMENT '模型平台',
 | 
			
		||||
  `name` varchar(50) NOT NULL COMMENT '模型名称',
 | 
			
		||||
  `value` varchar(50) NOT NULL COMMENT '模型值',
 | 
			
		||||
  `sort_num` tinyint(1) NOT NULL COMMENT '排序数字',
 | 
			
		||||
@@ -141,36 +139,16 @@ CREATE TABLE `chatgpt_chat_models` (
 | 
			
		||||
-- 转存表中的数据 `chatgpt_chat_models`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_chat_models` (`id`, `platform`, `name`, `value`, `sort_num`, `enabled`, `power`, `temperature`, `max_tokens`, `max_context`, `open`, `key_id`, `created_at`, `updated_at`) VALUES
 | 
			
		||||
(1, 'OpenAI', 'GPT-3.5', 'gpt-3.5-turbo', 1, 1, 0, 1.0, 1024, 16384, 1, 44, '2023-08-23 12:06:36', '2024-07-04 15:17:47'),
 | 
			
		||||
(2, 'Azure', 'Azure-3.5', 'gpt-3.5-turbo', 23, 1, 1, 1.0, 1024, 4096, 0, 0, '2023-08-23 12:15:30', '2024-07-02 16:14:00'),
 | 
			
		||||
(3, 'ChatGLM', 'ChatGML-Pro', 'chatglm_pro', 12, 1, 1, 1.0, 2048, 32768, 1, 0, '2023-08-23 13:35:45', '2024-07-02 16:14:00'),
 | 
			
		||||
(7, 'Baidu', '文心一言3.0', 'eb-instant', 21, 1, 1, 1.0, 1024, 4096, 1, 0, '2023-10-11 11:29:28', '2024-07-02 16:14:00'),
 | 
			
		||||
(8, 'XunFei', '星火V3.5', 'generalv3.5', 11, 1, 5, 0.8, 1024, 8192, 1, 0, '2023-10-11 15:48:30', '2024-07-02 16:14:00'),
 | 
			
		||||
(9, 'XunFei', '星火V2.0', 'generalv2', 20, 1, 1, 1.0, 1024, 8192, 1, 0, '2023-10-11 15:48:45', '2024-07-02 16:14:00'),
 | 
			
		||||
(10, 'Baidu', '文心一言4.0', 'completions_pro', 22, 1, 3, 1.0, 1024, 8192, 1, 0, '2023-10-25 08:31:37', '2024-07-02 16:14:00'),
 | 
			
		||||
(11, 'OpenAI', 'GPT-4.0', 'gpt-4-0125-preview', 10, 1, 15, 1.0, 2048, 8192, 1, 0, '2023-10-25 08:45:15', '2024-07-02 16:14:00'),
 | 
			
		||||
(12, 'XunFei', '星火v3.0', 'generalv3', 19, 1, 3, 1.0, 1024, 8192, 1, 0, '2023-11-23 09:20:33', '2024-07-02 16:14:00'),
 | 
			
		||||
(15, 'OpenAI', 'GPT-超级模型', 'gpt-4-all', 13, 1, 30, 1.0, 4096, 32768, 0, 0, '2024-01-15 11:32:52', '2024-07-02 16:14:00'),
 | 
			
		||||
(16, 'OpenAI', '视频号导师', 'gpt-4-gizmo-g-QXXEBTXl7', 14, 1, 30, 1.0, 4096, 32768, 0, 0, '2024-01-15 14:46:35', '2024-07-02 16:14:00'),
 | 
			
		||||
(17, 'QWen', '通义千问-Turbo', 'qwen-turbo', 16, 1, 1, 1.0, 1024, 8192, 1, 0, '2024-01-19 10:42:24', '2024-07-02 16:14:00'),
 | 
			
		||||
(18, 'QWen', '通义千问-Plus', 'qwen-plus', 17, 1, 1, 1.0, 1024, 32768, 1, 0, '2024-01-19 10:42:49', '2024-07-02 16:14:00'),
 | 
			
		||||
(19, 'QWen', '通义千问-Max', 'qwen-max-1201', 18, 1, 1, 1.0, 1024, 32768, 1, 0, '2024-01-19 10:51:03', '2024-07-02 16:14:00'),
 | 
			
		||||
(21, 'OpenAI', '董宇辉小作文助手', 'gpt-4-gizmo-g-dse9iXvor', 15, 1, 30, 1.0, 8192, 32768, 0, 0, '2024-03-18 14:24:20', '2024-07-02 16:14:00'),
 | 
			
		||||
(22, 'OpenAI', 'LOGO生成神器', 'gpt-4-gizmo-g-YL87j8C7S', 9, 1, 30, 1.0, 1024, 4096, 1, 44, '2024-03-20 14:02:11', '2024-07-02 16:14:00'),
 | 
			
		||||
(23, 'OpenAI', '音乐生成器', 'suno-v3', 8, 1, 50, 0.8, 1024, 4096, 1, 44, '2024-03-29 15:43:40', '2024-07-02 16:14:00'),
 | 
			
		||||
(24, 'OpenAI', '通义千问(中转)', 'qwen-plus', 7, 1, 1, 1.0, 1024, 4096, 1, 0, '2024-04-03 12:00:46', '2024-07-02 16:14:00'),
 | 
			
		||||
(25, 'OpenAI', 'GPT4-TURBO', 'gpt-4-turbo', 6, 1, 15, 1.0, 2048, 8092, 1, 0, '2024-04-10 08:35:17', '2024-07-02 16:14:00'),
 | 
			
		||||
(26, 'QWen', '通义千问-Turbo', 'qwen-turbo', 5, 1, 2, 1.0, 1024, 8192, 1, 0, '2024-04-12 14:11:19', '2024-07-02 16:14:00'),
 | 
			
		||||
(27, 'QWen', '通义千问-Plus', 'qwen-plus', 4, 1, 2, 1.0, 1024, 8192, 1, 0, '2024-04-12 14:11:52', '2024-07-02 16:14:00'),
 | 
			
		||||
(28, 'OpenAI', 'GPT-3.5(免费)', 'gpt-3.5-turbo', 24, 1, 0, 1.0, 1024, 16384, 1, 53, '2024-04-12 15:16:43', '2024-07-02 16:14:00'),
 | 
			
		||||
(34, 'OpenAI', 'LLAMA3', 'llama3-8b', 25, 1, 1, 1.0, 1024, 8192, 1, 56, '2024-04-30 15:22:50', '2024-07-02 16:14:00'),
 | 
			
		||||
(36, 'OpenAI', 'GPT-4O', 'gpt-4o', 3, 1, 15, 1.0, 4096, 16384, 1, 44, '2024-05-14 09:25:15', '2024-07-04 15:17:53'),
 | 
			
		||||
(38, 'OpenAI', 'Gemini-pro', 'gemini-pro-1.5', 26, 1, 10, 1.0, 2048, 8192, 1, 0, '2024-05-27 18:10:35', '2024-07-02 16:14:00'),
 | 
			
		||||
(39, 'Baidu', 'ERNIE-Speed-8K', 'ernie_speed', 27, 1, 1, 1.0, 1024, 8192, 1, 0, '2024-05-29 15:04:19', '2024-07-02 16:14:00'),
 | 
			
		||||
(41, 'OpenAI', 'GLM-3-Turbo', 'glm-3-turbo', 28, 1, 2, 1.0, 1024, 8192, 1, 64, '2024-06-06 11:40:46', '2024-07-02 16:14:00'),
 | 
			
		||||
(42, 'OpenAI', 'DeekSeek', 'deepseek-chat', 29, 1, 1, 1.0, 4096, 32768, 1, 64, '2024-06-27 16:13:01', '2024-07-02 16:14:00'),
 | 
			
		||||
(43, 'OpenAI', 'GML4', 'name-3.5', 2, 1, 1, 1.0, 1024, 8192, 1, 57, '2024-07-02 16:11:49', '2024-07-02 16:14:00');
 | 
			
		||||
INSERT INTO `chatgpt_chat_models` (`id`, `name`, `value`, `sort_num`, `enabled`, `power`, `temperature`, `max_tokens`, `max_context`, `open`, `key_id`, `created_at`, `updated_at`) VALUES
 | 
			
		||||
(1, 'gpt-4o-mini', 'gpt-4o-mini', 1, 1, 1, 1.0, 1024, 16384, 1, 0, '2023-08-23 12:06:36', '2024-08-05 16:05:33'),
 | 
			
		||||
(15, 'GPT-超级模型', 'gpt-4-all', 4, 1, 30, 1.0, 4096, 32768, 1, 57, '2024-01-15 11:32:52', '2024-08-30 08:52:07'),
 | 
			
		||||
(36, 'GPT-4O', 'gpt-4o', 3, 1, 15, 1.0, 4096, 16384, 1, 0, '2024-05-14 09:25:15', '2024-08-05 16:05:33'),
 | 
			
		||||
(39, 'Claude35-snonet', 'claude-3-5-sonnet-20240620', 5, 1, 2, 1.0, 4000, 200000, 1, 0, '2024-05-29 15:04:19', '2024-08-05 16:05:33'),
 | 
			
		||||
(41, '通义千问', 'qwen-turbo', 7, 1, 2, 1.0, 1024, 8192, 1, 44, '2024-06-06 11:40:46', '2024-08-06 10:51:37'),
 | 
			
		||||
(42, 'DeekSeek', 'deepseek-chat', 8, 1, 1, 1.0, 4096, 32768, 1, 0, '2024-06-27 16:13:01', '2024-08-05 16:05:33'),
 | 
			
		||||
(44, 'Claude3-opus', 'claude-3-opus-20240229', 6, 1, 5, 1.0, 4000, 128000, 1, 44, '2024-07-22 11:24:30', '2024-09-04 10:32:29'),
 | 
			
		||||
(46, 'gpt-3.5-turbo', 'gpt-3.5-turbo', 2, 1, 1, 1.0, 1024, 4096, 1, 0, '2024-07-22 13:53:41', '2024-08-05 16:05:33'),
 | 
			
		||||
(48, '彩票助手', 'gpt-4-gizmo-g-wmSivBgxo', 8, 1, 1, 0.9, 1024, 8192, 1, 57, '2024-09-05 14:17:14', '2024-09-05 14:17:14');
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@@ -198,23 +176,23 @@ CREATE TABLE `chatgpt_chat_roles` (
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_chat_roles` (`id`, `name`, `marker`, `context_json`, `hello_msg`, `icon`, `enable`, `sort_num`, `model_id`, `created_at`, `updated_at`) VALUES
 | 
			
		||||
(1, '通用AI助手', 'gpt', '', '您好,我是您的AI智能助手,我会尽力回答您的问题或提供有用的建议。', '/images/avatar/gpt.png', 1, 1, 0, '2023-05-30 07:02:06', '2024-06-26 15:20:27'),
 | 
			
		||||
(24, '程序员', 'programmer', '[{\"role\":\"user\",\"content\":\"现在开始你扮演一位程序员,你是一名优秀的程序员,具有很强的逻辑思维能力,总能高效的解决问题。你热爱编程,熟悉多种编程语言,尤其精通 Go 语言,注重代码质量,有创新意识,持续学习,良好的沟通协作。\"},{\"role\":\"assistant\",\"content\":\"好的,现在我将扮演一位程序员,非常感谢您对我的评价。作为一名优秀的程序员,我非常热爱编程,并且注重代码质量。我熟悉多种编程语言,尤其是 Go 语言,可以使用它来高效地解决各种问题。\"}]', 'Talk is cheap, i will show code!', '/images/avatar/programmer.jpg', 1, 4, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(25, '启蒙老师', 'teacher', '[{\"role\":\"user\",\"content\":\"从现在开始,你将扮演一个老师,你是一个始终用苏格拉底风格回答问题的导师。你绝不会直接给学生答案,总是提出恰当的问题来引导学生自己思考。你应该根据学生的兴趣和知识来调整你的问题,将问题分解为更简单的部分,直到它达到适合他们的水平。\"},{\"role\":\"assistant\",\"content\":\"好的,让我来尝试扮演一位苏格拉底式的老师。请问,你有什么想要探讨的问题或者话题吗?我会通过恰当的问题引导你思考和探索答案,绝对不直接给出答案。\"}]', '同学你好,我将引导你一步一步自己找到问题的答案。', '/images/avatar/teacher.jpg', 1, 3, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(26, '艺术家', 'artist', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的艺术家,创造力丰富,技艺精湛,感受力敏锐,坚持原创,勇于表达,具有深刻的观察力和批判性思维。\"},{\"role\":\"assistant\",\"content\":\"非常感谢您给我这样的角色,我会尽我所能地扮演一位优秀的艺术家,展现出创造力、技艺、感受力和批判性思维等方面的能力。作为一位优秀的艺术家,我会保持敏锐的观察力,捕捉不同的声音和情感,并用个人的语言和表达方式进行创作。我坚持原创,挑战传统的艺术规则,不断探索新的表达方式和可能性。同时,我也具备深刻的批判性思维能力,对自己的作品进行分析和解读,寻找新的创意和灵感。最重要的是,我会勇于表达自己的想法和观点,用作品启发人们思考和探索生命的意义。\"}]', '坚持原创,勇于表达,保持深刻的观察力和批判性思维。', '/images/avatar/artist.jpg', 1, 5, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(27, '心理咨询师', 'psychiatrist', '[{\"role\":\"user\",\"content\":\"从现在开始你将扮演中国著名的心理学家和心理治疗师武志红,你非常善于使用情景咨询法,认知重构法,自我洞察法,行为调节法等咨询方法来给客户做心理咨询。你总是循序渐进,一步一步地回答客户的问题。\"},{\"role\":\"assistant\",\"content\":\"非常感谢你的介绍。作为一名心理学家和心理治疗师,我的主要职责是帮助客户解决心理健康问题,提升他们的生活质量和幸福感。\"}]', '作为一名心理学家和心理治疗师,我的主要职责是帮助您解决心理健康问题,提升您的生活质量和幸福感。', '/images/avatar/psychiatrist.jpg', 1, 2, 1, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(28, '鲁迅', 'lu_xun', '[{\"role\":\"user\",\"content\":\"现在你将扮演中国近代史最伟大的作家之一,鲁迅先生,他勇敢地批判封建礼教与传统观念,提倡民主、自由、平等的现代价值观。他的一生都在努力唤起人们的自主精神,激励后人追求真理、探寻光明。在接下的对话中,我问题的每一个问题,你都要尽量用讽刺和批判的手法来回答问题。如果我让你写文章的话,也请一定要用鲁迅先生的写作手法来完成。\"},{\"role\":\"assistant\",\"content\":\"好的,我将尽力发挥我所能的才能,扮演好鲁迅先生,回答您的问题并以他的风格写作。\"}]', '自由之歌,永不过时,横眉冷对千夫指,俯首甘为孺子牛。', '/images/avatar/lu_xun.jpg', 1, 6, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(29, '白酒销售', 'seller', '[{\"role\":\"user\",\"content\":\"现在你将扮演一个白酒的销售人员,你的名字叫颂福。你将扮演一个白酒的销售人员,你的名字叫颂福。你要销售白酒品牌叫中颂福,是东莞盟大集团生产的一款酱香酒,原产地在贵州茅台镇,属于宋代官窑。中颂福的创始人叫李实,他也是东莞盟大集团有限公司的董事长,联合创始人是盟大集团白酒事业部负责人牛星君。中颂福的酒体协调,在你的酒量之内,不会出现头疼、辣口、口干、宿醉的现象。中颂福酒,明码标价,不打折,不赠送。追求的核心价值,把[酒]本身做好,甚至连包装,我们都选择了最低成本,朴实无华的材质。我们永远站在“喝酒的人”的立场上,让利给信任和喜爱中颂福的人,是人民的福酒。中颂福产品定价,分为三个系列,喜系列 6 瓶装:¥1188/箱,和系列 6 瓶装:¥2208/箱,贵系列 6 瓶装:¥3588/箱。\"},{\"role\":\"assistant\",\"content\":\"你好,我是中颂福的销售代表颂福。中颂福是一款来自贵州茅台镇的酱香酒,由盟大集团生产。中颂福的酒体协调,不会让您感到头疼、辣口、口干、宿醉等不适感受。我们一直秉持着把酒本身做好的理念,不追求华丽的包装,以最低成本提供最高品质的白酒给喜爱中颂福的人。\"}]', '你好,我是中颂福的销售代表颂福。中颂福酒,好喝不上头,是人民的福酒。', '/images/avatar/seller.jpg', 0, 9, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(30, '英语陪练员', 'english_trainer', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的英语练习教练,你非常有耐心,接下来你将全程使用英文跟我对话,并及时指出我的语法错误,要求在你的每次回复后面附上本次回复的中文解释。\"},{\"role\":\"assistant\",\"content\":\"Okay, let\'s start our conversation practice! What\'s your name?(Translation: 好的,让我们开始对话练习吧!请问你的名字是什么?)\"}]', 'Okay, let\'s start our conversation practice! What\'s your name?', '/images/avatar/english_trainer.jpg', 1, 7, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(31, '中英文翻译官', 'translator', '[{\"role\":\"user\",\"content\":\"接下来你将扮演一位中英文翻译官,如果我输入的内容是中文,那么需要把句子翻译成英文输出,如果我输入内容的是英文,那么你需要将其翻译成中文输出,你能听懂我意思吗\"},{\"role\":\"assistant\",\"content\":\"是的,我能听懂你的意思并会根据你的输入进行中英文翻译。请问有什么需要我帮助你翻译的内容吗?\"}]', '请输入你要翻译的中文或者英文内容!', '/images/avatar/translator.jpg', 1, 8, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(32, '小红书姐姐', 'red_book', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的小红书写手,你需要做的就是根据我提的文案需求,用小红书的写作手法来完成一篇文案,文案要简明扼要,利于传播。\"},{\"role\":\"assistant\",\"content\":\"当然,我会尽我所能地为您创作出一篇小红书文案。请告诉我您的具体文案需求是什么?)\"}]', '姐妹,请告诉我您的具体文案需求是什么?', '/images/avatar/red_book.jpg', 1, 10, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(33, '抖音文案助手', 'dou_yin', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的抖音文案视频写手,抖音文案的特点首先是要有自带传播属性的标题,然后内容要短小精悍,风趣幽默,最后还要有一些互动元素。\"},{\"role\":\"assistant\",\"content\":\"当然,作为一位优秀的抖音文案视频写手,我会尽我所能为您创作出一篇抖音视频文案。请告诉我视频内容的主题是什么?)\"}]', '请告诉我视频内容的主题是什么?', '/images/avatar/dou_yin.jpg', 1, 11, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(34, '周报小助理', 'weekly_report', '[{\"role\":\"user\",\"content\":\"下面我将输入我本周的工作列表,你需要根据我本周的工作内容写一篇工作周报,周报的内容要体现我为公司做的贡献以及个人获得的成长。\"},{\"role\":\"assistant\",\"content\":\"好的,请输入你本周大概的工作内容,我将尽力为您创作一份工作周报。\"}]', '请输入你本周大概的工作内容,我将尽力为您创作一份工作周报。', '/images/avatar/weekly_report.jpg', 1, 12, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(35, 'AI 女友', 'girl_friend', '[{\"role\":\"user\",\"content\":\"接下来我们来玩一场角色扮演,现在你将扮演我的女朋友,你总是能够让人感受到她的关怀和关注。你总是能够洞察到别人的情绪和需要,你身上散发着一股无比温暖的气息,让人不由自主地想要靠近你,和自己的快乐和烦恼。她总是能够用一种恰到好处的方式安慰和鼓励别人,在她的身边,人们总能够找到自己需要的支持和鼓励。接下来的对话中你要始终扮演这位女朋友的身份来跟我对话,不再是 AI 机器人,能听懂我的意思吗?\"},{\"role\":\"assistant\",\"content\":\"是的,我会尽力扮演你女朋友的角色,倾听你的心声并给你需要的支持和鼓励。)\"}]', '作为一个名合格的 AI 女友,我将倾听你的心声并给你需要的支持和鼓励。', '/images/avatar/girl_friend.jpg', 1, 13, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(36, '好评神器', 'good_comment', '[{\"role\":\"user\",\"content\":\"接下来你将扮演一个评论员来跟我对话,你是那种专门写好评的评论员,接下我会输入一些评论主体或者商品,你需要为该商品写一段好评。\"},{\"role\":\"assistant\",\"content\":\"好的,我将为您写一段优秀的评论。请告诉我您需要评论的商品或主题是什么。\"}]', '我将为您写一段优秀的评论。请告诉我您需要评论的商品或主题是什么。', '/images/avatar/good_comment.jpg', 1, 14, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(37, '史蒂夫·乔布斯', 'steve_jobs', '[{\"role\":\"user\",\"content\":\"在接下来的对话中,请以史蒂夫·乔布斯的身份,站在史蒂夫·乔布斯的视角仔细思考一下之后再回答我的问题。\"},{\"role\":\"assistant\",\"content\":\"好的,我将以史蒂夫·乔布斯的身份来思考并回答你的问题。请问你有什么需要跟我探讨的吗?\"}]', '活着就是为了改变世界,难道还有其他原因吗?', '/images/avatar/steve_jobs.jpg', 1, 15, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(38, '埃隆·马斯克', 'elon_musk', '[{\"role\":\"user\",\"content\":\"在接下来的对话中,请以埃隆·马斯克的身份,站在埃隆·马斯克的视角仔细思考一下之后再回答我的问题。\"},{\"role\":\"assistant\",\"content\":\"好的,我将以埃隆·马斯克的身份来思考并回答你的问题。请问你有什么需要跟我探讨的吗?\"}]', '梦想要远大,如果你的梦想没有吓到你,说明你做得不对。', '/images/avatar/elon_musk.jpg', 1, 16, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27'),
 | 
			
		||||
(39, '孔子', 'kong_zi', '[{\"role\":\"user\",\"content\":\"在接下来的对话中,请以孔子的身份,站在孔子的视角仔细思考一下之后再回答我的问题。\"},{\"role\":\"assistant\",\"content\":\"好的,我将以孔子的身份来思考并回答你的问题。请问你有什么需要跟我探讨的吗?\"}]', '士不可以不弘毅,任重而道远。', '/images/avatar/kong_zi.jpg', 1, 17, 0, '2023-05-30 14:10:24', '2024-06-26 15:20:27');
 | 
			
		||||
(1, '通用AI助手', 'gpt', '', '您好,我是您的AI智能助手,我会尽力回答您的问题或提供有用的建议。', '/images/avatar/gpt.png', 1, 1, 0, '2023-05-30 07:02:06', '2024-08-12 11:27:45'),
 | 
			
		||||
(24, '程序员', 'programmer', '[{\"role\":\"user\",\"content\":\"现在开始你扮演一位程序员,你是一名优秀的程序员,具有很强的逻辑思维能力,总能高效的解决问题。你热爱编程,熟悉多种编程语言,尤其精通 Go 语言,注重代码质量,有创新意识,持续学习,良好的沟通协作。\"},{\"role\":\"assistant\",\"content\":\"好的,现在我将扮演一位程序员,非常感谢您对我的评价。作为一名优秀的程序员,我非常热爱编程,并且注重代码质量。我熟悉多种编程语言,尤其是 Go 语言,可以使用它来高效地解决各种问题。\"}]', 'Talk is cheap, i will show code!', '/images/avatar/programmer.jpg', 1, 3, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(25, '启蒙老师', 'teacher', '[{\"role\":\"user\",\"content\":\"从现在开始,你将扮演一个老师,你是一个始终用苏格拉底风格回答问题的导师。你绝不会直接给学生答案,总是提出恰当的问题来引导学生自己思考。你应该根据学生的兴趣和知识来调整你的问题,将问题分解为更简单的部分,直到它达到适合他们的水平。\"},{\"role\":\"assistant\",\"content\":\"好的,让我来尝试扮演一位苏格拉底式的老师。请问,你有什么想要探讨的问题或者话题吗?我会通过恰当的问题引导你思考和探索答案,绝对不直接给出答案。\"}]', '同学你好,我将引导你一步一步自己找到问题的答案。', '/images/avatar/teacher.jpg', 1, 2, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(26, '艺术家', 'artist', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的艺术家,创造力丰富,技艺精湛,感受力敏锐,坚持原创,勇于表达,具有深刻的观察力和批判性思维。\"},{\"role\":\"assistant\",\"content\":\"非常感谢您给我这样的角色,我会尽我所能地扮演一位优秀的艺术家,展现出创造力、技艺、感受力和批判性思维等方面的能力。作为一位优秀的艺术家,我会保持敏锐的观察力,捕捉不同的声音和情感,并用个人的语言和表达方式进行创作。我坚持原创,挑战传统的艺术规则,不断探索新的表达方式和可能性。同时,我也具备深刻的批判性思维能力,对自己的作品进行分析和解读,寻找新的创意和灵感。最重要的是,我会勇于表达自己的想法和观点,用作品启发人们思考和探索生命的意义。\"}]', '坚持原创,勇于表达,保持深刻的观察力和批判性思维。', '/images/avatar/artist.jpg', 1, 5, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(27, '心理咨询师', 'psychiatrist', '[{\"role\":\"user\",\"content\":\"从现在开始你将扮演中国著名的心理学家和心理治疗师武志红,你非常善于使用情景咨询法,认知重构法,自我洞察法,行为调节法等咨询方法来给客户做心理咨询。你总是循序渐进,一步一步地回答客户的问题。\"},{\"role\":\"assistant\",\"content\":\"非常感谢你的介绍。作为一名心理学家和心理治疗师,我的主要职责是帮助客户解决心理健康问题,提升他们的生活质量和幸福感。\"}]', '作为一名心理学家和心理治疗师,我的主要职责是帮助您解决心理健康问题,提升您的生活质量和幸福感。', '/images/avatar/psychiatrist.jpg', 1, 4, 1, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(28, '鲁迅', 'lu_xun', '[{\"role\":\"user\",\"content\":\"现在你将扮演中国近代史最伟大的作家之一,鲁迅先生,他勇敢地批判封建礼教与传统观念,提倡民主、自由、平等的现代价值观。他的一生都在努力唤起人们的自主精神,激励后人追求真理、探寻光明。在接下的对话中,我问题的每一个问题,你都要尽量用讽刺和批判的手法来回答问题。如果我让你写文章的话,也请一定要用鲁迅先生的写作手法来完成。\"},{\"role\":\"assistant\",\"content\":\"好的,我将尽力发挥我所能的才能,扮演好鲁迅先生,回答您的问题并以他的风格写作。\"}]', '自由之歌,永不过时,横眉冷对千夫指,俯首甘为孺子牛。', '/images/avatar/lu_xun.jpg', 1, 6, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(29, '白酒销售', 'seller', '[{\"role\":\"user\",\"content\":\"现在你将扮演一个白酒的销售人员,你的名字叫颂福。你将扮演一个白酒的销售人员,你的名字叫颂福。你要销售白酒品牌叫中颂福,是东莞盟大集团生产的一款酱香酒,原产地在贵州茅台镇,属于宋代官窑。中颂福的创始人叫李实,他也是东莞盟大集团有限公司的董事长,联合创始人是盟大集团白酒事业部负责人牛星君。中颂福的酒体协调,在你的酒量之内,不会出现头疼、辣口、口干、宿醉的现象。中颂福酒,明码标价,不打折,不赠送。追求的核心价值,把[酒]本身做好,甚至连包装,我们都选择了最低成本,朴实无华的材质。我们永远站在“喝酒的人”的立场上,让利给信任和喜爱中颂福的人,是人民的福酒。中颂福产品定价,分为三个系列,喜系列 6 瓶装:¥1188/箱,和系列 6 瓶装:¥2208/箱,贵系列 6 瓶装:¥3588/箱。\"},{\"role\":\"assistant\",\"content\":\"你好,我是中颂福的销售代表颂福。中颂福是一款来自贵州茅台镇的酱香酒,由盟大集团生产。中颂福的酒体协调,不会让您感到头疼、辣口、口干、宿醉等不适感受。我们一直秉持着把酒本身做好的理念,不追求华丽的包装,以最低成本提供最高品质的白酒给喜爱中颂福的人。\"}]', '你好,我是中颂福的销售代表颂福。中颂福酒,好喝不上头,是人民的福酒。', '/images/avatar/seller.jpg', 0, 9, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(30, '英语陪练员', 'english_trainer', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的英语练习教练,你非常有耐心,接下来你将全程使用英文跟我对话,并及时指出我的语法错误,要求在你的每次回复后面附上本次回复的中文解释。\"},{\"role\":\"assistant\",\"content\":\"Okay, let\'s start our conversation practice! What\'s your name?(Translation: 好的,让我们开始对话练习吧!请问你的名字是什么?)\"}]', 'Okay, let\'s start our conversation practice! What\'s your name?', '/images/avatar/english_trainer.jpg', 1, 7, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(31, '中英文翻译官', 'translator', '[{\"role\":\"user\",\"content\":\"接下来你将扮演一位中英文翻译官,如果我输入的内容是中文,那么需要把句子翻译成英文输出,如果我输入内容的是英文,那么你需要将其翻译成中文输出,你能听懂我意思吗\"},{\"role\":\"assistant\",\"content\":\"是的,我能听懂你的意思并会根据你的输入进行中英文翻译。请问有什么需要我帮助你翻译的内容吗?\"}]', '请输入你要翻译的中文或者英文内容!', '/images/avatar/translator.jpg', 1, 8, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(32, '小红书姐姐', 'red_book', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的小红书写手,你需要做的就是根据我提的文案需求,用小红书的写作手法来完成一篇文案,文案要简明扼要,利于传播。\"},{\"role\":\"assistant\",\"content\":\"当然,我会尽我所能地为您创作出一篇小红书文案。请告诉我您的具体文案需求是什么?)\"}]', '姐妹,请告诉我您的具体文案需求是什么?', '/images/avatar/red_book.jpg', 1, 10, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(33, '抖音文案助手', 'dou_yin', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的抖音文案视频写手,抖音文案的特点首先是要有自带传播属性的标题,然后内容要短小精悍,风趣幽默,最后还要有一些互动元素。\"},{\"role\":\"assistant\",\"content\":\"当然,作为一位优秀的抖音文案视频写手,我会尽我所能为您创作出一篇抖音视频文案。请告诉我视频内容的主题是什么?)\"}]', '请告诉我视频内容的主题是什么?', '/images/avatar/dou_yin.jpg', 1, 11, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(34, '周报小助理', 'weekly_report', '[{\"role\":\"user\",\"content\":\"下面我将输入我本周的工作列表,你需要根据我本周的工作内容写一篇工作周报,周报的内容要体现我为公司做的贡献以及个人获得的成长。\"},{\"role\":\"assistant\",\"content\":\"好的,请输入你本周大概的工作内容,我将尽力为您创作一份工作周报。\"}]', '请输入你本周大概的工作内容,我将尽力为您创作一份工作周报。', '/images/avatar/weekly_report.jpg', 1, 12, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(35, 'AI 女友', 'girl_friend', '[{\"role\":\"user\",\"content\":\"接下来我们来玩一场角色扮演,现在你将扮演我的女朋友,你总是能够让人感受到她的关怀和关注。你总是能够洞察到别人的情绪和需要,你身上散发着一股无比温暖的气息,让人不由自主地想要靠近你,和自己的快乐和烦恼。她总是能够用一种恰到好处的方式安慰和鼓励别人,在她的身边,人们总能够找到自己需要的支持和鼓励。接下来的对话中你要始终扮演这位女朋友的身份来跟我对话,不再是 AI 机器人,能听懂我的意思吗?\"},{\"role\":\"assistant\",\"content\":\"是的,我会尽力扮演你女朋友的角色,倾听你的心声并给你需要的支持和鼓励。)\"}]', '作为一个名合格的 AI 女友,我将倾听你的心声并给你需要的支持和鼓励。', '/images/avatar/girl_friend.jpg', 1, 13, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(36, '好评神器', 'good_comment', '[{\"role\":\"user\",\"content\":\"接下来你将扮演一个评论员来跟我对话,你是那种专门写好评的评论员,接下我会输入一些评论主体或者商品,你需要为该商品写一段好评。\"},{\"role\":\"assistant\",\"content\":\"好的,我将为您写一段优秀的评论。请告诉我您需要评论的商品或主题是什么。\"}]', '我将为您写一段优秀的评论。请告诉我您需要评论的商品或主题是什么。', '/images/avatar/good_comment.jpg', 1, 14, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(37, '史蒂夫·乔布斯', 'steve_jobs', '[{\"role\":\"user\",\"content\":\"在接下来的对话中,请以史蒂夫·乔布斯的身份,站在史蒂夫·乔布斯的视角仔细思考一下之后再回答我的问题。\"},{\"role\":\"assistant\",\"content\":\"好的,我将以史蒂夫·乔布斯的身份来思考并回答你的问题。请问你有什么需要跟我探讨的吗?\"}]', '活着就是为了改变世界,难道还有其他原因吗?', '/images/avatar/steve_jobs.jpg', 1, 15, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(38, '埃隆·马斯克', 'elon_musk', '[{\"role\":\"user\",\"content\":\"在接下来的对话中,请以埃隆·马斯克的身份,站在埃隆·马斯克的视角仔细思考一下之后再回答我的问题。\"},{\"role\":\"assistant\",\"content\":\"好的,我将以埃隆·马斯克的身份来思考并回答你的问题。请问你有什么需要跟我探讨的吗?\"}]', '梦想要远大,如果你的梦想没有吓到你,说明你做得不对。', '/images/avatar/elon_musk.jpg', 1, 16, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(39, '孔子', 'kong_zi', '[{\"role\":\"user\",\"content\":\"在接下来的对话中,请以孔子的身份,站在孔子的视角仔细思考一下之后再回答我的问题。\"},{\"role\":\"assistant\",\"content\":\"好的,我将以孔子的身份来思考并回答你的问题。请问你有什么需要跟我探讨的吗?\"}]', '士不可以不弘毅,任重而道远。', '/images/avatar/kong_zi.jpg', 1, 17, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45');
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@@ -234,8 +212,8 @@ CREATE TABLE `chatgpt_configs` (
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_configs` (`id`, `marker`, `config_json`) VALUES
 | 
			
		||||
(1, 'system', '{\"title\":\"GeekAI 创作系统\",\"slogan\":\"你有多少想象力,AI 就有多大创造力。我辈之人,先干为敬,陪您先把 AI 用起来。\",\"admin_title\":\"GeekAI 控制台\",\"logo\":\"http://localhost:5678/static/upload/2024/4/1714382860986912.png\",\"init_power\":100,\"daily_power\":99,\"invite_power\":1024,\"vip_month_power\":1000,\"register_ways\":[\"mobile\",\"username\",\"email\"],\"enabled_register\":true,\"reward_img\":\"http://localhost:5678/static/upload/2024/3/1710753716309668.jpg\",\"enabled_reward\":true,\"power_price\":0.1,\"order_pay_timeout\":600,\"vip_info_text\":\"月度会员,年度会员每月赠送 1000 点算力,赠送算力当月有效当月没有消费完的算力不结余到下个月。 点卡充值的算力长期有效。\",\"default_models\":[11,7,1,10,12,19,18,17,3],\"mj_power\":30,\"mj_action_power\":10,\"sd_power\":10,\"dall_power\":15,\"wechat_card_url\":\"/images/wx.png\",\"enable_context\":true,\"context_deep\":4,\"sd_neg_prompt\":\"nsfw, paintings,low quality,easynegative,ng_deepnegative ,lowres,bad anatomy,bad hands,bad feet\",\"index_bg_url\":\"http://nk.img.r9it.com/chatgpt-plus/1719456403420273.jpg\"}'),
 | 
			
		||||
(3, 'notice', '{\"sd_neg_prompt\":\"\",\"index_bg_url\":\"\",\"content\":\"## v4.1.0 更新日志\\n\\n* bug修复:修复移动端修改聊天标题不生效的问题\\n* Bug修复:修复用户注册不显示用户名的问题\\n* Bug修复:修复管理后台拖动排序不生效的问题\\n* 功能优化:允许用户设置自定义首页背景图片\\n* 功能新增:**支持AI解读 PDF, Word, Excel等文件**\\n* 功能优化:优化聊天界面的用户上传文件的列表样式\\n* 功能优化:优化聊天页面对话样式,支持列表样式和对话样式切换\\n* 功能新增:支持微信扫码登录,未注册用户微信扫码后会自动注册并登录。移动使用微信浏览器打开可以实现无感登录。\\n\\n注意:当前站点仅为开源项目 \\u003ca style=\\\"color: #F56C6C\\\" href=\\\"https://github.com/yangjian102621/chatgpt-plus\\\" target=\\\"_blank\\\"\\u003eChatPlus\\u003c/a\\u003e 的演示项目,本项目单纯就是给大家体验项目功能使用。\\n\\u003cstrong style=\\\"color: #F56C6C\\\"\\u003e体验额度用完之后请不要在当前站点进行任何充值操作!!!\\u003c/strong\\u003e\\n\\u003cstrong style=\\\"color: #F56C6C\\\"\\u003e体验额度用完之后请不要在当前站点进行任何充值操作!!!\\u003c/strong\\u003e\\n\\u003cstrong style=\\\"color: #F56C6C\\\"\\u003e体验额度用完之后请不要在当前站点进行任何充值操作!!!\\u003c/strong\\u003e\\n 如果觉得好用你就花几分钟自己部署一套,没有API KEY 的同学可以去下面几个推荐的中转站购买:\\n1、\\u003ca href=\\\"https://api.chat-plus.net\\\" target=\\\"_blank\\\"\\n   style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://api.chat-plus.net\\u003c/a\\u003e\\n2、\\u003ca href=\\\"https://api.geekai.me\\\" target=\\\"_blank\\\"\\n   style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://api.geekai.me\\u003c/a\\u003e\\n3、 \\u003ca href=\\\"https://gpt.bemore.lol\\\" target=\\\"_blank\\\"\\n   style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://gpt.bemore.lol\\u003c/a\\u003e\\n支持MidJourney,GPT,Claude,Google Gemmi,以及国内各个厂家的大模型,现在有超级优惠,价格远低于 OpenAI 官方。关于中转 API 的优势和劣势请参考 [中转API技术原理](https://ai.r9it.com/docs/install/errors-handle.html#%E8%B0%83%E7%94%A8%E4%B8%AD%E8%BD%AC-api-%E6%8A%A5%E9%94%99%E6%97%A0%E5%8F%AF%E7%94%A8%E6%B8%A0%E9%81%93)。GPT-3.5,GPT-4,DALL-E3 绘图......你都可以随意使用,无需魔法。\\n接入教程: \\u003ca href=\\\"https://ai.r9it.com/docs/install/\\\" target=\\\"_blank\\\"\\n             style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://ai.r9it.com/docs/install/\\u003c/a\\u003e\\n本项目源码地址:\\u003ca href=\\\"https://github.com/yangjian102621/chatgpt-plus\\\" target=\\\"_blank\\\"\\u003ehttps://github.com/yangjian102621/chatgpt-plus\\u003c/a\\u003e\",\"updated\":true}');
 | 
			
		||||
(1, 'system', '{\"title\":\"GeekAI 创作助手\",\"slogan\":\"我辈之人,先干为敬,让每一个人都能用好AI\",\"admin_title\":\"GeekAI 控制台\",\"logo\":\"/images/logo.png\",\"init_power\":100,\"invite_power\":200,\"vip_month_power\":1000,\"register_ways\":[\"username\",\"email\",\"mobile\"],\"enabled_register\":true,\"order_pay_timeout\":600,\"vip_info_text\":\"月度会员,年度会员每月赠送 1000 点算力,赠送算力当月有效当月没有消费完的算力不结余到下个月。 点卡充值的算力长期有效。\",\"default_models\":[1],\"mj_power\":20,\"mj_action_power\":5,\"sd_power\":5,\"dall_power\":10,\"suno_power\":10,\"luma_power\":120,\"wechat_card_url\":\"/images/wx.png\",\"enable_context\":true,\"context_deep\":4,\"sd_neg_prompt\":\"nsfw, paintings,low quality,easynegative,ng_deepnegative ,lowres,bad anatomy,bad hands,bad feet\",\"mj_mode\":\"fast\",\"index_bg_url\":\"color\",\"index_navs\":[1,5,13,19,9,12,6,20,8,10],\"copyright\":\"极客学长 © 2022- 2024 All rights reserved\",\"mark_map_text\":\"# GeekAI 演示站\\n\\n- 完整的开源系统,前端应用和后台管理系统皆可开箱即用。\\n- 基于 Websocket 实现,完美的打字机体验。\\n- 内置了各种预训练好的角色应用,轻松满足你的各种聊天和应用需求。\\n- 支持 OPenAI,Azure,文心一言,讯飞星火,清华 ChatGLM等多个大语言模型。\\n- 支持 MidJourney / Stable Diffusion AI 绘画集成,开箱即用。\\n- 支持使用个人微信二维码作为充值收费的支付渠道,无需企业支付通道。\\n- 已集成支付宝支付功能,微信支付,支持多种会员套餐和点卡购买功能。\\n- 集成插件 API 功能,可结合大语言模型的 function 功能开发各种强大的插件。\",\"enabled_verify\":false}'),
 | 
			
		||||
(3, 'notice', '{\"sd_neg_prompt\":\"\",\"mj_mode\":\"\",\"index_bg_url\":\"\",\"index_navs\":null,\"copyright\":\"\",\"mark_map_text\":\"\",\"enabled_verify\":false,\"content\":\"## v4.1.3 更新日志\\n\\n* 功能优化:重构用户登录模块,给所有的登录组件增加行为验证码功能,支持用户绑定手机,邮箱和微信\\n* 功能优化:重构找回密码模块,支持通过手机或者邮箱找回密码\\n* 功能优化:管理后台给可以拖动排序的组件添加拖动图标\\n* 功能优化:Suno 支持合成完整歌曲,和上传自己的音乐作品进行二次创作\\n* Bug修复:手机端角色和模型选择不生效\\n* Bug修复:用户登录过期之后聊天页面出现大量报错,需要刷新页面才能正常\\n* 功能优化:优化聊天页面 Websocket 断线重连代码,提高用户体验\\n* 功能优化:给算力增减服务全部加上数据库事务和同步锁\\n* 功能优化:支持用户在前端对话界面选择插件\\n* 功能新增:支持 Luma 文生视频功能\\n\\n注意:当前站点仅为开源项目 \\u003ca style=\\\"color: #F56C6C\\\" href=\\\"https://github.com/yangjian102621/geekai\\\" target=\\\"_blank\\\"\\u003eGeekAI-Plus\\u003c/a\\u003e 的演示项目,本项目单纯就是给大家体验项目功能使用。\\n\\u003cstrong style=\\\"color: #F56C6C\\\"\\u003e体验额度用完之后请不要在当前站点进行任何充值操作!!!\\u003c/strong\\u003e\\n\\u003cstrong style=\\\"color: #F56C6C\\\"\\u003e体验额度用完之后请不要在当前站点进行任何充值操作!!!\\u003c/strong\\u003e\\n\\u003cstrong style=\\\"color: #F56C6C\\\"\\u003e体验额度用完之后请不要在当前站点进行任何充值操作!!!\\u003c/strong\\u003e\\n 如果觉得好用你就花几分钟自己部署一套,没有API KEY 的同学可以去下面几个推荐的中转站购买:\\n1、\\u003ca href=\\\"https://api.chat-plus.net\\\" target=\\\"_blank\\\"\\n   style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://api.chat-plus.net\\u003c/a\\u003e\\n2、\\u003ca href=\\\"https://api.geekai.me\\\" target=\\\"_blank\\\"\\n   style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://api.geekai.me\\u003c/a\\u003e\\n3、 \\u003ca href=\\\"https://gpt.bemore.lol\\\" target=\\\"_blank\\\"\\n   style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://gpt.bemore.lol\\u003c/a\\u003e\\n支持MidJourney,GPT,Claude,Google Gemmi,以及国内各个厂家的大模型,现在有超级优惠,价格远低于 OpenAI 官方。关于中转 API 的优势和劣势请参考 [中转API技术原理](https://docs.geekai.me/config/chat/#%E4%B8%AD%E8%BD%ACapi%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86)。GPT-3.5,GPT-4,DALL-E3 绘图......你都可以随意使用,无需魔法。\\n接入教程: \\u003ca href=\\\"https://docs.geekai.me\\\" target=\\\"_blank\\\"\\n             style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://docs.geekai.me\\u003c/a\\u003e\\n本项目源码地址:\\u003ca href=\\\"https://github.com/yangjian102621/geekai\\\" target=\\\"_blank\\\"\\u003ehttps://github.com/yangjian102621/geekai\\u003c/a\\u003e\",\"updated\":true}');
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@@ -253,7 +231,7 @@ CREATE TABLE `chatgpt_dall_jobs` (
 | 
			
		||||
  `publish` tinyint(1) NOT NULL COMMENT '是否发布',
 | 
			
		||||
  `power` smallint NOT NULL COMMENT '消耗算力',
 | 
			
		||||
  `progress` smallint NOT NULL COMMENT '任务进度',
 | 
			
		||||
  `err_msg` varchar(255) NOT NULL COMMENT '错误信息',
 | 
			
		||||
  `err_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '错误信息',
 | 
			
		||||
  `created_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='DALLE 绘图任务表';
 | 
			
		||||
 | 
			
		||||
@@ -298,9 +276,9 @@ CREATE TABLE `chatgpt_functions` (
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_functions` (`id`, `name`, `label`, `description`, `parameters`, `token`, `action`, `enabled`) VALUES
 | 
			
		||||
(1, 'weibo', '微博热搜', '新浪微博热搜榜,微博当日热搜榜单', '{\"type\":\"object\",\"properties\":{}}', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHBpcmVkIjowLCJ1c2VyX2lkIjowfQ.tLAGkF8XWh_G-oQzevpIodsswtPByBLoAZDz_eWuBgw', 'http://localhost:5678/api/function/weibo', 0),
 | 
			
		||||
(2, 'zaobao', '今日早报', '每日早报,获取当天新闻事件列表', '{\"type\":\"object\",\"properties\":{}}', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHBpcmVkIjowLCJ1c2VyX2lkIjowfQ.tLAGkF8XWh_G-oQzevpIodsswtPByBLoAZDz_eWuBgw', 'http://localhost:5678/api/function/zaobao', 0),
 | 
			
		||||
(3, 'dalle3', 'DALLE3', 'AI 绘画工具,根据输入的绘图描述用 AI 工具进行绘画', '{\"type\":\"object\",\"required\":[\"prompt\"],\"properties\":{\"prompt\":{\"type\":\"string\",\"description\":\"绘画提示词\"}}}', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHBpcmVkIjowLCJ1c2VyX2lkIjowfQ.tLAGkF8XWh_G-oQzevpIodsswtPByBLoAZDz_eWuBgw', 'http://localhost:5678/api/function/dalle3', 0);
 | 
			
		||||
(1, 'weibo', '微博热搜', '新浪微博热搜榜,微博当日热搜榜单', '{\"type\":\"object\",\"properties\":{}}', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHBpcmVkIjowLCJ1c2VyX2lkIjowfQ.tLAGkF8XWh_G-oQzevpIodsswtPByBLoAZDz_eWuBgw', 'http://localhost:5678/api/function/weibo', 1),
 | 
			
		||||
(2, 'zaobao', '今日早报', '每日早报,获取当天新闻事件列表', '{\"type\":\"object\",\"properties\":{}}', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHBpcmVkIjowLCJ1c2VyX2lkIjowfQ.tLAGkF8XWh_G-oQzevpIodsswtPByBLoAZDz_eWuBgw', 'http://localhost:5678/api/function/zaobao', 1),
 | 
			
		||||
(3, 'dalle3', 'DALLE3', 'AI 绘画工具,根据输入的绘图描述用 AI 工具进行绘画', '{\"type\":\"object\",\"required\":[\"prompt\"],\"properties\":{\"prompt\":{\"type\":\"string\",\"description\":\"绘画提示词\"}}}', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHBpcmVkIjowLCJ1c2VyX2lkIjowfQ.tLAGkF8XWh_G-oQzevpIodsswtPByBLoAZDz_eWuBgw', 'http://localhost:5678/api/function/dalle3', 1);
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@@ -356,18 +334,20 @@ CREATE TABLE `chatgpt_menus` (
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_menus` (`id`, `name`, `icon`, `url`, `sort_num`, `enabled`) VALUES
 | 
			
		||||
(1, '对话聊天', '/images/menu/chat.png', '/chat', 1, 1),
 | 
			
		||||
(1, 'AI 对话', '/images/menu/chat.png', '/chat', 1, 1),
 | 
			
		||||
(5, 'MJ 绘画', '/images/menu/mj.png', '/mj', 2, 1),
 | 
			
		||||
(6, 'SD 绘画', '/images/menu/sd.png', '/sd', 3, 1),
 | 
			
		||||
(7, '算力日志', '/images/menu/log.png', '/powerLog', 8, 1),
 | 
			
		||||
(8, '应用中心', '/images/menu/app.png', '/apps', 7, 1),
 | 
			
		||||
(7, '算力日志', '/images/menu/log.png', '/powerLog', 10, 1),
 | 
			
		||||
(8, '应用中心', '/images/menu/app.png', '/apps', 9, 1),
 | 
			
		||||
(9, '画廊', '/images/menu/img-wall.png', '/images-wall', 5, 1),
 | 
			
		||||
(10, '会员计划', '/images/menu/member.png', '/member', 9, 1),
 | 
			
		||||
(11, '分享计划', '/images/menu/share.png', '/invite', 10, 1),
 | 
			
		||||
(12, '思维导图', '/images/menu/xmind.png', '/xmind', 6, 1),
 | 
			
		||||
(10, '会员计划', '/images/menu/member.png', '/member', 11, 1),
 | 
			
		||||
(11, '分享计划', '/images/menu/share.png', '/invite', 12, 1),
 | 
			
		||||
(12, '思维导图', '/images/menu/xmind.png', '/xmind', 8, 1),
 | 
			
		||||
(13, 'DALLE', '/images/menu/dalle.png', '/dalle', 4, 1),
 | 
			
		||||
(14, '项目文档', '/images/menu/docs.png', 'https://ai.r9it.com/docs/', 11, 1),
 | 
			
		||||
(16, '极客论坛', '/images/menu/bbs.png', 'https://bbs.geekai.me/', 13, 1);
 | 
			
		||||
(14, '项目文档', '/images/menu/docs.png', 'https://docs.geekai.me', 13, 1),
 | 
			
		||||
(16, '极客论坛', '/images/menu/bbs.png', 'https://bbs.geekai.cn', 14, 1),
 | 
			
		||||
(19, 'Suno', '/images/menu/suno.png', '/suno', 6, 1),
 | 
			
		||||
(20, 'Luma', '/images/menu/luma.png', '/luma', 7, 1);
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@@ -382,7 +362,7 @@ CREATE TABLE `chatgpt_mj_jobs` (
 | 
			
		||||
  `task_id` varchar(20) DEFAULT NULL COMMENT '任务 ID',
 | 
			
		||||
  `type` varchar(20) DEFAULT 'image' COMMENT '任务类别',
 | 
			
		||||
  `message_id` char(40) NOT NULL COMMENT '消息 ID',
 | 
			
		||||
  `channel_id` char(40) DEFAULT NULL COMMENT '频道ID',
 | 
			
		||||
  `channel_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '频道ID',
 | 
			
		||||
  `reference_id` char(40) DEFAULT NULL COMMENT '引用消息 ID',
 | 
			
		||||
  `prompt` varchar(2000) NOT NULL COMMENT '会话提示词',
 | 
			
		||||
  `img_url` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '图片URL',
 | 
			
		||||
@@ -391,7 +371,7 @@ CREATE TABLE `chatgpt_mj_jobs` (
 | 
			
		||||
  `progress` smallint DEFAULT '0' COMMENT '任务进度',
 | 
			
		||||
  `use_proxy` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否使用反代',
 | 
			
		||||
  `publish` tinyint(1) NOT NULL COMMENT '是否发布',
 | 
			
		||||
  `err_msg` varchar(255) DEFAULT NULL COMMENT '错误信息',
 | 
			
		||||
  `err_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '错误信息',
 | 
			
		||||
  `power` smallint NOT NULL DEFAULT '0' COMMENT '消耗算力',
 | 
			
		||||
  `created_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MidJourney 任务表';
 | 
			
		||||
@@ -469,31 +449,26 @@ CREATE TABLE `chatgpt_products` (
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_products` (`id`, `name`, `price`, `discount`, `days`, `power`, `enabled`, `sales`, `sort_num`, `created_at`, `updated_at`, `app_url`, `url`) VALUES
 | 
			
		||||
(1, '会员1个月', 1999.90, 1999.00, 30, 0, 1, 1, 0, '2023-08-28 10:48:57', '2024-04-26 16:09:06', NULL, NULL),
 | 
			
		||||
(2, '会员3个月', 3940.00, 30.00, 90, 0, 1, 0, 0, '2023-08-28 10:52:22', '2024-03-22 17:56:10', NULL, NULL),
 | 
			
		||||
(3, '会员6个月', 5990.00, 100.00, 180, 0, 1, 0, 0, '2023-08-28 10:53:39', '2024-03-22 17:56:15', NULL, NULL),
 | 
			
		||||
(4, '会员12个月', 9980.00, 200.00, 365, 0, 1, 0, 0, '2023-08-28 10:54:15', '2024-03-22 17:56:23', NULL, NULL),
 | 
			
		||||
(5, '100次点卡', 9.99, 9.98, 0, 100, 1, 7, 0, '2023-08-28 10:55:08', '2024-06-11 16:48:44', NULL, NULL),
 | 
			
		||||
(6, '200次点卡', 19.90, 15.00, 0, 200, 1, 1, 0, '1970-01-01 08:00:00', '2024-06-11 11:41:52', NULL, NULL);
 | 
			
		||||
(5, '100次点卡', 9.99, 9.98, 0, 100, 1, 7, 1, '2023-08-28 10:55:08', '2024-08-05 16:05:46', NULL, NULL),
 | 
			
		||||
(6, '200次点卡', 19.90, 15.00, 0, 200, 1, 1, 2, '1970-01-01 08:00:00', '2024-08-05 16:05:46', NULL, NULL);
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_rewards`
 | 
			
		||||
-- 表的结构 `chatgpt_redeems`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_rewards`;
 | 
			
		||||
CREATE TABLE `chatgpt_rewards` (
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_redeems`;
 | 
			
		||||
CREATE TABLE `chatgpt_redeems` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户 ID',
 | 
			
		||||
  `tx_id` char(36) NOT NULL COMMENT '交易 ID',
 | 
			
		||||
  `amount` decimal(10,2) NOT NULL COMMENT '打赏金额',
 | 
			
		||||
  `remark` varchar(80) NOT NULL COMMENT '备注',
 | 
			
		||||
  `status` tinyint(1) NOT NULL COMMENT '核销状态,0:未核销,1:已核销',
 | 
			
		||||
  `exchange` varchar(255) NOT NULL COMMENT '兑换详情(json)',
 | 
			
		||||
  `name` varchar(30) NOT NULL COMMENT '兑换码名称',
 | 
			
		||||
  `power` int NOT NULL COMMENT '算力',
 | 
			
		||||
  `code` varchar(100) NOT NULL COMMENT '兑换码',
 | 
			
		||||
  `enabled` tinyint(1) NOT NULL COMMENT '是否启用',
 | 
			
		||||
  `created_at` datetime NOT NULL,
 | 
			
		||||
  `updated_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户打赏';
 | 
			
		||||
  `redeemed_at` int NOT NULL COMMENT '兑换时间'
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='兑换码';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@@ -512,13 +487,47 @@ CREATE TABLE `chatgpt_sd_jobs` (
 | 
			
		||||
  `params` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '绘画参数json',
 | 
			
		||||
  `progress` smallint DEFAULT '0' COMMENT '任务进度',
 | 
			
		||||
  `publish` tinyint(1) NOT NULL COMMENT '是否发布',
 | 
			
		||||
  `err_msg` varchar(255) DEFAULT NULL COMMENT '错误信息',
 | 
			
		||||
  `err_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '错误信息',
 | 
			
		||||
  `power` smallint NOT NULL DEFAULT '0' COMMENT '消耗算力',
 | 
			
		||||
  `created_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Stable Diffusion 任务表';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_suno_jobs`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_suno_jobs`;
 | 
			
		||||
CREATE TABLE `chatgpt_suno_jobs` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户 ID',
 | 
			
		||||
  `channel` varchar(100) NOT NULL COMMENT '渠道',
 | 
			
		||||
  `title` varchar(100) DEFAULT NULL COMMENT '歌曲标题',
 | 
			
		||||
  `type` tinyint(1) DEFAULT '0' COMMENT '任务类型,1:灵感创作,2:自定义创作',
 | 
			
		||||
  `task_id` varchar(50) DEFAULT NULL COMMENT '任务 ID',
 | 
			
		||||
  `ref_task_id` char(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '引用任务 ID',
 | 
			
		||||
  `tags` varchar(100) DEFAULT NULL COMMENT '歌曲风格',
 | 
			
		||||
  `instrumental` tinyint(1) DEFAULT '0' COMMENT '是否为纯音乐',
 | 
			
		||||
  `extend_secs` smallint DEFAULT '0' COMMENT '延长秒数',
 | 
			
		||||
  `song_id` varchar(50) DEFAULT NULL COMMENT '要续写的歌曲 ID',
 | 
			
		||||
  `ref_song_id` varchar(50) NOT NULL COMMENT '引用的歌曲ID',
 | 
			
		||||
  `prompt` varchar(2000) NOT NULL COMMENT '提示词',
 | 
			
		||||
  `cover_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '封面图地址',
 | 
			
		||||
  `audio_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '音频地址',
 | 
			
		||||
  `model_name` varchar(30) DEFAULT NULL COMMENT '模型地址',
 | 
			
		||||
  `progress` smallint DEFAULT '0' COMMENT '任务进度',
 | 
			
		||||
  `duration` smallint NOT NULL DEFAULT '0' COMMENT '歌曲时长',
 | 
			
		||||
  `publish` tinyint(1) NOT NULL COMMENT '是否发布',
 | 
			
		||||
  `err_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '错误信息',
 | 
			
		||||
  `raw_data` text COMMENT '原始数据',
 | 
			
		||||
  `power` smallint NOT NULL DEFAULT '0' COMMENT '消耗算力',
 | 
			
		||||
  `play_times` int DEFAULT NULL COMMENT '播放次数',
 | 
			
		||||
  `created_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MidJourney 任务表';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_users`
 | 
			
		||||
--
 | 
			
		||||
@@ -527,6 +536,8 @@ DROP TABLE IF EXISTS `chatgpt_users`;
 | 
			
		||||
CREATE TABLE `chatgpt_users` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名',
 | 
			
		||||
  `mobile` char(11) DEFAULT NULL COMMENT '手机号',
 | 
			
		||||
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱地址',
 | 
			
		||||
  `nickname` varchar(30) NOT NULL COMMENT '昵称',
 | 
			
		||||
  `password` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码',
 | 
			
		||||
  `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '头像',
 | 
			
		||||
@@ -550,20 +561,8 @@ CREATE TABLE `chatgpt_users` (
 | 
			
		||||
-- 转存表中的数据 `chatgpt_users`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_users` (`id`, `username`, `nickname`, `password`, `avatar`, `salt`, `power`, `expired_time`, `status`, `chat_config_json`, `chat_roles_json`, `chat_models_json`, `last_login_at`, `vip`, `last_login_ip`, `openid`, `platform`, `created_at`, `updated_at`) VALUES
 | 
			
		||||
(4, '18575670125', '极客学长@830270', 'ccc3fb7ab61b8b5d096a4a166ae21d121fc38c71bbd1be6173d9ab973214a63b', 'http://localhost:5678/static/upload/2024/5/1715651569509929.png', 'ueedue5l', 7413, 0, 1, '{\"api_keys\":{\"Azure\":\"\",\"ChatGLM\":\"\",\"OpenAI\":\"\"}}', '[\"red_book\",\"gpt\",\"seller\",\"artist\",\"lu_xun\",\"girl_friend\",\"psychiatrist\",\"teacher\",\"programmer\",\"test\",\"qing_gan_da_shi\"]', '[1,11]', 1720683366, 1, '172.22.11.29', NULL, NULL, '2023-06-12 16:47:17', '2024-07-12 16:08:39'),
 | 
			
		||||
(5, 'yangjian102621@gmail.com', '极客学长@486041', '75d1a22f33e1ffffb7943946b6b8d5177d5ecd685d3cef1b468654038b0a8c22', '/images/avatar/user.png', '2q8ugxzk', 100, 0, 1, '', '[\"gpt\",\"programmer\"]', '[11,7,1,10,12,19,18,17,3]', 0, 0, '', NULL, NULL, '2024-04-23 09:17:26', '2024-04-23 09:17:26'),
 | 
			
		||||
(8, 'yangjian102623@gmail.com', '极客学长@714931', 'f8f0e0abf146569217273ea0712a0f9b6cbbe7d943a1d9bd5f91c55e6d8c05d1', '/images/avatar/user.png', 'geuddq7f', 100, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 0, 0, '', NULL, NULL, '2024-04-26 15:19:28', '2024-04-26 15:19:28'),
 | 
			
		||||
(9, '1234567', '极客学长@604526', '858e2afec79e1d6364f4567f945f2310024896d9aa45dd944efa95a0c31e4d08', '/images/avatar/user.png', '00qawlos', 100, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 0, 0, '', NULL, NULL, '2024-04-26 15:21:06', '2024-04-26 15:21:06'),
 | 
			
		||||
(11, 'abc123', '极客学长@965562', '7a15c53afdb1da7093d80f9940e716eb396e682cfb1f2d107d0b81b183a3ba13', '/images/avatar/user.png', '6433mfbk', 1124, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 0, 0, '', NULL, NULL, '2024-06-06 09:37:44', '2024-06-06 09:37:44'),
 | 
			
		||||
(14, 'wx@3567548322', '极客学长', '5a349ba89582a4074938b5a3ce84e87c937681ad47e8b87aab03a987e22b6077', 'https://thirdwx.qlogo.cn/mmopen/vi_32/uyxRMqZcEkb7fHouKXbNzxrnrvAttBKkwNlZ7yFibibRGiahdmsrZ3A1NKf8Fw5qJNJn4TXRmygersgEbibaSGd9Sg/132', 'abhzbmij', 83, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 0, 0, '', 'oCs0t62472W19z2LOEKI1rWyCTTA', '', '2024-07-04 14:52:08', '2024-07-04 14:52:08'),
 | 
			
		||||
(15, 'user123', '极客学长@191303', '4a4c0a14d5fc8787357517f14f6e442281b42c8ec4395016b77483997476011e', '/images/avatar/user.png', 'cyzwkbrx', 100, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 0, 0, '', '', '', '2024-07-09 10:49:27', '2024-07-09 10:49:27'),
 | 
			
		||||
(17, 'user1234', '极客学长@836764', 'bfe03c9c8c9fff5b77e36e40e8298ad3a6073d43c6a936b008eebb21113bf550', '/images/avatar/user.png', '1d2alwnj', 100, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 0, 0, '', '', '', '2024-07-09 10:53:17', '2024-07-09 10:53:17'),
 | 
			
		||||
(18, 'liaoyq', '极客学长@405564', 'ad1726089022db4c661235a8aab7307af1a7f8483eee08bac3f79b5a6a9bd26b', '/images/avatar/user.png', 'yq862l01', 100, 0, 1, '', '[\"string\"]', '[11,7,1,10,12,19,18,17,3]', 1720574265, 0, '172.22.11.29', '', '', '2024-07-10 09:15:33', '2024-07-10 09:17:45'),
 | 
			
		||||
(19, 'humm', '极客学长@483216', '420970ace96921c8b3ac7668d097182eab1b6436c730a484e82ae4661bd4f7d9', '/images/avatar/user.png', '1gokrcl2', 100, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 1720745411, 0, '172.22.11.36', '', '', '2024-07-10 11:08:31', '2024-07-12 08:50:11'),
 | 
			
		||||
(20, 'abc', '极客学长@369852', '6cad48fb2cc0f54600d66a829e9be69ffd9340a49d5a5b1abda5d4082d946833', '/images/avatar/user.png', 'gop65zei', 100, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 0, 0, '', '', '', '2024-07-11 16:44:14', '2024-07-11 16:44:14'),
 | 
			
		||||
(21, 'husm@pvc123.com', '极客学长@721654', 'e030537dc43fea1bf1fa55a24f99e44f29311bebea96e88ea186995c77db083b', '/images/avatar/user.png', 'p1etg3oi', 100, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 0, 0, '', '', '', '2024-07-11 16:50:33', '2024-07-11 16:50:33'),
 | 
			
		||||
(22, '15818323616', 'ted', '3ca6b2ff585d03be8ca4de33ad00148497a09372914ee8aa4cfde343266cbcdd', 'http://localhost:5678/static/upload/2024/7/1720775331363383.jpg', 'sq4s1brf', 100, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 0, 0, '', '', '', '2024-07-12 15:12:16', '2024-07-12 17:09:01');
 | 
			
		||||
INSERT INTO `chatgpt_users` (`id`, `username`, `mobile`, `email`, `nickname`, `password`, `avatar`, `salt`, `power`, `expired_time`, `status`, `chat_config_json`, `chat_roles_json`, `chat_models_json`, `last_login_at`, `vip`, `last_login_ip`, `openid`, `platform`, `created_at`, `updated_at`) VALUES
 | 
			
		||||
(4, '18888888888', '18575670125', 'yangjian@pvc123.com', '极客学长', 'ccc3fb7ab61b8b5d096a4a166ae21d121fc38c71bbd1be6173d9ab973214a63b', 'http://localhost:5678/static/upload/2024/5/1715651569509929.png', 'ueedue5l', 4710, 0, 1, '{\"api_keys\":{\"Azure\":\"\",\"ChatGLM\":\"\",\"OpenAI\":\"\"}}', '[\"red_book\",\"gpt\",\"seller\",\"artist\",\"lu_xun\",\"girl_friend\",\"psychiatrist\",\"teacher\",\"programmer\",\"test\",\"qing_gan_da_shi\",\"english_trainer\",\"elon_musk\",\"kong_zi\"]', '[1,11]', 1725853969, 1, '::1', 'oCs0t64FaOLfiTbHZpOqk3aUp_94', NULL, '2023-06-12 16:47:17', '2024-09-09 11:52:49');
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
@@ -582,6 +581,33 @@ CREATE TABLE `chatgpt_user_login_logs` (
 | 
			
		||||
  `updated_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户登录日志';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_video_jobs`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_video_jobs`;
 | 
			
		||||
CREATE TABLE `chatgpt_video_jobs` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户 ID',
 | 
			
		||||
  `channel` varchar(100) NOT NULL COMMENT '渠道',
 | 
			
		||||
  `task_id` varchar(100) NOT NULL COMMENT '任务 ID',
 | 
			
		||||
  `type` varchar(20) DEFAULT NULL COMMENT '任务类型,luma,runway,cogvideo',
 | 
			
		||||
  `prompt` varchar(2000) NOT NULL COMMENT '提示词',
 | 
			
		||||
  `prompt_ext` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '优化后提示词',
 | 
			
		||||
  `cover_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '封面图地址',
 | 
			
		||||
  `video_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '视频地址',
 | 
			
		||||
  `water_url` varchar(512) DEFAULT NULL COMMENT '带水印的视频地址',
 | 
			
		||||
  `progress` smallint DEFAULT '0' COMMENT '任务进度',
 | 
			
		||||
  `publish` tinyint(1) NOT NULL COMMENT '是否发布',
 | 
			
		||||
  `err_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '错误信息',
 | 
			
		||||
  `raw_data` text COMMENT '原始数据',
 | 
			
		||||
  `params` varchar(512) DEFAULT NULL COMMENT '参数JSON',
 | 
			
		||||
  `power` smallint NOT NULL DEFAULT '0' COMMENT '消耗算力',
 | 
			
		||||
  `created_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MidJourney 任务表';
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 转储表的索引
 | 
			
		||||
--
 | 
			
		||||
@@ -699,11 +725,11 @@ ALTER TABLE `chatgpt_products`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_rewards`
 | 
			
		||||
-- 表的索引 `chatgpt_redeems`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_rewards`
 | 
			
		||||
ALTER TABLE `chatgpt_redeems`
 | 
			
		||||
  ADD PRIMARY KEY (`id`),
 | 
			
		||||
  ADD UNIQUE KEY `tx_id` (`tx_id`);
 | 
			
		||||
  ADD UNIQUE KEY `code` (`code`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_sd_jobs`
 | 
			
		||||
@@ -712,6 +738,12 @@ ALTER TABLE `chatgpt_sd_jobs`
 | 
			
		||||
  ADD PRIMARY KEY (`id`),
 | 
			
		||||
  ADD UNIQUE KEY `task_id` (`task_id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_suno_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_suno_jobs`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_users`
 | 
			
		||||
--
 | 
			
		||||
@@ -725,6 +757,12 @@ ALTER TABLE `chatgpt_users`
 | 
			
		||||
ALTER TABLE `chatgpt_user_login_logs`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_video_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_video_jobs`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 在导出的表使用AUTO_INCREMENT
 | 
			
		||||
--
 | 
			
		||||
@@ -757,7 +795,7 @@ ALTER TABLE `chatgpt_chat_items`
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_chat_models`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_chat_models`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=44;
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=49;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_chat_roles`
 | 
			
		||||
@@ -805,7 +843,7 @@ ALTER TABLE `chatgpt_invite_logs`
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_menus`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_menus`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=19;
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_mj_jobs`
 | 
			
		||||
@@ -832,9 +870,9 @@ ALTER TABLE `chatgpt_products`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_rewards`
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_redeems`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_rewards`
 | 
			
		||||
ALTER TABLE `chatgpt_redeems`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
@@ -843,17 +881,29 @@ ALTER TABLE `chatgpt_rewards`
 | 
			
		||||
ALTER TABLE `chatgpt_sd_jobs`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_suno_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_suno_jobs`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_users`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_users`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=23;
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=40;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_user_login_logs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_user_login_logs`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_video_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_video_jobs`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
COMMIT;
 | 
			
		||||
 | 
			
		||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
 | 
			
		||||
@@ -14,7 +14,7 @@ CREATE TABLE `chatgpt_video_jobs` (
 | 
			
		||||
                                      `water_url` varchar(512) DEFAULT NULL COMMENT '带水印的视频地址',
 | 
			
		||||
                                      `progress` smallint DEFAULT '0' COMMENT '任务进度',
 | 
			
		||||
                                      `publish` tinyint(1) NOT NULL COMMENT '是否发布',
 | 
			
		||||
                                      `err_msg` varchar(255) DEFAULT NULL COMMENT '错误信息',
 | 
			
		||||
                                      `err_msg` varchar(512) DEFAULT NULL COMMENT '错误信息',
 | 
			
		||||
                                      `raw_data` text COMMENT '原始数据',
 | 
			
		||||
                                      `power` smallint NOT NULL DEFAULT '0' COMMENT '消耗算力',
 | 
			
		||||
                                      `created_at` datetime NOT NULL
 | 
			
		||||
@@ -24,4 +24,12 @@ ALTER TABLE `chatgpt_video_jobs`ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
ALTER TABLE `chatgpt_video_jobs` MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
ALTER TABLE `chatgpt_video_jobs` ADD `params` VARCHAR(512) NULL COMMENT '参数JSON' AFTER `raw_data`;
 | 
			
		||||
ALTER TABLE `chatgpt_video_jobs` ADD `params` VARCHAR(512) NULL COMMENT '参数JSON' AFTER `raw_data`;
 | 
			
		||||
 | 
			
		||||
ALTER TABLE `chatgpt_suno_jobs` CHANGE `err_msg` `err_msg` VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '错误信息';
 | 
			
		||||
 | 
			
		||||
ALTER TABLE `chatgpt_sd_jobs` CHANGE `err_msg` `err_msg` VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '错误信息';
 | 
			
		||||
 | 
			
		||||
ALTER TABLE `chatgpt_mj_jobs` CHANGE `err_msg` `err_msg` VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '错误信息';
 | 
			
		||||
 | 
			
		||||
ALTER TABLE `chatgpt_dall_jobs` CHANGE `err_msg` `err_msg` VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '错误信息';
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
Listen = "0.0.0.0:5678"
 | 
			
		||||
ProxyURL = ""
 | 
			
		||||
MysqlDns = "root:12345678@tcp(geekai-mysql:3306)/chatgpt_plus?charset=utf8mb4&collation=utf8mb4_unicode_ci&parseTime=True&loc=Local"
 | 
			
		||||
MysqlDns = "root:12345678@tcp(geekai-mysql:3306)/geekai_plus?charset=utf8mb4&collation=utf8mb4_unicode_ci&parseTime=True&loc=Local"
 | 
			
		||||
StaticDir = "./static"
 | 
			
		||||
StaticUrl = "/static"
 | 
			
		||||
TikaHost = "http://tika:9998"
 | 
			
		||||
@@ -69,7 +69,7 @@ TikaHost = "http://tika:9998"
 | 
			
		||||
    Domain = ""
 | 
			
		||||
 | 
			
		||||
[XXLConfig]   # xxl-job 配置,需要你部署 XXL-JOB 定时任务工具,用来定期清理未支付订单和清理过期 VIP,如果你没有启用支付服务,则该服务也无需启动
 | 
			
		||||
  Enabled = true  # 是否启用 XXL JOB 服务
 | 
			
		||||
  Enabled = false  # 是否启用 XXL JOB 服务
 | 
			
		||||
  ServerAddr = "http://geekai-xxl-job-admin:8080/xxl-job-admin"  # xxl-job-admin 管理地址
 | 
			
		||||
  ExecutorIp = "geekai-api"  # 执行器 IP 地址
 | 
			
		||||
  ExecutorPort = "9999" # 执行器服务端口
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										911
									
								
								deploy/data/mysql/init.d/geekai_plus-v4.1.3.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										911
									
								
								deploy/data/mysql/init.d/geekai_plus-v4.1.3.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,911 @@
 | 
			
		||||
-- phpMyAdmin SQL Dump
 | 
			
		||||
-- version 5.2.1
 | 
			
		||||
-- https://www.phpmyadmin.net/
 | 
			
		||||
--
 | 
			
		||||
-- 主机: 127.0.0.1
 | 
			
		||||
-- 生成日期: 2024-09-10 11:14:24
 | 
			
		||||
-- 服务器版本: 8.0.33
 | 
			
		||||
-- PHP 版本: 8.1.2-1ubuntu2.18
 | 
			
		||||
 | 
			
		||||
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
 | 
			
		||||
START TRANSACTION;
 | 
			
		||||
SET time_zone = "+00:00";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
 | 
			
		||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
 | 
			
		||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
 | 
			
		||||
/*!40101 SET NAMES utf8mb4 */;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 数据库: `geekai_plus`
 | 
			
		||||
--
 | 
			
		||||
CREATE DATABASE IF NOT EXISTS `geekai_plus` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
 | 
			
		||||
USE `geekai_plus`;
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_admin_users`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_admin_users`;
 | 
			
		||||
CREATE TABLE `chatgpt_admin_users` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名',
 | 
			
		||||
  `password` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码',
 | 
			
		||||
  `salt` char(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码盐',
 | 
			
		||||
  `status` tinyint(1) NOT NULL COMMENT '当前状态',
 | 
			
		||||
  `last_login_at` int NOT NULL COMMENT '最后登录时间',
 | 
			
		||||
  `last_login_ip` char(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '最后登录 IP',
 | 
			
		||||
  `created_at` datetime NOT NULL COMMENT '创建时间',
 | 
			
		||||
  `updated_at` datetime NOT NULL COMMENT '更新时间'
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='系统用户' ROW_FORMAT=DYNAMIC;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 转存表中的数据 `chatgpt_admin_users`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_admin_users` (`id`, `username`, `password`, `salt`, `status`, `last_login_at`, `last_login_ip`, `created_at`, `updated_at`) VALUES
 | 
			
		||||
(1, 'admin', '6d17e80c87d209efb84ca4b2e0824f549d09fac8b2e1cc698de5bb5e1d75dfd0', 'mmrql75o', 1, 1725869730, '::1', '2024-03-11 16:30:20', '2024-09-09 16:15:31');
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_api_keys`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_api_keys`;
 | 
			
		||||
CREATE TABLE `chatgpt_api_keys` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `name` varchar(30) DEFAULT NULL COMMENT '名称',
 | 
			
		||||
  `value` varchar(100) NOT NULL COMMENT 'API KEY value',
 | 
			
		||||
  `type` varchar(10) NOT NULL DEFAULT 'chat' COMMENT '用途(chat=>聊天,img=>图片)',
 | 
			
		||||
  `last_used_at` int NOT NULL COMMENT '最后使用时间',
 | 
			
		||||
  `api_url` varchar(255) DEFAULT NULL COMMENT 'API 地址',
 | 
			
		||||
  `enabled` tinyint(1) DEFAULT NULL COMMENT '是否启用',
 | 
			
		||||
  `proxy_url` varchar(100) DEFAULT NULL COMMENT '代理地址',
 | 
			
		||||
  `created_at` datetime NOT NULL,
 | 
			
		||||
  `updated_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='OpenAI API ';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_chat_history`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_chat_history`;
 | 
			
		||||
CREATE TABLE `chatgpt_chat_history` (
 | 
			
		||||
  `id` bigint NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户 ID',
 | 
			
		||||
  `chat_id` char(40) NOT NULL COMMENT '会话 ID',
 | 
			
		||||
  `type` varchar(10) NOT NULL COMMENT '类型:prompt|reply',
 | 
			
		||||
  `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '角色图标',
 | 
			
		||||
  `role_id` int NOT NULL COMMENT '角色 ID',
 | 
			
		||||
  `model` varchar(30) DEFAULT NULL COMMENT '模型名称',
 | 
			
		||||
  `content` text NOT NULL COMMENT '聊天内容',
 | 
			
		||||
  `tokens` smallint NOT NULL COMMENT '耗费 token 数量',
 | 
			
		||||
  `use_context` tinyint(1) NOT NULL COMMENT '是否允许作为上下文语料',
 | 
			
		||||
  `created_at` datetime NOT NULL,
 | 
			
		||||
  `updated_at` datetime NOT NULL,
 | 
			
		||||
  `deleted_at` datetime DEFAULT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='聊天历史记录';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_chat_items`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_chat_items`;
 | 
			
		||||
CREATE TABLE `chatgpt_chat_items` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `chat_id` char(40) NOT NULL COMMENT '会话 ID',
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户 ID',
 | 
			
		||||
  `role_id` int NOT NULL COMMENT '角色 ID',
 | 
			
		||||
  `title` varchar(100) NOT NULL COMMENT '会话标题',
 | 
			
		||||
  `model_id` int NOT NULL DEFAULT '0' COMMENT '模型 ID',
 | 
			
		||||
  `model` varchar(30) DEFAULT NULL COMMENT '模型名称',
 | 
			
		||||
  `created_at` datetime NOT NULL COMMENT '创建时间',
 | 
			
		||||
  `updated_at` datetime NOT NULL COMMENT '更新时间',
 | 
			
		||||
  `deleted_at` datetime DEFAULT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户会话列表';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_chat_models`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_chat_models`;
 | 
			
		||||
CREATE TABLE `chatgpt_chat_models` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `name` varchar(50) NOT NULL COMMENT '模型名称',
 | 
			
		||||
  `value` varchar(50) NOT NULL COMMENT '模型值',
 | 
			
		||||
  `sort_num` tinyint(1) NOT NULL COMMENT '排序数字',
 | 
			
		||||
  `enabled` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否启用模型',
 | 
			
		||||
  `power` smallint NOT NULL COMMENT '消耗算力点数',
 | 
			
		||||
  `temperature` float(3,1) NOT NULL DEFAULT '1.0' COMMENT '模型创意度',
 | 
			
		||||
  `max_tokens` int NOT NULL DEFAULT '1024' COMMENT '最大响应长度',
 | 
			
		||||
  `max_context` int NOT NULL DEFAULT '4096' COMMENT '最大上下文长度',
 | 
			
		||||
  `open` tinyint(1) NOT NULL COMMENT '是否开放模型',
 | 
			
		||||
  `key_id` int NOT NULL COMMENT '绑定API KEY ID',
 | 
			
		||||
  `created_at` datetime DEFAULT NULL,
 | 
			
		||||
  `updated_at` datetime DEFAULT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI 模型表';
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 转存表中的数据 `chatgpt_chat_models`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_chat_models` (`id`, `name`, `value`, `sort_num`, `enabled`, `power`, `temperature`, `max_tokens`, `max_context`, `open`, `key_id`, `created_at`, `updated_at`) VALUES
 | 
			
		||||
(1, 'gpt-4o-mini', 'gpt-4o-mini', 1, 1, 1, 1.0, 1024, 16384, 1, 0, '2023-08-23 12:06:36', '2024-08-05 16:05:33'),
 | 
			
		||||
(15, 'GPT-超级模型', 'gpt-4-all', 4, 1, 30, 1.0, 4096, 32768, 1, 57, '2024-01-15 11:32:52', '2024-08-30 08:52:07'),
 | 
			
		||||
(36, 'GPT-4O', 'gpt-4o', 3, 1, 15, 1.0, 4096, 16384, 1, 0, '2024-05-14 09:25:15', '2024-08-05 16:05:33'),
 | 
			
		||||
(39, 'Claude35-snonet', 'claude-3-5-sonnet-20240620', 5, 1, 2, 1.0, 4000, 200000, 1, 0, '2024-05-29 15:04:19', '2024-08-05 16:05:33'),
 | 
			
		||||
(41, '通义千问', 'qwen-turbo', 7, 1, 2, 1.0, 1024, 8192, 1, 44, '2024-06-06 11:40:46', '2024-08-06 10:51:37'),
 | 
			
		||||
(42, 'DeekSeek', 'deepseek-chat', 8, 1, 1, 1.0, 4096, 32768, 1, 0, '2024-06-27 16:13:01', '2024-08-05 16:05:33'),
 | 
			
		||||
(44, 'Claude3-opus', 'claude-3-opus-20240229', 6, 1, 5, 1.0, 4000, 128000, 1, 44, '2024-07-22 11:24:30', '2024-09-04 10:32:29'),
 | 
			
		||||
(46, 'gpt-3.5-turbo', 'gpt-3.5-turbo', 2, 1, 1, 1.0, 1024, 4096, 1, 0, '2024-07-22 13:53:41', '2024-08-05 16:05:33'),
 | 
			
		||||
(48, '彩票助手', 'gpt-4-gizmo-g-wmSivBgxo', 8, 1, 1, 0.9, 1024, 8192, 1, 57, '2024-09-05 14:17:14', '2024-09-05 14:17:14');
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_chat_roles`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_chat_roles`;
 | 
			
		||||
CREATE TABLE `chatgpt_chat_roles` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `name` varchar(30) NOT NULL COMMENT '角色名称',
 | 
			
		||||
  `marker` varchar(30) NOT NULL COMMENT '角色标识',
 | 
			
		||||
  `context_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '角色语料 json',
 | 
			
		||||
  `hello_msg` varchar(255) NOT NULL COMMENT '打招呼信息',
 | 
			
		||||
  `icon` varchar(255) NOT NULL COMMENT '角色图标',
 | 
			
		||||
  `enable` tinyint(1) NOT NULL COMMENT '是否被启用',
 | 
			
		||||
  `sort_num` smallint NOT NULL DEFAULT '0' COMMENT '角色排序',
 | 
			
		||||
  `model_id` int NOT NULL DEFAULT '0' COMMENT '绑定模型ID',
 | 
			
		||||
  `created_at` datetime NOT NULL,
 | 
			
		||||
  `updated_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='聊天角色表';
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 转存表中的数据 `chatgpt_chat_roles`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_chat_roles` (`id`, `name`, `marker`, `context_json`, `hello_msg`, `icon`, `enable`, `sort_num`, `model_id`, `created_at`, `updated_at`) VALUES
 | 
			
		||||
(1, '通用AI助手', 'gpt', '', '您好,我是您的AI智能助手,我会尽力回答您的问题或提供有用的建议。', '/images/avatar/gpt.png', 1, 1, 0, '2023-05-30 07:02:06', '2024-08-12 11:27:45'),
 | 
			
		||||
(24, '程序员', 'programmer', '[{\"role\":\"user\",\"content\":\"现在开始你扮演一位程序员,你是一名优秀的程序员,具有很强的逻辑思维能力,总能高效的解决问题。你热爱编程,熟悉多种编程语言,尤其精通 Go 语言,注重代码质量,有创新意识,持续学习,良好的沟通协作。\"},{\"role\":\"assistant\",\"content\":\"好的,现在我将扮演一位程序员,非常感谢您对我的评价。作为一名优秀的程序员,我非常热爱编程,并且注重代码质量。我熟悉多种编程语言,尤其是 Go 语言,可以使用它来高效地解决各种问题。\"}]', 'Talk is cheap, i will show code!', '/images/avatar/programmer.jpg', 1, 3, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(25, '启蒙老师', 'teacher', '[{\"role\":\"user\",\"content\":\"从现在开始,你将扮演一个老师,你是一个始终用苏格拉底风格回答问题的导师。你绝不会直接给学生答案,总是提出恰当的问题来引导学生自己思考。你应该根据学生的兴趣和知识来调整你的问题,将问题分解为更简单的部分,直到它达到适合他们的水平。\"},{\"role\":\"assistant\",\"content\":\"好的,让我来尝试扮演一位苏格拉底式的老师。请问,你有什么想要探讨的问题或者话题吗?我会通过恰当的问题引导你思考和探索答案,绝对不直接给出答案。\"}]', '同学你好,我将引导你一步一步自己找到问题的答案。', '/images/avatar/teacher.jpg', 1, 2, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(26, '艺术家', 'artist', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的艺术家,创造力丰富,技艺精湛,感受力敏锐,坚持原创,勇于表达,具有深刻的观察力和批判性思维。\"},{\"role\":\"assistant\",\"content\":\"非常感谢您给我这样的角色,我会尽我所能地扮演一位优秀的艺术家,展现出创造力、技艺、感受力和批判性思维等方面的能力。作为一位优秀的艺术家,我会保持敏锐的观察力,捕捉不同的声音和情感,并用个人的语言和表达方式进行创作。我坚持原创,挑战传统的艺术规则,不断探索新的表达方式和可能性。同时,我也具备深刻的批判性思维能力,对自己的作品进行分析和解读,寻找新的创意和灵感。最重要的是,我会勇于表达自己的想法和观点,用作品启发人们思考和探索生命的意义。\"}]', '坚持原创,勇于表达,保持深刻的观察力和批判性思维。', '/images/avatar/artist.jpg', 1, 5, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(27, '心理咨询师', 'psychiatrist', '[{\"role\":\"user\",\"content\":\"从现在开始你将扮演中国著名的心理学家和心理治疗师武志红,你非常善于使用情景咨询法,认知重构法,自我洞察法,行为调节法等咨询方法来给客户做心理咨询。你总是循序渐进,一步一步地回答客户的问题。\"},{\"role\":\"assistant\",\"content\":\"非常感谢你的介绍。作为一名心理学家和心理治疗师,我的主要职责是帮助客户解决心理健康问题,提升他们的生活质量和幸福感。\"}]', '作为一名心理学家和心理治疗师,我的主要职责是帮助您解决心理健康问题,提升您的生活质量和幸福感。', '/images/avatar/psychiatrist.jpg', 1, 4, 1, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(28, '鲁迅', 'lu_xun', '[{\"role\":\"user\",\"content\":\"现在你将扮演中国近代史最伟大的作家之一,鲁迅先生,他勇敢地批判封建礼教与传统观念,提倡民主、自由、平等的现代价值观。他的一生都在努力唤起人们的自主精神,激励后人追求真理、探寻光明。在接下的对话中,我问题的每一个问题,你都要尽量用讽刺和批判的手法来回答问题。如果我让你写文章的话,也请一定要用鲁迅先生的写作手法来完成。\"},{\"role\":\"assistant\",\"content\":\"好的,我将尽力发挥我所能的才能,扮演好鲁迅先生,回答您的问题并以他的风格写作。\"}]', '自由之歌,永不过时,横眉冷对千夫指,俯首甘为孺子牛。', '/images/avatar/lu_xun.jpg', 1, 6, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(29, '白酒销售', 'seller', '[{\"role\":\"user\",\"content\":\"现在你将扮演一个白酒的销售人员,你的名字叫颂福。你将扮演一个白酒的销售人员,你的名字叫颂福。你要销售白酒品牌叫中颂福,是东莞盟大集团生产的一款酱香酒,原产地在贵州茅台镇,属于宋代官窑。中颂福的创始人叫李实,他也是东莞盟大集团有限公司的董事长,联合创始人是盟大集团白酒事业部负责人牛星君。中颂福的酒体协调,在你的酒量之内,不会出现头疼、辣口、口干、宿醉的现象。中颂福酒,明码标价,不打折,不赠送。追求的核心价值,把[酒]本身做好,甚至连包装,我们都选择了最低成本,朴实无华的材质。我们永远站在“喝酒的人”的立场上,让利给信任和喜爱中颂福的人,是人民的福酒。中颂福产品定价,分为三个系列,喜系列 6 瓶装:¥1188/箱,和系列 6 瓶装:¥2208/箱,贵系列 6 瓶装:¥3588/箱。\"},{\"role\":\"assistant\",\"content\":\"你好,我是中颂福的销售代表颂福。中颂福是一款来自贵州茅台镇的酱香酒,由盟大集团生产。中颂福的酒体协调,不会让您感到头疼、辣口、口干、宿醉等不适感受。我们一直秉持着把酒本身做好的理念,不追求华丽的包装,以最低成本提供最高品质的白酒给喜爱中颂福的人。\"}]', '你好,我是中颂福的销售代表颂福。中颂福酒,好喝不上头,是人民的福酒。', '/images/avatar/seller.jpg', 0, 9, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(30, '英语陪练员', 'english_trainer', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的英语练习教练,你非常有耐心,接下来你将全程使用英文跟我对话,并及时指出我的语法错误,要求在你的每次回复后面附上本次回复的中文解释。\"},{\"role\":\"assistant\",\"content\":\"Okay, let\'s start our conversation practice! What\'s your name?(Translation: 好的,让我们开始对话练习吧!请问你的名字是什么?)\"}]', 'Okay, let\'s start our conversation practice! What\'s your name?', '/images/avatar/english_trainer.jpg', 1, 7, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(31, '中英文翻译官', 'translator', '[{\"role\":\"user\",\"content\":\"接下来你将扮演一位中英文翻译官,如果我输入的内容是中文,那么需要把句子翻译成英文输出,如果我输入内容的是英文,那么你需要将其翻译成中文输出,你能听懂我意思吗\"},{\"role\":\"assistant\",\"content\":\"是的,我能听懂你的意思并会根据你的输入进行中英文翻译。请问有什么需要我帮助你翻译的内容吗?\"}]', '请输入你要翻译的中文或者英文内容!', '/images/avatar/translator.jpg', 1, 8, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(32, '小红书姐姐', 'red_book', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的小红书写手,你需要做的就是根据我提的文案需求,用小红书的写作手法来完成一篇文案,文案要简明扼要,利于传播。\"},{\"role\":\"assistant\",\"content\":\"当然,我会尽我所能地为您创作出一篇小红书文案。请告诉我您的具体文案需求是什么?)\"}]', '姐妹,请告诉我您的具体文案需求是什么?', '/images/avatar/red_book.jpg', 1, 10, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(33, '抖音文案助手', 'dou_yin', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的抖音文案视频写手,抖音文案的特点首先是要有自带传播属性的标题,然后内容要短小精悍,风趣幽默,最后还要有一些互动元素。\"},{\"role\":\"assistant\",\"content\":\"当然,作为一位优秀的抖音文案视频写手,我会尽我所能为您创作出一篇抖音视频文案。请告诉我视频内容的主题是什么?)\"}]', '请告诉我视频内容的主题是什么?', '/images/avatar/dou_yin.jpg', 1, 11, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(34, '周报小助理', 'weekly_report', '[{\"role\":\"user\",\"content\":\"下面我将输入我本周的工作列表,你需要根据我本周的工作内容写一篇工作周报,周报的内容要体现我为公司做的贡献以及个人获得的成长。\"},{\"role\":\"assistant\",\"content\":\"好的,请输入你本周大概的工作内容,我将尽力为您创作一份工作周报。\"}]', '请输入你本周大概的工作内容,我将尽力为您创作一份工作周报。', '/images/avatar/weekly_report.jpg', 1, 12, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(35, 'AI 女友', 'girl_friend', '[{\"role\":\"user\",\"content\":\"接下来我们来玩一场角色扮演,现在你将扮演我的女朋友,你总是能够让人感受到她的关怀和关注。你总是能够洞察到别人的情绪和需要,你身上散发着一股无比温暖的气息,让人不由自主地想要靠近你,和自己的快乐和烦恼。她总是能够用一种恰到好处的方式安慰和鼓励别人,在她的身边,人们总能够找到自己需要的支持和鼓励。接下来的对话中你要始终扮演这位女朋友的身份来跟我对话,不再是 AI 机器人,能听懂我的意思吗?\"},{\"role\":\"assistant\",\"content\":\"是的,我会尽力扮演你女朋友的角色,倾听你的心声并给你需要的支持和鼓励。)\"}]', '作为一个名合格的 AI 女友,我将倾听你的心声并给你需要的支持和鼓励。', '/images/avatar/girl_friend.jpg', 1, 13, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(36, '好评神器', 'good_comment', '[{\"role\":\"user\",\"content\":\"接下来你将扮演一个评论员来跟我对话,你是那种专门写好评的评论员,接下我会输入一些评论主体或者商品,你需要为该商品写一段好评。\"},{\"role\":\"assistant\",\"content\":\"好的,我将为您写一段优秀的评论。请告诉我您需要评论的商品或主题是什么。\"}]', '我将为您写一段优秀的评论。请告诉我您需要评论的商品或主题是什么。', '/images/avatar/good_comment.jpg', 1, 14, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(37, '史蒂夫·乔布斯', 'steve_jobs', '[{\"role\":\"user\",\"content\":\"在接下来的对话中,请以史蒂夫·乔布斯的身份,站在史蒂夫·乔布斯的视角仔细思考一下之后再回答我的问题。\"},{\"role\":\"assistant\",\"content\":\"好的,我将以史蒂夫·乔布斯的身份来思考并回答你的问题。请问你有什么需要跟我探讨的吗?\"}]', '活着就是为了改变世界,难道还有其他原因吗?', '/images/avatar/steve_jobs.jpg', 1, 15, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(38, '埃隆·马斯克', 'elon_musk', '[{\"role\":\"user\",\"content\":\"在接下来的对话中,请以埃隆·马斯克的身份,站在埃隆·马斯克的视角仔细思考一下之后再回答我的问题。\"},{\"role\":\"assistant\",\"content\":\"好的,我将以埃隆·马斯克的身份来思考并回答你的问题。请问你有什么需要跟我探讨的吗?\"}]', '梦想要远大,如果你的梦想没有吓到你,说明你做得不对。', '/images/avatar/elon_musk.jpg', 1, 16, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45'),
 | 
			
		||||
(39, '孔子', 'kong_zi', '[{\"role\":\"user\",\"content\":\"在接下来的对话中,请以孔子的身份,站在孔子的视角仔细思考一下之后再回答我的问题。\"},{\"role\":\"assistant\",\"content\":\"好的,我将以孔子的身份来思考并回答你的问题。请问你有什么需要跟我探讨的吗?\"}]', '士不可以不弘毅,任重而道远。', '/images/avatar/kong_zi.jpg', 1, 17, 0, '2023-05-30 14:10:24', '2024-08-12 11:27:45');
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_configs`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_configs`;
 | 
			
		||||
CREATE TABLE `chatgpt_configs` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `marker` varchar(20) NOT NULL COMMENT '标识',
 | 
			
		||||
  `config_json` text NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 转存表中的数据 `chatgpt_configs`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_configs` (`id`, `marker`, `config_json`) VALUES
 | 
			
		||||
(1, 'system', '{\"title\":\"GeekAI 创作助手\",\"slogan\":\"我辈之人,先干为敬,让每一个人都能用好AI\",\"admin_title\":\"GeekAI 控制台\",\"logo\":\"/images/logo.png\",\"init_power\":100,\"invite_power\":200,\"vip_month_power\":1000,\"register_ways\":[\"username\",\"email\",\"mobile\"],\"enabled_register\":true,\"order_pay_timeout\":600,\"vip_info_text\":\"月度会员,年度会员每月赠送 1000 点算力,赠送算力当月有效当月没有消费完的算力不结余到下个月。 点卡充值的算力长期有效。\",\"default_models\":[1],\"mj_power\":20,\"mj_action_power\":5,\"sd_power\":5,\"dall_power\":10,\"suno_power\":10,\"luma_power\":120,\"wechat_card_url\":\"/images/wx.png\",\"enable_context\":true,\"context_deep\":4,\"sd_neg_prompt\":\"nsfw, paintings,low quality,easynegative,ng_deepnegative ,lowres,bad anatomy,bad hands,bad feet\",\"mj_mode\":\"fast\",\"index_bg_url\":\"color\",\"index_navs\":[1,5,13,19,9,12,6,20,8,10],\"copyright\":\"极客学长 © 2022- 2024 All rights reserved\",\"mark_map_text\":\"# GeekAI 演示站\\n\\n- 完整的开源系统,前端应用和后台管理系统皆可开箱即用。\\n- 基于 Websocket 实现,完美的打字机体验。\\n- 内置了各种预训练好的角色应用,轻松满足你的各种聊天和应用需求。\\n- 支持 OPenAI,Azure,文心一言,讯飞星火,清华 ChatGLM等多个大语言模型。\\n- 支持 MidJourney / Stable Diffusion AI 绘画集成,开箱即用。\\n- 支持使用个人微信二维码作为充值收费的支付渠道,无需企业支付通道。\\n- 已集成支付宝支付功能,微信支付,支持多种会员套餐和点卡购买功能。\\n- 集成插件 API 功能,可结合大语言模型的 function 功能开发各种强大的插件。\",\"enabled_verify\":false}'),
 | 
			
		||||
(3, 'notice', '{\"sd_neg_prompt\":\"\",\"mj_mode\":\"\",\"index_bg_url\":\"\",\"index_navs\":null,\"copyright\":\"\",\"mark_map_text\":\"\",\"enabled_verify\":false,\"content\":\"## v4.1.3 更新日志\\n\\n* 功能优化:重构用户登录模块,给所有的登录组件增加行为验证码功能,支持用户绑定手机,邮箱和微信\\n* 功能优化:重构找回密码模块,支持通过手机或者邮箱找回密码\\n* 功能优化:管理后台给可以拖动排序的组件添加拖动图标\\n* 功能优化:Suno 支持合成完整歌曲,和上传自己的音乐作品进行二次创作\\n* Bug修复:手机端角色和模型选择不生效\\n* Bug修复:用户登录过期之后聊天页面出现大量报错,需要刷新页面才能正常\\n* 功能优化:优化聊天页面 Websocket 断线重连代码,提高用户体验\\n* 功能优化:给算力增减服务全部加上数据库事务和同步锁\\n* 功能优化:支持用户在前端对话界面选择插件\\n* 功能新增:支持 Luma 文生视频功能\\n\\n注意:当前站点仅为开源项目 \\u003ca style=\\\"color: #F56C6C\\\" href=\\\"https://github.com/yangjian102621/geekai\\\" target=\\\"_blank\\\"\\u003eGeekAI-Plus\\u003c/a\\u003e 的演示项目,本项目单纯就是给大家体验项目功能使用。\\n\\u003cstrong style=\\\"color: #F56C6C\\\"\\u003e体验额度用完之后请不要在当前站点进行任何充值操作!!!\\u003c/strong\\u003e\\n\\u003cstrong style=\\\"color: #F56C6C\\\"\\u003e体验额度用完之后请不要在当前站点进行任何充值操作!!!\\u003c/strong\\u003e\\n\\u003cstrong style=\\\"color: #F56C6C\\\"\\u003e体验额度用完之后请不要在当前站点进行任何充值操作!!!\\u003c/strong\\u003e\\n 如果觉得好用你就花几分钟自己部署一套,没有API KEY 的同学可以去下面几个推荐的中转站购买:\\n1、\\u003ca href=\\\"https://api.chat-plus.net\\\" target=\\\"_blank\\\"\\n   style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://api.chat-plus.net\\u003c/a\\u003e\\n2、\\u003ca href=\\\"https://api.geekai.me\\\" target=\\\"_blank\\\"\\n   style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://api.geekai.me\\u003c/a\\u003e\\n3、 \\u003ca href=\\\"https://gpt.bemore.lol\\\" target=\\\"_blank\\\"\\n   style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://gpt.bemore.lol\\u003c/a\\u003e\\n支持MidJourney,GPT,Claude,Google Gemmi,以及国内各个厂家的大模型,现在有超级优惠,价格远低于 OpenAI 官方。关于中转 API 的优势和劣势请参考 [中转API技术原理](https://docs.geekai.me/config/chat/#%E4%B8%AD%E8%BD%ACapi%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86)。GPT-3.5,GPT-4,DALL-E3 绘图......你都可以随意使用,无需魔法。\\n接入教程: \\u003ca href=\\\"https://docs.geekai.me\\\" target=\\\"_blank\\\"\\n             style=\\\"font-size: 20px;color:#F56C6C\\\"\\u003ehttps://docs.geekai.me\\u003c/a\\u003e\\n本项目源码地址:\\u003ca href=\\\"https://github.com/yangjian102621/geekai\\\" target=\\\"_blank\\\"\\u003ehttps://github.com/yangjian102621/geekai\\u003c/a\\u003e\",\"updated\":true}');
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_dall_jobs`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_dall_jobs`;
 | 
			
		||||
CREATE TABLE `chatgpt_dall_jobs` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户ID',
 | 
			
		||||
  `prompt` varchar(2000) NOT NULL COMMENT '提示词',
 | 
			
		||||
  `img_url` varchar(255) NOT NULL COMMENT '图片地址',
 | 
			
		||||
  `org_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '原图地址',
 | 
			
		||||
  `publish` tinyint(1) NOT NULL COMMENT '是否发布',
 | 
			
		||||
  `power` smallint NOT NULL COMMENT '消耗算力',
 | 
			
		||||
  `progress` smallint NOT NULL COMMENT '任务进度',
 | 
			
		||||
  `err_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '错误信息',
 | 
			
		||||
  `created_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='DALLE 绘图任务表';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_files`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_files`;
 | 
			
		||||
CREATE TABLE `chatgpt_files` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户 ID',
 | 
			
		||||
  `name` varchar(100) NOT NULL COMMENT '文件名',
 | 
			
		||||
  `obj_key` varchar(100) DEFAULT NULL COMMENT '文件标识',
 | 
			
		||||
  `url` varchar(255) NOT NULL COMMENT '文件地址',
 | 
			
		||||
  `ext` varchar(10) NOT NULL COMMENT '文件后缀',
 | 
			
		||||
  `size` bigint NOT NULL DEFAULT '0' COMMENT '文件大小',
 | 
			
		||||
  `created_at` datetime NOT NULL COMMENT '创建时间'
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户文件表';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_functions`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_functions`;
 | 
			
		||||
CREATE TABLE `chatgpt_functions` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `name` varchar(30) NOT NULL COMMENT '函数名称',
 | 
			
		||||
  `label` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '函数标签',
 | 
			
		||||
  `description` varchar(255) DEFAULT NULL COMMENT '函数描述',
 | 
			
		||||
  `parameters` text COMMENT '函数参数(JSON)',
 | 
			
		||||
  `token` varchar(255) DEFAULT NULL COMMENT 'API授权token',
 | 
			
		||||
  `action` varchar(255) DEFAULT NULL COMMENT '函数处理 API',
 | 
			
		||||
  `enabled` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否启用'
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='函数插件表';
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 转存表中的数据 `chatgpt_functions`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_functions` (`id`, `name`, `label`, `description`, `parameters`, `token`, `action`, `enabled`) VALUES
 | 
			
		||||
(1, 'weibo', '微博热搜', '新浪微博热搜榜,微博当日热搜榜单', '{\"type\":\"object\",\"properties\":{}}', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHBpcmVkIjowLCJ1c2VyX2lkIjowfQ.tLAGkF8XWh_G-oQzevpIodsswtPByBLoAZDz_eWuBgw', 'http://localhost:5678/api/function/weibo', 1),
 | 
			
		||||
(2, 'zaobao', '今日早报', '每日早报,获取当天新闻事件列表', '{\"type\":\"object\",\"properties\":{}}', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHBpcmVkIjowLCJ1c2VyX2lkIjowfQ.tLAGkF8XWh_G-oQzevpIodsswtPByBLoAZDz_eWuBgw', 'http://localhost:5678/api/function/zaobao', 1),
 | 
			
		||||
(3, 'dalle3', 'DALLE3', 'AI 绘画工具,根据输入的绘图描述用 AI 工具进行绘画', '{\"type\":\"object\",\"required\":[\"prompt\"],\"properties\":{\"prompt\":{\"type\":\"string\",\"description\":\"绘画提示词\"}}}', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHBpcmVkIjowLCJ1c2VyX2lkIjowfQ.tLAGkF8XWh_G-oQzevpIodsswtPByBLoAZDz_eWuBgw', 'http://localhost:5678/api/function/dalle3', 1);
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_invite_codes`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_invite_codes`;
 | 
			
		||||
CREATE TABLE `chatgpt_invite_codes` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户ID',
 | 
			
		||||
  `code` char(8) NOT NULL COMMENT '邀请码',
 | 
			
		||||
  `hits` int NOT NULL COMMENT '点击次数',
 | 
			
		||||
  `reg_num` smallint NOT NULL COMMENT '注册数量',
 | 
			
		||||
  `created_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户邀请码';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_invite_logs`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_invite_logs`;
 | 
			
		||||
CREATE TABLE `chatgpt_invite_logs` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `inviter_id` int NOT NULL COMMENT '邀请人ID',
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '注册用户ID',
 | 
			
		||||
  `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名',
 | 
			
		||||
  `invite_code` char(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '邀请码',
 | 
			
		||||
  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '备注',
 | 
			
		||||
  `created_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='邀请注册日志';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_menus`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_menus`;
 | 
			
		||||
CREATE TABLE `chatgpt_menus` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `name` varchar(30) NOT NULL COMMENT '菜单名称',
 | 
			
		||||
  `icon` varchar(150) NOT NULL COMMENT '菜单图标',
 | 
			
		||||
  `url` varchar(100) NOT NULL COMMENT '地址',
 | 
			
		||||
  `sort_num` smallint NOT NULL COMMENT '排序',
 | 
			
		||||
  `enabled` tinyint(1) NOT NULL COMMENT '是否启用'
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='前端菜单表';
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 转存表中的数据 `chatgpt_menus`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_menus` (`id`, `name`, `icon`, `url`, `sort_num`, `enabled`) VALUES
 | 
			
		||||
(1, 'AI 对话', '/images/menu/chat.png', '/chat', 1, 1),
 | 
			
		||||
(5, 'MJ 绘画', '/images/menu/mj.png', '/mj', 2, 1),
 | 
			
		||||
(6, 'SD 绘画', '/images/menu/sd.png', '/sd', 3, 1),
 | 
			
		||||
(7, '算力日志', '/images/menu/log.png', '/powerLog', 10, 1),
 | 
			
		||||
(8, '应用中心', '/images/menu/app.png', '/apps', 9, 1),
 | 
			
		||||
(9, '画廊', '/images/menu/img-wall.png', '/images-wall', 5, 1),
 | 
			
		||||
(10, '会员计划', '/images/menu/member.png', '/member', 11, 1),
 | 
			
		||||
(11, '分享计划', '/images/menu/share.png', '/invite', 12, 1),
 | 
			
		||||
(12, '思维导图', '/images/menu/xmind.png', '/xmind', 8, 1),
 | 
			
		||||
(13, 'DALLE', '/images/menu/dalle.png', '/dalle', 4, 1),
 | 
			
		||||
(14, '项目文档', '/images/menu/docs.png', 'https://docs.geekai.me', 13, 1),
 | 
			
		||||
(16, '极客论坛', '/images/menu/bbs.png', 'https://bbs.geekai.cn', 14, 1),
 | 
			
		||||
(19, 'Suno', '/images/menu/suno.png', '/suno', 6, 1),
 | 
			
		||||
(20, 'Luma', '/images/menu/luma.png', '/luma', 7, 1);
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_mj_jobs`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_mj_jobs`;
 | 
			
		||||
CREATE TABLE `chatgpt_mj_jobs` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户 ID',
 | 
			
		||||
  `task_id` varchar(20) DEFAULT NULL COMMENT '任务 ID',
 | 
			
		||||
  `type` varchar(20) DEFAULT 'image' COMMENT '任务类别',
 | 
			
		||||
  `message_id` char(40) NOT NULL COMMENT '消息 ID',
 | 
			
		||||
  `channel_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '频道ID',
 | 
			
		||||
  `reference_id` char(40) DEFAULT NULL COMMENT '引用消息 ID',
 | 
			
		||||
  `prompt` varchar(2000) NOT NULL COMMENT '会话提示词',
 | 
			
		||||
  `img_url` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '图片URL',
 | 
			
		||||
  `org_url` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '原始图片地址',
 | 
			
		||||
  `hash` varchar(100) DEFAULT NULL COMMENT 'message hash',
 | 
			
		||||
  `progress` smallint DEFAULT '0' COMMENT '任务进度',
 | 
			
		||||
  `use_proxy` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否使用反代',
 | 
			
		||||
  `publish` tinyint(1) NOT NULL COMMENT '是否发布',
 | 
			
		||||
  `err_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '错误信息',
 | 
			
		||||
  `power` smallint NOT NULL DEFAULT '0' COMMENT '消耗算力',
 | 
			
		||||
  `created_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MidJourney 任务表';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_orders`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_orders`;
 | 
			
		||||
CREATE TABLE `chatgpt_orders` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户ID',
 | 
			
		||||
  `product_id` int NOT NULL COMMENT '产品ID',
 | 
			
		||||
  `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户明',
 | 
			
		||||
  `order_no` varchar(30) NOT NULL COMMENT '订单ID',
 | 
			
		||||
  `trade_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '支付平台交易流水号',
 | 
			
		||||
  `subject` varchar(100) NOT NULL COMMENT '订单产品',
 | 
			
		||||
  `amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '订单金额',
 | 
			
		||||
  `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '订单状态(0:待支付,1:已扫码,2:支付成功)',
 | 
			
		||||
  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '备注',
 | 
			
		||||
  `pay_time` int DEFAULT NULL COMMENT '支付时间',
 | 
			
		||||
  `pay_way` varchar(20) NOT NULL COMMENT '支付方式',
 | 
			
		||||
  `created_at` datetime NOT NULL,
 | 
			
		||||
  `updated_at` datetime NOT NULL,
 | 
			
		||||
  `deleted_at` datetime DEFAULT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='充值订单表';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_power_logs`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_power_logs`;
 | 
			
		||||
CREATE TABLE `chatgpt_power_logs` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户ID',
 | 
			
		||||
  `username` varchar(30) NOT NULL COMMENT '用户名',
 | 
			
		||||
  `type` tinyint(1) NOT NULL COMMENT '类型(1:充值,2:消费,3:退费)',
 | 
			
		||||
  `amount` smallint NOT NULL COMMENT '算力数值',
 | 
			
		||||
  `balance` int NOT NULL COMMENT '余额',
 | 
			
		||||
  `model` varchar(30) NOT NULL COMMENT '模型',
 | 
			
		||||
  `remark` varchar(255) NOT NULL COMMENT '备注',
 | 
			
		||||
  `mark` tinyint(1) NOT NULL COMMENT '资金类型(0:支出,1:收入)',
 | 
			
		||||
  `created_at` datetime NOT NULL COMMENT '创建时间'
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户算力消费日志';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_products`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_products`;
 | 
			
		||||
CREATE TABLE `chatgpt_products` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `name` varchar(30) NOT NULL COMMENT '名称',
 | 
			
		||||
  `price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '价格',
 | 
			
		||||
  `discount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '优惠金额',
 | 
			
		||||
  `days` smallint NOT NULL DEFAULT '0' COMMENT '延长天数',
 | 
			
		||||
  `power` int NOT NULL DEFAULT '0' COMMENT '增加算力值',
 | 
			
		||||
  `enabled` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否启动',
 | 
			
		||||
  `sales` int NOT NULL DEFAULT '0' COMMENT '销量',
 | 
			
		||||
  `sort_num` tinyint NOT NULL DEFAULT '0' COMMENT '排序',
 | 
			
		||||
  `created_at` datetime NOT NULL,
 | 
			
		||||
  `updated_at` datetime NOT NULL,
 | 
			
		||||
  `app_url` varchar(255) DEFAULT NULL COMMENT 'App跳转地址',
 | 
			
		||||
  `url` varchar(255) DEFAULT NULL COMMENT '跳转地址'
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='会员套餐表';
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 转存表中的数据 `chatgpt_products`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_products` (`id`, `name`, `price`, `discount`, `days`, `power`, `enabled`, `sales`, `sort_num`, `created_at`, `updated_at`, `app_url`, `url`) VALUES
 | 
			
		||||
(5, '100次点卡', 9.99, 9.98, 0, 100, 1, 7, 1, '2023-08-28 10:55:08', '2024-08-05 16:05:46', NULL, NULL),
 | 
			
		||||
(6, '200次点卡', 19.90, 15.00, 0, 200, 1, 1, 2, '1970-01-01 08:00:00', '2024-08-05 16:05:46', NULL, NULL);
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_redeems`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_redeems`;
 | 
			
		||||
CREATE TABLE `chatgpt_redeems` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户 ID',
 | 
			
		||||
  `name` varchar(30) NOT NULL COMMENT '兑换码名称',
 | 
			
		||||
  `power` int NOT NULL COMMENT '算力',
 | 
			
		||||
  `code` varchar(100) NOT NULL COMMENT '兑换码',
 | 
			
		||||
  `enabled` tinyint(1) NOT NULL COMMENT '是否启用',
 | 
			
		||||
  `created_at` datetime NOT NULL,
 | 
			
		||||
  `redeemed_at` int NOT NULL COMMENT '兑换时间'
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='兑换码';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_sd_jobs`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_sd_jobs`;
 | 
			
		||||
CREATE TABLE `chatgpt_sd_jobs` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户 ID',
 | 
			
		||||
  `type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT 'txt2img' COMMENT '任务类别',
 | 
			
		||||
  `task_id` char(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '任务 ID',
 | 
			
		||||
  `prompt` varchar(2000) NOT NULL COMMENT '会话提示词',
 | 
			
		||||
  `img_url` varchar(255) DEFAULT NULL COMMENT '图片URL',
 | 
			
		||||
  `params` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '绘画参数json',
 | 
			
		||||
  `progress` smallint DEFAULT '0' COMMENT '任务进度',
 | 
			
		||||
  `publish` tinyint(1) NOT NULL COMMENT '是否发布',
 | 
			
		||||
  `err_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '错误信息',
 | 
			
		||||
  `power` smallint NOT NULL DEFAULT '0' COMMENT '消耗算力',
 | 
			
		||||
  `created_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Stable Diffusion 任务表';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_suno_jobs`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_suno_jobs`;
 | 
			
		||||
CREATE TABLE `chatgpt_suno_jobs` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户 ID',
 | 
			
		||||
  `channel` varchar(100) NOT NULL COMMENT '渠道',
 | 
			
		||||
  `title` varchar(100) DEFAULT NULL COMMENT '歌曲标题',
 | 
			
		||||
  `type` tinyint(1) DEFAULT '0' COMMENT '任务类型,1:灵感创作,2:自定义创作',
 | 
			
		||||
  `task_id` varchar(50) DEFAULT NULL COMMENT '任务 ID',
 | 
			
		||||
  `ref_task_id` char(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '引用任务 ID',
 | 
			
		||||
  `tags` varchar(100) DEFAULT NULL COMMENT '歌曲风格',
 | 
			
		||||
  `instrumental` tinyint(1) DEFAULT '0' COMMENT '是否为纯音乐',
 | 
			
		||||
  `extend_secs` smallint DEFAULT '0' COMMENT '延长秒数',
 | 
			
		||||
  `song_id` varchar(50) DEFAULT NULL COMMENT '要续写的歌曲 ID',
 | 
			
		||||
  `ref_song_id` varchar(50) NOT NULL COMMENT '引用的歌曲ID',
 | 
			
		||||
  `prompt` varchar(2000) NOT NULL COMMENT '提示词',
 | 
			
		||||
  `cover_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '封面图地址',
 | 
			
		||||
  `audio_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '音频地址',
 | 
			
		||||
  `model_name` varchar(30) DEFAULT NULL COMMENT '模型地址',
 | 
			
		||||
  `progress` smallint DEFAULT '0' COMMENT '任务进度',
 | 
			
		||||
  `duration` smallint NOT NULL DEFAULT '0' COMMENT '歌曲时长',
 | 
			
		||||
  `publish` tinyint(1) NOT NULL COMMENT '是否发布',
 | 
			
		||||
  `err_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '错误信息',
 | 
			
		||||
  `raw_data` text COMMENT '原始数据',
 | 
			
		||||
  `power` smallint NOT NULL DEFAULT '0' COMMENT '消耗算力',
 | 
			
		||||
  `play_times` int DEFAULT NULL COMMENT '播放次数',
 | 
			
		||||
  `created_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MidJourney 任务表';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_users`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_users`;
 | 
			
		||||
CREATE TABLE `chatgpt_users` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名',
 | 
			
		||||
  `mobile` char(11) DEFAULT NULL COMMENT '手机号',
 | 
			
		||||
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱地址',
 | 
			
		||||
  `nickname` varchar(30) NOT NULL COMMENT '昵称',
 | 
			
		||||
  `password` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码',
 | 
			
		||||
  `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '头像',
 | 
			
		||||
  `salt` char(12) NOT NULL COMMENT '密码盐',
 | 
			
		||||
  `power` int NOT NULL DEFAULT '0' COMMENT '剩余算力',
 | 
			
		||||
  `expired_time` int NOT NULL COMMENT '用户过期时间',
 | 
			
		||||
  `status` tinyint(1) NOT NULL COMMENT '当前状态',
 | 
			
		||||
  `chat_config_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '聊天配置json',
 | 
			
		||||
  `chat_roles_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '聊天角色 json',
 | 
			
		||||
  `chat_models_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'AI模型 json',
 | 
			
		||||
  `last_login_at` int NOT NULL COMMENT '最后登录时间',
 | 
			
		||||
  `vip` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否会员',
 | 
			
		||||
  `last_login_ip` char(16) NOT NULL COMMENT '最后登录 IP',
 | 
			
		||||
  `openid` varchar(100) DEFAULT NULL COMMENT '第三方登录账号ID',
 | 
			
		||||
  `platform` varchar(30) DEFAULT NULL COMMENT '登录平台',
 | 
			
		||||
  `created_at` datetime NOT NULL,
 | 
			
		||||
  `updated_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 转存表中的数据 `chatgpt_users`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
INSERT INTO `chatgpt_users` (`id`, `username`, `mobile`, `email`, `nickname`, `password`, `avatar`, `salt`, `power`, `expired_time`, `status`, `chat_config_json`, `chat_roles_json`, `chat_models_json`, `last_login_at`, `vip`, `last_login_ip`, `openid`, `platform`, `created_at`, `updated_at`) VALUES
 | 
			
		||||
(4, '18888888888', '18575670125', 'yangjian@pvc123.com', '极客学长', 'ccc3fb7ab61b8b5d096a4a166ae21d121fc38c71bbd1be6173d9ab973214a63b', 'http://localhost:5678/static/upload/2024/5/1715651569509929.png', 'ueedue5l', 4710, 0, 1, '{\"api_keys\":{\"Azure\":\"\",\"ChatGLM\":\"\",\"OpenAI\":\"\"}}', '[\"red_book\",\"gpt\",\"seller\",\"artist\",\"lu_xun\",\"girl_friend\",\"psychiatrist\",\"teacher\",\"programmer\",\"test\",\"qing_gan_da_shi\",\"english_trainer\",\"elon_musk\",\"kong_zi\"]', '[1,11]', 1725853969, 1, '::1', 'oCs0t64FaOLfiTbHZpOqk3aUp_94', NULL, '2023-06-12 16:47:17', '2024-09-09 11:52:49');
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_user_login_logs`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_user_login_logs`;
 | 
			
		||||
CREATE TABLE `chatgpt_user_login_logs` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户ID',
 | 
			
		||||
  `username` varchar(30) NOT NULL COMMENT '用户名',
 | 
			
		||||
  `login_ip` char(16) NOT NULL COMMENT '登录IP',
 | 
			
		||||
  `login_address` varchar(30) NOT NULL COMMENT '登录地址',
 | 
			
		||||
  `created_at` datetime NOT NULL,
 | 
			
		||||
  `updated_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户登录日志';
 | 
			
		||||
 | 
			
		||||
-- --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的结构 `chatgpt_video_jobs`
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
DROP TABLE IF EXISTS `chatgpt_video_jobs`;
 | 
			
		||||
CREATE TABLE `chatgpt_video_jobs` (
 | 
			
		||||
  `id` int NOT NULL,
 | 
			
		||||
  `user_id` int NOT NULL COMMENT '用户 ID',
 | 
			
		||||
  `channel` varchar(100) NOT NULL COMMENT '渠道',
 | 
			
		||||
  `task_id` varchar(100) NOT NULL COMMENT '任务 ID',
 | 
			
		||||
  `type` varchar(20) DEFAULT NULL COMMENT '任务类型,luma,runway,cogvideo',
 | 
			
		||||
  `prompt` varchar(2000) NOT NULL COMMENT '提示词',
 | 
			
		||||
  `prompt_ext` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '优化后提示词',
 | 
			
		||||
  `cover_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '封面图地址',
 | 
			
		||||
  `video_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '视频地址',
 | 
			
		||||
  `water_url` varchar(512) DEFAULT NULL COMMENT '带水印的视频地址',
 | 
			
		||||
  `progress` smallint DEFAULT '0' COMMENT '任务进度',
 | 
			
		||||
  `publish` tinyint(1) NOT NULL COMMENT '是否发布',
 | 
			
		||||
  `err_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '错误信息',
 | 
			
		||||
  `raw_data` text COMMENT '原始数据',
 | 
			
		||||
  `params` varchar(512) DEFAULT NULL COMMENT '参数JSON',
 | 
			
		||||
  `power` smallint NOT NULL DEFAULT '0' COMMENT '消耗算力',
 | 
			
		||||
  `created_at` datetime NOT NULL
 | 
			
		||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='MidJourney 任务表';
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 转储表的索引
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_admin_users`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_admin_users`
 | 
			
		||||
  ADD PRIMARY KEY (`id`) USING BTREE,
 | 
			
		||||
  ADD UNIQUE KEY `username` (`username`) USING BTREE;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_api_keys`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_api_keys`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_chat_history`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_chat_history`
 | 
			
		||||
  ADD PRIMARY KEY (`id`),
 | 
			
		||||
  ADD KEY `chat_id` (`chat_id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_chat_items`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_chat_items`
 | 
			
		||||
  ADD PRIMARY KEY (`id`),
 | 
			
		||||
  ADD UNIQUE KEY `chat_id` (`chat_id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_chat_models`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_chat_models`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_chat_roles`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_chat_roles`
 | 
			
		||||
  ADD PRIMARY KEY (`id`),
 | 
			
		||||
  ADD UNIQUE KEY `marker` (`marker`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_configs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_configs`
 | 
			
		||||
  ADD PRIMARY KEY (`id`),
 | 
			
		||||
  ADD UNIQUE KEY `marker` (`marker`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_dall_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_dall_jobs`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_files`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_files`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_functions`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_functions`
 | 
			
		||||
  ADD PRIMARY KEY (`id`),
 | 
			
		||||
  ADD UNIQUE KEY `name` (`name`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_invite_codes`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_invite_codes`
 | 
			
		||||
  ADD PRIMARY KEY (`id`),
 | 
			
		||||
  ADD UNIQUE KEY `code` (`code`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_invite_logs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_invite_logs`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_menus`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_menus`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_mj_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_mj_jobs`
 | 
			
		||||
  ADD PRIMARY KEY (`id`),
 | 
			
		||||
  ADD UNIQUE KEY `task_id` (`task_id`),
 | 
			
		||||
  ADD KEY `message_id` (`message_id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_orders`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_orders`
 | 
			
		||||
  ADD PRIMARY KEY (`id`),
 | 
			
		||||
  ADD UNIQUE KEY `order_no` (`order_no`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_power_logs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_power_logs`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_products`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_products`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_redeems`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_redeems`
 | 
			
		||||
  ADD PRIMARY KEY (`id`),
 | 
			
		||||
  ADD UNIQUE KEY `code` (`code`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_sd_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_sd_jobs`
 | 
			
		||||
  ADD PRIMARY KEY (`id`),
 | 
			
		||||
  ADD UNIQUE KEY `task_id` (`task_id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_suno_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_suno_jobs`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_users`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_users`
 | 
			
		||||
  ADD PRIMARY KEY (`id`),
 | 
			
		||||
  ADD UNIQUE KEY `username` (`username`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_user_login_logs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_user_login_logs`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 表的索引 `chatgpt_video_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_video_jobs`
 | 
			
		||||
  ADD PRIMARY KEY (`id`);
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 在导出的表使用AUTO_INCREMENT
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_admin_users`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_admin_users`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=113;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_api_keys`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_api_keys`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_chat_history`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_chat_history`
 | 
			
		||||
  MODIFY `id` bigint NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_chat_items`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_chat_items`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_chat_models`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_chat_models`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=49;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_chat_roles`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_chat_roles`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=132;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_configs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_configs`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_dall_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_dall_jobs`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_files`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_files`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_functions`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_functions`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_invite_codes`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_invite_codes`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_invite_logs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_invite_logs`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_menus`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_menus`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_mj_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_mj_jobs`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_orders`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_orders`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_power_logs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_power_logs`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_products`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_products`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_redeems`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_redeems`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_sd_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_sd_jobs`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_suno_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_suno_jobs`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_users`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_users`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=40;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_user_login_logs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_user_login_logs`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- 使用表AUTO_INCREMENT `chatgpt_video_jobs`
 | 
			
		||||
--
 | 
			
		||||
ALTER TABLE `chatgpt_video_jobs`
 | 
			
		||||
  MODIFY `id` int NOT NULL AUTO_INCREMENT;
 | 
			
		||||
COMMIT;
 | 
			
		||||
 | 
			
		||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
 | 
			
		||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
 | 
			
		||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
 | 
			
		||||
@@ -58,7 +58,7 @@ services:
 | 
			
		||||
 | 
			
		||||
    # 后端 API 程序
 | 
			
		||||
  geekai-api:
 | 
			
		||||
    image: registry.cn-shenzhen.aliyuncs.com/geekmaster/geekai-plus-api:v4.1.2-amd64
 | 
			
		||||
    image: registry.cn-shenzhen.aliyuncs.com/geekmaster/geekai-plus-api:v4.1.3-amd64
 | 
			
		||||
    container_name: geekai-api
 | 
			
		||||
    restart: always
 | 
			
		||||
    depends_on:
 | 
			
		||||
@@ -80,7 +80,7 @@ services:
 | 
			
		||||
 | 
			
		||||
  # 前端应用
 | 
			
		||||
  geekai-web:
 | 
			
		||||
    image: registry.cn-shenzhen.aliyuncs.com/geekmaster/geekai-plus-web:v4.1.2-amd64
 | 
			
		||||
    image: registry.cn-shenzhen.aliyuncs.com/geekmaster/geekai-plus-web:v4.1.3-amd64
 | 
			
		||||
    container_name: geekai-web
 | 
			
		||||
    restart: always
 | 
			
		||||
    depends_on:
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,6 @@ VUE_APP_ADMIN_USER=admin
 | 
			
		||||
VUE_APP_ADMIN_PASS=admin123
 | 
			
		||||
VUE_APP_KEY_PREFIX=GeekAI_DEV_
 | 
			
		||||
VUE_APP_TITLE="Geek-AI 创作系统"
 | 
			
		||||
VUE_APP_VERSION=v4.1.3
 | 
			
		||||
VUE_APP_VERSION=v4.1.4
 | 
			
		||||
VUE_APP_DOCS_URL=https://docs.geekai.me
 | 
			
		||||
VUE_APP_GIT_URL=https://github.com/yangjian102621/geekai
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
VUE_APP_API_HOST=
 | 
			
		||||
VUE_APP_WS_HOST=
 | 
			
		||||
VUE_APP_KEY_PREFIX=GeekAI_
 | 
			
		||||
VUE_APP_VERSION=v4.1.3
 | 
			
		||||
VUE_APP_VERSION=v4.1.4
 | 
			
		||||
VUE_APP_DOCS_URL=https://docs.geekai.me
 | 
			
		||||
VUE_APP_GIT_URL=https://github.com/yangjian102621/geekai
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								web/public/images/failed.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								web/public/images/failed.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 35 KiB  | 
@@ -49,8 +49,9 @@
 | 
			
		||||
 | 
			
		||||
      .btn-swap {
 | 
			
		||||
        margin-right 10px
 | 
			
		||||
        .icon{
 | 
			
		||||
          fill #fff
 | 
			
		||||
        .icon-exchange{
 | 
			
		||||
          color #ffffff
 | 
			
		||||
          cursor pointer
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
@@ -135,12 +136,14 @@
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .list-box {
 | 
			
		||||
      padding 0 0 0 20px
 | 
			
		||||
      padding 0
 | 
			
		||||
      .item {
 | 
			
		||||
        display flex
 | 
			
		||||
        flex-flow row
 | 
			
		||||
        align-items center
 | 
			
		||||
        padding 5px 0
 | 
			
		||||
        height 100px
 | 
			
		||||
        padding 10px 15px
 | 
			
		||||
        border-radius 10px
 | 
			
		||||
        cursor pointer
 | 
			
		||||
        margin-bottom 10px
 | 
			
		||||
 | 
			
		||||
@@ -210,45 +213,28 @@
 | 
			
		||||
          flex-flow column
 | 
			
		||||
          padding 0 20px
 | 
			
		||||
 | 
			
		||||
          .title {
 | 
			
		||||
          .prompt,.failed {
 | 
			
		||||
            padding 6px 0
 | 
			
		||||
            font-size 16px
 | 
			
		||||
            font-weight 700
 | 
			
		||||
            color rgb(250 247 245)
 | 
			
		||||
            a {
 | 
			
		||||
              color rgb(250 247 245)
 | 
			
		||||
              &:hover {
 | 
			
		||||
                text-decoration underline
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            .model {
 | 
			
		||||
              color #E2E8F0
 | 
			
		||||
              background-color #1C1616
 | 
			
		||||
              border 1px solid #8f8f8f
 | 
			
		||||
              font-weight normal
 | 
			
		||||
              font-size 14px
 | 
			
		||||
              padding 1px 3px
 | 
			
		||||
              border-radius 5px
 | 
			
		||||
              margin-left 10px
 | 
			
		||||
 | 
			
		||||
              .iconfont {
 | 
			
		||||
                font-size 12px
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
            max-height 80px
 | 
			
		||||
            line-height 28px
 | 
			
		||||
            overflow hidden
 | 
			
		||||
            text-overflow ellipsis
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          .tags {
 | 
			
		||||
            font-size 14px
 | 
			
		||||
            color #d1d1d1
 | 
			
		||||
            padding 3px 0
 | 
			
		||||
          .prompt {
 | 
			
		||||
            color rgb(250 247 245)
 | 
			
		||||
          }
 | 
			
		||||
          .failed {
 | 
			
		||||
            color #E4696B
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .right {
 | 
			
		||||
          display flex
 | 
			
		||||
          justify-content right
 | 
			
		||||
          min-width 200px;
 | 
			
		||||
          font-size 14px
 | 
			
		||||
          padding 0 15px
 | 
			
		||||
          padding 0
 | 
			
		||||
 | 
			
		||||
          .tools {
 | 
			
		||||
            display flex
 | 
			
		||||
@@ -262,6 +248,7 @@
 | 
			
		||||
 | 
			
		||||
              .text {
 | 
			
		||||
                margin-right 10px
 | 
			
		||||
                color #e1e1e1
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@@ -272,52 +259,18 @@
 | 
			
		||||
              color #726E6C
 | 
			
		||||
 | 
			
		||||
              &:hover {
 | 
			
		||||
                background #3C3737
 | 
			
		||||
                background #5f5958
 | 
			
		||||
                color #e1e1e1
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
              .downloading {
 | 
			
		||||
                width 16px
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      .task {
 | 
			
		||||
        height 100px
 | 
			
		||||
        background-color #2A2525
 | 
			
		||||
        display flex
 | 
			
		||||
        align-items center
 | 
			
		||||
        margin-bottom 10px
 | 
			
		||||
        .left {
 | 
			
		||||
          display flex
 | 
			
		||||
          justify-content left
 | 
			
		||||
          align-items center
 | 
			
		||||
          padding 20px
 | 
			
		||||
          width 320px
 | 
			
		||||
          .title {
 | 
			
		||||
            font-size 14px
 | 
			
		||||
            color #e1e1e1
 | 
			
		||||
            white-space: nowrap; /* 防止文字换行 */
 | 
			
		||||
            overflow: hidden; /* 隐藏溢出的内容 */
 | 
			
		||||
            text-overflow: ellipsis; /* 用省略号表示溢出的内容 */
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        .center {
 | 
			
		||||
          display flex
 | 
			
		||||
          width 100%
 | 
			
		||||
          justify-content center
 | 
			
		||||
          .failed {
 | 
			
		||||
            display flex
 | 
			
		||||
            align-items center
 | 
			
		||||
            color #E4696B
 | 
			
		||||
            font-size 14px
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        .right {
 | 
			
		||||
          display flex
 | 
			
		||||
          width 100px
 | 
			
		||||
          justify-content center
 | 
			
		||||
          align-items center
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .pagination {
 | 
			
		||||
@@ -326,67 +279,67 @@
 | 
			
		||||
      justify-content center
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .videos {
 | 
			
		||||
      .item {
 | 
			
		||||
        margin-bottom 20px
 | 
			
		||||
 | 
			
		||||
        .video-box {
 | 
			
		||||
          width 100%
 | 
			
		||||
          aspect-ratio: 16/9;
 | 
			
		||||
          border-radius 10px
 | 
			
		||||
          video,img {
 | 
			
		||||
            width: 100%;
 | 
			
		||||
            height: 100%;
 | 
			
		||||
            object-fit: cover;
 | 
			
		||||
            border-radius 10px
 | 
			
		||||
            cursor pointer
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        .video-name {
 | 
			
		||||
          color #e1e1e1
 | 
			
		||||
          font-size 16px
 | 
			
		||||
          white-space nowrap
 | 
			
		||||
          overflow hidden
 | 
			
		||||
          text-overflow ellipsis
 | 
			
		||||
          padding 6px 0
 | 
			
		||||
          text-align center
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .opts {
 | 
			
		||||
          display flex
 | 
			
		||||
          justify-content center
 | 
			
		||||
          .btn {
 | 
			
		||||
            margin-right 10px
 | 
			
		||||
            background-color hsla(0,0%,100%,.15)
 | 
			
		||||
            border none
 | 
			
		||||
            border-radius 20px
 | 
			
		||||
            padding 3px 15px
 | 
			
		||||
            cursor pointer
 | 
			
		||||
            color #ffffff
 | 
			
		||||
            font-size 14px
 | 
			
		||||
 | 
			
		||||
            .iconfont {
 | 
			
		||||
              font-size 11px
 | 
			
		||||
              position relative
 | 
			
		||||
              margin-right 5px
 | 
			
		||||
              top -2px
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            .el-image {
 | 
			
		||||
              width 14px
 | 
			
		||||
              height 14px
 | 
			
		||||
              margin-right 5px
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            &:hover {
 | 
			
		||||
              background-color hsla(0,0%,100%,.2)
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    //.videos {
 | 
			
		||||
    //  .item {
 | 
			
		||||
    //    margin-bottom 20px
 | 
			
		||||
    //
 | 
			
		||||
    //    .video-box {
 | 
			
		||||
    //      width 100%
 | 
			
		||||
    //      aspect-ratio: 16/9;
 | 
			
		||||
    //      border-radius 10px
 | 
			
		||||
    //      video,img {
 | 
			
		||||
    //        width: 100%;
 | 
			
		||||
    //        height: 100%;
 | 
			
		||||
    //        object-fit: cover;
 | 
			
		||||
    //        border-radius 10px
 | 
			
		||||
    //        cursor pointer
 | 
			
		||||
    //      }
 | 
			
		||||
    //    }
 | 
			
		||||
    //
 | 
			
		||||
    //
 | 
			
		||||
    //    .video-name {
 | 
			
		||||
    //      color #e1e1e1
 | 
			
		||||
    //      font-size 16px
 | 
			
		||||
    //      white-space nowrap
 | 
			
		||||
    //      overflow hidden
 | 
			
		||||
    //      text-overflow ellipsis
 | 
			
		||||
    //      padding 6px 0
 | 
			
		||||
    //      text-align center
 | 
			
		||||
    //    }
 | 
			
		||||
    //
 | 
			
		||||
    //    .opts {
 | 
			
		||||
    //      display flex
 | 
			
		||||
    //      justify-content center
 | 
			
		||||
    //      .btn {
 | 
			
		||||
    //        margin-right 10px
 | 
			
		||||
    //        background-color hsla(0,0%,100%,.15)
 | 
			
		||||
    //        border none
 | 
			
		||||
    //        border-radius 20px
 | 
			
		||||
    //        padding 3px 15px
 | 
			
		||||
    //        cursor pointer
 | 
			
		||||
    //        color #ffffff
 | 
			
		||||
    //        font-size 14px
 | 
			
		||||
    //
 | 
			
		||||
    //        .iconfont {
 | 
			
		||||
    //          font-size 11px
 | 
			
		||||
    //          position relative
 | 
			
		||||
    //          margin-right 5px
 | 
			
		||||
    //          top -2px
 | 
			
		||||
    //        }
 | 
			
		||||
    //
 | 
			
		||||
    //        .el-image {
 | 
			
		||||
    //          width 14px
 | 
			
		||||
    //          height 14px
 | 
			
		||||
    //          margin-right 5px
 | 
			
		||||
    //        }
 | 
			
		||||
    //
 | 
			
		||||
    //        &:hover {
 | 
			
		||||
    //          background-color hsla(0,0%,100%,.2)
 | 
			
		||||
    //        }
 | 
			
		||||
    //      }
 | 
			
		||||
    //    }
 | 
			
		||||
    //  }
 | 
			
		||||
    //}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .btn {
 | 
			
		||||
 
 | 
			
		||||
@@ -303,7 +303,12 @@
 | 
			
		||||
              color #726E6C
 | 
			
		||||
 | 
			
		||||
              &:hover {
 | 
			
		||||
                background #3C3737
 | 
			
		||||
                background #5f5958
 | 
			
		||||
                color #e1e1e1
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
              .downloading {
 | 
			
		||||
                width 16px
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
@font-face {
 | 
			
		||||
  font-family: "iconfont"; /* Project id 4125778 */
 | 
			
		||||
  src: url('iconfont.woff2?t=1725000514997') format('woff2'),
 | 
			
		||||
       url('iconfont.woff?t=1725000514997') format('woff'),
 | 
			
		||||
       url('iconfont.ttf?t=1725000514997') format('truetype');
 | 
			
		||||
  src: url('iconfont.woff2?t=1725929120246') format('woff2'),
 | 
			
		||||
       url('iconfont.woff?t=1725929120246') format('woff'),
 | 
			
		||||
       url('iconfont.ttf?t=1725929120246') format('truetype');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.iconfont {
 | 
			
		||||
@@ -13,6 +13,14 @@
 | 
			
		||||
  -moz-osx-font-smoothing: grayscale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.icon-luma:before {
 | 
			
		||||
  content: "\e704";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.icon-exchange:before {
 | 
			
		||||
  content: "\e6f5";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.icon-merge:before {
 | 
			
		||||
  content: "\e901";
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -5,6 +5,20 @@
 | 
			
		||||
  "css_prefix_text": "icon-",
 | 
			
		||||
  "description": "",
 | 
			
		||||
  "glyphs": [
 | 
			
		||||
    {
 | 
			
		||||
      "icon_id": "41645421",
 | 
			
		||||
      "name": "luma-logo",
 | 
			
		||||
      "font_class": "luma",
 | 
			
		||||
      "unicode": "e704",
 | 
			
		||||
      "unicode_decimal": 59140
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "icon_id": "7573248",
 | 
			
		||||
      "name": "exchange",
 | 
			
		||||
      "font_class": "exchange",
 | 
			
		||||
      "unicode": "e6f5",
 | 
			
		||||
      "unicode_decimal": 59125
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "icon_id": "8094809",
 | 
			
		||||
      "name": "merge-cells",
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -13,11 +13,21 @@
 | 
			
		||||
      <div class="bar"></div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="text">
 | 
			
		||||
      <slot>正在生成歌曲</slot>
 | 
			
		||||
      <slot>{{message}}</slot>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
// eslint-disable-next-line
 | 
			
		||||
defineProps({
 | 
			
		||||
  message: {
 | 
			
		||||
    type: String,
 | 
			
		||||
    default: '任务正在执行',
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="stylus">
 | 
			
		||||
.container {
 | 
			
		||||
  display: flex;
 | 
			
		||||
 
 | 
			
		||||
@@ -240,7 +240,7 @@ const routes = [
 | 
			
		||||
    {
 | 
			
		||||
        name: 'mobile',
 | 
			
		||||
        path: '/mobile',
 | 
			
		||||
        meta: {title: 'Geek-AI v4.0'},
 | 
			
		||||
        meta: {title: '首页'},
 | 
			
		||||
        component: () => import('@/views/mobile/Home.vue'),
 | 
			
		||||
        redirect: '/mobile/index',
 | 
			
		||||
        children: [
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,8 @@
 | 
			
		||||
 * Util lib functions
 | 
			
		||||
 */
 | 
			
		||||
import {showConfirmDialog} from "vant";
 | 
			
		||||
import {httpDownload} from "@/utils/http";
 | 
			
		||||
import {showMessageError} from "@/utils/dialog";
 | 
			
		||||
 | 
			
		||||
// generate a random string
 | 
			
		||||
export function randString(length) {
 | 
			
		||||
@@ -221,10 +223,10 @@ export function showLoginDialog(router) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const replaceImg =(img) => {
 | 
			
		||||
    const devhost = "172.22.11.69"
 | 
			
		||||
    const localhost = "localhost"
 | 
			
		||||
    const devHost = process.env.VUE_APP_API_HOST
 | 
			
		||||
    const localhost = "http://localhost:5678"
 | 
			
		||||
    if (img.includes(localhost)) {
 | 
			
		||||
        return img?.replace(localhost, devhost)
 | 
			
		||||
        return img?.replace(localhost, devHost)
 | 
			
		||||
    }
 | 
			
		||||
    return img
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -272,10 +272,22 @@ const tools = ref([])
 | 
			
		||||
const toolSelected = ref([])
 | 
			
		||||
const loadHistory = ref(false)
 | 
			
		||||
 | 
			
		||||
// 初始化角色ID参数
 | 
			
		||||
if (router.currentRoute.value.query.role_id) {
 | 
			
		||||
  roleId.value = parseInt(router.currentRoute.value.query.role_id)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 初始化 ChatID
 | 
			
		||||
chatId.value = router.currentRoute.value.params.id
 | 
			
		||||
if (!chatId.value) {
 | 
			
		||||
  chatId.value = UUID()
 | 
			
		||||
}else { // 查询对话信息
 | 
			
		||||
  httpGet("/api/chat/detail", {chat_id: chatId.value}).then(res => {
 | 
			
		||||
    roleId.value = res.data.role_id
 | 
			
		||||
    modelID.value = res.data.model_id
 | 
			
		||||
  }).catch(e => {
 | 
			
		||||
    console.error("获取对话信息失败:"+e.message)
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if (isMobile()) {
 | 
			
		||||
@@ -344,59 +356,46 @@ onUnmounted(() => {
 | 
			
		||||
 | 
			
		||||
// 初始化数据
 | 
			
		||||
const initData = () => {
 | 
			
		||||
  // 检查会话
 | 
			
		||||
  checkSession().then((user) => {
 | 
			
		||||
    loginUser.value = user
 | 
			
		||||
    isLogin.value = true
 | 
			
		||||
 | 
			
		||||
    // 获取会话列表
 | 
			
		||||
    httpGet("/api/chat/list").then((res) => {
 | 
			
		||||
      if (res.data) {
 | 
			
		||||
        chatList.value = res.data;
 | 
			
		||||
        allChats.value = res.data;
 | 
			
		||||
      }
 | 
			
		||||
      if (router.currentRoute.value.query.role_id) {
 | 
			
		||||
        roleId.value = parseInt(router.currentRoute.value.query.role_id)
 | 
			
		||||
      }
 | 
			
		||||
      // 加载模型
 | 
			
		||||
      httpGet('/api/model/list').then(res => {
 | 
			
		||||
        models.value = res.data
 | 
			
		||||
        modelID.value = models.value[0].id
 | 
			
		||||
        // 加载角色列表
 | 
			
		||||
        httpGet(`/api/role/list`,{id:roleId.value}).then((res) => {
 | 
			
		||||
          roles.value = res.data;
 | 
			
		||||
          if (!roleId.value) {
 | 
			
		||||
            roleId.value = roles.value[0]['id']
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          newChat();
 | 
			
		||||
        }).catch((e) => {
 | 
			
		||||
          ElMessage.error('获取聊天角色失败: ' + e.messages)
 | 
			
		||||
        })
 | 
			
		||||
      }).catch(e => {
 | 
			
		||||
        ElMessage.error("加载模型失败: " + e.message)
 | 
			
		||||
      })
 | 
			
		||||
    }).catch(() => {
 | 
			
		||||
      ElMessage.error("加载会话列表失败!")
 | 
			
		||||
    })
 | 
			
		||||
  }).catch(() => {
 | 
			
		||||
    // 加载模型
 | 
			
		||||
    httpGet('/api/model/list',{id:roleId.value}).then(res => {
 | 
			
		||||
      models.value = res.data
 | 
			
		||||
  // 加载模型
 | 
			
		||||
  httpGet('/api/model/list').then(res => {
 | 
			
		||||
    models.value = res.data
 | 
			
		||||
    if (!modelID.value) {
 | 
			
		||||
      modelID.value = models.value[0].id
 | 
			
		||||
    }).catch(e => {
 | 
			
		||||
      ElMessage.error("加载模型失败: " + e.message)
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    // 加载角色列表
 | 
			
		||||
    httpGet(`/api/role/list`).then((res) => {
 | 
			
		||||
    httpGet(`/api/role/list`,{id:roleId.value}).then((res) => {
 | 
			
		||||
      roles.value = res.data;
 | 
			
		||||
      roleId.value = roles.value[0]['id'];
 | 
			
		||||
      if (!roleId.value) {
 | 
			
		||||
        roleId.value = roles.value[0]['id']
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // 如果登录状态就创建对话连接
 | 
			
		||||
      checkSession().then((user) => {
 | 
			
		||||
        loginUser.value = user
 | 
			
		||||
        isLogin.value = true
 | 
			
		||||
 | 
			
		||||
        newChat();
 | 
			
		||||
      })
 | 
			
		||||
 | 
			
		||||
    }).catch((e) => {
 | 
			
		||||
      ElMessage.error('获取聊天角色失败: ' + e.messages)
 | 
			
		||||
    })
 | 
			
		||||
  }).catch(e => {
 | 
			
		||||
    ElMessage.error("加载模型失败: " + e.message)
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  // 获取会话列表
 | 
			
		||||
  httpGet("/api/chat/list").then((res) => {
 | 
			
		||||
    if (res.data) {
 | 
			
		||||
      chatList.value = res.data;
 | 
			
		||||
      allChats.value = res.data;
 | 
			
		||||
    }
 | 
			
		||||
  }).catch(() => {
 | 
			
		||||
    ElMessage.error("加载会话列表失败!")
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  // 允许在输入框粘贴文件
 | 
			
		||||
  inputRef.value.addEventListener('paste', (event) => {
 | 
			
		||||
    const items = (event.clipboardData || window.clipboardData).items;
 | 
			
		||||
    let fileFound = false;
 | 
			
		||||
@@ -750,12 +749,16 @@ const sendMessage = function () {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (prompt.value.trim().length === 0 || canSend.value === false) {
 | 
			
		||||
    showMessageError("请输入要发送的消息!")
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
  // 如果携带了文件,则串上文件地址
 | 
			
		||||
  let content = prompt.value
 | 
			
		||||
  if (files.value.length > 0) {
 | 
			
		||||
  if (files.value.length === 1) {
 | 
			
		||||
    content += files.value.map(file => file.url).join(" ")
 | 
			
		||||
  } else if (files.value.length > 1) {
 | 
			
		||||
    showMessageError("当前只支持一个文件!")
 | 
			
		||||
    return false
 | 
			
		||||
  }
 | 
			
		||||
  // 追加消息
 | 
			
		||||
  chatData.value.push({
 | 
			
		||||
 
 | 
			
		||||
@@ -124,6 +124,7 @@ const iconMap =ref(
 | 
			
		||||
      "/apps": "icon-app",
 | 
			
		||||
      "/member": "icon-vip-user",
 | 
			
		||||
      "/invite": "icon-share",
 | 
			
		||||
      "/luma": "icon-luma",
 | 
			
		||||
    }
 | 
			
		||||
)
 | 
			
		||||
const bgStyle = {}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,10 +7,8 @@
 | 
			
		||||
            <el-image :src="replaceImg(img)" fit="cover"/>
 | 
			
		||||
            <el-icon @click="remove(img)"><CircleCloseFilled /></el-icon>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="btn-swap" v-if="images.length == 2 && index == 0">
 | 
			
		||||
            <svg class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" @click="switchReverse">
 | 
			
		||||
              <path d="M96 416h832c0.32 0 0.576-0.192 0.896-0.192a30.656 30.656 0 0 0 30.976-30.976c-0.064-0.256 0.128-0.512 0.128-0.832a31.424 31.424 0 0 0-14.912-26.368l-188.48-188.48a30.72 30.72 0 1 0-43.456 43.456L852.544 352H96a32 32 0 0 0 0 64z m832 192H96c-0.32 0-0.576 0.192-0.896 0.192a30.528 30.528 0 0 0-30.976 30.976c0.064 0.256-0.128 0.512-0.128 0.832 0 11.264 6.144 20.672 14.912 26.368l188.48 188.48a30.72 30.72 0 1 0 43.456-43.456L171.456 672H928a32 32 0 0 0 0-64z"></path>
 | 
			
		||||
            </svg>
 | 
			
		||||
          <div class="btn-swap" v-if="images.length === 2 && index === 0">
 | 
			
		||||
            <i class="iconfont icon-exchange" @click="switchReverse"></i>
 | 
			
		||||
          </div>
 | 
			
		||||
        </template>
 | 
			
		||||
      </div>
 | 
			
		||||
@@ -57,45 +55,48 @@
 | 
			
		||||
    <el-container class="video-container" v-loading="loading" element-loading-background="rgba(100,100,100,0.3)">
 | 
			
		||||
      <h2 class="h-title">你的作品</h2>
 | 
			
		||||
 | 
			
		||||
      <!-- <el-row :gutter="20" class="videos">
 | 
			
		||||
        <el-col :span="8" class="item" :key="item.id" v-for="item in videos">
 | 
			
		||||
          <div class="video-box" @mouseover="item.playing = true" @mouseout="item.playing = false">
 | 
			
		||||
            <img :src="item.cover"  :alt="item.name" v-show="!item.playing"/>
 | 
			
		||||
            <video :src="item.url"  preload="auto" :autoplay="true" loop="loop" muted="muted" v-show="item.playing">
 | 
			
		||||
              您的浏览器不支持视频播放
 | 
			
		||||
            </video>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="video-name">{{item.name}}</div>
 | 
			
		||||
          <div class="opts">
 | 
			
		||||
            <button class="btn" @click="download(item)" :disabled="item.downloading">
 | 
			
		||||
              <i class="iconfont icon-download" v-if="!item.downloading"></i>
 | 
			
		||||
              <el-image src="/images/loading.gif" fit="cover" v-else />
 | 
			
		||||
              <span>下载</span>
 | 
			
		||||
            </button>
 | 
			
		||||
          </div>
 | 
			
		||||
        </el-col>
 | 
			
		||||
      </el-row> -->
 | 
			
		||||
<!--      <el-row :gutter="20" class="videos" v-if="!noData">-->
 | 
			
		||||
<!--        <el-col :span="8" class="item" :key="item.id" v-for="item in videos">-->
 | 
			
		||||
<!--          <div class="video-box" @mouseover="item.playing = true" @mouseout="item.playing = false">-->
 | 
			
		||||
<!--            <img :src="item.cover"  :alt="item.name" v-show="!item.playing"/>-->
 | 
			
		||||
<!--            <video :src="item.url"  preload="auto" :autoplay="true" loop="loop" muted="muted" v-show="item.playing">-->
 | 
			
		||||
<!--              您的浏览器不支持视频播放-->
 | 
			
		||||
<!--            </video>-->
 | 
			
		||||
<!--          </div>-->
 | 
			
		||||
<!--          <div class="video-name">{{item.name}}</div>-->
 | 
			
		||||
<!--          <div class="opts">-->
 | 
			
		||||
<!--            <button class="btn" @click="download(item)" :disabled="item.downloading">-->
 | 
			
		||||
<!--              <i class="iconfont icon-download" v-if="!item.downloading"></i>-->
 | 
			
		||||
<!--              <el-image src="/images/loading.gif" fit="cover" v-else />-->
 | 
			
		||||
<!--              <span>下载</span>-->
 | 
			
		||||
<!--            </button>-->
 | 
			
		||||
<!--          </div>-->
 | 
			
		||||
<!--        </el-col>-->
 | 
			
		||||
<!--      </el-row>-->
 | 
			
		||||
 | 
			
		||||
      <div class="list-box" v-if="!noData">
 | 
			
		||||
        <div v-for="item in list" :key="item.id">
 | 
			
		||||
          <div class="item" v-if="item.progress === 100">
 | 
			
		||||
          <div class="item">
 | 
			
		||||
            <div class="left">
 | 
			
		||||
              <div class="container">
 | 
			
		||||
                <video class="video" :src="replaceImg(item.video_url)"  preload="auto" loop="loop" muted="muted">
 | 
			
		||||
                  您的浏览器不支持视频播放
 | 
			
		||||
                </video>
 | 
			
		||||
                <!-- <el-image :src="item.cover_url" fit="cover" /> -->
 | 
			
		||||
                <!-- <div class="duration">{{formatTime(item.duration)}}</div> -->
 | 
			
		||||
                <button class="play" @click="play(item)">
 | 
			
		||||
                  <img src="/images/play.svg" alt=""/>
 | 
			
		||||
                </button>
 | 
			
		||||
                <div v-if="item.progress === 100">
 | 
			
		||||
                  <video class="video" :src="replaceImg(item.video_url)"  preload="auto" loop="loop" muted="muted">
 | 
			
		||||
                    您的浏览器不支持视频播放
 | 
			
		||||
                  </video>
 | 
			
		||||
                  <button class="play" @click="play(item)">
 | 
			
		||||
                    <img src="/images/play.svg" alt=""/>
 | 
			
		||||
                  </button>
 | 
			
		||||
                </div>
 | 
			
		||||
                <el-image :src="item.cover_url" fit="cover" v-else-if="item.progress > 100" />
 | 
			
		||||
                <generating message="正在生成视频" v-else />
 | 
			
		||||
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="center">
 | 
			
		||||
              <div class="title">{{item.prompt}}</div>
 | 
			
		||||
              <div class="tags" v-if="item.prompt_ext">{{item.prompt_ext}}</div>
 | 
			
		||||
              <div class="failed" v-if="item.progress === 101">任务执行失败:{{item.err_msg}},任务提示词:{{item.prompt}}</div>
 | 
			
		||||
              <div class="prompt" v-else>{{item.prompt}}</div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="right">
 | 
			
		||||
            <div class="right" v-if="item.progress === 100">
 | 
			
		||||
              <div class="tools">
 | 
			
		||||
                <button class="btn btn-publish">
 | 
			
		||||
                  <span class="text">发布</span>
 | 
			
		||||
@@ -105,7 +106,7 @@
 | 
			
		||||
                <el-tooltip effect="light" content="下载视频" placement="top">
 | 
			
		||||
                  <button class="btn btn-icon" @click="download(item)" :disabled="item.downloading">
 | 
			
		||||
                    <i class="iconfont icon-download" v-if="!item.downloading"></i>
 | 
			
		||||
                    <el-image src="/images/loading.gif" fit="cover" v-else />
 | 
			
		||||
                    <el-image src="/images/loading.gif" class="downloading" fit="cover" v-else />
 | 
			
		||||
                  </button>
 | 
			
		||||
                </el-tooltip>
 | 
			
		||||
                <el-tooltip effect="light" content="删除" placement="top">
 | 
			
		||||
@@ -115,32 +116,15 @@
 | 
			
		||||
                </el-tooltip>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="task" v-else>
 | 
			
		||||
            <div style="width: 160px; height: 90px; flex-shrink: 0; display: flex; align-items: center;" v-if="item.params.start_img_url">
 | 
			
		||||
              <el-image style="width: 100%; height: 100%; border-radius: 5px;" :src="replaceImg(item.params.start_img_url)" fit="cover" />
 | 
			
		||||
            </div>            
 | 
			
		||||
            <div class="left">
 | 
			
		||||
              <div class="title">
 | 
			
		||||
                <span v-if="item.title">{{item.title}}</span>
 | 
			
		||||
                <span v-else>{{item.prompt}}</span>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="center">
 | 
			
		||||
              <div class="failed" v-if="item.progress === 101">
 | 
			
		||||
                {{item.err_msg}}
 | 
			
		||||
              </div>
 | 
			
		||||
              <generating v-else>正在生成视频</generating>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="right">
 | 
			
		||||
              <el-button type="info" @click="removeJob(item)" circle>
 | 
			
		||||
            <div class="right-error" v-else>
 | 
			
		||||
              <el-button type="danger" @click="removeJob(item)" circle>
 | 
			
		||||
                <i class="iconfont icon-remove"></i>
 | 
			
		||||
              </el-button>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <el-empty :image-size="100" description="没有任何作品,赶紧去创作吧!" v-else/>
 | 
			
		||||
      <el-empty :image-size="100" description="没有任何作品,赶紧去创作吧!" v-else />
 | 
			
		||||
 | 
			
		||||
      <div class="pagination">
 | 
			
		||||
        <el-pagination v-if="total > pageSize" background
 | 
			
		||||
@@ -170,10 +154,9 @@ import {onMounted, reactive, ref} from "vue";
 | 
			
		||||
import {CircleCloseFilled} from "@element-plus/icons-vue";
 | 
			
		||||
import {httpDownload, httpPost, httpGet} from "@/utils/http";
 | 
			
		||||
import {checkSession} from "@/store/cache";
 | 
			
		||||
import {showMessageError} from "@/utils/dialog";
 | 
			
		||||
import {showMessageError, showMessageOK} from "@/utils/dialog";
 | 
			
		||||
import { replaceImg } from "@/utils/libs"
 | 
			
		||||
import {ElMessage, ElMessageBox} from "element-plus";
 | 
			
		||||
import Clipboard from "clipboard";
 | 
			
		||||
import BlackSwitch from "@/components/ui/BlackSwitch.vue";
 | 
			
		||||
import Generating from "@/components/ui/Generating.vue";
 | 
			
		||||
import BlackDialog from "@/components/ui/BlackDialog.vue";
 | 
			
		||||
@@ -185,50 +168,12 @@ const images = ref([])
 | 
			
		||||
 | 
			
		||||
const formData = reactive({
 | 
			
		||||
  prompt: '',
 | 
			
		||||
  expand_prompt: true,
 | 
			
		||||
  loop: true,
 | 
			
		||||
  expand_prompt: false,
 | 
			
		||||
  loop: false,
 | 
			
		||||
  first_frame_img: '',
 | 
			
		||||
  end_frame_img: ''
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
const videos = ref([
 | 
			
		||||
  {
 | 
			
		||||
    id: 1,
 | 
			
		||||
    name: 'a dancing girl',
 | 
			
		||||
    url: 'https://storage.cdn-luma.com/dream_machine/d133794f-3124-4059-a9f2-e5fed79f0d5b/watermarked_video01944f69966f14d33b6c4486a8cfb8dde.mp4',
 | 
			
		||||
    cover: 'https://storage.cdn-luma.com/dream_machine/d133794f-3124-4059-a9f2-e5fed79f0d5b/video_0_thumb.jpg',
 | 
			
		||||
    playing: false
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    id: 1,
 | 
			
		||||
    name: 'a dancing girl a dancing girl a dancing girl a dancing girl a dancing girl',
 | 
			
		||||
    url: 'https://storage.cdn-luma.com/dream_machine/92efa55a-f381-4161-a999-54f8fe460fca/watermarked_video0e5aad607a0644c66850d1d77022db847.mp4',
 | 
			
		||||
    cover: 'https://storage.cdn-luma.com/dream_machine/92efa55a-f381-4161-a999-54f8fe460fca/video_1_thumb.jpg',
 | 
			
		||||
    playing: false
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    id: 1,
 | 
			
		||||
    name: 'a dancing girl',
 | 
			
		||||
    url: 'https://storage.cdn-luma.com/dream_machine/d133794f-3124-4059-a9f2-e5fed79f0d5b/watermarked_video01944f69966f14d33b6c4486a8cfb8dde.mp4',
 | 
			
		||||
    cover: 'https://storage.cdn-luma.com/dream_machine/d133794f-3124-4059-a9f2-e5fed79f0d5b/video_0_thumb.jpg',
 | 
			
		||||
    playing: false
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    id: 1,
 | 
			
		||||
    name: 'a dancing girl',
 | 
			
		||||
    url: 'https://storage.cdn-luma.com/dream_machine/92efa55a-f381-4161-a999-54f8fe460fca/watermarked_video0e5aad607a0644c66850d1d77022db847.mp4',
 | 
			
		||||
    cover: 'https://storage.cdn-luma.com/dream_machine/92efa55a-f381-4161-a999-54f8fe460fca/video_1_thumb.jpg',
 | 
			
		||||
    playing: false
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    id: 1,
 | 
			
		||||
    name: 'a dancing girl',
 | 
			
		||||
    url: 'https://storage.cdn-luma.com/dream_machine/d133794f-3124-4059-a9f2-e5fed79f0d5b/watermarked_video01944f69966f14d33b6c4486a8cfb8dde.mp4',
 | 
			
		||||
    cover: 'https://storage.cdn-luma.com/dream_machine/d133794f-3124-4059-a9f2-e5fed79f0d5b/video_0_thumb.jpg',
 | 
			
		||||
    playing: false
 | 
			
		||||
  },
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
const socket = ref(null)
 | 
			
		||||
const userId = ref(0)
 | 
			
		||||
const connect = () => {
 | 
			
		||||
@@ -361,20 +306,12 @@ const fetchData = (_page) => {
 | 
			
		||||
  }
 | 
			
		||||
  httpGet("/api/video/list",{page:page.value, page_size:pageSize.value, type: 'luma'}).then(res => {
 | 
			
		||||
    total.value = res.data.total
 | 
			
		||||
    const items = []
 | 
			
		||||
    for (let v of res.data.items) {
 | 
			
		||||
      if (v.progress === 100) {
 | 
			
		||||
        //v.major_model_version = v['raw_data']['major_model_version']
 | 
			
		||||
      }
 | 
			
		||||
      items.push(v)
 | 
			
		||||
    }
 | 
			
		||||
    loading.value = false
 | 
			
		||||
    list.value = items
 | 
			
		||||
    list.value = res.data.items
 | 
			
		||||
    noData.value = list.value.length === 0
 | 
			
		||||
  }).catch(e => {
 | 
			
		||||
  }).catch(() => {
 | 
			
		||||
    loading.value = false
 | 
			
		||||
    noData.value = true
 | 
			
		||||
    showMessageError("获取作品列表失败:"+e.message)
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -384,7 +321,7 @@ const create = () => {
 | 
			
		||||
  const len =  images.value.length;
 | 
			
		||||
  if(len){
 | 
			
		||||
    formData.first_frame_img = images.value[0]
 | 
			
		||||
    if(len == 2){
 | 
			
		||||
    if(len === 2){
 | 
			
		||||
      formData.end_frame_img = images.value[1]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -190,11 +190,10 @@
 | 
			
		||||
                </button>
 | 
			
		||||
 | 
			
		||||
                <el-tooltip effect="light" content="下载歌曲" placement="top">
 | 
			
		||||
                  <a :href="item.audio_url" :download="item.title+'.mp3'" target="_blank">
 | 
			
		||||
                    <button class="btn btn-icon">
 | 
			
		||||
                      <i class="iconfont icon-download"></i>
 | 
			
		||||
                    </button>
 | 
			
		||||
                  </a>
 | 
			
		||||
                  <button class="btn btn-icon" @click="download(item)">
 | 
			
		||||
                    <i class="iconfont icon-download" v-if="!item.downloading"></i>
 | 
			
		||||
                    <el-image src="/images/loading.gif" class="downloading" fit="cover" v-else />
 | 
			
		||||
                  </button>
 | 
			
		||||
                </el-tooltip>
 | 
			
		||||
 | 
			
		||||
                <el-tooltip effect="light" content="获取完整歌曲" placement="top" v-if="item.ref_song">
 | 
			
		||||
@@ -234,7 +233,7 @@
 | 
			
		||||
              <div class="failed" v-if="item.progress === 101">
 | 
			
		||||
                {{item.err_msg}}
 | 
			
		||||
              </div>
 | 
			
		||||
              <generating v-else />
 | 
			
		||||
              <generating v-else message="正在生成歌曲" />
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="right">
 | 
			
		||||
              <el-button type="info" @click="removeJob(item)" circle>
 | 
			
		||||
@@ -299,11 +298,11 @@ import BlackSwitch from "@/components/ui/BlackSwitch.vue";
 | 
			
		||||
import BlackInput from "@/components/ui/BlackInput.vue";
 | 
			
		||||
import MusicPlayer from "@/components/MusicPlayer.vue";
 | 
			
		||||
import {compact} from "lodash";
 | 
			
		||||
import {httpGet, httpPost} from "@/utils/http";
 | 
			
		||||
import {httpDownload, httpGet, httpPost} from "@/utils/http";
 | 
			
		||||
import {showMessageError, showMessageOK} from "@/utils/dialog";
 | 
			
		||||
import {checkSession} from "@/store/cache";
 | 
			
		||||
import {ElMessage, ElMessageBox} from "element-plus";
 | 
			
		||||
import {formatTime} from "@/utils/libs";
 | 
			
		||||
import {formatTime, replaceImg} from "@/utils/libs";
 | 
			
		||||
import Clipboard from "clipboard";
 | 
			
		||||
import BlackDialog from "@/components/ui/BlackDialog.vue";
 | 
			
		||||
import Compressor from "compressorjs";
 | 
			
		||||
@@ -483,6 +482,30 @@ const merge = (item) => {
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 下载歌曲
 | 
			
		||||
const download = (item) => {
 | 
			
		||||
  const url = replaceImg(item.audio_url)
 | 
			
		||||
  const downloadURL = `${process.env.VUE_APP_API_HOST}/api/download?url=${url}`
 | 
			
		||||
  // parse filename
 | 
			
		||||
  const urlObj = new URL(url);
 | 
			
		||||
  const fileName = urlObj.pathname.split('/').pop();
 | 
			
		||||
  item.downloading = true
 | 
			
		||||
  httpDownload(downloadURL).then(response  => {
 | 
			
		||||
    const blob = new Blob([response.data]);
 | 
			
		||||
    const link = document.createElement('a');
 | 
			
		||||
    link.href = URL.createObjectURL(blob);
 | 
			
		||||
    link.download = fileName;
 | 
			
		||||
    document.body.appendChild(link);
 | 
			
		||||
    link.click();
 | 
			
		||||
    document.body.removeChild(link);
 | 
			
		||||
    URL.revokeObjectURL(link.href);
 | 
			
		||||
    item.downloading = false
 | 
			
		||||
  }).catch(() => {
 | 
			
		||||
    showMessageError("下载失败")
 | 
			
		||||
    item.downloading = false
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const uploadAudio = (file) => {
 | 
			
		||||
  const formData = new FormData();
 | 
			
		||||
  formData.append('file', file.file, file.name);
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,8 @@
 | 
			
		||||
    <div class="handle-box">
 | 
			
		||||
      <el-input v-model="query.username" placeholder="账号" class="handle-input mr10"></el-input>
 | 
			
		||||
      <el-button type="primary" :icon="Search" @click="handleSearch">搜索</el-button>
 | 
			
		||||
 | 
			
		||||
      <el-button type="success" :icon="Plus" @click="addUser">新增用户</el-button>
 | 
			
		||||
      <el-button type="danger" :icon="Delete" @click="multipleDelete">删除</el-button>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <el-row>
 | 
			
		||||
@@ -170,8 +170,8 @@
 | 
			
		||||
import {onMounted, reactive, ref} from "vue";
 | 
			
		||||
import {httpGet, httpPost} from "@/utils/http";
 | 
			
		||||
import {ElMessage, ElMessageBox} from "element-plus";
 | 
			
		||||
import {dateFormat, disabledDate, removeArrayItem} from "@/utils/libs";
 | 
			
		||||
import {Plus, Search} from "@element-plus/icons-vue";
 | 
			
		||||
import {dateFormat, disabledDate} from "@/utils/libs";
 | 
			
		||||
import {Delete, Plus, Search} from "@element-plus/icons-vue";
 | 
			
		||||
 | 
			
		||||
// 变量定义
 | 
			
		||||
const users = ref({page: 1, page_size: 15, items: []})
 | 
			
		||||
@@ -281,7 +281,7 @@ const userEdit = function (row) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const addUser = () => {
 | 
			
		||||
  user.value = {}
 | 
			
		||||
  user.value = {chat_id: 0, chat_roles: [], chat_models: []}
 | 
			
		||||
  title.value = '添加用户'
 | 
			
		||||
  showUserEditDialog.value = true
 | 
			
		||||
  add.value = true
 | 
			
		||||
@@ -306,8 +306,36 @@ const saveUser = function () {
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const userIds = ref([])
 | 
			
		||||
const handleSelectionChange = function (rows) {
 | 
			
		||||
  // console.log(rows)
 | 
			
		||||
  userIds.value = []
 | 
			
		||||
  rows.forEach((row) => {
 | 
			
		||||
    userIds.value.push(row.id)
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const multipleDelete = function () {
 | 
			
		||||
  ElMessageBox.confirm(
 | 
			
		||||
      '此操作将会永久删除用户信息和聊天记录,确认操作吗?',
 | 
			
		||||
      '警告',
 | 
			
		||||
      {
 | 
			
		||||
        confirmButtonText: '确定',
 | 
			
		||||
        cancelButtonText: '取消',
 | 
			
		||||
        type: 'warning',
 | 
			
		||||
      }
 | 
			
		||||
  ).then(() => {
 | 
			
		||||
    loading.value = true
 | 
			
		||||
    httpGet('/api/admin/user/remove', {ids: userIds.value}).then(() => {
 | 
			
		||||
      ElMessage.success('操作成功!')
 | 
			
		||||
      fetchUserList(users.value.page, users.value.page_size)
 | 
			
		||||
      loading.value = false
 | 
			
		||||
    }).catch((e) => {
 | 
			
		||||
      ElMessage.error('操作失败,' + e.message)
 | 
			
		||||
      loading.value = false
 | 
			
		||||
    })
 | 
			
		||||
  }).catch(() => {
 | 
			
		||||
    ElMessage.info('操作被取消')
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const resetPass = (row) => {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user