🎉 chore(init): project initialization

This commit is contained in:
web@ppanel
2024-11-14 01:22:43 +07:00
commit 829edfa824
479 changed files with 61413 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
import { env } from 'next-runtime-env';
export const locales = ['en-US', 'zh-CN'];
export const NEXT_PUBLIC_DEFAULT_LANGUAGE = env('NEXT_PUBLIC_DEFAULT_LANGUAGE');
export const NEXT_PUBLIC_SITE_URL = env('NEXT_PUBLIC_SITE_URL');
export const NEXT_PUBLIC_API_URL = env('NEXT_PUBLIC_API_URL');
export const NEXT_PUBLIC_DEFAULT_USER_EMAIL = env('NEXT_PUBLIC_DEFAULT_USER_EMAIL');
export const NEXT_PUBLIC_DEFAULT_USER_PASSWORD = env('NEXT_PUBLIC_DEFAULT_USER_PASSWORD');
Binary file not shown.
Binary file not shown.
+12
View File
@@ -0,0 +1,12 @@
import localFont from 'next/font/local';
export const geistSans = localFont({
src: './GeistVF.woff',
variable: '--font-geist-sans',
weight: '100 900',
});
export const geistMono = localFont({
src: './GeistMonoVF.woff',
variable: '--font-geist-mono',
weight: '100 900',
});
+92
View File
@@ -0,0 +1,92 @@
export const navs = [
{
title: 'Dashboard',
url: '/dashboard',
icon: 'flat-color-icons:globe',
},
{
title: 'Settings',
items: [
{
title: 'System Config',
url: '/dashboard/system',
icon: 'flat-color-icons:services',
},
{
title: 'Payment Config',
url: '/dashboard/payment',
icon: 'flat-color-icons:currency-exchange',
},
],
},
{
title: 'Server',
items: [
{
title: 'Server Management',
url: '/dashboard/server',
icon: 'flat-color-icons:data-protection',
},
],
},
{
title: 'Finance',
items: [
{
title: 'Subscribe Management',
url: '/dashboard/subscribe',
icon: 'flat-color-icons:shop',
},
{
title: 'Order Management',
url: '/dashboard/order',
icon: 'flat-color-icons:todo-list',
},
{
title: 'Coupon Management',
url: '/dashboard/coupon',
icon: 'flat-color-icons:bookmark',
},
],
},
{
title: 'User',
items: [
{
title: 'User Management',
url: '/dashboard/user',
icon: 'flat-color-icons:conference-call',
},
{
title: 'Announcement Management',
url: '/dashboard/announcement',
icon: 'flat-color-icons:news',
},
{
title: 'Ticket Management',
url: '/dashboard/ticket',
icon: 'flat-color-icons:collaboration',
},
{
title: 'Document Management',
url: '/dashboard/document',
icon: 'flat-color-icons:document',
},
],
},
];
export function findNavByUrl(url: string) {
for (const nav of navs) {
if (nav.url && nav.url === url) {
return [nav];
}
if (nav.items) {
const current = nav.items.find((item) => item.url === url);
if (current) {
return [nav, current];
}
}
}
return [];
}
+55
View File
@@ -0,0 +1,55 @@
import { create } from 'zustand';
export interface GlobalStore {
common: API.GetGlobalConfigResponse;
user?: API.User;
setCommon: (common: Partial<API.GetGlobalConfigResponse>) => void;
setUser: (user?: API.User) => void;
}
export const useGlobalStore = create<GlobalStore>((set) => ({
common: {
site: {
host: '',
site_name: '',
site_desc: '',
site_logo: '',
},
verify: {
enable_login_verify: false,
enable_register_verify: false,
enable_reset_password_verify: false,
turnstile_site_key: '',
},
register: {
stop_register: false,
enable_email_verify: false,
enable_email_domain_suffix: false,
email_domain_suffix_list: '',
},
invite: {
forced_invite: false,
},
currency: {
currency_unit: 'USD',
currency_symbol: '$',
},
subscribe: {
single_model: false,
subscribe_path: '',
subscribe_domain: '',
pan_domain: false,
},
},
user: undefined,
setCommon: (common) =>
set((state) => ({
common: {
...state.common,
...common,
},
})),
setUser: (user) => set({ user }),
}));
export default useGlobalStore;