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:
@@ -0,0 +1,46 @@
|
||||
const TRACK_CODE_KEY = 'hfb_track_code'
|
||||
const TRACK_CODE_TTL_MS = 30 * 24 * 60 * 60 * 1000 // 30 天有效
|
||||
|
||||
interface StoredTrackCode {
|
||||
code: string
|
||||
timestamp: number
|
||||
}
|
||||
|
||||
export function saveTrackCode(code: string): void {
|
||||
if (!code) return
|
||||
const cleanCode = code.trim()
|
||||
if (!cleanCode) return
|
||||
try {
|
||||
const item: StoredTrackCode = {
|
||||
code: cleanCode,
|
||||
timestamp: Date.now(),
|
||||
}
|
||||
localStorage.setItem(TRACK_CODE_KEY, JSON.stringify(item))
|
||||
} catch {
|
||||
// 忽略 localStorage 存取异常
|
||||
}
|
||||
}
|
||||
|
||||
export function getTrackCode(): string {
|
||||
try {
|
||||
const raw = localStorage.getItem(TRACK_CODE_KEY)
|
||||
if (!raw) return ''
|
||||
const item: StoredTrackCode = JSON.parse(raw)
|
||||
if (!item || !item.code) return ''
|
||||
if (Date.now() - item.timestamp > TRACK_CODE_TTL_MS) {
|
||||
localStorage.removeItem(TRACK_CODE_KEY)
|
||||
return ''
|
||||
}
|
||||
return item.code
|
||||
} catch {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
export function clearTrackCode(): void {
|
||||
try {
|
||||
localStorage.removeItem(TRACK_CODE_KEY)
|
||||
} catch {
|
||||
// 忽略
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user