Files
YschcmsFront/src/assets/styles/yh-theme.css
T
chenxing cff4325947
build / build (push) Successful in 2m20s
[CMS-VISUAL] 站点管理改版: 表格→站点工作台(主站宽卡+院系子站卡片网格)+ 页头承载站点身份 + v3.1 视觉修订(182 测试绿)
- SiteManage.vue: 8 列表格改为站点工作台,按 schId 分组「主站宽卡 + 院系子站网格」,
  保留卡片⇄表格视图切换与搜索过滤;scope=all 全局视图支持多校分组,搜索时主站卡始终保留(层级锚点)
- 新增 views/cms/components/SiteCard.vue、SiteMainCard.vue
- 删除 components/SiteContextCard.vue: 站点身份改由页头「学校名.站点名」承担(SchoolLayout),
  侧栏不再铺第二份站点列表,切站入口从 3 处收敛到 2 处(面包屑 + 站点工作台)
- v3.1 视觉修订: 色带语义统一为「当前站」(全页同时只有一张卡带选中态,不再一页两处蓝);
  删除面包屑 band-sub 橙色接缝条(身份已收回页头);返回按钮 ios-undo 18×18 → ios-arrow-back 26×26 可点方块;
  删除 SiteManage .zone-tip 设计说明文字(误当 UI 渲染)
- 测试: siteLayer.spec.ts 站点卡 4 用例重写为页头反向/正向断言,siteManage.spec.ts 补卡片视图断言;182 用例绿
- 方案: docs/22-站点管理修订方案.md(含 §9 v3.1 视觉修订与像素对照表)
2026-09-28 18:32:13 +08:00

