From c7527177b02c8bc7b3c4864c57820c214137aeb4 Mon Sep 17 00:00:00 2001 From: luorijun Date: Sat, 7 Jun 2025 11:49:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=95=E5=85=A5=20husky=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E9=87=8D=E6=96=B0=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .husky/pre-commit | 1 + eslint.config.mjs | 1 + package.json | 4 +- pnpm-lock.yaml | 10 + src/actions/auth.ts | 1 - src/actions/whitelist.ts | 4 +- src/app/(api)/identify/callback/page.tsx | 50 ++- src/app/(api)/proxies/route.ts | 2 +- src/app/(auth)/captcha/route.ts | 2 +- src/app/(auth)/login/captcha.tsx | 2 +- src/app/(auth)/login/layout.tsx | 9 +- src/app/(auth)/login/page.tsx | 17 +- src/app/(home)/@footer/page.tsx | 31 +- src/app/(home)/@header/_client/help.tsx | 27 +- src/app/(home)/@header/_client/navs.tsx | 16 +- src/app/(home)/@header/_client/product.tsx | 38 +- src/app/(home)/@header/_client/solution.tsx | 23 +- src/app/(home)/@header/page.tsx | 2 +- src/app/(home)/collect/page.tsx | 2 +- src/app/(home)/layout.tsx | 2 +- src/app/(home)/page.tsx | 156 +++---- src/app/(home)/product/page.tsx | 3 +- .../admin/(dashboard)/_client/userCenter.tsx | 38 +- src/app/admin/(dashboard)/page.tsx | 34 +- src/app/admin/_client/navbar.tsx | 126 +++--- src/app/admin/bills/layout.tsx | 9 +- src/app/admin/bills/page.tsx | 80 ++-- src/app/admin/channels/layout.tsx | 17 +- src/app/admin/channels/page.tsx | 78 ++-- src/app/admin/extract/layout.tsx | 9 +- src/app/admin/extract/page.tsx | 2 +- src/app/admin/identify/layout.tsx | 8 +- src/app/admin/identify/page.tsx | 106 ++--- src/app/admin/layout.tsx | 2 +- src/app/admin/profile/layout.tsx | 9 +- src/app/admin/profile/page.tsx | 214 +++++----- src/app/admin/purchase/layout.tsx | 17 +- src/app/admin/purchase/page.tsx | 2 +- src/app/admin/resources/_client/long.tsx | 401 +++++++++--------- src/app/admin/resources/_client/short.tsx | 401 +++++++++--------- src/app/admin/resources/layout.tsx | 9 +- src/app/admin/resources/page.tsx | 13 +- src/app/admin/whitelist/layout.tsx | 9 +- src/app/admin/whitelist/page.tsx | 24 +- src/app/layout.tsx | 3 +- src/app/test/page.tsx | 8 +- src/components/bread-crumb.tsx | 4 +- src/components/composites/extract/index.tsx | 239 ++++++----- src/components/composites/purchase/index.tsx | 28 +- .../composites/purchase/long/center.tsx | 120 +++--- .../composites/purchase/long/form.tsx | 3 +- .../composites/purchase/long/right.tsx | 201 +++++---- src/components/composites/purchase/nav.tsx | 19 +- src/components/composites/purchase/option.tsx | 36 +- src/components/composites/purchase/pay.tsx | 68 ++- .../composites/purchase/short/center.tsx | 120 +++--- .../composites/purchase/short/form.tsx | 3 +- .../composites/purchase/short/right.tsx | 191 +++++---- src/components/composites/recharge/index.tsx | 157 ++++--- src/components/data-table.tsx | 105 ++--- src/components/date-picker.tsx | 3 +- src/components/date-range-picker.tsx | 40 +- src/components/markdown.tsx | 14 +- src/components/page.tsx | 18 +- src/components/providers/StoreProvider.tsx | 3 - src/components/ui/alert-dialog.tsx | 6 +- src/components/ui/calendar.tsx | 78 ++-- src/components/ui/chart.tsx | 151 +++---- src/components/ui/checkbox.tsx | 18 +- src/components/ui/combobox.tsx | 73 ++-- src/components/ui/dialog.tsx | 44 +- src/components/ui/form.tsx | 91 ++-- src/components/ui/label.tsx | 14 +- src/components/ui/pagination.tsx | 12 +- src/components/ui/popover.tsx | 22 +- src/components/ui/progress.tsx | 16 +- src/components/ui/radio-group.tsx | 20 +- src/components/ui/select.tsx | 14 +- src/components/ui/sonner.tsx | 20 +- src/components/ui/tabs.tsx | 22 +- src/components/ui/textarea.tsx | 12 +- src/components/ui/tooltip.tsx | 6 +- src/lib/api.ts | 1 - src/lib/models/resource.ts | 6 +- src/lib/states.ts | 2 +- src/lib/stores/layout.ts | 4 +- src/lib/stores/profile.ts | 6 +- src/lib/utils.ts | 1 - src/mdx-components.tsx | 6 +- 89 files changed, 2140 insertions(+), 1899 deletions(-) create mode 100644 .husky/pre-commit diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..009b3f8 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +pnpm lint diff --git a/eslint.config.mjs b/eslint.config.mjs index 56ab80b..e4e9331 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -26,6 +26,7 @@ const eslintConfig = [ '@stylistic/jsx-closing-bracket-location': 'off', '@stylistic/jsx-curly-newline': 'off', '@stylistic/multiline-ternary': 'off', + '@stylistic/block-spacing': 'off', '@typescript-eslint/no-empty-object-type': 'off', '@typescript-eslint/no-unused-vars': 'off', }, diff --git a/package.json b/package.json index 750b44e..00b5d34 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "dev": "next dev -H 0.0.0.0 --turbo", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint --fix", + "prepare": "husky" }, "dependencies": { "@hookform/resolvers": "^4.1.3", @@ -62,6 +63,7 @@ "eslint": "^9", "eslint-config-next": "15.2.1", "eslint-plugin-react-hooks": "^5.2.0", + "husky": "^9.1.7", "tailwindcss": "^4", "typescript": "^5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e885dc..cb783b9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -165,6 +165,9 @@ importers: eslint-plugin-react-hooks: specifier: ^5.2.0 version: 5.2.0(eslint@9.21.0(jiti@2.4.2)) + husky: + specifier: ^9.1.7 + version: 9.1.7 tailwindcss: specifier: ^4 version: 4.0.9 @@ -2348,6 +2351,11 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -5873,6 +5881,8 @@ snapshots: dependencies: '@types/hast': 3.0.4 + husky@9.1.7: {} + ieee754@1.2.1: {} ignore@5.3.2: {} diff --git a/src/actions/auth.ts b/src/actions/auth.ts index c7d90a8..f8c0db6 100644 --- a/src/actions/auth.ts +++ b/src/actions/auth.ts @@ -17,7 +17,6 @@ export async function login(props: { password: string remember: boolean }): Promise { - // 尝试登录 const result = await callByDevice('/api/auth/token', { ...props, diff --git a/src/actions/whitelist.ts b/src/actions/whitelist.ts index 4816128..aba47cd 100644 --- a/src/actions/whitelist.ts +++ b/src/actions/whitelist.ts @@ -1,6 +1,6 @@ 'use server' -import { PageRecord} from '@/lib/api' -import { callByUser } from '@/actions/base' +import {PageRecord} from '@/lib/api' +import {callByUser} from '@/actions/base' type Whitelist = { id: number diff --git a/src/app/(api)/identify/callback/page.tsx b/src/app/(api)/identify/callback/page.tsx index 0848c91..e14b907 100644 --- a/src/app/(api)/identify/callback/page.tsx +++ b/src/app/(api)/identify/callback/page.tsx @@ -15,7 +15,7 @@ export default function Page(props: PageProps) { ) } - function Page1() { +function Page1() { const params = useSearchParams() const success = params.get('success') === 'true' const id = params.get('id') || '' @@ -27,7 +27,7 @@ export default function Page(props: PageProps) { useEffect(() => { if (success) { - IdentifyCallback({id}).then(resp => { + IdentifyCallback({id}).then((resp) => { if (!resp.success) { setResult({ status: 'fail', @@ -55,28 +55,34 @@ export default function Page(props: PageProps) { }, []) return ( -
+
- {result.status === 'load' ? (<> - -

{result.message}

-

- 请保持网络畅通 -

- ) : result.status === 'done' ? (<> - -

{result.message}

-

- 认证已完成,您现在可以关闭此页面 -

- ) : (<> - -

{result.message}

-

- 认证失败,请重新发起认证 -

- )} + {result.status === 'load' ? ( + <> + +

{result.message}

+

+ 请保持网络畅通 +

+ + ) : result.status === 'done' ? ( + <> + +

{result.message}

+

+ 认证已完成,您现在可以关闭此页面 +

+ + ) : ( + <> + +

{result.message}

+

+ 认证失败,请重新发起认证 +

+ + )}
diff --git a/src/app/(api)/proxies/route.ts b/src/app/(api)/proxies/route.ts index a227550..728ea3b 100644 --- a/src/app/(api)/proxies/route.ts +++ b/src/app/(api)/proxies/route.ts @@ -50,7 +50,7 @@ export async function GET(req: NextRequest) { const body = JSON.stringify(params) return NextResponse.json(body) case 'text': - const text = result.data.map(item => { + const text = result.data.map((item) => { const list = [item.host, item.port] if (item.username && item.password) { list.push(item.username) diff --git a/src/app/(auth)/captcha/route.ts b/src/app/(auth)/captcha/route.ts index 44601ee..71bb53e 100644 --- a/src/app/(auth)/captcha/route.ts +++ b/src/app/(auth)/captcha/route.ts @@ -14,7 +14,7 @@ function generateCaptchaText(length: number = 4): string { } // 哈希验证码文本并使用随机盐值 -function hashCaptcha(text: string): { hash: string, salt: string } { +function hashCaptcha(text: string): {hash: string, salt: string} { const salt = crypto.randomBytes(16).toString('hex') const hash = crypto .createHmac('sha256', salt) diff --git a/src/app/(auth)/login/captcha.tsx b/src/app/(auth)/login/captcha.tsx index 643819b..0caf05d 100644 --- a/src/app/(auth)/login/captcha.tsx +++ b/src/app/(auth)/login/captcha.tsx @@ -63,7 +63,7 @@ export default function Captcha(props: CaptchaProps) { setCaptchaCode(e.target.value)} + onChange={e => setCaptchaCode(e.target.value)} className="w-full" />
diff --git a/src/app/(auth)/login/layout.tsx b/src/app/(auth)/login/layout.tsx index 30c3605..aef625d 100644 --- a/src/app/(auth)/login/layout.tsx +++ b/src/app/(auth)/login/layout.tsx @@ -1,6 +1,5 @@ - -import { ReactNode } from 'react' -import { Metadata } from 'next' +import {ReactNode} from 'react' +import {Metadata} from 'next' export async function generateMetadata(): Promise { return { @@ -9,9 +8,9 @@ export async function generateMetadata(): Promise { } export type LoginLayoutProps = { - children: ReactNode + children: ReactNode } export default async function LoginLayout(props: LoginLayoutProps) { return props.children -} \ No newline at end of file +} diff --git a/src/app/(auth)/login/page.tsx b/src/app/(auth)/login/page.tsx index 450eaf4..23de5d6 100644 --- a/src/app/(auth)/login/page.tsx +++ b/src/app/(auth)/login/page.tsx @@ -193,7 +193,7 @@ export default function LoginPage(props: LoginPageProps) { const params = useSearchParams() const redirect = params.get('redirect') - const refreshProfile = useProfileStore(store=>store.refreshProfile) + const refreshProfile = useProfileStore(store => store.refreshProfile) // ====================== // render @@ -205,9 +205,9 @@ export default function LoginPage(props: LoginPageProps) { `h-screen w-screen xl:pr-64 bg-cover bg-left`, `flex justify-center xl:justify-end items-center`, )}> - {`背景图`} + 背景图 - {`logo`} + logo {/* 登录表单 */} @@ -215,9 +215,9 @@ export default function LoginPage(props: LoginPageProps) { 登录/注册 - + className="space-y-6" onSubmit={onSubmit} form={form}> - + {({id, field}) => ( - + {({id, field}) => (

- 登录即表示您同意《用户协议》《隐私政策》 + 登录即表示您同意 + 《用户协议》 + 和 + 《隐私政策》

diff --git a/src/app/(home)/@footer/page.tsx b/src/app/(home)/@footer/page.tsx index 60088c4..a5dcc54 100644 --- a/src/app/(home)/@footer/page.tsx +++ b/src/app/(home)/@footer/page.tsx @@ -6,24 +6,24 @@ export default function Footer(props: FooterProps) { return (