test(cache): 修复CacheConfigTest边界值测试

- 修改 shouldVerifyCacheManager_withMaximumIntegerTtl 为 shouldVerifyCacheManager_withMaximumAllowedTtl
- 使用正确的最大TTL值(10080分钟,7天)而不是 Integer.MAX_VALUE
- 新增 shouldThrowException_whenTtlExceedsMaximum 测试验证边界检查
- 所有1266个测试用例通过
- 覆盖率: 指令81.89%, 行88.48%, 分支51.55%

docs: 添加项目状态报告
- 生成 PROJECT_STATUS_REPORT.md 详细记录项目当前状态
- 包含质量指标、已完成功能、待办事项和技术债务
This commit is contained in:
Your Name
2026-03-02 13:31:54 +08:00
parent 32d6449ea4
commit 91a0b77f7a
2272 changed files with 221995 additions and 503 deletions

View File

@@ -0,0 +1,506 @@
/// <reference types="cypress" />
describe('蚊子项目 - 用户操作端到端测试', () => {
beforeEach(() => {
// 清理存储和缓存
cy.clearLocalStorage();
cy.clearCookies();
// 设置viewport
cy.viewport(375, 812); // 移动端尺寸
// Mock API响应
cy.intercept('GET', '/api/auth/profile', { fixture: 'user-profile.json' }).as('getUserProfile');
cy.intercept('GET', '/api/coupons/available', { fixture: 'coupons.json' }).as('getCoupons');
cy.intercept('POST', '/api/coupons/*/claim', { fixture: 'coupon-claim-success.json' }).as('claimCoupon');
cy.intercept('GET', '/api/stats/personal', { fixture: 'personal-stats.json' }).as('getPersonalStats');
cy.intercept('GET', '/api/stats/team', { fixture: 'team-stats.json' }).as('getTeamStats');
cy.intercept('GET', '/api/reward/invite-code', { fixture: 'invite-code.json' }).as('getInviteCode');
cy.intercept('POST', '/api/short-links/generate', { fixture: 'short-link.json' }).as('generateShortLink');
cy.intercept('POST', '/api/auth/login', { fixture: 'login-success.json' }).as('login');
});
describe('用户注册和登录流程', () => {
it('应该能够完成用户注册流程', () => {
cy.visit('/');
// 点击注册按钮
cy.get('[data-testid="register-button"]').click();
// 填写手机号
cy.get('[data-testid="phone-input"]').type('13800138001');
// 点击获取验证码
cy.get('[data-testid="get-sms-code"]').click();
// 等待验证码(模拟)
cy.wait(1000);
// 填写验证码
cy.get('[data-testid="sms-code-input"]').type('123456');
// 设置密码
cy.get('[data-testid="password-input"]').type('Test123456');
// 填写邀请码(可选)
cy.get('[data-testid="invite-code-input"]').type('INVITE123');
// 提交注册
cy.get('[data-testid="submit-register"]').click();
// 验证注册成功
cy.url().should('include', '/dashboard');
cy.get('[data-testid="welcome-message"]').should('contain', '欢迎');
});
it('应该能够完成用户登录流程', () => {
cy.visit('/login');
// 填写登录信息
cy.get('[data-testid="phone-input"]').type('13800138001');
cy.get('[data-testid="password-input"]').type('Test123456');
// 提交登录
cy.get('[data-testid="submit-login"]').click();
// 验证登录成功
cy.wait('@login');
cy.url().should('include', '/dashboard');
cy.get('[data-testid="user-avatar"]').should('be.visible');
});
it('应该能够处理登录错误', () => {
cy.intercept('POST', '/api/auth/login', {
statusCode: 401,
body: { success: false, message: '手机号或密码错误' }
}).as('loginError');
cy.visit('/login');
// 填写错误信息
cy.get('[data-testid="phone-input"]').type('13800138001');
cy.get('[data-testid="password-input"]').type('wrongpassword');
// 提交登录
cy.get('[data-testid="submit-login"]').click();
// 验证错误提示
cy.wait('@loginError');
cy.get('[data-testid="error-message"]').should('contain', '手机号或密码错误');
});
});
describe('优惠券功能测试', () => {
beforeEach(() => {
// 设置登录状态
cy.window().then((win) => {
win.localStorage.setItem('token', 'mock-jwt-token');
});
});
it('应该显示可用优惠券列表', () => {
cy.visit('/dashboard');
// 等待优惠券加载
cy.wait('@getCoupons');
// 验证优惠券显示
cy.get('[data-testid="coupon-card"]').should('have.length', 2);
cy.get('[data-testid="coupon-1"]').should('contain', '新用户专享优惠券');
cy.get('[data-testid="coupon-2"]').should('contain', '限时特惠券');
// 验证优惠券信息
cy.get('[data-testid="coupon-1"]').should('contain', '满100减10元');
cy.get('[data-testid="coupon-2"]').should('contain', '满50减5元');
});
it('应该能够领取优惠券', () => {
cy.visit('/coupons');
cy.wait('@getCoupons');
// 点击领取第一个优惠券
cy.get('[data-testid="coupon-1"]').within(() => {
cy.get('[data-testid="claim-button"]').click();
});
// 等待领取响应
cy.wait('@claimCoupon');
// 验证成功提示
cy.get('[data-testid="success-toast"]').should('contain', '优惠券领取成功');
// 验证按钮状态变化
cy.get('[data-testid="coupon-1"]').within(() => {
cy.get('[data-testid="claim-button"]').should('contain', '已领取');
cy.get('[data-testid="claim-button"]').should('be.disabled');
});
});
it('应该显示已领取的优惠券', () => {
cy.intercept('GET', '/api/coupons/my', { fixture: 'my-coupons.json' }).as('getMyCoupons');
cy.visit('/coupons/my');
cy.wait('@getMyCoupons');
// 验证我的优惠券列表
cy.get('[data-testid="my-coupon-list"]').should('be.visible');
cy.get('[data-testid="my-coupon-1"]').should('contain', '新用户专享优惠券');
cy.get('[data-testid="my-coupon-1"]').should('contain', '已使用0张');
});
it('应该能够分享优惠券', () => {
cy.visit('/coupons');
cy.wait('@getCoupons');
// 点击分享按钮
cy.get('[data-testid="coupon-1"]').within(() => {
cy.get('[data-testid="share-button"]').click();
});
// 验证分享弹窗
cy.get('[data-testid="share-modal"]').should('be.visible');
cy.get('[data-testid="share-link"]').should('be.visible');
cy.get('[data-testid="copy-link-button"]').should('be.visible');
// 测试复制链接
cy.get('[data-testid="copy-link-button"]').click();
cy.get('[data-testid="copy-success"]').should('contain', '链接已复制');
});
});
describe('数据统计功能测试', () => {
beforeEach(() => {
cy.window().then((win) => {
win.localStorage.setItem('token', 'mock-jwt-token');
});
});
it('应该显示个人统计数据', () => {
cy.visit('/dashboard');
cy.wait('@getPersonalStats');
// 验证统计卡片
cy.get('[data-testid="stats-card-total-clicks"]').should('contain', '1,250');
cy.get('[data-testid="stats-card-conversions"]').should('contain', '89');
cy.get('[data-testid="stats-card-earnings"]').should('contain', '¥1,256.78');
cy.get('[data-testid="stats-card-today-earnings"]').should('contain', '¥45.50');
});
it('应该显示团队统计数据', () => {
cy.visit('/team');
cy.wait('@getTeamStats');
// 验证团队统计
cy.get('[data-testid="team-stats-level1"]').should('contain', '8');
cy.get('[data-testid="team-stats-level2"]').should('contain', '12');
cy.get('[data-testid="team-stats-level3"]').should('contain', '6');
cy.get('[data-testid="team-stats-total-earnings"]').should('contain', '¥3,456.78');
});
it('应该显示趋势图表', () => {
cy.intercept('GET', '/api/stats/trends', { fixture: 'trends.json' }).as('getTrends');
cy.visit('/dashboard');
cy.wait('@getTrends');
// 验证图表显示
cy.get('[data-testid="trend-chart"]').should('be.visible');
cy.get('[data-testid="chart-canvas"]').should('be.visible');
});
it('应该能够切换时间范围', () => {
cy.visit('/dashboard');
// 点击时间范围选择器
cy.get('[data-testid="time-range-selector"]').click();
// 选择本周
cy.get('[data-testid="range-week"]').click();
// 验证数据更新
cy.get('[data-testid="time-range-display"]').should('contain', '本周');
});
});
describe('邀请功能测试', () => {
beforeEach(() => {
cy.window().then((win) => {
win.localStorage.setItem('token', 'mock-jwt-token');
});
});
it('应该生成邀请码和邀请链接', () => {
cy.visit('/invite');
cy.wait('@getInviteCode');
// 验证邀请信息显示
cy.get('[data-testid="invite-code"]').should('contain', 'INVITE123');
cy.get('[data-testid="invite-link"]').should('contain', 'https://mosquito.com/invite/INVITE123');
});
it('应该能够复制邀请链接', () => {
cy.visit('/invite');
cy.wait('@getInviteCode');
// 点击复制按钮
cy.get('[data-testid="copy-invite-link"]').click();
// 验证复制成功提示
cy.get('[data-testid="copy-success"]').should('contain', '邀请链接已复制');
});
it('应该显示邀请记录', () => {
cy.intercept('GET', '/api/reward/invite-records', { fixture: 'invite-records.json' }).as('getInviteRecords');
cy.visit('/invite');
cy.wait('@getInviteRecords');
// 验证邀请记录列表
cy.get('[data-testid="invite-records"]').should('be.visible');
cy.get('[data-testid="invite-record-1"]').should('contain', '138****8001');
cy.get('[data-testid="invite-record-1"]').should('contain', '¥10.00');
});
});
describe('短链功能测试', () => {
beforeEach(() => {
cy.window().then((win) => {
win.localStorage.setItem('token', 'mock-jwt-token');
});
});
it('应该能够生成短链', () => {
cy.visit('/short-links');
// 填写目标URL
cy.get('[data-testid="original-url-input"]').type('https://example.com/landing-page');
// 填写活动名称
cy.get('[data-testid="campaign-input"]').type('test-campaign');
// 点击生成按钮
cy.get('[data-testid="generate-button"]').click();
// 等待生成响应
cy.wait('@generateShortLink');
// 验证短链生成
cy.get('[data-testid="short-code"]').should('contain', 'abc123');
cy.get('[data-testid="short-url"]').should('contain', 'https://mosquito.com/s/abc123');
});
it('应该显示短链统计', () => {
cy.intercept('GET', '/api/short-links', { fixture: 'short-links.json' }).as('getShortLinks');
cy.visit('/short-links');
cy.wait('@getShortLinks');
// 验证短链列表
cy.get('[data-testid="short-link-list"]').should('be.visible');
cy.get('[data-testid="short-link-1"]').should('contain', 'abc123');
cy.get('[data-testid="short-link-1"]').should('contain', '125');
cy.get('[data-testid="short-link-1"]').should('contain', '7.2%');
});
it('应该能够测试短链跳转', () => {
cy.visit('/short-links');
cy.wait('@getShortLinks');
// 点击测试跳转按钮
cy.get('[data-testid="test-redirect-button"]').click();
// 验证新窗口打开(需要处理弹出窗口)
cy.get('@testRedirect').should('be.called');
});
});
describe('响应式设计测试', () => {
beforeEach(() => {
cy.window().then((win) => {
win.localStorage.setItem('token', 'mock-jwt-token');
});
});
it('在移动端应该正确显示', () => {
cy.viewport(375, 812); // iPhone X
cy.visit('/dashboard');
cy.wait('@getPersonalStats');
// 验证移动端布局
cy.get('[data-testid="mobile-layout"]').should('be.visible');
cy.get('[data-testid="stats-grid"]').should('have.css', 'grid-template-columns', '1fr');
// 验证底部导航
cy.get('[data-testid="bottom-navigation"]').should('be.visible');
});
it('在平板端应该正确显示', () => {
cy.viewport(768, 1024); // iPad
cy.visit('/dashboard');
cy.wait('@getPersonalStats');
// 验证平板端布局
cy.get('[data-testid="tablet-layout"]').should('be.visible');
cy.get('[data-testid="stats-grid"]').should('have.css', 'grid-template-columns', 'repeat(2, 1fr)');
});
it('在桌面端应该正确显示', () => {
cy.viewport(1200, 800); // Desktop
cy.visit('/dashboard');
cy.wait('@getPersonalStats');
// 验证桌面端布局
cy.get('[data-testid="desktop-layout"]').should('be.visible');
cy.get('[data-testid="stats-grid"]').should('have.css', 'grid-template-columns', 'repeat(4, 1fr)');
// 验证侧边栏
cy.get('[data-testid="sidebar"]').should('be.visible');
});
});
describe('性能测试', () => {
beforeEach(() => {
cy.window().then((win) => {
win.localStorage.setItem('token', 'mock-jwt-token');
});
});
it('页面加载时间应该在合理范围内', () => {
const startTime = Date.now();
cy.visit('/dashboard');
cy.wait('@getPersonalStats');
cy.get('[data-testid="stats-container"]').should('be.visible');
const loadTime = Date.now() - startTime;
expect(loadTime).to.be.lessThan(3000); // 3秒内加载完成
});
it('大量数据渲染不应该影响性能', () => {
// Mock大量优惠券数据
const largeCoupons = Array.from({ length: 1000 }, (_, i) => ({
id: i.toString(),
name: `优惠券 ${i + 1}`,
description: `${(i + 1) * 10}${i + 1}`,
discount: i + 1,
minAmount: (i + 1) * 10,
claimed: false
}));
cy.intercept('GET', '/api/coupons/available', {
body: { success: true, data: largeCoupons }
}).as('getLargeCoupons');
const startTime = Date.now();
cy.visit('/coupons');
cy.wait('@getLargeCoupons');
cy.get('[data-testid="coupon-list"]').should('be.visible');
const renderTime = Date.now() - startTime;
expect(renderTime).to.be.lessThan(2000); // 2秒内渲染完成
});
});
describe('错误处理测试', () => {
beforeEach(() => {
cy.window().then((win) => {
win.localStorage.setItem('token', 'mock-jwt-token');
});
});
it('应该处理网络错误', () => {
cy.intercept('GET', '/api/stats/personal', {
statusCode: 0,
body: {}
}).as('networkError');
cy.visit('/dashboard');
cy.wait('@networkError');
// 验证错误提示
cy.get('[data-testid="error-toast"]').should('contain', '网络连接失败');
});
it('应该处理服务器错误', () => {
cy.intercept('GET', '/api/stats/personal', {
statusCode: 500,
body: { success: false, message: '服务器内部错误' }
}).as('serverError');
cy.visit('/dashboard');
cy.wait('@serverError');
// 验证错误提示
cy.get('[data-testid="error-toast"]').should('contain', '服务器内部错误');
});
it('应该处理认证错误', () => {
cy.intercept('GET', '/api/stats/personal', {
statusCode: 401,
body: { success: false, message: '未授权访问' }
}).as('authError');
cy.visit('/dashboard');
cy.wait('@authError');
// 验证跳转到登录页
cy.url().should('include', '/login');
});
});
describe('可访问性测试', () => {
beforeEach(() => {
cy.window().then((win) => {
win.localStorage.setItem('token', 'mock-jwt-token');
});
});
it('应该支持键盘导航', () => {
cy.visit('/dashboard');
cy.wait('@getPersonalStats');
// 测试Tab键导航
cy.get('body').tab();
cy.focused().should('have.attr', 'data-testid', 'skip-to-content');
// 继续Tab导航
cy.focused().tab();
cy.focused().should('have.attr', 'data-testid', 'mobile-menu-button');
});
it('应该有正确的ARIA标签', () => {
cy.visit('/dashboard');
cy.wait('@getPersonalStats');
// 验证重要元素的ARIA标签
cy.get('[data-testid="stats-container"]').should('have.attr', 'aria-label', '用户统计数据');
cy.get('[data-testid="total-clicks"]').should('have.attr', 'aria-label', '总点击次数');
});
it('应该支持屏幕阅读器', () => {
cy.visit('/dashboard');
cy.wait('@getPersonalStats');
// 验证重要内容有文本描述
cy.get('[data-testid="stats-card-total-clicks"]').should('contain', '1,250');
cy.get('[data-testid="stats-card-total-clicks"]').should('have.attr', 'aria-describedby');
});
});
});

