|
1 | | -import { ConstsGitPlatform, ConstsOwnerType, type DomainGitIdentity, type DomainHost, type DomainImage, type DomainModel, type DomainProject, type DomainProjectTask, type DomainUser, type DomainVirtualMachine } from '@/api/Api'; |
| 1 | +import { ConstsGitPlatform, ConstsOwnerType, type DomainGitIdentity, type DomainHost, type DomainImage, type DomainModel, type DomainProject, type DomainProjectTask, type DomainUser } from '@/api/Api'; |
2 | 2 | import { getImageShortName } from '@/utils/common'; |
3 | 3 | import { apiRequest } from '@/utils/requestUtils'; |
4 | | -import React, { createContext, useContext, useEffect, useMemo, useState } from 'react'; |
| 4 | +import { DataContext } from '@/components/console/common-data'; |
| 5 | +import React, { useEffect, useMemo, useState } from 'react'; |
5 | 6 | import { toast } from 'sonner'; |
6 | 7 |
|
7 | | -type CommonData = { |
8 | | - user: DomainUser; |
9 | | - reloadUser: () => void; |
10 | | - |
11 | | - hosts: DomainHost[]; |
12 | | - vms: DomainVirtualMachine[]; |
13 | | - loadingHosts: boolean; |
14 | | - hostsInited: boolean; |
15 | | - reloadHosts: () => void; |
16 | | - |
17 | | - models: DomainModel[]; |
18 | | - loadingModels: boolean; |
19 | | - reloadModels: () => void; |
20 | | - |
21 | | - images: DomainImage[]; |
22 | | - loadingImages: boolean; |
23 | | - reloadImages: () => void; |
24 | | - |
25 | | - identities: DomainGitIdentity[]; |
26 | | - loadingIdentities: boolean; |
27 | | - reloadIdentities: () => void; |
28 | | - |
29 | | - balance: number; |
30 | | - bonus: number; |
31 | | - reloadWallet: () => void; |
32 | | - |
33 | | - members: DomainUser[]; |
34 | | - loadingMembers: boolean; |
35 | | - reloadMembers: () => void; |
36 | | - |
37 | | - projects: DomainProject[]; |
38 | | - loadingProjects: boolean; |
39 | | - reloadProjects: () => void; |
40 | | - |
41 | | - /** 未关联项目的任务(quick_start),用于侧边栏「默认」分组展示 */ |
42 | | - unlinkedTasks: DomainProjectTask[]; |
43 | | - loadingUnlinkedTasks: boolean; |
44 | | - reloadUnlinkedTasks: () => void; |
45 | | -}; |
46 | | - |
47 | | -const DataContext = createContext<CommonData | null>(null); |
48 | | - |
49 | 8 | export const DataProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { |
50 | 9 | const [userInfo, setUserInfo] = useState<DomainUser>({}); |
51 | 10 |
|
@@ -228,8 +187,8 @@ export const DataProvider: React.FC<{ children: React.ReactNode }> = ({ children |
228 | 187 | const fetchWallet = () => { |
229 | 188 | apiRequest('v1UsersWalletList', {}, [], (resp) => { |
230 | 189 | if (resp.code === 0) { |
231 | | - setBalance(resp.data?.balance / 1000); |
232 | | - setBonus(resp.data?.bonus / 1000); |
| 190 | + setBalance((resp.data?.balance || 0) / 1000); |
| 191 | + setBonus((resp.data?.bonus || 0) / 1000); |
233 | 192 | } else { |
234 | 193 | toast.error("获取余额失败: " + resp.message); |
235 | 194 | } |
@@ -267,7 +226,7 @@ export const DataProvider: React.FC<{ children: React.ReactNode }> = ({ children |
267 | 226 |
|
268 | 227 | const fetchUnlinkedTasks = async () => { |
269 | 228 | setLoadingUnlinkedTasks(true) |
270 | | - await apiRequest('v1UsersTasksList', { page: 1, size: UNLINKED_TASKS_FETCH_SIZE, quick_start: true }, [], (resp) => { |
| 229 | + await apiRequest('v1UsersTasksList', [], { page: 1, size: UNLINKED_TASKS_FETCH_SIZE, quick_start: true }, (resp) => { |
271 | 230 | if (resp.code === 0) { |
272 | 231 | const allTasks = resp.data?.tasks || [] |
273 | 232 | const unlinked = allTasks |
@@ -334,9 +293,3 @@ export const DataProvider: React.FC<{ children: React.ReactNode }> = ({ children |
334 | 293 | </DataContext.Provider> |
335 | 294 | ); |
336 | 295 | }; |
337 | | - |
338 | | -export const useCommonData = () => { |
339 | | - const ctx = useContext(DataContext); |
340 | | - if (!ctx) throw new Error('useCommonData must be used within DataProvider'); |
341 | | - return ctx; |
342 | | -}; |
0 commit comments