ops
|
3cfad02a43
|
fix(ci): 构建容器名唯一化 + npm 走国内镜像源(避免并发互踩 exit 137)
|
2026-10-21 06:24:32 +00:00 |
|
ops
|
ea14dc6f82
|
ci: apk 源统一走 aliyun(规避 dl-cdn 时段性被拦卡 60s)
|
2026-10-21 01:37:04 +00:00 |
|
chenxing
|
ed0c752f4a
|
refactor(oapi): 提供方强制验签迁 starter——enforce-patterns+trust-registry(审计 P1-6 / L2-8)
build / build-push (push) Successful in 1m25s
- 删自写 svcitem/config/OpenApiAuthEnforceConfiguration(yh-app-auth starter 版
RequireAppSignFilter 承接,order+11 行为等价;/oapi/site/list 面无签名即 401)
- yh.app-auth.server.enforce-patterns=[/oapi/*] + trust-registry=true(中央密钥链组合:
trusted-apps 100018 先、Redis sign:app:* 链后,Notice/flow-center 同款)
- data-redis 自 test scope 提升编译期(yh-app-auth 侧 optional 不传递,生产 classpath
此前并无该依赖);management.health.redis.enabled=false 防 Redis 抖动拉 DOWN 健康
- 测试 yml 同步 enforce-patterns:删自写副本后 SiteOapiIT 的 /oapi/** 401 断言由
starter 过滤器承接;trust-registry 不进测试配置(IT 密封性,签名用例 100018 走
trusted-apps 命中)
门禁:mvn test -Dskip.tests=false 413/413 绿(含 SiteOapiIT 6/6,本机 MySQL8+Redis)
|
2026-10-05 22:26:44 +08:00 |
|
chenxing
|
55d80e21a4
|
feat(oapi): /oapi/site/list 下发站点主题 theme+themeParams(T1)——SiteOptionVo 扩两字段 raw 透传(theme 空=default、themeParams=config_json.theme_params 原样键值、未配=空对象),ExtJsonUtils 解析对齐 PortalSiteSnapshot 风格;SiteOapiIT 冻结新契约(demo1 campus-glow、demo2 兜底形态)
|
2026-10-03 13:43:36 +08:00 |
|
chenxing
|
84224b31bb
|
feat(portal): 我要办理深链带 from 回跳参数(T4)——新增 SvcHallLinks 纯函数构造器(base 尾斜杠裁剪+UTF-8 urlencode+from 缺省不追加),PortalController 自动生成分支改走它并补 from=指南页绝对 URL(hall 显示返回门户);urlEncodeValue 私有方法随唯一调用点替换删除;ServicePortalIT 断言同步新契约
|
2026-10-03 13:26:30 +08:00 |
|
chenxing
|
f591d06c35
|
refactor(svcitem): 目录键归一 svchall→svc-hall(D1)——服务目录键/legacy 私有键 yh.svchall.base-url→yh.svc-hall.base-url(值域=部署名锚点),javadoc/测试/测试 yml 同步;Java 包名 com.yunhai.svchall 按惯例保留
build / build-push (push) Successful in 1m18s
|
2026-09-28 17:32:31 +08:00 |
|
chenxing
|
da39bb5066
|
[CMS-VISUAL] D-8 补提交: 三保留主题 home.html 挂载骨架共享动效脚本(animation=off 可关)
build / build-push (push) Successful in 1m0s
|
2026-09-28 15:16:26 +08:00 |
|
chenxing
|
fbcf783d3b
|
[CMS-VISUAL] R-45 形状语言补强: stats_band 计数环 conic-gradient 装饰(设计卡 ring-gradient 语言落点)
|
2026-09-28 15:13:18 +08:00 |
|
chenxing
|
a9e4240bb3
|
[CMS-VISUAL] E 激进清场: 下架 10 套伪主题(tag themes-before-cleanup-2026-09 + docs/主题备份/ 双备份)→ 保留 default/scholar-blue/campus-glow 三套;色皮档并入 default.colorScheme、克隆档并入 scholar-blue.colorScheme(ThemeParam.presets + ThemeVarsCss 变量组注入);别名表 R-46 映射(渲染端不断渲染 + 保存归一化 + 站点级 theme_params.colorScheme)
|
2026-09-28 14:58:31 +08:00 |
|
chenxing
|
efd3cb30f9
|
[CMS-VISUAL] D 测试: PortalDComponentsIT 5 用例(骨架渲染/topic/event/空态 R-44/日期排序/形状参数)+ PersonServiceIT 4 + HomeLayout 校验 2 + purgeTables 清 cms_person
themes-before-cleanup-2026-09
|
2026-09-28 14:04:38 +08:00 |
|
chenxing
|
4cb435b715
|
[CMS-VISUAL] D1-D10 后端: 新组件数据槽(banner 扩 topic/event 位 5 列 + cms_person 新表+CRUD+防跨站)+ 6 区块类型校验与装配(空数据整块不渲染 R-44)+ 骨架新组件 fragment/内置 22 图标集/共享动效 JS(reveal+count-up R-42)+ searchStyle 搜索浮层(D-10,含坑④条件包裹修复)+ 三保留主题 4 新参数
|
2026-09-28 14:04:19 +08:00 |
|
chenxing
|
089cb54011
|
[CMS-VISUAL] F2: 门户布局区块输出稳定 id + data-plb-id 锚点(display:contents 零布局影响)+ postMessage 预览监听脚本(门户侧 50 测试绿)
|
2026-09-28 12:52:45 +08:00 |
|
chenxing
|
c60f9dffb7
|
[CMS-VISUAL] F3: 首页展示形态唯一入口收敛到布局编辑器——栏目保存缺省 homeStyle 时保留存量值,管理弹窗移除该下拉(19/19 IT 绿)
|
2026-09-28 12:32:34 +08:00 |
|
chenxing
|
19e9c18c96
|
feat(theme): S7 炫彩校园主题补齐——3 形态自研+2 新区块+svc/guide 页族,A 档三包整项自审收口
build / build-push (push) Successful in 49s
- fragments/home-blocks.html 150→280(纯追加 130 行):news_grid/media_focus/image_wall 三形态
由委派 common::plb* 改为本包自持,并补 quick_links/notice_bar;空态用内联 div.cg-empty
(与 scholar-blue/mint-breeze 的 ::empty 子片段策略分裂,记 R-37 未统一)
- home.html 分派改双层 th:switch(case 父 / replace 子,坑④)并引入 common :: style(R-32 本包实例关闭)
- assets/css/main.css 402→656(纯追加 254 行,0 删):新节全部 .cg-svc-*/.cg-chip/.cg-tag/.cg-sec-card
等全新类名,未重写任何既有选择器;坑③ 在本包论证不适用(.cg-home 非网格,全幅 section 天然占满)
- 新建 service.html(135)/guide.html(134):poly-blue 页族换皮,绑定面 diff 0 差异
- theme.json 零改动(P-A3 步骤 6「不动参数」,实测 9 参保持)
- 后端全量 412/412 + 前端 160/160 绿;本次 S10 复跑后端 412、前端 166 绿
|
2026-09-22 21:54:35 +08:00 |
|
chenxing
|
854204d1c0
|
feat(theme): S6 薄荷沁风主题改造——自研 home-blocks 10 形态+2 新区块、svc/guide 页、三列网格区块显式跨行
build / build-push (push) Successful in 55s
- fragments/home-blocks.html 新建 238 行 11 fragment(8 形态 + quick_links/notice_bar + empty),
坑①空态守卫写在外层 th:block、坑②新增可选键一律 block['key'] 括号访问
- home.html 双层 th:switch(case 在父、replace 在子,坑④),未知类型仍回落 common :: render
- assets/css/main.css 617→1123 行:.home-main 三列网格下每个区块根类显式 grid-column:1/-1(坑③最高风险点)
- service.html/guide.html 新建(poly-blue 平移换皮,绑定面零差异);theme.json params 9→10 新增 headerStyle
- fragments/header.html 1 行接 themeParams['headerStyle']
- 其余 10 套包零改动;后端全量 412/412 绿(skip.tests=false,3307 侧车库)
|
2026-09-22 21:53:43 +08:00 |
|
chenxing
|
bc794ccce3
|
feat(theme): S5 学院蓝主题改造——home-blocks/service/guide页+区块CSS+ThemeRegistry增强
build / build-push (push) Successful in 53s
|
2026-09-22 17:35:38 +08:00 |
|
chenxing
|
82d6ff4602
|
feat(theme): 新增三套高校官网风皮肤 poly-blue/agri-forest/jade-normal
build / build-push (push) Successful in 51s
以 default 为基座(文件最全:含事项库 service/guide 两模板),设计语言与配色取自
真实高校官网 CSS(浙理工 #0558A5+橙、信阳农林 #1C6E19+麦穗金、信阳师大 #008D3F+暖橙)。
三包均自带九段 home-blocks、:root 契约变量别名、中文防塌列三件套、真实实拍截图
(1920 无头截图缩样)。
- UniversitySkinContractTest(7 用例):九段 fragment/homeStyle 分发/防塌列/变量别名/
层序/自有截图/主色色域(蓝或绿通道主导,粉紫禁入)
- ThemeRegistryTest +哨兵:三包注册成功且主色与 default/scholar-blue 及彼此互异
- jade-normal 修复:news_grid 全宽封面变体把正文列压成 0 宽致 390px 溢出 47px,
增 .jn-feat-a--stack 纵向变体,复测 overflowX=0
- 门禁:ThemeContractIT 14 主题×7 路由全绿;全量 mvn test 393/393 绿
|
2026-09-20 02:31:53 +08:00 |
|
chenxing
|
d2df12b91e
|
feat(theme)!: 下线粉/紫两包,改以学院蓝为基座交付 academic-navy/campus-azure 两套高校官网风皮肤
build / build-push (push) Successful in 51s
线上 10027 首页配了 home_layout 后走 themes/common 通用骨架,派生皮肤只换了页头页脚,
正文仍是骨架内置蓝灰卡(外加 cherry-bloom 的粉紫配色),用户判定"完全不能用"。
- 新增 academic-navy(学府藏蓝,an-)/campus-azure(青蓝校园,cz-):以 scholar-blue 为基座,
各自自带 fragments/home-blocks.html 与 home.html 分发,news_grid/media_focus/compact/
image_wall/card/ticker/gallery/links 八种区块形态全部由皮肤渲染,未知类型才回落通用骨架
- 两套皮肤 :root 把私有变量别名到 --primary/--text/--card-bg/--border/--radius 契约变量;
中文行锁 nowrap+min-width:0+ellipsis,grid 轨道用 minmax(0,1fr) 防窄视口压塌
- 新闻背景带 .an-sec-bg/.cz-sec-bg 压 z-index:0、卡片抬到 1:绝对定位层默认画在普通流之上,
不抬起会整张卡片泛成底图色(无头截图实测)
- common 骨架空态守卫改包 th:block(th:replace 优先级 100 先于 th:if 300)
- 删除 cherry-bloom/violet-iris;sql/upgrade_theme_academic_skins.sql 幂等改指存量站点
(站点缓存 CacheNames.SITE TTL 30 分钟,改库后需重启或在管理端重存站点)
- 测试:AcademicSkinContractTest(区块自带/分发/CJK 行/变量别名/主色必须学术蓝/背景带层级/
预览图不得沿用基座)、HomeBlocksCssContractTest、PortalHomeLayoutIT 端到端断言零 plb- 输出;
全量 383 项通过
|
2026-09-19 20:21:30 +08:00 |
|
chenxing
|
52433f06a2
|
fix(theme): 首页/列表移动端 1fr 网格改 minmax(0,1fr) 消除窄视口横向溢出;新包落位真实截图与 favicon
build / build-push (push) Successful in 50s
|
2026-09-19 17:47:41 +08:00 |
|
chenxing
|
085c284829
|
feat(theme): 新增 cherry-bloom/violet-iris 两套门户皮肤并应用于视觉种子院系子站
|
2026-09-19 17:18:19 +08:00 |
|
chenxing
|
c44c35bf2a
|
fix(portal): 错误页返回首页链接改 th:href=@{/portal/} 感知 context-path(R-04)
|
2026-09-19 17:18:10 +08:00 |
|
chenxing
|
8839ef8a5f
|
feat(site): /oapi/site/list 按校查询只下发主站——院系子站不接入办事大厅
build / build-push (push) Successful in 50s
- 带 schId 过滤 parentSiteId=0(办事大厅按校接入,一校一主站,SiteOapiIT 冻结契约)
- 不传 schId 全量仍含子站:svc-hall resolveSite 反解 siteCode→schId 依赖,历史办件可继续定位
|
2026-09-17 14:51:07 +08:00 |
|
chenxing
|
89a5a346d3
|
fix(portal): 服务中心/指南页顶导航高亮——外链栏目匹配为当前栏目,首页不再误高亮(8 主题兜底 navServiceActive)
build / build-push (push) Successful in 1m43s
|
2026-09-17 01:10:14 +08:00 |
|
chenxing
|
649ad66264
|
refactor(sdk)!: CMS→svc-hall 出站改走 YschOpenCall 命名目标 + 适配 SDK 领域分包
build / build-push (push) Successful in 1m36s
- SvcHallClient:由手搓 IDHttp + yh.svchall.base-url 拼 URL 改为 YschOpenCall 命名目标
svchall(服务目录 yh.open.services.svchall)。原形态对带 context-path 的 svc-hall
必 401(共享拦截器只剥 yh.open.base-path=/userbase);per-target base-path 与提供方
ctx 对齐后签名天然一致。目录未配时回落 legacy 键;两者皆缺则构造期 fail-fast。
- SvcItemRemoteQuery:新增 businessAbsent 判定,统一两条出站路径的「业务 code=2 →
404 哨兵/空集,其余上抛」语义(目录路径抛 DException,legacy 抛 DHttpException)。
- import 迁移:YschBaseOpenApi → openapi.base.*(SDK 领域分包)。
- application.yml:新增 yh.open.services.svchall,删 yh.svchall.base-url。
- 测试:新增 SvcHallClientTest(8 例:目录目标/参数映射/空参不下发/fire-and-forget/
回落/fail-fast);SvcItemRemoteQueryTest 补目录路径错误语义 4 例。104 测试全绿。
|
2026-09-16 21:05:55 +08:00 |
|
chenxing
|
1cb95225a6
|
周末修订
build / build-push (push) Successful in 3m59s
|
2026-09-15 23:41:34 +08:00 |
|
chenxing
|
e4b843cf00
|
refactor(base): GetUserMod 改为消费用户中心下发的模块树;默认关闭测试执行
build / build-push (push) Successful in 1m9s
两处独立改动:
1) CmsUserCenterService:用户中心已按平台契约 BoaModule.children 下发模块树,本仓原先
按 parentId 重建父子关系的 buildModuleTree 成为空转(与 Notice/svc-hall 同构的重复实现)。
现收敛为 toFrontendTree,只做前端 layout 需要的字段改名(path→page、id→modId、补
usable/orderNumber)并递归映射 children;层级与兄弟顺序以上游 customId 序为准,本侧不
重排。前端契约不变(children 恒为数组);拿到旧版用户中心的扁平结果(children=null)时
退化为与今日一致的扁平菜单,不抛 NPE。保留原有平台不可达时的空菜单降级。
2) pom:新增属性 skip.tests(默认 true),surefire 以 <skipTests>${skip.tests}</skipTests>
消费——测试执行默认关闭。原因:本工程 *IT 集成用例连本地 MySQL/Redis,缺中间件时成片报
Communications link failure / 上下文加载失败(353 例中约 262 例),噪音掩盖真信号,且
CI 构建本就是 mvn -DskipTests package,本地空跑约 20 分钟。只跳「执行」,测试源码仍编译,
接口漂移仍可在编译期发现;需要跑时用 mvn test -Dskip.tests=false 临时打开。
|
2026-09-15 18:43:24 +08:00 |
|
chenxing
|
9e28092a8b
|
feat(svcitem): 事项库+办事大厅 R2 后端落地,并完成交付后独立审计修复
build / build-push (push) Successful in 2m26s
落地(依据《事项库与办事大厅详细设计 v1》)
- 事项域垂直包 com.yunhai.cms.svcitem.*(entity/enums/repository/service+impl/event/config/model dto+query+vo)
与 controller/{api,oapi}/svcitem;两表 DDL 进 cms_init.sql(表 7/8)+ upgrade_svcitem_r2.sql
- SvcItemQuery 接缝:门户 8 方法 + 管理端 11 方法统一收口,控制器不再注入实现类
- 门户公开层:doServiceList/doGuide 双路由变体 + M0 可选模板整页回退
(视图名/themeBase/buildUrl/资产主题段四处同源 effectiveTheme,缺模板整包退 default)
- oapi 跨服务快照:与平台 AppAuthFilter 同口径签名(canonical=method\npath?sortedQuery\ntimestamp,
HmacSHA256/Base64, 5min 窗口)+ /oapi/* 强制验签过滤器
- default 皮肤 service.html/guide.html + main.css 服务中心/指南页样式段
审计修复(发现与处置全表见 docs/18-事项库审计与修复记录.md)
- D1 附件引用链:内容资产(封面+正文内嵌图)独立场景 svc_item_asset,保存时按内容派生全量同步归属
(AttachmentService.localAssetUrls/localWebUrl/syncAssets:集合内标记、集合外解除)。
修复根因:upload 带 scene 时只写 ref_type 不写 ref_id,而保存仅按前端提交 id 重绑,
正文图与封面停在半绑定态 → 既不在孤儿口径内也不受 release 管辖,成永久无主行
- D5 归属校验:绑定前做可认领判定(无引用/半绑定/已属本事项方可绑),他事项引用与跨站附件跳过并告警
- D2 部门:组类型改配置 cms.svc.item.dept-group-type(默认 2=学校组,校内科室改 3);
deptTree 返回嵌套组树;新增 SvcDeptSource 接缝使静态 getGroupTree 可替身(此前部门链零覆盖)
- D4 缓存:事件 scope 语义化,dict/dept 变更整体失效 cms:svcItem(展示名快照不再滞后 5min)
- 站点解析:findByCode 在 uk(parent_site_id,code) 下命中多条会抛异常变 500,
4 处生产调用点改 findFirstByCodeOrderByIdAsc(确定性取最早站点)
- 加固:新增 idx_svc_item_portal(含 DESC 列)对症门户排序 filesort;升级脚本改 information_schema
+PREPARE 幂等索引守卫块(表在缺索引可重跑修复);clear_cms_data.sql 补事项两表;
view_count 改有界队列+拒绝丢弃告警;SEL_LIST_MAX 截断告警
测试
- 新增 SvcDeptChainIT 7、SvcItemServiceIT 16(含 D1/D5 回归锚点与全方法权限)、
SvcItemOapiIT 9(时间戳超窗/未知 appKey/畸形头/siteCode 歧义)、SvcItemPortalIT 11
(嵌套指南路由/关键词/canonical/浏览量异步)、SvcDictServiceIT 8(改名后缓存即时刷新)
- ThemeContractIT 补"缺可选模板主题资产段必退 default"断言并订正七路由表述
- 全量 mvn -o test:388 测试 0 失败;升级脚本 bsch_cms_test 两跑幂等(含缺索引自动补建)
|
2026-09-11 14:12:04 +08:00 |
|
chenxing
|
39454e4efb
|
feat(portal): docs/16 首页布局后端- home_layout零DDL消费与主题fragment化-PortalSiteSnapshot.homeLayout+normalizeHomeLayout脏数据容错;PortalPageRenderer.buildLayoutBlocks按区块序列渲染(article_list多栏目聚合+homeStyle别名+category合成+background回落news_bg_image/ticker top|category双源/gallery标题副题缺省旧键/links分组过滤/visible跳过/未知type跳过/size 1~20夹取);布局模式清空topArticles/focusArticles/categoryBlocks/galleryBanners回落段;SiteService.validateConfigJson带siteId收紧home_layout(blocks<=30/type白名单/size 1~20/文本<=100/categoryIds归属校验:新建拒跨站拒不存在拒);themes/common/fragments/home-blocks.html plb-*兜底骨架(不注册皮肤包,Thymeleaf classpath可解析);campus-glow自有fragment(news_grid/media_focus/card/ticker/gallery)原home.html抽出;default+blue-white+classic-red+fresh-mint+mint-breeze+warm-kinder+scholar-blue+campus-glow八套home.html接入布局分支(th:case父元素+th:replace子元素嵌套,replace优先级100先于case执行);新增PortalHomeLayoutIT 5+SiteServiceHomeLayoutIT 3,全量330绿
build / build-push (push) Successful in 52s
|
2026-09-10 15:08:40 +08:00 |
|
chenxing
|
98d640faba
|
feat(portal): 门户左侧栏目导航+首页视觉升级+主题正名批次-PortalSideNav模型+attachCategoryNavigation注入doCategory/doArticle三件套categoryPath/navTopId/sideNav(站点快照树推导零新增查询,home/search不注入);7主题侧栏两栏markup+窄屏横滚+顶导航祖先高亮+二级下拉当前项高亮+面包屑全路径;cms_category.home_style全链路(news_grid 16条8x2日期前缀/media_focus形态)+PortalListData.Item补source来源徽标四处装配;Banner机制gallery展示位→galleryBanners四列大图轮播(自由字符串零DDL);页脚config 12新键(footer_addresses多校区/qr_*/social_*含URL校验,footerAddressLines由PortalSiteSnapshot.of拆行派生);新增展示型皮肤包campus-glow;fresh-mint2正名fresh-mint(theme.json/头注释同步);AttachmentService scene白名单加category(单页富文本贴图免清孤儿);新增PortalSideNavIT 8+PortalHomeBlocksIT 3,CategoryServiceIT/SiteServiceIT/PortalSsrIT/ThemeContractIT等单类独跑全绿;附sql/clear_cms_data.sql全量清库脚本(清cms_*六表留平台账号/主题包/上传文件,测试数据重走用)
build / build-push (push) Successful in 1m47s
|
2026-09-10 11:10:48 +08:00 |
|
chenxing
|
f4b1749377
|
refactor: 删除 PropertyEnvConfigSource,env-config 数据源由平台默认挂载文件源兜底(yh-env-config starter B2 下沉)
build / build-push (push) Successful in 1m52s
|
2026-09-09 11:27:39 +08:00 |
|
chenxing
|
a666e13f56
|
feat(theme): 皮肤包管理收敛与命名批次-兜底catch经wrapFailure先log.error记原始堆栈再包装(upload/derive/updateMeta三处,extractZip/deleteRecursively静默吞改warn/debug);内置包改显示名走.meta覆盖层(ThemeRegistry加载后覆写title/description,updateMeta放开内置:全空=恢复默认,params拒改);derive/upload支持表单命名(theme.json改写regex换ObjectMapper防误替换,upload落位前改staging失败不落位);resolveTheme回退warn补站点编码;ThemeVo.editable语义改为可编辑元数据;附内置包mint-breeze/fresh-mint2与R1学校主站编码迁移SQL;308/308全绿
build / build-push (push) Successful in 48s
|
2026-09-08 20:25:43 +08:00 |
|
chenxing
|
12a492fc55
|
feat(env-config): 管理端运行时配置接入-PropertyEnvConfigSource数据源(yh.env-config.source.<target>,target=admin),免登录GET /api/env-config由聚合starter自动装配(旁路CAS),EnvConfigApiIT随机端口匿名200/未配置{}契约(兼平台starter回归哨兵),全量301/301
build / build-push (push) Successful in 1m17s
|
2026-09-08 17:18:17 +08:00 |
|
chenxing
|
338ffb56dd
|
feat(W1): 皮肤包完整管理-外部主题目录+热注册,zip上传/派生/编辑/删除,ThemePackageValidator收敛,Thymeleaf文件解析器,list增source/inUseCount/editable/usedBySiteNames,T-W1-01..20 全绿299/299
build / build-push (push) Successful in 52s
|
2026-09-08 14:52:29 +08:00 |
|
chenxing
|
536bd6cea4
|
feat(W4): 院系子站嵌套路径-cms_site.path列+uk_site_path/parent_code,门户单段+嵌套双映射,旧链301,public_base_url派生,sitePath预览,SQL三处+升级脚本,T-W4-01..15 全绿279/279
|
2026-09-08 12:34:33 +08:00 |
|
chenxing
|
5da6f7ee5d
|
fix(W3): 预览资产代理前缀拼 request.getContextPath(/yschcms 下 CSS 404 裸 HTML),T-W3-01..04 全绿+全量 264/264
|
2026-09-08 10:51:52 +08:00 |
|
chenxing
|
32448f097e
|
docs(收尾): README 增接口变更声明-site/save 权限拆分/attachment scene/unusedCount/custom_css
build / build-push (push) Successful in 49s
|
2026-09-07 20:38:37 +08:00 |
|
chenxing
|
a3bee60b61
|
feat(B4): 友链页脚 Logo 渲染-5主题 img+名称并排,渲染期补基准
- PortalLink 模型已有 logoUrl,渲染缺口在模板:5 套 footer 增 th:if logo 图(url.upload 补基准+alt 名称+lazy)
- 5 套 main.css 增 .link-logo(高20px/contain/垂直居中/过宽截断)
- PortalSsrIT+2 例(有 logo 渲染图/无 logo 纯文字无 link-logo);mvn -o test 260/260 全绿
|
2026-09-07 20:22:44 +08:00 |
|
chenxing
|
19e414ee81
|
feat(B3): custom_css 站点级自定义样式-服务端黑名单强校验+5主题head内联直出
- validateConfigJson 增 custom_css 分支:≤10240字符;黑名单忽略大小写拒 </style/<script/@import/expression(
- 快照/渲染链路(model customCss)与 themeVarsCss 同构注入;缓存失效复用既有 SiteContentChangedEvent
- 5 套主题 head.html 于 main.css 与微调变量之后 th:utext 直出(安全性完全依赖服务端先行)
- SiteServiceIT+6 例(含 expression 红线项与 10240 边界);PortalSsrIT+3 例(渲染/head内/顺序/缓存失效)
- mvn -o test 258 例全绿(B3 状态,不含 B4 红测)
|
2026-09-07 20:14:23 +08:00 |
|
chenxing
|
b4822a7f38
|
feat(B2): 附件引用模型-cms_attachment 增 ref_type/ref_id,消灭孤儿误报
- 实体/双 SQL 加列+idx_att_ref;upload 增 scene 白名单(banner/link/site)
- AttachmentService 新增 markUsed/release/markSiteConfigUsed(webUrl 反查,幂等)
- 未使用=articleId 与 refType 均空;page 返回 unusedCount(前后端同步改名无兼容别名)
- Banner/Link 保存先解引用再回写(换图旧图回未使用);Site 配置 logo/favicon 引用回写(@Lazy 解循环依赖)
- 新增13例(Attachment6/Banner3/Link2/Site2)+既有语义断言更新;mvn -o test 全绿
|
2026-09-07 19:40:14 +08:00 |
|
chenxing
|
52676f592a
|
feat(B1): 建站权限拆分-校级可建/编辑本院系子站,顶层站仍仅超管
- SiteService.save 入口换 requireSiteSavePermission 私有方法(安全边界单点):
超管直通;无校级角色/顶层编辑/新建顶层/子站提升/跨校主站/伪造schId 全拒
- SiteServiceIT 新增10例(方案7例+伪造schId/跨校接管/同校改挂3个边界)
- mvn -o test 236/236 全绿(基线226+10)
|
2026-09-07 19:21:18 +08:00 |
|
chenxing
|
dad5eedaf2
|
chore: 前置快照-logback-spring.xml(执行方案B1~B5前既有未提交变更)
|
2026-09-07 18:59:23 +08:00 |
|
chenxing
|
eb5c3afaaf
|
merge projman injected files
build / build-push (push) Successful in 47s
|
2026-09-07 09:10:24 +08:00 |
|
chenxing
|
99cd26b3d2
|
init local code
|
2026-09-07 09:09:39 +08:00 |
|
admin
|
13bd931029
|
ci: init Dockerfile [skip ci]
|
2026-09-07 08:41:40 +08:00 |
|
admin
|
188d1c9d0d
|
ci: init build workflow [skip ci]
|
2026-09-07 08:41:40 +08:00 |
|
admin
|
d9559fd0d8
|
init: readme guide [skip ci]
|
2026-09-07 08:41:35 +08:00 |
|
admin
|
c773a3b66e
|
Initial commit
|
2026-09-07 08:41:34 +08:00 |
|