From 71e26ad722276656a33166691fe1343a850c0d28 Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Tue, 23 Jan 2024 11:32:35 +0800 Subject: [PATCH] feat: support buy link (#54) --- app/src/admin/api/info.ts | 12 ++++++++++- app/src/admin/api/system.ts | 2 ++ app/src/assets/admin/subscription.less | 2 ++ app/src/assets/main.less | 3 ++- app/src/components/Tips.tsx | 2 +- app/src/conf/env.ts | 11 ++++++++++ app/src/dialogs/QuotaDialog.tsx | 28 +++++++++++++++++++++++--- app/src/resources/i18n/cn.json | 3 +++ app/src/resources/i18n/en.json | 7 +++++-- app/src/resources/i18n/ja.json | 7 +++++-- app/src/resources/i18n/ru.json | 7 +++++-- app/src/routes/admin/System.tsx | 18 ++++++++++++----- channel/system.go | 3 +++ 13 files changed, 88 insertions(+), 17 deletions(-) diff --git a/app/src/admin/api/info.ts b/app/src/admin/api/info.ts index 58c4060..d3d49cd 100644 --- a/app/src/admin/api/info.ts +++ b/app/src/admin/api/info.ts @@ -4,6 +4,7 @@ import { setAppLogo, setAppName, setBlobEndpoint, + setBuyLink, setDocsUrl, } from "@/conf/env.ts"; @@ -13,6 +14,7 @@ export type SiteInfo = { docs: string; file: string; announcement: string; + buy_link: string; }; export async function getSiteInfo(): Promise { @@ -21,7 +23,14 @@ export async function getSiteInfo(): Promise { return response.data as SiteInfo; } catch (e) { console.warn(e); - return { title: "", logo: "", docs: "", file: "", announcement: "" }; + return { + title: "", + logo: "", + docs: "", + file: "", + announcement: "", + buy_link: "", + }; } } @@ -32,5 +41,6 @@ export function syncSiteInfo() { setDocsUrl(info.docs); setBlobEndpoint(info.file); setAnnouncement(info.announcement); + setBuyLink(info.buy_link); }); } diff --git a/app/src/admin/api/system.ts b/app/src/admin/api/system.ts index 70cb0cc..61e7e90 100644 --- a/app/src/admin/api/system.ts +++ b/app/src/admin/api/system.ts @@ -32,6 +32,7 @@ export type SearchState = { export type SiteState = { quota: number; + buy_link: string; announcement: string; }; @@ -104,6 +105,7 @@ export const initialSystemState: SystemProps = { }, site: { quota: 0, + buy_link: "", announcement: "", }, mail: { diff --git a/app/src/assets/admin/subscription.less b/app/src/assets/admin/subscription.less index e7ab79b..225980f 100644 --- a/app/src/assets/admin/subscription.less +++ b/app/src/assets/admin/subscription.less @@ -114,10 +114,12 @@ align-items: center; white-space: nowrap; margin-right: 0.5rem; + user-select: none; svg { display: inline-block; flex-shrink: 0; + transform: translateY(-2px); } } diff --git a/app/src/assets/main.less b/app/src/assets/main.less index 7f2551c..59aa0ae 100644 --- a/app/src/assets/main.less +++ b/app/src/assets/main.less @@ -91,7 +91,7 @@ strong { scrollbar-width: none; -webkit-overflow-scrolling: touch; touch-action: pan-y; - outline: 0; + outline: none; @media (max-width: 520px) { & { @@ -185,4 +185,5 @@ strong { margin-left: 0.2rem; scale: 0.9; color: hsl(var(--text-secondary)); + outline: none !important; } diff --git a/app/src/components/Tips.tsx b/app/src/components/Tips.tsx index 7634d69..7dbe230 100644 --- a/app/src/components/Tips.tsx +++ b/app/src/components/Tips.tsx @@ -45,7 +45,7 @@ function Tips({ content, children, className, hideTimeout }: TipsProps) { return ( - + diff --git a/app/src/conf/env.ts b/app/src/conf/env.ts index 7d3d50f..ac08447 100644 --- a/app/src/conf/env.ts +++ b/app/src/conf/env.ts @@ -18,6 +18,8 @@ export let docsEndpoint = localStorage.getItem("docs_url") || import.meta.env.VITE_DOCS_ENDPOINT || "https://docs.chatnio.net"; +export let buyLink = + localStorage.getItem("buy_link") || import.meta.env.VITE_BUY_LINK || ""; export const useDeeptrain = !!import.meta.env.VITE_USE_DEEPTRAIN; export const backendEndpoint = import.meta.env.VITE_BACKEND_ENDPOINT || "/api"; @@ -117,3 +119,12 @@ export function setAnnouncement(announcement: string): void { announcementEvent.emit(announcement); } + +export function setBuyLink(link: string): void { + /** + * set the buy link in localStorage + */ + link = link.trim() || ""; + setMemory("buy_link", link); + buyLink = link; +} diff --git a/app/src/dialogs/QuotaDialog.tsx b/app/src/dialogs/QuotaDialog.tsx index 89bc85c..9a6fa56 100644 --- a/app/src/dialogs/QuotaDialog.tsx +++ b/app/src/dialogs/QuotaDialog.tsx @@ -39,7 +39,12 @@ import { useToast } from "@/components/ui/use-toast.ts"; import { useEffectAsync } from "@/utils/hook.ts"; import { selectAuthenticated } from "@/store/auth.ts"; import { ToastAction } from "@/components/ui/toast.tsx"; -import { deeptrainEndpoint, docsEndpoint, useDeeptrain } from "@/conf/env.ts"; +import { + buyLink, + deeptrainEndpoint, + docsEndpoint, + useDeeptrain, +} from "@/conf/env.ts"; import { useRedeem } from "@/api/redeem.ts"; import { cn } from "@/components/ui/lib/utils.ts"; import { subscriptionDataSelector } from "@/store/globals.ts"; @@ -213,7 +218,7 @@ function QuotaDialog() { + )}