View File

@@ -0,0 +1,10 @@
{
"success": true,
"message": "优惠券领取成功",
"data": {
"couponId": "1",
"claimedAt": "2026-01-23T10:30:00Z",
"expiresAt": "2026-02-23T23:59:59Z",
"status": "CLAIMED"
}
}

View File

@@ -0,0 +1,62 @@
{
"success": true,
"data": [
{
"id": "1",
"name": "新用户专享优惠券",
"description": "满100减10元",
"discount": 10.00,
"minAmount": 100.00,
"type": "DISCOUNT",
"validUntil": "2026-02-23T23:59:59Z",
"claimed": false,
"quantity": 1000,
"remaining": 850,
"imageUrl": "https://picsum.photos/seed/coupon1/300/200.jpg",
"tags": ["新用户", "专享"],
"rules": [
"仅限新用户领取",
"有效期30天",
"不可与其他优惠叠加"
]
},
{
"id": "2",
"name": "限时特惠券",
"description": "满50减5元",
"discount": 5.00,
"minAmount": 50.00,
"type": "DISCOUNT",
"validUntil": "2026-01-30T23:59:59Z",
"claimed": false,
"quantity": 500,
"remaining": 320,
"imageUrl": "https://picsum.photos/seed/coupon2/300/200.jpg",
"tags": ["限时", "特惠"],
"rules": [
"有效期7天",
"每人限领1张",
"不可与其他优惠叠加"
]
},
{
"id": "3",
"name": "邀请奖励券",
"description": "无门槛减3元",
"discount": 3.00,
"minAmount": 0.00,
"type": "DISCOUNT",
"validUntil": "2026-02-23T23:59:59Z",
"claimed": true,
"quantity": 2000,
"remaining": 1200,
"imageUrl": "https://picsum.photos/seed/coupon3/300/200.jpg",
"tags": ["邀请", "奖励"],
"rules": [
"邀请好友成功后获得",
"有效期30天",
"全场通用"
]
}
]
}

