From e971bf6b884d46e94bcca3a4bf5200ffa0a7bc42 Mon Sep 17 00:00:00 2001 From: RockYang Date: Mon, 9 Sep 2024 18:07:10 +0800 Subject: [PATCH] merge luma page code for v4.1.3 --- api/core/app_server.go | 1 + api/handler/sd_handler.go | 2 +- api/handler/suno_handler.go | 2 +- api/handler/upload_handler.go | 2 +- api/handler/video_handler.go | 2 +- api/service/video/luma.go | 14 +- .../geekai_plus-v4.1.3.sql | 283 ++++-- .../data/mysql/init.d/geekai_plus-v4.1.3.sql | 932 ++++++++++++++++++ deploy/docker-compose.yaml | 4 +- web/public/images/failed.jpg | Bin 0 -> 35896 bytes web/src/assets/css/luma.styl | 216 ++-- web/src/assets/iconfont/iconfont.css | 10 +- web/src/assets/iconfont/iconfont.js | 2 +- web/src/assets/iconfont/iconfont.json | 7 + web/src/assets/iconfont/iconfont.ttf | Bin 28724 -> 28980 bytes web/src/assets/iconfont/iconfont.woff | Bin 19136 -> 19320 bytes web/src/assets/iconfont/iconfont.woff2 | Bin 16616 -> 16776 bytes web/src/components/ui/Generating.vue | 12 +- web/src/utils/libs.js | 4 +- web/src/views/ChatPlus.vue | 6 +- web/src/views/Luma.vue | 151 +-- web/src/views/Suno.vue | 2 +- 22 files changed, 1285 insertions(+), 367 deletions(-) rename deploy/data/mysql/init.d/chatgpt_plus-v4.1.0.sql => database/geekai_plus-v4.1.3.sql (65%) create mode 100644 deploy/data/mysql/init.d/geekai_plus-v4.1.3.sql create mode 100644 web/public/images/failed.jpg diff --git a/api/core/app_server.go b/api/core/app_server.go index 0eebbc93..b7187d21 100644 --- a/api/core/app_server.go +++ b/api/core/app_server.go @@ -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/") || diff --git a/api/handler/sd_handler.go b/api/handler/sd_handler.go index 27568d39..6471e94e 100644 --- a/api/handler/sd_handler.go +++ b/api/handler/sd_handler.go @@ -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), diff --git a/api/handler/suno_handler.go b/api/handler/suno_handler.go index 624b703e..06dfce9c 100644 --- a/api/handler/suno_handler.go +++ b/api/handler/suno_handler.go @@ -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), diff --git a/api/handler/upload_handler.go b/api/handler/upload_handler.go index fd7f437d..d9c75ec2 100644 --- a/api/handler/upload_handler.go +++ b/api/handler/upload_handler.go @@ -142,7 +142,7 @@ func (h *NetHandler) Download(c *gin.Context) { return } - // 将下载的文件内容写入响应 c.Status(http.StatusOK) + // 将下载的文件内容写入响应 _, _ = io.Copy(c.Writer, r.Body) } diff --git a/api/handler/video_handler.go b/api/handler/video_handler.go index 72a1db06..4f1d81d1 100644 --- a/api/handler/video_handler.go +++ b/api/handler/video_handler.go @@ -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), diff --git a/api/service/video/luma.go b/api/service/video/luma.go index 8d71b3e4..2c12c627 100644 --- a/api/service/video/luma.go +++ b/api/service/video/luma.go @@ -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 } diff --git a/deploy/data/mysql/init.d/chatgpt_plus-v4.1.0.sql b/database/geekai_plus-v4.1.3.sql similarity index 65% rename from deploy/data/mysql/init.d/chatgpt_plus-v4.1.0.sql rename to database/geekai_plus-v4.1.3.sql index 3a3f117c..0ea55627 100644 --- a/deploy/data/mysql/init.d/chatgpt_plus-v4.1.0.sql +++ b/database/geekai_plus-v4.1.3.sql @@ -3,7 +3,7 @@ -- https://www.phpmyadmin.net/ -- -- 主机: 127.0.0.1 --- 生成日期: 2024-07-12 17:11:22 +-- 生成日期: 2024-09-09 17:58:40 -- 服务器版本: 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,8,6],\"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\":true}'), +(3, 'notice', '{\"sd_neg_prompt\":\"\",\"mj_mode\":\"\",\"index_bg_url\":\"\",\"index_navs\":null,\"copyright\":\"\",\"mark_map_text\":\"\",\"enabled_verify\":false,\"content\":\"## v4.1.2 更新日志\\n\\n* Bug修复:修复思维导图页面获取模型失败的问题\\n* 功能优化:优化MJ,SD,DALL-E 任务列表页面,显示失败任务的错误信息,删除失败任务可以恢复扣减算力\\n* Bug修复:修复后台拖动排序组件 Bug\\n* 功能优化:更新数据库失败时候显示具体的的报错信息\\n* Bug修复:修复管理后台对话详情页内容显示异常问题\\n* 功能优化:管理后台新增清空所有未支付订单的功能\\n* 功能优化:给会话信息和系统配置数据加上缓存功能,减少 http 请求\\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://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/chatgpt-plus\\\" target=\\\"_blank\\\"\\u003ehttps://github.com/yangjian102621/chatgpt-plus\\u003c/a\\u003e\",\"updated\":true}'); -- -------------------------------------------------------- @@ -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', @@ -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='兑换码'; -- -------------------------------------------------------- @@ -519,6 +494,40 @@ CREATE TABLE `chatgpt_sd_jobs` ( -- -------------------------------------------------------- +-- +-- 表的结构 `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(255) 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,29 @@ 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', 4830, 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'), +(9, '1234567', NULL, NULL, '极客学长@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', NULL, NULL, '极客学长@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', NULL, NULL, '极客学长', '5a349ba89582a4074938b5a3ce84e87c937681ad47e8b87aab03a987e22b6077', 'https://thirdwx.qlogo.cn/mmopen/vi_32/uyxRMqZcEkb7fHouKXbNzxrnrvAttBKkwNlZ7yFibibRGiahdmsrZ3A1NKf8Fw5qJNJn4TXRmygersgEbibaSGd9Sg/132', 'abhzbmij', 83, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 1723537600, 0, '::1', '', '', '2024-07-04 14:52:08', '2024-08-13 16:26:41'), +(15, 'user123', NULL, NULL, '极客学长@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', NULL, NULL, '极客学长@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'), +(21, 'husm@pvc123.com', NULL, NULL, '极客学长@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', NULL, NULL, 'ted0000', '3ca6b2ff585d03be8ca4de33ad00148497a09372914ee8aa4cfde343266cbcdd', 'http://localhost:5678/static/upload/2024/7/1720775695548167.jpg', 'sq4s1brf', 100, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 1721785366, 0, '172.22.11.36', '', '', '2024-07-12 15:12:16', '2024-07-24 09:42:46'), +(26, 'admin1', NULL, NULL, '极客学长@282111', 'c26d3c966ea66eb7bf1549f24a66af386465c16757328bfb9f3077ae5effcfb1', '/images/avatar/user.png', 'v76iw0k1', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 12:07:30', '2024-08-13 12:07:30'), +(27, 'admin3', NULL, NULL, '极客学长@172692', 'b1a67a2e3e630c532a9127050256aaa9bb6ee03fa0bdf54d73edbbcc5b0a44af', '/images/avatar/user.png', '5wmclwgh', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 12:12:04', '2024-08-13 12:12:04'), +(28, 'admin4', NULL, NULL, '极客学长@936655', '0a756e0bff6c4b8b19522ff443abd98739fdd746b561bfcd1430ea29996d4ca3', '/images/avatar/user.png', 'j4r5ywfe', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 12:12:49', '2024-08-13 12:12:49'), +(29, 'admin11', NULL, NULL, '极客学长@822189', 'bd950072a8b944be77ec3054ba75632de4b6a79555f9ceece984d8d91cd6781c', '/images/avatar/user.png', '4hi9ein6', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 14:11:14', '2024-08-13 14:11:14'), +(30, 'admin5', NULL, NULL, '极客学长@789501', 'ada230c9805f19100dfb5f33a7867f94786db1215654113d29305ab3755b1bf9', '/images/avatar/user.png', 'xvhao7x4', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 14:13:35', '2024-08-13 14:13:35'), +(31, 'admin67', NULL, NULL, '极客学长@343467', 'fea7ad23610e9aeca7230c422b95adacbab817f097d4e4753fe0b33a1c883172', '/images/avatar/user.png', 'cqmgcj6y', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 14:14:01', '2024-08-30 09:25:45'), +(32, 'admin7', NULL, NULL, '极客学长@286350', '25f059928fd2db417a844371847bb280d4c31907085180ca44265dd6eebab77f', '/images/avatar/user.png', 'bqmph02n', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 14:16:08', '2024-08-13 14:16:08'), +(33, 'user1', NULL, NULL, '极客学长@172155', '41435a562af10889f545a90d02635911d3af639eb580bf9b77382e75375fde06', '/images/avatar/user.png', '8mk6g4qx', 100, 0, 1, '', '[\"gpt\"]', '[1]', 1723530263, 0, '::1', '', '', '2024-08-13 14:19:47', '2024-08-13 14:24:24'), +(34, 'wx@4425914709', '', '', '极客学长', 'f88cfd707b1cc793fc51f8a50b499d4bf4afae032a594f968011c50fb93ae531', 'https://thirdwx.qlogo.cn/mmopen/vi_32/uyxRMqZcEkb7fHouKXbNzxrnrvAttBKkwNlZ7yFibibRGiahdmsrZ3A1NKf8Fw5qJNJn4TXRmygersgEbibaSGd9Sg/132', 'naa3fvjo', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', NULL, '', '2024-08-13 16:36:08', '2024-08-13 16:36:08'), +(35, 'wx@2463076272', '', '', '极客学长', '02ad55a3828af665168ace544678b848bf7b3681878e8c055e1494973124e903', 'https://thirdwx.qlogo.cn/mmopen/vi_32/uyxRMqZcEkb7fHouKXbNzxrnrvAttBKkwNlZ7yFibibRGiahdmsrZ3A1NKf8Fw5qJNJn4TXRmygersgEbibaSGd9Sg/132', 'kgt5wq2m', 100, 0, 1, '', '[\"gpt\"]', '[1]', 1723539827, 0, '::1', '', '', '2024-08-13 16:48:37', '2024-08-13 17:03:48'), +(36, 'wx@2206731379', '', '', '极客学长', '92803ab5221da03e1f663c1381648476eb8c975094570e9980843adbd6415dca', 'https://thirdwx.qlogo.cn/mmopen/vi_32/uyxRMqZcEkb7fHouKXbNzxrnrvAttBKkwNlZ7yFibibRGiahdmsrZ3A1NKf8Fw5qJNJn4TXRmygersgEbibaSGd9Sg/132', 'xppsctgl', 100, 0, 1, '', '[\"gpt\"]', '[1]', 1723539964, 0, '::1', '', '', '2024-08-13 17:04:19', '2024-08-13 17:06:05'), +(37, 'wx@5354985253', '18575670126', 'yangjian1@pvc123.com', '极客学长', 'a0cdb6bf32424c4f3534ea9c0326898537e5a76a12ef0170a1eadd68e7931804', 'https://thirdwx.qlogo.cn/mmopen/vi_32/uyxRMqZcEkb7fHouKXbNzxrnrvAttBKkwNlZ7yFibibRGiahdmsrZ3A1NKf8Fw5qJNJn4TXRmygersgEbibaSGd9Sg/132', 'kcpgg3fs', 97, 0, 1, '', '[\"gpt\"]', '[1]', 1724037840, 0, '::1', 'oCs0t62472W19z2LOEKI1rWyCTTA', '', '2024-08-13 17:16:26', '2024-08-19 11:24:00'), +(38, 'yangjian102621@gmail.com', '', 'yangjian102621@gmail.com', '极客学长@479380', '18c9c557eee244127e5b841308292e14085cd4e44c44e929eb0eb2355471807b', '/images/avatar/user.png', 'zjyyjdfu', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 18:39:14', '2024-08-30 09:25:24'), +(39, '17620556057', '17620556057', '', '极客学长@896656', 'a7794114454933b3128cf7b17b1c9167943b0d59f85b1490a56f37b12126ebfc', '/images/avatar/user.png', 'qajhd6sj', 96, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-30 15:03:32', '2024-08-30 15:03:32'); -- -------------------------------------------------------- @@ -582,6 +602,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(255) 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 +746,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 +759,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 +778,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 +816,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 +864,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 +891,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 +902,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 */; diff --git a/deploy/data/mysql/init.d/geekai_plus-v4.1.3.sql b/deploy/data/mysql/init.d/geekai_plus-v4.1.3.sql new file mode 100644 index 00000000..0ea55627 --- /dev/null +++ b/deploy/data/mysql/init.d/geekai_plus-v4.1.3.sql @@ -0,0 +1,932 @@ +-- phpMyAdmin SQL Dump +-- version 5.2.1 +-- https://www.phpmyadmin.net/ +-- +-- 主机: 127.0.0.1 +-- 生成日期: 2024-09-09 17:58:40 +-- 服务器版本: 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,8,6],\"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\":true}'), +(3, 'notice', '{\"sd_neg_prompt\":\"\",\"mj_mode\":\"\",\"index_bg_url\":\"\",\"index_navs\":null,\"copyright\":\"\",\"mark_map_text\":\"\",\"enabled_verify\":false,\"content\":\"## v4.1.2 更新日志\\n\\n* Bug修复:修复思维导图页面获取模型失败的问题\\n* 功能优化:优化MJ,SD,DALL-E 任务列表页面,显示失败任务的错误信息,删除失败任务可以恢复扣减算力\\n* Bug修复:修复后台拖动排序组件 Bug\\n* 功能优化:更新数据库失败时候显示具体的的报错信息\\n* Bug修复:修复管理后台对话详情页内容显示异常问题\\n* 功能优化:管理后台新增清空所有未支付订单的功能\\n* 功能优化:给会话信息和系统配置数据加上缓存功能,减少 http 请求\\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://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/chatgpt-plus\\\" target=\\\"_blank\\\"\\u003ehttps://github.com/yangjian102621/chatgpt-plus\\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(255) 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(255) 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(255) 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(255) 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', 4830, 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'), +(9, '1234567', NULL, NULL, '极客学长@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', NULL, NULL, '极客学长@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', NULL, NULL, '极客学长', '5a349ba89582a4074938b5a3ce84e87c937681ad47e8b87aab03a987e22b6077', 'https://thirdwx.qlogo.cn/mmopen/vi_32/uyxRMqZcEkb7fHouKXbNzxrnrvAttBKkwNlZ7yFibibRGiahdmsrZ3A1NKf8Fw5qJNJn4TXRmygersgEbibaSGd9Sg/132', 'abhzbmij', 83, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 1723537600, 0, '::1', '', '', '2024-07-04 14:52:08', '2024-08-13 16:26:41'), +(15, 'user123', NULL, NULL, '极客学长@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', NULL, NULL, '极客学长@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'), +(21, 'husm@pvc123.com', NULL, NULL, '极客学长@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', NULL, NULL, 'ted0000', '3ca6b2ff585d03be8ca4de33ad00148497a09372914ee8aa4cfde343266cbcdd', 'http://localhost:5678/static/upload/2024/7/1720775695548167.jpg', 'sq4s1brf', 100, 0, 1, '', '[\"gpt\"]', '[11,7,1,10,12,19,18,17,3]', 1721785366, 0, '172.22.11.36', '', '', '2024-07-12 15:12:16', '2024-07-24 09:42:46'), +(26, 'admin1', NULL, NULL, '极客学长@282111', 'c26d3c966ea66eb7bf1549f24a66af386465c16757328bfb9f3077ae5effcfb1', '/images/avatar/user.png', 'v76iw0k1', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 12:07:30', '2024-08-13 12:07:30'), +(27, 'admin3', NULL, NULL, '极客学长@172692', 'b1a67a2e3e630c532a9127050256aaa9bb6ee03fa0bdf54d73edbbcc5b0a44af', '/images/avatar/user.png', '5wmclwgh', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 12:12:04', '2024-08-13 12:12:04'), +(28, 'admin4', NULL, NULL, '极客学长@936655', '0a756e0bff6c4b8b19522ff443abd98739fdd746b561bfcd1430ea29996d4ca3', '/images/avatar/user.png', 'j4r5ywfe', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 12:12:49', '2024-08-13 12:12:49'), +(29, 'admin11', NULL, NULL, '极客学长@822189', 'bd950072a8b944be77ec3054ba75632de4b6a79555f9ceece984d8d91cd6781c', '/images/avatar/user.png', '4hi9ein6', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 14:11:14', '2024-08-13 14:11:14'), +(30, 'admin5', NULL, NULL, '极客学长@789501', 'ada230c9805f19100dfb5f33a7867f94786db1215654113d29305ab3755b1bf9', '/images/avatar/user.png', 'xvhao7x4', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 14:13:35', '2024-08-13 14:13:35'), +(31, 'admin67', NULL, NULL, '极客学长@343467', 'fea7ad23610e9aeca7230c422b95adacbab817f097d4e4753fe0b33a1c883172', '/images/avatar/user.png', 'cqmgcj6y', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 14:14:01', '2024-08-30 09:25:45'), +(32, 'admin7', NULL, NULL, '极客学长@286350', '25f059928fd2db417a844371847bb280d4c31907085180ca44265dd6eebab77f', '/images/avatar/user.png', 'bqmph02n', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 14:16:08', '2024-08-13 14:16:08'), +(33, 'user1', NULL, NULL, '极客学长@172155', '41435a562af10889f545a90d02635911d3af639eb580bf9b77382e75375fde06', '/images/avatar/user.png', '8mk6g4qx', 100, 0, 1, '', '[\"gpt\"]', '[1]', 1723530263, 0, '::1', '', '', '2024-08-13 14:19:47', '2024-08-13 14:24:24'), +(34, 'wx@4425914709', '', '', '极客学长', 'f88cfd707b1cc793fc51f8a50b499d4bf4afae032a594f968011c50fb93ae531', 'https://thirdwx.qlogo.cn/mmopen/vi_32/uyxRMqZcEkb7fHouKXbNzxrnrvAttBKkwNlZ7yFibibRGiahdmsrZ3A1NKf8Fw5qJNJn4TXRmygersgEbibaSGd9Sg/132', 'naa3fvjo', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', NULL, '', '2024-08-13 16:36:08', '2024-08-13 16:36:08'), +(35, 'wx@2463076272', '', '', '极客学长', '02ad55a3828af665168ace544678b848bf7b3681878e8c055e1494973124e903', 'https://thirdwx.qlogo.cn/mmopen/vi_32/uyxRMqZcEkb7fHouKXbNzxrnrvAttBKkwNlZ7yFibibRGiahdmsrZ3A1NKf8Fw5qJNJn4TXRmygersgEbibaSGd9Sg/132', 'kgt5wq2m', 100, 0, 1, '', '[\"gpt\"]', '[1]', 1723539827, 0, '::1', '', '', '2024-08-13 16:48:37', '2024-08-13 17:03:48'), +(36, 'wx@2206731379', '', '', '极客学长', '92803ab5221da03e1f663c1381648476eb8c975094570e9980843adbd6415dca', 'https://thirdwx.qlogo.cn/mmopen/vi_32/uyxRMqZcEkb7fHouKXbNzxrnrvAttBKkwNlZ7yFibibRGiahdmsrZ3A1NKf8Fw5qJNJn4TXRmygersgEbibaSGd9Sg/132', 'xppsctgl', 100, 0, 1, '', '[\"gpt\"]', '[1]', 1723539964, 0, '::1', '', '', '2024-08-13 17:04:19', '2024-08-13 17:06:05'), +(37, 'wx@5354985253', '18575670126', 'yangjian1@pvc123.com', '极客学长', 'a0cdb6bf32424c4f3534ea9c0326898537e5a76a12ef0170a1eadd68e7931804', 'https://thirdwx.qlogo.cn/mmopen/vi_32/uyxRMqZcEkb7fHouKXbNzxrnrvAttBKkwNlZ7yFibibRGiahdmsrZ3A1NKf8Fw5qJNJn4TXRmygersgEbibaSGd9Sg/132', 'kcpgg3fs', 97, 0, 1, '', '[\"gpt\"]', '[1]', 1724037840, 0, '::1', 'oCs0t62472W19z2LOEKI1rWyCTTA', '', '2024-08-13 17:16:26', '2024-08-19 11:24:00'), +(38, 'yangjian102621@gmail.com', '', 'yangjian102621@gmail.com', '极客学长@479380', '18c9c557eee244127e5b841308292e14085cd4e44c44e929eb0eb2355471807b', '/images/avatar/user.png', 'zjyyjdfu', 100, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-13 18:39:14', '2024-08-30 09:25:24'), +(39, '17620556057', '17620556057', '', '极客学长@896656', 'a7794114454933b3128cf7b17b1c9167943b0d59f85b1490a56f37b12126ebfc', '/images/avatar/user.png', 'qajhd6sj', 96, 0, 1, '', '[\"gpt\"]', '[1]', 0, 0, '', '', '', '2024-08-30 15:03:32', '2024-08-30 15:03:32'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `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(255) 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 */; diff --git a/deploy/docker-compose.yaml b/deploy/docker-compose.yaml index 03fa5a73..c8c7d630 100644 --- a/deploy/docker-compose.yaml +++ b/deploy/docker-compose.yaml @@ -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: diff --git a/web/public/images/failed.jpg b/web/public/images/failed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d863b857a869cadd1254d57e18749e691916627c GIT binary patch literal 35896 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≠jHPl@g1J4G<3pZ9TchdE2XphiGnE;*m*ZHQm_zE2 zIA5z*{NiT2v~{Rb%&NN^ZN)?Nxr(j^!~g~32o~pVh7xMHtJZ&hVLZ7t1?eu>sYIwB z*$s3s#UGORF)XL$&c)LKeg}d0cbWHoH-mH53yrXGT{>1L~xs(xfz1(bg1h_T~*k`$;#q2xeVRVYi>5FPKG z_;P&*d4yQHjo+n&t=&{Lm;U6AunY`Q8$~cSW>yNJtxTgk>dI)s-?Yw?6NE6}<5oq-uz9hv=7i^ow4g+` zE>pY9o8DyMfExb-at2^lM z!+cH~jvOKUm@l|o$1ye5nmcm^<=KAoL-D0E0YV(GPm6>_+y+1!8PNuMZ+6+SSaiHb z6}wn+fx4EY77f7afW=$ocT3aP%y@R717b8Q)5@{{ zO3Xo~P_s9X`B^*SQFK9AD)8_rm=?O)iR^%d;}iX~<&K7MP~xM8US|LR009+&02+ow zKfUy`S;8y)N4h_V$p-N*rt~oV$GueB95Bo~ek}L=iEE7JPz81VTpFt;qT2VChnr>W zZBRt>^hsf!pd@q(R1Fe?aVW#<+Z6f&=wKGIRW11aRYl-!x3Bbz1Li;<1xw)mBWi?yXUG1xGGomhxcwl7dbm;%Mb>^VJveSX9=G@@}#sY%oJU(QarzTSL`h{|8WwxRbc^tJ~5F< zEp8e**1MS8yL;_7m&p5Cc3_&b40*|71Ob8~^|K&653|5l;>!{J8Ub}zg~l8@L2lKK zhTQ>-sqM-7D*hOO1u=ZDJN`cMIRhcfx2OrH_hBv^kfyCW|6z{O8K*7+ZPNg_QDj4v z5v#<*swimdNwz(F6TdjR zx|6>7NWM3Wd+FWvv&W4tvVqCS!ILdegA(}DEy-+HG;37GaY-?(&*>lxM;0%Ks;~D; zzU18}*u`>Air3R><$tr`{I5ystyGpQ0=*segQ-B{r6Qs0x;=v+DK&#VUH#!U?*X;O zC-(H7wY(#EOb-w_y*j|;B<$T~h_v9%if~F|)9I|qg6DFlner^MLiSRGDL!Hwjh_WK zeM)6xn!EfQHuEmw+f-VNAx6#|+f@KL!SGR&tu5wu1o ziENa2kw#Gs*eC87zk^)pCw_EeN)YApbqtJMz`ef_n?@gy0N2mVFzVICq8>Y$`Gdy7 zRsEs=pGu*Ph?mN`t}jz#-D<)`R|2ksK+*|9((bCjeKMz*F zLo6C?Whb@ILKg6L!6Cn2J-OU8Mcdc1B*LcpBDcK#8p}G+u R000000000000000004x~wnzW~ literal 0 HcmV?d00001 diff --git a/web/src/assets/css/luma.styl b/web/src/assets/css/luma.styl index b50fb16a..1025a83e 100644 --- a/web/src/assets/css/luma.styl +++ b/web/src/assets/css/luma.styl @@ -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 } } @@ -279,45 +266,6 @@ } } - - .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 +274,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 { diff --git a/web/src/assets/iconfont/iconfont.css b/web/src/assets/iconfont/iconfont.css index 254a31ff..1e8ed795 100644 --- a/web/src/assets/iconfont/iconfont.css +++ b/web/src/assets/iconfont/iconfont.css @@ -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=1725863856362') format('woff2'), + url('iconfont.woff?t=1725863856362') format('woff'), + url('iconfont.ttf?t=1725863856362') format('truetype'); } .iconfont { @@ -13,6 +13,10 @@ -moz-osx-font-smoothing: grayscale; } +.icon-exchange:before { + content: "\e6f5"; +} + .icon-merge:before { content: "\e901"; } diff --git a/web/src/assets/iconfont/iconfont.js b/web/src/assets/iconfont/iconfont.js index a106bda2..e0f1f93d 100644 --- a/web/src/assets/iconfont/iconfont.js +++ b/web/src/assets/iconfont/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_4125778='',(a=>{var l=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var t,h,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(l&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}t=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(t,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),t()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(i=t,o=a.document,z=!1,p(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,s())})}function s(){z||(z=!0,i())}function p(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(p,50)}s()}})(window); \ No newline at end of file +window._iconfont_svg_string_4125778='',(a=>{var l=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var t,h,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(l&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}t=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(t,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),t()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(i=t,o=a.document,z=!1,p(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,s())})}function s(){z||(z=!0,i())}function p(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(p,50)}s()}})(window); \ No newline at end of file diff --git a/web/src/assets/iconfont/iconfont.json b/web/src/assets/iconfont/iconfont.json index aa4ed4ef..c58dfdf4 100644 --- a/web/src/assets/iconfont/iconfont.json +++ b/web/src/assets/iconfont/iconfont.json @@ -5,6 +5,13 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "7573248", + "name": "exchange", + "font_class": "exchange", + "unicode": "e6f5", + "unicode_decimal": 59125 + }, { "icon_id": "8094809", "name": "merge-cells", diff --git a/web/src/assets/iconfont/iconfont.ttf b/web/src/assets/iconfont/iconfont.ttf index 92b779cd2f26de1789b76f5d81541311cb1a1c36..c6f10b8616ef50a7295b7678b72c80541bcbb633 100644 GIT binary patch delta 2165 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�~xf*XGjyl6{H^cz_q$!1VwZQ>Zyc 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 H&j0`bQ6jN9 delta 18682 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 diff --git a/web/src/assets/iconfont/iconfont.woff2 b/web/src/assets/iconfont/iconfont.woff2 index 0d306dabdcb4942c2b3a82b712c365f698c6dc59..be61aa71eff1205b861441a224fcf814cb94ca66 100644 GIT binary patch literal 16776 zcmV)0K+eB+Pew8T0RR9106~ZV3jhEB0C6+`06{bW0RR9100000000000000000000 z0000SR0d!GkO~TczDR+WRsl8wBm;tU3xPZU1Rw>3X9tE_8$w)V1|V!4Ab=+lV-%%% z6{D!&WMu#UF}Wc_a0Tev>m->JHIjO$jg3&khI?x%{LrDnDRuv!ZyP?Wg_L5gJug|8 zxRjP#%Uk8Bj%Xk}Nag;_8w0gN5+74$C`FSn<~I=piL9?UlN5ib((%=&J|roc#1s4d zZ@-!$Dixn@nx$nDEuD9P0M>c$(MnQCVM8#tZpo4r12zUrmei7{t$_`CRByC^q`@=F z#0n6Mdce$o!pFqQH!$**N8kVV6CS?bubn60H8LC0ZbLm3y%lR-nV)Ep`EfINC9N## zbV?MkV;QJUDeVa8+lAkD{QJ(O`8oQvRMQxQT=RJAe

