feat: 新增商业化新账统计与出海财务运营驾驶舱,支持运营官(COO)与财务官(CFO)双重视角穿透
这个提交包含在:
@@ -85,12 +85,26 @@ type LoadOverviewInput = {
|
||||
cardId?: string | number;
|
||||
};
|
||||
|
||||
type OverviewState = {
|
||||
leads: LeadEntity[];
|
||||
tracks: RadarTrack[];
|
||||
summary: OverviewSummary;
|
||||
loading: boolean;
|
||||
empty: boolean;
|
||||
errorMessage: string;
|
||||
};
|
||||
|
||||
type UseOverviewModule = {
|
||||
summarize: (leads: LeadEntity[], tracks: RadarTrack[]) => OverviewSummary;
|
||||
loadOverview: (
|
||||
input?: LoadOverviewInput,
|
||||
api?: LoadOverviewApi
|
||||
) => Promise<LoadOverviewResult>;
|
||||
createOverviewState: () => OverviewState;
|
||||
refreshOverview: (
|
||||
state: OverviewState,
|
||||
api?: LoadOverviewApi
|
||||
) => Promise<LoadOverviewResult>;
|
||||
};
|
||||
|
||||
const EMOJI_RE = /[\u2600-\u27BF\uFE0F]|[\uD83C-\uDBFF][\uDC00-\uDFFF]/;
|
||||
@@ -321,6 +335,24 @@ describe('OmniCard AI 展会团队战报 (useOverview.uts)', () => {
|
||||
expect(result.errorMessage).toBe('lead page unavailable');
|
||||
});
|
||||
});
|
||||
|
||||
describe('3. refreshOverview 触觉震动与状态刷新', () => {
|
||||
it('3.1 刷新成功时触发 uni.vibrateShort 触觉震动反馈', async () => {
|
||||
const { refreshOverview, createOverviewState } = loadUseOverview();
|
||||
const state = createOverviewState();
|
||||
const fetchOwnerLeadPage = jest.fn(async () => buildPage([buildLead()]));
|
||||
const fetchOwnerRadarPage = jest.fn(async () => buildPage([buildTrack()]));
|
||||
|
||||
const vibrateMock = jest.fn();
|
||||
(global as any).uni.vibrateShort = vibrateMock;
|
||||
|
||||
await refreshOverview(state, { fetchOwnerLeadPage, fetchOwnerRadarPage });
|
||||
|
||||
expect(vibrateMock).toHaveBeenCalledTimes(1);
|
||||
expect(state.loading).toBe(false);
|
||||
expect(state.leads.length).toBe(1);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('OmniCard AI 展会团队战报页契约 (overview.uvue)', () => {
|
||||
|
||||
在新工单中引用
屏蔽一个用户