feat(team): 展会战报支持关联活动实时排行榜加载
这个提交包含在:
@@ -60,6 +60,7 @@ export type LoadOverviewApi = {
|
|||||||
export type LoadOverviewResult = {
|
export type LoadOverviewResult = {
|
||||||
leads: LeadEntity[];
|
leads: LeadEntity[];
|
||||||
tracks: RadarTrack[];
|
tracks: RadarTrack[];
|
||||||
|
ranks: TeamRankItem[];
|
||||||
summary: OverviewSummary;
|
summary: OverviewSummary;
|
||||||
empty: boolean;
|
empty: boolean;
|
||||||
errorMessage: string;
|
errorMessage: string;
|
||||||
@@ -68,6 +69,7 @@ export type LoadOverviewResult = {
|
|||||||
export type OverviewState = {
|
export type OverviewState = {
|
||||||
leads: LeadEntity[];
|
leads: LeadEntity[];
|
||||||
tracks: RadarTrack[];
|
tracks: RadarTrack[];
|
||||||
|
ranks: TeamRankItem[];
|
||||||
summary: OverviewSummary;
|
summary: OverviewSummary;
|
||||||
loading: boolean;
|
loading: boolean;
|
||||||
empty: boolean;
|
empty: boolean;
|
||||||
@@ -124,6 +126,9 @@ export function resolveOverviewText(key: OverviewCopyKey): string {
|
|||||||
if (key === 'unknownCountry') {
|
if (key === 'unknownCountry') {
|
||||||
return zh ? '未标注' : 'Unspecified';
|
return zh ? '未标注' : 'Unspecified';
|
||||||
}
|
}
|
||||||
|
if (key === 'rankTitle') {
|
||||||
|
return zh ? '现场排行' : 'Floor ranking';
|
||||||
|
}
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,9 +262,11 @@ export async function loadOverview(
|
|||||||
const leads = parseList(pages[0]);
|
const leads = parseList(pages[0]);
|
||||||
const tracks = parseList(pages[1]);
|
const tracks = parseList(pages[1]);
|
||||||
const summary = summarize(leads, tracks);
|
const summary = summarize(leads, tracks);
|
||||||
|
const ranks = await loadEventRanks(api);
|
||||||
return {
|
return {
|
||||||
leads,
|
leads,
|
||||||
tracks,
|
tracks,
|
||||||
|
ranks,
|
||||||
summary,
|
summary,
|
||||||
empty: leads.length === 0 && tracks.length === 0,
|
empty: leads.length === 0 && tracks.length === 0,
|
||||||
errorMessage: '',
|
errorMessage: '',
|
||||||
@@ -268,6 +275,7 @@ export async function loadOverview(
|
|||||||
return {
|
return {
|
||||||
leads: [],
|
leads: [],
|
||||||
tracks: [],
|
tracks: [],
|
||||||
|
ranks: [],
|
||||||
summary: emptySummary(),
|
summary: emptySummary(),
|
||||||
empty: false,
|
empty: false,
|
||||||
errorMessage: readErrorMessage(err),
|
errorMessage: readErrorMessage(err),
|
||||||
@@ -275,10 +283,42 @@ export async function loadOverview(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function loadEventRanks(api?: LoadOverviewApi): Promise<TeamRankItem[]> {
|
||||||
|
const fetchRank =
|
||||||
|
api != null && api.fetchTeamLiveRank != null
|
||||||
|
? api.fetchTeamLiveRank
|
||||||
|
: api == null
|
||||||
|
? fetchTeamLiveRank
|
||||||
|
: null;
|
||||||
|
if (fetchRank == null) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let eventId = '';
|
||||||
|
const fetchEvent =
|
||||||
|
api != null && api.fetchCurrentEvent != null
|
||||||
|
? api.fetchCurrentEvent
|
||||||
|
: api == null
|
||||||
|
? fetchCurrentEvent
|
||||||
|
: null;
|
||||||
|
if (fetchEvent != null) {
|
||||||
|
const current = await fetchEvent();
|
||||||
|
if (current != null && current.code != null) {
|
||||||
|
eventId = current.code;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const list = await fetchRank(eventId);
|
||||||
|
return list != null ? list : [];
|
||||||
|
} catch (_err) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function createOverviewState(): OverviewState {
|
export function createOverviewState(): OverviewState {
|
||||||
return {
|
return {
|
||||||
leads: [],
|
leads: [],
|
||||||
tracks: [],
|
tracks: [],
|
||||||
|
ranks: [],
|
||||||
summary: emptySummary(),
|
summary: emptySummary(),
|
||||||
loading: false,
|
loading: false,
|
||||||
empty: true,
|
empty: true,
|
||||||
@@ -292,6 +332,7 @@ export function applyOverviewResult(
|
|||||||
): void {
|
): void {
|
||||||
state.leads = result.leads;
|
state.leads = result.leads;
|
||||||
state.tracks = result.tracks;
|
state.tracks = result.tracks;
|
||||||
|
state.ranks = result.ranks;
|
||||||
state.summary = result.summary;
|
state.summary = result.summary;
|
||||||
state.empty = result.empty;
|
state.empty = result.empty;
|
||||||
state.errorMessage = result.errorMessage;
|
state.errorMessage = result.errorMessage;
|
||||||
@@ -315,6 +356,7 @@ export async function refreshOverview(
|
|||||||
return {
|
return {
|
||||||
leads: state.leads,
|
leads: state.leads,
|
||||||
tracks: state.tracks,
|
tracks: state.tracks,
|
||||||
|
ranks: state.ranks,
|
||||||
summary: state.summary,
|
summary: state.summary,
|
||||||
empty: state.empty,
|
empty: state.empty,
|
||||||
errorMessage: state.errorMessage,
|
errorMessage: state.errorMessage,
|
||||||
|
|||||||
在新工单中引用
屏蔽一个用户