;^1D(Cf)yfO$}KB7CTwhD z_c2>?7m;1*{P)&peYlmZ_woU#4Pa4*1%?mAYHlap?xd4+_QQ}NKs>!^{&VX0x-)!l zn<0TAFko}xVIB|(N{}{h5WSJM(w1x~P>?u@14Io9w*UM^T_&$i0ViO521$NEF2(J3 z=}$Y-Ml4%UPUp?D(-dvMNXo}zpal>x|2oZ8vI|7+)dySY?Z9J~t;6{Lmy-JHTX+7l zbB&|}J1JOk!QVcx4#6!?I3Z3z`f~2oa&qrU_T>Nrgh|&mEW?YO)XU!5@cb5UoKR))9rbQ_H@!P};t`OLQV0|#f|`k0 zyetLE)o9jXktLQ{W3vHA{q*L-n=5awy?ONJcmK7j-tNAA@b>B3sdth?&cEb}7e4mx z%Da#6A>$EHQY9M(Ha;=mARHXlhBJp%Ytp`Bzg@@GSP1+)!d#g*K1P+kYPZM|-PQ)- z-tf-w?qLIl?A>v{qsP_B-y`6-fu}uhJ2FCC9*!hQ?z*AX)wT$)yr!2aGmkBj-L`4r zl665bLvt(QYPQCCv>A-3a|-yXa@K+ZpPsA~qchHFbX}8Xb(U1Pom?|(G|t5f{{!!) zdyYA3(dO*5i>~V9pcx`kHi;ar5h_=WuRkGx!Epov`v?>s5E$$saCk%zu!A6B8gYU_ z1O=T42JRCa93e!QKuAzQ$Z(f1;0E!8R)h_A2nV(iE({|)=t1}}hX`N;5yL|wfhoin zP7ptMO#ERH34lr>h1*0Sq6vgkBp5D{5Lib-VE_q(Q6$1rc{RXEqJV;}bci|?b2XK$lQ#gjw6kMi|Knq0(w4um{TNEX5nxXQ!^X!icPZn{_}3S^zrK_%W=9B3`*3nsqV)c$*{jaky?8)P8}{)ZREy4$Q} zS89nl4HGaB;Keaw$3$|t+--ianb^{NBpsLDx9SDYFyg5nAtshTcNa8TG2(E)=9sP<@T2Pu60UH z#pSj#jeal{+BbmiF=H&I*Q>wP%8)2Aji2-_6o6RS8?^t)ghGg80_fY&cP_TJR=zF9 zub)KS%eC9eaCH1tmv3kaLm4)We~tL?Rr;3?r?0Zg-cUnK%Pu;>jJ1?1t@I!qDKmGJ zb*ug(NJ`ys2qtw_qmI+(tEbL*r!Sp6tHSpPUk1sfSuNN(^PEi6@wmJ{9KAFEpyF`-qGq2W)|p#W&AW9B*_%r4g@eGKrBO8JCW-N)ik*iwUOXsg2?ZC^nzCo~==4^OA@+4E(1cx70i;ZgoOsa}&7EU|`NtXj{t82~s1LP9kskCG(07Dw=8 z810C2)9BlU?gSLS9q%~EeY%g!0`oR{E86}f`{K~8>FljaPuw2h2X~~sCeUYuzG}>f zyQ5$wjqRaXX=enRw8Ps!L}k(y;mVUj+%6ipjNi&T!UCGKKTGjLc78J+_>O0)|416W zhavp0KBgxZlci*#?G8EBc=x0D{qLGe(GK51{lU?k9eTX9H8Y6C@}Hz|FZuMr7+B_Q zFyUyahBQgRf?3%fW!&M~M5J^G%Zi~WybOI-1r24qJwJ?P8%5Ju@#y02Gg1`Ym&l94 zB)N(im{?R%2cs2Dc=(7K4Ky^-#AheFCMSy+V{Pql*usv73nY_A9w0~@&q~kl1chJ?;4ck5dd*tj9>nQ`9Yt$mcoqPz7nTrC9ry8s*NaWs z9(S^K1@F^M6`B}LP~qxMV_#0`Zp99C5V8a)ZMN zsK5!fd5cpde3avLf`KS+Ow=^5j{hevTE}JEwp7ks9WtAWz*KFWSLbB{3Up$ z#~o=SFpJAFuBzmmQ7JH&AwQ(7d5Z17n$^I=(HHwz|F`R`pu$qbG#~<5VVQjLlY40(9<;N`cdJ6xC_>JSmr8DH9m_V|TP}Og zTPTp?RJ9s(7y$A+(lHhT)8g!q(44y`%W56U&dgh>)3&|CtZi9e+tB}tQ%opt5#C6u z-h zNQO?T@H^PF*-T1hGb&!2McsAMia3hipnVIEV*^`wp@gQy@$qvq*6KkQp%nKfGz~b4 zG6YiZ4iR@#_>IIcFvQ}A1 z%Q^MU9OmHDFPhMN&QU@N)=4P{g&?dnq41naCN4Y}uh3k>Vxos!VlkJ(6*gW5Ri243 z(b7+vtxLBXwG$ugj*4MuL93|N^3DEoCDfe?;|>ys;vlbwUS2&o%+EugO`J}mh-6P^ zw1h%gzz&V|0I0=4+pw}n1!qlmFr}Im^v(#Tm=srNs>rZ=H^(mmWFoB1$r@TW$L_clHJ)Qi*jh`*QC8O7-IN+`p)c`D$+Qc zM#`v_sLLgno{j6?jiX6P!aRl3CQXWBSqZd-!zj+o+#)nwGE@TK8O~}l!FY7G81N3rc*jw^&x=ODt-IHR5iHR?0`V+=5yS) zQB*a~!qf7?R?~#2rsoEDix0U#V#&lws83i#qcF*_#1i zJ&IHo0ZdL)fRLiPpR3v)O&5F|syfq`uHLo@jI=_y6A&7R{IPdZc(vq+!Uacv01d_-9#ot_i_u%2e#@5Hj zk804gjKwdR8uI@+kque?csDlmUu=G|N74ETCZD)71#Td0sIpk$+d34EaOe0R_~qGl zJ!@oxqQkoE6mAO-N=pFVxs-W~T|noUjU!{@3^g1WJ$>;D-V9_ySY8<1-CVdS#P3ht z-r?`dl}oCgb2~e2Smxv&eJ((4-cy`2*Zi0CQAFRH@Gjearh5cM?HWIrx1#s*8`~#? zLaV?OD|SYA$)W0fKB?+tMrGY~!=Qu?BUyVp zH-%(lW`^*hbT4+VH1K*|#uiAK6jA+`$<_2P0baelB2|7yg%x@P>(0tx2G_V&!2Ubyfw>Q} zMggaMtHnJt6P4<@ui_yI|CA=#Z$`PS7Y5UNGeMQe4w{#DF5Gv+ICl6}z#fodW*z46 z^6|?;LE+URmSe%+%v?k;)J4(u0WLupIZH-bAnUf--UJi9pbX`|Vk;~HxQ zC^IvISpF%7rXK)Wgg(#n3n=(UI^m&TZpdMWrs5#S&F5su1(gJ)Of+`7N8^uob02O? zuS!-foc$M&{DlBbX`0Y79SWMvq(B^MB>E`h`D(?#Fx0NE6}kUMwwj`ohJ>I7&yPf@ zo?Mm}LCzBdwWkA(e7I^^Q1{>OB0)CMwWrQ$a;QrGmcH^LJ}mv;+wx{vJ-sU)_94Bpp*V=0g#CK=ME?uUPD;V*E6aO z*~OxF;c|7XA{hX_KO6%z#M-_P6fd`PpzHBBM52{S8O8}x@wuf1X zV*nfatB#Z>&^k++3i^dUe^SihMaL`H6}=r$f^cr5ooX4%LZpx|P9K%1Ni7#J8~#bO z>kxP4n6}hpPVM4!jy4#KNk0acbbcVkkZyBw7qh`pQ|)G3K;C`gP1h?eT_5)3KX&F{oZ_ zCa9l(J{WIn$nqXyw!#Qmr^`0{?qJm{uN@9)eb~_Dr-zq)d1{cz7+yXj|)P zNz9M&2Xfw?|Bh884d{LfSp`7qS=(?9V_^`!TVG98aoAe~&d|xvOUSsJvn#tPKh5ie zf<4dY5Ol82rxm5XOLU6;tUy8qMLGj_MPE3BQ~@_|(%Q=-4pizj^J@T> z^KEKog!3U5Z;faol>sA{)+Op57()rCQN^XOwVuYsx;0u$gb+;#K`&!?kUW&W>2%w~ zzkH+IW}Wy7O^idRc5(@7LK+5SN$B+WWH?9N#*ac^OLUTM$OTw*diK%IYu#9aVB)KB zpnSb=TSnylh@N8Xli86}ni{UyksTDs-Wbp?7mB8le?#@+B?H*gP_PXRI=nzg%ACj0 zSz~?oxo0K1;KIAgg0N5RvCq3a1+a8*_VT352VLdnyvEEQ{GPPR1a>iWhG?Fc;!Ch7 zHw%qI^;2%ukszdwVAO1Q3mf@OLOJcY@}PF>tfbVS-y^p-1l=r3pW@wgm|A95Ify9Q z&D-OXtqa3f@ zzXUa2=r~YO_+KB;!&5;r4~4p`J>gN^&hTx#>vU<>TF5T&@8il$^D|O#uaEv<@bkKI zYqB;Z{UvQCWV=vMHHJ5#TPHv-pL#LJZMS%P7+b+|jXLrm6JOQ9u^L#oH8J-vJm)2c8h`C)=Vo)RSW(Au zE#8m-V!<+A`3KQ?H$I5^dmlGHmuHvVXcL4AIc%j34|T&12RTHwZ(o^P+{|su7JGd@ zb*bI!RYZ0!=)XeeGT=|(r7bXo*4tz$&XE=Ltfro|s2UXLP!yRH5KmgfWmlc>4bPIC zfYPqoj5XaJD}ZsCBbC&l$#EI$a!$?}9$^OQjhTszW1VKdP6~JL!1muJbp(Dj?LOd{ z1hR>{*h|VVe&E%>@Zp=X31>u`T#bgf=Ede4%~$3=Nit^UrJ2{FFbnAI)rwA6Ef+yk z2MkQ6+_GZp!VL6Ag{FpVl0kmp>KP~!ZtKSN=A#D;*UBa?*dPU>ga-g%<_8!!dU5)> z^$nZj2eCdLczn^QMwA-5B^IcR$I(82E)*JhYh^p_r!Hw%s<4zK^>P2`>uLe)rpQZe zJW@+s@?_H51an5}xW?atH`oVs8p%uFyvMGHPL$)J`RwB{sr~ z>xWoFz(nR{HkbJ)E2QZ%649p8U^FvA;SS$fkReto5kefQueaj#4GlvqJM&C1ygW(b zX9*Bi1*D!`X6zP?Jt^-WHA zV0hJLnoP!_d6+y%8;oPdUORn*$%FXMFl!h~^x#Ll_8#+o9l_r@5(dJ;vcl$7f~p3G zh=2_NckYm6BtGBJ@>ctw?@oi@4)tp@$xaGjD>V?w*(NrMw{d(WIMyT!EAIQXW~|vTy6Mc#v35%l`^*+EBGA5w+=5(YpX+c+dde?$QOp==PS*yF~@L^7b zzt?SJWJbEdK;mVW^Rp5UABIz2_8JY5Y;=tCR7k5!EiN|2TGlJ+r}i!)stJpXM!-z_ zhUd^Z_;1e~yGzfn-~FuhN$c+Q=Sz26_8A`x&m@e&K|~oLO9sT-&b)JBJTforTof;h z*?Q6d0T#(UOy}NgEd2AD&p*X)mi&hefe*lU!$;s_Zl`99%A@~m*xI#Yk<%Nl_^@%i zm^+^<*$$)zf_U%wrPCKr^gm{co~q%#AL#CD|Ko`C!C;Snzi$4&w|%i|`KSH={&JKQrtxHb7*?fkT>JW22M~ix`-noPKXvg+4`&Dvm+HRZBJO&WkWzp>Wk3zc;Fg?bofZHZ|~cnDL(9ePe{`zMG|s!Hjsx?C~!nm{~6Z z`Ihgt+-$Mu+AoiwlVuOPj2YfK*@G^9vco-(ekqqydwPsnTcE>a?n3smHQaD|ibT2I?mo$iDy#H)E%)PWtpbj1^O5 z$fz}7zEIj{3ttoeRm0z?+}C)%#*(j`DvTCH8GMX>Daf{-1+gd9u<~AJ(@+yrE*2RK zq7(3WSHagcaM#ko= z^G)9r4uw1|O%B8`H7k2VWMPDm5p~5@Inmv*wT8s%)2$1dxR}jy$9*y+>;6QbU3*#) z-bLOPi@p}^+(bYXNmK0=;z`HOmD1t!mmN?XtxoX+zB z*eEKJiej@>0>}F=;7iq)MwHyTU>%Lo-k+kdRh*4x0QsbNfJm7T;dR?zh$%W=bWF27 z&fVn-g>))9TI+?*uvs{li6=LcPy$HI*iVajOMW^R;*BOZlkrS> z9Aj4gw^=P)Sr`(X;PwXuc#vs98J4KfLu-DL$IU0ZlOLYk0fGYP3Mm;og&kq^kK-}k z3N6R~$gK)lA%$c9$KHl-J9P3r@kZ1QVrl8^_&%5(767OAjb!O{J}{!*Fd)LAn&)OY z@$~-|BRj#sUZx4Jh8sGdZsy$_^5p+gPK%yt(J_~C*mdExnt8CU?&*aE&Ozrzkfo!UtWTrU&8*EA`^RaP$nxNASo%JAZgWu09IzuW)oYG z>lf$i8|&v4|h%z}CPbiKT!BF^#}*t2XKIO}HlfLY!P4qX?!bcTf|ym4e)Pp$rKsC3Di` zECitebUSN;)eB90s-Pl(ox=2DPC*GW6C352lhMG)vB_dR8%MH<_OL6!47UMk2$ViJ z*gq}r@0U*x&`K6VQS)EF&<_pSu?S6JHwr+C`==)v?cL0_HfA@Yy0h0&A=2(@hYX_o z`_Y3Sa9ca1M3yQ|Ns*?>C!pzyWU2iC^ok-)mU6&$8J4b0mf8+LiYfm;r9i3``SP6f z(9G~Bv=W~pN%wxyLv9(zwz=naWEHK1_WcTx%|i#tBtQNCyW`83FQP5#{Hxdl6DyWW z{6C3_16UC5IPx6zXi^m*mnKJX8dzP5bWN2Cviu=h)a+Qhp3ptAG!pmk8Rn_KeSLg*49w^ zZdWGX&KgVl436aae~ePDy-_{(Om`xO|5J{7|M8m_D>_pWM(3>ZS-m=0w0eoSwz^$= zVT3Xa#Dtncn@JLjOTd-iw`S|sF{t!fa8yHEdVu=%!DoFl% zL__9zhq<~!mv0u(W4Rh{8uKZ&M%$_1meN@oo~{Cl+iK)q zl$~!U$vT6W8ORCFI5){1c^P${pDIgdI-QkebC^lRE$G#YlSyYHAEJ?cftxdCT(^Lh zlte4dF!~%HxRWw=G;tBt?31EM@i9{uB_18in)7dtJK1k$b0BQj_GE#rgKsZgyH_88 zp;UJ1-6-g&B-_%sA&Q&+@G~pj3RHDc$h+eCE0ZB95NOJ`t?!wTvEeTbqmCq@SHF0) zh*eVnshNI#n&f=v3$*Bm8|HbA6i6}zqDSlPk@wza-Xc*H-1cEQ8WaK;WDs!|Ky*L^ zgMs(O=F#M3O_JiT18=<$`(wt`CZM{}XEOlE2cJ(9uyAiUqP3{~x+V>0t zAssrj@MbbJf0QA&LgX~%y`9mZ0AMxY@y}0=XwqR$aw6%Bfp6(OUcWLPk^njA+qC#Z zJtiPZwt#e2FWWY@XBV7rbFYA4xr0wE#1G@7htKDZcDb*u{%QQM6gPq|to~p>$Ia>; zhv}Cu3ydeeB|)V%>PBQXiB#4Kju8;<8z2XWI*4^C?=G*hR}y<&-@H8|a`!=}h#D7S z&KdQZ5={DP^?CBYn3XFri_PKn-nOO6Bb*I|%WNV25K4^u#~(C_-D2}nVp&OB#<$@o zMFndP{gU24@K2~quA)rGhO%2G?NrEfY%~-fbM=mc1%u+(5#0(Q(H=S0>h6en)jo>4 ze!9a^+g4RNk7Y-0QfoULm7Q&B&2h{=)^l%8Q^K6a#<}s9y|O$cbq}$o7X$WOsoRQu z3fOCRW()}S7|{gJ_kI=Uy@H2- z?d8U3Vl-pvH18~4)=rla0k2?UX_09nz~ziE>g+E{0De51o;{9tAIc5TL zk9OINwp~B}De*K6vKoCAa|?aL=zGym(6KXaqxsqLl|hBa=-RH4mEfb0N3pE~B}X->&D(Q+s*)nSFdLSw803A1?2X_a4aAb8D+lF;kdBwX^6LVp^G}Q}J|Du6hb{FpYRR ziXl*CDU|8u%8cQtBxcqRPgc!kD20T)O2Ck8jpTv8N&K+~%WnhAmvw~~a#61@;>I`* zSFNiOu=0b&B0gtD<2wkM4kJxLP5gQXG6E-3=$PLILsyBqEfN&K=xsIq$ zf@l+=1qrYOCl`%a4P+%1D%j(+5LxX}i1|eQgaHnE`&;Z2>J#i+OmLX@HP0|pE>oCm z0zs3Gr}#fq5Idkz#S51rpuXDjMVjg^2L(zmEA5I|2a7GOn}dO3OH1nFR=^B@ou%x% zzKN!Y;=6%`={{1wI4yULNc8^uyd-;GLaaSAzVN&v+^lYkHfdx}(Sk$iKI`WR=G6oC z5r?)SsAdt+0qGeonD=eGh)AI^%h%s*1L)Yk`lhH-%60C~eC-dcx1!^79rql0ZUJs# zZvJjYGbicx7akDya1x#BoDz8Lda+P1Wa)tXi-ueXFHGrLj!J{O2cQaW9t`N#BOoKj zc~C^+Hdyy6RC^_&U2{@^2#yN$8T36)V^1sn@?N^5`P;_W$PZSP-74Xd zxMX+QsujLReKBqcQa?&QrV8+BojJ>t+A>|4;sW1RMR}pI4QAOat;*oiKeH?`4cposuc}OJrh?$w)a3vhiN`d8}m1G`34Rv zkPS%M6=a|PHj^3om8Cc%X`iRMmnVYKN?5Yawk+NCBf30$RneA978`k zqG#Z)rRqa_!+P0>kr$r|&kD|t^ZJ=nR8>DR3e@1-H2N1S~6{iQx>2K8-WCv zZqloRi^nO+FEb5;F1PlWlwYWQ{|k(IvW6JPR~i4%2*B5V&J3qv&*)~@4X6Ch7%K`r z^E~@1t8S&AYcarKO+5s8teK* zZHB51ZtAeL{z<7^@1rZ|u2WQ3_w_?Lt7OnZ%%p?r*R~y5=sdBu)C?KD)U)<`l`@s< zpR`sT7C^I=e?pC;{vbVAy}~UcyG09Cp0l+C-r6chlWTudugbl2%r#yIpIqs{@Zg0d zGBCj_U*+#^wbJMYSTrKqX<%c@dUQ-Lzw+z6O;vwM3|;Pc_=b-SyUj}zPhMZ{Uf0Z( zhLNy0VtB!#+adAv3F|AKzlvJlhrsD!~a;j^<{2+l}iM-xR6cyuwr0XF4Fl%S@gZ^O2%H6ogM5Iz6tjPca`<(t0n)WtJwiRK5b}C zV5=cOxpf|E3+_JA{nAwoEEgRc=#t}`oXJe*iL6(7BbU5X;~5cH_1GOXcHLVVn&ZAo zzY1kQt>OUU41F^qDJ*WtR)8;dF7n8uZLTZZLd+!Px##{8m0uFxMA(w*b~xLb0X3gZ zyFY-m7t!M*W5Wv%;EV7j*T@={OV?o=F)fw2eSr(K;JPN#rI8C+>(6W8K|Tg*STqY= z!{RpXU*WSCH2yAKN9@GZG~(e#3IyO^DkwbC>jxoU$E-!Lo$dW^H`|?rAfhj9Brn`v z&&^u2G-9nwS>hH-M6Q2w?)nYq!X#9UA2okuMK5BDrlLZ%QQ4QYjPeX9 z3{GS;pU7WWvwLOZu99bc5TZ4)R9r0n31;?-!1D|#fL+6u{<-d42Vk$1u0v3D^mE4} zbxA8P24#tjyc9hV#n$YC9Qu60Ihn~medCXtb(6Jv3;$$S+Eflj{Rr#jyFgS@JuXrrqi@%==^0NR6%66l;bz=9VDgGzb2yDd3uC^**K3GYRtihcGC&^s zSlEl%mNf0L*uqLDJ?j@|kA=N|G<9{;Vmom?dSObk{fluiKjl`VPF^C{J$32s{cmgP zV-8tITIlA4be6cs=F=!Ula{)tP($u4bk)zJA=IU0Bii+?kQKqZr5=dG93Z*;N^NrynhPG?(A2E-CR~*A7Jxv=No8Fz-m(1j%s8P%P_~qq*5O3!_FUviyt=d{Blnb& z3?p8owg7WwqQr1@ld!N-T-Yc^9%I+xNa~;cO%cD{v5AVR?D=eqivu0Y2*VjI zS?iX267`>Z$x=nvsb;YRPfB&BeB(uNgPiBPC6Hv>@BYnU zg!LE)1_Dm5PgZ_@-SOAIvc&MYrQx=a5L~rCZ9xtI= z$G!0~?Je{!07v@?~3^EbKISG_ftdtZt^iTI+B8!1*vrSmY~}8NJBN5_3L; z`)f2=KUZL9aOC>8g?(uV#n!_GlYG_&0x=k8V~q*gh6i0&ym7BT;E&| zG(fNbTh@^@+bc%HAbMyl9%`b-BgTIo9dsw@=kGjPW@98%S5kZx>ea8R>-L4^v5L{JFLX4{COf+T zRMqKFdR{WrgLN*1jWAEDxkn_N0OzS`9u7uHwo-}shUim}Q^yuC^3@0K;+eX30w9C2 zeJmG`c83H%-U0yu#*lP>b~XeWJr@bL=`kk$+pIXJTrO}heinV1_7m=0d1oy~`>RM2r9NezcINasb$@w=+U&PdIR25pcTkJhh*q4tOZ z1B~=ND5!^$jtvdcHEh+|WwGjYUyXKYMKO4~k`6`f74iM2O57LwtRVk&>w6k|YH$Hf zOiLLS>8Q1nzGWSwiA8a5CsQ4sce;3SpRJ=1GbCl~d8~IeFK#+@_;d8YTQ&20YGxt~T7+yw!Acl`4{ItA zHWb+~#1$38=R<3wK%ir(60U$nG)7wlOaX@*7vo9zG3Hqe(-Zz)RxRs5SVCZWSWwVS zhy~FhTUO0R0XR(UAPRsN3wZ=9%HZ9lQ{d>+MBV$P7Y^S+1g7M+DZ2uDT57$kc!OPj zR{xBmir{=zcA*YKMN&PA`Eb-}G@__03PnV>7tri2v$b~U^hP6xPZ*5L|Y&|G)&ey4sPWEQF0s4{|vgO3E z5B>V*H#`jj^>uqc9|AdZX3CRr&+=hMS#e8K_uoFG2ZZy)s>$`#w%SA?^)a;`o;S{4 z+Ia!0Log!$d{^cDRkHleCtllDIRORaL8vLmyXsaTaRO4eCO*s3K(XbI2HM z{Z@fek7DP^jLsixa#qT=3e3y= z#`Ng4XxnsAnqTr(J}zUohFTb}EDMSC)BYOkoyd20!~X9&gEdr_An*yLxp5_lcxp+W z9y{YY!X~;W&auav#lVstNqYX0+<{D8ACc529QF51tca|!)F6Q!omsgybQ%7r6pqqo>%B&Oy}o&Q-t^K-bcfcKAtu)a)PKviEqIK=xgDxIO%y%& z(cZ@o@Hm&z$BP785llnTx+o)TW|t%@*XLxzP(V9Eyy@-FzQzIEdmO;I#v-)cu5dy1Xt8@|E69u`H2Cuu#+ zoV~EHlY|!r+iT`%J>yAHggqQfa|K!aWy|^zi`l;~*M=wcX7hqXW8#g=bBEXr#Ir^If7S#*6*IQ)-S*$JIPp{iwT`YIMnua-kH@ z`>^II7rB#~`zhoCHXyQ3^hwR#L;ZBk!!2A)j^O2E0I{hfD=Q-%0%KF#U=Kp0o#EeU z@WDIDJLdy~Lopp!O60QCRGHm?v2y!d$nT4|ul^V=i3^7U{?iEn^;38ftb>bst<#>u zCc#QV&5%VmKJ+KSi)KNb31UmN^6X8KR}UOA|^ zknXzU3rwr@>9L7GRd%+jT3|+1XZc9uR(cbO9h^=M0flxW01VkYe~LuIZOV61wX*j^z9gym8(JrJs`QQ z^%+|iL!{nplk`Xn8N%%wJeTn@goIu;)*|(K^^$oH78@%C=DH^5B|Rt(VPLTjgJ3H$ zbNz#~Mzfb#KiH}1IKjfb(P)1dT5vYMJKFA@$9Pnj_1l?LeI9>8&zq5bfjbRG%P^4L z{5Q|inycmMytnARHN07^mR$A@8mE+J{^Bk2{$l2p253y~#yKTTebd3$u%RB;f}YlD zSH&unsadkB1%_1sN7+LQ?={6gg9mCT0F(P5kc6$G607R`9LbzT8u$)p^-)6Ab?aY= z9e0%y^EF7MZ5~=1H~sAf@w9bL3BSY6S&4S((k_H-Tx>hwmxw>hPMyEHR&zp6OrRv; z%vi1W%X^jnWyHEtlcC zN;tH#E!XqQ|JXRwt@fC2XXj)FT`pO5JP8Mq(zoA#sGiRqINzq)3rpg*Ht+MAsKJbJ zqW9cx@T$+pc7tLynDFXv+QLnC3%2K>|Mb`U4)@=0ztJDMaqtFb>Wc8^Wub2(T+9qF z?D|2>;U-7yt8O@P#}`T~4;!V9#PME{DH=>V>Ake=U(3PtTRgNtQiVo}_C+&i)61@6 zAUmI7q7D&+Nb5l~MGm$`fU)I3SqIx)_ei!T)!7pVC`4jS!?C#$Y8oz^0K(fM-}xXe z@{ca0$W2qi@f#{`woW<8=yRmwr0LrHpq<7~m#I1LD@}aC5Qsc7j2~I)nVQI$ zb0Vw_-f4u$Ca>7eZgp52%z z3eMN+c9?}pJuoC^Exm_gK>;w)8Gsq#c(SMcgb?ythtMr$h(c+CQ5cu+anMNSclQIh2{rA?egP_;Guq4j#r8Q*Ap+U(D6_j_9@>FYXrIh`28gN6 zly1TBeq_!!=jVeg@ZO|QJw$-UfYmB=N)B7bNTQ)Ui=Vs?fHOfFA;m8`DHM^r-;(kZ zfDoUOh?=7(_Bu1?Ng4)7|Mv})wmEnu$9y;1`!yWt;|vt!A=d^JoE z1Pr^mhF#}eKn@56lu$tp?8n>ar})1C5)|m9%$z8U2oBPJL438dJjXytFz-YpuH=f_F0zd!td6M-yDix{gVN zx@Pq9>~IY+CG3h18DSa1bbUgbehobOxYIvtGX{v<85CBpa8nBO0jM?!nnZt<2E#xs zAP?I8BD}RVM5ynkkG7fbB>9Unnz6lfeJLAYYF2rrka_KybYNy{EE@0!yjheF7hyD&4DO>-I(^nBIhX<2D;<_|_OT)UmV z$%eoT8=mVj#9D)`)3QK~p)q^Y?A8I6K-j-`Pew8T0RR9106^#f3jhEB0B|$_06>-i0RR9100000000000000000000 z0000SR0d!Gk8}!wyl{b*CjmABBm;tQ3xPTS1Rw>3X9tE)8*W>5hMdO%kXw#w6s2KR zq9`Xr^X&isn4AnzpcWF1>klVI?P|EG3LA%NDkz#V1)iB8mQB6sP@bG8S6X`g&uBJB zc-d#eYp#r!$I{jb;?Tfzc;mC$XzYVR3vbI9mrbTdN_@uP$hHcsJbB$ z;g=ke6ioc z{w-m}8rT>tS&}QFwgxunjmkj_NE#fYOsoLGr~_<_ydykJthzI>Prq{L`R_an9=_Jt zyJf*!U4QK~^V9iqT76Yup(-%5D=-8G41tEB&H#}hFp%&7XQ{^*>8iR)Dq9XTSTd*+ zH-w-GgM#aS-`Do4EN4ESefeF8l@;)!v4;3IwN;h@3j5R!vdP7>{0U8)>Y6%q#2J`9@})>Br4)aWGo3M)kC@k)4>3JX1k=Aj?voMugMYeA}!FJ_iG7HQXK(5Pv1 z7OmN^#mFR1hCF4eHEFlV63eWyS-&HG^R@5&$&g}C7ZDc$__)w^t;%*Ghs2EWMq#q6T?hwbcA9+ zG@L;!%m5Og36KaOkOU`?0sGJ$@_}qPh8!3LgU&>xPV9EJe{U=aqvCJYX;A%H5tP^bqC53(v8Txy^XPzw!!x=>#AxLJeH z2xx>-Kog7r#z7`99qIrxU;r==iU7-?60j=BRs&Lijj#fnpbM}KIsx0E9B>hg11^C! zz-7=3xCXL-eXtBS!z$bb*}&bf2Y-efU_aynk3a@+40-_1LNDNNPy%=!w&7*ig;${+ z@OPL7{0`|LUIpujdmt6Wci;f={c(yu#+XH?09!~TkOz`rC;*aNI7CuBme6vH4Rj&K z4myTWfnLTaMBf3@z%MXrOd)t4{m+{}F9o|%-xJ#Q>o+WE2Zcd$5{O#4VK)%9JadmV z2sBK%rib1ErYIVkSR$MP)gVYgF-r2sQ-T_i;t`U|PGw9vAtR9;!Xjyu&nYj;Ofjj( z)+dcqJw%YLQKryv0`gjBc=mOaloIXeXjhKNAS%oR(MSl~(SS%o6bZtLjyUCQX=new zZ}$M>T*)Y%_aRfH2k zifEC1NlMi=G}HN+mC9Pq4AVWdhn#Vi_qMWNIx8mJ%LS{HAfnE5$+@Jl>@!WJBCgZ5 zk>iIS36gSaCy-Yr4h?82b=%NSl}>HF$@;D>xb0i2%HL+o3e95dQwVeN#@tg*4t0gP zz7`WzcVCGsV6*peC_NjRh~tm;>EmnXXVgQ2cCdTz?KtP zjYroTyzTB(Iel*U@Mf5hOdUYA7`$O2kW>>DO$S*quoCJXK+s|h1}{@}VkgZraSh@= z8zblnD;m^QkWLi0RWqY*lTDBm&&w$Y0?2BdU5=o|&FS4Rc?Oc`-#_NVg>W9A{9IhQ1$}~3vSvR$vs||XW*LIsdO5mS@ z9Oh`cn6!@?q9}N=sYId2;Y=ww1K~#1?q3F^AZwvyvBt28S14dDXw znfN80{U`Vb<812iuq=*_w^fgS#0!ES?Q2XkLpBrQp_M>Z%4yp!q#+O!Gq1K9hWJht z;4@xU1V#?u{=D#HqZ+&sobC7@-G|Ep8WjI^|MWrd=`LThnZX)IyM0cXyF>0(A&#f-I0r|!9tB_D2&dGmOAtfW<`79?sV%Z>kRa>@k_5xxM3!fz>1pY-D}rE z=)orrboZv*s-L*LZm++5K{?-{7edrQ=Ml{_p;~#)eB$lzcFZd~XMUT3wgw4v>Nb{8 zmfgkjG^kRhN=uo3Oww%=;qzgd4%|zMfu$Gd2CkUq|7e65D6p~MMQ71Kb6=(*_@eq^ z*{@UeffgIMpC*pK^diq*MB&*78jLoc2|g)#TF|v}WdFUmiv4p`EA8m?k%RKvlb0SXyu-H7)7F<7q*wGlQQ)WMllMClG2C!VN4)O+=SA7Z8HNW#&@u4U5<_|0{6!m*rYi=as);u< zCm$jo&(@Glkd=);X=%2hh6Qwp*P7z^%TloWn|R?d^ulxKk>?(L;6EU_S#=77GF3U!*EP$EP|$OW8CuRV{}YWd8QrUik+Qy-aEx~nih%8 zCT*J(d7c(=CJl%7J&pG+aDh8yn9_o_)Maueimkj-N;!qZxpZ@_s|(<>aYQee7Qeka zStMNR*&^%14~t25@r02paZ41#s&L~VUW-P_;es#+tzMG;;34Qvo)4d>&H5`rFE|z- zt|c?iqykrT;e}QfD2%Q%rpdi>CJ(I`my@=Yi0dS^bBx!2?gZA+Z8NHg#u}r)QQ?N@ zf~JE5h3ymxYZ$Dk7p32zi-Mm@3yLX!AY(i|yoUD~7@2{Mj&m<%X9h zA>`y(gY`@OLCRa4iDqc~%0;B`_z;U%w)qh{SMpRFjuOV2#tUOmhsLH(BfPL}?7Q(W2lrD$8Hi*y)kSZm5OE!@A{!s{*&F^99r%RFxY&tBd6TG>EF zD=>moMl$uRrf%a(Ho-hn${eU8A|+?TM~9B|HQZ2B4Ek!UXe_%iNu^kbi~W_NkJ6$J zMb|jVWExEKnjgiL8emu}0SN$1OzUNE$vu~;+|_P()LWA%*R3*N_KBY|9$Hah-ZT^+ zz#SK-{Flr8#^G)^48Exy)oKdg@pdXD#eCifKd)$Al{06%tK{YK=~Ee*lCr`GqM?+E z^RWrKR#ACbGF6wbgC!3|5U62@)9;k6G1^ePYuqtm+G`Q}yjkET;HA=XteL-&dk$P+ zyuI~KrlC&II3i#G@FCZ>liY!QztsQwm1J^Ak1zs~rM5U%7RO~Qh#6#UA!r?i2+}qp zf60jsQumMh3r%8L&Xo}Kigi-gxhCD@{z@qpgJs_@#Jgi5-IV8f$YWx#zm-ZArz(me zVmk&pbTNaKS}e`Ct@qos)#xMJ8Jdls$T(l2=8=A*ALiGTF;j%CRj3>^D zOld-dmof1b4`BiZ^aC+OFoQwjf3aAO_)Y*aNZ!sVfiwhwK$89{huB!x02|@QNQ=)d zce}@{?Fg!Eg=geN-)~)z&@g%SR%Ve_vm@t7O9(y10V!aDr>xE9rXzYHEM{gvwu&Va zyczJsC}JEM-z-R+5UKTZFjZDvEYtH4*ReWf51DoVw*dylJTn#rEQ?r@ks#sA%77w1 z7cWwx2P@%m0g zwhf4xIwt>vF|L7$23kR3tN}hL5Vwk0ZpTvqhDc~ZZ4v@Xx?Q!af&f+##Dv3}&Jgq4 z$m-lz;-NL7ZHWRdW#boheob3p;GI>nUL6=DY~#A4dE?gh*)tj5v<(tpO6}bLQ!NK_J&I}&UyY6yYe9;~G>nogT zaWNAgyOq!LYI{Dsw!XfM^Tz5bTlS;V;Lyl1*{sfpgnuS!Xe#p~$XAvYB2Va3=ayvU zs3vDF6-v=oar(iHd-12A&c`QfF!U$qR`>CI%;Kybr%G>$kniv;n#1lWg&s)}MO-`J zL2ZMG>oOyR#l{+DZ{FR?j5_Ns4|($661jTBsTE{mGXYUbHEET~3?~JIG{>@_yGa~8 z%SH_~wEp~y`13#)Azj6pB>t5P5bfjK#tLey^IL1k)av#+J|a^1A{^H5)HeZ)TzM7e zz3pqep`0P@8y~N>O>FvM7zCczI$F8w-9PVNxf6DeN!wVn(N4(v5gxEA`f$q2Uhha| zA#3kC@WDrRE}1kM9&4Rb&We;RCzJO2Y$fH0&&B370k|lXZ^q;}i(Bh) zo+;=Ps%1nKvKhL3CtW=I_0rWib<^BD#|6aZqOAtIeOSNF=+o@cxlaDCM?hD%7JgMZ zXmM?Au~&BNSZb`&RUCl`2HQz_NR6$YHn~;5Bb)fV8VdCpa#i`s-ZKb zj)HEgl&0NoDtwWgvI;0~Qcg(E3NNW0@KqC(#eqK9Z)!}h^m&_5+x(LPsv;9ZkxI({ zZGc$XJ4!Y|y`aMCZ;bf+zT)k9T5u4k;bAD!JSWBa6&OL+IqntHWSH8XjNbXVVHA0~ z-TkUNtT6q}Y0%cT=JU3y)peq=If%*X>KsUG0YcG*zJ-dmp=@Hk?j1qrZFwNO?bKwT z&J>=}QKU=`nmU`iGjTEa;I9APZF$1vIu``T22uZ1MZl)x-4Hwx3ZqFw7WoVQ`;Zr# zU6o_=ZPvB4e5-eBD0)$xEI)Vjf*+Zxb9oNx3d{2M?9;iVw{ckntCGD>y7ADydC0{o zf$H>M@_E@;ypI1HkIR2v-G_nr{EH!LLZIA+hq;%>Hd#Y%4=&2`cBlrg1fR}Q4_s`` zr4pc8TxBfCSYC_w5X&BSG7R;)ZP)49@p$aDj*kz*)K^X_DgVh{?s*g#GSs%GQWc#4BKNwxiD zOp`&*7M$cQ?h_LQQ%X2p#{7@;ENg(%jf4PQ%PLXB=$7X`VA7 zG4P{&UKO;p`PuDd6yY*B-Lx0Fs32)vn<+?YY5{$}G5Zs7$)$ zN^AhC+_0%JgT?ev*dc@P@(ldXeuUnV6PKyUX$YFB@&lCeyd{GX^a54ZsF6_@*-iD$ zb4$vs6I2@HG^J?Xl-D2h1_hL^s|-%&VenAvLvD*6G>7B*P3V+79J2XIa$$H*@5#^{q~*V+qPuWTKghcX8Dyxr-h*R_ryj(BkYgwZvTWq-Ls z&&|E1)MO_}+RxwF^+((7d1#vx-c66Qrz4D4?iIcW8pkFD&+s-8K-$~bx!m^_Hlh_D~+P9ohx$%mb zpp^RqgOw`;MNi8BV+wTaB7&5?0m!o!H!+q}ZWLbdC@x6%nX(`9T^>T3*=ck?=R<|LX(Q}{}Fyfc_QK`Xujewqr+yQ z*W&R4eyl3DqO1~k>_iSY`itwov?T{g{VlBp6izB-YQG={{pLOT{+Qwkq9m{z{*TZA zWgMScg3I=TRT2L4I|3z(lO@67BqS6VNf5IU0f;$P5M?_lV!6nRvP9!gp-46oVMRgW z5`{zp2uOmdoHYhl@oYN8+)T!j3K!=jS!9)4klry73^hTLmqmez=AzN9F{yTSMQwrd z(1O>p%6LM1?abAk;Td2~0~}NKknJ2mo;?iW_FD(F+vi0qjMro(50B!bxlPzqNHUaa%rcu5Uzov(x2{$gjJz{erG@{5hs$OClB2HdS7xTo=qZH61f1 zHS{NvkNivQ3IEPY13XD3qqO2>Cu)H8~4GXLQi6CG^D1BZiQfTU~@4 zU#!kroH}v?IEM?eg!?txf67+dB5F!Upw+k0;1nd^Huhdbu6pmp|mzPqF>Z)tLh=}Z;f8%I15FT8%` zRPJXSE-Q7|4#UTS=EYac6t`R8dY5>Vg}D53u-JqVqpV!R0;Umv0XOqPg{PS8)kX@w zk)G|oIlNoFs{B&7bvDk^fc}$qXNbGKA`5d~*4tbM4gtGrZ{!KxK%Xns%G^tJF1_2+ z_Vo=!4b0NTpRmK>p)kqm$Idh`NS`#cKj5-Y@VhK94YB7vfG=Hqe2)n08?%G}-Bp`u zQYnY#X4KW!>kVUu`RH`@MmNIOVb(B);KmPs={e^4GMvA2Bou^(W`u5c39K9#Bmg!9 z+`dhe67jnYE^jIN_s>%xs9p8aL@Xlu(NO&noNZ!*cpJxCf@MvzFyh|7s<(jg7lAP58jMG;Q9@mO|RUMlW@3bfz7GgDG3PFLc4XF07n| zn85?x)kNmLO(=zJFq4ROMKJ#HBy z(o*$$A}_OypOG*$1Sdc5G3X=M>a`oh!wKqsc^cl)`&tGDf+$EANR*yBI1oB!>WH)bvWl+RbwK41k&VEnxB zRKywmbL@sa%U=w~diWgK2Ba{c5;h81fVHdFB5;LR_4qdeP`+}B9o%^o6=h!A^DE^* zL@u2tmPLp==#%u0s)ctkB9}RAA4YY=zGXOfyn(nj9WT-gg?iDTXyx=m8)BVPbugJu zvq~Q%@3XYXm#UpRc)#!1URrdu9Gxz*O{gD&h(wrx17HU#`v@4Z53hauHaWSaMjL(p zz!E#ye@(bBt}(tbZeie70C0t=+;mEv+X#+>%OzPww|cExCE}q6a`7HQ_NvL zxmIIsn6yDpM{elwOH1=w$tsOXFvjP36?n}87|_yU3HMpsBGxIFHf-WcbS>}p;a)c& zCtZ0~(>xfaeC6{>8NS21^wwAdPK6ro`rI>wEAP3OI~mOI=gc|uJe+CA2xMD++H#}0 zD7)y=2r5bXpwp1%sg>UE)I}*#L)a&dqrE@%Dpf&STDQ<_?QK1t4BpaqS8cs*AqW}- z0e<3o07*UCimue9)##SWqt>H#w7l1lVW4`XhI|8HxCt|5anPmape^W1eOis4bDvs{ zX6sUSGPa(|u2lqo{N0T+Ir#S~RXCZic|@Zco(F~(eFZPgt;tA(kKRiVDU7mWrl?aG zGhZF|NzLD=+NU_a+U$3>3Zn#(dM|@dGP1RMhZgB>7+DXqaj=mo6N~hEQF0&~Vwr4x z7MP_}W(CRu2i?o7_k#gb-KJ`bb7)WD>G;M3mHw_dr&}WA4e3=0d?QcSo>Fy`yIRCm zaYd^Q+dnH{z*O=SnJh&Jk3?Q2n_Y=qyBAj;nGcj4qi;8Y4igl%2CKFFa zg=xG_E-gKz@W%PzDj^8Yt%fykIh>ikC^w@8Uc}spf8|;Z9HIZ;kSuA5#?&n#} zTUlr#9q;lF1h|oCfobN*kV9*Jlf}*_xso27*Z~6l=yHD&W(qSx?4M%|Y{ks6f4osh za(_7b2j&)h+o2P02-hR86G}>M#r48;FhAVfJ7SCLykG=<-+*wta-NI%_~ReV26nuj zy-Xce1=qJjT}-<%Pp4qo|pkDVkE0VuV z&yF{+oB63MU*GsRpPYCfpZNXHMMn1Kz;u?MUt*$PUgB&6eysGs%|^B$+b7oBJI2Q& z(lc*Jet?IMcT9};7SrrRf!pu$5EfEY6fzeGxiG==tjqtOCh|WToEH?77tD9n&mUtG^Ii4);Gn#`Ao3S=B~ztj zGr-n>0*N_~hKyRs!pcorTqCv-w-76nHALZ-c#mzww2+b4ER-Tq7o-k71q(rlAH9e* z!RkTUEC?(Bm??A*`ZlPbG_g^JzBO8C8Ah+@?mV7NE{Z!N*kLvhjDgns2m7XFeSNZN zBMn&yb)5h5nQm~f2!l}PcR2z`Vc+y5qpgeC+RE(0beH`e%10JC7eNM4eSN3_5U{Nc zQY^LlCnx)-$R?nv@+AMF1JKLz6lwAS+a*}4BFW!&08&W)@t6#$lIO~@QbW?i9?^=u z3M5_oMGv^89NXsZTM?DCV%pCuL^d}qB%Sp5$4|$WFJDAkH1$_72PRf5m&E@hCJtag znEmim$KNNFelq{0NKQSgQ=Y1>R6>?NK#7{{YuDquMwUikznx~D{Nn93=#loW|NCA7 zeYgPab&|FC>w~vT@bL*D^}K`9POTqr>z9kUvt-RHcklj;K^|MUF)>%#vYLUZcK^D| zPH3+$?00Y)I#{g!MoA6+eJ4@g;~%TEF8Zl~`b5>RtUV|*z#6#cMol%j_f|#Ht&Fk6 z58!Z)@4HCF+Ur$gPqfFg_`hYT_8+@(p}ZqGess<%uhpxQM5~vGYpU8b=eM|@TNb${ zY^@@)bXZ&1m#V{PBQsYC@()KQy95c=oQqq(=O00or=F3hER;Avse+_Wht(vWXQ;C? zbopihJ%+3HG>k6We%iEVw<ifeSJH*68=vYE6f3TXIK9SgI1pZ>f-b9gFxyL}^DL zGYvVx8RsUtA}=|f<6EVvOoublOb#<~^$cqD&NE46A|IfTTY;T3W>~j?mY7H@Ni%pI z>%W~mb|hgD)#Q~dPxdlV7bP4Svs3;L#_h~kvpEp9b6b+Y*3K^~S-V%~hbC8a>RiaE z$VA)H*g>+3Zs>`HZUM?#f5@MO^H(N8k|EIK&s*OxA!EZI>qqU0LXST2XaTD_4^ln- z@)XhO_D5*JFV{`;?8%TM2tm+fAxCs($=tdz-aFiG=zBQ(83!@ z(E7U!xfLR#Demr!0(k(V4vTwwVnm$^bC3~;r}cbu&#}6dagcb(LGQ-J$Lr93kA%E-$F2Cw+(OGUr&p1r~`ZB=F#rEa~k94G&IbOWA*a#VCx=a8ebgPbGdda<|*LVZqEo< zCm!({2_BUMVGjl!!~)qGeu?UNIDCa?>IeG$pSFYKFvRym( zKH(G$vKn;-eG_%U>3UF)P`4sEkTISlTYGbn-DrP^lA^-nt^E;dX*8jTaCT9aHt>2& z)bJp1WU}#s`hKHsF68FiWi*$vTXmdyDi2Q|lb4q{!^`A}46|1kALiBTHQg!Fk~Fz2 zwM+fyfzWPGrjI$*MU8nO1JsUa}7V3R7^p@8LJpWUUIp>o}4;AzP zpE;BK=FjBmOrZPo4Unnk)>NHjCNl?XW?^oSX|dopt%g>Wj8Ay8(>6{%&4 zGz*jx6YG~ptL8EkPEJ-SL=xJREWkUFKX!llEnxn*F8_SC)V1e31`lbtdO(!IDL0P!h$ohLd!PAAF{HK`rO^# z6wwgm14YC`!|My{kCz`Wl2=xHLxuw@GAoW&p9IRk)dRgBJRW-X<1KsKlF@2(vfC54 zLN_&isF2Ix;dCdylc=|dy`~AVF@7?BBSMYbfE=WHLU?irS5A;=3A#jxCIOlk4~uum zF^EM^Qc$6SJq`as-=%nf*opP)dBWlyQVy_dJ)h9 z|I=JB@AG&8flOnTt-sLH7OsSpWM0JF$M1G=a_fnpkJ2`0U0sOgCY{P!MavC zwpAe7)CWZ`h#lo0i%4a(hrJwi8g*CD(A`46w3lvg`rJ7X@zxS^TO?c}m*h%YHG{h{ z6yv7A`cCrBD!`?5WGz!@O0}i(3w>whVY#LM8XgL;9mFcmvkLMo3apA!PJX85i02xl zoo@47#X_zbWFaGexe`sLc}SOzcZL@eONk$e_})6h#zRJ@#VT&H%v~m9&&ldUErwMY zxRB9VnY7OX-g6}u<9z1T*V2>d)4l{7z*OJk;34G}c6%{@lNM{4g6fk8)76Jq&F!#`>P_|(Uld2A~-}<_F3;@3!4BUwSFVq<4M=BFkrFT(< zuJui{ay^f%pgT`don6-tX04J!^U;%bs!!{7WWLkH+7c6F^kVngpOp$L*EeykDzw6B z!#|?NQh)J3Shd0>EwfnzRh+do2i)8$Ly>C!R;|juc+@$+2i`l=f&Tt8b3{PAN3PP> z)ncL1^{^;Jltcf<UW!#CY-po+_koe>mN$gXt#_W zrP4#r2KH7^^|5l#q-L2r?AW)qI!#Eix7qAnQm;pwV~Qn>$QiF6$?N;iTBNS`-4>M`cn)( zcHD@jp2{tzcHI!ETs*?8>(lKJ?g?iAe*DU?1r!Gs2iTa+-g=J@E0`Epv+OP{)Gds2 z%Pqnsl=srD|5u+paRz-ayMnQoRm2YR2-}2xguOyzeX-*M;Cc(w`x6kF%9 zwqWlOTrXZh!?IB^0hBE7q;zH~Ph`1*@8{y@DjXvmqZ+%d!mN8uLvdVJ=~g-F9anJx zVJ21>o){WCXv@PDIu*F(&^FhWZXu)-b6m6k7nxfe)`;I?bs5UEq(Mz*QttI5iwfv* z5iw!;2XFh2YDBuX2~ja4U5~b?}yKv zSNl>r4;K-vDTJX0G6dkB%gH?A%lpBf#w-P}oo#)uHy1ewL3nTINKRN$9XDgq((tvE z(u6JK@ND0t?DZSYhDxYvA8PK%iXOxk`^$l7Lz>tkv^s`pA~P>)7-eZt7@WXpI-a|* zdiTnPUByp&Ap}c8iMUYw8_eVrj^pW*0lS**|L?l9?SQ?~e;tCVrJp?(p-o(QAuvO1 z;3ew_j%@WV$id%s5V!hwuG%*A%fW}KfBm_aivh<1gR=Rd;jZr9Xgr#1tUwtNY6(?K z&8%v5VCda6;U%gvOM^a7mjtpJqLaD@j{qWqc=xyL`~-v|A#AAA zR_^R4*=FN7u!$rj@%UJ5O%h)Tf}xXd`04gH{;=sPZ=4n`*|F}>pOlw`!Y7WTTJsrp z#Q?{F)84yl+W3Sgi>!8VYq2vC0T^HQX$qrpXrUA;Y`vObVI{M4EIs6bmzlkoZBEgH z7n@nBw0r)I*==U;AGNM-TwFw0k6M_VRP@oXn4f&JK`SekX&+O%dcJS9KID+J#Dy*n zNGFMFOfHSQGjXYFGBx=2LTBBaU2{U64>Pmr7KEARg+yeNX;Rv*JN3^oZEbf}_+O7` zY#E0JV9mV2ZPXn+pgg~# z^6O2-N^QhODsBP@gp^p?8SNRvPfd>%ngyjx2`TLkv@Z8W?u08#o71vSDo8NG1!^-e zRYVkxTkziyb2?{-A&_tqVYkZ}#}a1X)Cb@5{%elS@~@1|5&t{xq}j3Rrw|h&_Y;{e zmCERpfAUk1tBn7{ImHInQkQvjgI~Anr`|DRtW48G`oFmmu8-Jep@eCkc|;P_vDxuz zeQ-uzYz=iXHnvfiUm?zK5F?MWYq3PtAHK%$zi-<_1(p0-w#CMR_GS3twC0R;%iRe& z_a~2Gw?2B)JZavy)oPiL7`GnHcIE>J4Lw~>D ziSyQ`zB2Yn_CiQ3l6r0m3&&o;6hu-GxG_%7lwoshL(IPhS&;&(crK{Uz#R= zTX0sMc9Y~y!n;nB-}F4d!%M%w3HRz*tX_ox{{_Yx$|b_yfE~(%M=qOquZ|6S17n{c zmKo$L2#K&f7%N}F(wO=cFLGoA2g2l7tYAcBYqIH?4uOVT1a_enst#HWLJxc#|s7B3PMw6~CaHEQ4a@QyV&pDhLOMA4o1uup~0x;=z0?RUpZH8)Xb ziM75Ojc;xj%bRU(G_z9_(8xA>v$~kRDvht5S;4E&V)eKS0nxwJ=(~Boe`^@GDU5C`$>$4tEn4;9mf)#RfuW(m5NhwF;l?5 zJ)Aox;nndZW87-nai|SFgvHp-6>9j~Oen+|338{WouL(5aP`Z^c$33C|KLdS_Bh*bn z$AkoG>$mp0cCqs1R*iOQMA109f(~`uE8_c36}v9>T0#2n=Fc?t)W8Con3g;&(o$>g z^c~9>O)P50okX>}-|pnaez1%}OpxTUr!k&Yyx3{$@Q0`mZAQhPLT4Nnu zhpqm8&aJ~zjI=H4t1r-oHI~QKQO}9cE>+B*sp$zYXaTap5mw9ycu-xAusM?SgIrM| zd_J@$5(L6!gNJj#yEss{zJiFIKhmZC9F~3n?l6gd33%s1ztAyxr@?K-R zmq?`33q*pls@{E7X$g9PP$v@Cdup=cV(LJFQ?6EtbSP?q>!Ht?!CQ_Gd(p3bc*RpA z96xRE<3k{)Pfxky@0#E4C@pMm?E2zGypKOesGM9+ZLLWVQXf+5@HOM~v5n`aJOm@~ z&vjPZTP4lieEg+tl>?AN?uQt&JS%So5GEkCYvMA@^<-Oi+nbdKyC zsln-8b=FGhRv~|jzx!cO@bb%# zr1&Ilj`@$2`sn!~<&T%wCI4j0d z=F?oPBsyIpMjd6`lp0Vr10>RtUk8X}u*b3oggiZiE*zYt!zZ8KR)jj`n2H)i-JX?g zLzUu=_`@A_nL3YAZ;#I&?l(Mi678Y2rHILOes!NSZ3`Z?~+@JaDmI~&raOrNiKuCkek!7+)2ui zI_X#3l-IFw1Iy1s5oItl5BnfOoBNT({4nnX_7pq8JFFwV78;3 z6URHg1J9|?;iR~$=LDRSDCSAMCpwmPltv}#cX-mBudvVUjx`ca6Ak;3`AYIo+&+V*Q!wQb1M*io=r8`GrmXBO9l zTPT9u?QxllcdE2KJ~xxPF99kKwl|Fifv_zN<~_MK${5U=|mfH zec*`_kN6gOPHSt9+~NNoB`4fV_^)2B)>e5=b$p3?0Lrrm{&f|dB{L9=#z z@LxRT4DiqYOy*Bwi}v0!f=v{ivv#0wD&(oICg?--^uMml;~gbB#en>Ls`HMIuwJc? zk4^+AGc%P{LY}U&+b{mByeBo6T7IAt94L2=Pc7f5sjp;_nPgUF{e!u=YJUgPbDf^X zp$OK(xvCg0s)+~}u7z`G3i)%AgMY4?jr7cCH~ae2wz2a)k>J5Qe2?thJ-64#Eag8j zdN>0f1G0+davXk%_SkF20BNPi5`SwsOa6le-N(>$ZD^K-t3(CfC%UZl8e11lpx$Ve zbo=Ksgxfc`FXN>N@jYy=L+tVBA(;&5Gl{7|`>uRo;MKK7Eq zuXA!bR{FiYoHVVf>z-@%L$~E{8v%ubGj30Xy{u^DvO!_?BaC$=2|+ zo?CRDYTm3Cb2fVijZ?xiee@K0el+n){M1HQ!<^#A-szyLm=L$Cfsbo6t77B|YlgIP zA@g!zFMVL1!T8ot9xbp&5|&GKJD`yGYEbQKa| zn}^cGPJg~mIAxhr%x^E^tVB^dH47md7uyc_B;d}lt@BscsE_Li@#I9T38V3Rez(H6 zlu%pZsD0m-{ujPKxns4edS@kFudvWZ=oW>Z4p=ZtGo&KCG$gE8RSud9;t#EC&36Cz z0~2e!*%tlz%$)SVOU0{>C1OEh>h^mNRP(w0=USC}VTs(9rhOh0)#x!!)Sg@Q9(6U& z4f54s!lSQo3pWY2N7;Ig@YUrf?DxO3+*h{7A1naPs`9Yn(vS)!P-r1ff9?2H0`4%PN{cXMK7*7&B*K&MzZA~ zu-4?kR`avA92o05yW=j&X40`E69>p$YEO;F)JCYNjhccG-j6onR1Z2I9Do5N&yIxzZ=F+uJlB8a?Dxb&IW&KKys58 zY)4uQX~h!eLMR2fp(O_q$!jhMIJ(Xw#hZxX95w@eh1!%~Fu3&PCd2}2DStfjs7V{f_x`a@g^iRKOQsC}~@d~6v3-!^4( z2G+6TtW6@Qy;OS!wtOmJWK60O^h&7qMP46GiM^Pn6xu4aVUBX0psOzn`-7E+q{?c& zWh(5}d%=C<9k)hSihW()b;DWWu?8WX%lG|dFuB!i`-GhwxOo}rDSybhTE29_KI23G z4D-L8xBdQ&Up07opz(6XQ2xk@9Kf^B+htFZFkukYE=42k7%bm+$-Y9bcN? zX2!fA(EW11ET*^$PNU};UM%hipZTwxC;cCaNR5A6ZqM;jO_YTtyueGedKwmyGWk0~ z-xQ-jc0xdwx(#@!4;6WQ84-p$Hv?=}MJkkOO+}aKA$=+!jvraq;LYuINJqv~4-}UP5t|@Up!zWY%D=H%xu5z1!t*D51!6 zQkkxf&@qSj&^M-}YiZxzU%xk827@!@FVmYO;@uCY`N)u8>B?HN5O>>_a~Ea_1TKz9 zcv_&f#Tisd?jj=&TtVVDWN1IjPSozlRwG- z8&E_OW1SDNY*uwkYg>CqXIFPmZ(skw;Lz~M=-Bwge~9o=9XHc z)#(k!$f#(OIVSce7v+S+ADA%9e4nQ@plS}|!&WFCb?QFIYy z$W9qV9}G-&b70*Y+$V!MKVZd|fib<&F~oe#V*9Mmn%L|`6w%`Yhe;yER%!4Lv{9QA z`}<%&*X#ze(KJpfU3o8*;-b2m_kmTZ7wAUmR=8SB>^i^MLo=q0hfmBjT#Pd?C9abp z)Ae_9^BGjx?;>>#+rX&bwH)dYtwleODjAx$((PC>C1dWKpe8O4xj28f^MpdmE^7h7 z06zb6mj9iZxxSlgcil-2m5eSmBd~OOLxIE)wQc*2dTb;%oVhk67mjMxosIX7MTG%Qhz2Mc-?P-yeMs6G0;jEqhV0YDkrDUa zhV9!}V!?Vp{>Nk%i`PG9tz?XjPZ}#kRE4UAA

- 正在生成歌曲 + {{message}}
+ +