Commit Graph
9 Commits
Author SHA1 Message Date
chenxing 49f15b8a05 feat(settings): 设置中心三级重构(一层一角色)+ 审计缺陷修复
build / build (push) Successful in 44s
三级重构(S1-S6,方案见 docs/设置中心三级重构-执行方案-20261008.md):
- Settings.vue 三层化主体:curLayer=my/school/platform 单 pane 分层,主题/头像/壁纸/桌面/LOGO 按身份只渲染本级
- 桌面应用三级默认 pane(used_app SCHOOL/BASE 读写 + 角色分段 + ≤8 上限)+ 统计设置真身迁入(StatsBarModal 退役)
- SysSetting.vue 去基础设置/机构树;ThemePreview 预览壳套 .layout-wrap; UsedAppApi 新增
审计缺陷修复(设置中心三级重构与消息搜索-审计报告-20261008):
- 【P0】DESKTOP_ROLE_TYPES 角色 1/2 标签对齐 SysRoleEnum(1教师/2校领导/3学生),桌面默认不再张冠李戴
- 命令面板:Enter/↑↓ 加 isComposing 守卫防中文输入法误触;过滤后高亮索引归零;stagger 延迟 --i 封顶 20
- WS 通知标题移除 frame.appKey 死消费;BaseApi summary todos 类型同步去 appKey
2026-10-08 23:08:16 +08:00
chenxing 2bd7ef3b80 refactor(header): 命令面板去背景联动,结果右侧标注应用类型
build / build (push) Successful in 1m21s
用户三点修订:
1. 面板已是模态框,去掉背景应用列表的同步过滤(解开 mittBus.searchChange 整条链)
2. 结果右侧灰色小字显示应用类型(来源 BoaAppType.name,与 /apps 分组标题同源)
3. 类型呈现暂按方案 A(右侧灰字);方案 B(类型分组)对照稿见 design/07

- Header.vue: watch(searchAppText) 不再 emit("searchChange");cmdkResult 由
  getFlattenAppList(纯 flatten,会丢类型名)改为遍历 curUserAppList 分组展开并挂
  appTypeName;模板加 .app-cmdk-type
- AppList.vue: 删 searchAppText / searchAppList / isSearch 与模板搜索态分支、
  .no-search-box 样式、孤儿导入 flatten(lodash) 与 requireImg;删 mittBus 监听
- utils/mitt.ts: 删 searchChange 事件类型
- assets/styles/header.scss: 加 .app-cmdk-type 样式
- harness-main.ts: mock curUserAppList 补齐 BoaAppType 分组结构(id + name),
  原 mock 丢了 name 导致类型名取不到

注:本仓工作区另有并行会话 WIP(StatsBarModal 迁入 Settings / 主题预览),
本提交只含本案 5 个文件与 hunks,未触碰对方改动。
2026-10-08 19:10:14 +08:00
chenxing ec696d5187 feat(header): 搜索框改居中命令面板,应用列表数据与 loading 与 AppList 共享
- header.scss: 删旧 .search-box 与 fade1/search-animation/icon-animation 动画段,
  新增 app-cmdk-* 面板样式。样式段必须放顶层——面板 Teleport 到 body,嵌进
  .default-header 会生成后代选择器而匹配不到
- Header.vue: 搜索 li 收敛为单图标 + openSearch;模板末尾追加 <Teleport to="body">
  命令面板,支持实时过滤 / ↑↓ 键盘导航 / Enter 打开 / Esc 关闭 / 空结果态;
  删 watch(isSearching) 与空函数 showSeachBox;挂/卸 window keydown
- store/index.ts: 新增 appListLoading 字段与 setAppListLoading
- utils/bschLinkPage.ts: 抽出 openAppPage(app, ifameAppIdArr),与点击应用图标同一路径
- AppList.vue: reloadAppData 写 store(数据 + loading,try/finally);
  linkPage(item) 委托 openAppPage

硬约束保持不动:watch(searchAppText) -> mittBus.emit("searchChange")(背景应用网格靠它过滤)、
isSearchIconShow(route.name === "apps")。
2026-10-08 17:45:25 +08:00
chenxing 3250de382a fix(header): 去掉身份列表上擅自添加的 padding/margin/圆角,完全对齐原样式
build / build (push) Successful in 1m30s
上一轮回滚时虽已恢复灰卡片形态,但额外加了列表 padding 6px、行的 margin 0 8px
与 border-radius 6px,导致与原「切换身份」观感仍有出入。本次全部移除。

移除(非原样式):
- .user-card-roles 的 padding: 6px 0
- .u-role 的 margin: 0 8px 与 border-radius: 6px
- .who 的 min-width/ellipsis 系列

恢复(原样式组成部分):
- .user-card 顶层 svg{20px},等价原 .roleinfo-wrap 首段声明(原圆点尺寸就靠它,
  上一版只写了 margin 导致圆点尺寸失去约束)
- .u-role 用 height: 62px 替代 min-height
- .who 回到 .user-wrap 的 padding: 9px 0 + flex: auto
- .nm 内 .t 间距回到 mr-10

实测 9 条身份 scrollHeight=558(9 × 62px,整数倍⇒ 确认已无任何额外间距),
仍正确出滚动条;1 条时 62=62 不滚动。菜单行数管理员 2 / 普通用户 1 不变。
2026-10-08 16:09:34 +08:00
chenxing 97090eb08b fix(header): 身份列表回滚为原灰卡片样式,只在卡片底部追加三项菜单
build / build (push) Successful in 1m16s
用户反馈整合后的身份选择观感不符预期,要求保留原「切换身份」样式,
仅在列表下方追加个人信息 / 后台管理 / 退出登录。