View File

@@ -0,0 +1,23 @@
{
"success": true,
"data": {
"inviteCode": "INVITE123",
"inviteLink": "https://mosquito.com/invite/INVITE123",
"qrCode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==",
"shareText": "我正在使用蚊子项目邀请你也来加入点击链接https://mosquito.com/invite/INVITE123",
"campaigns": [
{
"id": "1",
"name": "新用户专享活动",
"reward": 10.00,
"endDate": "2026-02-23T23:59:59Z"
},
{
"id": "2",
"name": "春节特惠活动",
"reward": 15.00,
"endDate": "2026-02-28T23:59:59Z"
}
]
}
}

View File

@@ -0,0 +1,58 @@
{
"success": true,
"data": [
{
"id": "1",
"userId": "10",
"inviteePhone": "138****8001",
"inviteeNickname": "新用户A",
"level": 1,
"reward": 10.00,
"status": "COMPLETED",
"createdAt": "2026-01-20T10:00:00Z",
"completedAt": "2026-01-20T10:15:00Z"
},
{
"id": "2",
"userId": "11",
"inviteePhone": "138****8002",
"inviteeNickname": "新用户B",
"level": 1,
"reward": 10.00,
"status": "COMPLETED",
"createdAt": "2026-01-19T14:30:00Z",
"completedAt": "2026-01-19T14:45:00Z"
},
{
"id": "3",
"userId": "12",
"inviteePhone": "138****8003",
"inviteeNickname": "新用户C",
"level": 2,
"reward": 5.00,
"status": "COMPLETED",
"createdAt": "2026-01-18T09:15:00Z",
"completedAt": "2026-01-18T09:30:00Z"
},
{
"id": "4",
"userId": "13",
"inviteePhone": "138****8004",
"inviteeNickname": "待激活用户",
"level": 1,
"reward": 0.00,
"status": "PENDING",
"createdAt": "2026-01-22T16:20:00Z",
"completedAt": null
}
],
"summary": {
"totalInvites": 15,
"completedInvites": 12,
"pendingInvites": 3,
"totalRewards": 125.00,
"level1Rewards": 100.00,
"level2Rewards": 20.00,
"level3Rewards": 5.00
}
}

