浅念
|
28fad05031
|
feat(admin): 侧栏隐藏系统名文字只留K标,全局系统名改为客迹
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 18:16:40 +08:00 |
|
浅念
|
8a3003bf4a
|
feat(admin): 侧栏/顶栏logo换成客迹K标(裁自品牌logo,浅深背景通用)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 18:05:13 +08:00 |
|
浅念
|
8aea3d8916
|
feat(admin): 登录表单恢复Art Design Pro原版样式(紧凑40px/左对齐/无图标),左侧保留品牌区
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 17:16:54 +08:00 |
|
浅念
|
803fc3d611
|
feat(admin): 登录表单按验收反馈精简——去标签/去底部文案/滑块与输入框等高
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 17:14:04 +08:00 |
|
浅念
|
d7121640f5
|
fix(admin): 登录样式构建修复——flex-cc换核心工具类,注册/忘记密码页补固定浅色
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 16:47:30 +08:00 |
|
浅念
|
b9eaa5a32a
|
feat(admin): 登录表单区对齐客迹V1——移除账号下拉/注册/忘记密码入口,固定浅色
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 16:30:19 +08:00 |
|
浅念
|
8c5c913b1a
|
chore(admin): 入库登录页品牌区素材(白字logo+深蓝背景图)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 16:22:54 +08:00 |
|
浅念
|
d7e250e1fb
|
feat(admin): 登录左侧品牌区重做为客迹V1深蓝视觉
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 16:19:34 +08:00 |
|
浅念
|
8841c85c20
|
feat(admin): 登录页i18n文案对齐客迹V1
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 16:13:45 +08:00 |
|
浅念
|
62aee34827
|
feat(admin): 渠道徽章显示渠道词——付费广告/AI引用等一目了然
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 15:08:47 +08:00 |
|
浅念
|
8f20d8d9a2
|
feat(admin): 数据总览按客迹视觉V1重做(周期卡/趋势双线/渠道条形/最近访问)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 12:18:37 +08:00 |
|
浅念
|
22d89a3f42
|
feat: 移动端设备信息最大化采集(型号/UA-CH/视口/方向/触点/内存/网络/深浅色)
SDK:buildEnvContext 同步扩展 12 键(dpr/viewport/orientation/maxTouchPoints/
deviceMemory/languages/colorScheme/standalone/network downlink·rtt·saveData/
微信版本),逐键 try/catch 静默缺则不挂;新增 collectHighEntropyHints(UA-CH
model/platformVersion/architecture/bitness),init 后 Promise.race 2s 超时
异步并入 __ctk_ctx——批次 context flush 时读取,不阻塞首屏。
后端:Visitor 加 device_model/env_extra(迁移 0005);ingest 首批快照
EXTENDED_ENV_KEYS 白名单(值截 100),非首批不覆盖、唯 device_model 空且
本批有值时补填一次(晚到 hints);列表/详情 API 随行输出。
前端:详情访问环境卡设备行升级显示型号(手机 · Pixel 7),追加像素比/
视口/屏幕方向/触点/内存/网络质量/深浅色/微信版本行(env_extra 逐键判空,
旧数据整块不显示);列表设备列主行拼型号(手机·Pixel 7)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 19:12:20 +08:00 |
|
浅念
|
7f2a746f66
|
fix: 排序作用于组内事件+时间线限高滚动+UTM别名归一消冲突误报
- attribution.py:新增 _canon 归一(小写/去协议与域名后缀/别名表 fb→facebook、百度→baidu 等/仅留字母数字汉字),
冲突判定改为两路各自归一后比较——同源升级 combined 并在 detail 记 utm_source 原文,仍不同才 conflict
- detail.vue:orderedDays 组内会话/事件同步翻转(desc=组与组内都最新在前,asc=都最早在前);
.tl-body 限高 calc(100vh - 380px) 卡内滚动,日期组头随内容滚动
- test_attribution.py:+4 用例(fb↔facebook、chatgpt.com↔ChatGPT、google↔facebook 仍冲突、百度↔baidu)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 18:39:02 +08:00 |
|
浅念
|
50faa73cf9
|
feat(admin): 访客详情页按客迹视觉V1重设计(头部卡/统计卡/时间线/来源证据三口径/访问环境)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 18:19:31 +08:00 |
|
浅念
|
008d9277d8
|
feat: 来源组合显示——徽章/识别卡拼装落地页·国家·语言(搜索意图线索)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 17:43:37 +08:00 |
|
浅念
|
f9c8c354ae
|
feat(admin): 来源归因展示——渠道徽章/筛选/来源识别卡/渠道构成图
- 类型:VisitorRow 补 channel/platform/variant/search_term/resolution,新增
AttributionInfo/AttributionBlock,详情响应带 attribution 块;dashboard
响应补 channels(ChannelItem)
- 工具:CHANNEL_LABELS 八渠道元数据 + channelBadge 徽章串(搜索词/标签/
冲突后缀,未归因回 —)
- 访客列表:首触来源列升级渠道徽章(first_source 进 tooltip 兜底),
筛选栏加渠道下拉(channel= 枚举)
- 访客详情:首触来源升级来源识别卡(渠道徽章/平台/国家站/搜索词显著
展示,label_only/conflict 诚实标注,冲突并列两路证据文本渲染),
无归因旧数据降级原 first_source 口径
- 总览:来源饼图改渠道构成(标签/颜色按渠道绑定 CHANNEL_LABELS),
下方保留平台明细小表(原 sources 域名口径)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 17:19:31 +08:00 |
|
浅念
|
59de51c062
|
feat: 来源归因规则引擎(渠道/AI/搜索词/诚实状态/历史重算)
- constants 规则库 v1:AI/引擎/社交域名表、搜索词参数白名单、付费点击参数、
应用内 UA 标记、CHANNELS 枚举;page_view 白名单开 nav_type/prerendering
- services/attribution.classify 纯函数:付费>AI>引擎>社交>referral 分层,
UTM 证据叠加(combined/conflict/label_only),应用内 UA 叠加/兜底,
引擎 TLD 国家 variant,搜索词白名单提取(Google 恒空不虚构)
- SourceClassification 派生表(迁移 0004):first_touch/session_entry 双 scope,
rule_version 可追溯
- ingest 增量 best-effort:首访客/新会话时分类落库(savepoint+静默,
失败不影响采集);validation 对 page_view referrer 完整 URL 参数清洗+截500
- recompute_attribution 命令:全量/按站幂等重算
- API:访客列表归因五字段+channel 筛选、详情 attribution 块(含最近5会话入口)、
dashboard channels 聚合(sources 原口径保留);TS VisitorListParams 加 channel
- 测试 97 → 124(引擎20 + 集成/接口7)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 17:03:15 +08:00 |
|
浅念
|
21ca43248a
|
feat: 原始上报数据存储(raw_batch 表/脱敏/访客关联/详情页 Tab/30天清理)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 15:42:06 +08:00 |
|
浅念
|
1cadee16bd
|
feat(admin): 后台瘦身——数据总览为默认页/精简菜单/顶栏去演示组件
- 默认页:HOME_PAGE_PATH 指向 /tracker/dashboard,登录/根路径/logo 点击统一落数据总览
- 菜单:tracker 路由扁平为顶级三项(数据总览/访客管理/站点管理),访客详情保持 hidden;
移除模板演示路由(工作台/分析页、结果页、异常页、系统管理 mock 页),直达返回 404;
system 仅保留隐藏的个人中心路由供头像菜单使用
- 顶栏:配置化停用通知铃铛/快捷入口/全局搜索(含 Ctrl+K)/聊天窗口,保留主题/语言/全屏/设置与头像菜单
- worktab:命中 catch-all 404 的遗留标签视为无效自动清理(如旧"工作台"标签)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 15:15:52 +08:00 |
|
浅念
|
58659b0ec9
|
feat: 访客列表站点归属显示与筛选
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 14:33:39 +08:00 |
|
浅念
|
1cb199e99e
|
fix(admin): 详情页时间线兜底/事件组件抽取/失败态区分/换访客清理
- timelineSessionSource 查不到会话摘要时改显示 —:无事实依据不做
"直接访问"断言(sessionSourceText 内的直接访问是后端同口径语义,保留)
- 抽取 EventTimeline 子组件(components/EventTimeline.vue):
轨迹 Tab 与会话抽屉的 page_view/page_stay/其他三分支事件行模板
去重为单一实现,两处各一行引用;stay-line/title-line 样式随迁
- 时间线失败态三分支:有数据渲染分组 / 请求结束且无数据对象提示
"时间线加载失败" / 成功但窗口内无事件提示"暂无访问轨迹"
- ensureLoad 换访客时同步清 detail,与 timeline/抽屉清理对齐,
防旧访客 ID 在 loading 遮罩下闪现
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 21:21:20 +08:00 |
|
浅念
|
ea561c974a
|
feat(admin): 访客详情跨天时间线
- 覆写 detail.vue 占位:档案卡(ID/在线/地理/IP/语言时区/设备/首触来源 utm 标签/
落地页截断 tooltip)+ 统计 4 项 + 轨迹/会话 Tab
- 轨迹 Tab:按日倒序分组(日期头含会话数)、会话块(时间·来源·active_ms 求和停留)、
el-timeline 事件行(page_view/page_stay 独立条目/sdk_loaded 图标区分)、
7/30/90 天切换(reqSeq 守卫)、truncated 提示条、空态
- 会话 Tab:全量会话表,行点击开抽屉看单会话事件序列(getSession)
- keepAlive:onMounted/onActivated/query-watch 三入口统一 ensureLoad,
loadedVid 去重(query 清空时重置令牌),切访客必刷新
- 顺车 Minor:formatStay 注释与代码对齐;useTable 背对背 if 改 if/else
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 21:05:52 +08:00 |
|
浅念
|
99d2a300ba
|
feat(admin): 访客列表页
- 访客管理页:useTable 分页表(后端固定 20/页,paginationKey 映射 page,
size 不发送),列含 截断 ID+复制 / 国旗 emoji+国家·省市 / 设备主行+os·browser
小字 / 首访·最近访问(共享 formatDateTime,上海时间直显)/ 访问次数 /
活跃天数 / 总停留 formatStay / 首触·最近来源 / 在线绿点;行点击进详情路由
- 筛选栏:关键词(visitor_id/IP 前缀)回车或查询触发、设备下拉、国家精确、
在线开关(online='1' 哨兵)、日期范围 date_from/date_to、显示爬虫开关
(默认排除);筛选变化重置 page=1,分页切换保留筛选
- 共享工具提取 admin/src/utils/tracker:formatDateTime/formatStay/countryFlag,
site 页改引用;formatStay 智能省略(0 单位不显示,全 0 显示 0秒)
- 红线:无 v-html,访客数据不绑 href/src;加载/空态齐全(错误态走请求层统一 toast)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 19:58:23 +08:00 |
|
浅念
|
3c54ad69c1
|
fix(admin): useTable 请求竞态守卫(旧请求不清 loading/不写错误态)
- fetchData 加请求序号令牌 fetchSeq:请求被新请求取代后,旧响应不再
改动任何状态——修复两类竞态:旧请求取消分支把 loading 提前清成 idle、
旧请求失败分支把新请求在途数据清空并置 error
- 与 dashboard reqSeq 修法同口径(id===seq 才写数据/清 loading),
供访客列表等分页筛选页复用
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 19:58:14 +08:00 |
|
浅念
|
5b3297337e
|
fix: 总览筛选竞态守卫 + 时间戳统一上海时间序列化
- dashboard loadOverview 加请求令牌:快速切换站点时丢弃过期响应,
防旧数据覆盖与旧 finally 提前清 loading
- 后端序列化统一 timezone.localtime:sites.created_at 与 visitors 的
first/last_seen_at、会话 started/ended_at、时间线事件 time——
USE_TZ 下 isoformat() 是 UTC,与上海自然日口径同屏矛盾(差 8 小时)
- 站点弹窗域名加轻量主机名正则校验与实时提示(拦含空格等垃圾输入)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 18:57:41 +08:00 |
|
浅念
|
78ed08d217
|
feat(admin): 站点管理与总览页
- 站点管理:useTable+ArtTable 列表(名称/Site ID 复制/域名白名单标签/状态/创建时间),
新建/编辑复用弹窗(域名按行归一预览,与后端 _norm_domains 同口径),
停用二次确认(软删语义,文案用停用)/启用切换
- 数据总览:今日五指标卡(PV/UV/会话/新访客/在线)、近30天趋势折线、
来源构成环图、热门页面表格;站点筛选下拉(哨兵值全部站点)联动刷新
- 图表用模板 useChartComponent 管理实例(自动销毁/空态/主题色)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 18:32:25 +08:00 |
|
浅念
|
0a80b43804
|
fix(admin): getVisitors 参数类型收紧(哨兵字符串防假筛选)
online/is_new/show_bot 后端按字符串哨兵 =="1" 解析(visitors.py _page_visitors),
boolean true 会被 axios 序列化成 "true" 而被静默忽略——看起来生效实则未生效。
新增 VisitorListParams 接口把三个开关锁死为字面量 "1",其余筛选字段一并收型。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 17:59:23 +08:00 |
|
浅念
|
a2ec4510a7
|
feat(admin): tracker api 模块与路由
- api/tracker/{visitors,dashboard,sites}.ts:类型逐字段对齐 server/tracker/api 序列化输出
(stay 一律 stay_ms,不引用已移除的 duration_ms;last_ip/时间线孤立会话组的
started_at 按后端可为 null;TrendPoint 含 new_visitors)
- 路由模块 tracker:数据总览/访客管理/站点管理三项菜单,访客详情 isHide 不进菜单
(query: visitor_id,activePath 回指访客管理),zh/en 语言包补 menus.tracker
- 4 个占位视图(Task 19-21 填充真实内容),vue-tsc 构建通过
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 17:50:36 +08:00 |
|
浅念
|
f11abbff43
|
fix(admin): 微收口(注释/角色防御/dev 约定文档/husky 移除)
- routesAlias.ts 修复 clean:dev 打坏的块注释
- system-manage.ts menus/simple 标注死代码(backend 模式前置条件)
- /me 映射非 staff roles 兜底 R_USER,防空数组跳过菜单角色过滤
- 新增 README-dev.md:config-object 签名/URL 无 /api 前缀/Bearer 归映射层/v-html 红线
- package.json 删 husky prepare(防 pnpm install 改写 core.hooksPath)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 17:39:50 +08:00 |
|
浅念
|
ab4f40ba5d
|
feat(admin): 模板精简+请求层适配 Django JWT
- 克隆 art-design-pro v3.0.2(GitHub depth1),rm .git,pnpm clean:dev 精简演示页(92 文件)
- .env.development/.env.production 均设 VITE_API_URL=/api,代理目标 127.0.0.1:8000(移除 Apifox Mock)
- http 封装信封适配:code===200 解包 data;msg/message 字段兼容(拦截器/error/类型)
- /api/admin/auth/token 登录适配(access->Bearer token, refresh->refreshToken);/api/admin/auth/me 映射 UserInfo(userName/roles/is_admin)
- 登录页演示账号替换为真实 admin;logOut 按路由名判登录页修复 redirect 嵌套
- 根 .gitignore 补 !admin/.env(模板公共 env 非密钥,需入库)
- 验证:Playwright 全链路(错误密码 401 留登页/正确登录进工作台/登出/受保护路由重定向/redirect 回跳)+ pnpm build(vue-tsc 通过,产物无 mock 域名)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 17:17:38 +08:00 |
|