From 7333e6695fdbba908458ea550aae742af1abcc7a Mon Sep 17 00:00:00 2001 From: ZhangAo Date: Wed, 5 Nov 2025 17:30:35 +0800 Subject: [PATCH] u --- code/base-project/base-app/metro.config.js | 8 +- code/base-project/base-app/package.json | 1 + code/base-project/base-app/pnpm-lock.yaml | 22 ++++ .../base-app/src/app/auth/login.tsx | 22 ++-- .../base-app/src/app/auth/register.tsx | 57 ++++----- .../src/components/common/ao/Form.tsx | 47 +++----- .../src/components/common/ao/FormItem.tsx | 113 +++++++++++++++--- .../base-app/src/request/index.ts | 21 ++++ .../base-go-v2/internal/api/auth/index.go | 18 ++- .../base-go-v2/internal/api/router.go | 7 +- .../logs/error/error-2025-11-05.log | 0 .../base-go-v2/logs/info/info-2025-11-05.log | 0 .../base-go-v2/logs/warn/warn-2025-11-05.log | 0 13 files changed, 211 insertions(+), 105 deletions(-) create mode 100644 code/base-project/base-app/src/request/index.ts create mode 100644 code/base-project/base-go-v2/logs/error/error-2025-11-05.log create mode 100644 code/base-project/base-go-v2/logs/info/info-2025-11-05.log create mode 100644 code/base-project/base-go-v2/logs/warn/warn-2025-11-05.log diff --git a/code/base-project/base-app/metro.config.js b/code/base-project/base-app/metro.config.js index 63773b1a..070adbc9 100644 --- a/code/base-project/base-app/metro.config.js +++ b/code/base-project/base-app/metro.config.js @@ -1,7 +1,13 @@ -// Learn more https://docs.expo.io/guides/customizing-metro +// metro.config.js const { getDefaultConfig } = require('expo/metro-config') const { withNativeWind } = require('nativewind/metro') + /** @type {import('expo/metro-config').MetroConfig} */ const config = getDefaultConfig(__dirname) +config.resolver = { + ...config.resolver, + unstable_enablePackageExports: true, +} + module.exports = withNativeWind(config, { input: './src/styles/global.css' }) diff --git a/code/base-project/base-app/package.json b/code/base-project/base-app/package.json index cc8046e7..97f633d1 100644 --- a/code/base-project/base-app/package.json +++ b/code/base-project/base-app/package.json @@ -15,6 +15,7 @@ "@gluestack/ui-next-adapter": "^3.0.3", "@legendapp/motion": "^2.4.0", "@react-native-async-storage/async-storage": "2.2.0", + "alova": "^3.3.4", "expo": "~54.0.20", "expo-constants": "~18.0.10", "expo-font": "~14.0.9", diff --git a/code/base-project/base-app/pnpm-lock.yaml b/code/base-project/base-app/pnpm-lock.yaml index b87c6e84..7098b4d7 100644 --- a/code/base-project/base-app/pnpm-lock.yaml +++ b/code/base-project/base-app/pnpm-lock.yaml @@ -23,6 +23,9 @@ importers: '@react-native-async-storage/async-storage': specifier: 2.2.0 version: 2.2.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)) + alova: + specifier: ^3.3.4 + version: 3.3.4 expo: specifier: ~54.0.20 version: 54.0.21(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.14)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) @@ -108,6 +111,9 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} + '@alova/shared@1.3.1': + resolution: {integrity: sha512-ijSOaFLUFcVzMKSY3avoEE5C03/p9atjMDPBwvNkwnzaCrhv6/m4A121NdadF8YlHCRuifyYfz90IyEdMXTsJg==} + '@antfu/eslint-config@6.2.0': resolution: {integrity: sha512-ksasd+mJk441HHodwPh3Nhmwo9jSHUmgQyfTxMQM05U7SjDS0fy2KnXnPx0Vhc/CqKiJnx8wGpQCCJibyASX9Q==} hasBin: true @@ -2133,6 +2139,10 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + alova@3.3.4: + resolution: {integrity: sha512-UKKqXdvf8aQ4C7m3brO77YWe5CDz8N59PdAUz7M8gowKUUXTutbk0Vk5DRBrCe0hMUyyNMUhdCZ38llGxCViyQ==} + engines: {node: '>= 18.0.0'} + anser@1.4.10: resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} @@ -4386,6 +4396,9 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} + rate-limiter-flexible@5.0.5: + resolution: {integrity: sha512-+/dSQfo+3FYwYygUs/V2BBdwGa9nFtakDwKt4l0bnvNB53TNT++QSFewwHX9qXrZJuMe9j+TUaU21lm5ARgqdQ==} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -5306,6 +5319,8 @@ snapshots: '@alloc/quick-lru@5.2.0': {} + '@alova/shared@1.3.1': {} + '@antfu/eslint-config@6.2.0(@vue/compiler-sfc@3.5.22)(eslint@9.39.0(jiti@1.21.7))(typescript@5.9.3)': dependencies: '@antfu/install-pkg': 1.1.0 @@ -8212,6 +8227,11 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + alova@3.3.4: + dependencies: + '@alova/shared': 1.3.1 + rate-limiter-flexible: 5.0.5 + anser@1.4.10: {} ansi-escapes@4.3.2: @@ -10899,6 +10919,8 @@ snapshots: range-parser@1.2.1: {} + rate-limiter-flexible@5.0.5: {} + rc@1.2.8: dependencies: deep-extend: 0.6.0 diff --git a/code/base-project/base-app/src/app/auth/login.tsx b/code/base-project/base-app/src/app/auth/login.tsx index 3d2fef7e..3cf025c6 100644 --- a/code/base-project/base-app/src/app/auth/login.tsx +++ b/code/base-project/base-app/src/app/auth/login.tsx @@ -17,6 +17,7 @@ import { } from '@/components/ui/form-control' import { CheckIcon, EyeIcon, EyeOffIcon } from '@/components/ui/icon' import { Input, InputField, InputIcon, InputSlot } from '@/components/ui/input' +import alovaInstance from '@/request' import { useToast } from '@/utils/toast' interface LoginForm { @@ -37,20 +38,13 @@ export default function AuthLogin() { }) const defaultLogin = () => { - if (form.username === '') { - toast.show({ - title: '账号不能为空!', - action: 'error', - }) - return - } - if (form.password === '') { - toast.show({ - title: '密码不能为空!', - action: 'error', - }) - } - // + alovaInstance.Post('/auth/login/default', { + title: 'foo', + body: 'bar', + userId: 1, + }).then((res) => { + console.log(res) + }) } return ( diff --git a/code/base-project/base-app/src/app/auth/register.tsx b/code/base-project/base-app/src/app/auth/register.tsx index 9eee78c1..3ee75336 100644 --- a/code/base-project/base-app/src/app/auth/register.tsx +++ b/code/base-project/base-app/src/app/auth/register.tsx @@ -1,6 +1,6 @@ import type { AFormRef } from '@/components/common/ao' import { Lock, UserRound } from 'lucide-react-native' -import { useEffect, useRef, useState } from 'react' +import { useRef, useState } from 'react' import { Image, ScrollView, View } from 'react-native' import { AForm, AFormItem, AInput } from '@/components/common/ao' @@ -11,28 +11,16 @@ interface RegisterForm { username: string password: string confirmPassword: string - a: string - b: string - c: string - d: string - e: string - f: string } -export default function AuthLogin() { +export default function AuthRegister() { const scrollRef = useRef(null) - const toast = useToast() + const [form, setForm] = useState({ username: '', password: '', confirmPassword: '', - a: '', - b: '', - c: '', - d: '', - e: '', - f: '', }) const [loading, setLoading] = useState(false) const formRef = useRef(null) @@ -41,7 +29,7 @@ export default function AuthLogin() { setForm(prev => ({ ...prev, [field]: value })) } - const defaultLogin = () => { + const handleRegister = () => { if (formRef.current?.validate()) { setLoading(true) toast.show({ title: '校验通过,开始注册', action: 'success' }) @@ -55,10 +43,18 @@ export default function AuthLogin() { return ( - + - + val && !/\d{6}/.test(val) ? '请输入6位数字密码' : null, + { required: true, message: '密码是必填项' }, + { pattern: /^\d{6}$/, message: '请输入6位数字密码' }, ]} > val !== form.password ? '两次密码不一致' : null, + { required: true, message: '确认密码是必填项' }, + { + validator: val => val === form.password, + message: '两次密码不一致', + }, ]} > handleInputChange('confirmPassword', text)} /> - - {/* 其他表单项 */} - {['a', 'b', 'c', 'd', 'e', 'f'].map(field => ( - - handleInputChange(field, text)} - /> - - ))} -