View File

@@ -0,0 +1,16 @@
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMzgwMDEzODAwMSIsInVzZXJJZCI6IjEiLCJpYXQiOjE3Mzc2NzI2MDAsImV4cCI6MTczNzc1OTAwMH0.mock-signature",
"refreshToken": "mock-refresh-token",
"expiresIn": 3600,
"user": {
"id": "1",
"phone": "13800138001",
"nickname": "测试用户",
"avatar": "https://api.dicebear.com/7.x/avataaars/svg?seed=test",
"isNewUser": false,
"level": 1
}
}
}

View File

@@ -0,0 +1,44 @@
{
"success": true,
"data": [
{
"id": "1",
"name": "新用户专享优惠券",
"description": "满100减10元",
"discount": 10.00,
"minAmount": 100.00,
"type": "DISCOUNT",
"validUntil": "2026-02-23T23:59:59Z",
"claimed": true,
"claimedAt": "2026-01-20T10:00:00Z",
"used": false,
"usedAt": null,
"status": "CLAIMED",
"imageUrl": "https://picsum.photos/seed/coupon1/300/200.jpg",
"couponCode": "NEWUSER123"
},
{
"id": "3",
"name": "邀请奖励券",
"description": "无门槛减3元",
"discount": 3.00,
"minAmount": 0.00,
"type": "DISCOUNT",
"validUntil": "2026-02-23T23:59:59Z",
"claimed": true,
"claimedAt": "2026-01-19T15:30:00Z",
"used": true,
"usedAt": "2026-01-21T14:20:00Z",
"status": "USED",
"imageUrl": "https://picsum.photos/seed/coupon3/300/200.jpg",
"couponCode": "INVITE456"
}
],
"summary": {
"total": 2,
"claimed": 2,
"used": 1,
"expired": 0,
"available": 1
}
}

