From d8029550f758fed626caa1615a8f6d66efa02db4 Mon Sep 17 00:00:00 2001 From: JustSong Date: Mon, 1 Jan 2024 16:18:50 +0800 Subject: [PATCH 01/35] fix: do not consume user quota if failed (close #881) --- controller/relay-image.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/controller/relay-image.go b/controller/relay-image.go index 7e1fed39..14a2983b 100644 --- a/controller/relay-image.go +++ b/controller/relay-image.go @@ -168,6 +168,9 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode var textResponse ImageResponse defer func(ctx context.Context) { + if resp.StatusCode != http.StatusOK { + return + } err := model.PostConsumeTokenQuota(tokenId, quota) if err != nil { common.SysError("error consuming token remain quota: " + err.Error()) From af8908db540d0ad4650e7595b79b0ccb066a9a38 Mon Sep 17 00:00:00 2001 From: Tisfeng Date: Mon, 1 Jan 2024 16:42:19 +0800 Subject: [PATCH 02/35] feat: able to change gemini safety setting (#867) * perf: adjust gemini safety settings, set BLOCK_NONE by default * feat: able to adjust by env variable --------- Co-authored-by: JustSong --- README.md | 1 + common/constants.go | 2 ++ common/utils.go | 7 +++++++ controller/relay-gemini.go | 36 ++++++++++++++++++------------------ 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index ff9e0bc0..b53936c4 100644 --- a/README.md +++ b/README.md @@ -366,6 +366,7 @@ graph LR + `DATA_GYM_CACHE_DIR`:目前该配置作用与 `TIKTOKEN_CACHE_DIR` 一致,但是优先级没有它高。 15. `RELAY_TIMEOUT`:中继超时设置,单位为秒,默认不设置超时时间。 16. `SQLITE_BUSY_TIMEOUT`:SQLite 锁等待超时设置,单位为毫秒,默认 `3000`。 +17. `GEMINI_SAFETY_SETTING`:Gemini 的安全设置,默认 `BLOCK_NONE`。 ### 命令行参数 1. `--port `: 指定服务器监听的端口号,默认为 `3000`。 diff --git a/common/constants.go b/common/constants.go index 60700ec8..e4cbf8bf 100644 --- a/common/constants.go +++ b/common/constants.go @@ -98,6 +98,8 @@ var BatchUpdateInterval = GetOrDefault("BATCH_UPDATE_INTERVAL", 5) var RelayTimeout = GetOrDefault("RELAY_TIMEOUT", 0) // unit is second +var GeminiSafetySetting = GetOrDefaultString("GEMINI_SAFETY_SETTING", "BLOCK_NONE") + const ( RequestIdKey = "X-Oneapi-Request-Id" ) diff --git a/common/utils.go b/common/utils.go index 21bec8f5..9a7038e2 100644 --- a/common/utils.go +++ b/common/utils.go @@ -196,6 +196,13 @@ func GetOrDefault(env string, defaultValue int) int { return num } +func GetOrDefaultString(env string, defaultValue string) string { + if env == "" || os.Getenv(env) == "" { + return defaultValue + } + return os.Getenv(env) +} + func MessageWithRequestId(message string, id string) string { return fmt.Sprintf("%s (request id: %s)", message, id) } diff --git a/controller/relay-gemini.go b/controller/relay-gemini.go index ec55d4b6..d8ab58d6 100644 --- a/controller/relay-gemini.go +++ b/controller/relay-gemini.go @@ -63,24 +63,24 @@ type GeminiChatGenerationConfig struct { func requestOpenAI2Gemini(textRequest GeneralOpenAIRequest) *GeminiChatRequest { geminiRequest := GeminiChatRequest{ Contents: make([]GeminiChatContent, 0, len(textRequest.Messages)), - //SafetySettings: []GeminiChatSafetySettings{ - // { - // Category: "HARM_CATEGORY_HARASSMENT", - // Threshold: "BLOCK_ONLY_HIGH", - // }, - // { - // Category: "HARM_CATEGORY_HATE_SPEECH", - // Threshold: "BLOCK_ONLY_HIGH", - // }, - // { - // Category: "HARM_CATEGORY_SEXUALLY_EXPLICIT", - // Threshold: "BLOCK_ONLY_HIGH", - // }, - // { - // Category: "HARM_CATEGORY_DANGEROUS_CONTENT", - // Threshold: "BLOCK_ONLY_HIGH", - // }, - //}, + SafetySettings: []GeminiChatSafetySettings{ + { + Category: "HARM_CATEGORY_HARASSMENT", + Threshold: common.GeminiSafetySetting, + }, + { + Category: "HARM_CATEGORY_HATE_SPEECH", + Threshold: common.GeminiSafetySetting, + }, + { + Category: "HARM_CATEGORY_SEXUALLY_EXPLICIT", + Threshold: common.GeminiSafetySetting, + }, + { + Category: "HARM_CATEGORY_DANGEROUS_CONTENT", + Threshold: common.GeminiSafetySetting, + }, + }, GenerationConfig: GeminiChatGenerationConfig{ Temperature: textRequest.Temperature, TopP: textRequest.TopP, From c725cc88429aed1e013729b6c87ced20a040544e Mon Sep 17 00:00:00 2001 From: Zhanliang Liu Date: Mon, 1 Jan 2024 17:00:23 +0800 Subject: [PATCH 03/35] fix: base 64 encoded format support of gemini-pro-vision for field image_url/url (#878) --- common/image/image.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/common/image/image.go b/common/image/image.go index a602936a..27045d28 100644 --- a/common/image/image.go +++ b/common/image/image.go @@ -44,6 +44,18 @@ func GetImageSizeFromUrl(url string) (width int, height int, err error) { } func GetImageFromUrl(url string) (mimeType string, data string, err error) { + // Regex to match data URL pattern + dataURLPattern := regexp.MustCompile(`data:image/([^;]+);base64,(.*)`) + + // Check if the URL is a data URL + matches := dataURLPattern.FindStringSubmatch(url) + if len(matches) == 3 { + // URL is a data URL + mimeType = "image/" + matches[1] + data = matches[2] + return + } + isImage, err := IsImageUrl(url) if !isImage { return From 498dea2dbbd7d68261ef32a900711d555181bb68 Mon Sep 17 00:00:00 2001 From: Tailen <15708073+Tailen@users.noreply.github.com> Date: Mon, 1 Jan 2024 17:06:17 +0800 Subject: [PATCH 04/35] feat: add support for davinci-002 and babbage-002 (#888) --- common/model-ratio.go | 2 ++ controller/model.go | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/common/model-ratio.go b/common/model-ratio.go index fa2adaa1..2908be17 100644 --- a/common/model-ratio.go +++ b/common/model-ratio.go @@ -52,6 +52,8 @@ var ModelRatio = map[string]float64{ "gpt-3.5-turbo-16k-0613": 1.5, "gpt-3.5-turbo-instruct": 0.75, // $0.0015 / 1K tokens "gpt-3.5-turbo-1106": 0.5, // $0.001 / 1K tokens + "davinci-002" 1, // $0.002 / 1K tokens + "babbage-002" 0.2, // $0.0004 / 1K tokens "text-ada-001": 0.2, "text-babbage-001": 0.25, "text-curie-001": 1, diff --git a/controller/model.go b/controller/model.go index 6a759b63..6cb530db 100644 --- a/controller/model.go +++ b/controller/model.go @@ -342,6 +342,24 @@ func init() { Root: "code-davinci-edit-001", Parent: nil, }, + { + Id: "davinci-002", + Object: "model", + Created: 1677649963, + OwnedBy: "openai", + Permission: permission, + Root: "davinci-002", + Parent: nil, + }, + { + Id: "babbage-002", + Object: "model", + Created: 1677649963, + OwnedBy: "openai", + Permission: permission, + Root: "babbage-002", + Parent: nil, + }, { Id: "claude-instant-1", Object: "model", From c50c6095651570d01a172c0eb2f166535ca24366 Mon Sep 17 00:00:00 2001 From: Seven Yu <422347121@qq.com> Date: Mon, 1 Jan 2024 17:09:12 +0800 Subject: [PATCH 05/35] fix: fix button copywriting (#880) * feat: rename Channel button * fix: update en.json --------- Co-authored-by: seven.yu Co-authored-by: JustSong --- i18n/en.json | 4 +++- web/src/components/ChannelsTable.js | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/i18n/en.json b/i18n/en.json index b0deb83a..7b51909b 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -526,5 +526,7 @@ "模型版本": "Model version", "请输入星火大模型版本,注意是接口地址中的版本号,例如:v2.1": "Please enter the version of the Starfire model, note that it is the version number in the interface address, for example: v2.1", "点击查看": "click to view", - "请确保已在 Azure 上创建了 gpt-35-turbo 模型,并且 apiVersion 已正确填写!": "Please make sure that the gpt-35-turbo model has been created on Azure, and the apiVersion has been filled in correctly!" + "请确保已在 Azure 上创建了 gpt-35-turbo 模型,并且 apiVersion 已正确填写!": "Please make sure that the gpt-35-turbo model has been created on Azure, and the apiVersion has been filled in correctly!", + "测试所有渠道": "Test all channels", + "更新已启用渠道余额": "Update the balance of enabled channels" } diff --git a/web/src/components/ChannelsTable.js b/web/src/components/ChannelsTable.js index 5d68e2da..a2adfd32 100644 --- a/web/src/components/ChannelsTable.js +++ b/web/src/components/ChannelsTable.js @@ -523,10 +523,10 @@ const ChannelsTable = () => { 添加新的渠道 + loading={loading || updatingBalance}>更新已启用渠道余额 From 7772064d87468d62c7f7afee20a033328c07080d Mon Sep 17 00:00:00 2001 From: "Laisky.Cai" Date: Mon, 1 Jan 2024 17:38:35 +0800 Subject: [PATCH 06/35] fix: support base64 encoded image_url (#872) - Add support for base64 encoded image in OpenAI's image_url Co-authored-by: JustSong <39998050+songquanpeng@users.noreply.github.com> --- common/image/image.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/image/image.go b/common/image/image.go index 27045d28..de8fefd3 100644 --- a/common/image/image.go +++ b/common/image/image.go @@ -15,6 +15,9 @@ import ( _ "golang.org/x/image/webp" ) +// Regex to match data URL pattern +var dataURLPattern = regexp.MustCompile(`data:image/([^;]+);base64,(.*)`) + func IsImageUrl(url string) (bool, error) { resp, err := http.Head(url) if err != nil { @@ -44,9 +47,6 @@ func GetImageSizeFromUrl(url string) (width int, height int, err error) { } func GetImageFromUrl(url string) (mimeType string, data string, err error) { - // Regex to match data URL pattern - dataURLPattern := regexp.MustCompile(`data:image/([^;]+);base64,(.*)`) - // Check if the URL is a data URL matches := dataURLPattern.FindStringSubmatch(url) if len(matches) == 3 { From cb5a3df61687bee00eb4a93bd94e8f33786fb4db Mon Sep 17 00:00:00 2001 From: JustSong Date: Mon, 1 Jan 2024 17:40:10 +0800 Subject: [PATCH 07/35] fix: fix pr error (#888) --- common/model-ratio.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/model-ratio.go b/common/model-ratio.go index 2908be17..97cb060d 100644 --- a/common/model-ratio.go +++ b/common/model-ratio.go @@ -52,8 +52,8 @@ var ModelRatio = map[string]float64{ "gpt-3.5-turbo-16k-0613": 1.5, "gpt-3.5-turbo-instruct": 0.75, // $0.0015 / 1K tokens "gpt-3.5-turbo-1106": 0.5, // $0.001 / 1K tokens - "davinci-002" 1, // $0.002 / 1K tokens - "babbage-002" 0.2, // $0.0004 / 1K tokens + "davinci-002": 1, // $0.002 / 1K tokens + "babbage-002": 0.2, // $0.0004 / 1K tokens "text-ada-001": 0.2, "text-babbage-001": 0.25, "text-curie-001": 1, From 505817ca171121cf6f9d9cf579d6846513a87bda Mon Sep 17 00:00:00 2001 From: JustSong Date: Mon, 1 Jan 2024 17:46:45 +0800 Subject: [PATCH 08/35] chore: update en.json --- i18n/en.json | 244 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 244 insertions(+) diff --git a/i18n/en.json b/i18n/en.json index 7b51909b..f67d8665 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -458,6 +458,7 @@ "使用明细(总消耗额度:{renderQuota(stat.quota)})": "Usage Details (Total Consumption Quota: {renderQuota(stat.quota)})", "用户名称": "User Name", "令牌名称": "Token Name", + "默认令牌": "Default Token", "留空则查询全部用户": "Leave blank to query all users", "留空则查询全部令牌": "Leave blank to query all tokens", "模型名称": "Model Name", @@ -527,6 +528,249 @@ "请输入星火大模型版本,注意是接口地址中的版本号,例如:v2.1": "Please enter the version of the Starfire model, note that it is the version number in the interface address, for example: v2.1", "点击查看": "click to view", "请确保已在 Azure 上创建了 gpt-35-turbo 模型,并且 apiVersion 已正确填写!": "Please make sure that the gpt-35-turbo model has been created on Azure, and the apiVersion has been filled in correctly!", + "处理中...": "Processing...", + "绑定成功!": "Binding successful!", + "登录成功!": "Login successful!", + "操作失败,重定向至登录界面中...": "Operation failed, redirecting to login screen...", + "出现错误,第 ${count} 次重试中...": "An error occurred, retrying ${count}...", + "首页": "Home", + "渠道": "Channel", + "令牌": "API Keys", + "兑换": "Redeem", + "充值": "Recharge", + "用户": "Users", + "日志": "Logs", + "设置": "Settings", + "关于": "About", + "聊天": "Chat", + "注销成功!": "Logout successful!", + "注销": "Log out", + "登录": "Log in", + "注册": "Sign up", + "加载{name}中...": "Loading {name}...", + "未登录或登录已过期,请重新登录!": "Not logged in or login has expired, please log in again!", + "请立刻修改默认密码!": "Please change the default password immediately!", + "欢迎回来": "Welcome back", + "没有账户?": "No account?", + "立刻注册": "Sign up now", + "用户名": "Username", + "密码": "Password", + "正在登录……": "Logging in...", + "忘记密码": "Forgot password", + "其他方式": "Other methods", + "微信扫码关注公众号,输入「验证码」获取验证码(三分钟内有效)": "Scan the QR code with WeChat, follow the official account and enter 'verification code' to get the verification code (valid within three minutes)", + "验证码": "Verification code", + "全部用户": "All users", + "当前用户": "Current user", + "全部": "All", + "消费": "Consumption", + "管理": "Management", + "系统": "System", + "未知": "Unknown", + "其他模型": "Other models", + "复制成功": "Copy successful", + "使用明细": "Usages", + "刷新": "Refresh", + "收起面板": "Collapse panel", + "展开面板": "Expand panel", + "显示查询选项": "Show search options", + "隐藏查询选项": "Hide search options", + "用户名称": "User name", + "可选值": "Optional values", + "渠道 ID": "Channel ID", + "令牌名称": "Key name", + "模型名称": "Model name", + "起始时间": "Start time", + "结束时间": "End time", + "查询": "Query", + "隐藏条形图": "Hide bar chart", + "显示条形图": "Show bar chart", + "折线条形图只展示最新50条数据": "Line and bar charts only show the latest 50 pieces of data", + "总消耗": "Total consumption", + "总共调用了 {payload[0].value} 次": "A total of {payload[0].value} calls were made", + "{model.name}: {model.value} 次": "{model.name}: {model.value} times", + "总共调用了 {payload[0].value} 次 {payload[0].name}": "A total of {payload[0].value} {payload[0].name} calls were made", + "总消耗额度": "Total consumption limit", + "暂无数据": "No data available", + "更多数据统计图形即将到来,敬请期待!": "More data statistics graphics are coming soon, stay tuned!", + "复制用户名": "Copy username", + "{`共 ${counts} 条数据`}": "{`A total of ${counts} pieces of data`}", + "共 0 条数据": "A total of 0 pieces of data", + "选择明细分类": "Select detail category", + "模型倍率": "model rate", + "分组倍率": "group rate", + "新密码已复制到剪贴板:": "New password has been copied to the clipboard:", + "密码重置确认": "Password reset confirmation", + "邮箱地址": "Email address", + "新密码": "New password", + "密码已复制到剪贴板:": "Password has been copied to the clipboard:", + "密码重置完成": "Password reset complete", + "提交": "Submit", + "返回登录": "Return to login", + "请稍后重试,浏览器环境检查未通过": "Please try again later, browser environment check failed", + "重置邮件发送成功,请检查邮箱!": "Reset email sent successfully, please check your email!", + "密码重置": "Password reset", + "重试": "Retry", + "组": "Group", + "令牌已重置并已复制到剪贴板": "Token has been reset and copied to the clipboard", + "邀请链接已复制到剪切板": "Invitation link has been copied to the clipboard", + "系统令牌已复制到剪切板": "System token has been copied to the clipboard", + "请输入你的账户名以确认删除!": "Please enter your account name to confirm deletion!", + "账户已删除!": "Account has been deleted!", + "微信账户绑定成功!": "WeChat account binding successful!", + "请稍后几秒重试,Turnstile 正在检查用户环境!": "Please try again in a few seconds, Turnstile is checking the user environment!", + "验证码发送成功,请检查邮箱!": "Verification code sent successfully, please check your email!", + "邮箱账户绑定成功!": "Email account binding successful!", + "个人信息": "Personal information", + "编辑个人信息": "Edit personal information", + "生成系统访问令牌": "Generate system access token", + "复制邀请链接": "Copy invitation link", + "删除个人帐户": "Delete personal account", + "普通用户": "Regular user", + "管理员": "Administrator", + "超级管理员": "Super administrator", + "显示名称": "Display name", + "GitHub 账号": "GitHub account", + "微信账号": "WeChat account", + "修改个人信息只允许在电脑端进行。生成的令牌用于系统管理,而非用于请求 OpenAI 相关的服务,请知悉。": "Modifying personal information is only allowed on a computer. The generated token is for system management, not for requesting OpenAI related services. Please be aware.", + "可用模型": "Available models", + "账号绑定": "Account binding", + "绑定微信": "Bind WeChat", + "绑定 GitHub": "Bind GitHub", + "绑定邮箱": "Bind Email", + "绑定": "Bind", + "绑定邮箱地址": "Bind email address", + "输入邮箱地址": "Enter email address", + "重新发送": "Resend", + "获取验证码": "Get verification code", + "确认绑定": "Confirm binding", + "取消": "Cancel", + "危险操作": "Dangerous operation", + "您正在删除自己的帐户,将清空所有数据且不可恢复": "You are deleting your own account, all data will be cleared and cannot be recovered", + "输入你的账户名": "Enter your account name", + "以确认删除": "To confirm deletion", + "确认删除": "Confirm deletion", + "未使用": "Not used", + "已禁用": "Disabled", + "已使用": "Used", + "未知状态": "Unknown status", + "操作成功完成!": "Operation successfully completed!", + "搜索兑换码的 ID 和名称 ...": "Search for the ID and name of the redemption code ...", + "名称": "Name", + "状态": "Status", + "额度": "Quota", + "创建时间": "Creation time", + "兑换时间": "Redemption time", + "操作": "Operation", + "尚未兑换": "Not yet redeemed", + "已复制到剪贴板!": "Copied to clipboard!", + "无法复制到剪贴板,请手动复制,已将兑换码填入搜索框。": "Unable to copy to clipboard, please copy manually. The redemption code has been filled in the search box.", + "复制": "Copy", + "删除": "Delete", + "禁用": "Disable", + "启用": "Enable", + "编辑": "Edit", + "添加新的兑换码": "Add new redemption code", + "密码长度不得小于 8 位!": "Password length must not be less than 8 characters!", + "两次输入的密码不一致": "The two passwords entered do not match", + "注册成功!": "Registration successful!", + "请填写注册邮箱!": "Please fill in the registration email!", + "请在${verificationTimeout}秒后再试": "Please try again after ${verificationTimeout} seconds", + "验证码发送成功,请检查你的邮箱!": "Verification code sent successfully, please check your email!", + "已有账户?": "Already have an account?", + "请输入用户名(最长 12 位)": "Please enter a username (up to 12 characters)", + "请输入密码(最短 8 位,最长 20 位)": "Please enter a password (minimum 8 characters, maximum 20 characters)", + "请再次输入密码": "Please enter the password again", + "请输入邮箱地址": "Please enter an email address", + "秒后可重发": "Can be resent after seconds", + "请输入邮箱验证码": "Please enter the email verification code", + "已过期": "Expired", + "已启用": "Enabled", + "已耗尽": "Exhausted", + "无": "None", + "令牌密钥": "API Key", + "令牌状态": "Key status", + "已用额度": "Used quota", + "剩余额度": "Remaining quota", + "过期时间": "Expiration time", + "你确定要删除这个令牌吗?": "Are you sure you want to delete this key?", + "无法复制到剪贴板,请手动复制,已将令牌密钥填入搜索框": "Unable to copy to clipboard, please copy manually. The key key has been filled in the search box.", + "无限制": "Unlimited", + "永不过期": "Never expires", + "使用 API 访问令牌进行服务鉴权和计费。": "Use API Key for service authentication and billing.", + "API 访问令牌关系到您的个人利益,请妥善留存,不要与其他人共享,也不要保存在客户端代码中。": "API Key is related to your personal interests. Please keep it properly. Do not share it with others or save it in client code.", + "创建令牌": "Create Key", + "什么都还没有,快去创建一个令牌开始使用吧!": "Nothing yet, go create a key to start using!", + "你确定要删除该令牌吗": "Are you sure you want to delete this key", + "导出令牌信息": "Export key information", + "错误:未登录或登录已过期,请重新登录!": "Error: Not logged in or login has expired, please log in again!", + "错误:请求次数过多,请稍后再试!": "Error: Too many requests, please try again later!", + "错误:服务器内部错误,请联系管理员!": "Error: Server internal error, please contact the online customer service!", + "本站仅作演示之用,无服务端!": "This site is for demonstration purposes only, no server!", + "错误:": "Error:", + "加载首页内容失败...": "Failed to load homepage content...", + "系统状况": "System status", + "系统信息": "System information", + "系统信息总览": "System information overview", + "名称:": "Name:", + "版本:": "Version:", + "源码:": "Source code:", + "启动时间:": "Startup time:", + "系统配置": "System configuration", + "系统配置总览": "System configuration overview", + "邮箱验证:": "Email verification:", + "未启用": "Not enabled", + "Turnstile 用户校验:": "Turnstile user verification:", + "页面不存在": "Page does not exist", + "请检查你的浏览器地址是否正确": "Please check if your browser address is correct", + "个人设置": "Personal settings", + "运营设置": "Operations settings", + "系统设置": "System settings", + "其他设置": "Other settings", + "默认令牌": "Default key", + "过期时间必须在当前时间之后!": "Expiration time must be after the current time!", + "额度必须大于等于 0!": "Quota must be greater than or equal to 0!", + "过期时间格式错误!": "Expiration time format error!", + "创建令牌数量必须大于等于 1!": "The number of keys to create must be greater than or equal to 1!", + "令牌修改成功": "API Key modification successful", + "令牌创建成功": "API Key creation successful", + "更新令牌信息": "Update key information", + "创建新的令牌": "Create a new key", + "请输入名称": "Please enter a name", + "请输入过期时间,格式为 yyyy-MM-dd HH:mm:ss,-1 表示无限制": "Please enter the expiration time, the format is yyyy-MM-dd HH:mm:ss, -1 means unlimited", + "无限额度": "Unlimited quota", + "注意:启用无限额度后,已用额度将不再进行计算。": "Note: After enabling unlimited quota, the used quota will no longer be calculated.", + "等于": "Equals", + "请输入额度(单位:token)": "Please enter the quota (unit: token)", + "创建令牌数量": "Create key quantity", + "请输入令牌数量": "Please enter the number of keys", + "注意:令牌的额度仅用于限制令牌本身的最大额度使用量,实际的使用受到账户的剩余额度限制。": "Note: The quota of the key is only used to limit the maximum quota usage of the key itself, and the actual usage is subject to the remaining quota of the account.", + "我的令牌": "My keys", + "请输入额度兑换码!": "Please enter the redeem code!", + "充值成功!": "Recharge successful!", + "请求失败": "Request failed", + "超级管理员未设置充值链接!": "The super administrator did not set a recharge link!", + "充值额度": "Recharge quota", + "兑换中...": "Redeeming...", + "请点击充值以获取额度兑换码。": "Please click recharge to get the quota redemption code.", + "用户信息更新成功!": "User information updated successfully!", + "更新用户信息": "Update user information", + "请输入新的用户名": "Please enter a new username", + "请输入新的密码,最短 8 位": "Please enter a new password, at least 8 characters", + "请输入新的显示名称": "Please enter a new display name", + "分组": "Group", + "请选择分组": "Please select a group", + "请在系统设置页面编辑分组倍率以添加新的分组:": "Please edit the group rate on the system settings page to add a new group:", + "请输入新的剩余额度": "Please enter a new remaining quota", + "已绑定的 GitHub 账户": "Bound GitHub account", + "此项只读,需要用户通过个人设置页面的相关绑定按钮进行绑定,不可直接修改": "This item is read-only, users need to bind through the relevant binding button on the personal settings page, cannot be directly modified", + "已绑定的微信账户": "Bound WeChat account", + "已绑定的邮箱账户": "Bound email account", + "新版本可用:${data.version},请使用快捷键 Shift + F5 刷新页面": "New version available: ${data.version}, please refresh the page using the shortcut key Shift + F5", + "无法正常连接至服务器!": "Unable to connect to the server normally!", + "提示:": "Input:", + "补全:": "Output:", + "搜索令牌名称": "Search key name", "测试所有渠道": "Test all channels", "更新已启用渠道余额": "Update the balance of enabled channels" } From aa03c89133c5d0f9a35ceedcecb08c6b57206174 Mon Sep 17 00:00:00 2001 From: JustSong Date: Mon, 1 Jan 2024 18:55:03 +0800 Subject: [PATCH 09/35] feat: able to add more UI theme (#860) --- .github/workflows/linux-release.yml | 6 ++-- .github/workflows/macos-release.yml | 6 ++-- .github/workflows/windows-release.yml | 6 ++-- Dockerfile | 13 ++++++-- common/constants.go | 2 ++ main.go | 9 ++---- router/main.go | 4 +-- router/web-router.go | 10 +++++-- web/README.md | 28 ++++++------------ web/THEMES | 1 + web/build/.gitkeep | 0 web/{ => default}/.gitignore | 0 web/default/README.md | 21 +++++++++++++ web/{ => default}/package.json | 2 +- web/{ => default}/public/favicon.ico | Bin web/{ => default}/public/index.html | 0 web/{ => default}/public/logo.png | Bin web/{ => default}/public/robots.txt | 0 web/{ => default}/src/App.js | 0 .../src/components/ChannelsTable.js | 0 web/{ => default}/src/components/Footer.js | 0 .../src/components/GitHubOAuth.js | 0 web/{ => default}/src/components/Header.js | 0 web/{ => default}/src/components/Loading.js | 0 web/{ => default}/src/components/LoginForm.js | 0 web/{ => default}/src/components/LogsTable.js | 0 .../src/components/OperationSetting.js | 0 .../src/components/OtherSetting.js | 0 .../src/components/PasswordResetConfirm.js | 0 .../src/components/PasswordResetForm.js | 0 .../src/components/PersonalSetting.js | 0 .../src/components/PrivateRoute.js | 0 .../src/components/RedemptionsTable.js | 0 .../src/components/RegisterForm.js | 0 .../src/components/SystemSetting.js | 0 .../src/components/TokensTable.js | 0 .../src/components/UsersTable.js | 0 web/{ => default}/src/components/utils.js | 0 .../src/constants/channel.constants.js | 0 .../src/constants/common.constant.js | 0 web/{ => default}/src/constants/index.js | 0 .../src/constants/toast.constants.js | 0 .../src/constants/user.constants.js | 0 web/{ => default}/src/context/Status/index.js | 0 .../src/context/Status/reducer.js | 0 web/{ => default}/src/context/User/index.js | 0 web/{ => default}/src/context/User/reducer.js | 0 web/{ => default}/src/helpers/api.js | 0 web/{ => default}/src/helpers/auth-header.js | 0 web/{ => default}/src/helpers/history.js | 0 web/{ => default}/src/helpers/index.js | 0 web/{ => default}/src/helpers/render.js | 0 web/{ => default}/src/helpers/utils.js | 0 web/{ => default}/src/index.css | 0 web/{ => default}/src/index.js | 0 web/{ => default}/src/pages/About/index.js | 0 .../src/pages/Channel/EditChannel.js | 0 web/{ => default}/src/pages/Channel/index.js | 0 web/{ => default}/src/pages/Chat/index.js | 0 web/{ => default}/src/pages/Home/index.js | 0 web/{ => default}/src/pages/Log/index.js | 0 web/{ => default}/src/pages/NotFound/index.js | 0 .../src/pages/Redemption/EditRedemption.js | 0 .../src/pages/Redemption/index.js | 0 web/{ => default}/src/pages/Setting/index.js | 0 .../src/pages/Token/EditToken.js | 0 web/{ => default}/src/pages/Token/index.js | 0 web/{ => default}/src/pages/TopUp/index.js | 0 web/{ => default}/src/pages/User/AddUser.js | 0 web/{ => default}/src/pages/User/EditUser.js | 0 web/{ => default}/src/pages/User/index.js | 0 web/{ => default}/vercel.json | 0 72 files changed, 66 insertions(+), 42 deletions(-) create mode 100644 web/THEMES create mode 100644 web/build/.gitkeep rename web/{ => default}/.gitignore (100%) create mode 100644 web/default/README.md rename web/{ => default}/package.json (94%) rename web/{ => default}/public/favicon.ico (100%) rename web/{ => default}/public/index.html (100%) rename web/{ => default}/public/logo.png (100%) rename web/{ => default}/public/robots.txt (100%) rename web/{ => default}/src/App.js (100%) rename web/{ => default}/src/components/ChannelsTable.js (100%) rename web/{ => default}/src/components/Footer.js (100%) rename web/{ => default}/src/components/GitHubOAuth.js (100%) rename web/{ => default}/src/components/Header.js (100%) rename web/{ => default}/src/components/Loading.js (100%) rename web/{ => default}/src/components/LoginForm.js (100%) rename web/{ => default}/src/components/LogsTable.js (100%) rename web/{ => default}/src/components/OperationSetting.js (100%) rename web/{ => default}/src/components/OtherSetting.js (100%) rename web/{ => default}/src/components/PasswordResetConfirm.js (100%) rename web/{ => default}/src/components/PasswordResetForm.js (100%) rename web/{ => default}/src/components/PersonalSetting.js (100%) rename web/{ => default}/src/components/PrivateRoute.js (100%) rename web/{ => default}/src/components/RedemptionsTable.js (100%) rename web/{ => default}/src/components/RegisterForm.js (100%) rename web/{ => default}/src/components/SystemSetting.js (100%) rename web/{ => default}/src/components/TokensTable.js (100%) rename web/{ => default}/src/components/UsersTable.js (100%) rename web/{ => default}/src/components/utils.js (100%) rename web/{ => default}/src/constants/channel.constants.js (100%) rename web/{ => default}/src/constants/common.constant.js (100%) rename web/{ => default}/src/constants/index.js (100%) rename web/{ => default}/src/constants/toast.constants.js (100%) rename web/{ => default}/src/constants/user.constants.js (100%) rename web/{ => default}/src/context/Status/index.js (100%) rename web/{ => default}/src/context/Status/reducer.js (100%) rename web/{ => default}/src/context/User/index.js (100%) rename web/{ => default}/src/context/User/reducer.js (100%) rename web/{ => default}/src/helpers/api.js (100%) rename web/{ => default}/src/helpers/auth-header.js (100%) rename web/{ => default}/src/helpers/history.js (100%) rename web/{ => default}/src/helpers/index.js (100%) rename web/{ => default}/src/helpers/render.js (100%) rename web/{ => default}/src/helpers/utils.js (100%) rename web/{ => default}/src/index.css (100%) rename web/{ => default}/src/index.js (100%) rename web/{ => default}/src/pages/About/index.js (100%) rename web/{ => default}/src/pages/Channel/EditChannel.js (100%) rename web/{ => default}/src/pages/Channel/index.js (100%) rename web/{ => default}/src/pages/Chat/index.js (100%) rename web/{ => default}/src/pages/Home/index.js (100%) rename web/{ => default}/src/pages/Log/index.js (100%) rename web/{ => default}/src/pages/NotFound/index.js (100%) rename web/{ => default}/src/pages/Redemption/EditRedemption.js (100%) rename web/{ => default}/src/pages/Redemption/index.js (100%) rename web/{ => default}/src/pages/Setting/index.js (100%) rename web/{ => default}/src/pages/Token/EditToken.js (100%) rename web/{ => default}/src/pages/Token/index.js (100%) rename web/{ => default}/src/pages/TopUp/index.js (100%) rename web/{ => default}/src/pages/User/AddUser.js (100%) rename web/{ => default}/src/pages/User/EditUser.js (100%) rename web/{ => default}/src/pages/User/index.js (100%) rename web/{ => default}/vercel.json (100%) diff --git a/.github/workflows/linux-release.yml b/.github/workflows/linux-release.yml index 364b83ae..d9375795 100644 --- a/.github/workflows/linux-release.yml +++ b/.github/workflows/linux-release.yml @@ -18,14 +18,14 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 16 - - name: Build Frontend + - name: Build Frontend (theme default) env: CI: "" run: | - cd web + cd web/default npm install REACT_APP_VERSION=$(git describe --tags) npm run build - cd .. + cd ../.. - name: Set up Go uses: actions/setup-go@v3 with: diff --git a/.github/workflows/macos-release.yml b/.github/workflows/macos-release.yml index bdd0d208..69bb93f5 100644 --- a/.github/workflows/macos-release.yml +++ b/.github/workflows/macos-release.yml @@ -18,14 +18,14 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 16 - - name: Build Frontend + - name: Build Frontend (theme default) env: CI: "" run: | - cd web + cd web/default npm install REACT_APP_VERSION=$(git describe --tags) npm run build - cd .. + cd ../.. - name: Set up Go uses: actions/setup-go@v3 with: diff --git a/.github/workflows/windows-release.yml b/.github/workflows/windows-release.yml index 33193a89..c08e95d2 100644 --- a/.github/workflows/windows-release.yml +++ b/.github/workflows/windows-release.yml @@ -21,14 +21,14 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 16 - - name: Build Frontend + - name: Build Frontend (theme default) env: CI: "" run: | - cd web + cd web/default npm install REACT_APP_VERSION=$(git describe --tags) npm run build - cd .. + cd ../.. - name: Set up Go uses: actions/setup-go@v3 with: diff --git a/Dockerfile b/Dockerfile index ffb8c21b..56648168 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,18 @@ FROM node:16 as builder WORKDIR /build -COPY web/package.json . -RUN npm install COPY ./web . COPY ./VERSION . -RUN DISABLE_ESLINT_PLUGIN='true' REACT_APP_VERSION=$(cat VERSION) npm run build +RUN themes=$(cat THEMES) \ + && IFS=$'\n' \ + && for theme in $themes; do \ + theme_path="web/$theme" \ + && echo "Building theme: $theme" \ + && cd $theme_path \ + && npm install \ + && DISABLE_ESLINT_PLUGIN='true' REACT_APP_VERSION=$(cat VERSION) npm run build \ + && cd /app \ + done FROM golang AS builder2 diff --git a/common/constants.go b/common/constants.go index e4cbf8bf..70589041 100644 --- a/common/constants.go +++ b/common/constants.go @@ -100,6 +100,8 @@ var RelayTimeout = GetOrDefault("RELAY_TIMEOUT", 0) // unit is second var GeminiSafetySetting = GetOrDefaultString("GEMINI_SAFETY_SETTING", "BLOCK_NONE") +var Theme = GetOrDefaultString("THEME", "default") + const ( RequestIdKey = "X-Oneapi-Request-Id" ) diff --git a/main.go b/main.go index 88938516..3ab1872c 100644 --- a/main.go +++ b/main.go @@ -15,15 +15,12 @@ import ( "strconv" ) -//go:embed web/build +//go:embed web/build/* var buildFS embed.FS -//go:embed web/build/index.html -var indexPage []byte - func main() { common.SetupLogger() - common.SysLog("One API " + common.Version + " started") + common.SysLog(fmt.Sprintf("One API %s started with theme %s", common.Version, common.Theme)) if os.Getenv("GIN_MODE") != "debug" { gin.SetMode(gin.ReleaseMode) } @@ -95,7 +92,7 @@ func main() { store := cookie.NewStore([]byte(common.SessionSecret)) server.Use(sessions.Sessions("session", store)) - router.SetRouter(server, buildFS, indexPage) + router.SetRouter(server, buildFS) var port = os.Getenv("PORT") if port == "" { port = strconv.Itoa(*common.Port) diff --git a/router/main.go b/router/main.go index b8ac4055..85127a1a 100644 --- a/router/main.go +++ b/router/main.go @@ -10,7 +10,7 @@ import ( "strings" ) -func SetRouter(router *gin.Engine, buildFS embed.FS, indexPage []byte) { +func SetRouter(router *gin.Engine, buildFS embed.FS) { SetApiRouter(router) SetDashboardRouter(router) SetRelayRouter(router) @@ -20,7 +20,7 @@ func SetRouter(router *gin.Engine, buildFS embed.FS, indexPage []byte) { common.SysLog("FRONTEND_BASE_URL is ignored on master node") } if frontendBaseUrl == "" { - SetWebRouter(router, buildFS, indexPage) + SetWebRouter(router, buildFS) } else { frontendBaseUrl = strings.TrimSuffix(frontendBaseUrl, "/") router.NoRoute(func(c *gin.Context) { diff --git a/router/web-router.go b/router/web-router.go index 8f9c18a2..2f86db38 100644 --- a/router/web-router.go +++ b/router/web-router.go @@ -2,6 +2,7 @@ package router import ( "embed" + "fmt" "github.com/gin-contrib/gzip" "github.com/gin-contrib/static" "github.com/gin-gonic/gin" @@ -12,17 +13,22 @@ import ( "strings" ) -func SetWebRouter(router *gin.Engine, buildFS embed.FS, indexPage []byte) { +func SetWebRouter(router *gin.Engine, buildFS embed.FS) { router.Use(gzip.Gzip(gzip.DefaultCompression)) router.Use(middleware.GlobalWebRateLimit()) router.Use(middleware.Cache()) - router.Use(static.Serve("/", common.EmbedFolder(buildFS, "web/build"))) + router.Use(static.Serve("/", common.EmbedFolder(buildFS, fmt.Sprintf("web/build/%s", common.Theme)))) router.NoRoute(func(c *gin.Context) { if strings.HasPrefix(c.Request.RequestURI, "/v1") || strings.HasPrefix(c.Request.RequestURI, "/api") { controller.RelayNotFound(c) return } c.Header("Cache-Control", "no-cache") + indexPage, err := buildFS.ReadFile(fmt.Sprintf("web/build/%s/index.html", common.Theme)) + if err != nil { + controller.RelayNotFound(c) + return + } c.Data(http.StatusOK, "text/html; charset=utf-8", indexPage) }) } diff --git a/web/README.md b/web/README.md index 1b1031a3..1454940f 100644 --- a/web/README.md +++ b/web/README.md @@ -1,21 +1,11 @@ -# React Template +# One API 的前端界面 +> 每个文件夹代表一个主题,欢迎提交你的主题 -## Basic Usages +## 提交新的主题 +1. 在 `web` 文件夹下新建一个文件夹,文件夹名为主题名。 +2. 把你的主题文件放到这个文件夹下。 +3. 修改 `package.json` 文件,把 `build` 命令改为:`"build": "react-scripts build && mv build ../build/default"`,其中 `default` 为你的主题名。 -```shell -# Runs the app in the development mode -npm start - -# Builds the app for production to the `build` folder -npm run build -``` - -If you want to change the default server, please set `REACT_APP_SERVER` environment variables before build, -for example: `REACT_APP_SERVER=http://your.domain.com`. - -Before you start editing, make sure your `Actions on Save` options have `Optimize imports` & `Run Prettier` enabled. - -## Reference - -1. https://github.com/OIerDb-ng/OIerDb -2. https://github.com/cornflourblue/react-hooks-redux-registration-login-example \ No newline at end of file +## 主题列表 +### default +默认主题 \ No newline at end of file diff --git a/web/THEMES b/web/THEMES new file mode 100644 index 00000000..331d858c --- /dev/null +++ b/web/THEMES @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/web/build/.gitkeep b/web/build/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/web/.gitignore b/web/default/.gitignore similarity index 100% rename from web/.gitignore rename to web/default/.gitignore diff --git a/web/default/README.md b/web/default/README.md new file mode 100644 index 00000000..1b1031a3 --- /dev/null +++ b/web/default/README.md @@ -0,0 +1,21 @@ +# React Template + +## Basic Usages + +```shell +# Runs the app in the development mode +npm start + +# Builds the app for production to the `build` folder +npm run build +``` + +If you want to change the default server, please set `REACT_APP_SERVER` environment variables before build, +for example: `REACT_APP_SERVER=http://your.domain.com`. + +Before you start editing, make sure your `Actions on Save` options have `Optimize imports` & `Run Prettier` enabled. + +## Reference + +1. https://github.com/OIerDb-ng/OIerDb +2. https://github.com/cornflourblue/react-hooks-redux-registration-login-example \ No newline at end of file diff --git a/web/package.json b/web/default/package.json similarity index 94% rename from web/package.json rename to web/default/package.json index a2bf3054..872ad36a 100644 --- a/web/package.json +++ b/web/default/package.json @@ -18,7 +18,7 @@ }, "scripts": { "start": "react-scripts start", - "build": "react-scripts build", + "build": "react-scripts build && mv build ../build/default", "test": "react-scripts test", "eject": "react-scripts eject" }, diff --git a/web/public/favicon.ico b/web/default/public/favicon.ico similarity index 100% rename from web/public/favicon.ico rename to web/default/public/favicon.ico diff --git a/web/public/index.html b/web/default/public/index.html similarity index 100% rename from web/public/index.html rename to web/default/public/index.html diff --git a/web/public/logo.png b/web/default/public/logo.png similarity index 100% rename from web/public/logo.png rename to web/default/public/logo.png diff --git a/web/public/robots.txt b/web/default/public/robots.txt similarity index 100% rename from web/public/robots.txt rename to web/default/public/robots.txt diff --git a/web/src/App.js b/web/default/src/App.js similarity index 100% rename from web/src/App.js rename to web/default/src/App.js diff --git a/web/src/components/ChannelsTable.js b/web/default/src/components/ChannelsTable.js similarity index 100% rename from web/src/components/ChannelsTable.js rename to web/default/src/components/ChannelsTable.js diff --git a/web/src/components/Footer.js b/web/default/src/components/Footer.js similarity index 100% rename from web/src/components/Footer.js rename to web/default/src/components/Footer.js diff --git a/web/src/components/GitHubOAuth.js b/web/default/src/components/GitHubOAuth.js similarity index 100% rename from web/src/components/GitHubOAuth.js rename to web/default/src/components/GitHubOAuth.js diff --git a/web/src/components/Header.js b/web/default/src/components/Header.js similarity index 100% rename from web/src/components/Header.js rename to web/default/src/components/Header.js diff --git a/web/src/components/Loading.js b/web/default/src/components/Loading.js similarity index 100% rename from web/src/components/Loading.js rename to web/default/src/components/Loading.js diff --git a/web/src/components/LoginForm.js b/web/default/src/components/LoginForm.js similarity index 100% rename from web/src/components/LoginForm.js rename to web/default/src/components/LoginForm.js diff --git a/web/src/components/LogsTable.js b/web/default/src/components/LogsTable.js similarity index 100% rename from web/src/components/LogsTable.js rename to web/default/src/components/LogsTable.js diff --git a/web/src/components/OperationSetting.js b/web/default/src/components/OperationSetting.js similarity index 100% rename from web/src/components/OperationSetting.js rename to web/default/src/components/OperationSetting.js diff --git a/web/src/components/OtherSetting.js b/web/default/src/components/OtherSetting.js similarity index 100% rename from web/src/components/OtherSetting.js rename to web/default/src/components/OtherSetting.js diff --git a/web/src/components/PasswordResetConfirm.js b/web/default/src/components/PasswordResetConfirm.js similarity index 100% rename from web/src/components/PasswordResetConfirm.js rename to web/default/src/components/PasswordResetConfirm.js diff --git a/web/src/components/PasswordResetForm.js b/web/default/src/components/PasswordResetForm.js similarity index 100% rename from web/src/components/PasswordResetForm.js rename to web/default/src/components/PasswordResetForm.js diff --git a/web/src/components/PersonalSetting.js b/web/default/src/components/PersonalSetting.js similarity index 100% rename from web/src/components/PersonalSetting.js rename to web/default/src/components/PersonalSetting.js diff --git a/web/src/components/PrivateRoute.js b/web/default/src/components/PrivateRoute.js similarity index 100% rename from web/src/components/PrivateRoute.js rename to web/default/src/components/PrivateRoute.js diff --git a/web/src/components/RedemptionsTable.js b/web/default/src/components/RedemptionsTable.js similarity index 100% rename from web/src/components/RedemptionsTable.js rename to web/default/src/components/RedemptionsTable.js diff --git a/web/src/components/RegisterForm.js b/web/default/src/components/RegisterForm.js similarity index 100% rename from web/src/components/RegisterForm.js rename to web/default/src/components/RegisterForm.js diff --git a/web/src/components/SystemSetting.js b/web/default/src/components/SystemSetting.js similarity index 100% rename from web/src/components/SystemSetting.js rename to web/default/src/components/SystemSetting.js diff --git a/web/src/components/TokensTable.js b/web/default/src/components/TokensTable.js similarity index 100% rename from web/src/components/TokensTable.js rename to web/default/src/components/TokensTable.js diff --git a/web/src/components/UsersTable.js b/web/default/src/components/UsersTable.js similarity index 100% rename from web/src/components/UsersTable.js rename to web/default/src/components/UsersTable.js diff --git a/web/src/components/utils.js b/web/default/src/components/utils.js similarity index 100% rename from web/src/components/utils.js rename to web/default/src/components/utils.js diff --git a/web/src/constants/channel.constants.js b/web/default/src/constants/channel.constants.js similarity index 100% rename from web/src/constants/channel.constants.js rename to web/default/src/constants/channel.constants.js diff --git a/web/src/constants/common.constant.js b/web/default/src/constants/common.constant.js similarity index 100% rename from web/src/constants/common.constant.js rename to web/default/src/constants/common.constant.js diff --git a/web/src/constants/index.js b/web/default/src/constants/index.js similarity index 100% rename from web/src/constants/index.js rename to web/default/src/constants/index.js diff --git a/web/src/constants/toast.constants.js b/web/default/src/constants/toast.constants.js similarity index 100% rename from web/src/constants/toast.constants.js rename to web/default/src/constants/toast.constants.js diff --git a/web/src/constants/user.constants.js b/web/default/src/constants/user.constants.js similarity index 100% rename from web/src/constants/user.constants.js rename to web/default/src/constants/user.constants.js diff --git a/web/src/context/Status/index.js b/web/default/src/context/Status/index.js similarity index 100% rename from web/src/context/Status/index.js rename to web/default/src/context/Status/index.js diff --git a/web/src/context/Status/reducer.js b/web/default/src/context/Status/reducer.js similarity index 100% rename from web/src/context/Status/reducer.js rename to web/default/src/context/Status/reducer.js diff --git a/web/src/context/User/index.js b/web/default/src/context/User/index.js similarity index 100% rename from web/src/context/User/index.js rename to web/default/src/context/User/index.js diff --git a/web/src/context/User/reducer.js b/web/default/src/context/User/reducer.js similarity index 100% rename from web/src/context/User/reducer.js rename to web/default/src/context/User/reducer.js diff --git a/web/src/helpers/api.js b/web/default/src/helpers/api.js similarity index 100% rename from web/src/helpers/api.js rename to web/default/src/helpers/api.js diff --git a/web/src/helpers/auth-header.js b/web/default/src/helpers/auth-header.js similarity index 100% rename from web/src/helpers/auth-header.js rename to web/default/src/helpers/auth-header.js diff --git a/web/src/helpers/history.js b/web/default/src/helpers/history.js similarity index 100% rename from web/src/helpers/history.js rename to web/default/src/helpers/history.js diff --git a/web/src/helpers/index.js b/web/default/src/helpers/index.js similarity index 100% rename from web/src/helpers/index.js rename to web/default/src/helpers/index.js diff --git a/web/src/helpers/render.js b/web/default/src/helpers/render.js similarity index 100% rename from web/src/helpers/render.js rename to web/default/src/helpers/render.js diff --git a/web/src/helpers/utils.js b/web/default/src/helpers/utils.js similarity index 100% rename from web/src/helpers/utils.js rename to web/default/src/helpers/utils.js diff --git a/web/src/index.css b/web/default/src/index.css similarity index 100% rename from web/src/index.css rename to web/default/src/index.css diff --git a/web/src/index.js b/web/default/src/index.js similarity index 100% rename from web/src/index.js rename to web/default/src/index.js diff --git a/web/src/pages/About/index.js b/web/default/src/pages/About/index.js similarity index 100% rename from web/src/pages/About/index.js rename to web/default/src/pages/About/index.js diff --git a/web/src/pages/Channel/EditChannel.js b/web/default/src/pages/Channel/EditChannel.js similarity index 100% rename from web/src/pages/Channel/EditChannel.js rename to web/default/src/pages/Channel/EditChannel.js diff --git a/web/src/pages/Channel/index.js b/web/default/src/pages/Channel/index.js similarity index 100% rename from web/src/pages/Channel/index.js rename to web/default/src/pages/Channel/index.js diff --git a/web/src/pages/Chat/index.js b/web/default/src/pages/Chat/index.js similarity index 100% rename from web/src/pages/Chat/index.js rename to web/default/src/pages/Chat/index.js diff --git a/web/src/pages/Home/index.js b/web/default/src/pages/Home/index.js similarity index 100% rename from web/src/pages/Home/index.js rename to web/default/src/pages/Home/index.js diff --git a/web/src/pages/Log/index.js b/web/default/src/pages/Log/index.js similarity index 100% rename from web/src/pages/Log/index.js rename to web/default/src/pages/Log/index.js diff --git a/web/src/pages/NotFound/index.js b/web/default/src/pages/NotFound/index.js similarity index 100% rename from web/src/pages/NotFound/index.js rename to web/default/src/pages/NotFound/index.js diff --git a/web/src/pages/Redemption/EditRedemption.js b/web/default/src/pages/Redemption/EditRedemption.js similarity index 100% rename from web/src/pages/Redemption/EditRedemption.js rename to web/default/src/pages/Redemption/EditRedemption.js diff --git a/web/src/pages/Redemption/index.js b/web/default/src/pages/Redemption/index.js similarity index 100% rename from web/src/pages/Redemption/index.js rename to web/default/src/pages/Redemption/index.js diff --git a/web/src/pages/Setting/index.js b/web/default/src/pages/Setting/index.js similarity index 100% rename from web/src/pages/Setting/index.js rename to web/default/src/pages/Setting/index.js diff --git a/web/src/pages/Token/EditToken.js b/web/default/src/pages/Token/EditToken.js similarity index 100% rename from web/src/pages/Token/EditToken.js rename to web/default/src/pages/Token/EditToken.js diff --git a/web/src/pages/Token/index.js b/web/default/src/pages/Token/index.js similarity index 100% rename from web/src/pages/Token/index.js rename to web/default/src/pages/Token/index.js diff --git a/web/src/pages/TopUp/index.js b/web/default/src/pages/TopUp/index.js similarity index 100% rename from web/src/pages/TopUp/index.js rename to web/default/src/pages/TopUp/index.js diff --git a/web/src/pages/User/AddUser.js b/web/default/src/pages/User/AddUser.js similarity index 100% rename from web/src/pages/User/AddUser.js rename to web/default/src/pages/User/AddUser.js diff --git a/web/src/pages/User/EditUser.js b/web/default/src/pages/User/EditUser.js similarity index 100% rename from web/src/pages/User/EditUser.js rename to web/default/src/pages/User/EditUser.js diff --git a/web/src/pages/User/index.js b/web/default/src/pages/User/index.js similarity index 100% rename from web/src/pages/User/index.js rename to web/default/src/pages/User/index.js diff --git a/web/vercel.json b/web/default/vercel.json similarity index 100% rename from web/vercel.json rename to web/default/vercel.json From 83f95935de30e74ac012e5b1048a76d9aca9aac2 Mon Sep 17 00:00:00 2001 From: JustSong Date: Mon, 1 Jan 2024 19:23:46 +0800 Subject: [PATCH 10/35] ci: fix Dockerfile & ci --- .github/workflows/linux-release.yml | 13 +++++++++---- .github/workflows/macos-release.yml | 13 +++++++++---- .github/workflows/windows-release.yml | 5 +++++ Dockerfile | 11 +---------- README.md | 1 + web/build.sh | 13 +++++++++++++ 6 files changed, 38 insertions(+), 18 deletions(-) create mode 100644 web/build.sh diff --git a/.github/workflows/linux-release.yml b/.github/workflows/linux-release.yml index d9375795..d93c70ca 100644 --- a/.github/workflows/linux-release.yml +++ b/.github/workflows/linux-release.yml @@ -7,6 +7,11 @@ on: tags: - '*' - '!*-alpha*' + workflow_dispatch: + inputs: + name: + description: 'reason' + required: false jobs: release: runs-on: ubuntu-latest @@ -22,10 +27,10 @@ jobs: env: CI: "" run: | - cd web/default - npm install - REACT_APP_VERSION=$(git describe --tags) npm run build - cd ../.. + cd web + git describe --tags > VERSION + REACT_APP_VERSION=$(git describe --tags) chmod u+x ./build.sh && ./build.sh + cd .. - name: Set up Go uses: actions/setup-go@v3 with: diff --git a/.github/workflows/macos-release.yml b/.github/workflows/macos-release.yml index 69bb93f5..ce9d1f11 100644 --- a/.github/workflows/macos-release.yml +++ b/.github/workflows/macos-release.yml @@ -7,6 +7,11 @@ on: tags: - '*' - '!*-alpha*' + workflow_dispatch: + inputs: + name: + description: 'reason' + required: false jobs: release: runs-on: macos-latest @@ -22,10 +27,10 @@ jobs: env: CI: "" run: | - cd web/default - npm install - REACT_APP_VERSION=$(git describe --tags) npm run build - cd ../.. + cd web + git describe --tags > VERSION + REACT_APP_VERSION=$(git describe --tags) chmod u+x ./build.sh && ./build.sh + cd .. - name: Set up Go uses: actions/setup-go@v3 with: diff --git a/.github/workflows/windows-release.yml b/.github/workflows/windows-release.yml index c08e95d2..9b1f16ba 100644 --- a/.github/workflows/windows-release.yml +++ b/.github/workflows/windows-release.yml @@ -7,6 +7,11 @@ on: tags: - '*' - '!*-alpha*' + workflow_dispatch: + inputs: + name: + description: 'reason' + required: false jobs: release: runs-on: windows-latest diff --git a/Dockerfile b/Dockerfile index 56648168..b21a7b3c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,16 +3,7 @@ FROM node:16 as builder WORKDIR /build COPY ./web . COPY ./VERSION . -RUN themes=$(cat THEMES) \ - && IFS=$'\n' \ - && for theme in $themes; do \ - theme_path="web/$theme" \ - && echo "Building theme: $theme" \ - && cd $theme_path \ - && npm install \ - && DISABLE_ESLINT_PLUGIN='true' REACT_APP_VERSION=$(cat VERSION) npm run build \ - && cd /app \ - done +RUN chmod u+x ./build.sh && ./build.sh FROM golang AS builder2 diff --git a/README.md b/README.md index b53936c4..28f4e5e6 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,7 @@ _✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 + 邮箱登录注册(支持注册邮箱白名单)以及通过邮箱进行密码重置。 + [GitHub 开放授权](https://github.com/settings/applications/new)。 + 微信公众号授权(需要额外部署 [WeChat Server](https://github.com/songquanpeng/wechat-server))。 +23. 支持主题切换,设置环境变量 `THEME` 即可,默认为 `default`,欢迎 PR 更多主题,具体参考[此处](./web/README.md)。 ## 部署 ### 基于 Docker 进行部署 diff --git a/web/build.sh b/web/build.sh new file mode 100644 index 00000000..b3751ff4 --- /dev/null +++ b/web/build.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +version=$(cat VERSION) +themes=$(cat THEMES) +IFS=$'\n' + +for theme in $themes; do + echo "Building theme: $theme" + cd $theme + npm install + DISABLE_ESLINT_PLUGIN='true' REACT_APP_VERSION=$version npm run build + cd .. +done From 0c022f17cb28e500c05670f3c89f757fbcc5c864 Mon Sep 17 00:00:00 2001 From: JustSong Date: Mon, 1 Jan 2024 20:25:53 +0800 Subject: [PATCH 11/35] chore: update theme related code --- router/web-router.go | 8 ++------ web/README.md | 2 +- web/default/package.json | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/router/web-router.go b/router/web-router.go index 2f86db38..7328c7a3 100644 --- a/router/web-router.go +++ b/router/web-router.go @@ -14,6 +14,7 @@ import ( ) func SetWebRouter(router *gin.Engine, buildFS embed.FS) { + indexPageData, _ := buildFS.ReadFile(fmt.Sprintf("web/build/%s/index.html", common.Theme)) router.Use(gzip.Gzip(gzip.DefaultCompression)) router.Use(middleware.GlobalWebRateLimit()) router.Use(middleware.Cache()) @@ -24,11 +25,6 @@ func SetWebRouter(router *gin.Engine, buildFS embed.FS) { return } c.Header("Cache-Control", "no-cache") - indexPage, err := buildFS.ReadFile(fmt.Sprintf("web/build/%s/index.html", common.Theme)) - if err != nil { - controller.RelayNotFound(c) - return - } - c.Data(http.StatusOK, "text/html; charset=utf-8", indexPage) + c.Data(http.StatusOK, "text/html; charset=utf-8", indexPageData) }) } diff --git a/web/README.md b/web/README.md index 1454940f..dad20427 100644 --- a/web/README.md +++ b/web/README.md @@ -4,7 +4,7 @@ ## 提交新的主题 1. 在 `web` 文件夹下新建一个文件夹,文件夹名为主题名。 2. 把你的主题文件放到这个文件夹下。 -3. 修改 `package.json` 文件,把 `build` 命令改为:`"build": "react-scripts build && mv build ../build/default"`,其中 `default` 为你的主题名。 +3. 修改 `package.json` 文件,把 `build` 命令改为:`"build": "react-scripts build && mv -f build ../build/default"`,其中 `default` 为你的主题名。 ## 主题列表 ### default diff --git a/web/default/package.json b/web/default/package.json index 872ad36a..438f020c 100644 --- a/web/default/package.json +++ b/web/default/package.json @@ -18,7 +18,7 @@ }, "scripts": { "start": "react-scripts start", - "build": "react-scripts build && mv build ../build/default", + "build": "react-scripts build && mv -f build ../build/default", "test": "react-scripts test", "eject": "react-scripts eject" }, From 92886093ae6c21fe75abf3c81347c8e516c3177f Mon Sep 17 00:00:00 2001 From: JustSong <39998050+songquanpeng@users.noreply.github.com> Date: Mon, 1 Jan 2024 21:10:40 +0800 Subject: [PATCH 12/35] docs: update readme --- web/README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/web/README.md b/web/README.md index dad20427..30846c6f 100644 --- a/web/README.md +++ b/web/README.md @@ -7,5 +7,10 @@ 3. 修改 `package.json` 文件,把 `build` 命令改为:`"build": "react-scripts build && mv -f build ../build/default"`,其中 `default` 为你的主题名。 ## 主题列表 -### default -默认主题 \ No newline at end of file +### 主题:default +默认主题,由 [JustSong](https://github.com/songquanpeng) 开发。 + +预览: +|![image](https://github.com/songquanpeng/one-api/assets/39998050/ccfbc668-3a7f-4bc1-87da-7eacfd7bf371)|![image](https://github.com/songquanpeng/one-api/assets/39998050/a63ed547-44b9-45db-b43a-ecea07d60840)| +|:---:|:---:| + From 4a96031ce60d88f71a5290e8771b2ba24debd7dc Mon Sep 17 00:00:00 2001 From: JustSong Date: Mon, 1 Jan 2024 21:14:45 +0800 Subject: [PATCH 13/35] docs: update readme --- README.md | 1 + web/README.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index 28f4e5e6..edc467aa 100644 --- a/README.md +++ b/README.md @@ -368,6 +368,7 @@ graph LR 15. `RELAY_TIMEOUT`:中继超时设置,单位为秒,默认不设置超时时间。 16. `SQLITE_BUSY_TIMEOUT`:SQLite 锁等待超时设置,单位为毫秒,默认 `3000`。 17. `GEMINI_SAFETY_SETTING`:Gemini 的安全设置,默认 `BLOCK_NONE`。 +18. `THEME`:系统的主题设置,默认为 `default`,具体可选值参考[此处](./web/README.md)。 ### 命令行参数 1. `--port `: 指定服务器监听的端口号,默认为 `3000`。 diff --git a/web/README.md b/web/README.md index 30846c6f..ca73b298 100644 --- a/web/README.md +++ b/web/README.md @@ -2,6 +2,7 @@ > 每个文件夹代表一个主题,欢迎提交你的主题 ## 提交新的主题 +> 欢迎在页面底部保留你和 One API 的版权信息以及指向链接 1. 在 `web` 文件夹下新建一个文件夹,文件夹名为主题名。 2. 把你的主题文件放到这个文件夹下。 3. 修改 `package.json` 文件,把 `build` 命令改为:`"build": "react-scripts build && mv -f build ../build/default"`,其中 `default` 为你的主题名。 From cbf8f077470fceb38fe9d262c42a64eb4be4eb0c Mon Sep 17 00:00:00 2001 From: JustSong Date: Mon, 1 Jan 2024 21:19:37 +0800 Subject: [PATCH 14/35] docs: fix logo --- README.en.md | 2 +- README.ja.md | 2 +- README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.en.md b/README.en.md index 82dceb5b..e7f254f7 100644 --- a/README.en.md +++ b/README.en.md @@ -3,7 +3,7 @@

- one-api logo + one-api logo

diff --git a/README.ja.md b/README.ja.md index 089fc2b5..edfd2a28 100644 --- a/README.ja.md +++ b/README.ja.md @@ -3,7 +3,7 @@

- one-api logo + one-api logo

diff --git a/README.md b/README.md index edc467aa..27acfedd 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- one-api logo + one-api logo

From 6227eee5bc751446db4042d4e6bd8531919026a0 Mon Sep 17 00:00:00 2001 From: Seven Yu <422347121@qq.com> Date: Sun, 7 Jan 2024 13:32:39 +0800 Subject: [PATCH 15/35] fix: fix token validation exception handling #901 * fix: fix exception handling 1. add error log for ValidateUserToken 2. update en.json * chore: update log --------- Co-authored-by: seven.yu Co-authored-by: JustSong --- i18n/en.json | 1 + model/token.go | 66 ++++++++++++++++++++++++++------------------------ 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/i18n/en.json b/i18n/en.json index f67d8665..774be837 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -86,6 +86,7 @@ "该令牌已过期": "The token has expired", "该令牌额度已用尽": "The token quota has been used up", "无效的令牌": "Invalid token", + "令牌验证失败": "Token verification failed", "id 或 userId 为空!": "id or userId is empty!", "quota 不能为负数!": "quota cannot be negative!", "令牌额度不足": "Insufficient token quota", diff --git a/model/token.go b/model/token.go index 0fa984d3..2e53ac0b 100644 --- a/model/token.go +++ b/model/token.go @@ -38,39 +38,43 @@ func ValidateUserToken(key string) (token *Token, err error) { return nil, errors.New("未提供令牌") } token, err = CacheGetTokenByKey(key) - if err == nil { - if token.Status == common.TokenStatusExhausted { - return nil, errors.New("该令牌额度已用尽") - } else if token.Status == common.TokenStatusExpired { - return nil, errors.New("该令牌已过期") + if err != nil { + common.SysError("CacheGetTokenByKey failed: " + err.Error()) + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, errors.New("无效的令牌") } - if token.Status != common.TokenStatusEnabled { - return nil, errors.New("该令牌状态不可用") - } - if token.ExpiredTime != -1 && token.ExpiredTime < common.GetTimestamp() { - if !common.RedisEnabled { - token.Status = common.TokenStatusExpired - err := token.SelectUpdate() - if err != nil { - common.SysError("failed to update token status" + err.Error()) - } - } - return nil, errors.New("该令牌已过期") - } - if !token.UnlimitedQuota && token.RemainQuota <= 0 { - if !common.RedisEnabled { - // in this case, we can make sure the token is exhausted - token.Status = common.TokenStatusExhausted - err := token.SelectUpdate() - if err != nil { - common.SysError("failed to update token status" + err.Error()) - } - } - return nil, errors.New("该令牌额度已用尽") - } - return token, nil + return nil, errors.New("令牌验证失败") } - return nil, errors.New("无效的令牌") + if token.Status == common.TokenStatusExhausted { + return nil, errors.New("该令牌额度已用尽") + } else if token.Status == common.TokenStatusExpired { + return nil, errors.New("该令牌已过期") + } + if token.Status != common.TokenStatusEnabled { + return nil, errors.New("该令牌状态不可用") + } + if token.ExpiredTime != -1 && token.ExpiredTime < common.GetTimestamp() { + if !common.RedisEnabled { + token.Status = common.TokenStatusExpired + err := token.SelectUpdate() + if err != nil { + common.SysError("failed to update token status" + err.Error()) + } + } + return nil, errors.New("该令牌已过期") + } + if !token.UnlimitedQuota && token.RemainQuota <= 0 { + if !common.RedisEnabled { + // in this case, we can make sure the token is exhausted + token.Status = common.TokenStatusExhausted + err := token.SelectUpdate() + if err != nil { + common.SysError("failed to update token status" + err.Error()) + } + } + return nil, errors.New("该令牌额度已用尽") + } + return token, nil } func GetTokenByIds(id int, userId int) (*Token, error) { From 48989d4a0b63e826634896003582b308745c9cf8 Mon Sep 17 00:00:00 2001 From: Buer <42402987+MartialBE@users.noreply.github.com> Date: Sun, 7 Jan 2024 14:20:07 +0800 Subject: [PATCH 16/35] feat: add new theme berry (#860) * feat: add theme berry * docs: add development notes * fix: fix blank page * chore: update implementation * fix: fix package.json * chore: update ui copy --------- Co-authored-by: JustSong --- controller/model.go | 6 +- controller/user.go | 24 + model/log.go | 42 +- router/api-router.go | 1 + web/README.md | 19 + web/THEMES | 3 +- web/berry/.gitignore | 26 + web/berry/README.md | 61 ++ web/berry/jsconfig.json | 9 + web/berry/package.json | 84 ++ web/berry/public/favicon.ico | Bin 0 -> 41270 bytes web/berry/public/index.html | 26 + web/berry/src/App.js | 43 ++ web/berry/src/assets/images/404.svg | 40 + .../src/assets/images/auth/auth-blue-card.svg | 65 ++ .../assets/images/auth/auth-pattern-dark.svg | 39 + .../src/assets/images/auth/auth-pattern.svg | 39 + .../assets/images/auth/auth-purple-card.svg | 69 ++ .../images/auth/auth-signup-blue-card.svg | 1 + .../images/auth/auth-signup-white-card.svg | 40 + web/berry/src/assets/images/icons/earning.svg | 5 + web/berry/src/assets/images/icons/github.svg | 1 + .../src/assets/images/icons/shape-avatar.svg | 1 + .../src/assets/images/icons/social-google.svg | 6 + web/berry/src/assets/images/icons/wechat.svg | 1 + web/berry/src/assets/images/invite/cover.jpg | Bin 0 -> 87952 bytes .../assets/images/invite/cwok_casual_19.webp | Bin 0 -> 177892 bytes web/berry/src/assets/images/logo-2.svg | 15 + web/berry/src/assets/images/logo.svg | 13 + .../src/assets/images/users/user-round.svg | 1 + .../src/assets/scss/_themes-vars.module.scss | 157 ++++ web/berry/src/assets/scss/style.scss | 128 ++++ web/berry/src/config.js | 29 + web/berry/src/constants/ChannelConstants.js | 146 ++++ web/berry/src/constants/CommonConstants.js | 1 + web/berry/src/constants/SnackbarConstants.js | 27 + web/berry/src/constants/index.js | 3 + web/berry/src/contexts/StatusContext.js | 70 ++ web/berry/src/contexts/UserContext.js | 29 + web/berry/src/hooks/useAuth.js | 13 + web/berry/src/hooks/useLogin.js | 78 ++ web/berry/src/hooks/useRegister.js | 39 + web/berry/src/hooks/useScriptRef.js | 18 + web/berry/src/index.js | 31 + .../MainLayout/Header/ProfileSection/index.js | 173 +++++ .../src/layout/MainLayout/Header/index.js | 68 ++ .../layout/MainLayout/LogoSection/index.js | 23 + .../MainLayout/Sidebar/MenuCard/index.js | 130 ++++ .../Sidebar/MenuList/NavCollapse/index.js | 158 ++++ .../Sidebar/MenuList/NavGroup/index.js | 61 ++ .../Sidebar/MenuList/NavItem/index.js | 115 +++ .../MainLayout/Sidebar/MenuList/index.js | 36 + .../src/layout/MainLayout/Sidebar/index.js | 94 +++ web/berry/src/layout/MainLayout/index.js | 103 +++ .../src/layout/MinimalLayout/Header/index.js | 75 ++ web/berry/src/layout/MinimalLayout/index.js | 39 + web/berry/src/layout/NavMotion.js | 39 + web/berry/src/layout/NavigationScroll.js | 26 + web/berry/src/menu-items/index.js | 18 + web/berry/src/menu-items/panel.js | 104 +++ web/berry/src/routes/MainRoutes.js | 73 ++ web/berry/src/routes/OtherRoutes.js | 58 ++ web/berry/src/routes/index.js | 11 + web/berry/src/serviceWorker.js | 128 ++++ web/berry/src/store/accountReducer.js | 24 + web/berry/src/store/actions.js | 9 + web/berry/src/store/constant.js | 4 + web/berry/src/store/customizationReducer.js | 46 ++ web/berry/src/store/index.js | 9 + web/berry/src/store/reducer.js | 16 + web/berry/src/store/siteInfoReducer.js | 18 + web/berry/src/themes/compStyleOverride.js | 256 +++++++ web/berry/src/themes/index.js | 55 ++ web/berry/src/themes/palette.js | 73 ++ web/berry/src/themes/typography.js | 137 ++++ web/berry/src/ui-component/AdminContainer.js | 11 + web/berry/src/ui-component/Footer.js | 37 + web/berry/src/ui-component/Label.js | 158 ++++ web/berry/src/ui-component/Loadable.js | 15 + web/berry/src/ui-component/Loader.js | 21 + web/berry/src/ui-component/Logo.js | 21 + web/berry/src/ui-component/SvgColor.js | 31 + web/berry/src/ui-component/Switch.js | 37 + web/berry/src/ui-component/TableToolBar.js | 47 ++ .../ui-component/cards/CardSecondaryAction.js | 55 ++ web/berry/src/ui-component/cards/MainCard.js | 80 ++ .../cards/Skeleton/EarningCard.js | 32 + .../cards/Skeleton/ImagePlaceholder.js | 8 + .../cards/Skeleton/PopularCard.js | 155 ++++ .../cards/Skeleton/ProductPlaceholder.js | 44 ++ .../cards/Skeleton/TotalGrowthBarChart.js | 39 + .../cards/Skeleton/TotalIncomeCard.js | 19 + web/berry/src/ui-component/cards/SubCard.js | 72 ++ web/berry/src/ui-component/cards/UserCard.js | 121 +++ .../ui-component/extended/AnimateButton.js | 92 +++ web/berry/src/ui-component/extended/Avatar.js | 72 ++ .../src/ui-component/extended/Breadcrumbs.js | 187 +++++ .../src/ui-component/extended/Transitions.js | 107 +++ web/berry/src/utils/api.js | 26 + web/berry/src/utils/chart.js | 96 +++ web/berry/src/utils/common.js | 188 +++++ web/berry/src/utils/password-strength.js | 34 + web/berry/src/utils/route-guard/AuthGuard.js | 20 + web/berry/src/views/About/index.js | 69 ++ .../Authentication/Auth/ForgetPassword.js | 68 ++ .../views/Authentication/Auth/GitHubOAuth.js | 94 +++ .../src/views/Authentication/Auth/Login.js | 66 ++ .../src/views/Authentication/Auth/Register.js | 71 ++ .../Authentication/Auth/ResetPassword.js | 66 ++ .../views/Authentication/AuthCardWrapper.js | 32 + .../Authentication/AuthForms/AuthLogin.js | 268 +++++++ .../Authentication/AuthForms/AuthRegister.js | 310 ++++++++ .../AuthForms/ForgetPasswordForm.js | 174 +++++ .../AuthForms/ResetPasswordForm.js | 75 ++ .../Authentication/AuthForms/WechatModal.js | 70 ++ .../src/views/Authentication/AuthWrapper.js | 28 + .../src/views/Channel/component/EditModal.js | 718 ++++++++++++++++++ .../src/views/Channel/component/GroupLabel.js | 27 + .../src/views/Channel/component/NameLabel.js | 54 ++ .../Channel/component/ResponseTimeLabel.js | 43 ++ .../src/views/Channel/component/TableHead.js | 21 + .../src/views/Channel/component/TableRow.js | 284 +++++++ web/berry/src/views/Channel/index.js | 294 +++++++ web/berry/src/views/Channel/type/Config.js | 144 ++++ .../component/StatisticalBarChart.js | 169 +++++ .../Dashboard/component/StatisticalCard.js | 99 +++ .../component/StatisticalLineChartCard.js | 122 +++ web/berry/src/views/Dashboard/index.js | 218 ++++++ web/berry/src/views/Error/index.js | 47 ++ web/berry/src/views/Home/baseIndex.js | 42 + web/berry/src/views/Home/index.js | 72 ++ .../src/views/Log/component/TableHead.js | 27 + web/berry/src/views/Log/component/TableRow.js | 69 ++ .../src/views/Log/component/TableToolBar.js | 239 ++++++ web/berry/src/views/Log/index.js | 157 ++++ web/berry/src/views/Log/type/LogType.js | 9 + .../src/views/Profile/component/EmailModal.js | 201 +++++ web/berry/src/views/Profile/index.js | 293 +++++++ .../views/Redemption/component/EditModal.js | 190 +++++ .../views/Redemption/component/TableHead.js | 19 + .../views/Redemption/component/TableRow.js | 147 ++++ web/berry/src/views/Redemption/index.js | 203 +++++ .../Setting/component/OperationSetting.js | 532 +++++++++++++ .../views/Setting/component/OtherSetting.js | 286 +++++++ .../views/Setting/component/SystemSetting.js | 611 +++++++++++++++ web/berry/src/views/Setting/index.js | 90 +++ .../src/views/Token/component/EditModal.js | 275 +++++++ .../src/views/Token/component/TableHead.js | 19 + .../src/views/Token/component/TableRow.js | 270 +++++++ web/berry/src/views/Token/index.js | 215 ++++++ .../src/views/Topup/component/InviteCard.js | 80 ++ .../src/views/Topup/component/TopupCard.js | 122 +++ web/berry/src/views/Topup/index.js | 26 + .../src/views/User/component/EditModal.js | 288 +++++++ .../src/views/User/component/TableHead.js | 20 + .../src/views/User/component/TableRow.js | 193 +++++ web/berry/src/views/User/index.js | 205 +++++ 157 files changed, 13979 insertions(+), 5 deletions(-) create mode 100644 web/berry/.gitignore create mode 100644 web/berry/README.md create mode 100644 web/berry/jsconfig.json create mode 100644 web/berry/package.json create mode 100644 web/berry/public/favicon.ico create mode 100644 web/berry/public/index.html create mode 100644 web/berry/src/App.js create mode 100644 web/berry/src/assets/images/404.svg create mode 100644 web/berry/src/assets/images/auth/auth-blue-card.svg create mode 100644 web/berry/src/assets/images/auth/auth-pattern-dark.svg create mode 100644 web/berry/src/assets/images/auth/auth-pattern.svg create mode 100644 web/berry/src/assets/images/auth/auth-purple-card.svg create mode 100644 web/berry/src/assets/images/auth/auth-signup-blue-card.svg create mode 100644 web/berry/src/assets/images/auth/auth-signup-white-card.svg create mode 100644 web/berry/src/assets/images/icons/earning.svg create mode 100644 web/berry/src/assets/images/icons/github.svg create mode 100644 web/berry/src/assets/images/icons/shape-avatar.svg create mode 100644 web/berry/src/assets/images/icons/social-google.svg create mode 100644 web/berry/src/assets/images/icons/wechat.svg create mode 100644 web/berry/src/assets/images/invite/cover.jpg create mode 100644 web/berry/src/assets/images/invite/cwok_casual_19.webp create mode 100644 web/berry/src/assets/images/logo-2.svg create mode 100644 web/berry/src/assets/images/logo.svg create mode 100644 web/berry/src/assets/images/users/user-round.svg create mode 100644 web/berry/src/assets/scss/_themes-vars.module.scss create mode 100644 web/berry/src/assets/scss/style.scss create mode 100644 web/berry/src/config.js create mode 100644 web/berry/src/constants/ChannelConstants.js create mode 100644 web/berry/src/constants/CommonConstants.js create mode 100644 web/berry/src/constants/SnackbarConstants.js create mode 100644 web/berry/src/constants/index.js create mode 100644 web/berry/src/contexts/StatusContext.js create mode 100644 web/berry/src/contexts/UserContext.js create mode 100644 web/berry/src/hooks/useAuth.js create mode 100644 web/berry/src/hooks/useLogin.js create mode 100644 web/berry/src/hooks/useRegister.js create mode 100644 web/berry/src/hooks/useScriptRef.js create mode 100644 web/berry/src/index.js create mode 100644 web/berry/src/layout/MainLayout/Header/ProfileSection/index.js create mode 100644 web/berry/src/layout/MainLayout/Header/index.js create mode 100644 web/berry/src/layout/MainLayout/LogoSection/index.js create mode 100644 web/berry/src/layout/MainLayout/Sidebar/MenuCard/index.js create mode 100644 web/berry/src/layout/MainLayout/Sidebar/MenuList/NavCollapse/index.js create mode 100644 web/berry/src/layout/MainLayout/Sidebar/MenuList/NavGroup/index.js create mode 100644 web/berry/src/layout/MainLayout/Sidebar/MenuList/NavItem/index.js create mode 100644 web/berry/src/layout/MainLayout/Sidebar/MenuList/index.js create mode 100644 web/berry/src/layout/MainLayout/Sidebar/index.js create mode 100644 web/berry/src/layout/MainLayout/index.js create mode 100644 web/berry/src/layout/MinimalLayout/Header/index.js create mode 100644 web/berry/src/layout/MinimalLayout/index.js create mode 100644 web/berry/src/layout/NavMotion.js create mode 100644 web/berry/src/layout/NavigationScroll.js create mode 100644 web/berry/src/menu-items/index.js create mode 100644 web/berry/src/menu-items/panel.js create mode 100644 web/berry/src/routes/MainRoutes.js create mode 100644 web/berry/src/routes/OtherRoutes.js create mode 100644 web/berry/src/routes/index.js create mode 100644 web/berry/src/serviceWorker.js create mode 100644 web/berry/src/store/accountReducer.js create mode 100644 web/berry/src/store/actions.js create mode 100644 web/berry/src/store/constant.js create mode 100644 web/berry/src/store/customizationReducer.js create mode 100644 web/berry/src/store/index.js create mode 100644 web/berry/src/store/reducer.js create mode 100644 web/berry/src/store/siteInfoReducer.js create mode 100644 web/berry/src/themes/compStyleOverride.js create mode 100644 web/berry/src/themes/index.js create mode 100644 web/berry/src/themes/palette.js create mode 100644 web/berry/src/themes/typography.js create mode 100644 web/berry/src/ui-component/AdminContainer.js create mode 100644 web/berry/src/ui-component/Footer.js create mode 100644 web/berry/src/ui-component/Label.js create mode 100644 web/berry/src/ui-component/Loadable.js create mode 100644 web/berry/src/ui-component/Loader.js create mode 100644 web/berry/src/ui-component/Logo.js create mode 100644 web/berry/src/ui-component/SvgColor.js create mode 100644 web/berry/src/ui-component/Switch.js create mode 100644 web/berry/src/ui-component/TableToolBar.js create mode 100644 web/berry/src/ui-component/cards/CardSecondaryAction.js create mode 100644 web/berry/src/ui-component/cards/MainCard.js create mode 100644 web/berry/src/ui-component/cards/Skeleton/EarningCard.js create mode 100644 web/berry/src/ui-component/cards/Skeleton/ImagePlaceholder.js create mode 100644 web/berry/src/ui-component/cards/Skeleton/PopularCard.js create mode 100644 web/berry/src/ui-component/cards/Skeleton/ProductPlaceholder.js create mode 100644 web/berry/src/ui-component/cards/Skeleton/TotalGrowthBarChart.js create mode 100644 web/berry/src/ui-component/cards/Skeleton/TotalIncomeCard.js create mode 100644 web/berry/src/ui-component/cards/SubCard.js create mode 100644 web/berry/src/ui-component/cards/UserCard.js create mode 100644 web/berry/src/ui-component/extended/AnimateButton.js create mode 100644 web/berry/src/ui-component/extended/Avatar.js create mode 100644 web/berry/src/ui-component/extended/Breadcrumbs.js create mode 100644 web/berry/src/ui-component/extended/Transitions.js create mode 100644 web/berry/src/utils/api.js create mode 100644 web/berry/src/utils/chart.js create mode 100644 web/berry/src/utils/common.js create mode 100644 web/berry/src/utils/password-strength.js create mode 100644 web/berry/src/utils/route-guard/AuthGuard.js create mode 100644 web/berry/src/views/About/index.js create mode 100644 web/berry/src/views/Authentication/Auth/ForgetPassword.js create mode 100644 web/berry/src/views/Authentication/Auth/GitHubOAuth.js create mode 100644 web/berry/src/views/Authentication/Auth/Login.js create mode 100644 web/berry/src/views/Authentication/Auth/Register.js create mode 100644 web/berry/src/views/Authentication/Auth/ResetPassword.js create mode 100644 web/berry/src/views/Authentication/AuthCardWrapper.js create mode 100644 web/berry/src/views/Authentication/AuthForms/AuthLogin.js create mode 100644 web/berry/src/views/Authentication/AuthForms/AuthRegister.js create mode 100644 web/berry/src/views/Authentication/AuthForms/ForgetPasswordForm.js create mode 100644 web/berry/src/views/Authentication/AuthForms/ResetPasswordForm.js create mode 100644 web/berry/src/views/Authentication/AuthForms/WechatModal.js create mode 100644 web/berry/src/views/Authentication/AuthWrapper.js create mode 100644 web/berry/src/views/Channel/component/EditModal.js create mode 100644 web/berry/src/views/Channel/component/GroupLabel.js create mode 100644 web/berry/src/views/Channel/component/NameLabel.js create mode 100644 web/berry/src/views/Channel/component/ResponseTimeLabel.js create mode 100644 web/berry/src/views/Channel/component/TableHead.js create mode 100644 web/berry/src/views/Channel/component/TableRow.js create mode 100644 web/berry/src/views/Channel/index.js create mode 100644 web/berry/src/views/Channel/type/Config.js create mode 100644 web/berry/src/views/Dashboard/component/StatisticalBarChart.js create mode 100644 web/berry/src/views/Dashboard/component/StatisticalCard.js create mode 100644 web/berry/src/views/Dashboard/component/StatisticalLineChartCard.js create mode 100644 web/berry/src/views/Dashboard/index.js create mode 100644 web/berry/src/views/Error/index.js create mode 100644 web/berry/src/views/Home/baseIndex.js create mode 100644 web/berry/src/views/Home/index.js create mode 100644 web/berry/src/views/Log/component/TableHead.js create mode 100644 web/berry/src/views/Log/component/TableRow.js create mode 100644 web/berry/src/views/Log/component/TableToolBar.js create mode 100644 web/berry/src/views/Log/index.js create mode 100644 web/berry/src/views/Log/type/LogType.js create mode 100644 web/berry/src/views/Profile/component/EmailModal.js create mode 100644 web/berry/src/views/Profile/index.js create mode 100644 web/berry/src/views/Redemption/component/EditModal.js create mode 100644 web/berry/src/views/Redemption/component/TableHead.js create mode 100644 web/berry/src/views/Redemption/component/TableRow.js create mode 100644 web/berry/src/views/Redemption/index.js create mode 100644 web/berry/src/views/Setting/component/OperationSetting.js create mode 100644 web/berry/src/views/Setting/component/OtherSetting.js create mode 100644 web/berry/src/views/Setting/component/SystemSetting.js create mode 100644 web/berry/src/views/Setting/index.js create mode 100644 web/berry/src/views/Token/component/EditModal.js create mode 100644 web/berry/src/views/Token/component/TableHead.js create mode 100644 web/berry/src/views/Token/component/TableRow.js create mode 100644 web/berry/src/views/Token/index.js create mode 100644 web/berry/src/views/Topup/component/InviteCard.js create mode 100644 web/berry/src/views/Topup/component/TopupCard.js create mode 100644 web/berry/src/views/Topup/index.js create mode 100644 web/berry/src/views/User/component/EditModal.js create mode 100644 web/berry/src/views/User/component/TableHead.js create mode 100644 web/berry/src/views/User/component/TableRow.js create mode 100644 web/berry/src/views/User/index.js diff --git a/controller/model.go b/controller/model.go index 6cb530db..c12ccf34 100644 --- a/controller/model.go +++ b/controller/model.go @@ -436,7 +436,7 @@ func init() { Id: "PaLM-2", Object: "model", Created: 1677649963, - OwnedBy: "google", + OwnedBy: "google palm", Permission: permission, Root: "PaLM-2", Parent: nil, @@ -445,7 +445,7 @@ func init() { Id: "gemini-pro", Object: "model", Created: 1677649963, - OwnedBy: "google", + OwnedBy: "google gemini", Permission: permission, Root: "gemini-pro", Parent: nil, @@ -454,7 +454,7 @@ func init() { Id: "gemini-pro-vision", Object: "model", Created: 1677649963, - OwnedBy: "google", + OwnedBy: "google gemini", Permission: permission, Root: "gemini-pro-vision", Parent: nil, diff --git a/controller/user.go b/controller/user.go index 8fd10b82..174300ed 100644 --- a/controller/user.go +++ b/controller/user.go @@ -7,6 +7,7 @@ import ( "one-api/common" "one-api/model" "strconv" + "time" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" @@ -248,6 +249,29 @@ func GetUser(c *gin.Context) { return } +func GetUserDashboard(c *gin.Context) { + id := c.GetInt("id") + now := time.Now() + startOfDay := now.Truncate(24*time.Hour).AddDate(0, 0, -6).Unix() + endOfDay := now.Truncate(24 * time.Hour).Add(24*time.Hour - time.Second).Unix() + + dashboards, err := model.SearchLogsByDayAndModel(id, int(startOfDay), int(endOfDay)) + if err != nil { + c.JSON(http.StatusOK, gin.H{ + "success": false, + "message": "无法获取统计信息", + "data": nil, + }) + return + } + c.JSON(http.StatusOK, gin.H{ + "success": true, + "message": "", + "data": dashboards, + }) + return +} + func GenerateAccessToken(c *gin.Context) { id := c.GetInt("id") user, err := model.GetUserById(id, true) diff --git a/model/log.go b/model/log.go index 3d3ffae3..aa4be60d 100644 --- a/model/log.go +++ b/model/log.go @@ -3,8 +3,9 @@ package model import ( "context" "fmt" - "gorm.io/gorm" "one-api/common" + + "gorm.io/gorm" ) type Log struct { @@ -182,3 +183,42 @@ func DeleteOldLog(targetTimestamp int64) (int64, error) { result := DB.Where("created_at < ?", targetTimestamp).Delete(&Log{}) return result.RowsAffected, result.Error } + +type LogStatistic struct { + Day string `gorm:"column:day"` + ModelName string `gorm:"column:model_name"` + RequestCount int `gorm:"column:request_count"` + Quota int `gorm:"column:quota"` + PromptTokens int `gorm:"column:prompt_tokens"` + CompletionTokens int `gorm:"column:completion_tokens"` +} + +func SearchLogsByDayAndModel(userId, start, end int) (LogStatistics []*LogStatistic, err error) { + groupSelect := "DATE_FORMAT(FROM_UNIXTIME(created_at), '%Y-%m-%d') as day" + + if common.UsingPostgreSQL { + groupSelect = "TO_CHAR(date_trunc('day', to_timestamp(created_at)), 'YYYY-MM-DD') as day" + } + + if common.UsingSQLite { + groupSelect = "strftime('%Y-%m-%d', datetime(created_at, 'unixepoch')) as day" + } + + err = DB.Raw(` + SELECT `+groupSelect+`, + model_name, count(1) as request_count, + sum(quota) as quota, + sum(prompt_tokens) as prompt_tokens, + sum(completion_tokens) as completion_tokens + FROM logs + WHERE type=2 + AND userId= ? + AND created_at BETWEEN ? AND ? + GROUP BY day, model_name + ORDER BY day, model_name + `, userId, start, end).Scan(&LogStatistics).Error + + fmt.Println(userId, start, end) + + return LogStatistics, err +} diff --git a/router/api-router.go b/router/api-router.go index da3f9e61..162675ce 100644 --- a/router/api-router.go +++ b/router/api-router.go @@ -35,6 +35,7 @@ func SetApiRouter(router *gin.Engine) { selfRoute := userRoute.Group("/") selfRoute.Use(middleware.UserAuth()) { + selfRoute.GET("/dashboard", controller.GetUserDashboard) selfRoute.GET("/self", controller.GetSelf) selfRoute.PUT("/self", controller.UpdateSelf) selfRoute.DELETE("/self", controller.DeleteSelf) diff --git a/web/README.md b/web/README.md index ca73b298..8e6827c9 100644 --- a/web/README.md +++ b/web/README.md @@ -1,17 +1,36 @@ # One API 的前端界面 + > 每个文件夹代表一个主题,欢迎提交你的主题 ## 提交新的主题 + > 欢迎在页面底部保留你和 One API 的版权信息以及指向链接 + 1. 在 `web` 文件夹下新建一个文件夹,文件夹名为主题名。 2. 把你的主题文件放到这个文件夹下。 3. 修改 `package.json` 文件,把 `build` 命令改为:`"build": "react-scripts build && mv -f build ../build/default"`,其中 `default` 为你的主题名。 ## 主题列表 + ### 主题:default + 默认主题,由 [JustSong](https://github.com/songquanpeng) 开发。 预览: |![image](https://github.com/songquanpeng/one-api/assets/39998050/ccfbc668-3a7f-4bc1-87da-7eacfd7bf371)|![image](https://github.com/songquanpeng/one-api/assets/39998050/a63ed547-44b9-45db-b43a-ecea07d60840)| |:---:|:---:| +### 主题:berry + +由 [MartialBE](https://github.com/MartialBE) 开发。 + +预览: +||| +|:---:|:---:| +|![image](https://github.com/songquanpeng/one-api/assets/42402987/36aff5c6-c5ff-4a90-8e3d-33d5cff34cbf)|![image](https://github.com/songquanpeng/one-api/assets/42402987/9ac63b36-5140-4064-8fad-fc9d25821509)| +|![image](https://github.com/songquanpeng/one-api/assets/42402987/fb2b1c64-ef24-4027-9b80-0cd9d945a47f)|![image](https://github.com/songquanpeng/one-api/assets/42402987/b6b649ec-2888-4324-8b2d-d5e11554eed6)| +|![image](https://github.com/songquanpeng/one-api/assets/42402987/6d3b22e0-436b-4e26-8911-bcc993c6a2bd)|![image](https://github.com/songquanpeng/one-api/assets/42402987/eef1e224-7245-44d7-804e-9d1c8fa3f29c)| + +#### 开发说明 + +请查看 [web/berry/README.md](https://github.com/songquanpeng/one-api/tree/main/web/berry/README.md) diff --git a/web/THEMES b/web/THEMES index 331d858c..b6597eeb 100644 --- a/web/THEMES +++ b/web/THEMES @@ -1 +1,2 @@ -default \ No newline at end of file +default +berry \ No newline at end of file diff --git a/web/berry/.gitignore b/web/berry/.gitignore new file mode 100644 index 00000000..2b5bba76 --- /dev/null +++ b/web/berry/.gitignore @@ -0,0 +1,26 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.idea +package-lock.json +yarn.lock \ No newline at end of file diff --git a/web/berry/README.md b/web/berry/README.md new file mode 100644 index 00000000..170feedc --- /dev/null +++ b/web/berry/README.md @@ -0,0 +1,61 @@ +# One API 前端界面 + +这个项目是 One API 的前端界面,它基于 [Berry Free React Admin Template](https://github.com/codedthemes/berry-free-react-admin-template) 进行开发。 + +## 使用的开源项目 + +使用了以下开源项目作为我们项目的一部分: + +- [Berry Free React Admin Template](https://github.com/codedthemes/berry-free-react-admin-template) +- [minimal-ui-kit](minimal-ui-kit) + +## 开发说明 + +当添加新的渠道时,需要修改以下地方: + +1. `web/berry/src/constants/ChannelConstants.js` + +在该文件中的 `CHANNEL_OPTIONS` 添加新的渠道 + +```js +export const CHANNEL_OPTIONS = { + //key 为渠道ID + 1: { + key: 1, // 渠道ID + text: "OpenAI", // 渠道名称 + value: 1, // 渠道ID + color: "primary", // 渠道列表显示的颜色 + }, +}; +``` + +2. `web/berry/src/views/Channel/type/Config.js` + +在该文件中的`typeConfig`添加新的渠道配置, 如果无需配置,可以不添加 + +```js +const typeConfig = { + // key 为渠道ID + 3: { + inputLabel: { + // 输入框名称 配置 + // 对应的字段名称 + base_url: "AZURE_OPENAI_ENDPOINT", + other: "默认 API 版本", + }, + prompt: { + // 输入框提示 配置 + // 对应的字段名称 + base_url: "请填写AZURE_OPENAI_ENDPOINT", + + // 注意:通过判断 `other` 是否有值来判断是否需要显示 `other` 输入框, 默认是没有值的 + other: "请输入默认API版本,例如:2023-06-01-preview", + }, + modelGroup: "openai", // 模型组名称,这个值是给 填入渠道支持模型 按钮使用的。 填入渠道支持模型 按钮会根据这个值来获取模型组,如果填写默认是 openai + }, +}; +``` + +## 许可证 + +本项目中使用的代码遵循 MIT 许可证。 diff --git a/web/berry/jsconfig.json b/web/berry/jsconfig.json new file mode 100644 index 00000000..35332c70 --- /dev/null +++ b/web/berry/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "baseUrl": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/web/berry/package.json b/web/berry/package.json new file mode 100644 index 00000000..f428fd9c --- /dev/null +++ b/web/berry/package.json @@ -0,0 +1,84 @@ +{ + "name": "one_api_web", + "version": "1.0.0", + "proxy": "http://127.0.0.1:3000", + "private": true, + "homepage": "", + "dependencies": { + "@emotion/cache": "^11.9.3", + "@emotion/react": "^11.9.3", + "@emotion/styled": "^11.9.3", + "@mui/icons-material": "^5.8.4", + "@mui/lab": "^5.0.0-alpha.88", + "@mui/material": "^5.8.6", + "@mui/system": "^5.8.6", + "@mui/utils": "^5.8.6", + "@mui/x-date-pickers": "^6.18.5", + "@tabler/icons-react": "^2.44.0", + "apexcharts": "^3.35.3", + "axios": "^0.27.2", + "dayjs": "^1.11.10", + "formik": "^2.2.9", + "framer-motion": "^6.3.16", + "history": "^5.3.0", + "marked": "^4.1.1", + "material-ui-popup-state": "^4.0.1", + "notistack": "^3.0.1", + "prop-types": "^15.8.1", + "react": "^18.2.0", + "react-apexcharts": "^1.4.0", + "react-device-detect": "^2.2.2", + "react-dom": "^18.2.0", + "react-perfect-scrollbar": "^1.5.8", + "react-redux": "^8.0.2", + "react-router": "6.3.0", + "react-router-dom": "6.3.0", + "react-scripts": "^5.0.1", + "react-turnstile": "^1.1.2", + "redux": "^4.2.0", + "yup": "^0.32.11" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build && mv -f build ../build/berry", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app" + ] + }, + "babel": { + "presets": [ + "@babel/preset-react" + ] + }, + "browserslist": { + "production": [ + "defaults", + "not IE 11" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@babel/core": "^7.21.4", + "@babel/eslint-parser": "^7.21.3", + "eslint": "^8.38.0", + "eslint-config-prettier": "^8.8.0", + "eslint-config-react-app": "^7.0.1", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "immutable": "^4.3.0", + "prettier": "^2.8.7", + "sass": "^1.53.0" + } +} diff --git a/web/berry/public/favicon.ico b/web/berry/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fbcfb14a5f9236888475dff35f0749f90473377c GIT binary patch literal 41270 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 literal 0 HcmV?d00001 diff --git a/web/berry/public/index.html b/web/berry/public/index.html new file mode 100644 index 00000000..6f232250 --- /dev/null +++ b/web/berry/public/index.html @@ -0,0 +1,26 @@ + + + + One API + + + + + + + + + + + + +
+ + + diff --git a/web/berry/src/App.js b/web/berry/src/App.js new file mode 100644 index 00000000..fc54c632 --- /dev/null +++ b/web/berry/src/App.js @@ -0,0 +1,43 @@ +import { useSelector } from 'react-redux'; + +import { ThemeProvider } from '@mui/material/styles'; +import { CssBaseline, StyledEngineProvider } from '@mui/material'; + +// routing +import Routes from 'routes'; + +// defaultTheme +import themes from 'themes'; + +// project imports +import NavigationScroll from 'layout/NavigationScroll'; + +// auth +import UserProvider from 'contexts/UserContext'; +import StatusProvider from 'contexts/StatusContext'; +import { SnackbarProvider } from 'notistack'; + +// ==============================|| APP ||============================== // + +const App = () => { + const customization = useSelector((state) => state.customization); + + return ( + + + + + + + + + + + + + + + ); +}; + +export default App; diff --git a/web/berry/src/assets/images/404.svg b/web/berry/src/assets/images/404.svg new file mode 100644 index 00000000..352a14ad --- /dev/null +++ b/web/berry/src/assets/images/404.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/berry/src/assets/images/auth/auth-blue-card.svg b/web/berry/src/assets/images/auth/auth-blue-card.svg new file mode 100644 index 00000000..6c9fe3e7 --- /dev/null +++ b/web/berry/src/assets/images/auth/auth-blue-card.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/berry/src/assets/images/auth/auth-pattern-dark.svg b/web/berry/src/assets/images/auth/auth-pattern-dark.svg new file mode 100644 index 00000000..aa0e4ab2 --- /dev/null +++ b/web/berry/src/assets/images/auth/auth-pattern-dark.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/berry/src/assets/images/auth/auth-pattern.svg b/web/berry/src/assets/images/auth/auth-pattern.svg new file mode 100644 index 00000000..b7ac8e27 --- /dev/null +++ b/web/berry/src/assets/images/auth/auth-pattern.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/berry/src/assets/images/auth/auth-purple-card.svg b/web/berry/src/assets/images/auth/auth-purple-card.svg new file mode 100644 index 00000000..c724e0a3 --- /dev/null +++ b/web/berry/src/assets/images/auth/auth-purple-card.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/berry/src/assets/images/auth/auth-signup-blue-card.svg b/web/berry/src/assets/images/auth/auth-signup-blue-card.svg new file mode 100644 index 00000000..ebb8e85f --- /dev/null +++ b/web/berry/src/assets/images/auth/auth-signup-blue-card.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/berry/src/assets/images/auth/auth-signup-white-card.svg b/web/berry/src/assets/images/auth/auth-signup-white-card.svg new file mode 100644 index 00000000..56b97e20 --- /dev/null +++ b/web/berry/src/assets/images/auth/auth-signup-white-card.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/berry/src/assets/images/icons/earning.svg b/web/berry/src/assets/images/icons/earning.svg new file mode 100644 index 00000000..e877b599 --- /dev/null +++ b/web/berry/src/assets/images/icons/earning.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/web/berry/src/assets/images/icons/github.svg b/web/berry/src/assets/images/icons/github.svg new file mode 100644 index 00000000..e5b1b82a --- /dev/null +++ b/web/berry/src/assets/images/icons/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/berry/src/assets/images/icons/shape-avatar.svg b/web/berry/src/assets/images/icons/shape-avatar.svg new file mode 100644 index 00000000..38aac7e2 --- /dev/null +++ b/web/berry/src/assets/images/icons/shape-avatar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/berry/src/assets/images/icons/social-google.svg b/web/berry/src/assets/images/icons/social-google.svg new file mode 100644 index 00000000..2231ce98 --- /dev/null +++ b/web/berry/src/assets/images/icons/social-google.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/web/berry/src/assets/images/icons/wechat.svg b/web/berry/src/assets/images/icons/wechat.svg new file mode 100644 index 00000000..a0b2e36c --- /dev/null +++ b/web/berry/src/assets/images/icons/wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/berry/src/assets/images/invite/cover.jpg b/web/berry/src/assets/images/invite/cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93be1a40c9592049c1f4550e9c77e838a05d846a GIT binary patch literal 87952 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 z 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%0AaLuNBN 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 literal 0 HcmV?d00001 diff --git a/web/berry/src/assets/images/logo-2.svg b/web/berry/src/assets/images/logo-2.svg new file mode 100644 index 00000000..2e674a7e --- /dev/null +++ b/web/berry/src/assets/images/logo-2.svg @@ -0,0 +1,15 @@ + + + + Layer 1 + + + + + + + + + + + \ No newline at end of file diff --git a/web/berry/src/assets/images/logo.svg b/web/berry/src/assets/images/logo.svg new file mode 100644 index 00000000..348c7e5a --- /dev/null +++ b/web/berry/src/assets/images/logo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/berry/src/assets/images/users/user-round.svg b/web/berry/src/assets/images/users/user-round.svg new file mode 100644 index 00000000..eaef7ed9 --- /dev/null +++ b/web/berry/src/assets/images/users/user-round.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/berry/src/assets/scss/_themes-vars.module.scss b/web/berry/src/assets/scss/_themes-vars.module.scss new file mode 100644 index 00000000..a470b033 --- /dev/null +++ b/web/berry/src/assets/scss/_themes-vars.module.scss @@ -0,0 +1,157 @@ +// paper & background +$paper: #ffffff; + +// primary +$primaryLight: #eef2f6; +$primaryMain: #2196f3; +$primaryDark: #1e88e5; +$primary200: #90caf9; +$primary800: #1565c0; + +// secondary +$secondaryLight: #ede7f6; +$secondaryMain: #673ab7; +$secondaryDark: #5e35b1; +$secondary200: #b39ddb; +$secondary800: #4527a0; + +// success Colors +$successLight: #b9f6ca; +$success200: #69f0ae; +$successMain: #00e676; +$successDark: #00c853; + +// error +$errorLight: #ef9a9a; +$errorMain: #f44336; +$errorDark: #c62828; + +// orange +$orangeLight: #fbe9e7; +$orangeMain: #ffab91; +$orangeDark: #d84315; + +// warning +$warningLight: #fff8e1; +$warningMain: #ffe57f; +$warningDark: #ffc107; + +// grey +$grey50: #f8fafc; +$grey100: #eef2f6; +$grey200: #e3e8ef; +$grey300: #cdd5df; +$grey500: #697586; +$grey600: #4b5565; +$grey700: #364152; +$grey900: #121926; + +// ==============================|| DARK THEME VARIANTS ||============================== // + +// paper & background +$darkBackground: #1a223f; // level 3 +$darkPaper: #111936; // level 4 + +// dark 800 & 900 +$darkLevel1: #29314f; // level 1 +$darkLevel2: #212946; // level 2 + +// primary dark +$darkPrimaryLight: #eef2f6; +$darkPrimaryMain: #2196f3; +$darkPrimaryDark: #1e88e5; +$darkPrimary200: #90caf9; +$darkPrimary800: #1565c0; + +// secondary dark +$darkSecondaryLight: #d1c4e9; +$darkSecondaryMain: #7c4dff; +$darkSecondaryDark: #651fff; +$darkSecondary200: #b39ddb; +$darkSecondary800: #6200ea; + +// text variants +$darkTextTitle: #d7dcec; +$darkTextPrimary: #bdc8f0; +$darkTextSecondary: #8492c4; + +// ==============================|| JAVASCRIPT ||============================== // + +:export { + // paper & background + paper: $paper; + + // primary + primaryLight: $primaryLight; + primary200: $primary200; + primaryMain: $primaryMain; + primaryDark: $primaryDark; + primary800: $primary800; + + // secondary + secondaryLight: $secondaryLight; + secondary200: $secondary200; + secondaryMain: $secondaryMain; + secondaryDark: $secondaryDark; + secondary800: $secondary800; + + // success + successLight: $successLight; + success200: $success200; + successMain: $successMain; + successDark: $successDark; + + // error + errorLight: $errorLight; + errorMain: $errorMain; + errorDark: $errorDark; + + // orange + orangeLight: $orangeLight; + orangeMain: $orangeMain; + orangeDark: $orangeDark; + + // warning + warningLight: $warningLight; + warningMain: $warningMain; + warningDark: $warningDark; + + // grey + grey50: $grey50; + grey100: $grey100; + grey200: $grey200; + grey300: $grey300; + grey500: $grey500; + grey600: $grey600; + grey700: $grey700; + grey900: $grey900; + + // ==============================|| DARK THEME VARIANTS ||============================== // + + // paper & background + darkPaper: $darkPaper; + darkBackground: $darkBackground; + + // dark 800 & 900 + darkLevel1: $darkLevel1; + darkLevel2: $darkLevel2; + + // text variants + darkTextTitle: $darkTextTitle; + darkTextPrimary: $darkTextPrimary; + darkTextSecondary: $darkTextSecondary; + + // primary dark + darkPrimaryLight: $darkPrimaryLight; + darkPrimaryMain: $darkPrimaryMain; + darkPrimaryDark: $darkPrimaryDark; + darkPrimary200: $darkPrimary200; + darkPrimary800: $darkPrimary800; + + // secondary dark + darkSecondaryLight: $darkSecondaryLight; + darkSecondaryMain: $darkSecondaryMain; + darkSecondaryDark: $darkSecondaryDark; + darkSecondary200: $darkSecondary200; + darkSecondary800: $darkSecondary800; +} diff --git a/web/berry/src/assets/scss/style.scss b/web/berry/src/assets/scss/style.scss new file mode 100644 index 00000000..17d566e6 --- /dev/null +++ b/web/berry/src/assets/scss/style.scss @@ -0,0 +1,128 @@ +// color variants +@import 'themes-vars.module.scss'; + +// third-party +@import '~react-perfect-scrollbar/dist/css/styles.css'; + +// ==============================|| LIGHT BOX ||============================== // +.fullscreen .react-images__blanket { + z-index: 1200; +} + +// ==============================|| APEXCHART ||============================== // + +.apexcharts-legend-series .apexcharts-legend-marker { + margin-right: 8px; +} + +// ==============================|| PERFECT SCROLLBAR ||============================== // + +.scrollbar-container { + .ps__rail-y { + &:hover > .ps__thumb-y, + &:focus > .ps__thumb-y, + &.ps--clicking .ps__thumb-y { + background-color: $grey500; + width: 5px; + } + } + .ps__thumb-y { + background-color: $grey500; + border-radius: 6px; + width: 5px; + right: 0; + } +} + +.scrollbar-container.ps, +.scrollbar-container > .ps { + &.ps--active-y > .ps__rail-y { + width: 5px; + background-color: transparent !important; + z-index: 999; + &:hover, + &.ps--clicking { + width: 5px; + background-color: transparent; + } + } + &.ps--scrolling-y > .ps__rail-y, + &.ps--scrolling-x > .ps__rail-x { + opacity: 0.4; + background-color: transparent; + } +} + +// ==============================|| ANIMATION KEYFRAMES ||============================== // + +@keyframes wings { + 50% { + transform: translateY(-40px); + } + 100% { + transform: translateY(0px); + } +} + +@keyframes blink { + 50% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +@keyframes bounce { + 0%, + 20%, + 53%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transform: translateZ(0); + } + 40%, + 43% { + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + transform: translate3d(0, -5px, 0); + } + 70% { + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + transform: translate3d(0, -7px, 0); + } + 80% { + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transform: translateZ(0); + } + 90% { + transform: translate3d(0, -2px, 0); + } +} + +@keyframes slideY { + 0%, + 50%, + 100% { + transform: translateY(0px); + } + 25% { + transform: translateY(-10px); + } + 75% { + transform: translateY(10px); + } +} + +@keyframes slideX { + 0%, + 50%, + 100% { + transform: translateX(0px); + } + 25% { + transform: translateX(-10px); + } + 75% { + transform: translateX(10px); + } +} diff --git a/web/berry/src/config.js b/web/berry/src/config.js new file mode 100644 index 00000000..eeeda99a --- /dev/null +++ b/web/berry/src/config.js @@ -0,0 +1,29 @@ +const config = { + // basename: only at build time to set, and Don't add '/' at end off BASENAME for breadcrumbs, also Don't put only '/' use blank('') instead, + // like '/berry-material-react/react/default' + basename: '/', + defaultPath: '/panel/dashboard', + fontFamily: `'Roboto', sans-serif, Helvetica, Arial, sans-serif`, + borderRadius: 12, + siteInfo: { + chat_link: '', + display_in_currency: true, + email_verification: false, + footer_html: '', + github_client_id: '', + github_oauth: false, + logo: '', + quota_per_unit: 500000, + server_address: '', + start_time: 0, + system_name: 'One API', + top_up_link: '', + turnstile_check: false, + turnstile_site_key: '', + version: '', + wechat_login: false, + wechat_qrcode: '' + } +}; + +export default config; diff --git a/web/berry/src/constants/ChannelConstants.js b/web/berry/src/constants/ChannelConstants.js new file mode 100644 index 00000000..3ce27838 --- /dev/null +++ b/web/berry/src/constants/ChannelConstants.js @@ -0,0 +1,146 @@ +export const CHANNEL_OPTIONS = { + 1: { + key: 1, + text: 'OpenAI', + value: 1, + color: 'primary' + }, + 14: { + key: 14, + text: 'Anthropic Claude', + value: 14, + color: 'info' + }, + 3: { + key: 3, + text: 'Azure OpenAI', + value: 3, + color: 'orange' + }, + 11: { + key: 11, + text: 'Google PaLM2', + value: 11, + color: 'orange' + }, + 24: { + key: 24, + text: 'Google Gemini', + value: 24, + color: 'orange' + }, + 15: { + key: 15, + text: '百度文心千帆', + value: 15, + color: 'default' + }, + 17: { + key: 17, + text: '阿里通义千问', + value: 17, + color: 'default' + }, + 18: { + key: 18, + text: '讯飞星火认知', + value: 18, + color: 'default' + }, + 16: { + key: 16, + text: '智谱 ChatGLM', + value: 16, + color: 'default' + }, + 19: { + key: 19, + text: '360 智脑', + value: 19, + color: 'default' + }, + 23: { + key: 23, + text: '腾讯混元', + value: 23, + color: 'default' + }, + 8: { + key: 8, + text: '自定义渠道', + value: 8, + color: 'primary' + }, + 22: { + key: 22, + text: '知识库:FastGPT', + value: 22, + color: 'default' + }, + 21: { + key: 21, + text: '知识库:AI Proxy', + value: 21, + color: 'purple' + }, + 20: { + key: 20, + text: '代理:OpenRouter', + value: 20, + color: 'primary' + }, + 2: { + key: 2, + text: '代理:API2D', + value: 2, + color: 'primary' + }, + 5: { + key: 5, + text: '代理:OpenAI-SB', + value: 5, + color: 'primary' + }, + 7: { + key: 7, + text: '代理:OhMyGPT', + value: 7, + color: 'primary' + }, + 10: { + key: 10, + text: '代理:AI Proxy', + value: 10, + color: 'primary' + }, + 4: { + key: 4, + text: '代理:CloseAI', + value: 4, + color: 'primary' + }, + 6: { + key: 6, + text: '代理:OpenAI Max', + value: 6, + color: 'primary' + }, + 9: { + key: 9, + text: '代理:AI.LS', + value: 9, + color: 'primary' + }, + 12: { + key: 12, + text: '代理:API2GPT', + value: 12, + color: 'primary' + }, + 13: { + key: 13, + text: '代理:AIGC2D', + value: 13, + color: 'primary' + } +}; diff --git a/web/berry/src/constants/CommonConstants.js b/web/berry/src/constants/CommonConstants.js new file mode 100644 index 00000000..1a37d5f6 --- /dev/null +++ b/web/berry/src/constants/CommonConstants.js @@ -0,0 +1 @@ +export const ITEMS_PER_PAGE = 10; // this value must keep same as the one defined in backend! diff --git a/web/berry/src/constants/SnackbarConstants.js b/web/berry/src/constants/SnackbarConstants.js new file mode 100644 index 00000000..a05c6652 --- /dev/null +++ b/web/berry/src/constants/SnackbarConstants.js @@ -0,0 +1,27 @@ +export const snackbarConstants = { + Common: { + ERROR: { + variant: 'error', + autoHideDuration: 5000 + }, + WARNING: { + variant: 'warning', + autoHideDuration: 10000 + }, + SUCCESS: { + variant: 'success', + autoHideDuration: 1500 + }, + INFO: { + variant: 'info', + autoHideDuration: 3000 + }, + NOTICE: { + variant: 'info', + autoHideDuration: 20000 + } + }, + Mobile: { + anchorOrigin: { vertical: 'bottom', horizontal: 'center' } + } +}; diff --git a/web/berry/src/constants/index.js b/web/berry/src/constants/index.js new file mode 100644 index 00000000..716ef6aa --- /dev/null +++ b/web/berry/src/constants/index.js @@ -0,0 +1,3 @@ +export * from './SnackbarConstants'; +export * from './CommonConstants'; +export * from './ChannelConstants'; diff --git a/web/berry/src/contexts/StatusContext.js b/web/berry/src/contexts/StatusContext.js new file mode 100644 index 00000000..ed9f1621 --- /dev/null +++ b/web/berry/src/contexts/StatusContext.js @@ -0,0 +1,70 @@ +import { useEffect, useCallback, createContext } from "react"; +import { API } from "utils/api"; +import { showNotice, showError } from "utils/common"; +import { SET_SITE_INFO } from "store/actions"; +import { useDispatch } from "react-redux"; + +export const LoadStatusContext = createContext(); + +// eslint-disable-next-line +const StatusProvider = ({ children }) => { + const dispatch = useDispatch(); + + const loadStatus = useCallback(async () => { + const res = await API.get("/api/status"); + const { success, data } = res.data; + let system_name = ""; + if (success) { + if (!data.chat_link) { + delete data.chat_link; + } + localStorage.setItem("siteInfo", JSON.stringify(data)); + localStorage.setItem("quota_per_unit", data.quota_per_unit); + localStorage.setItem("display_in_currency", data.display_in_currency); + dispatch({ type: SET_SITE_INFO, payload: data }); + if ( + data.version !== process.env.REACT_APP_VERSION && + data.version !== "v0.0.0" && + data.version !== "" && + process.env.REACT_APP_VERSION !== "" + ) { + showNotice( + `新版本可用:${data.version},请使用快捷键 Shift + F5 刷新页面` + ); + } + if (data.system_name) { + system_name = data.system_name; + } + } else { + const backupSiteInfo = localStorage.getItem("siteInfo"); + if (backupSiteInfo) { + const data = JSON.parse(backupSiteInfo); + if (data.system_name) { + system_name = data.system_name; + } + dispatch({ + type: SET_SITE_INFO, + payload: data, + }); + } + showError("无法正常连接至服务器!"); + } + + if (system_name) { + document.title = system_name; + } + }, [dispatch]); + + useEffect(() => { + loadStatus().then(); + }, [loadStatus]); + + return ( + + {" "} + {children}{" "} + + ); +}; + +export default StatusProvider; diff --git a/web/berry/src/contexts/UserContext.js b/web/berry/src/contexts/UserContext.js new file mode 100644 index 00000000..491da9d9 --- /dev/null +++ b/web/berry/src/contexts/UserContext.js @@ -0,0 +1,29 @@ +// contexts/User/index.jsx +import React, { useEffect, useCallback, createContext, useState } from 'react'; +import { LOGIN } from 'store/actions'; +import { useDispatch } from 'react-redux'; + +export const UserContext = createContext(); + +// eslint-disable-next-line +const UserProvider = ({ children }) => { + const dispatch = useDispatch(); + const [isUserLoaded, setIsUserLoaded] = useState(false); + + const loadUser = useCallback(() => { + let user = localStorage.getItem('user'); + if (user) { + let data = JSON.parse(user); + dispatch({ type: LOGIN, payload: data }); + } + setIsUserLoaded(true); + }, [dispatch]); + + useEffect(() => { + loadUser(); + }, [loadUser]); + + return {children} ; +}; + +export default UserProvider; diff --git a/web/berry/src/hooks/useAuth.js b/web/berry/src/hooks/useAuth.js new file mode 100644 index 00000000..fa7cb934 --- /dev/null +++ b/web/berry/src/hooks/useAuth.js @@ -0,0 +1,13 @@ +import { isAdmin } from 'utils/common'; +import { useNavigate } from 'react-router-dom'; +const navigate = useNavigate(); + +const useAuth = () => { + const userIsAdmin = isAdmin(); + + if (!userIsAdmin) { + navigate('/panel/404'); + } +}; + +export default useAuth; diff --git a/web/berry/src/hooks/useLogin.js b/web/berry/src/hooks/useLogin.js new file mode 100644 index 00000000..53626577 --- /dev/null +++ b/web/berry/src/hooks/useLogin.js @@ -0,0 +1,78 @@ +import { API } from 'utils/api'; +import { useDispatch } from 'react-redux'; +import { LOGIN } from 'store/actions'; +import { useNavigate } from 'react-router'; +import { showSuccess } from 'utils/common'; + +const useLogin = () => { + const dispatch = useDispatch(); + const navigate = useNavigate(); + const login = async (username, password) => { + try { + const res = await API.post(`/api/user/login`, { + username, + password + }); + const { success, message, data } = res.data; + if (success) { + localStorage.setItem('user', JSON.stringify(data)); + dispatch({ type: LOGIN, payload: data }); + navigate('/panel'); + } + return { success, message }; + } catch (err) { + // 请求失败,设置错误信息 + return { success: false, message: '' }; + } + }; + + const githubLogin = async (code, state) => { + try { + const res = await API.get(`/api/oauth/github?code=${code}&state=${state}`); + const { success, message, data } = res.data; + if (success) { + if (message === 'bind') { + showSuccess('绑定成功!'); + navigate('/panel'); + } else { + dispatch({ type: LOGIN, payload: data }); + localStorage.setItem('user', JSON.stringify(data)); + showSuccess('登录成功!'); + navigate('/panel'); + } + } + return { success, message }; + } catch (err) { + // 请求失败,设置错误信息 + return { success: false, message: '' }; + } + }; + + const wechatLogin = async (code) => { + try { + const res = await API.get(`/api/oauth/wechat?code=${code}`); + const { success, message, data } = res.data; + if (success) { + dispatch({ type: LOGIN, payload: data }); + localStorage.setItem('user', JSON.stringify(data)); + showSuccess('登录成功!'); + navigate('/panel'); + } + return { success, message }; + } catch (err) { + // 请求失败,设置错误信息 + return { success: false, message: '' }; + } + }; + + const logout = async () => { + await API.get('/api/user/logout'); + localStorage.removeItem('user'); + dispatch({ type: LOGIN, payload: null }); + navigate('/'); + }; + + return { login, logout, githubLogin, wechatLogin }; +}; + +export default useLogin; diff --git a/web/berry/src/hooks/useRegister.js b/web/berry/src/hooks/useRegister.js new file mode 100644 index 00000000..d07dc43a --- /dev/null +++ b/web/berry/src/hooks/useRegister.js @@ -0,0 +1,39 @@ +import { API } from 'utils/api'; +import { useNavigate } from 'react-router'; +import { showSuccess } from 'utils/common'; + +const useRegister = () => { + const navigate = useNavigate(); + const register = async (input, turnstile) => { + try { + const res = await API.post(`/api/user/register?turnstile=${turnstile}`, input); + const { success, message } = res.data; + if (success) { + showSuccess('注册成功!'); + navigate('/login'); + } + return { success, message }; + } catch (err) { + // 请求失败,设置错误信息 + return { success: false, message: '' }; + } + }; + + const sendVerificationCode = async (email, turnstile) => { + try { + const res = await API.get(`/api/verification?email=${email}&turnstile=${turnstile}`); + const { success, message } = res.data; + if (success) { + showSuccess('验证码发送成功,请检查你的邮箱!'); + } + return { success, message }; + } catch (err) { + // 请求失败,设置错误信息 + return { success: false, message: '' }; + } + }; + + return { register, sendVerificationCode }; +}; + +export default useRegister; diff --git a/web/berry/src/hooks/useScriptRef.js b/web/berry/src/hooks/useScriptRef.js new file mode 100644 index 00000000..bd300cbb --- /dev/null +++ b/web/berry/src/hooks/useScriptRef.js @@ -0,0 +1,18 @@ +import { useEffect, useRef } from 'react'; + +// ==============================|| ELEMENT REFERENCE HOOKS ||============================== // + +const useScriptRef = () => { + const scripted = useRef(true); + + useEffect( + () => () => { + scripted.current = true; + }, + [] + ); + + return scripted; +}; + +export default useScriptRef; diff --git a/web/berry/src/index.js b/web/berry/src/index.js new file mode 100644 index 00000000..d1411be3 --- /dev/null +++ b/web/berry/src/index.js @@ -0,0 +1,31 @@ +import { createRoot } from 'react-dom/client'; + +// third party +import { BrowserRouter } from 'react-router-dom'; +import { Provider } from 'react-redux'; + +// project imports +import * as serviceWorker from 'serviceWorker'; +import App from 'App'; +import { store } from 'store'; + +// style + assets +import 'assets/scss/style.scss'; +import config from './config'; + +// ==============================|| REACT DOM RENDER ||============================== // + +const container = document.getElementById('root'); +const root = createRoot(container); // createRoot(container!) if you use TypeScript +root.render( + + + + + +); + +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: https://bit.ly/CRA-PWA +serviceWorker.register(); diff --git a/web/berry/src/layout/MainLayout/Header/ProfileSection/index.js b/web/berry/src/layout/MainLayout/Header/ProfileSection/index.js new file mode 100644 index 00000000..3e351254 --- /dev/null +++ b/web/berry/src/layout/MainLayout/Header/ProfileSection/index.js @@ -0,0 +1,173 @@ +import { useState, useRef, useEffect } from 'react'; + +import { useSelector } from 'react-redux'; +import { useNavigate } from 'react-router-dom'; +// material-ui +import { useTheme } from '@mui/material/styles'; +import { + Avatar, + Chip, + ClickAwayListener, + List, + ListItemButton, + ListItemIcon, + ListItemText, + Paper, + Popper, + Typography +} from '@mui/material'; + +// project imports +import MainCard from 'ui-component/cards/MainCard'; +import Transitions from 'ui-component/extended/Transitions'; +import User1 from 'assets/images/users/user-round.svg'; +import useLogin from 'hooks/useLogin'; + +// assets +import { IconLogout, IconSettings, IconUserScan } from '@tabler/icons-react'; + +// ==============================|| PROFILE MENU ||============================== // + +const ProfileSection = () => { + const theme = useTheme(); + const navigate = useNavigate(); + const customization = useSelector((state) => state.customization); + const { logout } = useLogin(); + + const [open, setOpen] = useState(false); + /** + * anchorRef is used on different componets and specifying one type leads to other components throwing an error + * */ + const anchorRef = useRef(null); + const handleLogout = async () => { + logout(); + }; + + const handleClose = (event) => { + if (anchorRef.current && anchorRef.current.contains(event.target)) { + return; + } + setOpen(false); + }; + + const handleToggle = () => { + setOpen((prevOpen) => !prevOpen); + }; + + const prevOpen = useRef(open); + useEffect(() => { + if (prevOpen.current === true && open === false) { + anchorRef.current.focus(); + } + + prevOpen.current = open; + }, [open]); + + return ( + <> + + } + label={} + variant="outlined" + ref={anchorRef} + aria-controls={open ? 'menu-list-grow' : undefined} + aria-haspopup="true" + onClick={handleToggle} + color="primary" + /> + + {({ TransitionProps }) => ( + + + + + + navigate('/panel/profile')}> + + + + 设置} /> + + + + + + + 登出} /> + + + + + + + )} + + + ); +}; + +export default ProfileSection; diff --git a/web/berry/src/layout/MainLayout/Header/index.js b/web/berry/src/layout/MainLayout/Header/index.js new file mode 100644 index 00000000..51d40c75 --- /dev/null +++ b/web/berry/src/layout/MainLayout/Header/index.js @@ -0,0 +1,68 @@ +import PropTypes from 'prop-types'; + +// material-ui +import { useTheme } from '@mui/material/styles'; +import { Avatar, Box, ButtonBase } from '@mui/material'; + +// project imports +import LogoSection from '../LogoSection'; +import ProfileSection from './ProfileSection'; + +// assets +import { IconMenu2 } from '@tabler/icons-react'; + +// ==============================|| MAIN NAVBAR / HEADER ||============================== // + +const Header = ({ handleLeftDrawerToggle }) => { + const theme = useTheme(); + + return ( + <> + {/* logo & toggler button */} + + + + + + + + + + + + + + + + + ); +}; + +Header.propTypes = { + handleLeftDrawerToggle: PropTypes.func +}; + +export default Header; diff --git a/web/berry/src/layout/MainLayout/LogoSection/index.js b/web/berry/src/layout/MainLayout/LogoSection/index.js new file mode 100644 index 00000000..1d70e48c --- /dev/null +++ b/web/berry/src/layout/MainLayout/LogoSection/index.js @@ -0,0 +1,23 @@ +import { Link } from 'react-router-dom'; +import { useDispatch, useSelector } from 'react-redux'; + +// material-ui +import { ButtonBase } from '@mui/material'; + +// project imports +import Logo from 'ui-component/Logo'; +import { MENU_OPEN } from 'store/actions'; + +// ==============================|| MAIN LOGO ||============================== // + +const LogoSection = () => { + const defaultId = useSelector((state) => state.customization.defaultId); + const dispatch = useDispatch(); + return ( + dispatch({ type: MENU_OPEN, id: defaultId })} component={Link} to="/"> + + + ); +}; + +export default LogoSection; diff --git a/web/berry/src/layout/MainLayout/Sidebar/MenuCard/index.js b/web/berry/src/layout/MainLayout/Sidebar/MenuCard/index.js new file mode 100644 index 00000000..16b13231 --- /dev/null +++ b/web/berry/src/layout/MainLayout/Sidebar/MenuCard/index.js @@ -0,0 +1,130 @@ +// import PropTypes from 'prop-types'; +import { useSelector } from 'react-redux'; + +// material-ui +import { styled, useTheme } from '@mui/material/styles'; +import { + Avatar, + Card, + CardContent, + // Grid, + // LinearProgress, + List, + ListItem, + ListItemAvatar, + ListItemText, + Typography + // linearProgressClasses +} from '@mui/material'; +import User1 from 'assets/images/users/user-round.svg'; +import { useNavigate } from 'react-router-dom'; + +// assets +// import TableChartOutlinedIcon from '@mui/icons-material/TableChartOutlined'; + +// styles +// const BorderLinearProgress = styled(LinearProgress)(({ theme }) => ({ +// height: 10, +// borderRadius: 30, +// [`&.${linearProgressClasses.colorPrimary}`]: { +// backgroundColor: '#fff' +// }, +// [`& .${linearProgressClasses.bar}`]: { +// borderRadius: 5, +// backgroundColor: theme.palette.primary.main +// } +// })); + +const CardStyle = styled(Card)(({ theme }) => ({ + background: theme.palette.primary.light, + marginBottom: '22px', + overflow: 'hidden', + position: 'relative', + '&:after': { + content: '""', + position: 'absolute', + width: '157px', + height: '157px', + background: theme.palette.primary[200], + borderRadius: '50%', + top: '-105px', + right: '-96px' + } +})); + +// ==============================|| PROGRESS BAR WITH LABEL ||============================== // + +// function LinearProgressWithLabel({ value, ...others }) { +// const theme = useTheme(); + +// return ( +// +// +// +// +// +// Progress +// +// +// +// {`${Math.round(value)}%`} +// +// +// +// +// +// +// +// ); +// } + +// LinearProgressWithLabel.propTypes = { +// value: PropTypes.number +// }; + +// ==============================|| SIDEBAR MENU Card ||============================== // + +const MenuCard = () => { + const theme = useTheme(); + const account = useSelector((state) => state.account); + const navigate = useNavigate(); + + return ( + + + + + + navigate('/panel/profile')} + > + + + {account.user?.username} + + } + secondary={ 欢迎回来 } + /> + + + {/* */} + + + ); +}; + +export default MenuCard; diff --git a/web/berry/src/layout/MainLayout/Sidebar/MenuList/NavCollapse/index.js b/web/berry/src/layout/MainLayout/Sidebar/MenuList/NavCollapse/index.js new file mode 100644 index 00000000..0632d56f --- /dev/null +++ b/web/berry/src/layout/MainLayout/Sidebar/MenuList/NavCollapse/index.js @@ -0,0 +1,158 @@ +import PropTypes from 'prop-types'; +import { useEffect, useState } from 'react'; +import { useSelector } from 'react-redux'; +import { useLocation, useNavigate } from 'react-router'; + +// material-ui +import { useTheme } from '@mui/material/styles'; +import { Collapse, List, ListItemButton, ListItemIcon, ListItemText, Typography } from '@mui/material'; + +// project imports +import NavItem from '../NavItem'; + +// assets +import FiberManualRecordIcon from '@mui/icons-material/FiberManualRecord'; +import { IconChevronDown, IconChevronUp } from '@tabler/icons-react'; + +// ==============================|| SIDEBAR MENU LIST COLLAPSE ITEMS ||============================== // + +const NavCollapse = ({ menu, level }) => { + const theme = useTheme(); + const customization = useSelector((state) => state.customization); + const navigate = useNavigate(); + + const [open, setOpen] = useState(false); + const [selected, setSelected] = useState(null); + + const handleClick = () => { + setOpen(!open); + setSelected(!selected ? menu.id : null); + if (menu?.id !== 'authentication') { + navigate(menu.children[0]?.url); + } + }; + + const { pathname } = useLocation(); + const checkOpenForParent = (child, id) => { + child.forEach((item) => { + if (item.url === pathname) { + setOpen(true); + setSelected(id); + } + }); + }; + + // menu collapse for sub-levels + useEffect(() => { + setOpen(false); + setSelected(null); + if (menu.children) { + menu.children.forEach((item) => { + if (item.children?.length) { + checkOpenForParent(item.children, menu.id); + } + if (item.url === pathname) { + setSelected(menu.id); + setOpen(true); + } + }); + } + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [pathname, menu.children]); + + // menu collapse & item + const menus = menu.children?.map((item) => { + switch (item.type) { + case 'collapse': + return ; + case 'item': + return ; + default: + return ( + + Menu Items Error + + ); + } + }); + + const Icon = menu.icon; + const menuIcon = menu.icon ? ( + + ) : ( + 0 ? 'inherit' : 'medium'} + /> + ); + + return ( + <> + 1 ? 'transparent !important' : 'inherit', + py: level > 1 ? 1 : 1.25, + pl: `${level * 24}px` + }} + selected={selected === menu.id} + onClick={handleClick} + > + {menuIcon} + + {menu.title} + + } + secondary={ + menu.caption && ( + + {menu.caption} + + ) + } + /> + {open ? ( + + ) : ( + + )} + + + + {menus} + + + + ); +}; + +NavCollapse.propTypes = { + menu: PropTypes.object, + level: PropTypes.number +}; + +export default NavCollapse; diff --git a/web/berry/src/layout/MainLayout/Sidebar/MenuList/NavGroup/index.js b/web/berry/src/layout/MainLayout/Sidebar/MenuList/NavGroup/index.js new file mode 100644 index 00000000..b6479bc2 --- /dev/null +++ b/web/berry/src/layout/MainLayout/Sidebar/MenuList/NavGroup/index.js @@ -0,0 +1,61 @@ +import PropTypes from 'prop-types'; + +// material-ui +import { useTheme } from '@mui/material/styles'; +import { Divider, List, Typography } from '@mui/material'; + +// project imports +import NavItem from '../NavItem'; +import NavCollapse from '../NavCollapse'; + +// ==============================|| SIDEBAR MENU LIST GROUP ||============================== // + +const NavGroup = ({ item }) => { + const theme = useTheme(); + + // menu list collapse & items + const items = item.children?.map((menu) => { + switch (menu.type) { + case 'collapse': + return ; + case 'item': + return ; + default: + return ( + + Menu Items Error + + ); + } + }); + + return ( + <> + + {item.title} + {item.caption && ( + + {item.caption} + + )} + + ) + } + > + {items} + + + {/* group divider */} + + + ); +}; + +NavGroup.propTypes = { + item: PropTypes.object +}; + +export default NavGroup; diff --git a/web/berry/src/layout/MainLayout/Sidebar/MenuList/NavItem/index.js b/web/berry/src/layout/MainLayout/Sidebar/MenuList/NavItem/index.js new file mode 100644 index 00000000..ddce9cf4 --- /dev/null +++ b/web/berry/src/layout/MainLayout/Sidebar/MenuList/NavItem/index.js @@ -0,0 +1,115 @@ +import PropTypes from 'prop-types'; +import { forwardRef, useEffect } from 'react'; +import { Link, useLocation } from 'react-router-dom'; +import { useDispatch, useSelector } from 'react-redux'; + +// material-ui +import { useTheme } from '@mui/material/styles'; +import { Avatar, Chip, ListItemButton, ListItemIcon, ListItemText, Typography, useMediaQuery } from '@mui/material'; + +// project imports +import { MENU_OPEN, SET_MENU } from 'store/actions'; + +// assets +import FiberManualRecordIcon from '@mui/icons-material/FiberManualRecord'; + +// ==============================|| SIDEBAR MENU LIST ITEMS ||============================== // + +const NavItem = ({ item, level }) => { + const theme = useTheme(); + const dispatch = useDispatch(); + const { pathname } = useLocation(); + const customization = useSelector((state) => state.customization); + const matchesSM = useMediaQuery(theme.breakpoints.down('lg')); + + const Icon = item.icon; + const itemIcon = item?.icon ? ( + + ) : ( + id === item?.id) > -1 ? 8 : 6, + height: customization.isOpen.findIndex((id) => id === item?.id) > -1 ? 8 : 6 + }} + fontSize={level > 0 ? 'inherit' : 'medium'} + /> + ); + + let itemTarget = '_self'; + if (item.target) { + itemTarget = '_blank'; + } + + let listItemProps = { + component: forwardRef((props, ref) => ) + }; + if (item?.external) { + listItemProps = { component: 'a', href: item.url, target: itemTarget }; + } + + const itemHandler = (id) => { + dispatch({ type: MENU_OPEN, id }); + if (matchesSM) dispatch({ type: SET_MENU, opened: false }); + }; + + // active menu item on page load + useEffect(() => { + const currentIndex = document.location.pathname + .toString() + .split('/') + .findIndex((id) => id === item.id); + if (currentIndex > -1) { + dispatch({ type: MENU_OPEN, id: item.id }); + } + // eslint-disable-next-line + }, [pathname]); + + return ( + 1 ? 'transparent !important' : 'inherit', + py: level > 1 ? 1 : 1.25, + pl: `${level * 24}px` + }} + selected={customization.isOpen.findIndex((id) => id === item.id) > -1} + onClick={() => itemHandler(item.id)} + > + {itemIcon} + id === item.id) > -1 ? 'h5' : 'body1'} color="inherit"> + {item.title} + + } + secondary={ + item.caption && ( + + {item.caption} + + ) + } + /> + {item.chip && ( + {item.chip.avatar}} + /> + )} + + ); +}; + +NavItem.propTypes = { + item: PropTypes.object, + level: PropTypes.number +}; + +export default NavItem; diff --git a/web/berry/src/layout/MainLayout/Sidebar/MenuList/index.js b/web/berry/src/layout/MainLayout/Sidebar/MenuList/index.js new file mode 100644 index 00000000..4872057a --- /dev/null +++ b/web/berry/src/layout/MainLayout/Sidebar/MenuList/index.js @@ -0,0 +1,36 @@ +// material-ui +import { Typography } from '@mui/material'; + +// project imports +import NavGroup from './NavGroup'; +import menuItem from 'menu-items'; +import { isAdmin } from 'utils/common'; + +// ==============================|| SIDEBAR MENU LIST ||============================== // +const MenuList = () => { + const userIsAdmin = isAdmin(); + + return ( + <> + {menuItem.items.map((item) => { + if (item.type !== 'group') { + return ( + + Menu Items Error + + ); + } + + const filteredChildren = item.children.filter((child) => !child.isAdmin || userIsAdmin); + + if (filteredChildren.length === 0) { + return null; + } + + return ; + })} + + ); +}; + +export default MenuList; diff --git a/web/berry/src/layout/MainLayout/Sidebar/index.js b/web/berry/src/layout/MainLayout/Sidebar/index.js new file mode 100644 index 00000000..e3c6d12d --- /dev/null +++ b/web/berry/src/layout/MainLayout/Sidebar/index.js @@ -0,0 +1,94 @@ +import PropTypes from 'prop-types'; + +// material-ui +import { useTheme } from '@mui/material/styles'; +import { Box, Chip, Drawer, Stack, useMediaQuery } from '@mui/material'; + +// third-party +import PerfectScrollbar from 'react-perfect-scrollbar'; +import { BrowserView, MobileView } from 'react-device-detect'; + +// project imports +import MenuList from './MenuList'; +import LogoSection from '../LogoSection'; +import MenuCard from './MenuCard'; +import { drawerWidth } from 'store/constant'; + +// ==============================|| SIDEBAR DRAWER ||============================== // + +const Sidebar = ({ drawerOpen, drawerToggle, window }) => { + const theme = useTheme(); + const matchUpMd = useMediaQuery(theme.breakpoints.up('md')); + + const drawer = ( + <> + + + + + + + + + + + + + + + + + + + + + + + + + ); + + const container = window !== undefined ? () => window.document.body : undefined; + + return ( + + + {drawer} + + + ); +}; + +Sidebar.propTypes = { + drawerOpen: PropTypes.bool, + drawerToggle: PropTypes.func, + window: PropTypes.object +}; + +export default Sidebar; diff --git a/web/berry/src/layout/MainLayout/index.js b/web/berry/src/layout/MainLayout/index.js new file mode 100644 index 00000000..973a167b --- /dev/null +++ b/web/berry/src/layout/MainLayout/index.js @@ -0,0 +1,103 @@ +import { useDispatch, useSelector } from 'react-redux'; +import { Outlet } from 'react-router-dom'; +import AuthGuard from 'utils/route-guard/AuthGuard'; + +// material-ui +import { styled, useTheme } from '@mui/material/styles'; +import { AppBar, Box, CssBaseline, Toolbar, useMediaQuery } from '@mui/material'; +import AdminContainer from 'ui-component/AdminContainer'; + +// project imports +import Breadcrumbs from 'ui-component/extended/Breadcrumbs'; +import Header from './Header'; +import Sidebar from './Sidebar'; +import navigation from 'menu-items'; +import { drawerWidth } from 'store/constant'; +import { SET_MENU } from 'store/actions'; + +// assets +import { IconChevronRight } from '@tabler/icons-react'; + +// styles +const Main = styled('main', { shouldForwardProp: (prop) => prop !== 'open' })(({ theme, open }) => ({ + ...theme.typography.mainContent, + borderBottomLeftRadius: 0, + borderBottomRightRadius: 0, + transition: theme.transitions.create( + 'margin', + open + ? { + easing: theme.transitions.easing.easeOut, + duration: theme.transitions.duration.enteringScreen + } + : { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen + } + ), + [theme.breakpoints.up('md')]: { + marginLeft: open ? 0 : -(drawerWidth - 20), + width: `calc(100% - ${drawerWidth}px)` + }, + [theme.breakpoints.down('md')]: { + marginLeft: '20px', + width: `calc(100% - ${drawerWidth}px)`, + padding: '16px' + }, + [theme.breakpoints.down('sm')]: { + marginLeft: '10px', + width: `calc(100% - ${drawerWidth}px)`, + padding: '16px', + marginRight: '10px' + } +})); + +// ==============================|| MAIN LAYOUT ||============================== // + +const MainLayout = () => { + const theme = useTheme(); + const matchDownMd = useMediaQuery(theme.breakpoints.down('md')); + // Handle left drawer + const leftDrawerOpened = useSelector((state) => state.customization.opened); + const dispatch = useDispatch(); + const handleLeftDrawerToggle = () => { + dispatch({ type: SET_MENU, opened: !leftDrawerOpened }); + }; + + return ( + + + {/* header */} + + +

+ + + + {/* drawer */} + + + {/* main content */} +
+ {/* breadcrumb */} + + + + + + +
+ + ); +}; + +export default MainLayout; diff --git a/web/berry/src/layout/MinimalLayout/Header/index.js b/web/berry/src/layout/MinimalLayout/Header/index.js new file mode 100644 index 00000000..4f61da60 --- /dev/null +++ b/web/berry/src/layout/MinimalLayout/Header/index.js @@ -0,0 +1,75 @@ +// material-ui +import { useTheme } from "@mui/material/styles"; +import { Box, Button, Stack } from "@mui/material"; +import LogoSection from "layout/MainLayout/LogoSection"; +import { Link } from "react-router-dom"; +import { useLocation } from "react-router-dom"; +import { useSelector } from "react-redux"; + +// ==============================|| MAIN NAVBAR / HEADER ||============================== // + +const Header = () => { + const theme = useTheme(); + const { pathname } = useLocation(); + const account = useSelector((state) => state.account); + + return ( + <> + + + + + + + + + + + + {account.user ? ( + + ) : ( + + )} + + + ); +}; + +export default Header; diff --git a/web/berry/src/layout/MinimalLayout/index.js b/web/berry/src/layout/MinimalLayout/index.js new file mode 100644 index 00000000..084ee6ac --- /dev/null +++ b/web/berry/src/layout/MinimalLayout/index.js @@ -0,0 +1,39 @@ +import { Outlet } from 'react-router-dom'; +import { useTheme } from '@mui/material/styles'; +import { AppBar, Box, CssBaseline, Toolbar } from '@mui/material'; +import Header from './Header'; +import Footer from 'ui-component/Footer'; + +// ==============================|| MINIMAL LAYOUT ||============================== // + +const MinimalLayout = () => { + const theme = useTheme(); + + return ( + + + + +
+ + + + + + +