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 6f9a90fc..bb84d9be 100644 --- a/code/base-project/base-app/src/app/auth/login.tsx +++ b/code/base-project/base-app/src/app/auth/login.tsx @@ -7,6 +7,7 @@ import { IconQq, IconWeixin, IconZhiwen } from '@/components/iconfont' import { Divider } from '@/components/ui/divider' import useFormValidation from '@/hooks/useFormValidation' import { loginDefaultApi } from '@/request/api/auth' +import { useMoneyCategoryStore } from '@/store/moneyCategory' import { useUserStore } from '@/store/user' import { toast } from '@/utils/toast' @@ -20,6 +21,7 @@ interface LoginForm { export default function AuthLogin() { const router = useRouter() const userStore = useUserStore() + const moneyCategoryStore = useMoneyCategoryStore() const [loading, setLoading] = useState(false) const [form, setForm] = useState({ @@ -60,6 +62,7 @@ export default function AuthLogin() { refreshToken: res.data.refreshToken, rememberMe: form.rememberMe, }) + moneyCategoryStore.init() router.replace('/user') } diff --git a/code/base-project/base-app/src/app/system/share/components/JoinSpace.tsx b/code/base-project/base-app/src/app/system/share/components/JoinSpace.tsx index 091715be..dffa0523 100644 --- a/code/base-project/base-app/src/app/system/share/components/JoinSpace.tsx +++ b/code/base-project/base-app/src/app/system/share/components/JoinSpace.tsx @@ -6,10 +6,12 @@ import { Link, LinkText } from '@/components/ui/link' interface JoinSpaceProps { onBack?: () => void + onJoin?: (code: string) => void } export default function JoinSpace({ onBack, + onJoin, }: JoinSpaceProps) { const formRef = useRef(null) const [form, setForm] = useState({ @@ -22,11 +24,32 @@ export default function JoinSpace({ name="username" label="邀请码" > - + setForm({ + ...form, + code: text, + })} + > + - 加入空间 + { + if (form.code === '') { + // + } + else { + onJoin?.(form.code) + } + }} + > + 加入空间 + + - 123456 + {userSpace?.invite_code} @@ -102,7 +109,7 @@ export default function SpaceInviteAndMembers() { @@ -112,31 +119,50 @@ export default function SpaceInviteAndMembers() { 空间成员 - 3 人 + + {spaceUsers.length} + {' '} + 人 + item.id.toString()} + data={spaceUsers} + keyExtractor={item => item.user_id.toString()} renderItem={({ item }) => ( - - {item.name} + + {item.username} - {item.name} - - 管理员 - + {item.username} + {[0, 1].includes(item.space_role) && ( + + + {item.space_role === 0 ? '创建者' : '管理员'} + + + )} + + { + (userStore.userInfo?.id === item.user_id) && ( + + + 我 + + + ) + } + - Marketing Coordinator + {formatRelativeTime(item.active_time)} diff --git a/code/base-project/base-app/src/app/system/share/index.tsx b/code/base-project/base-app/src/app/system/share/index.tsx index 491adf21..a044366d 100644 --- a/code/base-project/base-app/src/app/system/share/index.tsx +++ b/code/base-project/base-app/src/app/system/share/index.tsx @@ -1,18 +1,87 @@ +import type { SpaceUser, UserSpace } from '@/types/space/spaceUser' import { useEffect, useState } from 'react' import { View } from 'react-native' import CustomHeader from '@/components/custom/Header' - +import { createSpaceApi } from '@/request/api/space/space' +import { getUserSpaceApi, joinSpaceApi, listSpaceUsersApi } from '@/request/api/space/spaceUser' import JoinSpace from './components/JoinSpace' import SpaceHome from './components/SpaceHome' -import SpaceInviteAndMembers from './components/SpaceInviteAndMembers' - +import SpaceInviteAndMembers from './components/SpaceInvite' import StepFade from './components/StepFade' export default function PagerWithTab() { const [step, setStep] = useState<'join' | 'invite' | 'home'>('home') + const [userSpace, setUserSpace] = useState(null) + const [spaceUsers, setSpaceUsers] = useState([]) + + const fetchData = async () => { + await Promise.all([ + getUserSpaceApi({}) + .then((res) => { + if (res.isSuccess) { + if (res.data === null) { + setUserSpace(null) + setStep('home') + } + else { + setUserSpace({ + space_id: res.data.space_id, + space_name: res.data.space_name, + role: res.data.role, + invite_code: res.data.invite_code, + }) + setStep('invite') + } + } + else { + // 提示 + } + }) + .catch(err => console.error('getUserSpaceApi error:', err)), + + listSpaceUsersApi({}) + .then((res) => { + if (res.isSuccess) { + setSpaceUsers(res.data.users) + } + else { + // 提示 + } + }) + .catch(err => console.error('listSpaceUsersApi error:', err)), + ]) + } + useEffect(() => { + fetchData() + }, []) function createSpace() { + createSpaceApi({}).then((res) => { + if (res.isSuccess) { + setUserSpace({ + space_id: res.data.id, + space_name: '', + role: 0, + invite_code: res.data.invite_code, + }) + setStep('invite') + } + }).catch((err) => { + console.log(err) + }) + } + + function joinSpace(code: string) { + joinSpaceApi({ + invite_code: code, + }).then((res) => { + if (res.isSuccess) { + fetchData() + } + }).catch((err) => { + console.log(err) + }) } return ( @@ -21,9 +90,7 @@ export default function PagerWithTab() { { - setStep('invite') - }} + onCreate={createSpace} onJoin={() => { setStep('join') }} @@ -35,11 +102,16 @@ export default function PagerWithTab() { onBack={() => { setStep('home') }} + onJoin={(code) => { + if (code !== '') { + joinSpace(code) + } + }} /> - + diff --git a/code/base-project/base-app/src/components/custom/Header.tsx b/code/base-project/base-app/src/components/custom/Header.tsx index dc83c0e2..09b7e1c5 100644 --- a/code/base-project/base-app/src/components/custom/Header.tsx +++ b/code/base-project/base-app/src/components/custom/Header.tsx @@ -61,7 +61,7 @@ export default function CustomHeader(props: CustomHeaderProps) { {...screenProps} options={{ ...screenProps?.options, - headerShown: true, + headerShown: false, header: () => (