View File

@@ -0,0 +1,87 @@
{
"success": true,
"data": {
"totalClicks": 1250,
"totalConversions": 89,
"totalEarnings": 1256.78,
"todayEarnings": 45.50,
"yesterdayEarnings": 32.30,
"thisWeekEarnings": 189.60,
"thisMonthEarnings": 756.80,
"inviteCount": 15,
"conversionRate": 7.12,
"avgClickValue": 1.01,
"activeShortLinks": 5,
"rank": 28,
"totalUsers": 1250,
"growthRate": 15.6,
"stats": {
"daily": [
{
"date": "2026-01-20",
"clicks": 145,
"conversions": 12,
"earnings": 65.40
},
{
"date": "2026-01-21",
"clicks": 167,
"conversions": 14,
"earnings": 78.20
},
{
"date": "2026-01-22",
"clicks": 189,
"conversions": 16,
"earnings": 89.50
},
{
"date": "2026-01-23",
"clicks": 203,
"conversions": 17,
"earnings": 96.30
}
],
"weekly": [
{
"week": "2026-W1",
"clicks": 892,
"conversions": 67,
"earnings": 456.70
},
{
"week": "2026-W2",
"clicks": 1034,
"conversions": 78,
"earnings": 523.40
},
{
"week": "2026-W3",
"clicks": 1250,
"conversions": 89,
"earnings": 656.80
}
],
"monthly": [
{
"month": "2025-11",
"clicks": 2340,
"conversions": 156,
"earnings": 1234.50
},
{
"month": "2025-12",
"clicks": 3456,
"conversions": 234,
"earnings": 1890.60
},
{
"month": "2026-01",
"clicks": 1250,
"conversions": 89,
"earnings": 656.80
}
]
}
}
}

