feat(adtracking): 新增推广链接追踪与数据大盘,支持自定义短码、注册与下单归因及二维码物料生成

1. 数据库新增 000064_ad_tracking.sql 迁移,创建 ad_tracking_links 和 ad_tracking_clicks 表,并在 users、rental_orders 增加归因字段
2. 后端新增 adtracking 模块,挂载 GET /r/:code 302 智能重定向、点击流水异步记录、转化率/GMV聚合统计及管理接口
3. 用户认证 (auth) 与订单创建 (order) 链路贯通,实现注册用户与订单成交推广短码全链路归因
4. 前端管理后台左侧新增【推广追踪】目录,支持大盘指标总览、推广链接 CRUD、状态启停、一键复制短链及二维码下载 (PNG)
This commit is contained in:
yml2213
2026-09-10 11:05:47 +08:00
parent 33ee8408e9
commit 2b11d70ebe
25 changed files with 2304 additions and 36 deletions
+13 -6
View File
@@ -1,6 +1,7 @@
import { apiClient } from '@/shared/api/client'
import type { ApiResponse } from '@/shared/types/types'
import type { RealnameStatusValue, RiskStatus, UserStatus } from '@/shared/types/status'
import { getTrackCode } from '@/shared/utils/trackCode'
export interface AuthUser {
id: number
@@ -51,7 +52,12 @@ export async function sendSmsCode(phone: string, captchaId: string, captchaCode:
}
export async function loginWithSms(phone: string, code: string) {
const { data } = await apiClient.post<ApiResponse<LoginData>>('/auth/sms/login', { phone, code })
const trackCode = getTrackCode()
const payload: Record<string, unknown> = { phone, code }
if (trackCode) {
payload.track_code = trackCode
}
const { data } = await apiClient.post<ApiResponse<LoginData>>('/auth/sms/login', payload)
return data.data
}
@@ -64,11 +70,12 @@ export async function loginWithPassword(phone: string, password: string) {
}
export async function registerWithPassword(phone: string, code: string, password: string) {
const { data } = await apiClient.post<ApiResponse<LoginData>>('/auth/password/register', {
phone,
code,
password,
})
const trackCode = getTrackCode()
const payload: Record<string, unknown> = { phone, code, password }
if (trackCode) {
payload.track_code = trackCode
}
const { data } = await apiClient.post<ApiResponse<LoginData>>('/auth/password/register', payload)
return data.data
}