import { jccGetImagesReq, jccGetResourcesReq, jccGetResourceTypesReq, jccLoginReq, } from '@/services/external'; import { to } from '@/utils/promise'; import { proxy } from '@umijs/max'; export type JCCResourceRange = { type: string; }; export type JCCResourceType = { label: string; value: string; }; export interface JCCResourceImage { imageID: number; name: string; createTime: Date; clusterImages: JCCClusterImage[]; } export interface JCCClusterImage { imageID: number; clusterID: string; originImageType: string; originImageID: string; originImageName: string; cards: JCCCard[]; } export interface JCCCard { originImageID: string; card: string; } export interface JCCResourceStandard { id: number; sourceKey: string; type: string; name: string; totalCount: number; availableCount: number; changeType: number; status: number; region: string; clusterId: string; costPerUnit: number; costType: string; tag: string; userId: number; createTime: Date; updateTime: Date; baseResourceSpecs: JCCBaseResourceSpec[]; } export interface JCCBaseResourceSpec { id: number; resourceSpecId: number; type: string; name: string; totalValue: number; totalUnit: string; availableValue: number; availableUnit: string; userId: number; createTime: Date; updateTime: Date; } type JCCResourceTypeStore = { token: string; types: JCCResourceType[]; images: JCCResourceImage[]; resources: JCCResourceStandard[]; currentType: string | undefined | null; jccLogin: () => void; getResourceTypes: () => void; getImages: (cardTypes: string[]) => void; getResources: (cardType: string) => void; setCurrentType: (cardType: string) => void; }; const state = proxy({ token: '', types: [], images: [], resources: [], currentType: undefined, jccLogin: async () => { const [res] = await to(jccLoginReq()); if (res && res.code === 200 && res.data) { const { tokenHead, token } = res.data; state.token = tokenHead + token; } }, getResourceTypes: async () => { const [loginRes] = await to(jccLoginReq()); if (loginRes && loginRes.code === 200 && loginRes.data) { const { tokenHead, token, jsmUserInfo } = loginRes.data; state.token = tokenHead + token; const userID = jsmUserInfo?.data?.userID; const [res] = await to(jccGetResourceTypesReq(tokenHead + token, userID)); if (res && res.code === 'OK' && res.data) { state.types = res.data.resourceRanges?.map((v: JCCResourceRange) => ({ label: v.type, value: v.type, })); } } }, getImages: async (cardTypes: string[]) => { const [res] = await to(jccGetImagesReq(state.token, cardTypes)); if (res && res.code === 'OK' && res.data) { state.images = res.data.images; } }, getResources: async (cardType: string) => { const [res] = await to(jccGetResourcesReq(state.token, cardType)); if (res && res.code === 'OK' && res.data) { state.resources = res.data.resource; } }, setCurrentType: (cardType: string | undefined | null) => { if (state.currentType !== cardType) { state.currentType = cardType; state.images = []; state.resources = []; if (cardType) { state.getImages([cardType]); state.getResources(cardType); } } }, }); export default state;