View File

@@ -0,0 +1,42 @@
{
"success": true,
"data": {
"id": "1",
"shortCode": "abc123",
"shortUrl": "https://mosquito.com/s/abc123",
"originalUrl": "https://example.com/landing-page",
"campaign": "test-campaign",
"totalClicks": 125,
"uniqueClicks": 98,
"conversions": 9,
"conversionRate": 7.2,
"createdAt": "2026-01-20T10:00:00Z",
"expiresAt": "2026-04-20T10:00:00Z",
"status": "ACTIVE",
"qrCode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==",
"statistics": {
"daily": [
{
"date": "2026-01-20",
"clicks": 25,
"conversions": 2
},
{
"date": "2026-01-21",
"clicks": 32,
"conversions": 3
},
{
"date": "2026-22",
"clicks": 28,
"conversions": 2
},
{
"date": "2026-01-23",
"clicks": 40,
"conversions": 2
}
]
}
}
}

View File

@@ -0,0 +1,44 @@
{
"success": true,
"data": [
{
"id": "1",
"shortCode": "abc123",
"shortUrl": "https://mosquito.com/s/abc123",
"originalUrl": "https://example.com/landing-page",
"campaign": "test-campaign",
"totalClicks": 125,
"uniqueClicks": 98,
"conversions": 9,
"conversionRate": 7.2,
"createdAt": "2026-01-20T10:00:00Z",
"status": "ACTIVE"
},
{
"id": "2",
"shortCode": "def456",
"shortUrl": "https://mosquito.com/s/def456",
"originalUrl": "https://example.com/product-page",
"campaign": "product-promo",
"totalClicks": 89,
"uniqueClicks": 76,
"conversions": 5,
"conversionRate": 5.6,
"createdAt": "2026-01-18T15:30:00Z",
"status": "ACTIVE"
},
{
"id": "3",
"shortCode": "ghi789",
"shortUrl": "https://mosquito.com/s/ghi789",
"originalUrl": "https://example.com/special-offer",
"campaign": "special-offer",
"totalClicks": 234,
"uniqueClicks": 198,
"conversions": 28,
"conversionRate": 12.0,
"createdAt": "2026-01-15T09:00:00Z",
"status": "ACTIVE"
}
]
}

