Files

775 lines
21 KiB
CSS
Raw Permalink 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.
/* style.css - 全局样式(左侧导航 + 内容区自适应) */
* { margin: 0; padding: 0; box-sizing: border-box; }
html, body { height: 100%; }
body {
font-family: "Microsoft YaHei", "PingFang SC", Arial, sans-serif;
background: #f2f4f8;
color: #333;
font-size: 14px;
}
/* ---------- 布局 ---------- */
.layout { display: flex; min-height: 100vh; }
/* 左侧导航 */
.sidebar {
width: 220px;
background: #1e2a3a;
color: #cfd8e3;
flex-shrink: 0;
display: flex;
flex-direction: column;
position: sticky;
top: 0;
height: 100vh;
overflow-y: auto;
}
.sidebar .logo {
display: block;
padding: 20px 18px;
font-size: 18px;
font-weight: bold;
color: #fff;
border-bottom: 1px solid rgba(255,255,255,.08);
letter-spacing: 1px;
text-decoration: none;
cursor: pointer;
}
.sidebar .logo:hover { color: #fff; }
.sidebar .logo .version {
font-size: 11px;
font-weight: normal;
color: #8fa3bd;
margin-left: 6px;
letter-spacing: 0;
}
.sidebar .logo span { color: #4fa3ff; }
.sidebar .menu { flex: 1; padding: 10px 0; }
.sidebar .menu-item {
display: flex;
align-items: center;
gap: 8px;
padding: 12px 20px;
color: #cfd8e3;
text-decoration: none;
font-size: 14px;
cursor: pointer;
border-left: 3px solid transparent;
transition: background .2s;
}
.sidebar .menu-item:hover { background: rgba(255,255,255,.06); color: #fff; }
.sidebar .menu-item.active {
background: rgba(79,163,255,.15);
color: #fff;
border-left-color: #4fa3ff;
}
.sidebar .menu-item .icon { display: inline-flex; flex-shrink: 0; }
.sidebar .menu-item .label { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sidebar .menu-item .badge {
float: right;
background: #4fa3ff;
color: #fff;
border-radius: 10px;
font-size: 11px;
padding: 1px 7px;
}
/* 分组菜单(一级分组标题 + 二级子菜单) */
.sidebar .menu-group { border-left: 3px solid transparent; }
.sidebar .menu-group.open { border-left-color: #4fa3ff; }
.sidebar .menu-group-title {
display: flex;
align-items: center;
gap: 8px;
padding: 12px 20px;
color: #cfd8e3;
font-size: 14px;
cursor: pointer;
user-select: none;
transition: background .2s;
}
.sidebar .menu-group-title:hover { background: rgba(255,255,255,.06); color: #fff; }
.sidebar .menu-group.open > .menu-group-title { color: #fff; }
.sidebar .menu-group-title .icon { display: inline-flex; flex-shrink: 0; }
.sidebar .menu-group-title .label { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sidebar .menu-group-title .arrow {
color: #8fa3bd;
font-size: 10px;
transition: transform .2s;
}
.sidebar .menu-group.open > .menu-group-title .arrow { transform: rotate(90deg); }
.sidebar .menu-group-body { display: none; }
.sidebar .menu-item.sub {
padding-left: 40px;
font-size: 13px;
border-left: none;
gap: 0;
}
/* ---------- 侧边栏折叠态(桌面手动折叠 / 移动端自动折叠,仅剩图标) ---------- */
.layout.sidebar-collapsed .sidebar { width: 64px; }
.layout.sidebar-collapsed .sidebar .logo {
padding: 20px 4px;
text-align: center;
font-size: 0;
letter-spacing: 0;
}
.layout.sidebar-collapsed .sidebar .logo .version { display: none; }
.layout.sidebar-collapsed .menu-item,
.layout.sidebar-collapsed .menu-group-title {
padding: 13px 0;
justify-content: center;
gap: 0;
}
.layout.sidebar-collapsed .menu-item .label,
.layout.sidebar-collapsed .menu-group-title .label,
.layout.sidebar-collapsed .menu-group-title .arrow { display: none; }
.layout.sidebar-collapsed .menu-group-body { display: none !important; }
.layout.sidebar-collapsed .menu-item.sub { padding-left: 0; }
.layout.sidebar-collapsed .sidebar .menu { padding: 10px 0; }
.sidebar .user-info {
padding: 14px 18px;
border-top: 1px solid rgba(255,255,255,.08);
font-size: 13px;
}
.sidebar .user-info .name { color: #fff; font-weight: bold; }
.sidebar .user-info .logout {
float: right;
color: #8fa3bd;
cursor: pointer;
text-decoration: none;
}
.sidebar .user-info .logout:hover { color: #ff6b6b; }
/* 内容区 */
.main {
flex: 1;
display: flex;
flex-direction: column;
min-width: 0;
}
.topbar {
height: 54px;
background: #fff;
border-bottom: 1px solid #e5e9f0;
display: flex;
align-items: center;
padding: 0 22px;
position: sticky;
top: 0;
z-index: 100;
}
.topbar .page-title { font-size: 16px; font-weight: bold; color: #1e2a3a; }
.topbar .breadcrumb { margin-left: 14px; font-size: 13px; color: #8a94a6; }
.topbar .topbar-spacer { flex: 1; }
.topbar .sidebar-toggle {
display: inline-flex;
align-items: center;
cursor: pointer;
color: #5a6472;
margin-right: 12px;
padding: 4px;
border-radius: 4px;
}
.topbar .sidebar-toggle:hover { background: #f2f4f8; color: #2a5298; }
/* ---------- 右上角用户菜单(登录/登出、角色、登录状态) ---------- */
.user-menu { position: relative; margin-left: auto; }
.user-menu-trigger {
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
padding: 5px 10px;
border-radius: 4px;
font-size: 13px;
color: #4a5568;
user-select: none;
-webkit-user-select: none;
}
.user-menu-trigger:hover { background: #f2f4f8; }
.user-menu-trigger .avatar {
width: 28px;
height: 28px;
border-radius: 50%;
background: #2a5298;
color: #fff;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 14px;
}
.user-menu-trigger .caret { color: #8a94a6; font-size: 10px; }
.user-menu-dropdown {
display: none;
position: absolute;
right: 0;
top: 100%;
min-width: 230px;
background: #fff;
border: 1px solid #e5e9f0;
border-radius: 6px;
box-shadow: 0 8px 24px rgba(0,0,0,.12);
z-index: 1000;
padding: 6px 0;
}
.user-menu.open .user-menu-dropdown { display: block; }
.user-menu-dropdown .um-head {
padding: 10px 14px;
border-bottom: 1px solid #f0f2f6;
}
.user-menu-dropdown .um-head .um-name { font-weight: bold; color: #1e2a3a; font-size: 14px; }
.user-menu-dropdown .um-head .um-sub { font-size: 12px; color: #8a94a6; margin-top: 2px; }
.user-menu-dropdown .um-item {
padding: 8px 14px;
font-size: 13px;
color: #5a6472;
display: flex;
justify-content: space-between;
gap: 12px;
}
.user-menu-dropdown .um-item .um-label { color: #8a94a6; }
.user-menu-dropdown .um-item b { font-weight: 600; }
.user-menu-dropdown .um-ok { color: #27ae60; }
.user-menu-dropdown .um-off { color: #e74c3c; }
.user-menu-dropdown .um-divider { border-top: 1px solid #f0f2f6; margin: 4px 0; }
.user-menu-dropdown .um-action {
display: block;
padding: 9px 14px;
font-size: 13px;
color: #2a5298;
cursor: pointer;
text-decoration: none;
}
.user-menu-dropdown .um-action:hover { background: #f7f9fc; }
.user-menu-dropdown .um-action.um-danger { color: #e74c3c; }
.content {
padding: 20px 22px;
flex: 1;
}
/* ---------- 卡片 ---------- */
.card {
background: #fff;
border-radius: 6px;
border: 1px solid #e5e9f0;
padding: 18px;
margin-bottom: 16px;
}
.card-title {
font-size: 15px;
font-weight: bold;
color: #1e2a3a;
margin-bottom: 14px;
padding-bottom: 10px;
border-bottom: 1px solid #f0f2f6;
}
/* ---------- 工具栏 ---------- */
.toolbar {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 10px;
margin-bottom: 14px;
}
.toolbar input[type="text"],
.toolbar select {
height: 34px;
border: 1px solid #d9dee8;
border-radius: 4px;
padding: 0 10px;
font-size: 13px;
outline: none;
min-width: 130px;
background: #fff;
}
.toolbar input:focus, .toolbar select:focus { border-color: #4fa3ff; }
.toolbar .spacer { flex: 1; }
/* 搜索框:框内左侧字段选择 + 框内右侧搜索图标 */
.toolbar .search-wrap {
display: inline-flex;
align-items: center;
height: 34px;
border: 1px solid #d9dee8;
border-radius: 4px;
background: #fff;
overflow: hidden;
}
.toolbar .search-wrap:focus-within { border-color: #4fa3ff; }
.toolbar .search-wrap select {
border: none;
height: 100%;
min-width: 108px;
max-width: 150px;
border-right: 1px solid #eef0f4;
border-radius: 0;
background: #f7f9fc;
font-size: 12px;
padding: 0 8px;
}
.toolbar .search-wrap input[type="text"] {
border: none;
height: 100%;
min-width: 220px;
border-radius: 0;
box-shadow: none;
outline: none;
}
.toolbar .search-wrap .search-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 34px;
height: 100%;
color: #8a94a6;
cursor: pointer;
background: #fff;
}
.toolbar .search-wrap .search-icon:hover { color: #2a5298; }
/* 筛选弹窗条件行 */
.filter-row {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 8px;
}
/* 渠道效能分析-来源明细:单行显示,过长用…占位(不分行) */
.ana-detail .src-cell {
max-width: 200px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* ---------- 按钮 ---------- */
.btn {
display: inline-block;
height: 34px;
line-height: 32px;
padding: 0 16px;
border: 1px solid #d9dee8;
border-radius: 4px;
background: #fff;
color: #333;
font-size: 13px;
cursor: pointer;
text-decoration: none;
transition: all .15s;
}
.btn:hover { border-color: #4fa3ff; color: #2a5298; }
.btn-primary { background: #2a5298; border-color: #2a5298; color: #fff; }
.btn-primary:hover { background: #1e3c72; border-color: #1e3c72; color: #fff; }
.btn-success { background: #27ae60; border-color: #27ae60; color: #fff; }
.btn-success:hover { background: #219150; border-color: #219150; color: #fff; }
.btn-danger { background: #e74c3c; border-color: #e74c3c; color: #fff; }
.btn-danger:hover { background: #c0392b; border-color: #c0392b; color: #fff; }
.btn-warning { background: #f39c12; border-color: #f39c12; color: #fff; }
.btn-warning:hover { background: #d68910; border-color: #d68910; color: #fff; }
.btn-sm { height: 26px; line-height: 24px; padding: 0 10px; font-size: 12px; }
.btn:disabled { opacity: .5; cursor: not-allowed; }
/* ---------- 表格 ---------- */
.table-wrap { overflow-x: auto; }
table.grid {
width: 100%;
border-collapse: collapse;
background: #fff;
font-size: 13px;
}
table.grid th, table.grid td {
border: 1px solid #eef0f4;
padding: 9px 10px;
text-align: left;
white-space: nowrap;
max-width: 320px;
overflow: hidden;
text-overflow: ellipsis;
}
table.grid th {
background: #f7f9fc;
color: #4a5568;
font-weight: bold;
}
table.grid tr:hover td { background: #f7faff; }
table.grid .ops a {
margin-right: 8px;
cursor: pointer;
color: #2a5298;
text-decoration: none;
font-size: 12px;
}
table.grid .ops a.danger { color: #e74c3c; }
table.grid .ops a:hover { text-decoration: underline; }
/* ---------- 分页 ---------- */
.pagination {
display: flex;
align-items: center;
justify-content: flex-end;
margin-top: 14px;
font-size: 13px;
color: #5a6472;
gap: 6px;
}
.pagination a, .pagination span.pg {
display: inline-block;
min-width: 30px;
height: 30px;
line-height: 28px;
text-align: center;
border: 1px solid #d9dee8;
border-radius: 4px;
background: #fff;
cursor: pointer;
color: #333;
text-decoration: none;
padding: 0 6px;
}
.pagination a:hover { border-color: #4fa3ff; color: #2a5298; }
.pagination span.pg.current { background: #2a5298; border-color: #2a5298; color: #fff; }
.pagination span.pg.disabled { color: #b6bfcc; cursor: not-allowed; }
/* ---------- 表单弹窗 ---------- */
.form-grid { display: flex; flex-wrap: wrap; gap: 14px 20px; }
.form-grid .form-item { width: calc(50% - 10px); }
.form-grid .form-item.full { width: 100%; }
.form-item label {
display: block;
font-size: 13px;
color: #5a6472;
margin-bottom: 6px;
}
.form-item label .req { color: #e74c3c; margin-left: 2px; }
.form-item input[type="text"],
.form-item input[type="password"],
.form-item input[type="number"],
.form-item input[type="date"],
.form-item select,
.form-item textarea {
width: 100%;
border: 1px solid #d9dee8;
border-radius: 4px;
padding: 8px 10px;
font-size: 13px;
outline: none;
background: #fff;
font-family: inherit;
}
.form-item textarea { min-height: 70px; resize: vertical; }
.form-item input:focus, .form-item select:focus, .form-item textarea:focus { border-color: #4fa3ff; }
.dialog-footer {
margin-top: 18px;
text-align: right;
display: flex;
justify-content: flex-end;
gap: 10px;
}
/* ---------- 指标卡 ---------- */
.stat-cards {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 14px;
margin-bottom: 16px;
}
.stat-card {
background: #fff;
border-radius: 6px;
border: 1px solid #e5e9f0;
border-left: 4px solid #2a5298;
padding: 16px 18px;
}
.stat-card .num { font-size: 26px; font-weight: bold; color: #1e2a3a; }
.stat-card .label { font-size: 13px; color: #8a94a6; margin-top: 4px; }
.stat-card.c-green { border-left-color: #27ae60; }
.stat-card.c-orange { border-left-color: #f39c12; }
.stat-card.c-red { border-left-color: #e74c3c; }
.stat-card.c-blue { border-left-color: #2a5298; }
.stat-card.c-purple { border-left-color: #8e44ad; }
.stat-card.c-teal { border-left-color: #16a085; }
.stat-card.c-cyan { border-left-color: #00a8c5; }
/* ---------- 图表容器 ---------- */
.chart-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.chart-box { background: #fff; border-radius: 6px; border: 1px solid #e5e9f0; padding: 16px; }
.chart-box.full { grid-column: 1 / -1; }
.chart-box .chart-title { font-size: 14px; font-weight: bold; color: #1e2a3a; margin-bottom: 10px; }
.chart-box .chart { height: 320px; }
/* 图表标题内的 Tab 切换 */
.chart-title .tabs { float: right; font-weight: normal; font-size: 12px; }
.chart-title .tabs .tab {
display: inline-block;
padding: 2px 12px;
margin-left: 4px;
border: 1px solid #d9dee8;
border-radius: 3px;
color: #5a6472;
cursor: pointer;
background: #fff;
user-select: none;
}
.chart-title .tabs .tab:hover { border-color: #4fa3ff; color: #2a5298; }
.chart-title .tabs .tab.active {
background: #2a5298;
border-color: #2a5298;
color: #fff;
}
/* ---------- 编辑弹窗 Tab 卡(工商信息/财务信息/资质认证) ---------- */
.edit-tabs { border: 1px solid #e5e9f0; border-radius: 6px; }
.edit-tabs-head {
display: flex;
border-bottom: 1px solid #e5e9f0;
background: #f7f9fc;
border-radius: 6px 6px 0 0;
}
.edit-tabs-head .edit-tab {
padding: 10px 24px;
font-size: 13px;
color: #5a6472;
cursor: pointer;
border-right: 1px solid #e5e9f0;
user-select: none;
background: transparent;
}
.edit-tabs-head .edit-tab:hover { color: #2a5298; }
.edit-tabs-head .edit-tab.active {
background: #fff;
color: #2a5298;
font-weight: bold;
border-bottom: 2px solid #2a5298;
margin-bottom: -1px;
}
.edit-tabs-body {
padding: 14px 16px;
background: #fff;
border-radius: 0 0 6px 6px;
max-height: 62vh;
overflow-y: auto;
}
/* 年度财务明细表格 */
.fin-tbl input {
border: 1px solid #d9dee8;
border-radius: 4px;
padding: 4px 6px;
font-size: 12px;
background: #fff;
width: 78px;
}
.fin-tbl input[name="fin-fiscal_year"],
.fin-tbl input[name="fin-employee_count"] { width: 66px; }
.fin-tbl input[name="fin-financial_report_url"] { width: 150px; }
.fin-tbl input[name="fin-data_source"] { width: 88px; }
.cert-row { display: flex; gap: 8px; margin-bottom: 8px; align-items: center; flex-wrap: wrap; }
.cert-row select, .cert-row input {
border: 1px solid #d9dee8;
border-radius: 4px;
padding: 7px 8px;
font-size: 13px;
background: #fff;
}
.cert-row select { width: 200px; }
.cert-row input[type="text"] { width: 170px; }
.cert-row input[type="date"] { width: 140px; }
/* ---------- 基本信息锚点导航布局(左侧文字锚 + 右侧分区) ---------- */
.form-anchor-layout {
display: flex;
gap: 14px;
align-items: flex-start;
}
.form-anchor-nav {
flex: 0 0 86px;
display: flex;
flex-direction: column;
gap: 2px;
position: sticky;
top: 0;
border-right: 1px solid #eef0f4;
padding-right: 10px;
padding-top: 4px;
}
.form-anchor-nav .anchor-link {
display: block;
padding: 7px 10px;
font-size: 13px;
color: #5a6472;
text-decoration: none;
border-radius: 4px;
white-space: nowrap;
}
.form-anchor-nav .anchor-link:hover { color: #2a5298; background: #f2f6fd; }
.form-anchor-nav .anchor-link.active {
color: #2a5298;
background: #e8f0fe;
font-weight: bold;
}
.form-anchor-body { flex: 1; min-width: 0; }
.form-sec { padding: 4px 2px 14px; border-bottom: 1px dashed #eef0f4; }
.form-sec:last-child { border-bottom: none; }
.form-sec-title {
font-size: 13px;
font-weight: bold;
color: #2a5298;
margin-bottom: 10px;
padding-left: 8px;
border-left: 3px solid #2a5298;
line-height: 1.4;
}
/* 联系方式行(企业 social_accounts) */
.account-row {
display: flex;
gap: 8px;
margin-bottom: 8px;
align-items: center;
flex-wrap: wrap;
}
.account-row select, .account-row input {
border: 1px solid #d9dee8;
border-radius: 4px;
padding: 7px 8px;
font-size: 13px;
background: #fff;
}
.account-row select[name="acc-platform"] { width: 110px; }
.account-row input[name="acc-account"] { width: 150px; }
.account-row input[name="acc-url"] { width: 210px; }
.account-row input[name="acc-remark"] { width: 130px; }
.account-row select[name="acc-active"] { width: 76px; }
/* ---------- 人员工作履历行 ---------- */
.exp-row {
display: flex;
gap: 8px;
margin-bottom: 8px;
align-items: center;
flex-wrap: wrap;
}
.exp-row select, .exp-row input {
border: 1px solid #d9dee8;
border-radius: 4px;
padding: 7px 8px;
font-size: 13px;
background: #fff;
}
.exp-row input[type="text"] { width: 110px; }
.exp-row input[type="date"] { width: 130px; }
/* 家乡置灰(中国/港澳台国籍时不可填) */
.area-disabled select, .area-disabled input {
background: #f2f3f5 !important;
color: #b6bfcc !important;
cursor: not-allowed;
}
/* 人脉弹窗姓名链接 */
.link { color: #2a5298; text-decoration: underline; cursor: pointer; }
.link:hover { color: #4fa3ff; }
/* ---------- 渠道管理:效能分析面板 ---------- */
.ana-panel {
flex: 1 1 46%;
min-width: 340px;
border: 1px solid #e5e9f0;
border-radius: 6px;
overflow: hidden;
}
.ana-head {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 14px;
background: #f7f9fc;
border-bottom: 1px solid #e5e9f0;
font-size: 13px;
font-weight: bold;
color: #1e2a3a;
}
.ana-year {
border: 1px solid #d9dee8;
border-radius: 4px;
padding: 4px 8px;
font-size: 12px;
background: #fff;
}
.ana-body { padding: 12px 14px; }
.ana-chart { width: 100%; height: 260px; }
.ana-detail {
margin-top: 10px;
border-top: 1px dashed #eef0f4;
padding-top: 10px;
}
.ana-detail-title {
font-size: 12px;
color: #2a5298;
font-weight: bold;
margin-bottom: 6px;
}
/* ---------- 页脚(版权/备案) ---------- */
.footer {
padding: 14px 22px;
text-align: center;
color: #8a94a6;
font-size: 12px;
border-top: 1px solid #e5e9f0;
background: #fff;
}
/* ---------- 占位图(扁平图标放大) ---------- */
.placeholder-box .big svg { width: 48px; height: 48px; color: #b6bfcc; }
/* ---------- 标签 ---------- */
.tag {
display: inline-block;
padding: 2px 8px;
border-radius: 3px;
font-size: 12px;
background: #eef4ff;
color: #2a5298;
}
.tag-green { background: #eafaf1; color: #27ae60; }
.tag-red { background: #fdecea; color: #e74c3c; }
.tag-orange { background: #fef5e7; color: #f39c12; }
.tag-blue { background: #eaf2fd; color: #2a5298; }
.tag-gray { background: #f0f2f6; color: #8a94a6; }
/* ---------- 空状态 ---------- */
.empty-tip {
text-align: center;
color: #b6bfcc;
padding: 60px 0;
font-size: 14px;
}
.empty-tip .big { font-size: 40px; margin-bottom: 10px; }
/* ---------- 占位说明 ---------- */
.placeholder-box {
text-align: center;
padding: 60px 20px;
color: #8a94a6;
}
.placeholder-box .big { font-size: 46px; margin-bottom: 14px; }
.placeholder-box h3 { color: #4a5568; margin-bottom: 8px; }
/* 滚动条美化 */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-thumb { background: #c8d0dc; border-radius: 4px; }
::-webkit-scrollbar-track { background: transparent; }
@media (max-width: 900px) {
.sidebar { width: 64px; }
.sidebar .menu-item { text-align: center; padding: 12px 6px; font-size: 12px; }
.sidebar .menu-item .icon { margin-right: 0; }
.sidebar .logo { font-size: 14px; text-align: center; padding: 16px 4px; }
.sidebar .user-info { display: none; }
.stat-cards { grid-template-columns: repeat(2, 1fr); }
.chart-grid { grid-template-columns: 1fr; }
}