232 lines
14 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* 本文件由 scripts/gen-yh-theme.mjs 生成(color-mix 已构建期静态化),勿手改派生色值。
定稿:07-seam-pure.html(浅色接缝条·纯享版);挂接:main.ts 置于 icons.css 之后。
档位开关挂在 <html>:data-theme=blue|ocean|ink|violet|teal × side-deep|side-light × grad-on|grad-off × side-plain */
/* ============ 变量体系(:root 默认档 = blue + side-deep + grad-on + side-follow) ============ */
:root{
--brand:#577afb; --brand-2:#7b8ffd; --brand-dark:#4264e4;
--brand-soft:#eef2ff; --brand-a:rgba(87,122,251,0.34); --glow:rgba(87,122,251,0.42);
--topbar-bg:linear-gradient(100deg,var(--brand) 0%,var(--brand-2) 100%);
--green:#20a162; --green-d:#188451;
--red:#e54d42; --red-soft:#fef1f0;
/* 第一波(P1)沿用现状 56/56,紧凑化 52/44 留 P2(方案 §8-D2) */
--topbar-h:56px; --crumb-h:56px; --side-w:200px; --r:10px; --r-s:7px;
--page-bg:#f3f5fa; --panel:#fff; --line:#e9edf5; --line-2:#f0f3f9;
--text:#1e2635; --text-2:#5a6478; --text-3:#98a1b2;
--sh:0 1px 2px rgba(16,24,40,.04),0 14px 30px -22px rgba(16,24,40,.4);
--side-bg:linear-gradient(180deg,#5e7ffb 0%,#415bbb 100%);
--side-text:#c7d2ea; --side-icon:#95a6cb;
--side-line:rgba(255,255,255,.08);
--side-hover:rgba(255,255,255,.09); --side-hover-text:#fff;
--side-active-bg:rgba(255,255,255,.18); --side-active-text:#fff;
--side-bar:#fff; --side-scroll:rgba(255,255,255,.18);
--strip-bg:linear-gradient(180deg,#e9eefe 0,#fff 100%);
}
/* blue · brand #577afb */
html[data-theme="blue"]{
--brand:#577afb; --brand-2:#7b8ffd; --brand-dark:#4264e4;
--brand-soft:#eef2ff; --brand-a:rgba(87,122,251,0.34); --glow:rgba(87,122,251,0.42);
--strip-bg:linear-gradient(180deg,#e9eefe 0,#fff 100%);
}
html[data-theme="blue"].side-deep{--side-bg:#425dbf}
html[data-theme="blue"].side-deep.grad-on{--side-bg:linear-gradient(180deg,#5e7ffb 0%,#415bbb 100%)}
html[data-theme="blue"].side-light{--side-bg:#f3f6ff}
html[data-theme="blue"].side-light.grad-on{--side-bg:linear-gradient(180deg,#e9eefe 0%,#f0f3fa 100%)}
html[data-theme="blue"].grad-off{--topbar-bg:#577afb}
/* ocean · brand #2f7ce0 */
html[data-theme="ocean"]{
--brand:#2f7ce0; --brand-2:#4a9bf5; --brand-dark:#2568c4;
--brand-soft:#eaf3fe; --brand-a:rgba(47,124,224,0.34); --glow:rgba(47,124,224,0.42);
--strip-bg:linear-gradient(180deg,#e4eefb 0,#fff 100%);
}
html[data-theme="ocean"].side-deep{--side-bg:#255fab}
html[data-theme="ocean"].side-deep.grad-on{--side-bg:linear-gradient(180deg,#3781e1 0%,#255da8 100%)}
html[data-theme="ocean"].side-light{--side-bg:#f0f6fd}
html[data-theme="ocean"].side-light.grad-on{--side-bg:linear-gradient(180deg,#e4eefb 0%,#eff3f9 100%)}
html[data-theme="ocean"].grad-off{--topbar-bg:#2f7ce0}
/* ink · brand #3d4d63 */
html[data-theme="ink"]{
--brand:#3d4d63; --brand-2:#6d82a1; --brand-dark:#2e3c4f;
--brand-soft:#eef1f6; --brand-a:rgba(61,77,99,0.34); --glow:rgba(61,77,99,0.5);
--strip-bg:linear-gradient(180deg,#e6e8eb 0,#fff 100%);
}
html[data-theme="ink"].side-deep{--side-bg:#303d51}
html[data-theme="ink"].side-deep.grad-on{--side-bg:linear-gradient(180deg,#455469 0%,#2f3c50 100%)}
html[data-theme="ink"].side-light{--side-bg:#f1f3f4}
html[data-theme="ink"].side-light.grad-on{--side-bg:linear-gradient(180deg,#e6e8eb 0%,#eff2f5 100%)}
html[data-theme="ink"].grad-off{--topbar-bg:#3d4d63}
/* violet · brand #6d5ae0 */
html[data-theme="violet"]{
--brand:#6d5ae0; --brand-2:#8f7cf2; --brand-dark:#5a48c9;
--brand-soft:#f1effe; --brand-a:rgba(109,90,224,0.34); --glow:rgba(109,90,224,0.42);
--strip-bg:linear-gradient(180deg,#eceafb 0,#fff 100%);
}
html[data-theme="violet"].side-deep{--side-bg:#5246ab}
html[data-theme="violet"].side-deep.grad-on{--side-bg:linear-gradient(180deg,#7361e1 0%,#5045a8 100%)}
html[data-theme="violet"].side-light{--side-bg:#f5f3fd}
html[data-theme="violet"].side-light.grad-on{--side-bg:linear-gradient(180deg,#eceafb 0%,#f1f2f9 100%)}
html[data-theme="violet"].grad-off{--topbar-bg:#6d5ae0}
/* teal · brand #0d9488 */
html[data-theme="teal"]{
--brand:#0d9488; --brand-2:#18b5a5; --brand-dark:#0b7c72;
--brand-soft:#e8f7f5; --brand-a:rgba(13,148,136,0.36); --glow:rgba(13,148,136,0.42);
--strip-bg:linear-gradient(180deg,#e0f1f0 0,#fff 100%);
}
html[data-theme="teal"].side-deep{--side-bg:#0d706c}
html[data-theme="teal"].side-deep.grad-on{--side-bg:linear-gradient(180deg,#17988d 0%,#0d6e6a 100%)}
html[data-theme="teal"].side-light{--side-bg:#eef8f7}
html[data-theme="teal"].side-light.grad-on{--side-bg:linear-gradient(180deg,#e0f1f0 0%,#eef4f7 100%)}
html[data-theme="teal"].grad-off{--topbar-bg:#0d9488}
/* ---- 深浅档非底色 token(与品牌色联动的用 var 派生;浅色档 line/hover/active 用默认档实测值,
主题间差异肉眼不可辨,保持单档以压复杂度——同定稿 side-light 组) ---- */
html.side-light{
--side-text:#4a5568; --side-icon:#98a2b3;
--side-line:#ccd6f2;
--side-hover:#e3e8f8; --side-hover-text:#1e2635;
--side-active-bg:#e6ebfe; --side-active-text:var(--brand-dark);
--side-bar:var(--brand); --side-scroll:#d3d9e3;
}
html.grad-off{--topbar-bg:var(--brand)}
/* ---- 侧栏与品牌色解耦(side-follow 关) ---- */
html.side-plain.side-deep{
--side-bg:#2c3444; --side-text:#c2cbd9; --side-icon:#909dae;
--side-line:rgba(255,255,255,.08);
--side-hover:rgba(255,255,255,.08); --side-hover-text:#fff;
--side-active-bg:rgba(255,255,255,.16); --side-active-text:#fff;
--side-bar:#fff; --side-scroll:rgba(255,255,255,.18);
}
html.side-plain.side-light{
--side-bg:#f7f8fa; --side-text:#4a5568; --side-icon:#98a2b3;
--side-line:#e6eaf0; --side-hover:#eff1f5;
--side-active-bg:#eceef3; --side-active-text:#2f3a4c;
--side-bar:#8b95a8; --side-scroll:#d3d9e3;
}
html.side-plain.grad-on.side-deep{--side-bg:linear-gradient(180deg,#333c4d 0%,#272e3c 100%)}
html.side-plain.grad-on.side-light{--side-bg:linear-gradient(180deg,#fafbfc 0%,#f2f4f7 100%)}
html.side-plain{--strip-bg:linear-gradient(180deg,#f2f4f8 0,#fff 100%)}
/* ---- 顶栏:.header-container ---- */
.layout-wrap .header-container{background:var(--topbar-bg);box-shadow:0 1px 3px rgba(16,24,40,.14);transition:background .28s}
.layout-wrap .header-container h4{font-weight:600;letter-spacing:.4px}
.layout-wrap .header-container .delimiter{background:rgba(255,255,255,.28)}
/* 顶栏 logo 徽标(模板新增节点) */
.logo-badge{width:30px;height:30px;flex:0 0 auto;border-radius:9px;background:#fff;display:grid;place-items:center;box-shadow:0 2px 7px rgba(0,0,0,.16);margin-right:10px}
.logo-badge svg,.logo-badge img{width:22px;height:22px;display:block}
/* 用户胶囊 */
.layout-wrap .header-aside{padding:0 8px 0 5px;height:36px;border-radius:999px;transition:background .16s}
.layout-wrap .header-aside:hover{background:rgba(255,255,255,.16)}
/* ---- 侧栏:.left-menu(皮肤覆盖 layout.css 浅色档;深浅由 --side-* 驱动) ---- */
.layout-wrap .left-menu{background:var(--side-bg);border-right:1px solid var(--side-line);color:var(--side-text);transition:background .28s}
.layout-wrap .left-menu::-webkit-scrollbar{width:8px}
.layout-wrap .left-menu::-webkit-scrollbar-thumb{background:var(--side-scroll);border-radius:8px}
.layout-wrap .left-menu ul{padding:8px 0 18px}
.layout-wrap .left-menu li{margin:1px 8px;border-radius:var(--r-s);transition:background .15s,color .15s}
.layout-wrap .left-menu li a{
display:block;height:40px;line-height:40px;padding:0 12px;border-radius:var(--r-s);
color:var(--side-text);font-size:13px;border-right:none;transition:background .15s,color .15s;position:relative;
}
.layout-wrap .left-menu li a:hover{background:var(--side-hover);color:var(--side-hover-text)}
.layout-wrap .left-menu li a:hover .iconfont,.layout-wrap .left-menu li:hover .iconfont{color:var(--side-hover-text)}
.layout-wrap .left-menu li.active{background:var(--side-active-bg);border-right:0}
.layout-wrap .left-menu li.active a{color:var(--side-active-text);font-weight:600;background:transparent;border-right:none}
.layout-wrap .left-menu li.active a .iconfont{color:var(--side-active-text)}
.layout-wrap .left-menu li.active::before{
content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);
width:3px;height:20px;border-radius:0 3px 3px 0;background:var(--side-bar);
}
.layout-wrap .left-menu li.child-item{margin:0 8px}
.layout-wrap .left-menu li.child-item a{height:36px;line-height:36px;font-size:12.5px}
.layout-wrap .left-menu li.child-item.active::before{height:16px}
/* 菜单图标 mask 类(icons.css 用 background-color 上色,这里给品牌感近色) */
.layout-wrap .left-menu .iconfont{margin-right:8px}
.layout-wrap .left-menu .arrow-up,.layout-wrap .left-menu .arrow-down{border-color:var(--side-icon)}
/* ---- 面包屑:.path-nav → 浅色接缝条(方案 §7.3 融合站点身份带) ---- */
.layout-wrap .path-nav{
height:var(--crumb-h);background:var(--strip-bg);border-bottom:1px solid var(--line);
color:var(--text-3);box-sizing:border-box;
}
.layout-wrap .path-nav .ivu-breadcrumb-item-link{color:var(--text-2)}
.layout-wrap .path-nav .ivu-breadcrumb>span:last-child .ivu-breadcrumb-item-link,.layout-wrap .path-nav .ivu-breadcrumb>span:last-child{color:var(--text);font-weight:600}
.layout-wrap .path-nav .ivu-breadcrumb a:hover{color:var(--brand)}
.layout-wrap .path-nav .crumb-home{color:var(--brand)}
.layout-wrap .path-nav .ivu-breadcrumb-item-separator{color:#ccd4e0}
/* 定稿:不再画独立 3px 横杠——顶部 3px 由接缝条承接顶栏渐变。
v3:站点身份已由页头「学校名.站点名」承担,原先 band-sub 让位身份橙的覆盖已删,
否则子站态上面包屑顶部常驻一条橙色横杠,与页头身份重复,且被误读成边框。 */
.layout-wrap .path-nav::before{
content:"";position:absolute;left:0;right:0;top:0;height:3px;background:var(--topbar-bg);z-index:1;
}
.layout-wrap .path-nav::after{display:none}
/* ---- 内容区:灰底 + 白卡 ---- */
.base-wrap-main{background:var(--page-bg)}
.base-wrap-main .main-container{
background:var(--panel);border:1px solid var(--line);border-radius:var(--r);
box-shadow:var(--sh);margin:0 18px 24px;padding:16px 20px 24px;box-sizing:border-box;
}
/* 栏目工作台左树卡 */
.base-wrap-main .tree-container{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh)}
/* ---- 搜索区分区化(卡片内 filterbar 语义) ---- */
.base-wrap-main .search-wrap{
background:#fbfcfe;border:1px solid var(--line-2);border-radius:var(--r-s);
padding:10px 12px;height:auto;min-height:52px;box-sizing:border-box;margin-bottom:12px;
}
/* ---- 表格/操作列皮肤(三蓝归一 #5979EA/#2d8cf0 → var(--brand)) ---- */
.ivu-table-header th,.ivu-table-fixed-header th{background:#f7f9fc !important;color:var(--text-2)}
.ivu-table td{border-bottom:1px solid var(--line-2)}
.ivu-table-body tr:hover td,.ivu-table tbody tr:hover td{background:var(--brand-soft) !important}
.base-wrap-main .ivu-table .operating-link{color:var(--brand)}
.base-wrap-main .ivu-table .operating-link.disabled{color:#aaa}
.ivu-table-cell .operating-btn:hover{background:var(--brand);color:#fff}
/* ---- view-ui-plus 品牌态 ---- */
.ivu-btn-primary{background-color:var(--brand);border-color:var(--brand)}
.ivu-btn-primary:hover,.ivu-btn-primary.active{background-color:var(--brand-dark);border-color:var(--brand-dark)}
.ivu-btn-success{background-color:var(--green);border-color:var(--green)}
.ivu-btn-success:hover,.ivu-btn-success.active{background-color:var(--green-d);border-color:var(--green-d)}
.ivu-btn-error{background-color:var(--red);border-color:var(--red)}
.ivu-btn-error:hover,.ivu-btn-error.active{background-color:#c93f36;border-color:#c93f36}
.ivu-btn-text{color:var(--brand)}
.ivu-btn-text:hover{color:var(--brand-dark)}
.ivu-tabs-ink-bar{background-color:var(--brand)}
.ivu-tabs-tab:hover,.ivu-tabs-tab-active{color:var(--brand)}
.base-wrap-main .ivu-page-item-active{background:var(--brand);border-color:var(--brand)}
.base-wrap-main .ivu-page-item-active a,.base-wrap-main .ivu-page-item-active a:hover{color:#fff !important}
.base-wrap-main .ivu-page-item:hover{border-color:var(--brand)}
.base-wrap-main .ivu-page-item:hover a,.base-wrap-main .ivu-page-item:hover i{color:var(--brand)}
.base-wrap-main .ivu-page-prev:hover i,.base-wrap-main .ivu-page-next:hover i{border-color:var(--brand);color:var(--brand)}
.ivu-select-item-selected{color:var(--brand)}
.ivu-select-item-selected:hover{background:var(--brand-soft)}
.ivu-checkbox-checked .ivu-checkbox-inner{border-color:var(--brand);background-color:var(--brand)}
.ivu-radio-checked .ivu-radio-inner{border-color:var(--brand);background-color:var(--brand)}
.ivu-checkbox-wrapper:hover .ivu-checkbox-inner,.ivu-radio-wrapper:hover .ivu-radio-inner{border-color:var(--brand)}
.ivu-input:focus,.ivu-input-focused,.ivu-select-visible .ivu-select-selection{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-a)}
.ivu-input:hover,.ivu-select-selection:hover{border-color:#c6d0e2}
.ivu-switch-checked{border-color:var(--brand);background-color:var(--brand)}
.ivu-tree-title:hover{background-color:var(--brand-soft)}
.ivu-tree-title-selected,a.ivu-tree-title-selected:hover{background-color:var(--brand-soft);color:var(--brand)}
.ivu-spin-dot{background-color:var(--brand)}
.ivu-modal-header-inner{font-weight:600;color:var(--text)}
a{color:var(--brand)}
a:hover{color:var(--brand-dark)}
/* ---- 滚动条(定稿全局) ---- */
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:#c9d0dd;border-radius:8px}
::-webkit-scrollbar-thumb:hover{background:#aeb8c9}
::-webkit-scrollbar-track{background:transparent}
/* ---- 工作台/主题管理全屏页深色顶栏吃主题变量(方案 §7.3) ---- */
.wb-header{background:var(--topbar-bg) !important}