chenxing
|
5d7b8526f4
|
fix(一周安排小组件): 面板关横向滚动(修外框 X 轴滚动条、日期条被裁)+ 色系 #5979ea、列表区固定 3 条、信息行全空落「-」、备注无则不渲染
build / build (push) Successful in 43s
- 色系:#2d8cf0 / #1d4ed8 整族换 #5979ea(hover #4864d8),覆盖今日方块、圆点、查看概览、展开、今日星期
- 列表区:268px(≈5 条) → calc(var(--wk-row) * 3) = 171px(正好 3 条 + 滚动),新增 --wk-row: 57px
- 条目等高 57px;信息行(地点 · 负责人 · 出席对象)恒渲染,三者全空落「-」,不再留白
- 备注:无备注整块不渲染;超 2 行才出「展开」且贴第二行末尾;remarkText 加 trim;换周重置 remarkOverflow
- 「查看概览 ›」→「查看概览」(去掉箭头字符)
- 修 X 轴滚动条根因(views/index.vue):widgetOptions 的 scrollPanel 关掉 scrollingX
原 scrollingX=true 时 vuescroll 给 .__view 内联 width:fit-content,包含块被最长文本撑到 ≈425px
⇒ 面板 scrollWidth 561 > clientWidth 391,外框出 #333 横向条、日期条 7 列被裁成 5 列、长条目省略号失效
同时 .content { min-width: 0 } 兜底(flex 项默认 min-width:auto 会让 nowrap 文本不收缩)
|
2026-10-16 09:50:39 +08:00 |
|
chenxing
|
651e7e16f3
|
style(一周安排小组件): 列表区固定5条高度+滚动/空态等高、字号对齐旧版、备注与数据区分
build / build (push) Successful in 48s
- 列表区 .wk-list-area 固定 268px(旧版实测行距≈54px×5):超出滚动、空态同高,切「休/节假日」卡片高度不再跳(实测三态卡片高 554px 完全一致)
- 日期条圆点改绝对定位+常驻占位(visibility):修「整周无安排时日期条矮 6px」;今日蓝底方块不再把圆点盖成同色
- 字号对齐旧版:标题 14→15、星期 12→14、日期 13→15、日常详情 14→16、查看概览 12→13、列表内容/时间 12.5→15、meta 11.5→12.5、备注 12→13、空态 13→14
- 备注与安排数据区分:上分割线 + #f7f8fa 浅底块 + 6px 圆角
|
2026-10-15 21:25:31 +08:00 |
|
chenxing
|
8af636641f
|
feat(一周安排小组件): 标题/日期精简 + 日常详情加重 + 外跳「查看概览」+ 备注两行折叠
build / build (push) Successful in 2m44s
- 标题改合成简称「10月12日~10月18日 第N周」,接口全称留 hover(title 属性)
- 日期条只留「日」(10.12→12),今日改蓝底白字方块(原浅蓝底)
- 「日常详情」12px/400/#6e7c87 → 14px/700/#1f2329,同排右侧新增「查看概览」外跳(新窗口)
- 外跳地址由后端下发(props.overviewUrl);缺配置则不渲染入口
- 备注 line-clamp:2 + 溢出才出「展开/收起」,支持含换行的多行文本
- index.vue 透传 overview-url;WidgetEditModal 配置页加「外跳入口」行,超管保存/校管覆盖/清除覆盖三链路带上
|
2026-10-15 20:26:07 +08:00 |
|
chenxing
|
8305129c73
|
feat(一周安排小组件): 对接 workplan oapi 单周对象 + 周偏移翻页
build / build (push) Successful in 50s
- 直吃 oapi data 单周对象(title/year/term/week/monday/days[7]/remark/hasData/minWeek/maxWeek)
- 箭头翻页按 minWeek/maxWeek 门控,非本周默认落周一,本周按今日定位
- 空周门控 hasWeek(title 非空)替代 hasData:空周保留标题行+箭头+七日条,不再翻进去出不来
- 修复形参 week 遮蔽 ref 致 loading 永驻骨架(ref 改名 weekData,loading/reportHeight 移入 finally)
- 大图标空态改模板内联 SVG
|
2026-10-15 16:30:13 +08:00 |
|
chenxing
|
57cb98f49e
|
fix(小组件): 空态仪表盘改用纯矢量图标 —— 原 widget-empty.svg 是内嵌 PNG 的假 SVG,currentColor/color 对其无效;按 alpha 轮廓亚像素反推(9 轮廓/245 顶点,IoU 98.2%)
build / build (push) Successful in 46s
|
2026-10-14 11:38:25 +08:00 |
|
chenxing
|
c7a295521d
|
style(小组件): 「+」添加小组件下拉改为与卡片同族 —— 复用玻璃令牌,浮层底色加深一档,白字/白描边/大投影
build / build (push) Successful in 45s
|
2026-10-14 10:30:36 +08:00 |
|
chenxing
|
2f4ee76b7b
|
style(小组件): 「+」添加小组件下拉去雾做锐 —— 1px 实描边接管边界、投影收紧减淡
build / build (push) Successful in 43s
- Dropdown 加 transfer-class-name="wg-dd",把皮肤严格限定在这一个下拉上
(库的 dropdownCls 会把该类挂到面板 .ivu-select-dropdown,不影响全站其他下拉/选择器)
- 面板:border 1px solid rgba(15,23,42,.08) 接管边界;box-shadow 由库默认的
0 1px 6px rgba(0,0,0,.2) 收紧减淡为 0 2px 8px rgba(15,23,42,.12);radius 4->6;padding 5px 0 -> 4px 0
- 白底、文字色(#515a6e)、item hover(#f3f3f3) 一律不动;卡片玻璃效果不动
- 选择器用 .ivu-select-dropdown.wg-dd(0,2,0)稳压库默认 .ivu-select-dropdown(0,1,0)
|
2026-10-14 09:49:22 +08:00 |
|
chenxing
|
27ce68a76e
|
style(课表小组件): 下拉选中态改品牌色(#5979ea/#eef2ff);表格限高 352px 只露 7 节、超出滚动、表头 sticky 常驻
build / build (push) Successful in 41s
- .cls-item.on 由 #2d8cf0/#f0f7ff 改为 var(--color-primary, #5979ea) / var(--color-primary-weak, #eef2ff),
与 WsToastLayer.vue 既有约定一致(CSS 变量 + 回退值);hover 改 #f4f7ff
- 表格外套 .tt-scroll:max-height 352px(表头 44 + 7×44)+ overflow-y auto + 6px 细滚动条
- th 加 position sticky / top 0 / background #fff;因 sticky + border-collapse 会丢 cell border,
分隔线由 border-bottom 改为 box-shadow inset 0 -1px 0 #e9edf1
|
2026-10-14 09:08:06 +08:00 |
|
chenxing
|
3a7502f106
|
style(课表小组件): 表头垂直居中、左右留白 8px、行高 44px、科目 2 行省略号兜底
build / build (push) Successful in 46s
- th 补 vertical-align: middle —— base/_reset.scss(meyerweb) 给 th/td 统一设了 baseline,
scoped 只给 td 写了 middle 导致表头文字按基线对齐、偏上,视觉上像"贴住卡片 header"
- .table-wrap padding 2px 15px 12px → 8px 8px 10px(小组件窄,收敛左右留白)
- td height 52 → 44px
- 科目包 <span class="sub" :title>,-webkit-line-clamp:2:超长科目最多 2 行、省略号收尾、悬停看全文
|
2026-10-14 08:44:27 +08:00 |
|
chenxing
|
479f7b22a7
|
fix(课表小组件): 三项修复——header 显示「年级+班级」、body 去班级行、空态改内联 SVG、表格换私有类名去掉全局竖线
build / build (push) Successful in 3m52s
- header 与下拉项显示 gradeName + className(「高一 1班」)
- body 单元格只显示科目,不再重复班级
- 空态由「CSS 背景图 + 空 div」改为模板内联 SVG + 「暂无课表数据」
- 表格类名 my-table → tt:避开全局 componets/_my_table.scss 带进的 #c7c7c7 竖线与 th #fafafa 灰底
- 表头去灰底并加 1px 分隔线(#e9edf1),行间横线加深 #eef1f4,表头字色 #344449
|
2026-10-13 21:02:41 +08:00 |
|
chenxing
|
0baba07707
|
fix(小组件): 内容卡补回不透明白底(#fff)——旧版由iframe自带,内置化后丢失导致整卡糊成一色
build / build (push) Failing after 44s
|
2026-10-13 16:52:06 +08:00 |
|
chenxing
|
6f4b3f07d4
|
feat(课表小组件): SyllabusWidget改版直吃AcaSyllabu oapi结构——班级下拉切换器Teleport进卡头(通用header插槽能力),行=slotNo中文数字、列=周一~周五(周末有课才追加)、单元格=班级/科目;空态换原版no-data-box.svg插画;卡头钉死#f7f8f9+overflow visible供浮层溢出
build / build (push) Successful in 1m38s
|
2026-10-13 12:27:41 +08:00 |
|
chenxing
|
a3ddb90a8a
|
fix(小组件): 空态图标按场景分家 + 桌面面板拖拽态翻白
build / build (push) Successful in 42s
- 管理台空态改用新线性图标 widget-empty-line.svg(虚线框+加号,currentColor 可着色)
- 桌面小工具面板空态还原原版 widget-empty.svg(内嵌灰度仪表盘 PNG,4279f99 版)
- _widget.scss 拖拽态翻白:背景/边框/阴影与前景令牌一并反转,避免重演「白底压白字」
|
2026-10-12 08:47:45 +08:00 |
|
chenxing
|
5a19a4ed79
|
feat(小组件管理改版): 卡片网格管理台 + 校级覆盖层 + 退役系统设置/应用管理
build / build (push) Successful in 42s
后端
- widget_catalog 加 3 列:scope_type(三态可见范围)/ role_types(可见角色)/ role_alias(角色专属命名 JSON)
- 新增两表:widget_catalog_school(点名表,uk_widget_school)、widget_school_setting(校级覆盖层,uk_widget_sch)
- WidgetController 新增 GetWidgetCatalogList / SaveWidgetCatalog / DeleteWidgetCatalog /
GetWidgetSchoolSetting / SaveWidgetSchoolSetting;权限拆 checkSuperAdmin(仅超管)与
checkSchAdmin(超管或 roleId∈{2,5,7})
- SaveWidgetSchoolSetting 强制 schId 取当前登录校,前端传参不采信(防越权)
- 显示名三级链:校级别名 > 角色专属命名 > 组件名;role_alias 坏 JSON 降级不抛
- 启动期幂等 seeding(空库才写 3 条内置目录行)
- 手工 DDL 脚本 resources/sql/widget_catalog_v2.sql(含回滚)
前端
- WidgetManage 重写为卡片网格:超管/校管双视角、类型页签 + 搜索、拖拽排序、启停、
删除、登记内置组件、空态引导
- 新增 WidgetCard / WidgetEditModal / WidgetRegisterModal
- UserSettingApi 加 6 个方法;types 加 WidgetCatalog 接口
- 管理端列表整行回传(SaveWidgetCatalog 为整行 merge)
退役
- 删除 SysSetting.vue / SysTempManage.vue / AppSettingApi.ts 与后端 AppSettingController /
AppCategory(SQL) 全链路,清理路由、Settings 导航与样式分支
- 保留 SysSettingApi.ts(壁纸/logo 池管理仍在使用)
|
2026-10-11 21:40:31 +08:00 |
|
chenxing
|
9980ea1264
|
外观SDK化A:sync 件跟版 20261011-1332-246e1e3(侧栏默认翻转 sideDeep→false)
build / build (push) Successful in 2m50s
|
2026-10-11 13:35:12 +08:00 |
|
chenxing
|
f5faa29018
|
feat(小组件内置化): 面板三分支渲染 + 三个内置组件 + 自定义片段 srcdoc + 玻璃层对比度
build / build (push) Successful in 42s
- components/widgets:widgetRegistry(defineAsyncComponent 按需加载)+ EvaluateWidget/SyllabusWidget/WeekplanWidget,props widgetId、emit loaded、内部自行取数、ResizeObserver 自报真实高度;呈现只保留语义不逐像素复刻旧 html
- views/index.vue:iframe 单分支改三分支(内置组件 / compType=2 走 :srcdoc + sandbox="allow-scripts allow-same-origin allow-forms"(不给 allow-top-navigation)/ 兜底「该小工具暂不可用」不白屏);:src="item.url" 与候选池 url 依赖删除;postMessage 身份下发只服务片段分支,高度统一收口 find.height
- utils/widgetFragment.ts:wrapFragment 两段注入——取数桥在 head(早于片段自身脚本,否则 yhWidget undefined)、高度上报在 body 之后;</script> 拆拼防提前闭合门户脚本;节流用 setTimeout 尾沿 + 300/1200ms 兜底(iframe 隐藏期子文档不出动画帧,rAF 会把上报永久吞掉、帧高卡 min-height 撑出内层滚动);桥 URL 走 serviceHost 且自行解平台信封 data
- views/Settings.vue:新增 admin pane「widget」(ADMIN_PANES/ALL_PANES/「系统」组导航项/v-else-if 链分支),普通用户导航隐藏且 URL 直达落 no-perm 黄条
- views/widget/WidgetManage.vue:双卡管理页(内置/自定义分组列表 + 名称/键/类型/data_code/排序/启用/sch_id 表单 + CodeMirror + 上传 .html 走 FileReader 填编辑器,不落地文件不产生 URL;内置条目 content 只读)
- _widget.scss:--wg-* 六令牌 + 深玻璃 blur(18px) saturate(140%) + 描边 + 投影;拖拽态加深 blur(22px) 不再翻白;空态与 +/− 前景改走 token(配套 widget-add/sub/empty.svg 由硬编码色改 currentColor,widget-empty 原为内嵌 PNG 无法着色故换线性版);.widget-item 浅底深字保持不动
- UserSettingApi.ts:getWidgetData / getWidgetContent / GetWidgetCatalogList / SaveWidgetCatalog
- 另含 src/store/index.ts 的 getWidgetAppIds 未配置态 .reverse()(非本会话所写,按用户确认一并提交:与 getWidgetAppList 降序比较器对齐,使未配置态按 widget_catalog.sort 正序渲染)
|
2026-10-11 08:50:49 +08:00 |
|
chenxing
|
be0dac6bfa
|
chore(theme): 版本戳跟版 20261009-1655-488a3c3(YschTheme skin 16px 定稿)
build / build (push) Successful in 44s
|
2026-10-09 17:08:10 +08:00 |
|
chenxing
|
1b812bc9c9
|
fix(切换身份联动): 消息角标/消息页/设置中心随身份切换自动重拉——Header 摘要挂 switchRole、msg 页与 Settings pane watch curRoleUid(桌面/应用中心既有机制不变),无需手动刷新
build / build (push) Successful in 41s
|
2026-10-09 15:33:26 +08:00 |
|
chenxing
|
ac67215c78
|
feat(header): WS 实时推送卡片落地 design/03 .ws-toast——类型色条+图标章+进度条 8s 自动消退+点击进 /msg,替代 Notice.info 临时卡片(审批直批按钮本期不做)
build / build (push) Successful in 1m32s
|
2026-10-09 15:06:23 +08:00 |
|
chenxing
|
0621ef1ede
|
fix(壁纸): 删除当前生效壁纸后重拉用户设置即时回落兜底(设置 pane 与 Header 模态框两处删除入口)
|
2026-10-09 14:53:19 +08:00 |
|
chenxing
|
0264d41428
|
fix(设置): LOGO 池预览改正方形缩略(LOGO文字与主题JSON化增补)
build / build (push) Successful in 47s
|
2026-10-09 12:29:32 +08:00 |
|
chenxing
|
d1a371d257
|
feat(header): 铃铛新消息按当前身份学校过滤(getCurSchId 口径,平台级/超管放行)——消息按学校隔离 批次4前端
|
2026-10-09 12:23:17 +08:00 |
|
chenxing
|
e7f70f46a8
|
fix(门户+设置): LOGO 文字贴徽标左对齐并放大字号(修 space-between 居中);壁纸 pane 管理员选本级默认(LOGO文字与主题JSON化增补)
build / build (push) Successful in 44s
|
2026-10-09 11:54:17 +08:00 |
|
chenxing
|
b774d2e733
|
chore(theme): theme.ts 同步通道 1038 版本戳(LOGO文字与主题JSON化)
build / build (push) Successful in 41s
|
2026-10-09 10:49:37 +08:00 |
|
chenxing
|
2819f96dfd
|
feat(设置+门户): LOGO 文字配置(校/平台两级,pane 内维护)+ header 徽标旁显示;个人主题保存改 JSON 形态(LOGO文字与主题JSON化)
build / build (push) Successful in 1m27s
|
2026-10-09 10:35:25 +08:00 |
|
chenxing
|
bdc8898b93
|
chore(theme): YschTheme sync 件更新(版本 20261009-0054-5732ee2,信封兼容)
build / build (push) Successful in 43s
|
2026-10-09 01:06:15 +08:00 |
|
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
|
4f36ff9ceb
|
外观偏好异步补齐D:设置页选择端双写服务端真源(fire-and-forget,本地体验不变)
- BaseApi 加三方法:getAppearance / saveMyTheme(紧凑编码,null=跟随)/ saveMyAvatarStyle
- Settings.vue 五个写键分支旁挂双写:pickMyTheme / followSchoolTheme(置 NULL) / pickMyAvatarStyle / followSchoolAvatar(置 NULL) / pickSide(写 yh-theme 的全部分支)
- 双写失败 console.warn 不弹错不回滚本地(本地体验与改造前逐字节一致)
- App.vue loadSchThemeDefault/loadSchAvatarDefault 保留不动(与 init 异步补齐幂等收敛)
- sync 件:UserAvatar.vue 监听 yh-appearance-updated + theme.ts 版本戳 20261008-1831-d9db725
- 注:本仓工作区另有并行会话 WIP(harness/命令面板),本提交只含本案文件与 hunks
|
2026-10-08 18:58:30 +08:00 |
|
chenxing
|
b2307f583f
|
chore(harness): 补齐全局脚本引入 + 命令面板取证钩子
build / build (push) Successful in 42s
- harness.html 照抄 index.html:30-34 的 ztree.css / jquery / lodash / jquery.ztree:
main.ts 不 import 这几个全局脚本,靠 html 提供;缺 jquery 会稳定报
"Uncaught ReferenceError: $ is not defined"(本项目既有坑)
- harness-main.ts 新增 /apps 空壳路由(只需 route.name === "apps" 让 Header 渲染放大镜,
不挂真实 AppList 以免本机无后端时报错污染控制台)与 ?cmd=1[&q=xx] 取证钩子
(自动点开放大镜并可选输入关键词)
|
2026-10-08 17:45:33 +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
|
f9f97db272
|
feat(msg): 计数口径改消息总数 + 标识切换 appId
build / build (push) Successful in 43s
- 按分类计数改分类总数(sysTotal/bizTotal/approvalTotal,与列表内容对齐),已读=已读总数、全部=全部总数
- 按应用角标改 countByApp 按应用消息总数(含已读,已读后不清零),总数>0 才显示、总数降序
- 应用匹配/筛选全面改 appId:行与计数出参带 appId、筛选传 appId,appKey 不再出现在消息中心前端
|
2026-10-08 16:37:22 +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
|
297934f862
|
feat(msg): 「按应用」清单接真实数据——GetUserApp 应用全集 + 按应用未读数角标
build / build (push) Successful in 1m59s
- 应用清单改与桌面网格同源 GetUserApp(BoaApp 自带 appKey/name):原实现读 store.getFlattenAppList,但 setApps 无调用方、列表恒空,且 MenuBar 本身无 appKey 字段——「按应用」此前只剩「全部」一行
- 角标接新代理端点 msgCenter/unreadCountByApp({appKey: 未读数}),未读多的应用排前,替代原 summary.todos 待办数语义
- 卡片 appName 缺失降级改同源匹配用户应用清单
|
2026-10-08 12:00:05 +08:00 |
|
chenxing
|
19e1bbc9d7
|
设置界面更新
build / build (push) Successful in 1m8s
|
2026-10-08 10:08:22 +08:00 |
|
chenxing
|
e2c937f424
|
feat(avatar): 默认头像轮前端集成——设置页两级样式 + 登录写学校默认键 + 顶栏三态头像
build / build (push) Successful in 5m35s
- BaseApi:schAvatarStyle/saveSchAvatarStyle/clearSchAvatarStyle 三端点(后端 SchSettingsController 配套,本仓 service 仓随轮提交)
- App.vue:登录后 loadSchAvatarDefault()(与 loadSchThemeDefault 同构:失败/404/空→不写键不报错不阻塞),写 localStorage[yh-avatar-sch-default]
- Settings.vue:新增 avatar pane(我的头像样式人人可见 + 本校默认管理员可配,watch 进 pane 拉取)
- AppHeader/UserInfoModal:头像展示位换 UserAvatar 三态组件
- ThemePreview:预览页头像形态联动
运行时联调与部署验证待人工(后端端点须随 service 发版)
|
2026-10-06 20:20:44 +08:00 |
|
chenxing
|
4d9da5e3a6
|
feat(appicon): AppIcon 资产库接入(应用网格矢量图标渲染,YschAppIcons 10-04 轮 P3)
- AppIcon.vue:矢量图标渲染组件(iconKey+iconColor → mask data-uri,无键无 URL 回退关键词映射占位)
- constants/appIconRules.ts:应用名关键词→图标键兜底映射(D4,两端各持一份,与 MobilePortal 关键词列一致;仅 icon_key 未配置且无 URL 时生效,有 URL 恒定位图零回归)
- AppList/SearchPanel/index:应用网格与搜索结果图标位换 AppIcon
- appicon.mask.css:资产库 mask 样式;yunhai-logo.svg:站点 Logo 矢量件
- main.scss/_app_container.scss:网格图标容器样式配套
依据:根目录《AppIcon资产库落地-执行报告-20261004.md》P3 UserHome(PC)接入
|
2026-10-06 20:20:32 +08:00 |
|
chenxing
|
93249cf5f5
|
chore(sync): YschTheme sync 件刷新(theme.ts 20261006-2013-75c1d10 + avatar 两件首次入库)+ view-ui-plus ^1.3.24 对齐
theme.ts 仅版本戳行变更(20260930-1248 → 20261006-2013);avatar.ts/UserAvatar.vue 为 YschTheme 默认头像轮 sync 下发公共源;package.json view-ui-plus ^1.3.19 → ^1.3.24 对齐通道生成基线(YschTheme iview-version 版本锁基准)
|
2026-10-06 20:20:30 +08:00 |
|
chenxing
|
1d34e5745d
|
feat(settings): 个人信息手机号/邮箱开放自助修改——保存按钮启用走 /api/user/UpdateContact(前端校验与后端同口径:手机号 1[3-9] 段位/邮箱格式/长度),成功以接口返回的最新 BoaUser 合并 store.userInfo 即时回显(规避 CAS principal 缓存旧值);BaseApi 新增 updateContact(任务B·前端)
|
2026-10-02 08:56:46 +08:00 |
|
chenxing
|
f52ce4136e
|
feat(settings): 我的壁纸 pane(mywallpaper,主题分组,所有人可见)——能力复制自 Header 设置壁纸模态框(模态框保留不动):系统/校区/我的上传三组网格点选即保存(checkWallpaper)、当前值回显 store 用户设置、上传走 /api/wallpaperUpload、个人壁纸可删;零新接口(任务A)
|
2026-10-02 08:45:47 +08:00 |
|
chenxing
|
7e239a0c73
|
style(settings): 边栏设置 pane 列宽与样式微调——未设宽列补 width/minWidth(名称120/图标70/地址220/打开方式100),地址列 tooltip 超长省略,操作列固定右侧,工具栏加分隔线收紧间距;Header「边栏设置」菜单改跳 /settings?pane=sidebar 并移除 test 残留按钮与旧 MenuBarModal 挂载(组件文件保留)(任务D)
|
2026-10-02 08:44:06 +08:00 |
|
chenxing
|
41f4dade91
|
fix(settings): 个人信息「所属部门」显示组路径——BoaUser.dept 是对象直显成 [object Object],改为取 groups 链学校组(type=2)→挂载组区段反向 join('/')(如「云海小学/校长室」),无学校组回退挂载组名、链空回退 dept.name、兜底 '-'(任务C)
|
2026-10-02 08:42:16 +08:00 |
|
chenxing
|
9bf2d3dbb1
|
feat(settings): 边栏设置 pane 对接真实管理(自 Header MenuBarModal 迁入)
build / build (push) Successful in 2m43s
- sidebar pane 静态示意(drag-list 占位)替换为真实管理:getMenuBarSchList 列表 + 新建/编辑/删除/toggleMenuBarShow 显示开关,列结构与图一 MenuBarModal 完全一致(名称/图标/角色/地址/打开方式/系统页面/是否显示/排序号/操作,isEdit 控制操作权限)
- 新建/编辑表单照抄:roleIds 多选(全部/半选态)、名称/网址、图标 iconUpload 直传(.svg + 网关头,可移除重传)、排序号、悬浮底部/系统页面开关、非系统页面时打开方式 Radio(排除 Modal)、IFrame 时显示头部开关;删除走 MyConfirm 二次确认
- 编辑弹窗为页面级 iview Modal(transfer);保存/删除/开关语义与 Header 弹窗一致(Header 入口未删,两处同数据同接口)
- 打开 pane 懒加载列表;静态 sidebarItems/drag-list 样式删除
|
2026-09-30 14:28:49 +08:00 |
|
chenxing
|
449696af04
|
ci: 重触发构建与自动发布——302aec5 建档后线上 /userhome/front/ 持续空响应(index.html 0B),projman auto 发布疑似下载/persist 中断,重跑完整链路重试
build / build (push) Successful in 2m56s
|
2026-09-30 13:36:20 +08:00 |
|
chenxing
|
302aec52a6
|
fix(theme): schooltheme 补 item 级 adminOnly(审计发现普通用户导航出现「本校默认」)
build / build (push) Successful in 2m22s
步骤 4 harness 取证(role=user dump)发现 NAV_THEME.schooltheme 漏标 adminOnly: true,
item 级过滤未生效(ADMIN_PANES 兜底仍在,直达 URL 落 noperm 黄条验证通过)。
修复后重验:user 导航无「本校默认」、有「我的主题」、直达 ?pane=schooltheme 落 noperm;主构建绿
|
2026-09-30 13:19:44 +08:00 |
|
chenxing
|
357c0edb52
|
feat(theme): 设置页「主题」导航组 + iframe 预览页 + 学校默认档对接(主题设置 S2)
- Settings.vue:新增「主题」导航组(组级不设 adminOnly),mytheme「我的主题」所有人可见、schooltheme「本校默认」item 级 adminOnly + 入 ADMIN_PANES 双保险(NavItem 扩展 adminOnly 字段,navGroups 组级+item 级双层过滤);两个 pane 左色块右预览 iframe——候选档经 ?yh-theme=/yh-side=/yh-grad= URL 覆盖参数拼进 #/theme-preview src,切候选即换 src 重载;档位清单本轮硬编码 5 档(主色取通道 tokens);「跟随学校默认」=删用户键、「跟随系统默认」=clearSchTheme 清空学校配置;当前生效档与来源(我的选择/学校默认/系统默认)经 resolveEffectiveThemeState 标注
- views/ThemePreview.vue(新增):纯展示预览页——顶栏 .header-container + 左菜单 .left-menu + 面包屑 + iview Table 写死 4 行,DOM 结构对齐 Notice layout,观感由通道 CSS 按档位类驱动;根容器 pointer-events:none,无搜索/分页/ThemeSwitcher;挂载时动态 append 通道 init(baseHost + /static/js/yh-theme-init.js,判重防双挂)——仅该 document 吃通道 CSS,UserHome 本体 index.html 不加 loader(定案)
- App.vue:/theme-preview 顶层独立分支(不进桌面框架、不依赖登录态与 isRouterAlive——未登录直开不白屏);菜单白名单加 /theme-preview;登录成功后异步拉 schTheme 写 localStorage[yh-theme-sch-default](失败/空不写不报错,推荐值语义)
- router/routes.ts:登记 /theme-preview(实际渲染走 App.vue 分支;若后续引入守卫须列入免登录白名单——注释已写明)
- BaseApi:getSchTheme / saveSchThemeState / clearSchTheme 三封装
- src/utils/theme.ts:YschTheme npm run sync 下发(版本 20260930-1248-4e12e6d,含 SCHOOL_DEFAULT_STORAGE_KEY 与 resolveEffectiveThemeState 新导出)
|
2026-09-30 12:59:35 +08:00 |
|
chenxing
|
0ded3cce9f
|
feat(settings): 五个 pane 对接真实数据(零新接口)——profile 读 store、改密登出流程、头像直传、logo/wallpaper 管理列表
- profile:姓名/工号(暂以登录账号展示,接口无独立工号字段)/部门/手机/邮箱改读 store.userInfo(无值显示 -),保存按钮占位 disabled(接口待 UserBase 支持本人自助修改,拍板搁置);头像行 v-real-img 真实图
- password:非空/一致性/不同旧密码/长度校验 + BaseApi.updatePassword,成功提示后 1500ms 登出跳 CAS(确认登出流程照抄 UserInfoModal L162-183,不自创)
- avatar:Upload 直传移植 UserInfoModal(action=/api/avatarUpload、accept/format/max-size 20480/with-credentials/网关头/成功写 store.profilePicture 照抄);预设色块保留、「使用默认头像」disabled 占位
- logo:getSchLogoManageList 管理列表(不带 schId,按登录人归属校返回;超管按机构切换走 sys pane)+ 直传 /api/logoUpload + deleteLogoById + 「保存设置」走 saveSchLogo(schId 后端按登录人推断)
- wallpaper:getSchWallpaperManageList + 直传 + deleteWallById + 「应用壁纸」采用 checkWallpaper 个人壁纸语义(与 Header 壁纸弹窗现状一致,执行报告写明;校级默认壁纸保存接口不存在,不发明新语义)
- BaseApi 补 saveSchLogo 封装(复用已有后端接口);sidebar/statset/sys/backend/noperm 五个不动 pane 模板 diff 为空;navGroups/ADMIN_PANES 权限结构未动
|
2026-09-30 12:43:27 +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
|
e91ce14408
|
feat(msgcenter,settings): 留白对齐与左侧图标规范化——/msg、/settings 壳层 padding 15px、msg-side 216px、sys pane :deep 抹平、LeftMenu 移除硬编码入口、菜单图标 fill 化
|
2026-09-30 12:18:57 +08:00 |
|
chenxing
|
c3fbfeefa8
|
ci(build): 前端构建挂宿主 npm 缓存卷 + 切国内镜像源,治 CI 13 分钟慢
build / build (push) Successful in 4m16s
- 实测 build #10 耗时 13分5秒,其中 npm install 占 12分46秒(97.6%,added 754 packages in 13m),
vite build 仅 16.53s —— 瓶颈唯一且固定在依赖安装
- 根因:① 每次起全新 node:20 容器、装完即 rm -f,node_modules 零缓存;
② .npmrc / yarn.lock 均被 .gitignore 忽略 ⇒ CI 走公网 registry.npmjs.org 跨境下载 + 无 lock 全量解析
- 修复(照 notice/service 的 m2 缓存做法):
- 挂 -v /opt/docker/projman-npm-cache:/root/.npm,npm 缓存落宿主、跨构建复用
- npm config set registry https://registry.npmmirror.com,跨境改境内
- npm install 加 --prefer-offline,优先命中宿主缓存
- 预期 13min → 3~5min;首次构建缓存为空不改善,第二次起见效
|
2026-09-30 10:01:10 +08:00 |
|
chenxing
|
aa3dafa932
|
feat(msgcenter,settings): 消息中心与设置中心路由化 + 背景层双卡改造
build / build (push) Successful in 13m13s
- 新增 /msg 消息中心路由页:左右双卡(左卡按分类/按应用双模式、右卡工具栏+列表),
mock 数据,含时间格式/未读红点/已读三重置灰/审批直批按钮
- 新增 /settings 设置中心路由页:左导航卡+右内容卡,10 个 pane,?pane= 双向同步,
管理员/普通用户角色差异(普通用户直达管理项渲染无权限黄条)
- 侧栏新增「设置」一级入口(前台硬编码补位,后台已配同 url 时自动去重)+ 分隔线 + 本地齿轮图标
- SysSetting.vue 卡片化:圆角 5→10px + 阴影,统一为 0 10px 20px rgba(0,0,0,.1)
- .base-mask 提升:rgba(255,255,255,.35)→.55,blur(2px)→10px
- Header 铃铛「查看全部」改跳 /msg;App.vue 菜单守卫放行 /msg、/settings(前台路由不在后端菜单表)
|
2026-09-30 09:28:50 +08:00 |
|
chenxing
|
08fa15db24
|
feat(msgcenter): 消息跳转入口改用后端 showJump 判权出参(C1)——铃铛卡片箭头与全部消息「去处理」v-if 由 jumpUrl 切至 showJump,审批按钮不受影响
build / build (push) Successful in 15m3s
|
2026-09-28 16:52:54 +08:00 |
|
chenxing
|
a7ae4db2fb
|
feat(msgcenter): 消息卡片直批入口——铃铛卡片与全部消息表格加同意/拒绝(msgType=2),弹窗拒绝意见必填、提交防重、成功标已读刷新
|
2026-09-28 13:30:30 +08:00 |
|
chenxing
|
a0f104d1b4
|
fix(ci): npm install --ignore-scripts(node-sass@6 遗留依赖在 node:20 无预编译必炸;vite 实际走 dart-sass)
build / build (push) Successful in 14m15s
|
2026-09-19 14:21:21 +08:00 |
|
chenxing
|
2c7d6cdf0a
|
fix(ci): npm ci→npm install(本仓不提交 lock,ci 无 lock 必 EUSAGE)
build / build (push) Failing after 14m53s
|
2026-09-19 13:58:13 +08:00 |
|
chenxing
|
efd3b57826
|
feat(msgcenter): 消息中心 WS 实时推送前端 + CI 接入 projman 自动链路
build / build (push) Failing after 13s
- Header.vue:铃铛未读角标 + WS 客户端(25s 心跳/断线 5s 重连换新票/newMessage 红点+1+Notice 弹提示)
- BaseApi.ts:getMsgCenterWsTicket(POST /api/msgCenter/wsTicket 代签一次性票据)
- index.html:修复 lodash 引用路径(./libs/lodash.min.js,dev 404 致白屏)
- CI:build.yml 照 notice/front 模板(构建→zip→Nexus front-hosted→webhook 建档);
userhome deployMode=auto,webhook 后自动发布;凭据 prod.env+projman DB 直读(不走仓库 Secrets)
|
2026-09-19 13:48:32 +08:00 |
|
chenxing
|
0e3bd97c55
|
10号功能修订
|
2026-09-10 09:47:46 +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
|
696d8f1fff
|
ci: 移除 userbase 专用 deploy.yml,仅保留 projman 标准 build workflow
build / build (push) Successful in 2m7s
|
2026-09-10 08:54:35 +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 |
|