|
@@ -0,0 +1,2108 @@
|
|
|
+/* page-crm-data.component.scss */
|
|
|
+:host {
|
|
|
+ display: block;
|
|
|
+ background-color: #f5f8ff;
|
|
|
+ background-image: linear-gradient(135deg, #f5f8ff 0%, #e8ecff 100%);
|
|
|
+ color: #333333;
|
|
|
+ line-height: 1.6;
|
|
|
+ padding: 16px;
|
|
|
+ max-width: 500px;
|
|
|
+ margin: 0 auto;
|
|
|
+ position: relative;
|
|
|
+ min-height: 100vh;
|
|
|
+ overflow-x: hidden;
|
|
|
+ font-family: 'Segoe UI', 'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 变量定义 */
|
|
|
+ $primary: #4285f4;
|
|
|
+ $primary-light: rgba(66, 133, 244, 0.1);
|
|
|
+ $primary-dark: #3367d6;
|
|
|
+ $text-dark: #0a192f;
|
|
|
+ $text-medium: #333333;
|
|
|
+ $text-light: #8898aa;
|
|
|
+ $background: #ffffff;
|
|
|
+ $card-bg: #f8f9fa;
|
|
|
+ $border: #e6e9ed;
|
|
|
+ $success: #34a853;
|
|
|
+ $warning: #fbbc05;
|
|
|
+ $error: #ea4335;
|
|
|
+ $shadow: 0 8px 24px rgba(0, 0, 0, 0.05);
|
|
|
+
|
|
|
+ * {
|
|
|
+ margin: 0;
|
|
|
+ padding: 0;
|
|
|
+ box-sizing: border-box;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 头部导航 */
|
|
|
+ .header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ padding: 16px 0;
|
|
|
+ margin-bottom: 20px;
|
|
|
+ position: sticky;
|
|
|
+ top: 0;
|
|
|
+ background: transparent;
|
|
|
+ z-index: 100;
|
|
|
+ }
|
|
|
+
|
|
|
+ .back-btn {
|
|
|
+ width: 40px;
|
|
|
+ height: 40px;
|
|
|
+ border-radius: 50%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ background: $background;
|
|
|
+ border: none;
|
|
|
+ color: $text-dark;
|
|
|
+ font-size: 18px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+ box-shadow: $shadow;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: $primary-light;
|
|
|
+ color: $primary;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .title {
|
|
|
+ font-size: 24px;
|
|
|
+ font-weight: 700;
|
|
|
+ color: $text-dark;
|
|
|
+ text-align: center;
|
|
|
+ flex-grow: 1;
|
|
|
+ text-shadow: 0 2px 4px rgba(0,0,0,0.05);
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 卡片样式 */
|
|
|
+ .card {
|
|
|
+ background: $background;
|
|
|
+ border-radius: 20px;
|
|
|
+ padding: 24px;
|
|
|
+ margin-bottom: 20px;
|
|
|
+ box-shadow: $shadow;
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+ border: 1px solid rgba(66, 133, 244, 0.1);
|
|
|
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ transform: translateY(-5px);
|
|
|
+ box-shadow: 0 12px 30px rgba(66, 133, 244, 0.15);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .card-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .card-title {
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 700;
|
|
|
+ color: $text-dark;
|
|
|
+ }
|
|
|
+
|
|
|
+ .card-subtitle {
|
|
|
+ font-size: 14px;
|
|
|
+ color: $text-light;
|
|
|
+ margin-top: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 上传控制台 */
|
|
|
+ .upload-console {
|
|
|
+ position: relative;
|
|
|
+ min-height: 220px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .source-tags {
|
|
|
+ display: flex;
|
|
|
+ gap: 10px;
|
|
|
+ margin-top: 20px;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ }
|
|
|
+
|
|
|
+ .source-tag {
|
|
|
+ background: #f0f4f8;
|
|
|
+ padding: 8px 16px;
|
|
|
+ border-radius: 20px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: $text-dark;
|
|
|
+ transition: all 0.2s ease;
|
|
|
+ border: 1px solid transparent;
|
|
|
+ cursor: pointer;
|
|
|
+ box-shadow: 0 2px 5px rgba(0,0,0,0.05);
|
|
|
+
|
|
|
+ &.active {
|
|
|
+ border-color: $primary;
|
|
|
+ box-shadow: 0 0 0 2px rgba(66, 133, 244, 0.3);
|
|
|
+ color: $primary;
|
|
|
+ font-weight: 600;
|
|
|
+ background: rgba(66, 133, 244, 0.08);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 自定义标签区域 */
|
|
|
+ .custom-tag-form {
|
|
|
+ display: flex;
|
|
|
+ margin-top: 25px;
|
|
|
+ gap: 10px;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .custom-tag-input {
|
|
|
+ flex: 1;
|
|
|
+ padding: 12px 18px;
|
|
|
+ border-radius: 20px;
|
|
|
+ border: 1px solid $border;
|
|
|
+ outline: none;
|
|
|
+ font-size: 14px;
|
|
|
+ transition: border-color 0.3s;
|
|
|
+ background: $card-bg;
|
|
|
+ box-shadow: inset 0 2px 4px rgba(0,0,0,0.03);
|
|
|
+
|
|
|
+ &:focus {
|
|
|
+ border-color: $primary;
|
|
|
+ box-shadow: 0 0 0 2px rgba(66, 133, 244, 0.2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .add-tag-btn {
|
|
|
+ background: $primary;
|
|
|
+ color: white;
|
|
|
+ border: none;
|
|
|
+ border-radius: 20px;
|
|
|
+ padding: 12px 24px;
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 600;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: background 0.3s;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 8px;
|
|
|
+ box-shadow: 0 4px 10px rgba(66, 133, 244, 0.3);
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: $primary-dark;
|
|
|
+ transform: translateY(-2px);
|
|
|
+ box-shadow: 0 6px 15px rgba(66, 133, 244, 0.4);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 数据看板 */
|
|
|
+ .stats-container {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ gap: 15px;
|
|
|
+ margin-top: 15px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat-item {
|
|
|
+ flex: 1;
|
|
|
+ text-align: center;
|
|
|
+ padding: 15px;
|
|
|
+ border-radius: 16px;
|
|
|
+ background: $background;
|
|
|
+ position: relative;
|
|
|
+ box-shadow: 0 4px 10px rgba(0,0,0,0.03);
|
|
|
+ border: 1px solid rgba(66, 133, 244, 0.08);
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat-value {
|
|
|
+ font-size: 24px;
|
|
|
+ font-weight: 700;
|
|
|
+ color: $text-dark;
|
|
|
+ margin: 10px 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat-label {
|
|
|
+ font-size: 13px;
|
|
|
+ color: $text-light;
|
|
|
+ }
|
|
|
+
|
|
|
+ .progress-ring {
|
|
|
+ position: relative;
|
|
|
+ width: 80px;
|
|
|
+ height: 80px;
|
|
|
+ margin: 0 auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ .progress-bg {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ border-radius: 50%;
|
|
|
+ background: conic-gradient($primary 0% 75%, $border 75% 100%);
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .progress-inner {
|
|
|
+ width: 70px;
|
|
|
+ height: 70px;
|
|
|
+ border-radius: 50%;
|
|
|
+ background: $card-bg;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 700;
|
|
|
+ color: $text-dark;
|
|
|
+ }
|
|
|
+
|
|
|
+ .quality-bar {
|
|
|
+ height: 8px;
|
|
|
+ background: $border;
|
|
|
+ border-radius: 4px;
|
|
|
+ margin-top: 15px;
|
|
|
+ overflow: hidden;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+
|
|
|
+ .quality-fill {
|
|
|
+ height: 100%;
|
|
|
+ width: 85%;
|
|
|
+ background: linear-gradient(90deg, $primary, $primary-dark);
|
|
|
+ border-radius: 4px;
|
|
|
+ position: relative;
|
|
|
+
|
|
|
+ &::after {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ background: linear-gradient(90deg,
|
|
|
+ transparent,
|
|
|
+ rgba(255, 255, 255, 0.5),
|
|
|
+ transparent);
|
|
|
+ animation: wave 2s linear infinite;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @keyframes wave {
|
|
|
+ 0% { transform: translateX(-100%); }
|
|
|
+ 100% { transform: translateX(100%); }
|
|
|
+ }
|
|
|
+
|
|
|
+ .alert-badge {
|
|
|
+ position: absolute;
|
|
|
+ top: -8px;
|
|
|
+ right: -8px;
|
|
|
+ width: 24px;
|
|
|
+ height: 24px;
|
|
|
+ border-radius: 50%;
|
|
|
+ background: $error;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ color: white;
|
|
|
+ font-size: 12px;
|
|
|
+ font-weight: bold;
|
|
|
+ animation: pulse 1.5s infinite;
|
|
|
+ }
|
|
|
+
|
|
|
+ @keyframes pulse {
|
|
|
+ 0% { box-shadow: 0 0 0 0 rgba(234, 67, 53, 0.7); }
|
|
|
+ 70% { box-shadow: 0 0 0 8px rgba(234, 67, 53, 0); }
|
|
|
+ 100% { box-shadow: 0 0 0 0 rgba(234, 67, 53, 0); }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 训练结果展示 */
|
|
|
+ .training-results {
|
|
|
+ margin-top: 25px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .result-item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ padding: 15px 0;
|
|
|
+ border-bottom: 1px solid $border;
|
|
|
+ transition: all 0.2s ease;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: rgba(66, 133, 244, 0.03);
|
|
|
+ border-radius: 12px;
|
|
|
+ padding: 15px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:last-child {
|
|
|
+ border-bottom: none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .result-icon {
|
|
|
+ width: 40px;
|
|
|
+ height: 40px;
|
|
|
+ border-radius: 12px;
|
|
|
+ background: $primary-light;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ color: $primary;
|
|
|
+ margin-right: 15px;
|
|
|
+ font-size: 18px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .result-content {
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .result-title {
|
|
|
+ font-weight: 600;
|
|
|
+ color: $text-dark;
|
|
|
+ margin-bottom: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .result-meta {
|
|
|
+ display: flex;
|
|
|
+ font-size: 13px;
|
|
|
+ color: $text-light;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .result-date {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 5px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .result-status {
|
|
|
+ padding: 4px 10px;
|
|
|
+ border-radius: 20px;
|
|
|
+ font-size: 12px;
|
|
|
+ font-weight: 600;
|
|
|
+
|
|
|
+ &.status-completed {
|
|
|
+ background: rgba(52, 168, 83, 0.1);
|
|
|
+ color: $success;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.status-training {
|
|
|
+ background: rgba(251, 188, 5, 0.1);
|
|
|
+ color: $warning;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.status-error {
|
|
|
+ background: rgba(234, 67, 53, 0.1);
|
|
|
+ color: $error;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 数据记录部分 */
|
|
|
+ .data-record {
|
|
|
+ margin-top: 25px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .record-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 15px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .view-all {
|
|
|
+ color: $primary;
|
|
|
+ font-size: 14px;
|
|
|
+ text-decoration: none;
|
|
|
+ cursor: pointer;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 5px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .record-list {
|
|
|
+ display: grid;
|
|
|
+ grid-template-columns: repeat(2, 1fr);
|
|
|
+ gap: 15px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .record-item {
|
|
|
+ background: $card-bg;
|
|
|
+ border-radius: 16px;
|
|
|
+ padding: 15px;
|
|
|
+ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.03);
|
|
|
+ border: 1px solid rgba(66, 133, 244, 0.08);
|
|
|
+ transition: all 0.3s ease;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ transform: translateY(-3px);
|
|
|
+ box-shadow: 0 6px 15px rgba(66, 133, 244, 0.15);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .record-title {
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: $text-dark;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 5px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .record-value {
|
|
|
+ font-size: 22px;
|
|
|
+ font-weight: 700;
|
|
|
+ color: $primary;
|
|
|
+ }
|
|
|
+
|
|
|
+ .record-trend {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ font-size: 12px;
|
|
|
+ margin-top: 5px;
|
|
|
+
|
|
|
+ &.trend-up {
|
|
|
+ color: $success;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.trend-down {
|
|
|
+ color: $error;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .trend-icon {
|
|
|
+ margin-right: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 历史数据记录 */
|
|
|
+ .history-list {
|
|
|
+ max-height: 200px;
|
|
|
+ overflow-y: auto;
|
|
|
+ padding-right: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .history-item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ padding: 12px 0;
|
|
|
+ border-bottom: 1px solid $border;
|
|
|
+ transition: all 0.2s ease;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: rgba(66, 133, 244, 0.03);
|
|
|
+ border-radius: 12px;
|
|
|
+ padding: 12px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .history-icon {
|
|
|
+ width: 36px;
|
|
|
+ height: 36px;
|
|
|
+ border-radius: 10px;
|
|
|
+ background: $primary-light;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ color: $primary;
|
|
|
+ margin-right: 12px;
|
|
|
+ font-size: 16px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .history-content {
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .history-name {
|
|
|
+ font-weight: 500;
|
|
|
+ margin-bottom: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .history-meta {
|
|
|
+ display: flex;
|
|
|
+ font-size: 12px;
|
|
|
+ color: $text-light;
|
|
|
+ gap: 15px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .history-size {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 3px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .history-date {
|
|
|
+ color: $text-medium;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 3px;
|
|
|
+ }
|
|
|
+
|
|
|
+// /* 页面标题装饰 */
|
|
|
+// .page-header {
|
|
|
+// text-align: center;
|
|
|
+// margin-bottom: 25px;
|
|
|
+// }
|
|
|
+
|
|
|
+// .page-title {
|
|
|
+// font-size: 28px;
|
|
|
+// font-weight: 800;
|
|
|
+// color: $text-dark;
|
|
|
+// margin-bottom: 8px;
|
|
|
+// background: linear-gradient(90deg, #3367d6, #4285f4);
|
|
|
+// //webkit-background-clip: text;
|
|
|
+// -webkit-text-fill-color: transparent;
|
|
|
+// position: relative;
|
|
|
+// display: inline-block;
|
|
|
+// }
|
|
|
+
|
|
|
+// .page-subtitle {
|
|
|
+// color: $text-light;
|
|
|
+// font-size: 16px;
|
|
|
+// max-width: 300px;
|
|
|
+// margin: 0 auto;
|
|
|
+// }
|
|
|
+
|
|
|
+// /* 装饰元素 */
|
|
|
+// .decor-circle {
|
|
|
+// position: absolute;
|
|
|
+// width: 200px;
|
|
|
+// height: 200px;
|
|
|
+// border-radius: 50%;
|
|
|
+// background: linear-gradient(135deg, rgba(66, 133, 244, 0.1) 0%, rgba(66, 133, 244, 0.05) 100%);
|
|
|
+// z-index: -1;
|
|
|
+// }
|
|
|
+/* ===== 修复标题显示问题 ===== */
|
|
|
+.page-header {
|
|
|
+ position: relative;
|
|
|
+ z-index: 10; /* 确保标题在装饰层之上 */
|
|
|
+ margin: 0 0 20px 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .page-title {
|
|
|
+ color: #000000; /* 强制黑色字体 */
|
|
|
+ background: white; /* 白色背景 */
|
|
|
+ display: inline-block;
|
|
|
+ padding: 8px 20px;
|
|
|
+ border-radius: 30px;
|
|
|
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
|
+ position: relative;
|
|
|
+ z-index: 20; /* 高于装饰元素 */
|
|
|
+ font-weight: 600; /* 可选:加粗字体 */
|
|
|
+ }
|
|
|
+
|
|
|
+ .page-subtitle {
|
|
|
+ color: #555555; /* 深灰色副标题 */
|
|
|
+ background: white;
|
|
|
+ display: inline-block;
|
|
|
+ padding: 5px 15px;
|
|
|
+ border-radius: 20px;
|
|
|
+ margin-top: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 确保装饰圆圈不会覆盖标题 */
|
|
|
+ .decor-circle {
|
|
|
+ z-index: 1 !important; /* 强制装饰元素在底层 */
|
|
|
+ }
|
|
|
+
|
|
|
+ .circle-1 {
|
|
|
+ top: 10%;
|
|
|
+ left: -50px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .circle-2 {
|
|
|
+ bottom: 10%;
|
|
|
+ right: -50px;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 新增搜索框样式 */
|
|
|
+ .search-container {
|
|
|
+ margin-bottom: 20px;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+
|
|
|
+ .search-box {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ background: $card-bg;
|
|
|
+ border-radius: 30px;
|
|
|
+ padding: 8px 16px;
|
|
|
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
|
|
|
+ border: 1px solid $border;
|
|
|
+
|
|
|
+ i {
|
|
|
+ color: $text-light;
|
|
|
+ margin-right: 10px;
|
|
|
+ font-size: 18px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .search-input {
|
|
|
+ flex: 1;
|
|
|
+ border: none;
|
|
|
+ background: transparent;
|
|
|
+ padding: 10px 0;
|
|
|
+ font-size: 15px;
|
|
|
+ color: $text-dark;
|
|
|
+ outline: none;
|
|
|
+
|
|
|
+ &::placeholder {
|
|
|
+ color: $text-light;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 上传控制台新样式 */
|
|
|
+ .upload-method-selector {
|
|
|
+ margin: 25px 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .method-title {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 600;
|
|
|
+ margin-bottom: 12px;
|
|
|
+ color: $text-dark;
|
|
|
+ }
|
|
|
+
|
|
|
+ .method-options {
|
|
|
+ display: flex;
|
|
|
+ gap: 15px;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ }
|
|
|
+
|
|
|
+ .method-option {
|
|
|
+ flex: 1;
|
|
|
+ min-width: 100px;
|
|
|
+ padding: 15px;
|
|
|
+ background: $card-bg;
|
|
|
+ border-radius: 16px;
|
|
|
+ text-align: center;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+ border: 1px solid $border;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ transform: translateY(-3px);
|
|
|
+ box-shadow: 0 6px 15px rgba(66, 133, 244, 0.1);
|
|
|
+ }
|
|
|
+
|
|
|
+ &.active {
|
|
|
+ border-color: $primary;
|
|
|
+ background: $primary-light;
|
|
|
+ color: $primary;
|
|
|
+ font-weight: 600;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .method-icon {
|
|
|
+ font-size: 24px;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ color: $primary;
|
|
|
+ }
|
|
|
+
|
|
|
+ .upload-action {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ margin-top: 15px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .upload-button {
|
|
|
+ background: $primary;
|
|
|
+ color: white;
|
|
|
+ border: none;
|
|
|
+ border-radius: 30px;
|
|
|
+ padding: 15px 40px;
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 600;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 10px;
|
|
|
+ box-shadow: 0 6px 15px rgba(66, 133, 244, 0.3);
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: $primary-dark;
|
|
|
+ transform: translateY(-2px);
|
|
|
+ box-shadow: 0 8px 20px rgba(66, 133, 244, 0.4);
|
|
|
+ }
|
|
|
+
|
|
|
+ &:active {
|
|
|
+ transform: translateY(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 上传状态指示器 */
|
|
|
+ .upload-status {
|
|
|
+ margin-top: 20px;
|
|
|
+ padding: 15px;
|
|
|
+ border-radius: 16px;
|
|
|
+ background: rgba(52, 168, 83, 0.1);
|
|
|
+ color: $success;
|
|
|
+ text-align: center;
|
|
|
+
|
|
|
+ &.error {
|
|
|
+ background: rgba(234, 67, 53, 0.1);
|
|
|
+ color: $error;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .upload-progress {
|
|
|
+ height: 6px;
|
|
|
+ background: $border;
|
|
|
+ border-radius: 3px;
|
|
|
+ margin-top: 10px;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
+
|
|
|
+ .progress-bar {
|
|
|
+ height: 100%;
|
|
|
+ width: 0%;
|
|
|
+ background: linear-gradient(90deg, $primary, $primary-dark);
|
|
|
+ border-radius: 3px;
|
|
|
+ transition: width 0.3s ease;
|
|
|
+ }
|
|
|
+ //7.1
|
|
|
+ /* 原有样式保持不变... */
|
|
|
+
|
|
|
+/* 新增可点击标签样式 */
|
|
|
+.clickable-tag {
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.3s ease;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 8px;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: rgba(0, 123, 255, 0.1);
|
|
|
+ transform: translateY(-2px);
|
|
|
+ }
|
|
|
+
|
|
|
+ i {
|
|
|
+ font-size: 14px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 模态框样式 */
|
|
|
+.modal-overlay {
|
|
|
+ position: fixed;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ background-color: rgba(0, 0, 0, 0.5);
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ z-index: 1000;
|
|
|
+ backdrop-filter: blur(3px);
|
|
|
+}
|
|
|
+
|
|
|
+.modal-content {
|
|
|
+ background-color: white;
|
|
|
+ border-radius: 12px;
|
|
|
+ width: 90%;
|
|
|
+ max-width: 500px;
|
|
|
+ max-height: 80vh;
|
|
|
+ overflow-y: auto;
|
|
|
+ box-shadow: 0 5px 20px rgba(0, 0, 0, 0.2);
|
|
|
+ padding: 20px;
|
|
|
+ position: relative;
|
|
|
+ animation: modalFadeIn 0.3s ease;
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes modalFadeIn {
|
|
|
+ from {
|
|
|
+ opacity: 0;
|
|
|
+ transform: translateY(-20px);
|
|
|
+ }
|
|
|
+ to {
|
|
|
+ opacity: 1;
|
|
|
+ transform: translateY(0);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.modal-close {
|
|
|
+ position: absolute;
|
|
|
+ top: 15px;
|
|
|
+ right: 15px;
|
|
|
+ background: none;
|
|
|
+ border: none;
|
|
|
+ font-size: 20px;
|
|
|
+ cursor: pointer;
|
|
|
+ color: #666;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.modal-title {
|
|
|
+ margin-top: 0;
|
|
|
+ margin-bottom: 20px;
|
|
|
+ color: #2c3e50;
|
|
|
+ font-size: 20px;
|
|
|
+}
|
|
|
+
|
|
|
+.modal-body {
|
|
|
+ margin-bottom: 20px;
|
|
|
+
|
|
|
+ p {
|
|
|
+ margin-top: 0;
|
|
|
+ color: #555;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.modal-input, .modal-select, .modal-textarea, .modal-file-input {
|
|
|
+ width: 100%;
|
|
|
+ padding: 10px;
|
|
|
+ margin-bottom: 15px;
|
|
|
+ border: 1px solid #ddd;
|
|
|
+ border-radius: 6px;
|
|
|
+ font-size: 14px;
|
|
|
+
|
|
|
+ &:focus {
|
|
|
+ outline: none;
|
|
|
+ border-color: #007bff;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.modal-textarea {
|
|
|
+ min-height: 100px;
|
|
|
+ resize: vertical;
|
|
|
+}
|
|
|
+
|
|
|
+.modal-file-input {
|
|
|
+ padding: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.modal-footer {
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-end;
|
|
|
+ gap: 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.modal-button {
|
|
|
+ padding: 10px 20px;
|
|
|
+ border-radius: 6px;
|
|
|
+ border: none;
|
|
|
+ cursor: pointer;
|
|
|
+ font-weight: 500;
|
|
|
+ transition: all 0.2s ease;
|
|
|
+
|
|
|
+ &.cancel {
|
|
|
+ background-color: #f1f1f1;
|
|
|
+ color: #333;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: #e0e0e0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &.confirm {
|
|
|
+ background-color: #007bff;
|
|
|
+ color: white;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: #0069d9;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.contract-info, .training-info {
|
|
|
+ display: grid;
|
|
|
+ grid-template-columns: 1fr 1fr;
|
|
|
+ gap: 10px;
|
|
|
+ margin-bottom: 15px;
|
|
|
+}
|
|
|
+/* 添加在原有样式之后 */
|
|
|
+
|
|
|
+/* 可访问性相关样式 */
|
|
|
+.sr-only {
|
|
|
+ position: absolute;
|
|
|
+ width: 1px;
|
|
|
+ height: 1px;
|
|
|
+ padding: 0;
|
|
|
+ margin: -1px;
|
|
|
+ overflow: hidden;
|
|
|
+ clip: rect(0, 0, 0, 0);
|
|
|
+ white-space: nowrap;
|
|
|
+ border-width: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.file-upload-label {
|
|
|
+ display: block;
|
|
|
+ margin-bottom: 15px;
|
|
|
+ cursor: pointer;
|
|
|
+
|
|
|
+ input[type="file"] {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+label:not(.sr-only):not(.file-upload-label) {
|
|
|
+ display: block;
|
|
|
+ margin-bottom: 8px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #555;
|
|
|
+ font-weight: 500;
|
|
|
+}
|
|
|
+/* 修复source-tag的悬停效果 */
|
|
|
+.source-tag {
|
|
|
+ /* 原有基础样式保持不变 */
|
|
|
+ background: #f0f4f8;
|
|
|
+ padding: 8px 16px;
|
|
|
+ border-radius: 20px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: $text-dark;
|
|
|
+ transition: all 0.2s ease;
|
|
|
+ border: 1px solid transparent;
|
|
|
+ cursor: pointer;
|
|
|
+ box-shadow: 0 2px 5px rgba(0,0,0,0.05);
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 8px;
|
|
|
+
|
|
|
+ /* 确保悬停效果优先级 */
|
|
|
+ &:hover {
|
|
|
+ background: #e0e0e0 !important;
|
|
|
+ transform: translateY(-2px) !important;
|
|
|
+ box-shadow: 0 4px 8px rgba(0,0,0,0.1) !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 活动状态 */
|
|
|
+ &.active {
|
|
|
+ border-color: $primary;
|
|
|
+ box-shadow: 0 0 0 2px rgba(66, 133, 244, 0.3);
|
|
|
+ color: $primary;
|
|
|
+ font-weight: 600;
|
|
|
+ background: rgba(66, 133, 244, 0.08);
|
|
|
+
|
|
|
+ /* 活动状态下的悬停效果 */
|
|
|
+ &:hover {
|
|
|
+ background: rgba(66, 133, 244, 0.15) !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 图标样式 */
|
|
|
+ i {
|
|
|
+ margin-right: 0; /* 改为使用gap布局 */
|
|
|
+ font-size: 14px;
|
|
|
+ }
|
|
|
+}
|
|
|
+.source-tag {
|
|
|
+ /* 原有基础样式保持不变 */
|
|
|
+ background: #f0f4f8;
|
|
|
+ padding: 8px 16px;
|
|
|
+ border-radius: 20px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: $text-dark;
|
|
|
+ transition: all 0.3s ease; /* 增加过渡时间使效果更平滑 */
|
|
|
+ border: 1px solid transparent; /* 初始透明边框 */
|
|
|
+ cursor: pointer;
|
|
|
+ box-shadow: 0 2px 5px rgba(0,0,0,0.05);
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 8px;
|
|
|
+ position: relative; /* 为伪元素定位做准备 */
|
|
|
+
|
|
|
+ /* 新增悬停蓝色边框效果 */
|
|
|
+ &:hover {
|
|
|
+ border-color: $primary; /* 蓝色边框 */
|
|
|
+ box-shadow: 0 0 0 2px rgba(66, 133, 244, 0.3); /* 外发光效果 */
|
|
|
+
|
|
|
+ /* 如果想要更明显的发光效果,可以使用以下替代方案 */
|
|
|
+ /*
|
|
|
+ box-shadow: 0 0 0 2px $primary-light,
|
|
|
+ 0 4px 8px rgba(0,0,0,0.1);
|
|
|
+ */
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 活动状态 */
|
|
|
+ &.active {
|
|
|
+ border-color: $primary;
|
|
|
+ box-shadow: 0 0 0 2px rgba(66, 133, 244, 0.3);
|
|
|
+ color: $primary;
|
|
|
+ font-weight: 600;
|
|
|
+ background: rgba(66, 133, 244, 0.08);
|
|
|
+
|
|
|
+ /* 活动状态下的悬停效果 */
|
|
|
+ &:hover {
|
|
|
+ background: rgba(66, 133, 244, 0.15);
|
|
|
+ box-shadow: 0 0 0 3px rgba(66, 133, 244, 0.4); /* 悬停时加强效果 */
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 图标样式 */
|
|
|
+ i {
|
|
|
+ font-size: 14px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//
|
|
|
+/* 标签选择器样式 */
|
|
|
+.tag-selector-overlay {
|
|
|
+ position: fixed;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ background-color: rgba(0, 0, 0, 0.5);
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ z-index: 1001; /* 比模态框更高 */
|
|
|
+ backdrop-filter: blur(3px);
|
|
|
+}
|
|
|
+
|
|
|
+.tag-selector-container {
|
|
|
+ background-color: white;
|
|
|
+ border-radius: 16px;
|
|
|
+ width: 90%;
|
|
|
+ max-width: 400px;
|
|
|
+ max-height: 70vh;
|
|
|
+ overflow: hidden;
|
|
|
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
|
|
|
+ animation: modalFadeIn 0.3s ease;
|
|
|
+}
|
|
|
+
|
|
|
+.tag-selector-header {
|
|
|
+ padding: 20px;
|
|
|
+ border-bottom: 1px solid #eee;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ h3 {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 18px;
|
|
|
+ color: $text-dark;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.tag-selector-close {
|
|
|
+ background: none;
|
|
|
+ border: none;
|
|
|
+ font-size: 20px;
|
|
|
+ color: $text-light;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: color 0.2s;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ color: $primary;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.tag-selector-body {
|
|
|
+ padding: 10px 0;
|
|
|
+}
|
|
|
+
|
|
|
+.tag-scroll-container {
|
|
|
+ max-height: 50vh;
|
|
|
+ overflow-y: auto;
|
|
|
+ padding: 0 15px;
|
|
|
+}
|
|
|
+
|
|
|
+.tag-option {
|
|
|
+ padding: 12px 15px;
|
|
|
+ margin: 5px 0;
|
|
|
+ border-radius: 10px;
|
|
|
+ cursor: pointer;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ transition: all 0.2s;
|
|
|
+ position: relative;
|
|
|
+ border: 1px solid #eee;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: rgba(66, 133, 244, 0.1);
|
|
|
+ transform: translateX(5px);
|
|
|
+ }
|
|
|
+
|
|
|
+ &.selected {
|
|
|
+ background-color: rgba(66, 133, 244, 0.15);
|
|
|
+ border-color: $primary;
|
|
|
+ }
|
|
|
+
|
|
|
+ i {
|
|
|
+ margin-right: 10px;
|
|
|
+ color: $primary;
|
|
|
+ width: 20px;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.checkmark {
|
|
|
+ margin-left: auto;
|
|
|
+ color: $primary;
|
|
|
+ font-size: 14px;
|
|
|
+}
|
|
|
+
|
|
|
+.tag-selector-footer {
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-end;
|
|
|
+ padding: 15px;
|
|
|
+ border-top: 1px solid #eee;
|
|
|
+ gap: 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.tag-selector-btn {
|
|
|
+ padding: 10px 20px;
|
|
|
+ border-radius: 20px;
|
|
|
+ border: none;
|
|
|
+ cursor: pointer;
|
|
|
+ font-weight: 500;
|
|
|
+ transition: all 0.2s;
|
|
|
+
|
|
|
+ &.cancel {
|
|
|
+ background-color: #f5f5f5;
|
|
|
+ color: $text-dark;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: #e0e0e0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &.confirm {
|
|
|
+ background-color: $primary;
|
|
|
+ color: white;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: $primary-dark;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+.add-tag-btn {
|
|
|
+ position: relative; // 确保按钮在顶层
|
|
|
+ z-index: 1;
|
|
|
+}
|
|
|
+/* 在文件末尾添加以下内容 */
|
|
|
+
|
|
|
+/* 标签选择器样式 */
|
|
|
+.tag-selector-overlay {
|
|
|
+ position: fixed;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ background-color: rgba(0, 0, 0, 0.5);
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ z-index: 1001;
|
|
|
+ backdrop-filter: blur(3px);
|
|
|
+}
|
|
|
+
|
|
|
+.tag-selector-container {
|
|
|
+ background-color: white;
|
|
|
+ border-radius: 16px;
|
|
|
+ width: 90%;
|
|
|
+ max-width: 400px;
|
|
|
+ max-height: 70vh;
|
|
|
+ overflow: hidden;
|
|
|
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
|
|
|
+}
|
|
|
+
|
|
|
+/* 确保按钮层级 */
|
|
|
+.add-tag-btn {
|
|
|
+ position: relative;
|
|
|
+ z-index: 1;
|
|
|
+}
|
|
|
+
|
|
|
+/* 模态框层级 */
|
|
|
+.modal-overlay {
|
|
|
+ z-index: 1000;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//<!-- 每日数据记录
|
|
|
+/* 横屏数据查看模态框样式 */
|
|
|
+/* 每日数据记录卡片样式 */
|
|
|
+.data-record {
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 12px;
|
|
|
+ padding: 16px;
|
|
|
+ margin-bottom: 20px;
|
|
|
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
|
+
|
|
|
+ .record-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 16px;
|
|
|
+
|
|
|
+ .card-title {
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .view-all {
|
|
|
+ color: #1890ff;
|
|
|
+ font-size: 14px;
|
|
|
+ cursor: pointer;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 4px;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ color: #40a9ff;
|
|
|
+ }
|
|
|
+
|
|
|
+ i {
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .record-list {
|
|
|
+ display: grid;
|
|
|
+ grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
|
|
|
+ gap: 12px;
|
|
|
+
|
|
|
+ .record-item {
|
|
|
+ padding: 12px;
|
|
|
+ background: #f9f9f9;
|
|
|
+ border-radius: 8px;
|
|
|
+
|
|
|
+ .record-title {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 6px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #666;
|
|
|
+ margin-bottom: 8px;
|
|
|
+
|
|
|
+ i {
|
|
|
+ color: #1890ff;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .record-value {
|
|
|
+ font-size: 20px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #333;
|
|
|
+ margin-bottom: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .record-trend {
|
|
|
+ font-size: 13px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 4px;
|
|
|
+
|
|
|
+ &.trend-up {
|
|
|
+ color: #52c41a;
|
|
|
+ }
|
|
|
+
|
|
|
+ &.trend-down {
|
|
|
+ color: #f5222d;
|
|
|
+ }
|
|
|
+
|
|
|
+ .trend-icon {
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 每日数据模态框样式 */
|
|
|
+.daily-data-overlay {
|
|
|
+ position: fixed;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ background-color: rgba(0, 0, 0, 0.5);
|
|
|
+ z-index: 1000;
|
|
|
+ backdrop-filter: blur(3px);
|
|
|
+}
|
|
|
+
|
|
|
+.daily-data-modal {
|
|
|
+ position: fixed;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+ width: 90%;
|
|
|
+ max-width: 800px;
|
|
|
+ max-height: 80vh;
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 12px;
|
|
|
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
|
|
|
+ z-index: 1001;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ .daily-data-close {
|
|
|
+ position: absolute;
|
|
|
+ top: 16px;
|
|
|
+ right: 16px;
|
|
|
+ width: 32px;
|
|
|
+ height: 32px;
|
|
|
+ background: rgba(0, 0, 0, 0.05);
|
|
|
+ border: none;
|
|
|
+ border-radius: 50%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.2s;
|
|
|
+ z-index: 1;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: rgba(0, 0, 0, 0.1);
|
|
|
+ }
|
|
|
+
|
|
|
+ i {
|
|
|
+ color: #666;
|
|
|
+ font-size: 16px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .modal-header {
|
|
|
+ padding: 20px 24px;
|
|
|
+ border-bottom: 1px solid #f0f0f0;
|
|
|
+
|
|
|
+ h3 {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .modal-search {
|
|
|
+ padding: 16px 24px;
|
|
|
+ display: flex;
|
|
|
+ border-bottom: 1px solid #f0f0f0;
|
|
|
+
|
|
|
+ input {
|
|
|
+ flex: 1;
|
|
|
+ padding: 8px 12px;
|
|
|
+ border: 1px solid #d9d9d9;
|
|
|
+ border-radius: 6px;
|
|
|
+ font-size: 14px;
|
|
|
+ transition: all 0.3s;
|
|
|
+
|
|
|
+ &:focus {
|
|
|
+ outline: none;
|
|
|
+ border-color: #1890ff;
|
|
|
+ box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ button {
|
|
|
+ margin-left: 12px;
|
|
|
+ padding: 0 16px;
|
|
|
+ background-color: #1890ff;
|
|
|
+ color: white;
|
|
|
+ border: none;
|
|
|
+ border-radius: 6px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.3s;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: #40a9ff;
|
|
|
+ }
|
|
|
+
|
|
|
+ i {
|
|
|
+ font-size: 14px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .modal-content {
|
|
|
+ flex: 1;
|
|
|
+ overflow-y: auto;
|
|
|
+ padding: 16px 0;
|
|
|
+
|
|
|
+ .modal-item {
|
|
|
+ padding: 16px 24px;
|
|
|
+ border-bottom: 1px solid #f5f5f5;
|
|
|
+ transition: background-color 0.2s;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: #fafafa;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:last-child {
|
|
|
+ border-bottom: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .item-date {
|
|
|
+ font-weight: 600;
|
|
|
+ margin-bottom: 12px;
|
|
|
+ color: #333;
|
|
|
+ font-size: 15px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .item-details {
|
|
|
+ display: grid;
|
|
|
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
|
|
+ gap: 12px;
|
|
|
+
|
|
|
+ .detail {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ font-size: 14px;
|
|
|
+
|
|
|
+ .label {
|
|
|
+ margin-right: 6px;
|
|
|
+ color: #666;
|
|
|
+ min-width: 60px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .value {
|
|
|
+ font-weight: 500;
|
|
|
+ margin-right: 8px;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .trend {
|
|
|
+ font-size: 12px;
|
|
|
+ padding: 2px 6px;
|
|
|
+ border-radius: 10px;
|
|
|
+ background-color: rgba(24, 144, 255, 0.1);
|
|
|
+
|
|
|
+ &.up {
|
|
|
+ color: #52c41a;
|
|
|
+ background-color: rgba(82, 196, 26, 0.1);
|
|
|
+ }
|
|
|
+
|
|
|
+ &.down {
|
|
|
+ color: #f5222d;
|
|
|
+ background-color: rgba(245, 34, 45, 0.1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 响应式调整 */
|
|
|
+@media (max-width: 768px) {
|
|
|
+ .data-record .record-list {
|
|
|
+ grid-template-columns: 1fr 1fr;
|
|
|
+ }
|
|
|
+
|
|
|
+ .daily-data-modal {
|
|
|
+ width: 95%;
|
|
|
+ max-height: 85vh;
|
|
|
+
|
|
|
+ .modal-content .item-details {
|
|
|
+ grid-template-columns: 1fr;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@media (max-width: 480px) {
|
|
|
+ .data-record .record-list {
|
|
|
+ grid-template-columns: 1fr;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 更新关闭按钮样式 - 添加文字和图标组合 */
|
|
|
+.daily-data-close {
|
|
|
+ position: absolute;
|
|
|
+ top: 16px;
|
|
|
+ right: 16px;
|
|
|
+ padding: 6px 12px 6px 8px;
|
|
|
+ background: rgba(0, 0, 0, 0.05);
|
|
|
+ border: none;
|
|
|
+ border-radius: 16px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 4px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.2s;
|
|
|
+ z-index: 1;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #666;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: rgba(0, 0, 0, 0.1);
|
|
|
+ color: #333;
|
|
|
+
|
|
|
+ &::after {
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ i {
|
|
|
+ font-size: 14px;
|
|
|
+ transition: transform 0.2s;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 添加文字标签(悬停时显示) */
|
|
|
+ &::after {
|
|
|
+ content: "关闭";
|
|
|
+ opacity: 0;
|
|
|
+ transition: opacity 0.2s;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover i {
|
|
|
+ transform: rotate(90deg);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 添加确认按钮容器 */
|
|
|
+.modal-actions {
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-end;
|
|
|
+ padding: 16px 24px;
|
|
|
+ border-top: 1px solid #f0f0f0;
|
|
|
+ gap: 12px;
|
|
|
+
|
|
|
+ button {
|
|
|
+ padding: 8px 16px;
|
|
|
+ border-radius: 6px;
|
|
|
+ font-size: 14px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.2s;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 6px;
|
|
|
+
|
|
|
+ &.cancel-btn {
|
|
|
+ background: #f5f5f5;
|
|
|
+ color: #666;
|
|
|
+ border: 1px solid #d9d9d9;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: #eee;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &.confirm-btn {
|
|
|
+ background: #1890ff;
|
|
|
+ color: white;
|
|
|
+ border: none;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: #40a9ff;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ i {
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//数据
|
|
|
+/* 数据项样式 */
|
|
|
+.data-item {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ padding: 12px 0;
|
|
|
+ border-bottom: 1px solid #f0f0f0;
|
|
|
+ transition: background-color 0.2s;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: #f9f9f9;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.data-main {
|
|
|
+ flex: 1;
|
|
|
+}
|
|
|
+
|
|
|
+.data-title {
|
|
|
+ font-weight: 500;
|
|
|
+ margin-bottom: 4px;
|
|
|
+ color: #333;
|
|
|
+}
|
|
|
+
|
|
|
+.data-meta {
|
|
|
+ display: flex;
|
|
|
+ gap: 15px;
|
|
|
+ font-size: 12px;
|
|
|
+ color: #666;
|
|
|
+
|
|
|
+ i {
|
|
|
+ margin-right: 4px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.data-actions {
|
|
|
+ display: flex;
|
|
|
+ gap: 8px;
|
|
|
+
|
|
|
+ button {
|
|
|
+ background: none;
|
|
|
+ border: none;
|
|
|
+ color: #999;
|
|
|
+ cursor: pointer;
|
|
|
+ font-size: 16px;
|
|
|
+ transition: color 0.2s;
|
|
|
+
|
|
|
+ &:first-child:hover {
|
|
|
+ color: #1890ff;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:last-child:hover {
|
|
|
+ color: #ff4d4f;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.no-data {
|
|
|
+ text-align: center;
|
|
|
+ padding: 20px;
|
|
|
+ color: #999;
|
|
|
+}
|
|
|
+
|
|
|
+/* 表单样式 */
|
|
|
+.form-group {
|
|
|
+ margin-bottom: 16px;
|
|
|
+
|
|
|
+ label {
|
|
|
+ display: block;
|
|
|
+ margin-bottom: 8px;
|
|
|
+ font-weight: 500;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ input, select {
|
|
|
+ width: 100%;
|
|
|
+ padding: 8px 12px;
|
|
|
+ border: 1px solid #d9d9d9;
|
|
|
+ border-radius: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ textarea {
|
|
|
+ width: 100%;
|
|
|
+ min-height: 100px;
|
|
|
+ padding: 8px 12px;
|
|
|
+ border: 1px solid #d9d9d9;
|
|
|
+ border-radius: 4px;
|
|
|
+ resize: vertical;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.form-footer {
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-end;
|
|
|
+ gap: 12px;
|
|
|
+ margin-top: 24px;
|
|
|
+}
|
|
|
+
|
|
|
+//7.3
|
|
|
+/* AI对话模态框样式 */
|
|
|
+.ai-dialog-overlay {
|
|
|
+ position: fixed;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ background-color: rgba(0, 0, 0, 0.7);
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ z-index: 1100;
|
|
|
+ backdrop-filter: blur(5px);
|
|
|
+}
|
|
|
+
|
|
|
+.ai-dialog-container {
|
|
|
+ width: 90%;
|
|
|
+ max-width: 600px;
|
|
|
+ height: 80vh;
|
|
|
+ background-color: white;
|
|
|
+ border-radius: 12px;
|
|
|
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+.ai-dialog-header {
|
|
|
+ padding: 16px 24px;
|
|
|
+ background: linear-gradient(135deg, #4285f4, #3367d6);
|
|
|
+ color: white;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ h3 {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 600;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.ai-dialog-close {
|
|
|
+ background: rgba(255, 255, 255, 0.2);
|
|
|
+ border: none;
|
|
|
+ width: 32px;
|
|
|
+ height: 32px;
|
|
|
+ border-radius: 50%;
|
|
|
+ color: white;
|
|
|
+ font-size: 16px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.2s;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: rgba(255, 255, 255, 0.3);
|
|
|
+ transform: rotate(90deg);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.ai-dialog-content {
|
|
|
+ flex: 1;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ padding: 0;
|
|
|
+ min-height: 0; // 新增这行
|
|
|
+ overflow: hidden; // 修改为hidden
|
|
|
+ background-color: #f5f7fa;
|
|
|
+}
|
|
|
+
|
|
|
+.ai-messages {
|
|
|
+ min-height: 0; // 新增这行
|
|
|
+ flex: 1;
|
|
|
+ padding: 16px;
|
|
|
+ overflow-y: auto;
|
|
|
+ scroll-behavior: smooth;
|
|
|
+
|
|
|
+ /* 自定义滚动条 */
|
|
|
+ &::-webkit-scrollbar {
|
|
|
+ width: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &::-webkit-scrollbar-track {
|
|
|
+ background: #f1f1f1;
|
|
|
+ border-radius: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &::-webkit-scrollbar-thumb {
|
|
|
+ background: #c1c1c1;
|
|
|
+ border-radius: 4px;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: #a8a8a8;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.message {
|
|
|
+ display: flex;
|
|
|
+ margin-bottom: 20px;
|
|
|
+ animation: fadeIn 0.3s ease;
|
|
|
+ max-width: 100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+
|
|
|
+ &.user {
|
|
|
+ flex-direction: row-reverse;
|
|
|
+
|
|
|
+ .message-content {
|
|
|
+ align-items: flex-end;
|
|
|
+ }
|
|
|
+
|
|
|
+ .message-text {
|
|
|
+ background: linear-gradient(135deg, #4285f4, #3367d6);
|
|
|
+ color: white;
|
|
|
+ border-radius: 18px 18px 0 18px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes fadeIn {
|
|
|
+ from { opacity: 0; transform: translateY(10px); }
|
|
|
+ to { opacity: 1; transform: translateY(0); }
|
|
|
+}
|
|
|
+
|
|
|
+.message-avatar {
|
|
|
+ width: 40px;
|
|
|
+ height: 40px;
|
|
|
+ border-radius: 50%;
|
|
|
+ background-color: #e0e0e0;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ margin: 0 12px;
|
|
|
+ flex-shrink: 0;
|
|
|
+
|
|
|
+ i {
|
|
|
+ color: #666;
|
|
|
+ font-size: 18px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.message-content {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ max-width: 75%;
|
|
|
+}
|
|
|
+
|
|
|
+.message-text {
|
|
|
+ padding: 12px 16px;
|
|
|
+ background-color: white;
|
|
|
+ border-radius: 18px 18px 18px 0;
|
|
|
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
|
|
|
+ margin-bottom: 6px;
|
|
|
+ line-height: 1.5;
|
|
|
+ font-size: 15px;
|
|
|
+
|
|
|
+ a {
|
|
|
+ color: #4285f4;
|
|
|
+ text-decoration: none;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ text-decoration: underline;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.message-time {
|
|
|
+ font-size: 12px;
|
|
|
+ color: #888;
|
|
|
+}
|
|
|
+
|
|
|
+.ai-thinking {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ padding: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+.typing-indicator {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ background-color: white;
|
|
|
+ padding: 12px 16px;
|
|
|
+ border-radius: 18px;
|
|
|
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
|
|
|
+
|
|
|
+ span {
|
|
|
+ width: 8px;
|
|
|
+ height: 8px;
|
|
|
+ margin: 0 3px;
|
|
|
+ background-color: #4285f4;
|
|
|
+ border-radius: 50%;
|
|
|
+ display: inline-block;
|
|
|
+ animation: typing 1s infinite ease-in-out;
|
|
|
+
|
|
|
+ &:nth-child(1) {
|
|
|
+ animation-delay: 0s;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(2) {
|
|
|
+ animation-delay: 0.2s;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(3) {
|
|
|
+ animation-delay: 0.4s;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes typing {
|
|
|
+ 0%, 100% {
|
|
|
+ transform: translateY(0);
|
|
|
+ opacity: 0.6;
|
|
|
+ }
|
|
|
+ 50% {
|
|
|
+ transform: translateY(-5px);
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.ai-input-container {
|
|
|
+ display: flex;
|
|
|
+ padding: 16px;
|
|
|
+ border-top: 1px solid #e0e0e0;
|
|
|
+ background-color: white;
|
|
|
+ align-items: flex-end;
|
|
|
+}
|
|
|
+
|
|
|
+.ai-input {
|
|
|
+ flex: 1;
|
|
|
+ padding: 12px 16px;
|
|
|
+ border: 1px solid #ddd;
|
|
|
+ border-radius: 24px;
|
|
|
+ outline: none;
|
|
|
+ font-size: 15px;
|
|
|
+ resize: none;
|
|
|
+ max-height: 120px;
|
|
|
+ line-height: 1.5;
|
|
|
+ transition: all 0.2s;
|
|
|
+
|
|
|
+ &:focus {
|
|
|
+ border-color: #4285f4;
|
|
|
+ box-shadow: 0 0 0 2px rgba(66, 133, 244, 0.2);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.ai-send-btn {
|
|
|
+ width: 48px;
|
|
|
+ height: 48px;
|
|
|
+ border-radius: 50%;
|
|
|
+ background: linear-gradient(135deg, #4285f4, #3367d6);
|
|
|
+ color: white;
|
|
|
+ border: none;
|
|
|
+ margin-left: 12px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.2s;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+
|
|
|
+ &:hover:not(:disabled) {
|
|
|
+ transform: translateY(-2px);
|
|
|
+ box-shadow: 0 4px 12px rgba(66, 133, 244, 0.3);
|
|
|
+ }
|
|
|
+
|
|
|
+ &:disabled {
|
|
|
+ background: #ddd;
|
|
|
+ cursor: not-allowed;
|
|
|
+ }
|
|
|
+
|
|
|
+ i {
|
|
|
+ font-size: 18px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.ai-dialog-footer {
|
|
|
+ padding: 12px 16px;
|
|
|
+ border-top: 1px solid #e0e0e0;
|
|
|
+ background-color: #f9f9f9;
|
|
|
+}
|
|
|
+
|
|
|
+.ai-suggestions {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 8px;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ span {
|
|
|
+ font-size: 13px;
|
|
|
+ color: #666;
|
|
|
+ margin-right: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ button {
|
|
|
+ padding: 6px 12px;
|
|
|
+ background-color: #e8f0fe;
|
|
|
+ border: none;
|
|
|
+ border-radius: 16px;
|
|
|
+ font-size: 13px;
|
|
|
+ color: #4285f4;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.2s;
|
|
|
+ white-space: nowrap;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background-color: #d2e3fc;
|
|
|
+ transform: translateY(-1px);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 修改训练结果项样式 */
|
|
|
+.result-item {
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all 0.2s;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ transform: translateY(-2px);
|
|
|
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
|
+ }
|
|
|
+
|
|
|
+ &[class*="status-completed"] {
|
|
|
+ &:hover {
|
|
|
+ background-color: rgba(52, 168, 83, 0.05);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 新增:自动调整输入框高度 */
|
|
|
+.ai-input {
|
|
|
+ min-height: 48px;
|
|
|
+ max-height: 120px;
|
|
|
+ overflow-y: auto;
|
|
|
+}
|
|
|
+
|
|
|
+/* 新增:响应式调整 */
|
|
|
+@media (max-width: 480px) {
|
|
|
+ .ai-dialog-container {
|
|
|
+ width: 95%;
|
|
|
+ height: 85vh;
|
|
|
+ }
|
|
|
+
|
|
|
+ .message-content {
|
|
|
+ max-width: 85%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .message-avatar {
|
|
|
+ width: 32px;
|
|
|
+ height: 32px;
|
|
|
+ margin: 0 8px;
|
|
|
+
|
|
|
+ i {
|
|
|
+ font-size: 16px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .message-text {
|
|
|
+ padding: 10px 14px;
|
|
|
+ font-size: 14px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .ai-input-container {
|
|
|
+ padding: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .ai-send-btn {
|
|
|
+ width: 42px;
|
|
|
+ height: 42px;
|
|
|
+ }
|
|
|
+}
|
|
|
+.ai-dialog-overlay {
|
|
|
+ position: fixed;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ background-color: rgba(0, 0, 0, 0.7);
|
|
|
+ z-index: 9999; /* 临时设置为极高的值 */
|
|
|
+ /* 其他样式 */
|
|
|
+}
|
|
|
+.ai-messages {
|
|
|
+ flex: 1;
|
|
|
+ padding: 16px;
|
|
|
+ overflow-y: auto; // 启用垂直滚动
|
|
|
+ scroll-behavior: smooth; // 平滑滚动
|
|
|
+
|
|
|
+ /* 自定义滚动条样式 */
|
|
|
+ &::-webkit-scrollbar {
|
|
|
+ width: 8px; // 滚动条宽度
|
|
|
+ }
|
|
|
+
|
|
|
+ &::-webkit-scrollbar-track {
|
|
|
+ background: #f1f1f1; // 轨道颜色
|
|
|
+ border-radius: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ &::-webkit-scrollbar-thumb {
|
|
|
+ background: #c1c1c1; // 滑块颜色
|
|
|
+ border-radius: 4px;
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: #a8a8a8; // 悬停颜色
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 确保消息不会超出容器 */
|
|
|
+ .message {
|
|
|
+ max-width: 100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* 滚轮滚动支持 */
|
|
|
+ overscroll-behavior-y: contain;
|
|
|
+ -webkit-overflow-scrolling: touch; // iOS平滑滚动
|
|
|
+}
|
|
|
+
|
|
|
+//
|