回滚内容(对齐原 .roleinfo-wrap .roles-ul li):
- 灰底 #f9f9f9 + 圆角 6px + 左右 8px 外边距 + 列表内 6px 上下留白
- 行高62px(原为 padding 9px 16px 的紧凑行)
- hover 用 color.adjust(#f9f9f9, lightness -5%),恢复 @use "sass:color"
- 勾选圆点回到 20px + margin 0 16px
- .who 恢复 border-bottom 1px #e9e9e9,末行不画(同原:last-child .user-wrap)

保留不变:卡片骨架、标题行、滚动条(max-height 310px + 6px 自绘)、
底部菜单与权限判定。实测 scrollHeight 570 > clientHeight 310 仍正确出滚动条。

验证:vite build 通过;mock 取证 9 条身份溢出滚动正常、1 条不滚动、
菜单行数管理员 2 / 普通用户 1。
2026-10-08 15:46:55 +08:00
chenxing e46df62c0b refactor(header): 用户入口整合为单卡片——人像图标承载切换身份+个人信息+后台管理+退出登录
build / build (push) Successful in 45s
铃铛与齿轮两枚图标下线,人像图标成为唯一入口,点击展开一张卡片:
切换身份列表(9条实测溢出滚动)+ 个人信息 + 后台管理(仅管理员)+ 退出登录。

删除无功能损失的冗余入口:原齿轮菜单的 sys/logo/sidebar/statset/backend 五项
已于 2026-09-30 迁入 /settings(Settings.vue:620 ALL_PANES),齿轮成为纯冗余。
消息中心仍走左侧菜单 /msg,LeftMenu 未读角标不受影响。

改动要点:
- isUserInfoShow + isRoleInfoShow 合并为 isUserCardShow,9 处函数体同步改名;
  删除 onUserinfoClickRoles、storeToRefs import 与 unreadCount 解构(模板已无 Badge)
- showUserInfo 改跳 /settings?pane=profile,不再 emit showUserInfoModal
  (该事件仍有 AppHeader/BschIframe/harness-main 三处消费方,不可删)
- :key 用 roleId-schId-childId 复合键,避免同校多身份时 roleId 重复
- header.scss 删 .roleinfo-wrap 与随之失效的 @use "sass:color",新增 .user-card
  (身份列表 max-height:310px + overflow-y:scroll + 6px 自绘滚动条)
- settingsWallpaper 等 6 个入口函数保留:对应 Modal 仍挂模板尾部且 logoList
  是 header 徽标数据源,只改内部变量名并加注释

验证:未声明标识符全量扫 47 个 .vue 零问题;vite build 通过;mock 取证实测
scrollHeight 683 > clientHeight 310 出滚动条、1 条时 75=75 不滚动、
menu-rows 管理员 2/普通用户 1、bell-count 与 gear-count 均为 0。

另:.gitignore 忽略卡片取证三件套(本地临时用,与 harness-* 同类不进 git)。
2026-10-08 15:28:44 +08:00
chenxing 0f7101983e feat(msgcenter): /msg 换真实数据——服务端筛选+滚动分页、铃铛直跳、unreadCount 上提 store、WS 通知带应用名
- views/msg/index.vue:数据层整体替换(msgType 0/1/2 映射、isRead 1=已读、fmtTime 重写绝对时间);列表走 msgCenter/list 服务端筛选(msgType/appKey/isRead/keyword 防抖 300ms),滚动到底追加下一页,切视图/搜索重置第 1 页;左栏分类计数走 summary(旧版 UserMsg 缺字段降级显示 —),应用清单取 store 应用列表、计数同源 todos;点击卡片标已读、全部已读、去处理(showJump/jumpUrl)、审批直批(共享弹窗);失败态有重试;WS 新消息经 mittBus 自刷新
- components/Header.vue:铃铛直跳 /msg(移除 Poptip 浮层与 900 宽 Modal 及 columns/tableApi 死代码);unreadCount 上提 pinia store(角标与 /msg、LeftMenu 同源);WS Notice.info 标题带应用名(appKey 匹配 store 应用列表,缺失回退类型标签);壁纸/LOGO Modal 不动
- components/MsgApprovalModal.vue(新增):审批直批弹窗抽共享组件,逻辑照抄原 Header 内联实现(同意可选意见/拒绝必填校验/三种失败反馈)
- components/LeftMenu.vue:「消息」入口(url=/msg)未读角标(读 store,红底白字胶囊)
- store/index.ts:unreadCount + setUnreadCount/incUnread/decUnread
- api/BaseApi.ts:getMsgCenterList 参数类型放宽(服务端筛选项);getMsgCenterSummary 返回类型补分类计数字段(可缺省)
- assets/styles/header.scss:删除消息浮层死样式 .message-wrap 段
2026-09-30 12:37:30 +08:00
chenxing 59226875f3 feat: 退出登录去掉 /cas 前缀并新增管理员后台管理入口
build / build (push) Successful in 1m51s
- 退出登录路径由 /cas/logout 改为 /logout(Header.vue、UserInfoModal.vue 两处)
- Header 用户下拉在"系统设置"下方为管理员新增"后台管理"栏,新窗口打开 baseHost + /userbase/front/index.html
- 新增雪碧图图标 admin-backend.svg 并统一与其他菜单项图标尺寸
2026-09-10 09:32:17 +08:00
chenxing 4279f99be1 feat: 接入 UserHome 前端业务代码(含真实 src/依赖,保留 projman 标准 CI)
deploy-userbase-front / build-and-deploy (push) Failing after 1m54s
build / build (push) Successful in 3m36s
2026-09-09 22:37:59 +08:00