u
This commit is contained in:
1 parent
6a8c31e20c
commit
572011017a
25 files changed
+599
-563
No files matched your search
@@ -5,7 +5,8 @@ import { useCallback, useEffect, useState } from 'react'
|
||||
import { Text, TouchableOpacity, View } from 'react-native'
|
||||
import Animated, { useAnimatedRef } from 'react-native-reanimated'
|
||||
import Sortable from 'react-native-sortables'
|
||||
import { ADivider, ADrawer, LucideIcon } from '@/components/common/ao'
|
||||
import { ADrawer, LucideIcon } from '@/components/common/ao'
|
||||
import { Divider } from '@/components/ui/divider'
|
||||
import { useNavStore } from '@/store/navigation'
|
||||
|
||||
export default function TabsLayout() {
|
||||
@@ -92,9 +93,7 @@ export default function TabsLayout() {
|
||||
<LucideIcon icon="Bot" size={24} clickable={false} strokeWidth={2} />
|
||||
</TouchableOpacity>
|
||||
|
||||
<ADivider
|
||||
direction="vertical"
|
||||
/>
|
||||
<Divider orientation="vertical" className="h-8" />
|
||||
|
||||
<TouchableOpacity
|
||||
className="flex-1 items-center justify-center flex flex-row"
|
||||
@@ -106,7 +105,7 @@ export default function TabsLayout() {
|
||||
<Text className="font-semibold text-lg ml-2">{currentNav.label}</Text>
|
||||
</TouchableOpacity>
|
||||
|
||||
<ADivider direction="vertical" />
|
||||
<Divider orientation="vertical" className="h-8" />
|
||||
|
||||
<TouchableOpacity className="w-12 items-center justify-center" onPress={refreshPage}>
|
||||
<LucideIcon icon="RefreshCcw" size={24} clickable={false} strokeWidth={2} />
|
||||
|
||||
@@ -5,7 +5,7 @@ import { Pressable, RefreshControl, SectionList, Text, Vibration, View } from 'r
|
||||
import { LucideIcon } from '@/components/common/ao'
|
||||
import EmptyState from '@/components/common/EmptyStatus'
|
||||
import MoneyCategoryIcon from '@/components/common/MoneyCategoryIcon'
|
||||
import { Menu, MenuItem, MenuItemLabel } from '@/components/ui/menu'
|
||||
import { Menu, MenuItem, MenuItemLabel, MenuSeparator } from '@/components/ui/menu'
|
||||
import { useMoneyCategoryStore } from '@/store/moneyCategory'
|
||||
import { useUserStore } from '@/store/user'
|
||||
import { MoneyCategoryEnum } from '@/types/money/category'
|
||||
@@ -125,6 +125,7 @@ export default function StaticTransactions({
|
||||
shadowColor: '#000',
|
||||
borderRadius: 4,
|
||||
width: 160,
|
||||
padding: 0,
|
||||
}}
|
||||
offset={0}
|
||||
placement="bottom"
|
||||
@@ -186,53 +187,69 @@ export default function StaticTransactions({
|
||||
>
|
||||
{
|
||||
userID === item.user_id && (
|
||||
<MenuItem
|
||||
key="update"
|
||||
textValue="update"
|
||||
className="flex gap-2"
|
||||
style={{
|
||||
paddingVertical: 10,
|
||||
minWidth: 150,
|
||||
}}
|
||||
onPress={() => {
|
||||
onUpdate?.(item)
|
||||
}}
|
||||
>
|
||||
<LucideIcon icon="Pencil" size={18} />
|
||||
<MenuItemLabel>更新</MenuItemLabel>
|
||||
</MenuItem>
|
||||
<>
|
||||
<MenuItem
|
||||
key="update"
|
||||
textValue="update"
|
||||
className="flex gap-3"
|
||||
style={{
|
||||
minWidth: 150,
|
||||
height: 42,
|
||||
paddingTop: 0,
|
||||
paddingBottom: 0,
|
||||
alignItems: 'center',
|
||||
borderRadius: 0,
|
||||
}}
|
||||
onPress={() => {
|
||||
onUpdate?.(item)
|
||||
}}
|
||||
>
|
||||
<LucideIcon icon="Pencil" size={18} />
|
||||
<MenuItemLabel className="text-lg">更新</MenuItemLabel>
|
||||
</MenuItem>
|
||||
<MenuSeparator />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
<MenuItem
|
||||
key="delete"
|
||||
textValue="delete"
|
||||
className="flex gap-2"
|
||||
className="flex gap-3"
|
||||
style={{
|
||||
paddingVertical: 10,
|
||||
minWidth: 150,
|
||||
height: 42,
|
||||
paddingTop: 0,
|
||||
paddingBottom: 0,
|
||||
alignItems: 'center',
|
||||
borderRadius: 0,
|
||||
}}
|
||||
onPress={() => {
|
||||
onDelete?.(item.id)
|
||||
}}
|
||||
>
|
||||
<LucideIcon icon="Trash" size={18} />
|
||||
<MenuItemLabel>删除</MenuItemLabel>
|
||||
<MenuItemLabel className="text-lg">删除</MenuItemLabel>
|
||||
</MenuItem>
|
||||
<MenuSeparator />
|
||||
<MenuItem
|
||||
key="detail"
|
||||
textValue="detail"
|
||||
className="flex gap-2"
|
||||
className="flex gap-3"
|
||||
style={{
|
||||
paddingVertical: 10,
|
||||
minWidth: 150,
|
||||
height: 42,
|
||||
paddingTop: 0,
|
||||
paddingBottom: 0,
|
||||
alignItems: 'center',
|
||||
borderRadius: 0,
|
||||
}}
|
||||
onPress={() => {
|
||||
onDetail?.(item.id)
|
||||
}}
|
||||
>
|
||||
<LucideIcon icon="ReceiptText" size={18} />
|
||||
<MenuItemLabel>详细</MenuItemLabel>
|
||||
<MenuItemLabel className="text-lg">详细</MenuItemLabel>
|
||||
</MenuItem>
|
||||
</Menu>
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { SpaceUser } from '@/types/space/space'
|
||||
import type { SpaceMember } from '@/types/space/space'
|
||||
import * as Clipboard from 'expo-clipboard'
|
||||
import { useState } from 'react'
|
||||
import { FlatList, TouchableHighlight, TouchableOpacity, View } from 'react-native'
|
||||
@@ -28,7 +28,7 @@ import { HStack } from '@/components/ui/hstack'
|
||||
import { ChevronDownIcon, ChevronUpIcon } from '@/components/ui/icon'
|
||||
import { Text } from '@/components/ui/text'
|
||||
import { VStack } from '@/components/ui/vstack'
|
||||
import { dissolveSpaceApi, exitSpaceApi, removeSpaceUserApi } from '@/request/api/space/space'
|
||||
import { dissolveSpaceApi, exitSpaceApi, removeSpaceMemberApi } from '@/request/api/space/space'
|
||||
import { useUserStore } from '@/store/user'
|
||||
import { formatRelativeTime } from '@/utils/time'
|
||||
import { toast } from '@/utils/toast'
|
||||
@@ -42,7 +42,7 @@ interface ExitParams {
|
||||
|
||||
interface SpaceInviteProps {
|
||||
userSpace: UserSpace | null
|
||||
spaceUsers: SpaceUser[]
|
||||
spaceUsers: SpaceMember[]
|
||||
onExit?: (params: ExitParams) => void
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ export default function SpaceInvite({
|
||||
return
|
||||
}
|
||||
// 移除
|
||||
removeSpaceUserApi({
|
||||
removeSpaceMemberApi({
|
||||
space_id: userSpace.id,
|
||||
user_id: modal.userId,
|
||||
}).catch((err) => {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import type { SpaceUser } from '@/types/space/space'
|
||||
import type { SpaceMember } from '@/types/space/space'
|
||||
import { useEffect, useState } from 'react'
|
||||
import { View } from 'react-native'
|
||||
import CustomHeader from '@/components/custom/Header'
|
||||
import { createSpaceApi, joinSpaceApi, listSpaceUsersApi } from '@/request/api/space/space'
|
||||
import { createSpaceApi, joinSpaceApi, listSpaceMembersApi } from '@/request/api/space/space'
|
||||
import { useSpaceStore } from '@/store/space'
|
||||
import { useUserStore } from '@/store/user'
|
||||
import JoinSpace from './components/JoinSpace'
|
||||
@@ -16,15 +16,15 @@ export default function PagerWithTab() {
|
||||
|
||||
const [headerTitle, setHeaderTitle] = useState('我的空间')
|
||||
const [step, setStep] = useState<'join' | 'invite' | 'home'>('home')
|
||||
const [spaceUsers, setSpaceUsers] = useState<SpaceUser[]>([])
|
||||
const [spaceUsers, setSpaceUsers] = useState<SpaceMember[]>([])
|
||||
|
||||
// 封装获取空间用户列表并直接更新状态
|
||||
const fetchSpaceUsers = async (spaceId: number) => {
|
||||
try {
|
||||
const res = await listSpaceUsersApi({ space_id: spaceId })
|
||||
const res = await listSpaceMembersApi({ space_id: spaceId })
|
||||
if (res.isSuccess) {
|
||||
setSpaceUsers(res.data.users)
|
||||
console.log(res.data.users)
|
||||
setSpaceUsers(res.data.members)
|
||||
console.log(res.data.members)
|
||||
}
|
||||
else {
|
||||
console.warn('获取空间用户失败')
|
||||
|
||||
@@ -7,12 +7,12 @@ import type {
|
||||
ExitSpaceResult,
|
||||
JoinSpaceParams,
|
||||
JoinSpaceResult,
|
||||
ListSpaceUsersParams,
|
||||
ListSpaceUsersResult,
|
||||
RemoveSpaceUserParams,
|
||||
RemoveSpaceUserResult,
|
||||
UpdateSpaceUserRoleParams,
|
||||
UpdateSpaceUserRoleResult,
|
||||
ListSpaceMembersParams,
|
||||
ListSpaceMembersResult,
|
||||
RemoveSpaceMemberParams,
|
||||
RemoveSpaceMemberResult,
|
||||
UpdateSpaceMemberRoleParams,
|
||||
UpdateSpaceMemberRoleResult,
|
||||
} from '@/types/space/space'
|
||||
import alovaInstance from '../../index'
|
||||
|
||||
@@ -39,16 +39,16 @@ export function exitSpaceApi(params: ExitSpaceParams) {
|
||||
}
|
||||
|
||||
// Remove Space User API
|
||||
export function removeSpaceUserApi(params: RemoveSpaceUserParams) {
|
||||
return alovaInstance.Post<ResponseData<RemoveSpaceUserResult>>(`${API_PREFIX}/remove`, params)
|
||||
export function removeSpaceMemberApi(params: RemoveSpaceMemberParams) {
|
||||
return alovaInstance.Post<ResponseData<RemoveSpaceMemberResult>>(`${API_PREFIX}/remove`, params)
|
||||
}
|
||||
|
||||
// Update Role API
|
||||
export function updateSpaceUserRoleApi(params: UpdateSpaceUserRoleParams) {
|
||||
return alovaInstance.Post<ResponseData<UpdateSpaceUserRoleResult>>(`${API_PREFIX}/updateRole`, params)
|
||||
export function updateSpaceMemberRoleApi(params: UpdateSpaceMemberRoleParams) {
|
||||
return alovaInstance.Post<ResponseData<UpdateSpaceMemberRoleResult>>(`${API_PREFIX}/updateRole`, params)
|
||||
}
|
||||
|
||||
// List Space Users API
|
||||
export function listSpaceUsersApi(params: ListSpaceUsersParams) {
|
||||
return alovaInstance.Post<ResponseData<ListSpaceUsersResult>>(`${API_PREFIX}/users`, params)
|
||||
export function listSpaceMembersApi(params: ListSpaceMembersParams) {
|
||||
return alovaInstance.Post<ResponseData<ListSpaceMembersResult>>(`${API_PREFIX}/members`, params)
|
||||
}
|
||||
@@ -28,8 +28,8 @@ function isWhiteListed(url: string) {
|
||||
}
|
||||
|
||||
const alovaInstance = createAlova({
|
||||
// baseURL: 'http://192.168.5.6:8086/app',
|
||||
baseURL: 'http://192.168.1.137:8086/app',
|
||||
baseURL: 'http://192.168.5.6:8086/app',
|
||||
// baseURL: 'http://192.168.1.137:8086/app',
|
||||
requestAdapter: axiosRequestAdapter(),
|
||||
timeout: 5000,
|
||||
cacheFor: null,
|
||||
|
||||
@@ -31,25 +31,25 @@ export interface ExitSpaceResult {
|
||||
}
|
||||
|
||||
// 踢出用户
|
||||
export interface RemoveSpaceUserParams {
|
||||
export interface RemoveSpaceMemberParams {
|
||||
space_id: number
|
||||
user_id: number
|
||||
}
|
||||
|
||||
export interface RemoveSpaceUserResult {
|
||||
export interface RemoveSpaceMemberResult {
|
||||
}
|
||||
|
||||
// 更新用户权限
|
||||
export interface UpdateSpaceUserRoleParams {
|
||||
export interface UpdateSpaceMemberRoleParams {
|
||||
space_id: number
|
||||
user_id: number
|
||||
role: number
|
||||
}
|
||||
export interface UpdateSpaceUserRoleResult {
|
||||
export interface UpdateSpaceMemberRoleResult {
|
||||
}
|
||||
|
||||
// 空间用户列表
|
||||
export interface SpaceUser {
|
||||
export interface SpaceMember {
|
||||
id: number
|
||||
username: string
|
||||
avatar: string
|
||||
@@ -57,10 +57,10 @@ export interface SpaceUser {
|
||||
last_login_time: number
|
||||
}
|
||||
|
||||
export interface ListSpaceUsersParams {
|
||||
export interface ListSpaceMembersParams {
|
||||
space_id: number
|
||||
}
|
||||
|
||||
export interface ListSpaceUsersResult {
|
||||
users: SpaceUser[]
|
||||
export interface ListSpaceMembersResult {
|
||||
members: SpaceMember[]
|
||||
}
|
||||
Reference in new issue
Block a user