diff --git a/pom.xml b/pom.xml
index 983e954..49ea2f7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -119,6 +119,14 @@
com.yunhai.platform
yh-spring-boot-starter
+
+
+ com.yunhai.platform
+ yh-appearance-spring-boot-starter
+
diff --git a/src/main/java/com/yunhai/notice/controller/api/AppearanceProxyController.java b/src/main/java/com/yunhai/notice/controller/api/AppearanceProxyController.java
deleted file mode 100644
index f6fd325..0000000
--- a/src/main/java/com/yunhai/notice/controller/api/AppearanceProxyController.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.yunhai.notice.controller.api;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.yunhai.notice.config.Config;
-import com.yunhai.platform.openapi.core.YschOpenCall;
-import com.yunhai.platform.utils.model.BoaUser;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 外观偏好同源读代理(oapi 代理轮 2026-10-08,全端统一形态)。
- *
- *
浏览器(通道 init 异步段)只与本应用【同源】取数——CAS 会话天然有效,无需 iframe 引导;
- * 后端经 open-gateway 签名直调 UserHome(target=userhome,寻址走 yh.open.services,
- * 勿写死 host)。设置入口收敛在 UserHome 设置中心,本端点【只读不写】。
- *
- * 契约 = UserHome /oapi/appearance 出参【整体透传】(JsonNode 哑管道):字段加减只在
- * UserHome + 通道 init 两端演进,本应用零改动。现行字段 {@code {theme, avatar, logoUrl}}——
- * theme/avatar 为服务端合成后的【生效值】(个人→学校→平台级联,不拆 my/sch);
- * null=未配置,init 侧清对应本地键回落默认观感。
- *
- * 降级铁律:UserHome/网关不可达时【必须】以非 2xx 返回(503),绝不能伪装成 200+全 null——
- * init 会把全 null 收敛成清键,等于 UserHome 停服一次就清空全员本地观感
- * (对齐直连时代「fetch 失败静默、不动键」的语义)。
- */
-@RestController
-@RequestMapping(value = Config.API_PATH)
-public class AppearanceProxyController {
-
- private static final Logger log = LoggerFactory.getLogger(AppearanceProxyController.class);
-
- /** open_api_target 注册表中的 userhome;寻址 yh.call.targets → yh.open.services → 枚举兜底 */
- private static final String TARGET_USERHOME = "userhome";
-
- private final YschOpenCall openCall;
-
- public AppearanceProxyController(YschOpenCall openCall) {
- this.openCall = openCall;
- }
-
- @GetMapping("appearance")
- public JsonNode appearance(BoaUser authUserWithDept, HttpServletResponse response) throws IOException {
- try {
- Map q = new HashMap<>();
- q.put("userId", String.valueOf(authUserWithDept.getId())); // 服务端取登录人,不收前端参数
- return openCall.get(TARGET_USERHOME, "/oapi/appearance", q, JsonNode.class);
- } catch (Exception e) {
- // 降级铁律:sendError 直写 503 绕过 GlobalExceptionHandler(否则被兜成 200+code:6 信封,
- // init 侧靠信封防御兜底,但语义上必须让浏览器拿到非 2xx)
- log.warn("[appearance] UserHome 外观偏好不可达(503,init 侧静默不动本地键)userId={}:{}",
- authUserWithDept.getId(), e.toString());
- response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "appearance unavailable");
- return null;
- }
- }
-}