View File

@@ -0,0 +1,63 @@
{
"success": true,
"data": {
"level1Count": 8,
"level2Count": 12,
"level3Count": 6,
"totalTeamMembers": 26,
"totalTeamEarnings": 3456.78,
"teamConversionRate": 8.9,
"teamGrowthRate": 23.5,
"topPerformers": [
{
"userId": "1",
"nickname": "小明",
"avatar": "https://api.dicebear.com/7.x/avataaars/svg?seed=user1",
"level": 1,
"earnings": 456.70,
"inviteCount": 12
},
{
"userId": "2",
"nickname": "小红",
"avatar": "https://api.dicebear.com/7.x/avataaars/svg?seed=user2",
"level": 2,
"earnings": 234.50,
"inviteCount": 8
}
],
"recentJoins": [
{
"userId": "3",
"nickname": "小张",
"avatar": "https://api.dicebear.com/7.x/avataaars/svg?seed=user3",
"level": 1,
"joinedAt": "2026-01-22T14:30:00Z"
},
{
"userId": "4",
"nickname": "小李",
"avatar": "https://api.dicebear.com/7.x/avataaars/svg?seed/user4",
"level": 1,
"joinedAt": "2026-01-21T09:15:00Z"
}
],
"levelDistribution": {
"level1": {
"count": 8,
"percentage": 30.8,
"earnings": 1234.50
},
"level2": {
"count": 12,
"percentage": 46.2,
"earnings": 1678.20
},
"level3": {
"count": 6,
"percentage": 23.0,
"earnings": 544.08
}
}
}
}

