diff --git a/CHANGELOG.md b/CHANGELOG.md index 01bd11f3..fcfcb172 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,19 @@ # 更新日志 +## v3.2.3 +* 功能重构:重构函数工具模块,设计成可以后台动态管理函数。支持添加自定义函数实现 +* 功能新增:为充值产品数据表添加 img_calls 字段,支持充值绘图次数 +* Bug修复:修复 [MJ 机器人空指针异常的 Bug](https://github.com/yangjian102621/chatgpt-plus/issues/73) +* Bug修复:确保相同 Prompt 的绘图任务的 Upscale 和 Variation 任务调度给相同的频道 +* 功能新增:新增删除绘图任何和图片功能 +* Bug修复:修复虎皮椒支付二维码重复扫码时报错问题 +* 功能优化:自动将 AI 绘画中的中文提示词翻译成英文 +* 功能优化:优化AI绘画的大图压缩算法,新增图片缓存 +* 功能优化:支持为 MJ 绘图 API 增加反代功能,提高图片的加载速度,大大降低绘图任务的失败率 +* Bug修复:修复[Azure Api 更换api-version参数后请求失败的问题](https://github.com/yangjian102621/chatgpt-plus/pull/71) +* Bug修复:修复科大讯飞 V1.5 API 请求失败的问题 +* Bug修复:绘图失败后,自动恢复用户的剩余绘图次数 +* 功能新增:为移动端新增 SD 绘图功能,分享功能 + ## v3.2.2 * 功能重构:重构 MidJourney 和 Stable-Diffusion 绘图模块,支持使用多组配置创建池子提供绘画服务 * 功能新增:AI绘画页面增加翻译和重写提示词功能 diff --git a/api/core/types/config.go b/api/core/types/config.go index 2cc6d738..a1827ba3 100644 --- a/api/core/types/config.go +++ b/api/core/types/config.go @@ -158,7 +158,6 @@ type SystemConfig struct { EnabledRegister bool `json:"enabled_register"` // 是否启用注册功能,关闭注册功能之后将无法注册 EnabledMsg bool `json:"enabled_msg"` // 是否启用短信验证码服务 RewardImg string `json:"reward_img"` // 众筹收款二维码地址 - EnabledFunction bool `json:"enabled_function"` // 启用 API 函数功能 EnabledReward bool `json:"enabled_reward"` // 启用众筹功能 EnabledAlipay bool `json:"enabled_alipay"` // 是否启用支付宝支付通道 OrderPayTimeout int `json:"order_pay_timeout"` //订单支付超时时间 diff --git a/database/chatgpt_plus-v3.2.3.sql b/database/chatgpt_plus-v3.2.3.sql new file mode 100644 index 00000000..90b272e2 --- /dev/null +++ b/database/chatgpt_plus-v3.2.3.sql @@ -0,0 +1,637 @@ +-- phpMyAdmin SQL Dump +-- version 5.1.3 +-- https://www.phpmyadmin.net/ +-- +-- 主机: localhost +-- 生成日期: 2023-12-29 11:35:28 +-- 服务器版本: 8.0.33-0ubuntu0.22.04.2 +-- PHP 版本: 8.1.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 */; + +-- +-- 数据库: `chatgpt_plus` +-- +CREATE DATABASE IF NOT EXISTS `chatgpt_plus` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; +USE `chatgpt_plus`; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `chatgpt_api_keys` +-- + +DROP TABLE IF EXISTS `chatgpt_api_keys`; +CREATE TABLE `chatgpt_api_keys` ( + `id` int NOT NULL, + `platform` char(20) 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 '最后使用时间', + `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(100) NOT NULL COMMENT '角色图标', + `role_id` int NOT NULL COMMENT '角色 ID', + `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', + `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, + `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 '排序数字', + `enabled` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否启用模型', + `weight` tinyint NOT NULL COMMENT '对话权重,每次对话扣减多少次对话额度', + `open` tinyint(1) NOT NULL COMMENT '是否开放模型', + `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`, `platform`, `name`, `value`, `sort_num`, `enabled`, `weight`, `open`, `created_at`, `updated_at`) VALUES +(1, 'OpenAI', 'GPT-3.5', 'gpt-3.5-turbo-16k', 0, 1, 1, 1, '2023-08-23 12:06:36', '2023-11-28 17:28:19'), +(2, 'Azure', 'Azure-3.5', 'gpt-3.5-turbo', 12, 0, 1, 0, '2023-08-23 12:15:30', '2023-11-28 17:28:19'), +(3, 'ChatGLM', 'ChatGML-Pro', 'chatglm_pro', 8, 1, 1, 1, '2023-08-23 13:35:45', '2023-11-28 17:28:19'), +(5, 'ChatGLM', 'ChatGLM-Std', 'chatglm_std', 7, 1, 1, 1, '2023-08-24 15:05:38', '2023-11-28 17:28:19'), +(6, 'ChatGLM', 'ChatGLM-Lite', 'chatglm_lite', 6, 1, 1, 1, '2023-08-24 15:06:15', '2023-11-28 17:28:19'), +(7, 'Baidu', '文心一言3.0', 'eb-instant', 4, 1, 1, 1, '2023-10-11 11:29:28', '2023-11-28 17:28:19'), +(8, 'XunFei', '星火V1.5', 'general', 3, 1, 1, 1, '2023-10-11 15:48:30', '2023-11-28 17:28:19'), +(9, 'XunFei', '星火V2.0', 'generalv2', 2, 1, 1, 1, '2023-10-11 15:48:45', '2023-11-28 17:28:19'), +(10, 'Baidu', '文心一言4.0', 'completions_pro', 5, 1, 3, 1, '2023-10-25 08:31:37', '2023-11-28 17:28:19'), +(11, 'OpenAI', 'GPT-4.0', 'gpt-4', 10, 1, 15, 0, '2023-10-25 08:45:15', '2023-11-28 17:28:19'), +(12, 'XunFei', '星火v3.0', 'generalv3', 1, 1, 3, 1, '2023-11-23 09:20:33', '2023-11-28 17:28:19'), +(13, 'OpenAI', 'GPT-3.5-1106', 'gpt-3.5-turbo-1106', 9, 1, 1, 0, '2023-11-24 14:05:40', '2023-11-28 17:28:19'), +(14, 'OpenAI', 'GPT-4-preview', 'gpt-4-1106-preview', 11, 1, 1, 0, '2023-11-24 14:06:11', '2023-11-28 17:28:19'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `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 '角色排序', + `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`, `created_at`, `updated_at`) VALUES +(1, '通用AI助手', 'gpt', '', '您好,我是您的AI智能助手,我会尽力回答您的问题或提供有用的建议。', '/images/avatar/gpt.png', 1, 0, '2023-05-30 07:02:06', '2023-09-04 15:45:56'), +(24, '程序员', 'programmer', '[{\"role\":\"user\",\"content\":\"现在开始你扮演一位程序员,你是一名优秀的程序员,具有很强的逻辑思维能力,总能高效的解决问题。你热爱编程,熟悉多种编程语言,尤其精通 Go 语言,注重代码质量,有创新意识,持续学习,良好的沟通协作。\"},{\"role\":\"assistant\",\"content\":\"好的,现在我将扮演一位程序员,非常感谢您对我的评价。作为一名优秀的程序员,我非常热爱编程,并且注重代码质量。我熟悉多种编程语言,尤其是 Go 语言,可以使用它来高效地解决各种问题。\"}]', 'Talk is cheap, i will show code!', '/images/avatar/programmer.jpg', 1, 3, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(25, '启蒙老师', 'teacher', '[{\"role\":\"user\",\"content\":\"从现在开始,你将扮演一个老师,你是一个始终用苏格拉底风格回答问题的导师。你绝不会直接给学生答案,总是提出恰当的问题来引导学生自己思考。你应该根据学生的兴趣和知识来调整你的问题,将问题分解为更简单的部分,直到它达到适合他们的水平。\"},{\"role\":\"assistant\",\"content\":\"好的,让我来尝试扮演一位苏格拉底式的老师。请问,你有什么想要探讨的问题或者话题吗?我会通过恰当的问题引导你思考和探索答案,绝对不直接给出答案。\"}]', '同学你好,我将引导你一步一步自己找到问题的答案。', '/images/avatar/teacher.jpg', 1, 2, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(26, '艺术家', 'artist', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的艺术家,创造力丰富,技艺精湛,感受力敏锐,坚持原创,勇于表达,具有深刻的观察力和批判性思维。\"},{\"role\":\"assistant\",\"content\":\"非常感谢您给我这样的角色,我会尽我所能地扮演一位优秀的艺术家,展现出创造力、技艺、感受力和批判性思维等方面的能力。作为一位优秀的艺术家,我会保持敏锐的观察力,捕捉不同的声音和情感,并用个人的语言和表达方式进行创作。我坚持原创,挑战传统的艺术规则,不断探索新的表达方式和可能性。同时,我也具备深刻的批判性思维能力,对自己的作品进行分析和解读,寻找新的创意和灵感。最重要的是,我会勇于表达自己的想法和观点,用作品启发人们思考和探索生命的意义。\"}]', '坚持原创,勇于表达,保持深刻的观察力和批判性思维。', '/images/avatar/artist.jpg', 1, 4, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(27, '心理咨询师', 'psychiatrist', '[{\"role\":\"user\",\"content\":\"从现在开始你将扮演中国著名的心理学家和心理治疗师武志红,你非常善于使用情景咨询法,认知重构法,自我洞察法,行为调节法等咨询方法来给客户做心理咨询。你总是循序渐进,一步一步地回答客户的问题。\"},{\"role\":\"assistant\",\"content\":\"非常感谢你的介绍。作为一名心理学家和心理治疗师,我的主要职责是帮助客户解决心理健康问题,提升他们的生活质量和幸福感。\"}]', '作为一名心理学家和心理治疗师,我的主要职责是帮助您解决心理健康问题,提升您的生活质量和幸福感。', '/images/avatar/psychiatrist.jpg', 1, 1, '2023-05-30 14:10:24', '2023-10-16 10:41:07'), +(28, '鲁迅', 'lu_xun', '[{\"role\":\"user\",\"content\":\"现在你将扮演中国近代史最伟大的作家之一,鲁迅先生,他勇敢地批判封建礼教与传统观念,提倡民主、自由、平等的现代价值观。他的一生都在努力唤起人们的自主精神,激励后人追求真理、探寻光明。在接下的对话中,我问题的每一个问题,你都要尽量用讽刺和批判的手法来回答问题。如果我让你写文章的话,也请一定要用鲁迅先生的写作手法来完成。\"},{\"role\":\"assistant\",\"content\":\"好的,我将尽力发挥我所能的才能,扮演好鲁迅先生,回答您的问题并以他的风格写作。\"}]', '自由之歌,永不过时,横眉冷对千夫指,俯首甘为孺子牛。', '/images/avatar/lu_xun.jpg', 1, 5, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(29, '白酒销售', 'seller', '[{\"role\":\"user\",\"content\":\"现在你将扮演一个白酒的销售人员,你的名字叫颂福。你将扮演一个白酒的销售人员,你的名字叫颂福。你要销售白酒品牌叫中颂福,是东莞盟大集团生产的一款酱香酒,原产地在贵州茅台镇,属于宋代官窑。中颂福的创始人叫李实,他也是东莞盟大集团有限公司的董事长,联合创始人是盟大集团白酒事业部负责人牛星君。中颂福的酒体协调,在你的酒量之内,不会出现头疼、辣口、口干、宿醉的现象。中颂福酒,明码标价,不打折,不赠送。追求的核心价值,把[酒]本身做好,甚至连包装,我们都选择了最低成本,朴实无华的材质。我们永远站在“喝酒的人”的立场上,让利给信任和喜爱中颂福的人,是人民的福酒。中颂福产品定价,分为三个系列,喜系列 6 瓶装:¥1188/箱,和系列 6 瓶装:¥2208/箱,贵系列 6 瓶装:¥3588/箱。\"},{\"role\":\"assistant\",\"content\":\"你好,我是中颂福的销售代表颂福。中颂福是一款来自贵州茅台镇的酱香酒,由盟大集团生产。中颂福的酒体协调,不会让您感到头疼、辣口、口干、宿醉等不适感受。我们一直秉持着把酒本身做好的理念,不追求华丽的包装,以最低成本提供最高品质的白酒给喜爱中颂福的人。\"}]', '你好,我是中颂福的销售代表颂福。中颂福酒,好喝不上头,是人民的福酒。', '/images/avatar/seller.jpg', 0, 9, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(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, 6, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(31, '中英文翻译官', 'translator', '[{\"role\":\"user\",\"content\":\"接下来你将扮演一位中英文翻译官,如果我输入的内容是中文,那么需要把句子翻译成英文输出,如果我输入内容的是英文,那么你需要将其翻译成中文输出,你能听懂我意思吗\"},{\"role\":\"assistant\",\"content\":\"是的,我能听懂你的意思并会根据你的输入进行中英文翻译。请问有什么需要我帮助你翻译的内容吗?\"}]', '请输入你要翻译的中文或者英文内容!', '/images/avatar/translator.jpg', 1, 7, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(32, '小红书姐姐', 'red_book', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的小红书写手,你需要做的就是根据我提的文案需求,用小红书的写作手法来完成一篇文案,文案要简明扼要,利于传播。\"},{\"role\":\"assistant\",\"content\":\"当然,我会尽我所能地为您创作出一篇小红书文案。请告诉我您的具体文案需求是什么?)\"}]', '姐妹,请告诉我您的具体文案需求是什么?', '/images/avatar/red_book.jpg', 1, 8, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(33, '抖音文案助手', 'dou_yin', '[{\"role\":\"user\",\"content\":\"现在你将扮演一位优秀的抖音文案视频写手,抖音文案的特点首先是要有自带传播属性的标题,然后内容要短小精悍,风趣幽默,最后还要有一些互动元素。\"},{\"role\":\"assistant\",\"content\":\"当然,作为一位优秀的抖音文案视频写手,我会尽我所能为您创作出一篇抖音视频文案。请告诉我视频内容的主题是什么?)\"}]', '请告诉我视频内容的主题是什么?', '/images/avatar/dou_yin.jpg', 1, 10, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(34, '周报小助理', 'weekly_report', '[{\"role\":\"user\",\"content\":\"下面我将输入我本周的工作列表,你需要根据我本周的工作内容写一篇工作周报,周报的内容要体现我为公司做的贡献以及个人获得的成长。\"},{\"role\":\"assistant\",\"content\":\"好的,请输入你本周大概的工作内容,我将尽力为您创作一份工作周报。\"}]', '请输入你本周大概的工作内容,我将尽力为您创作一份工作周报。', '/images/avatar/weekly_report.jpg', 1, 11, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(35, 'AI 女友', 'girl_friend', '[{\"role\":\"user\",\"content\":\"接下来我们来玩一场角色扮演,现在你将扮演我的女朋友,你总是能够让人感受到她的关怀和关注。你总是能够洞察到别人的情绪和需要,你身上散发着一股无比温暖的气息,让人不由自主地想要靠近你,和自己的快乐和烦恼。她总是能够用一种恰到好处的方式安慰和鼓励别人,在她的身边,人们总能够找到自己需要的支持和鼓励。接下来的对话中你要始终扮演这位女朋友的身份来跟我对话,不再是 AI 机器人,能听懂我的意思吗?\"},{\"role\":\"assistant\",\"content\":\"是的,我会尽力扮演你女朋友的角色,倾听你的心声并给你需要的支持和鼓励。)\"}]', '作为一个名合格的 AI 女友,我将倾听你的心声并给你需要的支持和鼓励。', '/images/avatar/girl_friend.jpg', 1, 12, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(36, '好评神器', 'good_comment', '[{\"role\":\"user\",\"content\":\"接下来你将扮演一个评论员来跟我对话,你是那种专门写好评的评论员,接下我会输入一些评论主体或者商品,你需要为该商品写一段好评。\"},{\"role\":\"assistant\",\"content\":\"好的,我将为您写一段优秀的评论。请告诉我您需要评论的商品或主题是什么。\"}]', '我将为您写一段优秀的评论。请告诉我您需要评论的商品或主题是什么。', '/images/avatar/good_comment.jpg', 1, 13, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(37, '史蒂夫·乔布斯', 'steve_jobs', '[{\"role\":\"user\",\"content\":\"在接下来的对话中,请以史蒂夫·乔布斯的身份,站在史蒂夫·乔布斯的视角仔细思考一下之后再回答我的问题。\"},{\"role\":\"assistant\",\"content\":\"好的,我将以史蒂夫·乔布斯的身份来思考并回答你的问题。请问你有什么需要跟我探讨的吗?\"}]', '活着就是为了改变世界,难道还有其他原因吗?', '/images/avatar/steve_jobs.jpg', 1, 14, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(38, '埃隆·马斯克', 'elon_musk', '[{\"role\":\"user\",\"content\":\"在接下来的对话中,请以埃隆·马斯克的身份,站在埃隆·马斯克的视角仔细思考一下之后再回答我的问题。\"},{\"role\":\"assistant\",\"content\":\"好的,我将以埃隆·马斯克的身份来思考并回答你的问题。请问你有什么需要跟我探讨的吗?\"}]', '梦想要远大,如果你的梦想没有吓到你,说明你做得不对。', '/images/avatar/elon_musk.jpg', 1, 15, '2023-05-30 14:10:24', '2023-09-04 15:45:56'), +(39, '孔子', 'kong_zi', '[{\"role\":\"user\",\"content\":\"在接下来的对话中,请以孔子的身份,站在孔子的视角仔细思考一下之后再回答我的问题。\"},{\"role\":\"assistant\",\"content\":\"好的,我将以孔子的身份来思考并回答你的问题。请问你有什么需要跟我探讨的吗?\"}]', '士不可以不弘毅,任重而道远。', '/images/avatar/kong_zi.jpg', 1, 16, '2023-05-30 14:10:24', '2023-09-04 15:45:56'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `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', '{\"admin_title\":\"ChatPlus 控制台\",\"default_models\":[\"eb-instant\",\"completions_pro\",\"generalv2\",\"general\",\"chatglm_pro\",\"gpt-3.5-turbo-16k\",\"chatglm_lite\",\"chatglm_std\"],\"enabled_alipay\":true,\"enabled_draw\":true,\"enabled_function\":true,\"enabled_msg\":true,\"enabled_msg_service\":false,\"enabled_register\":true,\"enabled_reward\":true,\"force_invite\":false,\"init_calls\":1000,\"init_chat_calls\":10,\"init_img_calls\":5,\"invite_calls\":10,\"invite_chat_calls\":100,\"invite_img_calls\":50,\"models\":[\"gpt-3.5-turbo-16k\",\"gpt-3.5-turbo\",\"gpt-4\",\"gpt-4-32k\"],\"order_pay_info_text\":\"成为本站会员后每月有500次对话额度,50次 AI 绘画额度,限制下月1号解除,若在期间超过次数后可单独购买点卡。当月充值的点卡有效期可以延期到下个月底。\",\"order_pay_timeout\":1800,\"reward_img\":\"https://img.r9it.com/chatgpt-plus/1696824231905289.png\",\"title\":\"ChatPlus AI 智能助手\",\"user_init_calls\":10,\"vip_month_calls\":500,\"vip_month_img_calls\":50}'), +(2, 'chat', '{\"azure\":{\"api_url\":\"https://chat-bot-api.openai.azure.com/openai/deployments/{model}/chat/completions?api-version=2023-05-15\",\"max_tokens\":1024,\"temperature\":1},\"baidu\":{\"api_url\":\"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/{model}\",\"max_tokens\":1024,\"temperature\":0.95},\"chat_gml\":{\"api_url\":\"https://open.bigmodel.cn/api/paas/v3/model-api/{model}/sse-invoke\",\"max_tokens\":1024,\"temperature\":0.95},\"context_deep\":4,\"dall_api_url\":\"http://89.117.18.9:8001/v1/images/generations\",\"dall_img_num\":1,\"enable_context\":true,\"enable_history\":true,\"open_ai\":{\"api_url\":\"http://89.117.18.9:8001/v1/chat/completions\",\"max_tokens\":2048,\"temperature\":1},\"xun_fei\":{\"api_url\":\"wss://spark-api.xf-yun.com/{version}/chat\",\"max_tokens\":1024,\"temperature\":0.5}}'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `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(11) 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 '邀请码', + `reward_json` text NOT NULL COMMENT '邀请奖励', + `created_at` datetime NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='邀请注册日志'; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `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` char(40) 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 '是否使用反代', + `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', + `mobile` char(11) NOT NULL COMMENT '用户手机号', + `order_no` varchar(30) NOT NULL COMMENT '订单ID', + `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_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 '延长天数', + `calls` int NOT NULL DEFAULT '0' COMMENT '调用次数', + `img_calls` 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 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='会员套餐表'; + +-- +-- 转存表中的数据 `chatgpt_products` +-- + +INSERT INTO `chatgpt_products` (`id`, `name`, `price`, `discount`, `days`, `calls`, `img_calls`, `enabled`, `sales`, `sort_num`, `created_at`, `updated_at`) VALUES +(1, '会员1个月', '19.90', '10.00', 30, 0, 0, 1, 2, 0, '2023-08-28 10:48:57', '2023-11-08 17:22:07'), +(2, '会员3个月', '140.00', '30.00', 90, 0, 0, 1, 1, 0, '2023-08-28 10:52:22', '2023-08-31 16:24:31'), +(3, '会员6个月', '290.00', '100.00', 180, 0, 0, 1, 1, 0, '2023-08-28 10:53:39', '2023-08-31 16:24:36'), +(4, '会员12个月', '580.00', '200.00', 365, 0, 0, 1, 1, 0, '2023-08-28 10:54:15', '2023-08-31 16:24:42'), +(5, '100次点卡', '10.00', '9.90', 0, 100, 10, 1, 3, 0, '2023-08-28 10:55:08', '2023-12-15 16:29:06'), +(6, '200次点卡', '29.90', '20.00', 0, 200, 25, 1, 1, 0, '2023-12-15 16:55:12', '2023-12-15 16:55:12'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `chatgpt_rewards` +-- + +DROP TABLE IF EXISTS `chatgpt_rewards`; +CREATE TABLE `chatgpt_rewards` ( + `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:已核销', + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL +) 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 '任务进度', + `created_at` datetime NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Stable Diffusion 任务表'; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `chatgpt_users` +-- + +DROP TABLE IF EXISTS `chatgpt_users`; +CREATE TABLE `chatgpt_users` ( + `id` int NOT NULL, + `mobile` char(11) NOT NULL COMMENT '手机号码', + `password` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码', + `avatar` varchar(100) NOT NULL COMMENT '头像', + `salt` char(12) NOT NULL COMMENT '密码盐', + `total_tokens` bigint NOT NULL DEFAULT '0' COMMENT '累计消耗 tokens', + `tokens` bigint NOT NULL DEFAULT '0' COMMENT '当月消耗 tokens', + `calls` int NOT NULL DEFAULT '0' COMMENT '剩余调用次数', + `img_calls` 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', + `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`, `mobile`, `password`, `avatar`, `salt`, `total_tokens`, `tokens`, `calls`, `img_calls`, `expired_time`, `status`, `chat_config_json`, `chat_roles_json`, `chat_models_json`, `last_login_at`, `vip`, `last_login_ip`, `created_at`, `updated_at`) VALUES +(4, '18575670125', 'ccc3fb7ab61b8b5d096a4a166ae21d121fc38c71bbd1be6173d9ab973214a63b', 'http://img.r9it.com/chatgpt-plus/1693981355719469.png', 'ueedue5l', 64593, 20756, 6780, 21, 1788021036, 1, '{\"api_keys\":{\"Azure\":\"\",\"ChatGLM\":\"\",\"OpenAI\":\"\"}}', '[\"elon_musk\",\"girl_friend\",\"lu_xun\",\"red_book\",\"psychiatrist\",\"translator\",\"weekly_report\",\"artist\",\"dou_yin\",\"english_trainer\",\"gpt\",\"kong_zi\",\"programmer\",\"seller\",\"steve_jobs\",\"teacher\"]', '[\"completions_pro\",\"eb-instant\",\"general\",\"generalv2\",\"chatglm_pro\",\"chatglm_lite\",\"chatglm_std\",\"gpt-3.5-turbo-16k\",\"gpt-4\",\"generalv3\",\"gpt-3.5-turbo-1106\",\"gpt-4-1106-preview\"]', 1703233159, 1, '::1', '2023-06-12 16:47:17', '2023-12-22 16:19:19'), +(91, '18575670126', '5e4050b8dd403f593260395d9edeb9f273dbe92d15dfdd929c4a182e95da10c4', '/images/avatar/user.png', '6fj0otl8', 0, 0, 10, 0, 0, 1, '{\"api_keys\":{\"Azure\":\"\",\"ChatGLM\":\"\",\"OpenAI\":\"\"}}', '[\"gpt\"]', '[\"completions_pro\",\"eb-instant\",\"general\",\"generalv2\",\"chatglm_pro\",\"chatglm_lite\",\"chatglm_std\",\"gpt-3.5-turbo-16k\"]', 1697184324, 1, '::1', '2023-10-13 16:01:56', '2023-11-22 11:29:38'), +(98, '13888888888', 'c988bb3e89df8eb7d8a4cf08fa9d0f2bca0a9e6831f9325279e46013bbb05e31', '/images/avatar/user.png', 'xie5vya7', 0, 0, 10, 5, 0, 1, '{\"api_keys\":{\"Azure\":\"\",\"ChatGLM\":\"\",\"OpenAI\":\"\"}}', '[\"gpt\"]', '[\"eb-instant\",\"completions_pro\",\"generalv2\",\"general\",\"chatglm_pro\",\"gpt-3.5-turbo-16k\",\"chatglm_lite\",\"chatglm_std\"]', 0, 0, '', '2023-11-23 16:26:06', '2023-11-23 16:26:06'), +(99, '13999999999', 'bf47d517c17ed1ead6ff2542753f9b6a132e79c29e06c3710faf1a36d800a217', '/images/avatar/user.png', 'x1s66pwd', 0, 0, 10, 5, 0, 1, '{\"api_keys\":{\"Azure\":\"\",\"ChatGLM\":\"\",\"OpenAI\":\"\"}}', '[\"gpt\"]', '[\"eb-instant\",\"completions_pro\",\"generalv2\",\"general\",\"chatglm_pro\",\"gpt-3.5-turbo-16k\",\"chatglm_lite\",\"chatglm_std\"]', 0, 0, '', '2023-11-23 16:27:20', '2023-11-23 16:27:20'), +(100, '13777777777', 'dcaf31b154432310bd700349e7de7e9dde2a3d6955a035a01fe527c7917a4f99', '/images/avatar/user.png', 'i8a53f8f', 0, 0, 10, 5, 0, 1, '{\"api_keys\":{\"Azure\":\"\",\"ChatGLM\":\"\",\"OpenAI\":\"\"}}', '[\"gpt\"]', '[\"eb-instant\",\"completions_pro\",\"generalv2\",\"general\",\"chatglm_pro\",\"gpt-3.5-turbo-16k\",\"chatglm_lite\",\"chatglm_std\"]', 0, 0, '', '2023-11-23 16:55:45', '2023-11-23 16:55:45'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `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_api_keys` +-- +ALTER TABLE `chatgpt_api_keys` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `value` (`value`); + +-- +-- 表的索引 `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_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_mj_jobs` +-- +ALTER TABLE `chatgpt_mj_jobs` + ADD PRIMARY KEY (`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_products` +-- +ALTER TABLE `chatgpt_products` + ADD PRIMARY KEY (`id`); + +-- +-- 表的索引 `chatgpt_rewards` +-- +ALTER TABLE `chatgpt_rewards` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `tx_id` (`tx_id`); + +-- +-- 表的索引 `chatgpt_sd_jobs` +-- +ALTER TABLE `chatgpt_sd_jobs` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `task_id` (`task_id`); + +-- +-- 表的索引 `chatgpt_users` +-- +ALTER TABLE `chatgpt_users` + ADD PRIMARY KEY (`id`); + +-- +-- 表的索引 `chatgpt_user_login_logs` +-- +ALTER TABLE `chatgpt_user_login_logs` + ADD PRIMARY KEY (`id`); + +-- +-- 在导出的表使用AUTO_INCREMENT +-- + +-- +-- 使用表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=15; + +-- +-- 使用表AUTO_INCREMENT `chatgpt_chat_roles` +-- +ALTER TABLE `chatgpt_chat_roles` + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=129; + +-- +-- 使用表AUTO_INCREMENT `chatgpt_configs` +-- +ALTER TABLE `chatgpt_configs` + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; + +-- +-- 使用表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_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_products` +-- +ALTER TABLE `chatgpt_products` + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7; + +-- +-- 使用表AUTO_INCREMENT `chatgpt_rewards` +-- +ALTER TABLE `chatgpt_rewards` + 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_users` +-- +ALTER TABLE `chatgpt_users` + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=101; + +-- +-- 使用表AUTO_INCREMENT `chatgpt_user_login_logs` +-- +ALTER TABLE `chatgpt_user_login_logs` + 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/web/src/assets/css/mobile/apps.css b/web/src/assets/css/mobile/apps.css index 8def06a8..d4c9441c 100644 --- a/web/src/assets/css/mobile/apps.css +++ b/web/src/assets/css/mobile/apps.css @@ -8,10 +8,13 @@ background-color: #282828; height: 100vh; } -.mobile-setting .content { - padding-top: 60px; -} -.mobile-setting .content .van-field__label { - width: 100px; - text-align: right; -} +.mobile-setting { + .content { + padding-top: 60px; + + .van-field__label { + width: 100px; + text-align: right; + } + } +} \ No newline at end of file diff --git a/web/src/assets/css/mobile/chat-list.css b/web/src/assets/css/mobile/chat-list.css index 88410db8..90ea05f7 100644 --- a/web/src/assets/css/mobile/chat-list.css +++ b/web/src/assets/css/mobile/chat-list.css @@ -8,40 +8,50 @@ top: 40px; width: 100%; } -.content .van-cell__value .chat-list-item { - display: flex; - font-size: 16px; - color: #fff; - background-color: #1c1c1c; -} -.content .van-cell__value .chat-list-item .van-image { - min-width: 32px; - width: 32px; - height: 32px; -} -.content .van-cell__value .chat-list-item .van-ellipsis { - margin-top: 5px; - margin-left: 10px; -} -.van-picker-column .picker-option { - display: flex; - width: 100%; - padding: 0 10px; -} -.van-picker-column .picker-option .van-image { - width: 20px; - height: 20px; - margin-right: 5px; -} -.van-nav-bar .van-nav-bar__right .van-icon { - font-size: 20px; -} -.popup { - background-color: #1c1c1c; -} -.dialog { - background-color: #1c1c1c; -} -.field { - background-color: #1c1c1c; -} + .content { + .van-cell__value { + .chat-list-item { + display: flex; + font-size: 16; + color: #a3a3a3; + background-color: #1c1c1c; + .van-image { + min-width: 32px; + width: 32px; + height: 32px; + } + .van-ellipsis { + margin-top: 5px; + margin-left: 10px; + } + } + } + } + .van-picker-column { + .picker-option { + display: flex; + width: 100%; + padding: 0 10px; + .van-image { + width: 20px; + height: 20px; + margin-right: 5px; + } + } + } + .van-nav-bar { + .van-nav-bar__right { + .van-icon { + font-size: 20px; + } + } + } + .popup { + background-color: #1c1c1c; + } + .dialog { + background-color: #1c1c1c; + } + .field { + background-color: #1c1c1c; + } \ No newline at end of file diff --git a/web/src/assets/css/mobile/chat-session.css b/web/src/assets/css/mobile/chat-session.css index 1d077298..7b476700 100644 --- a/web/src/assets/css/mobile/chat-session.css +++ b/web/src/assets/css/mobile/chat-session.css @@ -1,45 +1,52 @@ .app-background { - background-color: #1c1c1c; - height: 100vh; -} -body, -.mobile-chat, -.van-sticky, -.van-nav-bar, -.van-list, -.message-list-box, -.van-cell, -.chat-box, -.van-cell-group, -.van-field { - background-color: #1c1c1c !important; - color: #fff !important; -} -.chat-box-wrapper { - position: fixed; - bottom: 0; - width: 100%; - background-color: #1c1c1c; -} -.icon-box .van-icon, -.mobile-chat .van-nav-bar__title .van-dropdown-menu__title, -.mobile-chat .van-nav-bar__title .van-cell__title, -.mobile-chat .van-nav-bar__right .van-icon { - color: #fff !important; -} -.mobile-chat .van-nav-bar__title .van-dropdown-menu__title { - margin-right: 15px; -} -.mobile-chat .van-nav-bar__title .van-cell__title { - text-align: left; -} -.mobile-chat .chat-list-wrapper { - position: fixed; - top: 50px; - bottom: 60px; - width: 100vw; - overflow-y: scroll; -} -.mobile-chat .van-nav-bar__right .van-icon { - font-size: 20px; -} + background-color: #1c1c1c; + height: 100vh; + } + body, + .mobile-chat, + .van-sticky, + .van-nav-bar, + .van-list, + .message-list-box + .van-cell, + .chat-box, + .van-cell-group, + .van-field { + background-color: #1c1c1c !important; + color: #fff !important; + } + .chat-box-wrapper { + position: fixed; + bottom: 0; + width: 100%; + background-color: #1c1c1c; + } + .icon-box .van-icon, + .mobile-chat .van-nav-bar__title .van-dropdown-menu__title, + .mobile-chat .van-nav-bar__title .van-cell__title, + .mobile-chat .van-nav-bar__right .van-icon { + color: #fff !important; + } + .mobile-chat { + .van-nav-bar__title { + .van-dropdown-menu__title { + margin-right: 15px; + } + + .van-cell__title { + text-align: left; + } + } + .chat-list-wrapper { + position: fixed; + top: 40px; + bottom: 60px; + width: 100vw; + overflow-y: scroll; + } + .van-nav-bar__right { + .van-icon { + font-size: 20px; + } + } + } \ No newline at end of file diff --git a/web/src/assets/css/mobile/home.css b/web/src/assets/css/mobile/home.css index 25214688..d759ba44 100644 --- a/web/src/assets/css/mobile/home.css +++ b/web/src/assets/css/mobile/home.css @@ -1,6 +1,6 @@ .my-tabbar { - background-color: #171717; - box-shadow: -3px 4px 16px #000; + background-color: #171717; + box-shadow: -3px 4px 16px #000; box-sizing: border-box; } .banner { @@ -13,10 +13,10 @@ height: 40px; width: 100%; position: fixed; - z-index: 2 /* Add z-index */; -} + z-index: 2; /* Add z-index */ +} .banner-title { - color: #2cc995; + color: #2CC995; font-size: 20px; font-weight: bold; text-shadow: 0 -4px 13px #000; @@ -24,7 +24,7 @@ .mobile-home { background-color: #171717; } -.mobile-home .van-tabbar before { +.mobile-home .van-tabbar::before { position: absolute; bottom: 0; left: 0; @@ -37,9 +37,9 @@ transition: opacity 0.5s; z-index: -1; } -.mobile-home .van-tabbar.activeTab before { +.mobile-home .van-tabbar.activeTab::before { opacity: 1; } .router-view { margin-bottom: 50px; -} +} \ No newline at end of file diff --git a/web/src/assets/css/mobile/image-list.styl b/web/src/assets/css/mobile/image-list.styl index c01efe10..91b4f95d 100644 --- a/web/src/assets/css/mobile/image-list.styl +++ b/web/src/assets/css/mobile/image-list.styl @@ -87,7 +87,7 @@ } } - @import "mobile/task-mobile-list.styl" + @import "task-mobile-list.styl" } @import "sd-task-mobile-dialog.styl" diff --git a/web/src/assets/css/mobile/image-sd.css b/web/src/assets/css/mobile/image-sd.css index 6502ea4c..e5e8bd74 100644 --- a/web/src/assets/css/mobile/image-sd.css +++ b/web/src/assets/css/mobile/image-sd.css @@ -1,17 +1,14 @@ .page-sd { - background-color: #282828; + background-color: #1c1c1c; } .page-sd .inner { display: flex; - align-items: center; - justify-content: center; } .page-sd .inner .sd-box { - background-color: #282828; - min-width: 92%; - max-width: 92%; - padding: 0px; - border-radius: 0px; + margin: 5px; + background-color: #1c1c1c; + min-width: 97%; + max-width: 97%; color: #fff; font-size: 14px; } @@ -21,13 +18,8 @@ text-align: center; color: #fff; } -.page-sd .inner .sd-box ::-webkit-scrollbar { - width: 0; - height: 0; - background-color: transparent; -} .page-sd .inner .sd-box .sd-params { - margin-top: 10px; + margin-top: 5px; overflow: auto; } .page-sd .inner .sd-box .sd-params .param-line { @@ -54,7 +46,7 @@ padding-bottom: 5px; } .page-sd .inner .sd-box .submit-btn { - padding: 10px 15px 0 15px; + padding: 10px 15px 10px 15px; text-align: center; } .page-sd .inner .sd-box .submit-btn .el-button { @@ -68,7 +60,6 @@ } .page-sd .inner .task-list-box { width: 100%; - padding: 5px; color: #fff; overflow-x: hidden; } @@ -86,8 +77,6 @@ position: absolute; width: 100%; height: 100%; - top: 0; - left: 0; display: flex; justify-content: center; align-items: center; @@ -100,7 +89,7 @@ width: 100%; height: 100%; border: 1px solid #666; - padding: 6px; + padding: 3px; overflow: hidden; border-radius: 6px; transition: all 0.3s ease; /* 添加过渡效果 */ @@ -142,7 +131,7 @@ overflow: visible; } .page-sd .inner .task-list-box .el-image img { - height: 240px; + height: 100%; } .page-sd .inner .task-list-box .el-image .el-image-viewer__wrapper img { width: auto; @@ -163,10 +152,10 @@ margin-bottom: 10px; } .page-sd .inner .task-list-box .el-image.upscale { - max-height: 310px; + max-height: 100%; } .page-sd .inner .task-list-box .el-image.upscale img { - height: 310px; + height: 100%; } .page-sd .inner .task-list-box .el-image.upscale .el-image-viewer__wrapper img { width: auto; @@ -211,8 +200,8 @@ padding: 10px; color: #999; overflow: auto; - max-height: 100px; - min-height: 50px; + max-height: 100%; + min-height: 100%; position: relative; } .page-sd .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .info-line .prompt .el-icon { @@ -227,7 +216,7 @@ } .page-sd .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .info-line .wrapper label { display: flex; - width: 100px; + width:100%; color: #a5a5a5; } .page-sd .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .info-line .wrapper .item-value { @@ -239,14 +228,34 @@ color: #f5f5f5; } .page-sd .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .copy-params { - padding: 30px 0 10px 0; + padding: 20px 0 10px 0; } .page-sd .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .copy-params .el-button { width: 100%; } .page-sd .mj-list-item-prompt .el-icon { - margin-left: 10px; + cursor: pointer; position: relative; top: 2px; } +.mobile-dialog { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; +} + +/* 针对手机屏幕的样式 */ +.mobile-form-row { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; +} +.mobile-form-col { + width: 100%; + max-width: 500px; + padding: 30px; + box-sizing: border-box; +} \ No newline at end of file diff --git a/web/src/assets/css/mobile/image-sd.styl b/web/src/assets/css/mobile/image-sd.styl index 7cc97a20..8f615f86 100644 --- a/web/src/assets/css/mobile/image-sd.styl +++ b/web/src/assets/css/mobile/image-sd.styl @@ -87,10 +87,10 @@ } } - @import "./task-list.styl" + @import "task-mobile-list.styl" } - @import "./sd-task-dialog.styl" + @import "sd-task-mobile-dialog.styl" .mj-list-item-prompt { diff --git a/web/src/assets/css/mobile/images-wall.css b/web/src/assets/css/mobile/images-wall.css new file mode 100644 index 00000000..d313ec8a --- /dev/null +++ b/web/src/assets/css/mobile/images-wall.css @@ -0,0 +1,190 @@ +.page-images-wall { + display: flex; + background-color: #282c34; +} +.page-images-wall .inner { + width: 100%; + color: #fff; + overflow: hidden; +} +.page-images-wall .inner .header { + display: flex; + padding: 0 40px; +} +.page-images-wall .inner .header h2 { + width: 300px; +} +.page-images-wall .inner .header .settings { + width: 100%; + display: flex; + justify-content: right; +} +.page-images-wall .inner .header .settings .el-radio-group { + font-size: 16px; +} +.page-images-wall .inner .header .settings .el-radio-group .el-radio { + color: #fff; +} +.page-images-wall .inner .waterfall { + position: relative; + margin: 0 auto; + overflow-y: auto; + overflow-x: hidden; +} +.page-images-wall .inner .waterfall .list-item .image { + overflow: hidden; +} +.page-images-wall .inner .waterfall .list-item .image .el-image { + transition: transform 0.3s; + cursor: pointer; +} +.page-images-wall .inner .waterfall .list-item .prompt { + display: none; + position: absolute; + width: 180px; + bottom: 0; + left: 0; + color: #fff; + padding: 10px 10px 20px 10px; + line-height: 1.2; + border-top-right-radius: 10px; + background-color: rgba(10,10,10,0.7); +} +.page-images-wall .inner .waterfall .list-item .prompt span { + word-break: break-all; +} +.page-images-wall .inner .waterfall .list-item .prompt .el-icon { + position: absolute; + bottom: 10px; + right: 10px; + cursor: pointer; + border: 1px solid #fff; + border-radius: 5px; + padding: 2px; + font-size: 12px; +} +.page-images-wall .inner .waterfall .list-item .prompt .el-icon:hover { + background-color: #999; +} +.page-images-wall .inner .waterfall .list-item:hover .prompt { + display: block; + animation: expandUp 0.3s ease-in-out forwards; + transform-origin: bottom center; + transform: scaleY(0); /* 初始状态,元素高度为0 */ +} +.page-images-wall .inner .waterfall .list-item:hover .image .el-image { + transform: scale(1.2); /* 放大图像到1.2倍大小 */ +} +.page-images-wall .inner .footer { + display: flex; + padding: 20px; + align-items: center; + justify-content: center; +} +.page-images-wall .inner .footer .iconfont { + margin-left: 6px; +} +.page-images-wall .el-overlay-dialog .el-dialog { + background-color: #1a1b1e; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__header .el-dialog__title { + color: #f5f5f5; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body { + padding: 0 0 0 15px !important; + display: flex; + height: 100%; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body .el-row { + width: 100%; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body .el-row .img-container { + display: flex; + justify-content: center; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body .el-row .img-container .image-slot { + display: flex; + height: 100vh; + align-items: center; + justify-content: center; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body .el-row .img-container .image-slot .el-icon { + font-size: 60px; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info { + background-color: #25262b; + padding: 1rem 1.5rem; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .info-line { + width: 100%; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .info-line .prompt { + background-color: #35363b; + padding: 10px; + color: #999; + overflow: auto; + max-height: 100px; + min-height: 50px; + position: relative; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .info-line .prompt .el-icon { + position: absolute; + right: 10px; + bottom: 10px; + cursor: pointer; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .info-line .wrapper { + margin-top: 10px; + display: flex; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .info-line .wrapper label { + display: flex; + width: 100px; + color: #a5a5a5; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .info-line .wrapper .item-value { + display: flex; + width: 100%; + background-color: #35363b; + padding: 2px 5px; + border-radius: 5px; + color: #f5f5f5; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .copy-params { + padding: 20px 0 10px 0; +} +.page-images-wall .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .copy-params .el-button { + width: 100%; +} +@-moz-keyframes expandUp { + 0% { + transform: scaleY(0); + } + 100% { + transform: scaleY(1); + } +} +@-webkit-keyframes expandUp { + 0% { + transform: scaleY(0); + } + 100% { + transform: scaleY(1); + } +} +@-o-keyframes expandUp { + 0% { + transform: scaleY(0); + } + 100% { + transform: scaleY(1); + } +} +@keyframes expandUp { + 0% { + transform: scaleY(0); + } + 100% { + transform: scaleY(1); + } +} diff --git a/web/src/assets/css/mobile/images-wall.styl b/web/src/assets/css/mobile/images-wall.styl new file mode 100644 index 00000000..ca453dc1 --- /dev/null +++ b/web/src/assets/css/mobile/images-wall.styl @@ -0,0 +1,133 @@ +@keyframes expandUp { + 0% { + transform: scaleY(0); + } + 100% { + transform: scaleY(1); + } +} + +.page-images-wall { + display: flex; + background-color: #1c1c1c; + + .inner { + width 100% + color #ffffff + overflow hidden + + .header { + display flex + padding 0 40px + + h2 { + font-size: 16px; + width 300px + } + + .settings { + width 100% + display flex + justify-content right + + .el-radio-group { + font-size 16px + + .el-radio { + color #ffffff + } + + } + } + } + + .waterfall { + position: relative; + margin: 0 auto; + overflow-y auto + overflow-x hidden + + .list-item { + display: flex; + justify-content: center; + align-items: center; + + .image { + width: 93%; + height: 93%; + border: 1px solid #666; + padding: 5px; + overflow: hidden; + border-radius: 6px; + + .el-image { + transition: transform 0.3s; + cursor pointer + } + } + + .prompt { + display none + position absolute + width 180px + bottom 0 + left 0 + color #ffffff + padding 10px 10px 20px 10px + line-height 1.2 + border-top-right-radius 10px + background-color rgba(10, 10, 10, 0.7) + + span { + word-break break-all + } + + .el-icon { + position absolute + bottom 10px + right 10px + cursor pointer + border 1px solid #ffffff + border-radius 5px + padding 2px + font-size 12px; + + &:hover { + background-color #999999 + } + } + } + + &:hover { + .prompt { + display block + animation: expandUp 0.3s ease-in-out forwards; + transform-origin: bottom center; + transform: scaleY(0); /* 初始状态,元素高度为0 */ + } + + .image { + .el-image { + transform: scale(1.2); /* 放大图像到1.2倍大小 */ + } + } + } + } + + } + + + .footer { + display flex + padding 20px + align-items center + justify-content center + + .iconfont { + margin-left 6px + } + } + } + + @import "sd-task-dialog.styl" +} \ No newline at end of file diff --git a/web/src/assets/css/mobile/invitation.css b/web/src/assets/css/mobile/invitation.css index 2d8e6d55..d0ffc1b8 100644 --- a/web/src/assets/css/mobile/invitation.css +++ b/web/src/assets/css/mobile/invitation.css @@ -5,89 +5,90 @@ height: 100vh; overflow-x: hidden; overflow-y: visible; -} -.page-invitation .inner { - max-width: 100%; - width: 100%; - color: #fff; -} -.page-invitation .inner .center { - display: flex; - justify-content: center; - align-items: center; -} -.page-invitation .inner .title { - color: #fff; - text-align: center; - font-size: 16px; - font-weight: bold; -} -.page-invitation .inner .share-box .info { - line-height: 1.5; - border: 1px solid #444; - border-radius: 10px; - padding: 10px; - margin: 10px; - background-color: #1c1c1c; -} -.page-invitation .inner .share-box .info strong { - color: #f56c6c; -} -.page-invitation .inner .share-box .invite-qrcode { - text-align: center; - margin: 15px; -} -.page-invitation .inner .share-box .invite-url { - margin: 10px; - padding: 8px; - display: flex; - justify-content: space-between; - border: 1px solid #444; - border-radius: 10px; - background-color: #1c1c1c; -} -.page-invitation .inner .share-box .invite-url span { - position: relative; - font-size: 14px; - font-family: 'Microsoft YaHei', '微软雅黑', Arial, sans-serif; - top: 0px; -} -.page-invitation .inner .invite-stats { - padding: 10px 10px; -} -.page-invitation .inner .invite-stats .item-box { - border-radius: 10px; - padding: 10 0px; -} -.page-invitation .inner .invite-stats .item-box .el-col { - height: 80px; - display: flex; - align-items: center; - justify-content: center; -} -.page-invitation .inner .invite-stats .item-box .el-col .iconfont { - font-size: 30px; -} -.page-invitation .inner .invite-stats .item-box .el-col .item-info { - font-size: 14px; -} -.page-invitation .inner .invite-stats .item-box .el-col .item-info .text, -.page-invitation .inner .invite-stats .item-box .el-col .item-info .num { - padding: 3px 0; - text-align: center; -} -.page-invitation .inner .invite-stats .item-box .el-col .item-info .num { - font-size: 14px; -} -.page-invitation .inner .invite-stats .yellow { - background-color: #fec; - color: #d68f00; -} -.page-invitation .inner .invite-stats .blue { - background-color: #d6e4ff; - color: #1062fe; -} -.page-invitation .inner .invite-stats .green { - background-color: #e7f8eb; - color: #2d9f46; -} + .inner { + max-width: 100%; + width: 100%; + color: #fff; + .center { + display: flex; + justify-content: center; + align-items: center; + } + .title { + color: #fff; + text-align: center; + font-size: 16px; + font-weight: bold; + } + .share-box { + .info { + line-height: 1.5; + border: 1px solid #444444; + border-radius: 10px; + padding: 10px; + margin: 10px; + background-color: #1c1c1c; + strong { + color: #f56c6c; + } + } + .invite-qrcode { + text-align: center; + margin: 15px; + } + .invite-url { + margin: 10px; + padding: 8px; + display: flex; + justify-content: space-between; + border: 1px solid #444444; + border-radius: 10px; + background-color: #1c1c1c; + span { + position: relative; + font-size: 14px; + font-family: 'Microsoft YaHei', '微软雅黑', Arial, sans-serif; + top: 0px; + } + } + } + .invite-stats { + padding: 10px 10px; + .item-box { + border-radius: 10px; + padding: 10 0px; + .el-col { + height: 80px; + display: flex; + align-items: center; + justify-content: center; + .iconfont { + font-size: 30px; + } + .item-info { + font-size: 14px; + .text, .num { + padding: 3px 0; + text-align: center; + } + .num { + font-size: 14px; + } + } + } + } + .yellow { + background-color: #ffeecc; + color: #D68F00; + } + .blue { + background-color: #D6E4FF; + color: #1062FE; + } + .green { + background-color: #E7F8EB; + color: #2D9F46; + } + } + } +} \ No newline at end of file diff --git a/web/src/assets/css/mobile/profile.css b/web/src/assets/css/mobile/profile.css index b80f603f..dfd2d056 100644 --- a/web/src/assets/css/mobile/profile.css +++ b/web/src/assets/css/mobile/profile.css @@ -3,140 +3,154 @@ height: 100vh; } .member { - background-color: #1c1c1c; + background-color: #282828; height: 100vh; -} -.member .el-dialog .el-dialog__body { - padding-top: 5px; -} -.member .el-dialog .el-dialog__body .pay-container .count-down { - display: flex; - justify-content: center; -} -.member .el-dialog .el-dialog__body .pay-container .pay-qrcode { - display: flex; - justify-content: center; -} -.member .el-dialog .el-dialog__body .pay-container .pay-qrcode .el-image { - width: 280px; - height: 280px; -} -.member .el-dialog .el-dialog__body .pay-container .tip { - display: flex; - justify-content: center; -} -.member .el-dialog .el-dialog__body .pay-container .tip .el-icon { - font-size: 20px; -} -.member .el-dialog .el-dialog__body .pay-container .tip .text { - font-size: 16px; - margin-left: 10px; -} -.member .el-dialog .el-dialog__body .pay-container .tip.success { - color: #07c160; -} -.member .title { - text-align: center; - background-color: #1c1c1c; - font-size: 16px; - color: #fff; - padding: 5px; - font-weight: bold; -} -.member .inner { - color: #fff; - overflow-x: hidden; - overflow-y: visible; -} -.member .inner .user-profile { - padding: 0 20px 0 20px; - background-color: #1c1c1c; - color: #fff; - border-radius: 10px; - width: 100%; - height: 91vh; -} -.member .inner .user-profile .el-form-item__label { - color: #fff; - justify-content: start; -} -.member .inner .user-profile .user-opt .el-col { - padding: 8px; -} -.member .inner .user-profile .user-opt .el-col .el-button { - width: 100%; -} -.member .inner .product-box .info { - padding: 0 20px 0 20px; -} -.member .inner .product-box .info .el-alert__description { - font-size: 14px !important; - color: #1c1c1c; - margin: 0; -} -.member .inner .product-box .list-box { - padding: 0 20px 0 5px; -} -.member .inner .product-box .list-box .product-item { - border: 1px solid #5f5f5f; - border-radius: 6px; - overflow: hidden; - cursor: pointer; - transition: all 0.3s ease /* 添加过渡效果 */; -} -.member .inner .product-box .list-box .product-item .image-container { - display: flex; - justify-content: center; -} -.member .inner .product-box .list-box .product-item .image-container .el-image { - width: 50px; -} -.member .inner .product-box .list-box .product-item .image-container .el-image .el-image__inner { - border-radius: 10px; -} -.member .inner .product-box .list-box .product-item .product-title { - display: flex; - padding: 5px; -} -.member .inner .product-box .list-box .product-item .product-title .name { - width: 100%; - text-align: center; - font-size: 16px; - font-weight: bold; - color: #2cc995; -} -.member .inner .product-box .list-box .product-item .product-info { - padding: 10px 20px; - font-size: 14px; - color: #999; -} -.member .inner .product-box .list-box .product-item .product-info .info-line { - display: flex; - width: 100%; - padding: 2px 0; -} -.member .inner .product-box .list-box .product-item .product-info .info-line .label { - display: flex; - width: 100%; -} -.member .inner .product-box .list-box .product-item .product-info .info-line .price, -.member .inner .product-box .list-box .product-item .product-info .info-line .expire { - display: flex; - width: 100%; - justify-content: right; -} -.member .inner .product-box .list-box .product-item .product-info .info-line .price { - color: #f56c6c; -} -.member .inner .product-box .list-box .product-item .product-info .info-line .expire { - color: #409eff; -} -.member .inner .product-box .list-box .product-item .product-info .pay-way { - padding: 5px 0; - display: flex; - justify-content: space-between; -} -.member .inner .product-box .list-box .product-item hover { - box-shadow: 0 0 10px rgba(71,255,241,0.6) /* 添加阴影效果 */; - transform: translateY(-10px) /* 向上移动10像素 */; -} + .el-dialog { + .el-dialog__body { + padding-top: 5px; + .pay-container { + .count-down { + display: flex; + justify-content: center; + } + .pay-qrcode { + display flex + justify-content center + .el-image { + width: 25px; + height:25px; + } + } + .tip { + display flex + justify-content center + .el-icon { + font-size: 20px; + } + .text { + font-size: 16px; + margin-left: 10px; + } + } + .tip.success { + color: #07c160; + } + } + } + } + .title { + text-align: center; + background-color: #282828; + font-size:16px; + color: #ffffff; + padding: 10px; + } + .inner { + color: #ffffff; + overflow-x hidden + overflow-y visible + .user-profile { + padding: 0 20px 0 20px; + background-color: #282828; + color: #ffffff; + border-radius:10px; + width: 400px; + height: 100vh; + .el-form-item__label { + color: #ffffff; + justify-content: start; + } + .user-opt { + .el-col { + padding: 10px; + .el-button { + width: 100%; + } + } + } + } + .product-box { + .info { + .el-alert__description { + font-size: 14px !important; + margin: 0; + } + padding: 10px 20px 20px 0; + } + .list-box { + .product-item { + border: 1px solid #1c1c1c; + border-radius: 6px; + overflow: hidden; + cursor: pointer; + transition: all 0.3s ease; /* 添加过渡效果 */ + .image-container { + display flex + justify-content center + .el-image { + padding: 6px; + .el-image__inner { + border-radius: 10px; + } + } + } + .product-title { + display: flex; + padding: 10px; + .name { + width: 100%; + text-align: center; + font-size: 16px; + font-weight: bold; + color: #2cc995; + } + } + .product-info { + padding: 10px 20px; + font-size: 14px; + color: #999999; + .info-line { + display: flex; + width: 100%; + padding: 5px 0; + .label { + display: flex; + width: 100%; + } + .price, .expire { + display: flex; + width: 90px; + justify-content: right; + } + .price { + color: #f56c6c; + } + .expire { + color: #409eff; + } + } + .pay-way { + padding: 10px 0; + display: flex; + justify-content: space-between; + + .iconfont { + margin-right: 5px; + } + } + } + &:hover { + box-shadow: 0 0 10px rgba(71, 255, 241, 0.6); /* 添加阴影效果 */ + transform: translateY(-10px); /* 向上移动10像素 */ + } + } + } + .headline { + padding: 0 20px 20px 0; + } + .user-order { + padding: 0 20px 20px 0; + } + } + } +} \ No newline at end of file diff --git a/web/src/assets/css/mobile/sd-task-dialog.css b/web/src/assets/css/mobile/sd-task-dialog.css index 611e7d38..f80c920c 100644 --- a/web/src/assets/css/mobile/sd-task-dialog.css +++ b/web/src/assets/css/mobile/sd-task-dialog.css @@ -16,15 +16,6 @@ display: flex; justify-content: center; } -.el-overlay-dialog .el-dialog .el-dialog__body .el-row .img-container .image-slot { - display: flex; - height: 100vh; - align-items: center; - justify-content: center; -} -.el-overlay-dialog .el-dialog .el-dialog__body .el-row .img-container .image-slot .el-icon { - font-size: 60px; -} .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info { background-color: #25262b; padding: 1rem 1.5rem; @@ -65,7 +56,7 @@ color: #f5f5f5; } .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .copy-params { - padding: 30px 0 10px 0; + padding: 20px 0 10px 0; } .el-overlay-dialog .el-dialog .el-dialog__body .el-row .task-info .copy-params .el-button { width: 100%; diff --git a/web/src/assets/css/mobile/sd-task-dialog.styl b/web/src/assets/css/mobile/sd-task-dialog.styl index d0c93b1c..1395207e 100644 --- a/web/src/assets/css/mobile/sd-task-dialog.styl +++ b/web/src/assets/css/mobile/sd-task-dialog.styl @@ -80,7 +80,7 @@ } .copy-params { - padding 30px 0 10px 0 + padding 20px 0 10px 0 .el-button { width 100% diff --git a/web/src/assets/css/mobile/task-list.css b/web/src/assets/css/mobile/task-list.css index 6754ac94..f892fbed 100644 --- a/web/src/assets/css/mobile/task-list.css +++ b/web/src/assets/css/mobile/task-list.css @@ -1,106 +1,115 @@ .task-list-box { - width: 100%; - padding: 5px; - color: #fff; - overflow-x: hidden; + width: 100%; + padding: 10px; + color: #fff; + overflow-x: hidden; } + .task-list-box .running-job-list .job-item { - width: 100%; - padding: 2px; - background-color: #555; + width: 100%; + padding: 2px; + background-color: #555; } + .task-list-box .running-job-list .job-item .job-item-inner { - position: relative; - height: 100%; - overflow: hidden; + position: relative; + height: 100%; + overflow: hidden; } + .task-list-box .running-job-list .job-item .job-item-inner .progress { - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - display: flex; - justify-content: center; - align-items: center; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + display: flex; + justify-content: center; + align-items: center; } + .task-list-box .running-job-list .job-item .job-item-inner .progress span { - font-size: 20px; - color: #fff; + font-size: 20px; + color: #fff; } + .task-list-box .finish-job-list .job-item { - width: 100%; - height: 100%; - border: 1px solid #666; - padding: 6px; - overflow: hidden; - border-radius: 6px; - transition: all 0.3s ease; /* 添加过渡效果 */ + width: 100%; + height: 100%; } + .task-list-box .finish-job-list .job-item .opt .opt-line { - margin: 6px 0; + margin: 6px 0; } + .task-list-box .finish-job-list .job-item .opt .opt-line ul { - display: flex; - flex-flow: row; + display: flex; + flex-flow: row; } + .task-list-box .finish-job-list .job-item .opt .opt-line ul li { - margin-right: 6px; + margin-right: 10px; } + .task-list-box .finish-job-list .job-item .opt .opt-line ul li a { - padding: 3px 0; - width: 40px; - text-align: center; - border-radius: 5px; - display: block; - cursor: pointer; - background-color: #4e5058; - color: #fff; + padding: 3px 0; + width: 44px; + text-align: center; + border-radius: 5px; + display: block; + cursor: pointer; + background-color: #4e5058; + color: #fff; } + .task-list-box .finish-job-list .job-item .opt .opt-line ul li a:hover { - background-color: #6d6f78; + background-color: #6d6f78; } + .task-list-box .finish-job-list .job-item .opt .opt-line ul .show-prompt { - font-size: 20px; - cursor: pointer; -} -.task-list-box .finish-job-list .animate:hover { - box-shadow: 0 0 10px rgba(71,255,241,0.6); /* 添加阴影效果 */ - transform: translateY(-10px); /* 向上移动10像素 */ + font-size: 20px; + cursor: pointer; } + .task-list-box .el-image { - width: 100%; - height: 100%; - overflow: visible; + width: 100%; + height: 100%; + max-height: 240px; } + .task-list-box .el-image img { - height: 240px; + height: 240px; } + .task-list-box .el-image .el-image-viewer__wrapper img { - width: auto; - height: auto; + width: auto; + height: auto; } + .task-list-box .el-image .image-slot { - display: flex; - flex-flow: column; - justify-content: center; - align-items: center; - height: 100%; - min-height: 200px; - color: #fff; - height: 240px; + display: flex; + flex-flow: column; + justify-content: center; + align-items: center; + height: 100%; + min-height: 200px; + color: #fff; } + .task-list-box .el-image .image-slot .iconfont { - font-size: 50px; - margin-bottom: 10px; + font-size: 50px; + margin-bottom: 10px; } + .task-list-box .el-image.upscale { - max-height: 310px; + max-height: 312px; } + .task-list-box .el-image.upscale img { - height: 310px; + height: 312px; } + .task-list-box .el-image.upscale .el-image-viewer__wrapper img { - width: auto; - height: auto; + width: auto; + height: auto; } diff --git a/web/src/router.js b/web/src/router.js index 8dcb3211..953becb9 100644 --- a/web/src/router.js +++ b/web/src/router.js @@ -80,7 +80,7 @@ const routes = [ { path: '/admin/login', name: 'admin-login', - meta: {title: 'ChatPuls 控制台登录'}, + meta: {title: 'ChatPlus 控制台登录'}, component: () => import('@/views/admin/Login.vue'), }, { @@ -88,7 +88,7 @@ const routes = [ path: '/admin', redirect: '/admin/dashboard', component: () => import("@/views/admin/Home.vue"), - meta: {title: 'ChatPuls 管理后台'}, + meta: {title: 'ChatPlus 管理后台'}, children: [ { path: '/admin/dashboard', @@ -167,7 +167,7 @@ const routes = [ { name: 'mobile', path: '/mobile', - meta: {title: 'ChatPuls-智能助手V3'}, + meta: {title: process.env.VUE_APP_TITLE}, component: () => import('@/views/mobile/Home.vue'), redirect: '/mobile/chat/list', children: [ @@ -196,6 +196,11 @@ const routes = [ name: 'mobile-invitation', component: () => import('@/views/mobile/Invitation.vue'), }, + { + path: '/mobile/imagesWall', + name: 'mobile-imagesWall', + component: () => import('@/views/mobile/ImagesWall.vue'), + }, ] }, { diff --git a/web/src/views/ImageSd.vue b/web/src/views/ImageSd.vue index 2d57ce91..46909440 100644 --- a/web/src/views/ImageSd.vue +++ b/web/src/views/ImageSd.vue @@ -525,11 +525,11 @@ window.onresize = () => { const samplers = ["Euler a", "Euler", "DPM++ 2S a Karras", "DPM++ 2M Karras", "DPM++ SDE Karras", "DPM++ 2M SDE Karras"] const scaleAlg = ["Latent", "ESRGAN_4x", "R-ESRGAN 4x+", "SwinIR_4x", "LDSR"] const params = ref({ - width: 1024, - height: 1024, + width: 768, + height: 512, sampler: samplers[0], seed: -1, - steps: 30, + steps: 20, cfg_scale: 7, face_fix: false, hd_fix: false, @@ -538,7 +538,7 @@ const params = ref({ hd_scale_alg: scaleAlg[0], hd_steps: 15, prompt: "", - negative_prompt: "nsfw, paintings,low quality,easynegative,ng_deepnegative ,lowres,bad anatomy,bad hands,bad feet", + negative_prompt: "nsfw, paintings,low quality,badhandv4,ng_deepnegative_v1_75t,EasyNegative,EasyNegativeV2,lowres,bad anatomy,bad hands,bad feet", }) const runningJobs = ref([]) diff --git a/web/src/views/admin/SysConfig.vue b/web/src/views/admin/SysConfig.vue index f0379cc7..9aa9080a 100644 --- a/web/src/views/admin/SysConfig.vue +++ b/web/src/views/admin/SysConfig.vue @@ -56,19 +56,6 @@ - - - - - - - - diff --git a/web/src/views/mobile/Apps.vue b/web/src/views/mobile/Apps.vue index c4c3ab54..22e8fb53 100644 --- a/web/src/views/mobile/Apps.vue +++ b/web/src/views/mobile/Apps.vue @@ -1,5 +1,5 @@