Commit Graph
4 Commits
Author SHA1 Message Date
lijing 64de9a0548 feat(theme): 接入云海子主题通道(A 类免插件,规范 v1.12 §2/§3)
build / build (push) Successful in 3m22s
- index.html 插 A 类 loader:唯一接入点,FOUC 门/manifest 预取/主题 link 追加与排序
  全由通道 yh-theme-init.js 承担,主题升级走 /static 通道,本应用无需重新构建
- vite.config 加 /static dev 代理(YH_THEME_PROXY_TARGET 可覆盖,默认线上通道)
- host.config 回写 __APP_CONFIG__.serviceHost(仅同源):init 的 appearance 请求有硬性
  同源限制,跨源会被直接跳过;本地 dev 保持空串走同源 /api 代理
- 顶栏头像接平台键 yh-avatar,监听 yh-appearance-updated,userInfo 兜底
- view-ui-plus 声明锁 1.3.24(对齐通道皮肤生成版本)
2026-10-21 17:35:24 +08:00
lijing e00f0db729 feat(welcome): 首屏按使用画像做「常用优先」,老用户回来先看见自己常办的事
build / build (push) Successful in 1m53s
原来首屏对每个人都长一个样:网格顺序写死,指标卡全是「能力 91 项 / 可提交 39 项」
这类覆盖数字。用过一百次请假的人,请假入口照样排在第 4 位。

新增 src/utils/usage.ts(本机使用画像)
- 用 localStorage 记「模块 / 能力的调用次数 + 最近时间」与「写操作成功件数」。
  后端 GET /api/agent/tools 只下发"你能用什么",不提供"你常用什么",
  所以第一步先落在本机:零后端改动、零数据出网;换设备重新累积。
- 归属按 userId + roleId 隔离(一个账号多重身份能力范围不同,混在一起会串推荐);
  目录未回来时退回平台写入的 currentRole,取不到才退化匿名。
- 模块按「轮」计数(一轮查 3 个接口只 +1,符合用户心里"我问过几次"),
  能力按「调用次数」计数;done 只统计 write && success —— 查询再多次也不算成果。
- rankFrequent / summarize 有意吃 state 而不是吃 scope:调用方手里那份快照带版本依赖,
  记录或清除后能立刻重算,避免"点了清除,页面上常用区块还在"的幽灵状态。

首屏(QuickActions.vue)改成双形态
- 无使用记录 → 完全保持原有引导形态(自我介绍 + 覆盖面指标 + 各模块一句成品请求)。
- 有使用记录 → 个性化问候「欢迎回来,X」,正文直接列出「你最近常办:…」;
  指标卡换成「本周已办成 / 常用模块 / 可操作能力」;
  新增「常用」区块(用过最多的模块,点一下就发);
  快速开始网格按频次重排,用过 2 次以上的卡片描边并打「常用 N 次」角标。
- 能力清单弹层叠加使用次数(模块级「你用过 N 次」+ 能力级次数),
  底部提供「清除本机使用记录」(两段式确认),并说明数据不出本机。

顺带把「常用」延伸到导航与顶栏
- AppSidebar:模块按频次置顶 + 常用项左缘一道色条;排序只在进页面时算一次,
  不在会话内实时跳动(否则"我刚点的那行跑哪去了"会打断操作)。
- App.vue:顶栏胶囊补「已帮你办成 N 件」——原来只回答"系统有多大",
  现在同时回答"它为我做过多少事"。

埋点(Chat.vue)
- 挂在每轮响应的 finally,只认回包里的 toolCalls(含浏览器代执行续跑后的最终结果),
  不认"用户点了哪张卡":用户完全可以自己在输入框里打出「我要请假」,
  只有后端的执行轨迹才是事实;失败时 traces 为空,自动不记。

铁律不变:所有入口仍由 /api/agent/tools 目录驱动,前端不自行判权。
「常用」只做排序不做增删;无权使用的能力即使局部画像里有记录,也不进清单。

验证:真机 46/46(.scratch/verify-usage-personalization.mjs,覆盖首次访问形态、
埋点计数口径、写操作才计件、常用前置与角标、侧栏顺序、清除记录、多账号隔离);
请假登记回归 17/17。
2026-10-13 17:11:43 +08:00
lijing 854550c019 feat(sidebar): 身份名称直接绑定平台 currentRole.roleName
build / build (push) Successful in 1m58s
- 左下角身份标签改为直接展示平台下发的 roleName(与 GetUserInfo / 门户同源),
  平台叫什么就显示什么,不再用归一化的「教师/学生/管理员」桶
- 取值优先级:GetUserInfo.currentRole.roleName → /api/agent/tools identity.roleName → catalog.roles 兜底
- 实测 byLoginName(lijing) 返回 currentRole={roleId:1, roleName:"老师"},改后左下角显示「老师」
- UserInfoVo 补充 currentRole 字段类型
2026-10-12 16:34:20 +08:00
lijing 37d292c5d2 feat: 提交校园智能助手前端工程源码(Vue3 + Vite + view-ui-plus)
build / build (push) Successful in 3m14s
2026-10-12 14:45:00 +08:00