a40a0137cf
功能: - Django + MySQL + 深色主题 - 资产增删改查(含资产编号、BMC地址、设备位置、备注) - Excel导入导出(分类自动创建) - 设备分类管理 - 资产变更记录追踪 - 质保到期提醒 - 用户认证系统 - Docker部署支持
454 rivejä
9.0 KiB
CSS
454 rivejä
9.0 KiB
CSS
/* ===== 硬件资产管理系统 - 深色主题 ===== */
|
|
|
|
:root {
|
|
--bg-primary: #0E1621;
|
|
--bg-secondary: #1B2838;
|
|
--bg-card: #1E2A3A;
|
|
--bg-input: #0E1621;
|
|
--border-color: #2A3A4A;
|
|
--text-primary: #E0E0E0;
|
|
--text-muted: #8B9DAF;
|
|
--accent-blue: #4A9EFF;
|
|
--accent-green: #4CAF50;
|
|
--accent-orange: #FF9800;
|
|
--accent-red: #F44336;
|
|
--accent-purple: #9C27B0;
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
background-color: var(--bg-primary);
|
|
color: var(--text-primary);
|
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", sans-serif;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
/* === 导航栏 === */
|
|
.bg-navy {
|
|
background-color: var(--bg-secondary) !important;
|
|
border-bottom: 1px solid var(--border-color);
|
|
}
|
|
|
|
.navbar-brand {
|
|
color: var(--accent-blue) !important;
|
|
font-size: 1.1rem;
|
|
}
|
|
|
|
.nav-link {
|
|
color: var(--text-muted) !important;
|
|
font-size: 0.9rem;
|
|
padding: 0.5rem 0.8rem !important;
|
|
border-radius: 4px;
|
|
transition: all 0.2s;
|
|
}
|
|
|
|
.nav-link:hover, .nav-link.active {
|
|
color: var(--text-primary) !important;
|
|
background-color: rgba(74, 158, 255, 0.1);
|
|
}
|
|
|
|
.dropdown-menu-dark {
|
|
background-color: var(--bg-card);
|
|
border-color: var(--border-color);
|
|
}
|
|
|
|
.dropdown-menu-dark .dropdown-item:hover {
|
|
background-color: rgba(74, 158, 255, 0.15);
|
|
}
|
|
|
|
/* === 登录页面 === */
|
|
.login-body {
|
|
background: linear-gradient(135deg, #0E1621 0%, #1B2838 50%, #0E1621 100%);
|
|
min-height: 100vh;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
.login-container {
|
|
width: 100%;
|
|
max-width: 420px;
|
|
padding: 20px;
|
|
}
|
|
|
|
.login-card {
|
|
background-color: var(--bg-card);
|
|
border-radius: 12px;
|
|
border: 1px solid var(--border-color);
|
|
overflow: hidden;
|
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
.login-header {
|
|
background: linear-gradient(135deg, #1a3a5c 0%, #0E1621 100%);
|
|
text-align: center;
|
|
padding: 2rem 1rem;
|
|
color: var(--accent-blue);
|
|
}
|
|
|
|
.login-header h3 {
|
|
color: var(--text-primary);
|
|
font-weight: 600;
|
|
}
|
|
|
|
.login-body {
|
|
padding: 2rem;
|
|
min-height: auto;
|
|
}
|
|
|
|
.btn-login {
|
|
background: linear-gradient(135deg, #4A9EFF, #2563EB);
|
|
border: none;
|
|
padding: 0.6rem;
|
|
font-size: 1rem;
|
|
border-radius: 8px;
|
|
transition: transform 0.15s;
|
|
}
|
|
|
|
.btn-login:hover {
|
|
transform: translateY(-1px);
|
|
box-shadow: 0 4px 12px rgba(74, 158, 255, 0.3);
|
|
}
|
|
|
|
/* === 输入框样式 === */
|
|
.input-group-text {
|
|
background-color: var(--bg-secondary);
|
|
border-color: var(--border-color);
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.form-control, .form-select {
|
|
background-color: var(--bg-input);
|
|
border-color: var(--border-color);
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.form-control:focus, .form-select:focus {
|
|
background-color: var(--bg-input);
|
|
border-color: var(--accent-blue);
|
|
color: var(--text-primary);
|
|
box-shadow: 0 0 0 2px rgba(74, 158, 255, 0.15);
|
|
}
|
|
|
|
.form-control::placeholder {
|
|
color: var(--text-muted);
|
|
opacity: 0.6;
|
|
}
|
|
|
|
textarea.form-control {
|
|
background-color: var(--bg-input);
|
|
}
|
|
|
|
/* === 卡片 === */
|
|
.card-dark {
|
|
background-color: var(--bg-card);
|
|
border: 1px solid var(--border-color);
|
|
border-radius: 8px;
|
|
}
|
|
|
|
.card-dark .card-header {
|
|
background-color: var(--bg-secondary);
|
|
border-bottom: 1px solid var(--border-color);
|
|
color: var(--text-primary);
|
|
font-weight: 500;
|
|
padding: 0.75rem 1rem;
|
|
border-radius: 8px 8px 0 0;
|
|
}
|
|
|
|
.card-dark .card-body {
|
|
padding: 1rem;
|
|
}
|
|
|
|
/* === 统计卡片 === */
|
|
.stat-card {
|
|
background-color: var(--bg-card);
|
|
border: 1px solid var(--border-color);
|
|
border-radius: 10px;
|
|
padding: 1.25rem;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 1rem;
|
|
transition: transform 0.2s, box-shadow 0.2s;
|
|
}
|
|
|
|
.stat-card:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
|
|
}
|
|
|
|
.stat-icon {
|
|
font-size: 2.2rem;
|
|
opacity: 0.8;
|
|
}
|
|
|
|
.stat-total .stat-icon { color: var(--accent-blue); }
|
|
.stat-in-use .stat-icon { color: var(--accent-green); }
|
|
.stat-warning .stat-icon { color: var(--accent-orange); }
|
|
.stat-danger .stat-icon { color: var(--accent-red); }
|
|
|
|
.stat-value {
|
|
font-size: 1.8rem;
|
|
font-weight: 700;
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.stat-total .stat-value { color: var(--accent-blue); }
|
|
.stat-in-use .stat-value { color: var(--accent-green); }
|
|
.stat-warning .stat-value { color: var(--accent-orange); }
|
|
.stat-danger .stat-value { color: var(--accent-red); }
|
|
|
|
.stat-label {
|
|
color: var(--text-muted);
|
|
font-size: 0.85rem;
|
|
}
|
|
|
|
/* === 表格 === */
|
|
.table-dark {
|
|
--bs-table-bg: var(--bg-card);
|
|
--bs-table-hover-bg: var(--bg-secondary);
|
|
--bs-table-striped-bg: rgba(30, 42, 58, 0.5);
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.table-dark th {
|
|
background-color: var(--bg-secondary);
|
|
border-color: var(--border-color);
|
|
color: var(--text-muted);
|
|
font-weight: 500;
|
|
font-size: 0.85rem;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.5px;
|
|
padding: 0.6rem 0.75rem;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.table-dark td {
|
|
border-color: var(--border-color);
|
|
padding: 0.5rem 0.75rem;
|
|
vertical-align: middle;
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
.detail-table td {
|
|
padding: 0.4rem 0;
|
|
border: none !important;
|
|
}
|
|
|
|
.detail-table td:first-child {
|
|
color: var(--text-muted);
|
|
font-size: 0.85rem;
|
|
}
|
|
|
|
/* === 按钮 === */
|
|
.btn-primary {
|
|
background-color: var(--accent-blue);
|
|
border-color: var(--accent-blue);
|
|
}
|
|
|
|
body {
|
|
background-color: #0f1923;
|
|
color: #c9d1d9;
|
|
}
|
|
|
|
/* 深色主题全局文字颜色修正 */
|
|
.text-muted {
|
|
color: #8b949e !important;
|
|
}
|
|
.text-secondary {
|
|
color: #8b949e !important;
|
|
}
|
|
.form-label {
|
|
color: #c9d1d9 !important;
|
|
}
|
|
.detail-table td:first-child {
|
|
color: #8b949e !important;
|
|
}
|
|
small.text-muted, .small.text-muted {
|
|
color: #8b949e !important;
|
|
}
|
|
|
|
.btn-primary:hover {
|
|
background-color: #3A8EEF;
|
|
border-color: #3A8EEF;
|
|
}
|
|
|
|
.btn-outline-success {
|
|
color: var(--accent-green);
|
|
border-color: var(--accent-green);
|
|
}
|
|
|
|
.btn-outline-success:hover {
|
|
background-color: var(--accent-green);
|
|
color: white;
|
|
}
|
|
|
|
.btn-outline-info {
|
|
color: var(--accent-blue);
|
|
border-color: var(--accent-blue);
|
|
}
|
|
|
|
.btn-outline-info:hover {
|
|
background-color: var(--accent-blue);
|
|
color: white;
|
|
}
|
|
|
|
.btn-outline-warning {
|
|
color: var(--accent-orange);
|
|
border-color: var(--accent-orange);
|
|
}
|
|
|
|
.btn-outline-warning:hover {
|
|
background-color: var(--accent-orange);
|
|
color: #000;
|
|
}
|
|
|
|
.btn-outline-danger {
|
|
color: var(--accent-red);
|
|
border-color: var(--accent-red);
|
|
}
|
|
|
|
.btn-outline-danger:hover {
|
|
background-color: var(--accent-red);
|
|
color: white;
|
|
}
|
|
|
|
.btn-outline-secondary {
|
|
color: var(--text-muted);
|
|
border-color: var(--border-color);
|
|
}
|
|
|
|
.btn-outline-secondary:hover {
|
|
background-color: var(--bg-secondary);
|
|
color: var(--text-primary);
|
|
border-color: var(--border-color);
|
|
}
|
|
|
|
.btn-outline-light {
|
|
color: var(--text-muted);
|
|
border-color: var(--border-color);
|
|
}
|
|
|
|
.btn-outline-light:hover {
|
|
background-color: var(--bg-secondary);
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.btn-xs {
|
|
padding: 0.15rem 0.4rem;
|
|
font-size: 0.75rem;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
/* === 分页 === */
|
|
.pagination .page-link {
|
|
background-color: var(--bg-card);
|
|
border-color: var(--border-color);
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
.pagination .page-link:hover {
|
|
background-color: var(--bg-secondary);
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.pagination .active .page-link {
|
|
background-color: var(--accent-blue);
|
|
border-color: var(--accent-blue);
|
|
}
|
|
|
|
/* === 徽章 === */
|
|
.badge {
|
|
font-weight: 500;
|
|
font-size: 0.78rem;
|
|
padding: 0.3em 0.6em;
|
|
}
|
|
|
|
/* === 代码 === */
|
|
code {
|
|
color: var(--accent-blue);
|
|
background-color: rgba(74, 158, 255, 0.1);
|
|
padding: 0.15em 0.4em;
|
|
border-radius: 3px;
|
|
font-size: 0.85em;
|
|
}
|
|
|
|
/* === 进度条 === */
|
|
.progress {
|
|
background-color: var(--bg-input);
|
|
}
|
|
|
|
/* === Alert === */
|
|
.alert-info {
|
|
background-color: rgba(74, 158, 255, 0.1);
|
|
border-color: rgba(74, 158, 255, 0.2);
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.alert-success {
|
|
background-color: rgba(76, 175, 80, 0.1);
|
|
border-color: rgba(76, 175, 80, 0.2);
|
|
color: #81C784;
|
|
}
|
|
|
|
.alert-warning {
|
|
background-color: rgba(255, 152, 0, 0.1);
|
|
border-color: rgba(255, 152, 0, 0.2);
|
|
color: #FFB74D;
|
|
}
|
|
|
|
.alert-danger {
|
|
background-color: rgba(244, 67, 54, 0.1);
|
|
border-color: rgba(244, 67, 54, 0.2);
|
|
color: #EF9A9A;
|
|
}
|
|
|
|
.btn-close {
|
|
filter: invert(1) grayscale(100%) brightness(200%);
|
|
}
|
|
|
|
/* === 滚动条 === */
|
|
::-webkit-scrollbar {
|
|
width: 6px;
|
|
height: 6px;
|
|
}
|
|
|
|
::-webkit-scrollbar-track {
|
|
background: var(--bg-primary);
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb {
|
|
background: var(--border-color);
|
|
border-radius: 3px;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb:hover {
|
|
background: var(--text-muted);
|
|
}
|
|
|
|
/* === 文件上传 === */
|
|
.file-upload-wrapper {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
.file-name-text {
|
|
color: #8b949e;
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
/* === 响应式 === */
|
|
@media (max-width: 768px) {
|
|
.stat-card {
|
|
padding: 1rem;
|
|
}
|
|
.stat-icon {
|
|
font-size: 1.8rem;
|
|
}
|
|
.stat-value {
|
|
font-size: 1.4rem;
|
|
}
|
|
}
|
|
|