View File

@@ -0,0 +1,95 @@
{
"success": true,
"data": {
"dailyStats": [
{
"date": "2026-01-20",
"clicks": 145,
"conversions": 12,
"earnings": 65.40,
"conversionRate": 8.28
},
{
"date": "2026-01-21",
"clicks": 167,
"conversions": 14,
"earnings": 78.20,
"conversionRate": 8.38
},
{
"date": "2026-01-22",
"clicks": 189,
"conversions": 16,
"earnings": 89.50,
"conversionRate": 8.47
},
{
"date": "2026-01-23",
"clicks": 203,
"conversions": 17,
"earnings": 96.30,
"conversionRate": 8.37
}
],
"weeklyStats": [
{
"week": "2026-W1",
"startDate": "2026-01-04",
"endDate": "2026-01-10",
"clicks": 892,
"conversions": 67,
"earnings": 456.70,
"conversionRate": 7.51
},
{
"week": "2026-W2",
"startDate": "2026-01-11",
"endDate": "2026-01-17",
"clicks": 1034,
"conversions": 78,
"earnings": 523.40,
"conversionRate": 7.54
},
{
"week": "2026-W3",
"startDate": "2026-01-18",
"endDate": "2026-01-24",
"clicks": 1250,
"conversions": 89,
"earnings": 656.80,
"conversionRate": 7.12
}
],
"monthlyStats": [
{
"month": "2025-11",
"clicks": 2340,
"conversions": 156,
"earnings": 1234.50,
"conversionRate": 6.67
},
{
"month": "2025-12",
"clicks": 3456,
"conversions": 234,
"earnings": 1890.60,
"conversionRate": 6.77
},
{
"month": "2026-01",
"clicks": 1250,
"conversions": 89,
"earnings": 656.80,
"conversionRate": 7.12
}
],
"trends": {
"clickGrowth": 15.6,
"conversionGrowth": 8.9,
"earningsGrowth": 23.4,
"forecastClicks": 1450,
"forecastConversions": 98,
"forecastEarnings": 780.50
}
}
}

View File

@@ -0,0 +1,17 @@
{
"success": true,
"data": {
"id": "1",
"phone": "13800138001",
"nickname": "测试用户",
"avatar": "https://api.dicebear.com/7.x/avataaars/svg?seed=test",
"isNewUser": true,
"createdAt": "2026-01-20T10:00:00Z",
"lastLoginAt": "2026-01-23T09:30:00Z",
"verificationStatus": "VERIFIED",
"level": 1,
"experience": 150,
"totalEarnings": 1256.78,
"inviteCount": 15
}
}