Procházet zdrojové kódy

修改智贸项目

Fan před 3 týdny
rodič
revize
769a3b437a

+ 924 - 0
ui/smarttrade-platform/src/assets/styles/marketing.css

@@ -0,0 +1,924 @@
+/* ===== History Detail Modal ===== */
+.history-detail-modal { max-width: 800px; max-height: 85vh; }
+.history-detail-modal .modal-header { background: linear-gradient(135deg, rgba(251, 191, 36, 0.1), rgba(245, 158, 11, 0.1)); border-bottom: 2px solid var(--warning); }
+.history-detail-modal .modal-title { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
+.history-detail-modal .detail-status { font-size: 12px; padding: 4px 10px; border-radius: 10px; margin-left: auto; }
+.history-detail-modal .detail-status.completed { background: rgba(16, 185, 129, 0.2); color: var(--success); }
+
+.history-detail-modal .evaluation-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
+.history-detail-modal .eval-item { display: flex; align-items: center; gap: 10px; padding: 10px; background: var(--bg-hover); border-radius: 8px; }
+.history-detail-modal .eval-label { font-size: 12px; color: var(--text-muted); min-width: 60px; }
+.history-detail-modal .eval-bar { flex: 1; height: 8px; background: var(--bg-dark); border-radius: 4px; overflow: hidden; }
+.history-detail-modal .eval-fill { height: 100%; background: linear-gradient(90deg, var(--primary), var(--success)); border-radius: 4px; transition: width 0.3s; }
+.history-detail-modal .eval-value { font-size: 11px; font-weight: 600; color: var(--success); min-width: 40px; text-align: right; }
+
+.history-detail-modal .summary-content { display: flex; flex-direction: column; gap: 10px; }
+.history-detail-modal .summary-item { display: flex; align-items: flex-start; gap: 10px; padding: 10px; background: var(--bg-hover); border-radius: 8px; font-size: 13px; }
+.history-detail-modal .summary-item i { margin-top: 2px; }
+.history-detail-modal .summary-item .success { color: var(--success); }
+.history-detail-modal .summary-item .info { color: var(--primary); }
+
+/* ===== Custom SOP Modal ===== */
+.custom-sop-modal { max-width: 700px; max-height: 85vh; }
+.custom-sop-modal .modal-header { background: linear-gradient(135deg, rgba(139, 92, 246, 0.1), rgba(99, 102, 241, 0.1)); border-bottom: 2px solid var(--secondary); }
+.custom-sop-modal .modal-title { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 8px; color: var(--secondary); }
+
+.custom-steps-section { margin-bottom: 20px; }
+.custom-steps-section .section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
+.custom-steps-section h5 { font-size: 14px; font-weight: 600; display: flex; align-items: center; gap: 6px; margin: 0; }
+
+.custom-steps-list { display: flex; flex-direction: column; gap: 12px; max-height: 300px; overflow-y: auto; }
+.custom-step-item { display: flex; gap: 12px; padding: 14px; background: var(--bg-hover); border-radius: 10px; border: 1px solid var(--border); transition: all 0.2s; }
+.custom-step-item:hover { border-color: var(--secondary); }
+.custom-step-item .step-number { width: 32px; height: 32px; background: var(--secondary); color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 600; flex-shrink: 0; }
+.custom-step-item .step-fields { flex: 1; }
+.custom-step-item .step-row { display: flex; gap: 10px; margin-bottom: 8px; }
+.custom-step-item .step-row:last-child { margin-bottom: 0; }
+.custom-step-item .step-row .form-group { flex: 1; margin-bottom: 0; }
+.custom-step-item .step-row .form-group .form-label { font-size: 11px; margin-bottom: 4px; }
+.custom-step-item .step-row .form-input, .custom-step-item .step-row .form-select { padding: 8px 10px; font-size: 12px; }
+.custom-step-item .channel-preview { display: flex; align-items: flex-end; }
+.custom-step-item .preview-badge { padding: 6px 12px; border-radius: 8px; font-size: 11px; display: flex; align-items: center; gap: 6px; }
+.custom-step-item .preview-badge.email { background: rgba(99, 102, 241, 0.2); color: var(--primary); }
+.custom-step-item .preview-badge.whatsapp { background: rgba(37, 211, 102, 0.2); color: #25D366; }
+.custom-step-item .preview-badge.linkedin { background: rgba(10, 102, 194, 0.2); color: #0A66C2; }
+.custom-step-item .preview-badge.phone { background: rgba(245, 158, 11, 0.2); color: var(--warning); }
+.custom-step-item .preview-badge.wechat { background: rgba(7, 193, 96, 0.2); color: #07C160; }
+.custom-step-item .step-actions { display: flex; align-items: center; }
+.custom-step-item .btn-icon { width: 32px; height: 32px; border: none; background: transparent; color: var(--text-muted); cursor: pointer; border-radius: 6px; transition: all 0.2s; }
+.custom-step-item .btn-icon:hover:not(:disabled) { background: rgba(239, 68, 68, 0.1); color: var(--danger); }
+.custom-step-item .btn-icon:disabled { opacity: 0.3; cursor: not-allowed; }
+
+/* Custom SOP Preview */
+.custom-sop-preview { padding: 14px; background: linear-gradient(135deg, rgba(139, 92, 246, 0.1), rgba(99, 102, 241, 0.1)); border-radius: 10px; }
+.custom-sop-preview h5 { font-size: 13px; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; color: var(--secondary); }
+.custom-sop-preview .preview-timeline { display: flex; flex-direction: column; gap: 8px; }
+.custom-sop-preview .preview-step { display: flex; gap: 10px; align-items: center; padding: 8px; background: var(--bg-card); border-radius: 8px; }
+.custom-sop-preview .preview-marker { width: 28px; height: 28px; border-radius: 50%; background: var(--bg-hover); display: flex; align-items: center; justify-content: center; color: var(--primary); font-size: 12px; }
+.custom-sop-preview .preview-content { flex: 1; }
+.custom-sop-preview .preview-title { font-size: 12px; font-weight: 500; }
+.custom-sop-preview .preview-meta { font-size: 10px; color: var(--text-muted); }
+.custom-sop-preview .preview-empty { text-align: center; padding: 20px; color: var(--text-muted); font-size: 12px; }
+
+/* ===== Interactions Detail Modal ===== */
+.interactions-detail-modal { max-width: 900px; max-height: 85vh; }
+.interactions-detail-modal .modal-header { background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(139, 92, 246, 0.1)); border-bottom: 2px solid var(--primary); }
+.interactions-detail-modal .modal-title { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
+.interactions-detail-modal .interaction-count { font-size: 12px; padding: 4px 10px; background: var(--bg-hover); border-radius: 10px; margin-left: auto; color: var(--text-muted); }
+
+.interactions-filters { display: flex; gap: 8px; margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--border); }
+.interactions-filters .filter-btn { display: flex; align-items: center; gap: 6px; padding: 8px 16px; background: var(--bg-hover); border: 1px solid var(--border); border-radius: 20px; font-size: 12px; cursor: pointer; transition: all 0.2s; color: var(--text-secondary); }
+.interactions-filters .filter-btn:hover { border-color: var(--primary); }
+.interactions-filters .filter-btn.active { background: var(--primary); color: white; border-color: var(--primary); }
+
+.all-interactions-list { display: flex; flex-direction: column; gap: 12px; max-height: 500px; overflow-y: auto; }
+.interaction-detail-item { display: flex; gap: 14px; padding: 16px; background: var(--bg-hover); border-radius: 12px; transition: all 0.2s; }
+.interaction-detail-item:hover { background: rgba(99, 102, 241, 0.05); }
+.interaction-detail-avatar { width: 44px; height: 44px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 16px; font-weight: 600; flex-shrink: 0; }
+.interaction-detail-avatar.reply { background: rgba(16, 185, 129, 0.2); color: var(--success); }
+.interaction-detail-avatar.open { background: rgba(99, 102, 241, 0.2); color: var(--primary); }
+.interaction-detail-avatar.click { background: rgba(245, 158, 11, 0.2); color: var(--warning); }
+.interaction-detail-content { flex: 1; }
+.interaction-detail-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px; }
+.interaction-detail-name { font-size: 14px; font-weight: 600; margin-right: 8px; }
+.interaction-detail-company { font-size: 12px; color: var(--text-muted); }
+.interaction-detail-time { font-size: 11px; color: var(--text-muted); }
+.interaction-detail-action { display: flex; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
+.action-badge { display: flex; align-items: center; gap: 4px; padding: 3px 10px; border-radius: 12px; font-size: 11px; }
+.action-badge.reply { background: rgba(16, 185, 129, 0.2); color: var(--success); }
+.action-badge.open { background: rgba(99, 102, 241, 0.2); color: var(--primary); }
+.action-badge.click { background: rgba(245, 158, 11, 0.2); color: var(--warning); }
+.interaction-detail-text { font-size: 13px; color: var(--text-secondary); margin-bottom: 8px; line-height: 1.5; }
+.interaction-detail-contact { display: flex; gap: 16px; font-size: 11px; color: var(--text-muted); }
+.interaction-detail-contact i { margin-right: 4px; }
+.interaction-detail-actions { display: flex; flex-direction: column; gap: 8px; justify-content: center; }
+
+/* ===== Create Campaign Modal Optimization ===== */
+.create-modal { max-width: 850px; max-height: 85vh; }
+.create-modal .modal-header { background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(139, 92, 246, 0.1)); border-bottom: 2px solid var(--primary); }
+.create-modal .modal-title { font-size: 18px; font-weight: 700; display: flex; align-items: center; gap: 10px; color: var(--primary); }
+.create-modal .modal-title i { font-size: 20px; }
+
+/* Step Indicator Enhancement */
+.step-indicator { display: flex; align-items: center; justify-content: center; margin-bottom: 28px; gap: 0; }
+.step { display: flex; flex-direction: column; align-items: center; position: relative; flex: 1; }
+.step-number { width: 36px; height: 36px; border-radius: 50%; background: var(--bg-hover); display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 600; color: var(--text-muted); border: 2px solid var(--border); transition: all 0.3s; }
+.step.active .step-number { background: var(--primary); color: white; border-color: var(--primary); box-shadow: 0 0 12px rgba(99, 102, 241, 0.3); }
+.step.completed .step-number { background: var(--success); color: white; border-color: var(--success); }
+.step-label { font-size: 11px; margin-top: 6px; color: var(--text-muted); text-align: center; }
+.step.active .step-label { color: var(--primary); font-weight: 600; }
+.step-line { flex: 1; height: 2px; background: var(--border); margin: 0 -8px; position: relative; top: -18px; }
+.step-line.active { background: var(--primary); }
+
+/* Step Content Enhancement */
+.step-content { animation: fadeIn 0.3s ease-in; }
+@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
+.step-content h4 { font-size: 16px; font-weight: 600; margin-bottom: 18px; display: flex; align-items: center; gap: 8px; color: var(--text-primary); }
+.step-content h4 i { color: var(--primary); font-size: 18px; }
+
+/* Form Enhancement */
+.form-group { margin-bottom: 16px; }
+.form-label { display: block; font-size: 13px; font-weight: 500; color: var(--text-primary); margin-bottom: 8px; }
+.form-input, .form-select, .form-textarea { width: 100%; padding: 10px 14px; background: var(--bg-dark); border: 1px solid var(--border); border-radius: 8px; color: var(--text-primary); font-size: 13px; transition: all 0.2s; }
+.form-input:focus, .form-select:focus, .form-textarea:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 8px rgba(99, 102, 241, 0.2); background: var(--bg-card); }
+.form-hint { font-size: 11px; color: var(--text-muted); margin-top: 4px; font-style: italic; }
+.required { color: var(--danger); }
+
+/* Goal Inputs Enhancement */
+.goal-inputs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
+.goal-item { display: flex; align-items: center; gap: 8px; padding: 12px; background: var(--bg-hover); border-radius: 10px; border: 1px solid var(--border); transition: all 0.2s; }
+.goal-item:hover { border-color: var(--primary); background: rgba(99, 102, 241, 0.05); }
+.goal-item i { color: var(--primary); font-size: 16px; flex-shrink: 0; }
+.goal-input { width: 50px; padding: 6px; background: var(--bg-dark); border: 1px solid var(--border); border-radius: 6px; color: var(--text-primary); font-size: 12px; text-align: center; }
+.goal-item span { font-size: 11px; color: var(--text-secondary); }
+
+/* AI Suggest Section Enhancement */
+.ai-suggest-section { margin-top: 16px; padding: 14px; background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(139, 92, 246, 0.1)); border: 1px solid rgba(99, 102, 241, 0.2); border-radius: 10px; }
+.ai-suggest-section h5 { font-size: 13px; margin-bottom: 10px; display: flex; align-items: center; gap: 6px; color: var(--primary); font-weight: 600; }
+.ai-suggestions { display: flex; gap: 10px; }
+.ai-suggestion { display: flex; align-items: center; gap: 6px; padding: 8px 14px; background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; font-size: 12px; cursor: pointer; transition: all 0.2s; flex: 1; }
+.ai-suggestion:hover { border-color: var(--primary); background: rgba(99, 102, 241, 0.1); }
+.ai-suggestion i { color: var(--primary); }
+
+/* ===== Reply Review Modal Optimization ===== */
+.detail-modal { max-width: 750px; max-height: 85vh; }
+.detail-modal .modal-header { background: linear-gradient(135deg, rgba(16, 185, 129, 0.1), rgba(99, 102, 241, 0.1)); border-bottom: 2px solid var(--success); }
+.detail-modal .modal-title { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 8px; }
+
+/* Review Stats Enhancement */
+.review-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 20px; }
+.stat-box { padding: 14px; background: var(--bg-hover); border-radius: 10px; border-left: 3px solid var(--primary); text-align: center; transition: all 0.2s; }
+.stat-box:hover { background: rgba(99, 102, 241, 0.05); border-left-color: var(--success); }
+.stat-label { font-size: 11px; color: var(--text-muted); margin-bottom: 6px; display: block; }
+.stat-value { font-size: 24px; font-weight: 700; color: var(--primary); }
+
+/* Replies List Enhancement */
+.replies-list { display: flex; flex-direction: column; gap: 12px; max-height: 400px; overflow-y: auto; }
+.reply-item { padding: 14px; background: var(--bg-hover); border-radius: 10px; border-left: 3px solid var(--border); transition: all 0.2s; }
+.reply-item:hover { background: rgba(99, 102, 241, 0.05); border-left-color: var(--primary); }
+.reply-item.pending-review { border-left-color: var(--warning); background: rgba(245, 158, 11, 0.05); }
+.reply-item.approved { border-left-color: var(--success); opacity: 0.9; }
+.reply-item.rejected { border-left-color: var(--danger); opacity: 0.7; }
+
+/* Reply Header Enhancement */
+.reply-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 10px; }
+.reply-info { flex: 1; }
+.reply-name { font-size: 14px; font-weight: 600; margin-bottom: 2px; display: flex; align-items: center; gap: 6px; }
+.review-required-badge { font-size: 10px; padding: 2px 8px; background: rgba(245, 158, 11, 0.2); color: var(--warning); border-radius: 10px; font-weight: normal; }
+.reply-email { font-size: 12px; color: var(--text-muted); }
+.reply-badges { display: flex; gap: 8px; flex-wrap: wrap; }
+.sentiment-badge { font-size: 11px; padding: 3px 8px; border-radius: 10px; }
+.priority-badge { font-size: 11px; padding: 3px 8px; border-radius: 10px; }
+.priority-badge.高 { background: rgba(239, 68, 68, 0.2); color: var(--danger); }
+.priority-badge.中 { background: rgba(245, 158, 11, 0.2); color: var(--warning); }
+.priority-badge.低 { background: rgba(107, 114, 128, 0.2); color: var(--text-muted); }
+
+/* Reply Content Enhancement */
+.reply-content { padding: 10px; background: var(--bg-dark); border-radius: 8px; margin-bottom: 10px; font-size: 13px; color: var(--text-secondary); line-height: 1.5; }
+.reply-actions { display: flex; gap: 8px; flex-wrap: wrap; }
+.reply-status { display: flex; flex-direction: column; gap: 6px; }
+
+/* ===== Modal Footer Enhancement ===== */
+.modal-footer { display: flex; justify-content: flex-end; gap: 12px; padding: 16px 20px; border-top: 1px solid var(--border); background: var(--bg-hover); }
+
+/* ===== Button Styles ===== */
+.btn { padding: 10px 16px; border-radius: 8px; border: none; font-size: 13px; font-weight: 500; cursor: pointer; transition: all 0.2s; display: inline-flex; align-items: center; gap: 6px; }
+.btn-primary { background: var(--primary); color: white; }
+.btn-primary:hover { background: #5B5FDE; box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3); }
+.btn-secondary { background: var(--bg-hover); color: var(--text-primary); border: 1px solid var(--border); }
+.btn-secondary:hover { background: rgba(99, 102, 241, 0.1); border-color: var(--primary); }
+.btn-sm { padding: 6px 12px; font-size: 12px; }
+
+/* Customers & Replies List */
+.filter-bar { display: flex; gap: 8px; margin-bottom: 16px; }
+.filter-btn { padding: 6px 12px; background: var(--bg-hover); border: 1px solid var(--border); border-radius: 6px; cursor: pointer; font-size: 12px; color: var(--text-secondary); transition: all 0.2s; }
+.filter-btn.active { background: var(--primary); color: white; border-color: var(--primary); }
+.filter-btn:hover { background: rgba(99, 102, 241, 0.1); }
+
+.customers-list { display: flex; flex-direction: column; gap: 12px; }
+.customer-item { padding: 14px; background: var(--bg-hover); border-radius: 10px; border-left: 3px solid var(--border); transition: all 0.2s; }
+.customer-item.protected { border-left-color: var(--success); background: rgba(16, 185, 129, 0.05); }
+.customer-item .customer-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 10px; }
+.customer-item .customer-info { flex: 1; }
+.customer-item .customer-name { font-size: 14px; font-weight: 600; margin-bottom: 2px; display: flex; align-items: center; gap: 8px; }
+.customer-item .protection-badge { font-size: 10px; padding: 2px 8px; background: rgba(16, 185, 129, 0.2); color: var(--success); border-radius: 10px; font-weight: normal; }
+.customer-item .customer-email { font-size: 12px; color: var(--text-muted); }
+.customer-item .customer-badges { display: flex; gap: 8px; }
+.customer-item .value-badge { font-size: 11px; padding: 4px 10px; border-radius: 10px; }
+.customer-item .value-badge.高价值 { background: rgba(239, 68, 68, 0.2); color: #EF4444; }
+.customer-item .value-badge.中价值 { background: rgba(245, 158, 11, 0.2); color: #F59E0B; }
+.customer-item .value-badge.低价值 { background: rgba(107, 114, 128, 0.2); color: #6B7280; }
+.customer-item .engagement-badge { font-size: 11px; padding: 4px 10px; border-radius: 10px; }
+.customer-item .customer-details { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; margin-bottom: 10px; font-size: 12px; }
+.customer-item .detail-item { display: flex; justify-content: space-between; padding: 6px 8px; background: var(--bg-dark); border-radius: 6px; }
+.customer-item .detail-item .label { color: var(--text-muted); }
+.customer-item .detail-item .value { font-weight: 600; }
+.customer-item .customer-stats { display: flex; gap: 16px; font-size: 12px; color: var(--text-secondary); margin-bottom: 10px; }
+.customer-item .customer-actions { display: flex; gap: 8px; flex-wrap: wrap; }
+
+.replies-list { display: flex; flex-direction: column; gap: 12px; }
+.reply-item { padding: 14px; background: var(--bg-hover); border-radius: 10px; border-left: 3px solid var(--border); transition: all 0.2s; }
+.reply-item.pending-review { border-left-color: var(--warning); }
+.reply-item.approved { border-left-color: var(--success); opacity: 0.9; }
+.reply-item.rejected { border-left-color: #EF4444; opacity: 0.7; }
+.reply-item.assigned { border-left-color: var(--primary); }
+.reply-item.requires-review { background: rgba(245, 158, 11, 0.05); }
+.reply-item .reply-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px; }
+.reply-item .reply-info { flex: 1; }
+.reply-item .reply-name { font-size: 14px; font-weight: 600; margin-bottom: 2px; display: flex; align-items: center; gap: 8px; }
+.reply-item .review-required-badge { font-size: 10px; padding: 2px 8px; background: rgba(245, 158, 11, 0.2); color: #F59E0B; border-radius: 10px; font-weight: normal; }
+.reply-item .reply-email { font-size: 12px; color: var(--text-muted); }
+.reply-item .reply-badges { display: flex; gap: 8px; flex-wrap: wrap; }
+.reply-item .sentiment-badge { font-size: 11px; padding: 3px 8px; border-radius: 10px; }
+.reply-item .priority-badge { font-size: 11px; padding: 3px 8px; border-radius: 10px; }
+.reply-item .priority-badge.high { background: rgba(239, 68, 68, 0.2); color: #EF4444; }
+.reply-item .priority-badge.medium { background: rgba(245, 158, 11, 0.2); color: #F59E0B; }
+.reply-item .priority-badge.low { background: rgba(107, 114, 128, 0.2); color: #6B7280; }
+.reply-item .reply-customer-info { display: flex; gap: 16px; font-size: 11px; color: var(--text-muted); margin-bottom: 6px; }
+.reply-item .reply-time { font-size: 11px; color: var(--text-muted); margin-bottom: 8px; }
+.reply-item .reply-content { padding: 10px; background: var(--bg-dark); border-radius: 8px; margin-bottom: 10px; font-size: 13px; color: var(--text-secondary); line-height: 1.5; }
+.reply-item .reply-review-notes { display: flex; align-items: flex-start; gap: 8px; padding: 8px 10px; background: rgba(99, 102, 241, 0.1); border-radius: 6px; margin-bottom: 10px; font-size: 12px; color: var(--text-secondary); }
+.reply-item .reply-review-notes i { color: var(--primary); margin-top: 2px; flex-shrink: 0; }
+.reply-item .reply-actions { display: flex; gap: 8px; flex-wrap: wrap; }
+.reply-item .reply-status { display: flex; flex-direction: column; gap: 6px; }
+.reply-item .status-badge { font-size: 11px; padding: 4px 10px; border-radius: 10px; display: inline-block; width: fit-content; }
+.reply-item .status-badge.approved { background: rgba(16, 185, 129, 0.2); color: var(--success); }
+.reply-item .status-badge.rejected { background: rgba(239, 68, 68, 0.2); color: #EF4444; }
+.reply-item .status-badge.assigned { background: rgba(99, 102, 241, 0.2); color: var(--primary); }
+.reply-item .review-info { font-size: 10px; color: var(--text-muted); }
+
+/* Protected Customers */
+.protected-customers { display: flex; flex-direction: column; gap: 10px; }
+.protected-customer-item { padding: 12px; background: var(--bg-dark); border-radius: 8px; border-left: 3px solid var(--success); }
+.protected-customer-item .customer-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px; }
+.protected-customer-item .customer-info { flex: 1; }
+.protected-customer-item .customer-name { font-size: 14px; font-weight: 600; margin-bottom: 2px; display: flex; align-items: center; gap: 8px; }
+.protection-level { font-size: 10px; padding: 2px 8px; border-radius: 10px; margin-left: 8px; }
+.protection-level.高 { background: rgba(239, 68, 68, 0.2); color: #EF4444; }
+.protection-level.中 { background: rgba(245, 158, 11, 0.2); color: #F59E0B; }
+.protected-customer-item .customer-email { font-size: 12px; color: var(--text-muted); }
+.customer-meta { display: flex; gap: 12px; font-size: 11px; color: var(--text-muted); }
+.meta-item { display: flex; align-items: center; gap: 4px; }
+.protected-customer-item .customer-details { display: flex; gap: 12px; font-size: 11px; color: var(--text-muted); margin-bottom: 8px; }
+.detail { display: flex; align-items: center; gap: 4px; }
+.protected-customer-item .customer-actions { display: flex; gap: 8px; }
+
+/* Intervention Options */
+.tabs-section { display: flex; gap: 12px; margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--border); }
+.tabs-section .tab-item { padding: 6px 12px; font-size: 13px; color: var(--text-secondary); cursor: pointer; border-radius: 6px; display: flex; align-items: center; gap: 6px; }
+.tabs-section .tab-item.active { background: var(--bg-hover); color: var(--text-primary); font-weight: 600; }
+
+.intervention-options { display: flex; flex-direction: column; gap: 10px; }
+.intervention-options .option-item { display: flex; align-items: flex-start; gap: 12px; padding: 12px; background: var(--bg-dark); border-radius: 10px; cursor: pointer; transition: all 0.2s; border: 1px solid var(--border); }
+.intervention-options .option-item:hover { background: rgba(99, 102, 241, 0.1); border-color: var(--primary); }
+.intervention-options .option-item i { font-size: 20px; color: var(--primary); margin-top: 2px; flex-shrink: 0; }
+.intervention-options .option-title { font-size: 13px; font-weight: 600; margin-bottom: 2px; }
+.intervention-options .option-desc { font-size: 11px; color: var(--text-muted); }
+
+.interventions-list { display: flex; flex-direction: column; gap: 8px; }
+.interventions-list .intervention-item { padding: 12px; background: var(--bg-dark); border-radius: 8px; border-left: 3px solid var(--primary); }
+.interventions-list .intervention-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
+.interventions-list .intervention-type { font-size: 13px; font-weight: 600; }
+.interventions-list .intervention-status { font-size: 10px; padding: 2px 8px; border-radius: 10px; }
+.interventions-list .intervention-status.active { background: rgba(16, 185, 129, 0.2); color: var(--success); }
+.interventions-list .intervention-status.completed { background: rgba(107, 114, 128, 0.2); color: #6B7280; }
+.interventions-list .intervention-info { display: flex; flex-direction: column; gap: 6px; }
+.interventions-list .description { font-size: 12px; color: var(--text-secondary); margin: 0; }
+.interventions-list .meta { display: flex; flex-wrap: wrap; gap: 12px; font-size: 11px; color: var(--text-muted); }
+
+/* Info Grid */
+.info-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
+.info-item { display: flex; flex-direction: column; gap: 4px; padding: 12px; background: var(--bg-dark); border-radius: 8px; }
+.info-item .label { font-size: 11px; color: var(--text-muted); }
+.info-item .value { font-size: 14px; font-weight: 600; }
+
+
+.marketing-page { flex: 1; display: flex; flex-direction: column; padding: 24px; overflow-y: auto; background: var(--bg-dark); }
+.marketing-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 24px; }
+.header-left { display: flex; flex-direction: column; gap: 4px; }
+.data-title { font-size: 20px; font-weight: 600; }
+.header-desc { font-size: 13px; color: var(--text-secondary); }
+.header-actions { display: flex; gap: 8px; }
+
+.stats-row { display: grid; grid-template-columns: repeat(5, 1fr); gap: 16px; margin-bottom: 24px; }
+.stat-card-lg { display: flex; align-items: center; gap: 14px; padding: 18px; background: var(--bg-card); border-radius: 14px; border: 1px solid var(--border); }
+.stat-icon-lg { width: 48px; height: 48px; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 20px; }
+.stat-icon-lg.blue { background: rgba(99, 102, 241, 0.2); color: var(--primary); }
+.stat-icon-lg.green { background: rgba(16, 185, 129, 0.2); color: var(--success); }
+.stat-icon-lg.purple { background: rgba(139, 92, 246, 0.2); color: var(--secondary); }
+.stat-icon-lg.orange { background: rgba(245, 158, 11, 0.2); color: var(--warning); }
+.stat-icon-lg.success { background: rgba(16, 185, 129, 0.2); color: var(--success); }
+.stat-content-lg h3 { font-size: 24px; font-weight: 700; }
+.stat-content-lg p { font-size: 12px; color: var(--text-secondary); }
+
+.tabs-row { display: flex; justify-content: space-between; margin-bottom: 20px; padding-bottom: 12px; border-bottom: 1px solid var(--border); }
+.tabs { display: flex; gap: 4px; }
+.tab-item { padding: 8px 16px; border-radius: 8px; cursor: pointer; font-size: 13px; color: var(--text-secondary); display: flex; align-items: center; gap: 6px; }
+.tab-item:hover { background: var(--bg-hover); }
+.tab-item.active { background: var(--bg-hover); color: var(--text-primary); font-weight: 600; }
+.tab-count { font-size: 11px; padding: 2px 6px; background: var(--bg-dark); border-radius: 10px; }
+.tab-item.active .tab-count { background: var(--primary); color: white; }
+
+.campaigns-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }
+.campaign-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 14px; padding: 20px; cursor: pointer; transition: all 0.2s; }
+.campaign-card:hover { border-color: var(--primary); transform: translateY(-2px); }
+.card-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 12px; }
+.card-icon { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 16px; }
+.status-badge { font-size: 10px; padding: 3px 8px; border-radius: 10px; }
+.status-badge.active { background: rgba(16, 185, 129, 0.2); color: var(--success); }
+.status-badge.paused { background: rgba(245, 158, 11, 0.2); color: var(--warning); }
+.card-title { font-size: 15px; font-weight: 600; margin-bottom: 6px; }
+.card-desc { font-size: 12px; color: var(--text-secondary); margin-bottom: 12px; }
+.card-channels { display: flex; gap: 6px; margin-bottom: 12px; }
+.channel-tag { display: flex; align-items: center; gap: 4px; font-size: 11px; padding: 4px 10px; background: var(--bg-hover); border-radius: 12px; color: var(--text-secondary); }
+.card-stats { display: flex; gap: 20px; margin-bottom: 12px; padding: 12px; background: var(--bg-hover); border-radius: 8px; }
+.stat-item { text-align: center; }
+.stat-item .stat-value { font-size: 18px; font-weight: 700; display: block; }
+.stat-item .stat-value.success { color: var(--success); }
+.stat-item .stat-value.primary { color: var(--primary); }
+.stat-item .stat-label { font-size: 11px; color: var(--text-muted); }
+.card-progress { margin-bottom: 12px; }
+.progress-header { display: flex; justify-content: space-between; font-size: 11px; margin-bottom: 6px; }
+.progress-bar { height: 4px; background: var(--bg-dark); border-radius: 2px; overflow: hidden; }
+.progress-fill { height: 100%; background: var(--primary); border-radius: 2px; }
+.card-actions { display: flex; gap: 8px; }
+
+/* Modal */
+.modal-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.7); display: flex; align-items: center; justify-content: center; z-index: 1000; padding: 20px; }
+.modal { background: var(--bg-card); border-radius: 16px; width: 100%; max-width: 700px; max-height: 90vh; overflow: hidden; display: flex; flex-direction: column; }
+.create-modal, .ai-modal { max-width: 800px; }
+.detail-modal { max-width: 750px; }
+.modal-header { display: flex; justify-content: space-between; align-items: center; padding: 20px; border-bottom: 1px solid var(--border); }
+.modal-title { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 8px; }
+.modal-close { width: 32px; height: 32px; background: var(--bg-hover); border: none; border-radius: 8px; color: var(--text-secondary); cursor: pointer; display: flex; align-items: center; justify-content: center; }
+.modal-body { flex: 1; overflow-y: auto; padding: 20px; }
+.modal-footer { display: flex; justify-content: flex-end; gap: 12px; padding: 20px; border-top: 1px solid var(--border); }
+
+/* Detail Section */
+.detail-section { margin-bottom: 20px; }
+.detail-section h5 { font-size: 14px; font-weight: 600; margin-bottom: 12px; color: var(--text-primary); }
+
+/* Step Indicator */
+.step-indicator { display: flex; align-items: center; justify-content: center; margin-bottom: 24px; }
+.step { display: flex; flex-direction: column; align-items: center; }
+.step-number { width: 28px; height: 28px; border-radius: 50%; background: var(--bg-hover); display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 600; color: var(--text-muted); }
+.step.active .step-number { background: var(--primary); color: white; }
+.step.completed .step-number { background: var(--success); color: white; }
+.step-label { font-size: 11px; margin-top: 4px; color: var(--text-muted); }
+.step.active .step-label { color: var(--text-primary); font-weight: 500; }
+.step-line { width: 40px; height: 2px; background: var(--border); }
+.step-line.active { background: var(--primary); }
+
+.step-content h4 { font-size: 14px; font-weight: 600; margin-bottom: 16px; display: flex; align-items: center; gap: 8px; }
+.step-content h4 i { color: var(--primary); }
+
+/* Forms */
+.form-group { margin-bottom: 16px; }
+.form-label { display: block; font-size: 12px; color: var(--text-secondary); margin-bottom: 6px; }
+.form-hint { font-size: 11px; color: var(--text-muted); margin-top: 4px; font-style: italic; }
+.form-input, .form-select, .form-textarea { width: 100%; padding: 10px 14px; background: var(--bg-dark); border: 1px solid var(--border); border-radius: 8px; color: var(--text-primary); font-size: 13px; }
+.form-input:focus, .form-select:focus, .form-textarea:focus { outline: none; border-color: var(--primary); }
+.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
+.required { color: var(--danger); }
+
+/* Goal Inputs */
+.goal-inputs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
+.goal-item { display: flex; align-items: center; gap: 8px; padding: 12px; background: var(--bg-hover); border-radius: 10px; }
+.goal-item i { color: var(--primary); font-size: 16px; }
+.goal-input { width: 70px; padding: 8px; background: var(--bg-dark); border: 1px solid var(--border); border-radius: 6px; color: var(--text-primary); font-size: 14px; text-align: center; }
+.goal-item span { font-size: 11px; color: var(--text-secondary); }
+
+/* AI Suggest */
+.ai-suggest-section { margin-top: 16px; padding: 14px; background: rgba(99, 102, 241, 0.1); border: 1px solid rgba(99, 102, 241, 0.2); border-radius: 10px; }
+.ai-suggest-section h5 { font-size: 13px; margin-bottom: 10px; display: flex; align-items: center; gap: 6px; color: var(--primary); }
+.ai-suggestions { display: flex; gap: 10px; }
+.ai-suggestion { display: flex; align-items: center; gap: 6px; padding: 8px 14px; background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; font-size: 12px; cursor: pointer; transition: all 0.2s; }
+.ai-suggestion:hover { border-color: var(--primary); background: rgba(99, 102, 241, 0.2); }
+.ai-suggestion i { color: var(--primary); }
+
+/* AI Recommend Tags */
+.ai-recommend-section { margin-bottom: 16px; padding: 14px; background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(139, 92, 246, 0.1)); border: 1px solid rgba(99, 102, 241, 0.2); border-radius: 10px; }
+.ai-recommend-header { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; font-size: 13px; font-weight: 600; color: var(--primary); }
+.ai-recommend-tags { display: flex; flex-wrap: wrap; gap: 8px; }
+.ai-tag { display: flex; align-items: center; gap: 6px; padding: 6px 14px; background: var(--bg-hover); border: 1px solid var(--border); border-radius: 20px; font-size: 12px; cursor: pointer; transition: all 0.2s; }
+.ai-tag:hover { border-color: var(--primary); }
+.ai-tag.active { background: var(--primary); border-color: var(--primary); color: white; }
+.ai-tag i { font-size: 11px; }
+
+/* Filter Header */
+.filter-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
+.filter-header h5 { margin: 0; }
+.btn-link { background: none; border: none; color: var(--primary); font-size: 12px; cursor: pointer; }
+
+/* Keyword Search */
+.keyword-search { display: flex; gap: 8px; }
+.keyword-search .form-input { flex: 1; }
+
+/* Selected Tags */
+.selected-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
+.selected-tag { display: flex; align-items: center; gap: 6px; padding: 4px 12px; background: rgba(99, 102, 241, 0.2); border-radius: 16px; font-size: 12px; color: var(--primary); }
+.selected-tag i { cursor: pointer; opacity: 0.7; }
+.selected-tag i:hover { opacity: 1; }
+
+/* Customer Source */
+.customer-source { margin-top: 16px; padding: 14px; background: var(--bg-hover); border-radius: 10px; }
+.customer-source h5 { font-size: 13px; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }
+.source-bars { display: flex; flex-direction: column; gap: 10px; }
+.source-item { display: flex; align-items: center; gap: 10px; }
+.source-label { width: 70px; font-size: 12px; color: var(--text-secondary); }
+.source-bar { flex: 1; height: 8px; background: var(--bg-dark); border-radius: 4px; overflow: hidden; }
+.source-fill { height: 100%; border-radius: 4px; }
+.source-value { width: 40px; font-size: 12px; text-align: right; }
+
+/* Segment Check */
+.segment-check { color: var(--primary); font-size: 18px; margin-left: auto; }
+
+/* Preview Count Button */
+.btn-outline { background: transparent; border: 1px solid var(--primary); color: var(--primary); }
+.btn-outline:hover { background: rgba(99, 102, 241, 0.1); }
+
+/* Segments */
+.quick-segments { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 20px; }
+.segment-option { display: flex; align-items: center; gap: 12px; padding: 14px; background: var(--bg-hover); border: 1px solid var(--border); border-radius: 10px; cursor: pointer; transition: all 0.2s; }
+.segment-option:hover { border-color: var(--primary); }
+.segment-option.selected { border-color: var(--primary); background: rgba(99, 102, 241, 0.1); }
+.segment-option i { font-size: 20px; color: var(--primary); }
+.segment-name { font-size: 13px; font-weight: 600; }
+.segment-count { font-size: 11px; color: var(--text-secondary); }
+
+.advanced-filters { margin-bottom: 20px; }
+.advanced-filters h5 { font-size: 13px; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }
+.filter-row { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
+
+.preview-count { display: flex; align-items: center; gap: 12px; padding: 16px; background: rgba(99, 102, 241, 0.1); border: 1px solid rgba(99, 102, 241, 0.2); border-radius: 10px; }
+.preview-count i { font-size: 24px; color: var(--primary); }
+.count-value { font-size: 14px; }
+.count-detail { font-size: 12px; color: var(--text-secondary); }
+
+/* Channels */
+.channel-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; margin-bottom: 20px; }
+.channel-card { display: flex; align-items: center; gap: 12px; padding: 16px; background: var(--bg-hover); border: 1px solid var(--border); border-radius: 10px; cursor: pointer; transition: all 0.2s; }
+.channel-card:hover { border-color: var(--primary); }
+.channel-card.selected { border-color: var(--primary); background: rgba(99, 102, 241, 0.1); }
+.channel-card.disabled { opacity: 0.5; cursor: not-allowed; }
+.channel-icon { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 18px; }
+.channel-name { font-size: 14px; font-weight: 600; }
+.channel-desc { font-size: 11px; color: var(--text-secondary); }
+.channel-check { color: var(--primary); font-size: 18px; }
+.channel-settings h5 { font-size: 13px; margin-bottom: 12px; }
+
+/* SOP & Rules */
+.sop-section { margin-bottom: 20px; }
+.sop-section h5 { font-size: 13px; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }
+.sop-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
+.sop-card { display: flex; align-items: center; gap: 10px; padding: 12px; background: var(--bg-hover); border: 1px solid var(--border); border-radius: 10px; cursor: pointer; }
+.sop-card.selected { border-color: var(--primary); background: rgba(99, 102, 241, 0.1); }
+.sop-icon { font-size: 24px; }
+.sop-name { font-size: 12px; font-weight: 600; }
+.sop-steps { font-size: 10px; color: var(--text-secondary); }
+
+.rules-section h5 { font-size: 13px; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }
+.rule-item { display: flex; gap: 12px; padding: 12px; background: var(--bg-hover); border-radius: 8px; margin-bottom: 8px; }
+.rule-toggle { width: 44px; height: 24px; background: var(--border); border-radius: 12px; position: relative; cursor: pointer; flex-shrink: 0; }
+.rule-toggle::after { content: ''; position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; background: white; border-radius: 50%; transition: all 0.2s; }
+.rule-toggle.active { background: var(--success); }
+.rule-toggle.active::after { left: 23px; }
+.rule-title { font-size: 13px; font-weight: 500; }
+.rule-desc { font-size: 11px; color: var(--text-secondary); }
+
+/* Preview */
+.preview-cards { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; margin-bottom: 20px; }
+.preview-card { display: flex; align-items: center; gap: 12px; padding: 14px; background: var(--bg-hover); border-radius: 10px; }
+.preview-icon { width: 40px; height: 40px; background: rgba(99, 102, 241, 0.2); border-radius: 10px; display: flex; align-items: center; justify-content: center; color: var(--primary); }
+.preview-label { font-size: 11px; color: var(--text-secondary); }
+.preview-value { font-size: 14px; font-weight: 600; }
+
+.estimated-impact { margin-bottom: 20px; }
+.estimated-impact h5 { font-size: 13px; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }
+.impact-metrics { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
+.impact-metric { background: var(--bg-hover); border-radius: 10px; padding: 14px; text-align: center; }
+.impact-metric .metric-value { font-size: 18px; font-weight: 700; }
+.impact-metric.highlight { background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.2); }
+.impact-metric.highlight .metric-value { color: var(--success); }
+.impact-metric .metric-label { font-size: 11px; color: var(--text-secondary); }
+
+.confirm-section { display: flex; flex-direction: column; gap: 10px; }
+.confirm-item { display: flex; align-items: center; gap: 10px; font-size: 13px; cursor: pointer; }
+.confirm-item input { width: 16px; height: 16px; }
+
+/* AI Generator */
+.ai-generator { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
+.generator-input h4, .generator-output h4 { font-size: 14px; font-weight: 600; margin-bottom: 16px; }
+.checkbox-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
+.checkbox-item { display: flex; align-items: center; gap: 6px; font-size: 12px; cursor: pointer; }
+.checkbox-item input { width: 14px; height: 14px; }
+.tone-options, .language-options { display: flex; flex-wrap: wrap; gap: 8px; }
+.tone-option, .language-option { padding: 6px 12px; background: var(--bg-hover); border-radius: 16px; font-size: 12px; cursor: pointer; }
+.tone-option.active, .language-option.active { background: var(--primary); color: white; }
+.btn-block { width: 100%; }
+
+.output-placeholder { text-align: center; padding: 60px 20px; color: var(--text-muted); }
+.output-placeholder i { font-size: 48px; margin-bottom: 16px; opacity: 0.5; }
+.email-preview { background: var(--bg-hover); border-radius: 10px; padding: 16px; }
+.email-field { margin-bottom: 12px; }
+.email-field label { font-size: 11px; color: var(--text-muted); display: block; margin-bottom: 4px; }
+.email-value { font-size: 13px; }
+.email-value.subject { font-weight: 600; color: var(--primary); }
+.email-body { font-size: 13px; line-height: 1.7; color: var(--text-secondary); }
+.email-stats { display: flex; gap: 16px; padding-top: 12px; border-top: 1px solid var(--border); font-size: 11px; color: var(--text-muted); }
+.email-stats .success { color: var(--success); }
+
+/* Templates */
+.templates-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }
+.template-card { background: var(--bg-hover); border-radius: 10px; padding: 16px; }
+.template-header { display: flex; justify-content: space-between; margin-bottom: 8px; }
+.template-type { font-size: 11px; padding: 2px 8px; background: rgba(99, 102, 241, 0.2); color: var(--primary); border-radius: 10px; }
+.template-lang { font-size: 11px; color: var(--text-muted); }
+.template-subject { font-size: 14px; font-weight: 600; margin-bottom: 8px; }
+.template-preview { font-size: 12px; color: var(--text-secondary); margin-bottom: 12px; }
+.template-stats { display: flex; gap: 16px; margin-bottom: 12px; font-size: 11px; color: var(--text-muted); }
+
+/* Campaign Detail Modal */
+.campaign-detail-modal { max-width: 800px; }
+.detail-status { margin-left: 12px; padding: 3px 10px; border-radius: 12px; font-size: 11px; font-weight: 500; }
+.detail-status.active { background: rgba(16, 185, 129, 0.2); color: var(--success); }
+.detail-status.paused { background: rgba(245, 158, 11, 0.2); color: var(--warning); }
+.detail-status.completed { background: rgba(99, 102, 241, 0.2); color: var(--primary); }
+
+.detail-section { margin-bottom: 20px; padding: 16px; background: var(--bg-hover); border-radius: 12px; }
+.section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; }
+.section-header h4 { font-size: 14px; font-weight: 600; display: flex; align-items: center; gap: 8px; margin: 0; }
+.section-header h4 i { color: var(--primary); }
+.progress-info { font-size: 12px; color: var(--primary); font-weight: 600; }
+
+.detail-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
+.detail-item { display: flex; flex-direction: column; gap: 4px; }
+.detail-item.full-width { grid-column: 1 / -1; }
+.detail-item label { font-size: 11px; color: var(--text-muted); }
+.detail-item span { font-size: 13px; color: var(--text-primary); }
+.priority-badge { display: inline-block; padding: 2px 10px; border-radius: 10px; font-size: 11px; }
+.priority-badge.urgent { background: rgba(239, 68, 68, 0.2); color: var(--danger); }
+.priority-badge.high { background: rgba(245, 158, 11, 0.2); color: var(--warning); }
+.priority-badge.medium { background: rgba(99, 102, 241, 0.2); color: var(--primary); }
+.priority-badge.low { background: rgba(107, 114, 128, 0.2); color: var(--text-muted); }
+
+.detail-progress-bar { height: 6px; background: var(--bg-dark); border-radius: 3px; margin-bottom: 16px; overflow: hidden; }
+.detail-progress-bar .progress-fill { height: 100%; background: linear-gradient(90deg, var(--primary), var(--success)); border-radius: 3px; }
+
+.metrics-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
+.metric-card { display: flex; align-items: center; gap: 14px; padding: 16px; background: var(--bg-card); border-radius: 14px; box-shadow: inset 0 0 0 1px rgba(255,255,255,0.03); }
+.metric-icon { width: 44px; height: 44px; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 18px; }
+.metric-icon.blue { background: rgba(99, 102, 241, 0.16); color: var(--primary); }
+.metric-icon.green { background: rgba(16, 185, 129, 0.16); color: var(--success); }
+.metric-icon.purple { background: rgba(139, 92, 246, 0.16); color: var(--secondary); }
+.metric-content .metric-value { font-size: 20px; font-weight: 700; }
+.metric-content .metric-label { font-size: 12px; color: var(--text-muted); }
+@media (max-width: 900px) {
+  .metrics-grid { grid-template-columns: repeat(2, 1fr); }
+}
+@media (max-width: 640px) {
+  .metrics-grid { grid-template-columns: 1fr; }
+}
+
+.channel-detail-list { display: flex; flex-direction: column; gap: 10px; }
+.channel-detail-item { display: flex; align-items: center; gap: 14px; padding: 14px; background: var(--bg-card); border-radius: 10px; }
+.channel-icon-wrapper { width: 44px; height: 44px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 18px; }
+.channel-detail-info { flex: 1; }
+.channel-detail-name { font-size: 14px; font-weight: 600; margin-bottom: 4px; }
+.channel-detail-stats { display: flex; gap: 16px; font-size: 11px; color: var(--text-muted); }
+.channel-status { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--success); }
+.status-dot { width: 8px; height: 8px; border-radius: 50%; }
+.status-dot.active { background: var(--success); }
+
+.target-info { display: flex; align-items: stretch; gap: 16px; flex-wrap: wrap; }
+.target-stat { flex: 1; min-width: 180px; text-align: center; padding: 18px; background: var(--bg-card); border-radius: 14px; box-shadow: inset 0 0 0 1px rgba(255,255,255,0.04); }
+.target-value { font-size: 26px; font-weight: 700; color: var(--text-primary); }
+.target-label { font-size: 12px; color: var(--text-muted); margin-top: 6px; }
+.target-breakdown { display: none; }
+.breakdown-item { display: none; }
+.breakdown-label { display: none; }
+.breakdown-value { display: none; }
+
+.sop-header-info { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }
+.sop-header-info .sop-name { font-size: 14px; font-weight: 600; }
+.sop-header-info .sop-steps { font-size: 11px; padding: 3px 10px; background: rgba(99, 102, 241, 0.2); color: var(--primary); border-radius: 10px; }
+.sop-timeline-detail { display: flex; flex-direction: column; gap: 8px; }
+.sop-step-item { display: flex; align-items: center; gap: 12px; padding: 12px; background: var(--bg-card); border-radius: 8px; border-left: 3px solid var(--border); }
+.sop-step-item.completed { border-left-color: var(--success); opacity: 0.8; }
+.sop-step-item.current { border-left-color: var(--primary); background: rgba(99, 102, 241, 0.1); }
+.sop-step-item.pending { border-left-color: var(--border); opacity: 0.6; }
+.sop-step-item .step-marker { width: 24px; height: 24px; border-radius: 50%; background: var(--bg-hover); display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 600; }
+.sop-step-item.completed .step-marker { background: var(--success); color: white; }
+.sop-step-item.current .step-marker { background: var(--primary); color: white; }
+.sop-step-item .step-content { flex: 1; }
+.sop-step-item .step-title { font-size: 13px; font-weight: 500; }
+.sop-step-item .step-meta { font-size: 11px; color: var(--text-muted); margin-top: 2px; }
+
+.interactions-list { display: flex; flex-direction: column; gap: 10px; }
+.interaction-item { display: flex; gap: 12px; padding: 12px; background: var(--bg-card); border-radius: 10px; }
+.interaction-avatar { width: 36px; height: 36px; border-radius: 50%; background: linear-gradient(135deg, var(--primary), var(--secondary)); display: flex; align-items: center; justify-content: center; color: white; font-size: 14px; font-weight: 600; }
+.interaction-content { flex: 1; }
+.interaction-header { display: flex; justify-content: space-between; margin-bottom: 4px; }
+.interaction-name { font-size: 13px; font-weight: 600; }
+.interaction-time { font-size: 11px; color: var(--text-muted); }
+.interaction-text { font-size: 12px; color: var(--text-secondary); margin-bottom: 6px; }
+.interaction-tags { display: flex; gap: 6px; }
+.interaction-tags .tag { padding: 2px 8px; border-radius: 10px; font-size: 10px; }
+.tag.reply { background: rgba(99, 102, 241, 0.2); color: var(--primary); }
+.tag.open { background: rgba(16, 185, 129, 0.2); color: var(--success); }
+.tag.click { background: rgba(245, 158, 11, 0.2); color: var(--warning); }
+.tag.interested { background: rgba(236, 72, 153, 0.2); color: #ec4899; }
+
+/* Toast */
+.toast { position: fixed; bottom: 24px; right: 24px; padding: 12px 20px; background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; display: flex; align-items: center; gap: 10px; font-size: 13px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); z-index: 2000; }
+.toast.success { border-color: var(--success); }
+.toast.success i { color: var(--success); }
+.toast-enter-active, .toast-leave-active { transition: all 0.3s ease; }
+.toast-enter-from, .toast-leave-to { opacity: 0; transform: translateY(20px); }
+
+/* Channel Priority AI */
+.channel-priority-ai { display: flex; align-items: center; gap: 12px; padding: 12px 16px; background: linear-gradient(135deg, rgba(16, 185, 129, 0.1), rgba(99, 102, 241, 0.1)); border: 1px solid rgba(16, 185, 129, 0.2); border-radius: 10px; margin-bottom: 16px; }
+.ai-badge { padding: 4px 10px; background: var(--primary); color: white; border-radius: 12px; font-size: 11px; font-weight: 600; display: flex; align-items: center; gap: 4px; }
+.priority-text { font-size: 13px; }
+.priority-text .highlight { color: var(--success); font-weight: 600; }
+.channel-stats-mini { font-size: 10px; color: var(--text-muted); margin-top: 4px; }
+.channel-stats-mini i { margin-right: 4px; }
+
+/* Subject Input Group */
+.subject-input-group { display: flex; gap: 8px; }
+.subject-input-group .form-input { flex: 1; }
+.subject-suggestions { margin-top: 8px; padding: 12px; background: var(--bg-hover); border-radius: 8px; }
+.suggestion-header { font-size: 11px; color: var(--text-muted); margin-bottom: 8px; }
+.suggestion-item { padding: 8px 12px; background: var(--bg-card); border-radius: 6px; margin-bottom: 6px; cursor: pointer; font-size: 12px; transition: all 0.2s; }
+.suggestion-item:hover { background: rgba(99, 102, 241, 0.1); border: 1px solid var(--primary); }
+
+/* Tracking Options */
+.tracking-options { display: flex; flex-wrap: wrap; gap: 16px; margin-top: 12px; }
+.toggle-option { display: flex; align-items: center; gap: 8px; font-size: 12px; cursor: pointer; }
+.toggle-option input { width: 14px; height: 14px; }
+.toggle-label { color: var(--text-secondary); }
+
+/* Channel Effect Prediction */
+.channel-effect-prediction { margin-top: 16px; padding: 14px; background: var(--bg-hover); border-radius: 10px; }
+.channel-effect-prediction h5 { font-size: 13px; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }
+.effect-metrics { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
+.effect-item { display: flex; align-items: center; gap: 10px; padding: 12px; background: var(--bg-card); border-radius: 8px; }
+.effect-item.highlight { background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.2); }
+.effect-icon { width: 36px; height: 36px; background: rgba(99, 102, 241, 0.2); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: var(--primary); }
+.effect-label { font-size: 11px; color: var(--text-secondary); }
+.effect-value { font-size: 16px; font-weight: 700; }
+
+/* SOP Preview */
+.sop-preview { margin-top: 12px; padding: 14px; background: var(--bg-hover); border-radius: 10px; }
+.sop-preview-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; font-size: 12px; }
+.sop-timeline { display: flex; flex-direction: column; gap: 8px; }
+.sop-step { display: flex; gap: 12px; }
+.sop-step-marker { width: 24px; height: 24px; background: var(--primary); color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 600; flex-shrink: 0; }
+.sop-step-content { flex: 1; padding: 8px 12px; background: var(--bg-card); border-radius: 6px; }
+.sop-step-title { font-size: 12px; font-weight: 500; }
+.sop-step-meta { display: flex; gap: 12px; margin-top: 4px; font-size: 10px; color: var(--text-muted); }
+.sop-card { position: relative; }
+.sop-check { position: absolute; right: 8px; top: 50%; transform: translateY(-50%); color: var(--primary); }
+.sop-desc { font-size: 10px; color: var(--text-muted); margin-top: 2px; }
+
+/* Rule Config */
+.rule-config { margin-left: auto; }
+.mini-select { padding: 4px 8px; background: var(--bg-dark); border: 1px solid var(--border); border-radius: 6px; color: var(--text-primary); font-size: 11px; }
+
+/* A/B Test Section */
+.ab-test-section { margin-bottom: 20px; padding: 14px; background: var(--bg-hover); border-radius: 10px; }
+.ab-test-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
+.ab-test-header h5 { margin: 0; display: flex; align-items: center; gap: 6px; font-size: 13px; }
+.ab-test-config { padding-top: 12px; border-top: 1px solid var(--border); }
+.ab-test-preview { margin-top: 12px; display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
+.ab-variant { padding: 12px; background: var(--bg-card); border-radius: 8px; }
+.variant-label { font-size: 11px; color: var(--primary); font-weight: 600; margin-bottom: 6px; display: block; }
+.variant-desc { font-size: 12px; }
+.variant-input { width: 100%; padding: 8px; background: var(--bg-dark); border: 1px solid var(--border); border-radius: 6px; color: var(--text-primary); font-size: 12px; }
+
+/* Smart Schedule */
+.smart-schedule-section { margin-bottom: 20px; }
+.smart-schedule-section h5 { font-size: 13px; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }
+.schedule-options { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
+.schedule-option { position: relative; cursor: pointer; }
+.schedule-option input { position: absolute; opacity: 0; }
+.schedule-option .option-content { padding: 14px; background: var(--bg-hover); border: 2px solid var(--border); border-radius: 10px; text-align: center; transition: all 0.2s; }
+.schedule-option.active .option-content { border-color: var(--primary); background: rgba(99, 102, 241, 0.1); }
+.option-title { font-size: 13px; font-weight: 600; margin-bottom: 4px; }
+.option-title i { margin-right: 6px; color: var(--primary); }
+.option-desc { font-size: 11px; color: var(--text-muted); }
+.schedule-time-config { margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--border); }
+
+/* Preview Section */
+.preview-section { margin-bottom: 20px; }
+.preview-section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
+.preview-section-header h5 { margin: 0; display: flex; align-items: center; gap: 6px; font-size: 13px; }
+.preview-channels { display: flex; flex-direction: column; gap: 10px; }
+.preview-channel-item { display: flex; align-items: center; gap: 12px; padding: 12px; background: var(--bg-hover); border-radius: 10px; }
+.channel-badge { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 18px; }
+.channel-details { flex: 1; }
+.channel-details .channel-name { font-size: 14px; font-weight: 600; }
+.channel-config { font-size: 11px; color: var(--text-muted); margin-top: 2px; }
+
+/* Preview Rules */
+.preview-rules { padding: 14px; background: var(--bg-hover); border-radius: 10px; }
+.rule-summary { display: flex; flex-wrap: wrap; gap: 8px; }
+.rule-badge { padding: 4px 12px; background: var(--bg-card); border-radius: 16px; font-size: 11px; color: var(--text-secondary); }
+.rule-badge.highlight { background: rgba(99, 102, 241, 0.2); color: var(--primary); }
+
+/* Priority Colors */
+.preview-value.priority-urgent { color: var(--danger); }
+.preview-value.priority-high { color: var(--warning); }
+.preview-value.priority-medium { color: var(--info); }
+.preview-value.priority-low { color: var(--text-muted); }
+.preview-value.highlight { color: var(--primary); font-weight: 700; }
+
+/* Impact Metric Enhanced */
+.impact-metric { position: relative; }
+.impact-metric .metric-icon { font-size: 18px; margin-bottom: 6px; opacity: 0.5; }
+.impact-metric .metric-rate { font-size: 10px; color: var(--text-muted); margin-top: 4px; }
+
+/* Warning Section */
+.warning-section { margin-bottom: 16px; padding: 14px; background: rgba(245, 158, 11, 0.1); border: 1px solid rgba(245, 158, 11, 0.2); border-radius: 10px; }
+.warning-section h5 { font-size: 13px; margin-bottom: 10px; color: var(--warning); display: flex; align-items: center; gap: 6px; }
+.warning-list { display: flex; flex-direction: column; gap: 8px; }
+.warning-item { display: flex; align-items: center; gap: 8px; font-size: 12px; }
+.warning-item i { color: var(--warning); }
+
+/* Confirm Section Enhanced */
+.confirm-section { padding: 14px; background: var(--bg-hover); border-radius: 10px; }
+.confirm-section h5 { font-size: 13px; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }
+.confirm-item { position: relative; padding-left: 28px; }
+.confirm-item .checkmark { position: absolute; left: 0; width: 18px; height: 18px; border: 2px solid var(--border); border-radius: 4px; }
+.confirm-item input:checked + .checkmark { background: var(--success); border-color: var(--success); }
+.confirm-item input:checked + .checkmark::after { content: '✓'; position: absolute; color: white; font-size: 12px; top: 50%; left: 50%; transform: translate(-50%, -50%); }
+
+@media (max-width: 1200px) {
+  .stats-row { grid-template-columns: repeat(3, 1fr); }
+  .campaigns-grid { grid-template-columns: 1fr; }
+  .quick-segments { grid-template-columns: repeat(2, 1fr); }
+  .schedule-options { grid-template-columns: 1fr; }
+  .impact-metrics { grid-template-columns: repeat(3, 1fr); }
+  .goal-inputs { grid-template-columns: repeat(2, 1fr); }
+}
+
+/* History Modal */
+.history-modal { max-width: 900px; }
+.history-filters { display: flex; gap: 12px; margin-bottom: 16px; }
+.history-filters .search-box { flex: 1; display: flex; align-items: center; gap: 8px; padding: 8px 14px; background: var(--bg-hover); border-radius: 8px; }
+.history-filters .search-box input { flex: 1; background: transparent; border: none; color: var(--text-primary); font-size: 13px; outline: none; }
+.filter-group { display: flex; gap: 8px; }
+.filter-select { padding: 8px 12px; background: var(--bg-hover); border: 1px solid var(--border); border-radius: 8px; color: var(--text-primary); font-size: 12px; }
+
+.history-stats { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; margin-bottom: 20px; }
+.history-stat { padding: 14px; background: var(--bg-hover); border-radius: 10px; text-align: center; }
+.history-stat .stat-value { font-size: 20px; font-weight: 700; color: var(--text-primary); }
+.history-stat .stat-label { font-size: 11px; color: var(--text-muted); margin-top: 4px; }
+.history-stat.highlight { background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.2); }
+.history-stat.highlight .stat-value { color: var(--success); }
+
+.history-list { display: flex; flex-direction: column; gap: 12px; max-height: 400px; overflow-y: auto; }
+.history-item { background: var(--bg-hover); border-radius: 12px; padding: 16px; }
+.history-item-header { display: flex; align-items: center; gap: 14px; margin-bottom: 12px; }
+.history-item-icon { width: 44px; height: 44px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 18px; }
+.history-item-info { flex: 1; }
+.history-item-name { font-size: 14px; font-weight: 600; margin-bottom: 4px; }
+.history-item-meta { display: flex; gap: 12px; font-size: 11px; color: var(--text-muted); }
+.history-item-meta .status-tag { padding: 2px 8px; border-radius: 10px; }
+.history-item-meta .status-tag.completed { background: rgba(16, 185, 129, 0.2); color: var(--success); }
+.history-item-meta .status-tag.paused { background: rgba(245, 158, 11, 0.2); color: var(--warning); }
+.history-item-actions { display: flex; gap: 6px; }
+.btn-icon { width: 32px; height: 32px; background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; color: var(--text-secondary); cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.2s; }
+.btn-icon:hover { background: var(--primary); border-color: var(--primary); color: white; }
+
+.history-item-stats { display: flex; gap: 16px; padding: 12px; background: var(--bg-card); border-radius: 8px; }
+.mini-stat { display: flex; align-items: center; gap: 6px; }
+.mini-stat i { color: var(--primary); font-size: 12px; }
+.mini-stat .value { font-weight: 600; font-size: 13px; }
+.mini-stat .label { font-size: 10px; color: var(--text-muted); }
+.mini-stat.highlight i { color: var(--success); }
+.mini-stat.highlight .value { color: var(--success); }
+
+.history-item-channels { display: flex; gap: 6px; margin-top: 10px; }
+.channel-mini-tag { display: flex; align-items: center; gap: 4px; padding: 3px 10px; background: var(--bg-card); border-radius: 12px; font-size: 11px; color: var(--text-secondary); }
+
+.empty-state { text-align: center; padding: 40px 20px; color: var(--text-muted); }
+.empty-state i { font-size: 48px; margin-bottom: 16px; opacity: 0.5; }
+.empty-state p { font-size: 14px; }
+
+/* Templates Modal */
+.templates-modal { max-width: 900px; }
+.template-tabs { display: flex; gap: 8px; margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--border); }
+.template-tab { display: flex; align-items: center; gap: 6px; padding: 8px 16px; background: var(--bg-hover); border-radius: 20px; font-size: 13px; cursor: pointer; transition: all 0.2s; }
+.template-tab:hover { background: rgba(99, 102, 241, 0.1); }
+.template-tab.active { background: var(--primary); color: white; }
+.template-tab i { font-size: 12px; }
+
+.templates-toolbar { display: flex; gap: 12px; margin-bottom: 12px; }
+.templates-toolbar .search-box { flex: 1; display: flex; align-items: center; gap: 8px; padding: 8px 14px; background: var(--bg-hover); border-radius: 8px; }
+.templates-toolbar .search-box input { flex: 1; background: transparent; border: none; color: var(--text-primary); font-size: 13px; outline: none; }
+.sort-select { padding: 8px 12px; background: var(--bg-hover); border: 1px solid var(--border); border-radius: 8px; color: var(--text-primary); font-size: 12px; }
+
+.templates-stats { font-size: 12px; color: var(--text-muted); margin-bottom: 16px; }
+.templates-stats .divider { margin: 0 8px; }
+
+.templates-grid-enhanced { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin-bottom: 20px; }
+.template-card-enhanced { background: var(--bg-hover); border-radius: 12px; padding: 16px; transition: all 0.2s; }
+.template-card-enhanced:hover { background: rgba(99, 102, 241, 0.05); }
+.template-card-header { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
+.template-type-badge { display: flex; align-items: center; gap: 4px; padding: 3px 10px; border-radius: 12px; font-size: 11px; font-weight: 500; }
+.template-type-badge.email { background: rgba(99, 102, 241, 0.2); color: var(--primary); }
+.template-type-badge.whatsapp { background: rgba(37, 211, 102, 0.2); color: #25D366; }
+.template-type-badge.linkedin { background: rgba(10, 102, 194, 0.2); color: #0A66C2; }
+.template-lang-badge { font-size: 10px; color: var(--text-muted); }
+.btn-favorite { margin-left: auto; background: none; border: none; color: var(--text-muted); cursor: pointer; font-size: 14px; transition: color 0.2s; }
+.btn-favorite:hover { color: var(--warning); }
+.btn-favorite.active { color: var(--warning); }
+
+.template-subject-enhanced { font-size: 14px; font-weight: 600; margin-bottom: 6px; }
+.template-preview-enhanced { font-size: 12px; color: var(--text-muted); margin-bottom: 10px; line-height: 1.5; }
+.template-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }
+.template-tag { padding: 2px 8px; background: var(--bg-card); border-radius: 10px; font-size: 10px; color: var(--text-secondary); }
+
+.template-stats-enhanced { display: flex; gap: 12px; margin-bottom: 12px; padding-top: 10px; border-top: 1px solid var(--border); }
+.template-stat { display: flex; flex-direction: column; align-items: center; }
+.template-stat i { font-size: 12px; color: var(--primary); margin-bottom: 4px; }
+.template-stat .stat-value { font-size: 14px; font-weight: 600; }
+.template-stat .stat-label { font-size: 10px; color: var(--text-muted); }
+
+.template-actions { display: flex; gap: 8px; }
+
+/* AI Template Section */
+.ai-template-section { padding: 14px; background: linear-gradient(135deg, rgba(99, 102, 241, 0.1), rgba(139, 92, 246, 0.1)); border: 1px solid rgba(99, 102, 241, 0.2); border-radius: 12px; }
+.ai-section-header { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; font-size: 13px; font-weight: 600; }
+.ai-section-header i { color: var(--primary); }
+.ai-badge-mini { margin-left: auto; font-size: 10px; font-weight: 400; color: var(--text-muted); }
+
+.ai-template-list { display: flex; flex-direction: column; gap: 10px; }
+.ai-template-item { display: flex; align-items: center; gap: 12px; padding: 12px; background: var(--bg-card); border-radius: 10px; cursor: pointer; transition: all 0.2s; }
+.ai-template-item:hover { background: rgba(99, 102, 241, 0.1); }
+.ai-template-icon { width: 36px; height: 36px; background: rgba(99, 102, 241, 0.2); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: var(--primary); }
+.ai-template-info { flex: 1; }
+.ai-template-subject { font-size: 13px; font-weight: 500; margin-bottom: 4px; }
+.ai-template-meta { display: flex; gap: 10px; font-size: 11px; color: var(--text-muted); }
+.ai-template-meta .highlight { color: var(--success); font-weight: 500; }
+.ai-template-stats { display: flex; gap: 12px; font-size: 11px; color: var(--text-muted); }
+
+/* Template Preview Modal */
+.template-preview-modal { max-width: 600px; }
+.preview-template-content { padding: 10px 0; }
+.preview-row { display: flex; margin-bottom: 16px; }
+.preview-row label { width: 80px; flex-shrink: 0; font-size: 12px; color: var(--text-muted); }
+.preview-row span { font-size: 13px; }
+.preview-subject { font-size: 15px; font-weight: 600; color: var(--primary); }
+.preview-body { font-size: 13px; line-height: 1.7; color: var(--text-secondary); }
+.preview-row.tags-row { align-items: flex-start; }
+.preview-tags { display: flex; flex-wrap: wrap; gap: 6px; }
+.preview-tag { padding: 3px 10px; background: var(--bg-hover); border-radius: 12px; font-size: 11px; }
+
+/* Info Grid */
+.info-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
+.info-grid .info-item { display: flex; flex-direction: column; gap: 4px; padding: 12px; background: var(--bg-dark); border-radius: 8px; }
+.info-grid .info-item .label { font-size: 11px; color: var(--text-muted); }
+.info-grid .info-item .value { font-size: 14px; font-weight: 600; }
+
+/* Reply Customer Detail */
+.reply-content-box { display: none; }
+.sentiment-analysis { display: none; }
+.sentiment-item { display: none; }
+.review-badge { display: none; }
+.review-info-box { display: none; }
+.review-item { display: none; }
+.history-timeline { display: none; }
+.history-item { display: none; }
+.history-marker { display: none; }
+.history-content { display: none; }
+.ai-recommendation { display: none; }
+.ai-header { display: none; }
+.ai-title { display: none; }
+.ai-confidence { display: none; }
+.ai-content { display: none; }
+.suggested-actions { display: none; }
+.action-card { display: none; }
+.action-header { display: none; }
+.action-name { display: none; }
+.action-desc { display: none; }
+.next-steps { display: none; }
+.step-item { display: none; }
+.step-number { display: none; }
+.step-text { display: none; }
+
+
+@media (max-width: 1400px) {
+  .campaigns-grid { grid-template-columns: 1fr; }
+  .templates-grid-enhanced { grid-template-columns: 1fr; }
+}
+
+@media (max-width: 768px) {
+  .modal { max-width: 95vw; }
+  .customer-details { grid-template-columns: 1fr; }
+  .info-grid { grid-template-columns: 1fr; }
+  .review-stats { grid-template-columns: 1fr; }
+  .customer-actions { flex-direction: column; }
+  .customer-actions .btn { width: 100%; }
+}

+ 190 - 0
ui/smarttrade-platform/src/components/PreviewCustomerModal.vue

@@ -0,0 +1,190 @@
+<template>
+  <div v-if="visible" class="modal-overlay" @click.self="$emit('close')">
+    <div class="modal preview-customer-modal">
+      <div class="modal-header">
+        <div class="modal-title">
+          <div class="title-icon bg-primary"><i class="fas fa-eye"></i></div>
+          <div>
+            <h3>预览客户</h3>
+          </div>
+        </div>
+        <button class="modal-close" type="button" @click="$emit('close')">
+          <i class="fas fa-times"></i>
+        </button>
+      </div>
+
+      <div class="modal-body">
+        <div v-if="customers && customers.length" class="customer-list">
+          <div v-for="customer in customers" :key="customer.id" class="customer-card">
+            <div class="customer-card-left">
+              <div class="customer-logo">{{ customer.logoText || customer.name.charAt(0) }}</div>
+              <div class="customer-meta">
+                <div class="customer-name-row">
+                  <div class="customer-name">{{ customer.name }}</div>
+                  <span class="customer-badge">{{ customer.tag || '潜客' }}</span>
+                </div>
+                <div class="customer-subtitle">{{ customer.role || '采购总监' }} · {{ customer.company }}</div>
+                <div class="customer-info-row">
+                  <span><i class="fas fa-map-marker-alt"></i> {{ customer.location }}</span>
+                  <span><i class="fas fa-dollar-sign"></i> {{ customer.annualPurchase }}</span>
+                </div>
+              </div>
+            </div>
+            <div class="customer-card-right">
+              <div class="customer-score">{{ customer.score }}</div>
+              <div class="customer-score-label">意向分</div>
+            </div>
+          </div>
+        </div>
+        <div v-else class="empty-state">暂无客户数据</div>
+      </div>
+
+      <div class="modal-footer">
+        <button class="btn btn-secondary" type="button" @click="$emit('close')">关闭</button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+const props = defineProps({
+  visible: { type: Boolean, default: false },
+  customers: { type: Array, default: () => [] }
+})
+</script>
+
+<style scoped>
+.preview-customer-modal {
+  max-width: 760px;
+}
+
+.customer-list {
+  display: flex;
+  flex-direction: column;
+  gap: 12px;
+}
+
+.customer-card {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  gap: 18px;
+  padding: 18px 18px;
+  background: var(--bg-hover);
+  border: 1px solid var(--border);
+  border-radius: 16px;
+}
+
+.customer-card-left {
+  display: flex;
+  align-items: center;
+  gap: 14px;
+  min-width: 0;
+}
+
+.customer-logo {
+  width: 52px;
+  height: 52px;
+  border-radius: 14px;
+  background: rgba(56, 189, 248, 0.15);
+  color: var(--primary);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-weight: 700;
+  font-size: 18px;
+}
+
+.customer-meta {
+  min-width: 0;
+  flex: 1;
+}
+
+.customer-name-row {
+  display: flex;
+  align-items: center;
+  gap: 10px;
+  margin-bottom: 6px;
+  flex-wrap: wrap;
+}
+
+.customer-name {
+  font-size: 15px;
+  font-weight: 700;
+  color: var(--text-primary);
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.customer-badge {
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  padding: 2px 10px;
+  border-radius: 999px;
+  background: rgba(59, 130, 246, 0.12);
+  color: var(--primary);
+  font-size: 12px;
+  font-weight: 600;
+}
+
+.customer-subtitle {
+  font-size: 13px;
+  color: var(--text-secondary);
+  margin-bottom: 10px;
+  line-height: 1.5;
+}
+
+.customer-info-row {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 12px;
+  font-size: 12px;
+  color: var(--text-secondary);
+}
+
+.customer-info-row span {
+  display: inline-flex;
+  align-items: center;
+  gap: 6px;
+}
+
+.customer-info-row i {
+  width: 14px;
+  text-align: center;
+  color: var(--text-secondary);
+}
+
+.customer-card-right {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  min-width: 92px;
+}
+
+.customer-score {
+    width: 54px;
+    height: 54px;
+    display: flex;
+    border-radius: 50%;
+    align-items: center;
+    background: rgba(34, 197, 94, 0.12);
+    color: var(--success);
+    font-size: 16px;
+    font-weight: 700;
+    justify-content: center;
+}
+
+.customer-score-label {
+  margin-top: 8px;
+  font-size: 12px;
+  color: #64748B;
+}
+
+.empty-state {
+  padding: 60px 0;
+  text-align: center;
+  color: var(--text-secondary);
+}
+</style>

+ 1150 - 0
ui/smarttrade-platform/src/components/addMarketing.vue

@@ -0,0 +1,1150 @@
+<template>
+    <div v-if="showCreateModal" class="modal-overlay" @click.self="closeCreateModal">
+        <div class="modal create-modal">
+            <div class="modal-header">
+                <div class="modal-title">
+                    <i class="fas fa-plus-circle"></i> 创建营销活动
+                </div>
+                <button class="modal-close" @click="closeCreateModal">
+                    <i class="fas fa-times"></i>
+                </button>
+            </div>
+
+            <div class="modal-body">
+                <!-- Step Indicator -->
+                <div class="step-indicator">
+                    <div class="step" :class="{ active: currentStep >= 1, completed: currentStep > 1 }">
+                        <div class="step-number">1</div>
+                        <div class="step-label">基本信息</div>
+                    </div>
+                    <div class="step-line" :class="{ active: currentStep > 1 }"></div>
+                    <div class="step" :class="{ active: currentStep >= 2, completed: currentStep > 2 }">
+                        <div class="step-number">2</div>
+                        <div class="step-label">目标客户</div>
+                    </div>
+                    <div class="step-line" :class="{ active: currentStep > 2 }"></div>
+                    <div class="step" :class="{ active: currentStep >= 3, completed: currentStep > 3 }">
+                        <div class="step-number">3</div>
+                        <div class="step-label">触达渠道</div>
+                    </div>
+                    <div class="step-line" :class="{ active: currentStep > 3 }"></div>
+                    <div class="step" :class="{ active: currentStep >= 4, completed: currentStep > 4 }">
+                        <div class="step-number">4</div>
+                        <div class="step-label">自动化规则</div>
+                    </div>
+                    <div class="step-line" :class="{ active: currentStep > 4 }"></div>
+                    <div class="step" :class="{ active: currentStep >= 5 }">
+                        <div class="step-number">5</div>
+                        <div class="step-label">预览确认</div>
+                    </div>
+                </div>
+
+                <!-- Step 1: Basic Info -->
+                <div v-if="currentStep === 1" class="step-content">
+                    <h4><i class="fas fa-info-circle"></i> 活动基本信息</h4>
+                    <div class="form-group">
+                        <label class="form-label">活动名称 <span class="required">*</span></label>
+                        <input type="text" class="form-input" v-model="newCampaign.name"
+                            placeholder="例如:2026春季中东客户开发活动" />
+                        <div class="form-hint" v-if="!newCampaign.name">
+                            建议格式:时间+区域+目标+活动类型
+                        </div>
+                    </div>
+                    <div class="form-row">
+                        <div class="form-group">
+                            <label class="form-label">活动类型</label>
+                            <select class="form-select" v-model="newCampaign.type">
+                                <option value="prospect">潜客开发</option>
+                                <option value="nurture">客户培育</option>
+                                <option value="reactivate">客户唤醒</option>
+                                <option value="promote">产品推广</option>
+                                <option value="seasonal">节日营销</option>
+                                <option value="exhibition">展会跟进</option>
+                            </select>
+                        </div>
+                        <div class="form-group">
+                            <label class="form-label">优先级</label>
+                            <select class="form-select" v-model="newCampaign.priority">
+                                <option value="urgent">紧急</option>
+                                <option value="high">高优先</option>
+                                <option value="medium">中等</option>
+                                <option value="low">低优先</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="form-row">
+                        <div class="form-group">
+                            <label class="form-label">开始日期</label>
+                            <input type="date" class="form-input" v-model="newCampaign.startDate" />
+                        </div>
+                        <div class="form-group">
+                            <label class="form-label">结束日期</label>
+                            <input type="date" class="form-input" v-model="newCampaign.endDate" />
+                        </div>
+                    </div>
+                    <div class="form-row">
+                        <div class="form-group">
+                            <label class="form-label">负责人</label>
+                            <select class="form-select" v-model="newCampaign.owner">
+                                <option value="">选择负责人</option>
+                                <option value="sales1">张经理</option>
+                                <option value="sales2">李主管</option>
+                                <option value="sales3">王小明</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="form-label">活动描述</label>
+                        <textarea class="form-textarea" v-model="newCampaign.description" rows="3"
+                            placeholder="描述本次营销活动的目标和策略..."></textarea>
+                    </div>
+                    <div class="form-group">
+                        <label class="form-label">活动目标</label>
+                        <div class="goal-inputs">
+                            <div class="goal-item">
+                                <i class="fas fa-envelope"></i>
+                                <input type="number" class="goal-input" v-model="newCampaign.goals.sent"
+                                    placeholder="0" />
+                                <span>发送量</span>
+                            </div>
+                            <div class="goal-item">
+                                <i class="fas fa-envelope-open"></i>
+                                <input type="number" class="goal-input" v-model="newCampaign.goals.openRate"
+                                    placeholder="0" />
+                                <span>% 打开率</span>
+                            </div>
+                            <div class="goal-item">
+                                <i class="fas fa-reply"></i>
+                                <input type="number" class="goal-input" v-model="newCampaign.goals.replyRate"
+                                    placeholder="0" />
+                                <span>% 回复率</span>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="ai-suggest-section" v-if="newCampaign.name">
+                        <h5><i class="fas fa-lightbulb"></i> AI 建议</h5>
+                        <div class="ai-suggestions">
+                            <div class="ai-suggestion" @click="applySuggestion('name')">
+                                <i class="fas fa-magic"></i>
+                                <span>根据类型生成最佳活动名称</span>
+                            </div>
+                            <div class="ai-suggestion" @click="applySuggestion('desc')">
+                                <i class="fas fa-file-alt"></i>
+                                <span>智能生成活动描述和策略</span>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+                <!-- Step 2: Target Customers -->
+                <div v-if="currentStep === 2" class="step-content">
+                    <h4><i class="fas fa-users"></i> 目标客户群</h4>
+
+                    <!-- AI智能推荐 -->
+                    <div class="ai-recommend-section">
+                        <div class="ai-recommend-header">
+                            <i class="fas fa-robot"></i>
+                            <span>AI 智能推荐客户</span>
+                        </div>
+                        <div class="ai-recommend-tags">
+                            <span class="ai-tag" :class="{ active: newCampaign.aiRecommend === 'high-value' }"
+                                @click="newCampaign.aiRecommend = 'high-value'">
+                                <i class="fas fa-crown"></i> 高价值客户
+                            </span>
+                            <span class="ai-tag" :class="{ active: newCampaign.aiRecommend === 'recent' }"
+                                @click="newCampaign.aiRecommend = 'recent'">
+                                <i class="fas fa-clock"></i> 最近互动
+                            </span>
+                            <span class="ai-tag" :class="{ active: newCampaign.aiRecommend === 'similar' }"
+                                @click="newCampaign.aiRecommend = 'similar'">
+                                <i class="fas fa-copy"></i> 相似客户
+                            </span>
+                            <span class="ai-tag" :class="{ active: newCampaign.aiRecommend === 'dormant' }"
+                                @click="newCampaign.aiRecommend = 'dormant'">
+                                <i class="fas fa-moon"></i> 沉睡唤醒
+                            </span>
+                        </div>
+                    </div>
+
+                    <div class="quick-segments">
+                        <div v-for="seg in segmentOptions" :key="seg.id" class="segment-option"
+                            :class="{ selected: newCampaign.segment === seg.id }" @click="newCampaign.segment = seg.id">
+                            <i :class="seg.icon"></i>
+                            <div class="segment-info">
+                                <div class="segment-name">{{ seg.name }}</div>
+                                <div class="segment-count">{{ seg.count }} 位客户</div>
+                            </div>
+                            <div class="segment-check" v-if="newCampaign.segment === seg.id">
+                                <i class="fas fa-check-circle"></i>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="advanced-filters">
+                        <div class="filter-header">
+                            <h5><i class="fas fa-filter"></i> 高级筛选</h5>
+                            <button class="btn-link" @click="clearFilters">清除筛选</button>
+                        </div>
+                        <div class="filter-row">
+                            <div class="form-group">
+                                <label class="form-label">地区</label>
+                                <select class="form-select" v-model="newCampaign.filters.region">
+                                    <option value="">全部地区</option>
+                                    <option value="middle-east">中东</option>
+                                    <option value="europe">欧洲</option>
+                                    <option value="north-america">北美</option>
+                                    <option value="southeast-asia">东南亚</option>
+                                    <option value="africa">非洲</option>
+                                    <option value="south-america">南美</option>
+                                </select>
+                            </div>
+                            <div class="form-group">
+                                <label class="form-label">行业</label>
+                                <select class="form-select" v-model="newCampaign.filters.industry">
+                                    <option value="">全部行业</option>
+                                    <option value="datacenter">数据中心</option>
+                                    <option value="consumer">消费电子</option>
+                                    <option value="distributor">电子分销</option>
+                                    <option value="retail">零售</option>
+                                    <option value="manufacturing">制造业</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="filter-row">
+                            <div class="form-group">
+                                <label class="form-label">意向分数</label>
+                                <select class="form-select" v-model="newCampaign.filters.scoreRange">
+                                    <option value="">不限</option>
+                                    <option value="high">80-100分</option>
+                                    <option value="medium">60-79分</option>
+                                    <option value="low">40-59分</option>
+                                </select>
+                            </div>
+                            <div class="form-group">
+                                <label class="form-label">客户规模</label>
+                                <select class="form-select" v-model="newCampaign.filters.companySize">
+                                    <option value="">不限</option>
+                                    <option value="large">大型企业(500+)</option>
+                                    <option value="medium">中型企业(100-500)</option>
+                                    <option value="small">小微企业(<100)</option>
+                                </select>
+                            </div>
+                        </div>
+                        <!-- 自定义关键词搜索 -->
+                        <div class="form-group">
+                            <label class="form-label">关键词搜索</label>
+                            <div class="keyword-search">
+                                <input type="text" class="form-input" v-model="newCampaign.filters.keyword"
+                                    placeholder="搜索公司名、联系人、产品关键词..." />
+                                <button class="btn btn-secondary">
+                                    <i class="fas fa-search"></i>
+                                </button>
+                            </div>
+                        </div>
+                        <!-- 已选客户标签 -->
+                        <div class="selected-tags" v-if="newCampaign.filters.selectedTags.length > 0">
+                            <span v-for="tag in newCampaign.filters.selectedTags" :key="tag" class="selected-tag">
+                                {{ tag }}
+                                <i class="fas fa-times" @click="removeTag(tag)"></i>
+                            </span>
+                        </div>
+                    </div>
+
+                    <div class="preview-count">
+                        <i class="fas fa-users"></i>
+                        <div class="count-info">
+                            <div class="count-value">
+                                已选择 <strong>{{ selectedCustomerCount }}</strong> 位客户
+                            </div>
+                            <div class="count-detail">基于当前筛选条件</div>
+                        </div>
+                        <button class="btn btn-sm btn-outline" @click="showCustomerPreview = true">
+                            <i class="fas fa-eye"></i> 预览客户
+                        </button>
+                    </div>
+
+                    <!-- 客户来源分布 -->
+                    <div class="customer-source">
+                        <h5><i class="fas fa-chart-pie"></i> 客户来源分布</h5>
+                        <div class="source-bars">
+                            <div class="source-item">
+                                <span class="source-label">AI推荐</span>
+                                <div class="source-bar">
+                                    <div class="source-fill" style="width: 45%; background: var(--primary)"></div>
+                                </div>
+                                <span class="source-value">45%</span>
+                            </div>
+                            <div class="source-item">
+                                <span class="source-label">展会获取</span>
+                                <div class="source-bar">
+                                    <div class="source-fill" style="width: 25%; background: var(--success)"></div>
+                                </div>
+                                <span class="source-value">25%</span>
+                            </div>
+                            <div class="source-item">
+                                <span class="source-label">官网注册</span>
+                                <div class="source-bar">
+                                    <div class="source-fill" style="width: 20%; background: var(--info)"></div>
+                                </div>
+                                <span class="source-value">20%</span>
+                            </div>
+                            <div class="source-item">
+                                <span class="source-label">转介绍</span>
+                                <div class="source-bar">
+                                    <div class="source-fill" style="width: 10%; background: var(--warning)"></div>
+                                </div>
+                                <span class="source-value">10%</span>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+                <!-- Step 3: Channels -->
+                <div v-if="currentStep === 3" class="step-content">
+                    <h4><i class="fas fa-bullhorn"></i> 触达渠道配置</h4>
+
+                    <div class="channel-grid">
+                        <div v-for="ch in availableChannels" :key="ch.id" class="channel-card" :class="{
+                            selected: newCampaign.channels.includes(ch.id),
+                            disabled: !ch.enabled,
+                        }" @click="ch.enabled && toggleChannel(ch.id)">
+                            <div class="channel-icon" :style="{ background: ch.iconBg, color: ch.iconColor }">
+                                <i :class="ch.icon"></i>
+                            </div>
+                            <div class="channel-info">
+                                <div class="channel-name">{{ ch.name }}</div>
+                                <div class="channel-desc">{{ ch.description }}</div>
+                                <div class="channel-stats-mini">
+                                    <span><i class="fas fa-chart-line"></i> {{ ch.avgOpenRate }}%
+                                        打开率</span>
+                                </div>
+                            </div>
+                            <div class="channel-check" v-if="newCampaign.channels.includes(ch.id)">
+                                <i class="fas fa-check-circle"></i>
+                            </div>
+                        </div>
+                    </div>
+
+                    <!-- 邮件设置 -->
+                    <div v-if="newCampaign.channels.includes('email')" class="channel-settings">
+                        <h5><i class="fas fa-envelope"></i> 邮件设置</h5>
+                        <div class="form-row">
+                            <div class="form-group">
+                                <label class="form-label">发件邮箱</label>
+                                <select class="form-select" v-model="newCampaign.emailSender">
+                                    <option>sales@company.com</option>
+                                    <option>marketing@company.com</option>
+                                    <option>support@company.com</option>
+                                </select>
+                            </div>
+                            <div class="form-group">
+                                <label class="form-label">发送时间</label>
+                                <select class="form-select" v-model="newCampaign.emailSendTime">
+                                    <option value="optimal">AI推荐最优时间</option>
+                                    <option value="morning">上午 9:00-11:00</option>
+                                    <option value="afternoon">下午 14:00-16:00</option>
+                                    <option value="evening">晚上 19:00-21:00</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-row">
+                            <div class="form-group">
+                                <label class="form-label">生成方式</label>
+                                <select class="form-select" v-model="newCampaign.emailTemplate">
+                                    <option value="default">默认模板</option>
+                                    <option value="professional">专业商务</option>
+                                    <option value="friendly">友好亲切</option>
+                                    <option value="minimal">极简风格</option>
+                                </select>
+                            </div>
+                            <div class="form-group">
+                                <label class="form-label">每批发送量</label>
+                                <select class="form-select" v-model="newCampaign.batchSize">
+                                    <option value="50">50封/批</option>
+                                    <option value="100">100封/批</option>
+                                    <option value="200">200封/批</option>
+                                    <option value="500">500封/批</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="form-label">邮件主题 <span class="required">*</span></label>
+                            <div class="subject-input-group">
+                                <input type="text" class="form-input" v-model="newCampaign.emailSubject"
+                                    placeholder="输入邮件主题" />
+                                <button class="btn btn-primary" @click="generateSubjectAI">
+                                    <i class="fas fa-magic"></i> AI优化
+                                </button>
+                            </div>
+                            <div class="subject-suggestions" v-if="showSubjectSuggestions">
+                                <div class="suggestion-header">AI 推荐主题:</div>
+                                <div v-for="subj in subjectSuggestions" :key="subj" class="suggestion-item"
+                                    @click="selectSubject(subj)">
+                                    {{ subj }}
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="form-label">邮件预览文本</label>
+                            <input type="text" class="form-input" v-model="newCampaign.emailPreviewText"
+                                placeholder="邮件列表中显示的预览文字(可选)" />
+                        </div>
+                    </div>
+
+                    <!-- WhatsApp设置 -->
+                    <div v-if="newCampaign.channels.includes('whatsapp')" class="channel-settings">
+                        <h5><i class="fab fa-whatsapp"></i> WhatsApp 设置</h5>
+                        <div class="form-row">
+                            <div class="form-group">
+                                <label class="form-label">发送账号</label>
+                                <select class="form-select" v-model="newCampaign.whatsappAccount">
+                                    <option>业务账号1</option>
+                                    <option>业务账号2</option>
+                                </select>
+                            </div>
+                            <div class="form-group">
+                                <label class="form-label">发送间隔</label>
+                                <select class="form-select" v-model="newCampaign.whatsappInterval">
+                                    <option value="30">30秒/条</option>
+                                    <option value="60">1分钟/条</option>
+                                    <option value="120">2分钟/条</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="form-label">消息模板</label>
+                            <textarea class="form-textarea" v-model="newCampaign.whatsappTemplate" rows="3"
+                                placeholder="输入 WhatsApp 消息模板..."></textarea>
+                        </div>
+                    </div>
+
+                    <!-- LinkedIn设置 -->
+                    <div v-if="newCampaign.channels.includes('linkedin')" class="channel-settings">
+                        <h5><i class="fab fa-linkedin"></i> LinkedIn 设置</h5>
+                        <div class="form-row">
+                            <div class="form-group">
+                                <label class="form-label">操作类型</label>
+                                <select class="form-select" v-model="newCampaign.linkedinAction">
+                                    <option value="message">发送消息</option>
+                                    <option value="connect">发送连接请求</option>
+                                    <option value="inmail">InMail</option>
+                                </select>
+                            </div>
+                            <div class="form-group">
+                                <label class="form-label">每日上限</label>
+                                <select class="form-select" v-model="newCampaign.linkedinLimit">
+                                    <option value="20">20次/天</option>
+                                    <option value="30">30次/天</option>
+                                    <option value="50">50次/天</option>
+                                </select>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+                <!-- Step 4: Automation Rules -->
+                <div v-if="currentStep === 4" class="step-content">
+                    <h4><i class="fas fa-robot"></i> 自动化规则</h4>
+
+                    <!-- SOP 序列模板 -->
+                    <div class="sop-section">
+                        <h5><i class="fas fa-magic"></i> SOP 序列模板</h5>
+                        <div class="sop-grid">
+                            <div v-for="sop in sopTemplates" :key="sop.id" class="sop-card"
+                                :class="{ selected: newCampaign.sopTemplate === sop.id }"
+                                @click="newCampaign.sopTemplate = sop.id">
+                                <div class="sop-icon">{{ sop.icon }}</div>
+                                <div class="sop-info">
+                                    <div class="sop-name">{{ sop.name }}</div>
+                                    <div class="sop-steps">{{ sop.steps }} 步序列</div>
+                                    <div class="sop-desc">{{ sop.description }}</div>
+                                </div>
+                                <div class="sop-check" v-if="newCampaign.sopTemplate === sop.id">
+                                    <i class="fas fa-check-circle"></i>
+                                </div>
+                            </div>
+                        </div>
+                        <!-- SOP 预览 -->
+                        <div class="sop-preview" v-if="selectedSopTemplate">
+                            <div class="sop-preview-header">
+                                <span>{{ selectedSopTemplate.name }} - 序列步骤预览</span>
+                                <button class="btn-link" @click="editSopTemplate">
+                                    自定义
+                                </button>
+                            </div>
+                            <div class="sop-timeline">
+                                <div v-for="(step, idx) in selectedSopTemplate.stepsDetail" :key="idx" class="sop-step">
+                                    <div class="sop-step-marker">{{ idx + 1 }}</div>
+                                    <div class="sop-step-content">
+                                        <div class="sop-step-title">{{ step.title }}</div>
+                                        <div class="sop-step-meta">
+                                            <span><i class="fas fa-clock"></i> 第{{ step.day }}天</span>
+                                            <span><i :class="step.channelIcon"></i>
+                                                {{ step.channel }}</span>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                    <!-- 自动跟进规则 -->
+                    <div class="rules-section">
+                        <h5><i class="fas fa-sitemap"></i> 跟进规则</h5>
+                        <div class="rule-item">
+                            <div class="rule-toggle" :class="{ active: newCampaign.rules.noOpenFollowup }" @click="
+                                newCampaign.rules.noOpenFollowup =
+                                !newCampaign.rules.noOpenFollowup
+                                "></div>
+                            <div class="rule-content">
+                                <div class="rule-title">未打开邮件自动跟进</div>
+                                <div class="rule-desc">3天后发送提醒邮件,更换主题行</div>
+                            </div>
+                            <div class="rule-config" v-if="newCampaign.rules.noOpenFollowup">
+                                <select class="mini-select" v-model="newCampaign.rules.noOpenFollowupDays">
+                                    <option value="2">2天后</option>
+                                    <option value="3">3天后</option>
+                                    <option value="5">5天后</option>
+                                    <option value="7">7天后</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="rule-item">
+                            <div class="rule-toggle" :class="{ active: newCampaign.rules.noReplyFollowup }" @click="
+                                newCampaign.rules.noReplyFollowup =
+                                !newCampaign.rules.noReplyFollowup
+                                "></div>
+                            <div class="rule-content">
+                                <div class="rule-title">未回复自动跟进</div>
+                                <div class="rule-desc">7天后跟进</div>
+                            </div>
+                            <div class="rule-config" v-if="newCampaign.rules.noReplyFollowup">
+                                <select class="mini-select" v-model="newCampaign.rules.noReplyFollowupDays">
+                                    <option value="5">5天后</option>
+                                    <option value="7">7天后</option>
+                                    <option value="10">10天后</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="rule-item">
+                            <div class="rule-toggle" :class="{ active: newCampaign.rules.stopOnReply }" @click="
+                                newCampaign.rules.stopOnReply = !newCampaign.rules.stopOnReply
+                                "></div>
+                            <div class="rule-content">
+                                <div class="rule-title">客户回复后停止自动化</div>
+                                <div class="rule-desc">
+                                    检测到客户回复后不再发送,转人工跟进
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                    <!-- A/B 测试 -->
+                    <div class="ab-test-section">
+                        <div class="ab-test-header">
+                            <h5><i class="fas fa-flask"></i> A/B 测试</h5>
+                            <div class="rule-toggle" :class="{ active: newCampaign.abTest.enabled }" @click="
+                                newCampaign.abTest.enabled = !newCampaign.abTest.enabled
+                                "></div>
+                        </div>
+                        <div class="ab-test-config" v-if="newCampaign.abTest.enabled">
+                            <div class="form-row">
+                                <div class="form-group">
+                                    <label class="form-label">测试变量</label>
+                                    <select class="form-select" v-model="newCampaign.abTest.variable">
+                                        <option value="subject">邮件主题</option>
+                                        <option value="content">邮件内容</option>
+                                        <option value="sendTime">发送时间</option>
+                                        <option value="fromName">发件人名称</option>
+                                    </select>
+                                </div>
+                                <div class="form-group">
+                                    <label class="form-label">测试比例</label>
+                                    <select class="form-select" v-model="newCampaign.abTest.ratio">
+                                        <option value="50">50% : 50%</option>
+                                        <option value="30">30% : 70%</option>
+                                        <option value="20">20% : 80%</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="form-group">
+                                <label class="form-label">胜出条件</label>
+                                <select class="form-select" v-model="newCampaign.abTest.winnerCriteria">
+                                    <option value="openRate">打开率最高</option>
+                                    <option value="clickRate">点击率最高</option>
+                                    <option value="replyRate">回复率最高</option>
+                                </select>
+                            </div>
+                            <div class="ab-test-preview">
+                                <div class="ab-variant">
+                                    <span class="variant-label">A 版本</span>
+                                    <span class="variant-desc">{{
+                                        newCampaign.emailSubject || "原主题"
+                                    }}</span>
+                                </div>
+                                <div class="ab-variant">
+                                    <span class="variant-label">B 版本</span>
+                                    <input type="text" class="variant-input" v-model="newCampaign.abTest.variantB"
+                                        placeholder="输入测试主题..." />
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                    <!-- 智能调度 -->
+                    <div class="smart-schedule-section">
+                        <h5><i class="fas fa-clock"></i> 智能调度</h5>
+                        <div class="schedule-options">
+                            <label class="schedule-option" :class="{ active: newCampaign.scheduleMode === 'asap' }">
+                                <input type="radio" v-model="newCampaign.scheduleMode" value="asap" />
+                                <div class="option-content">
+                                    <div class="option-title">
+                                        <i class="fas fa-bolt"></i> 立即发送
+                                    </div>
+                                    <div class="option-desc">立即开始执行活动</div>
+                                </div>
+                            </label>
+                            <label class="schedule-option"
+                                :class="{ active: newCampaign.scheduleMode === 'scheduled' }">
+                                <input type="radio" v-model="newCampaign.scheduleMode" value="scheduled" />
+                                <div class="option-content">
+                                    <div class="option-title">
+                                        <i class="fas fa-calendar"></i> 定时发送
+                                    </div>
+                                    <div class="option-desc">设置具体开始时间</div>
+                                </div>
+                            </label>
+                            <label class="schedule-option" :class="{ active: newCampaign.scheduleMode === 'optimal' }">
+                                <input type="radio" v-model="newCampaign.scheduleMode" value="optimal" />
+                                <div class="option-content">
+                                    <div class="option-title">
+                                        <i class="fas fa-robot"></i> AI最优时间
+                                    </div>
+                                    <div class="option-desc">根据客户行为自动选择最佳时间</div>
+                                </div>
+                            </label>
+                        </div>
+                        <div class="schedule-time-config" v-if="newCampaign.scheduleMode === 'scheduled'">
+                            <div class="form-row">
+                                <div class="form-group">
+                                    <label class="form-label">开始日期</label>
+                                    <input type="date" class="form-input" v-model="newCampaign.scheduledDate" />
+                                </div>
+                                <div class="form-group">
+                                    <label class="form-label">开始时间</label>
+                                    <input type="time" class="form-input" v-model="newCampaign.scheduledTime" />
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+                <!-- Step 5: Preview -->
+                <div v-if="currentStep === 5" class="step-content">
+                    <h4><i class="fas fa-eye"></i> 活动预览</h4>
+
+                    <!-- 基本信息 -->
+                    <div class="preview-section">
+                        <div class="preview-section-header">
+                            <h5><i class="fas fa-info-circle"></i> 基本信息</h5>
+                            <button class="btn-link" @click="goToStep(1)">编辑</button>
+                        </div>
+                        <div class="preview-cards">
+                            <div class="preview-card">
+                                <div class="preview-icon"><i class="fas fa-tag"></i></div>
+                                <div class="preview-info">
+                                    <div class="preview-label">活动名称</div>
+                                    <div class="preview-value">
+                                        {{ newCampaign.name || "未命名活动" }}
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="preview-card">
+                                <div class="preview-icon">
+                                    <i class="fas fa-layer-group"></i>
+                                </div>
+                                <div class="preview-info">
+                                    <div class="preview-label">活动类型</div>
+                                    <div class="preview-value">
+                                        {{ getTypeLabel(newCampaign.type) }}
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="preview-card">
+                                <div class="preview-icon"><i class="fas fa-flag"></i></div>
+                                <div class="preview-info">
+                                    <div class="preview-label">优先级</div>
+                                    <div class="preview-value" :class="'priority-' + newCampaign.priority">
+                                        {{ getPriorityLabel(newCampaign.priority) }}
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="preview-card">
+                                <div class="preview-icon"><i class="fas fa-user"></i></div>
+                                <div class="preview-info">
+                                    <div class="preview-label">负责人</div>
+                                    <div class="preview-value">
+                                        {{ getOwnerName(newCampaign.owner) || "未指定" }}
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                    <!-- 目标客户 -->
+                    <div class="preview-section">
+                        <div class="preview-section-header">
+                            <h5><i class="fas fa-users"></i> 目标客户</h5>
+                            <button class="btn-link" @click="goToStep(2)">编辑</button>
+                        </div>
+                        <div class="preview-cards">
+                            <div class="preview-card">
+                                <div class="preview-icon"><i class="fas fa-users"></i></div>
+                                <div class="preview-info">
+                                    <div class="preview-label">客户数量</div>
+                                    <div class="preview-value highlight">
+                                        {{ selectedCustomerCount }} 位
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                    <!-- 触达渠道 -->
+                    <div class="preview-section">
+                        <div class="preview-section-header">
+                            <h5><i class="fas fa-bullhorn"></i> 触达渠道</h5>
+                            <button class="btn-link" @click="goToStep(3)">编辑</button>
+                        </div>
+                        <div class="preview-channels">
+                            <div v-for="chId in newCampaign.channels" :key="chId" class="preview-channel-item">
+                                <div class="channel-badge" :style="getChannelStyle(chId)">
+                                    <i :class="getChannelIconById(chId)"></i>
+                                </div>
+                                <div class="channel-details">
+                                    <div class="channel-name">{{ getChannelName(chId) }}</div>
+                                    <div class="channel-config">{{ getChannelConfig(chId) }}</div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                    <!-- 自动化规则 -->
+                    <div class="preview-section">
+                        <div class="preview-section-header">
+                            <h5><i class="fas fa-robot"></i> 自动化规则</h5>
+                            <button class="btn-link" @click="goToStep(4)">编辑</button>
+                        </div>
+                        <div class="preview-rules">
+                            <div class="rule-summary">
+                                <span class="rule-badge">SOP: {{ selectedSopTemplate?.name || "未选择" }}</span>
+                                <span class="rule-badge" v-if="newCampaign.rules.noOpenFollowup">未打开跟进</span>
+                                <span class="rule-badge" v-if="newCampaign.rules.noReplyFollowup">未回复跟进</span>
+                                <span class="rule-badge" v-if="newCampaign.rules.stopOnReply">回复后停止</span>
+                                <span class="rule-badge highlight" v-if="newCampaign.abTest.enabled">A/B测试</span>
+                            </div>
+                        </div>
+                    </div>
+
+                    <!-- 警告提示 -->
+                    <div class="warning-section" v-if="hasWarnings">
+                        <h5><i class="fas fa-exclamation-triangle"></i> 注意事项</h5>
+                        <div class="warning-list">
+                            <div class="warning-item" v-if="selectedCustomerCount > 500">
+                                <i class="fas fa-info-circle"></i>
+                                <span>目标客户数量较多,建议分批发送以避免被标记为垃圾邮件</span>
+                            </div>
+                            <div class="warning-item" v-if="!newCampaign.emailSubject">
+                                <i class="fas fa-exclamation-circle"></i>
+                                <span>邮件主题未设置,请在渠道配置中添加</span>
+                            </div>
+                            <div class="warning-item" v-if="newCampaign.channels.length === 0">
+                                <i class="fas fa-exclamation-circle"></i>
+                                <span>尚未选择任何触达渠道</span>
+                            </div>
+                        </div>
+                    </div>
+
+                    <!-- 确认项 -->
+                    <div class="confirm-section">
+                        <h5><i class="fas fa-check-double"></i> 确认事项</h5>
+                        <label class="confirm-item">
+                            <input type="checkbox" v-model="confirmChecks.content" />
+                            <span class="checkmark"></span>
+                            <span>已确认营销内容符合规范</span>
+                        </label>
+                        <label class="confirm-item">
+                            <input type="checkbox" v-model="confirmChecks.schedule" />
+                            <span class="checkmark"></span>
+                            <span>已确认发送时间和频率合理</span>
+                        </label>
+                        <label class="confirm-item">
+                            <input type="checkbox" v-model="confirmChecks.compliance" />
+                            <span class="checkmark"></span>
+                            <span>已确认符合反垃圾邮件法规(GDPR/CAN-SPAM)</span>
+                        </label>
+                    </div>
+                </div>
+            </div>
+
+            <div class="modal-footer">
+                <button v-if="currentStep > 1" class="btn btn-secondary" @click="currentStep--">
+                    <i class="fas fa-arrow-left"></i> 上一步
+                </button>
+                <button v-else class="btn btn-secondary" @click="closeCreateModal">
+                    取消
+                </button>
+                <button v-if="currentStep < 5" class="btn btn-primary" @click="currentStep++">
+                    下一步 <i class="fas fa-arrow-right"></i>
+                </button>
+                <button v-else class="btn btn-primary" :disabled="!canCreate" @click="createCampaign">
+                    <i class="fas fa-rocket"></i> 创建活动
+                </button>
+            </div>
+        </div>
+    </div>
+
+    <!-- Custom SOP Modal -->
+    <div v-if="showCustomSopModal" class="modal-overlay" @click.self="showCustomSopModal = false">
+        <div class="modal custom-sop-modal">
+            <div class="modal-header">
+                <div class="modal-title"><i class="fas fa-cogs"></i> 自定义 SOP 序列</div>
+                <button class="modal-close" @click="showCustomSopModal = false"><i class="fas fa-times"></i></button>
+            </div>
+            <div class="modal-body">
+                <!-- SOP 名称 -->
+                <div class="form-group">
+                    <label class="form-label">序列名称 <span class="required">*</span></label>
+                    <input type="text" class="form-input" v-model="customSopData.name" placeholder="例如:我的自定义开发序列">
+                </div>
+
+                <!-- 步骤列表 -->
+                <div class="custom-steps-section">
+                    <div class="section-header">
+                        <h5><i class="fas fa-list-ol"></i> 序列步骤</h5>
+                        <button class="btn btn-sm btn-primary" @click="addCustomSopStep">
+                            <i class="fas fa-plus"></i> 添加步骤
+                        </button>
+                    </div>
+
+                    <div class="custom-steps-list">
+                        <div v-for="(step, index) in customSopData.steps" :key="index" class="custom-step-item">
+                            <div class="step-number">{{ index + 1 }}</div>
+                            <div class="step-fields">
+                                <div class="step-row">
+                                    <div class="form-group">
+                                        <label class="form-label">步骤名称</label>
+                                        <input type="text" class="form-input" v-model="step.title"
+                                            placeholder="例如:发送产品介绍">
+                                    </div>
+                                    <div class="form-group">
+                                        <label class="form-label">间隔天数</label>
+                                        <input type="number" class="form-input" v-model="step.day" min="1" max="30">
+                                    </div>
+                                </div>
+                                <div class="step-row">
+                                    <div class="form-group">
+                                        <label class="form-label">触达渠道</label>
+                                        <select class="form-select" v-model="step.channel"
+                                            @change="updateChannelIcon(index)">
+                                            <option value="email">邮件</option>
+                                            <option value="whatsapp">WhatsApp</option>
+                                            <option value="linkedin">LinkedIn</option>
+                                            <option value="phone">电话</option>
+                                            <option value="wechat">微信</option>
+                                        </select>
+                                    </div>
+                                    <div class="channel-preview">
+                                        <div class="preview-badge" :class="step.channel">
+                                            <i :class="step.channelIcon"></i> {{ getChannelName(step.channel) }}
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="step-actions">
+                                <button class="btn-icon" @click="removeCustomSopStep(index)"
+                                    :disabled="customSopData.steps.length <= 1" title="删除步骤">
+                                    <i class="fas fa-trash"></i>
+                                </button>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+                <!-- 预览效果 -->
+                <div class="custom-sop-preview">
+                    <h5><i class="fas fa-eye"></i> 效果预览</h5>
+                    <div class="preview-timeline">
+                        <div v-for="(step, index) in customSopData.steps.filter(s => s.title)" :key="index"
+                            class="preview-step">
+                            <div class="preview-marker">
+                                <i :class="step.channelIcon"></i>
+                            </div>
+                            <div class="preview-content">
+                                <div class="preview-title">{{ step.title }}</div>
+                                <div class="preview-meta">第{{ step.day }}天 · {{ getChannelName(step.channel) }}</div>
+                            </div>
+                        </div>
+                        <div v-if="customSopData.steps.filter(s => s.title).length === 0" class="preview-empty">
+                            <i class="fas fa-info-circle"></i> 请填写步骤内容以预览效果
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button class="btn btn-secondary" @click="showCustomSopModal = false">取消</button>
+                <button class="btn btn-primary">
+                    <i class="fas fa-save"></i> 保存为新序列
+                </button>
+                <button class="btn btn-primary" @click="saveCustomSop">
+                    <i class="fas fa-save"></i> 保存自定义SOP
+                </button>
+            </div>
+        </div>
+    </div>
+
+    <PreviewCustomerModal
+      :visible="showCustomerPreview"
+      :customers="previewCustomers"
+      @close="showCustomerPreview = false"
+    />
+</template>
+
+<script setup>
+    import { ref, computed } from 'vue'
+    import PreviewCustomerModal from './PreviewCustomerModal.vue'
+
+    const showCreateModal = ref(false)
+    const currentStep = ref(1)
+    const newCampaign = ref({
+        name: '', type: 'prospect', priority: 'medium', description: '',
+        startDate: '', endDate: '', owner: '', relatedOpportunity: '',
+        segment: 'all', aiRecommend: 'high-value',
+        filters: {
+            region: '', industry: '', scoreRange: '', stage: '', companySize: '', purchaseCycle: '',
+            keyword: '', selectedTags: []
+        },
+        goals: { sent: 500, openRate: 40, replyRate: 10, opportunities: 15 },
+        channels: ['email'],
+        emailSender: 'sales@company.com', emailSendTime: 'optimal',
+        emailTemplate: 'default', batchSize: '100',
+        emailSubject: '', emailPreviewText: '',
+        trackOpen: true, trackClick: true, trackReply: true,
+        whatsappAccount: '业务账号1', whatsappInterval: '60', whatsappTemplate: '',
+        linkedinAction: 'message', linkedinLimit: '30',
+        sopTemplate: 'standard',
+        rules: {
+            noOpenFollowup: true, noReplyFollowup: true, noClickFollowup: false,
+            stopOnReply: true, stopOnBooking: true,
+            noOpenFollowupDays: '3', noReplyFollowupDays: '7'
+        },
+        abTest: { enabled: false, variable: 'subject', ratio: '50', winnerCriteria: 'openRate', variantB: '' },
+        scheduleMode: 'optimal', scheduledDate: '', scheduledTime: ''
+    })
+    const segmentOptions = [
+        { id: 'all', name: '全部潜客', count: 847, icon: 'fas fa-globe' },
+        { id: 'new', name: '本周新增', count: 56, icon: 'fas fa-star' },
+        { id: 'high-intent', name: '高评分客户', count: 124, icon: 'fas fa-fire' },
+        { id: 'silent', name: '沉默客户', count: 89, icon: 'fas fa-moon' }
+    ]
+    const availableChannels = [
+        { id: 'email', name: '邮件营销', icon: 'fas fa-envelope', iconBg: 'rgba(99, 102, 241, 0.2)', iconColor: 'var(--primary)', description: '专业邮件营销', enabled: true, avgOpenRate: 45 },
+    ]
+    const selectedCustomerCount = computed(() => {
+        const counts = { all: 847, new: 56, 'high-intent': 124, silent: 89 }
+        return counts[newCampaign.value.segment] || 847
+    })
+    const showCustomerPreview = ref(false)
+    const previewCustomers = ref([
+        { id: 1, name: 'Riyadh Tech Distribution', company: 'Riyadh Tech Distribution', role: '采购总监', location: '沙特 · 利雅得', annualPurchase: '年采购约$1.5M', score: 92, tag: '潜客', logoText: 'RT' },
+        { id: 2, name: 'Riyadh Tech Distribution', company: 'Riyadh Tech Distribution', role: '采购总监', location: '沙特 · 利雅得', annualPurchase: '年采购约$1.5M', score: 92, tag: '潜客', logoText: 'RT' },
+        { id: 3, name: 'Riyadh Tech Distribution', company: 'Riyadh Tech Distribution', role: '采购总监', location: '沙特 · 利雅得', annualPurchase: '年采购约$1.5M', score: 92, tag: '潜客', logoText: 'RT' },
+        { id: 4, name: 'Riyadh Tech Distribution', company: 'Riyadh Tech Distribution', role: '采购总监', location: '沙特 · 利雅得', annualPurchase: '年采购约$1.5M', score: 92, tag: '潜客', logoText: 'RT' }
+    ])
+    const showSubjectSuggestions = ref(false)
+    const sopTemplates = [
+        {
+            id: 'standard', name: '标准开发序列', icon: '📧', steps: 4, description: '适合初次触达客户', stepsDetail: [
+                { title: '首封介绍邮件', day: 1, channel: '邮件', channelIcon: 'fas fa-envelope' },
+                { title: '产品优势介绍', day: 3, channel: '邮件', channelIcon: 'fas fa-envelope' },
+                { title: '案例分享', day: 7, channel: 'LinkedIn', channelIcon: 'fab fa-linkedin' },
+                { title: '电话跟进', day: 14, channel: '电话', channelIcon: 'fas fa-phone' }
+            ]
+        },
+        {
+            id: 'aggressive', name: '快速跟进序列', icon: '⚡', steps: 3, description: '快速转化意向客户', stepsDetail: [
+                { title: '个性化介绍', day: 1, channel: '邮件', channelIcon: 'fas fa-envelope' },
+                { title: 'WhatsApp跟进', day: 2, channel: 'WhatsApp', channelIcon: 'fab fa-whatsapp' },
+                { title: '报价发送', day: 5, channel: '邮件', channelIcon: 'fas fa-envelope' }
+            ]
+        },
+        {
+            id: 'nurture', name: '培育序列', icon: '🌱', steps: 5, description: '长期培育潜在客户', stepsDetail: [
+                { title: '欢迎邮件', day: 1, channel: '邮件', channelIcon: 'fas fa-envelope' },
+                { title: '行业报告', day: 7, channel: '邮件', channelIcon: 'fas fa-envelope' },
+                { title: '产品更新', day: 14, channel: '邮件', channelIcon: 'fas fa-envelope' },
+                { title: '案例研究', day: 21, channel: 'LinkedIn', channelIcon: 'fab fa-linkedin' },
+                { title: '优惠促销', day: 30, channel: '邮件', channelIcon: 'fas fa-envelope' }
+            ]
+        },
+        {
+            id: 'reactivate', name: '唤醒序列', icon: '🔄', steps: 3, description: '重新激活沉睡客户', stepsDetail: [
+                { title: '想念你邮件', day: 1, channel: '邮件', channelIcon: 'fas fa-envelope' },
+                { title: '新产品推荐', day: 5, channel: '邮件', channelIcon: 'fas fa-envelope' },
+                { title: '特别优惠', day: 10, channel: 'WhatsApp', channelIcon: 'fab fa-whatsapp' }
+            ]
+        }
+    ]
+    const getTypeLabel = (type) => ({ prospect: '潜客开发', nurture: '客户培育', reactivate: '客户唤醒', promote: '产品推广', seasonal: '节日营销', exhibition: '展会跟进' }[type] || type)
+    const getPriorityLabel = (priority) => ({ urgent: '紧急', high: '高优先', medium: '中等', low: '低优先' }[priority] || priority)
+    const getOwnerName = (owner) => ({ sales1: '张经理', sales2: '李主管', sales3: '王小明' }[owner] || '')
+    const getChannelStyle = (id) => {
+        const styles = {
+            email: { background: 'rgba(99, 102, 241, 0.2)', color: 'var(--primary)' },
+            whatsapp: { background: 'rgba(37, 211, 102, 0.2)', color: '#25D366' },
+            linkedin: { background: 'rgba(10, 102, 194, 0.2)', color: '#0A66C2' },
+            wechat: { background: 'rgba(7, 193, 96, 0.2)', color: '#07C160' }
+        }
+        return styles[id] || {}
+    }
+    const getChannelName = (id) => ({ email: '邮件营销', whatsapp: 'WhatsApp', linkedin: 'LinkedIn', wechat: '微信企业号' }[id] || id)
+    const getChannelConfig = (id) => {
+        if (id === 'email') return newCampaign.value.emailSender + ' · ' + (newCampaign.value.emailSendTime === 'optimal' ? 'AI推荐时间' : newCampaign.value.emailSendTime)
+        if (id === 'whatsapp') return newCampaign.value.whatsappAccount + ' · ' + newCampaign.value.whatsappInterval + '秒/条'
+        if (id === 'linkedin') return newCampaign.value.linkedinAction === 'message' ? '发送消息' : '连接请求' + ' · ' + newCampaign.value.linkedinLimit + '次/天'
+        return ''
+    }
+    const getChannelIconById = (id) => ({ email: 'fas fa-envelope', whatsapp: 'fab fa-whatsapp', linkedin: 'fab fa-linkedin', wechat: 'fab fa-weixin' }[id] || 'fas fa-comment')
+    const hasWarnings = computed(() => selectedCustomerCount.value > 500 || !newCampaign.value.emailSubject || newCampaign.value.channels.length === 0)
+    const confirmChecks = ref({ content: false, schedule: false, compliance: false, unsubscribe: true })
+    const canCreate = computed(() => confirmChecks.value.content && confirmChecks.value.schedule && confirmChecks.value.compliance)
+
+    const createCampaign = () => { closeCreateModal(); toast('营销活动已创建', 'success') }
+
+    const selectSubject = (subj) => { newCampaign.value.emailSubject = subj; showSubjectSuggestions.value = false }
+    const toggleChannel = (id) => {
+        const i = newCampaign.value.channels.indexOf(id)
+        i > -1 ? newCampaign.value.channels.splice(i, 1) : newCampaign.value.channels.push(id)
+    }
+    const clearFilters = () => {
+        newCampaign.value.filters = {
+            region: '', industry: '', scoreRange: '', stage: '', companySize: '', purchaseCycle: '',
+            keyword: '', selectedTags: []
+        }
+    }
+    const removeTag = (tag) => {
+        const idx = newCampaign.value.filters.selectedTags.indexOf(tag)
+        if (idx > -1) newCampaign.value.filters.selectedTags.splice(idx, 1)
+    }
+    const applySuggestion = (type) => {
+        if (type === 'name') {
+            const typeNames = { prospect: '潜客开发', nurture: '客户培育', reactivate: '客户唤醒', promote: '产品推广', seasonal: '节日营销', exhibition: '展会跟进' }
+            const regions = ['中东', '欧洲', '北美', '东南亚']
+            const region = regions[Math.floor(Math.random() * regions.length)]
+            newCampaign.value.name = `2026春季${region}${typeNames[newCampaign.value.type] || '营销'}活动`
+            toast('活动名称已生成', 'success')
+        } else if (type === 'desc') {
+            newCampaign.value.description = `本次活动旨在通过多渠道触达目标客户群体,提升品牌知名度并获取高质量商机。主要策略包括:
+            1. 针对目标客户发送个性化邮件内容
+            2. 结合WhatsApp/LinkedIn进行多渠道跟进
+            3. 设置自动化SOP序列持续培育客户
+            预期目标:打开率45%+,回复率10%+,转化商机15+`
+            toast('活动描述已生成', 'success')
+        }
+    }
+
+    const duplicateCampaign = (campaign) => {
+        toast(`已复制活动"${campaign.name}"`, 'success')
+        showHistoryModal.value = false
+        setTimeout(() => {
+            openCreateModal()
+            newCampaign.value.name = campaign.name + ' (副本)'
+        }, 300)
+    }
+
+    const showCustomSopModal = ref(false)
+    const selectedSopTemplate = computed(() => sopTemplates.find(s => s.id === newCampaign.value.sopTemplate))
+    const customSopData = ref({
+        name: '',
+        steps: [
+            { title: '', day: 1, channel: 'email', channelIcon: 'fas fa-envelope' },
+            { title: '', day: 3, channel: 'email', channelIcon: 'fas fa-envelope' },
+            { title: '', day: 7, channel: 'linkedin', channelIcon: 'fab fa-linkedin' },
+            { title: '', day: 14, channel: 'phone', channelIcon: 'fas fa-phone' }
+        ]
+    })
+    const editSopTemplate = () => {
+        customSopData.value = {
+            name: selectedSopTemplate.value?.name || '',
+            steps: selectedSopTemplate.value?.stepsDetail?.map(s => ({
+                title: s.title,
+                day: s.day,
+                channel: s.channel.toLowerCase().replace('邮件', 'email').replace('linkedin', 'linkedin').replace('电话', 'phone').replace('whatsapp', 'whatsapp'),
+                channelIcon: s.channelIcon
+            })) || [
+                    { title: '', day: 1, channel: 'email', channelIcon: 'fas fa-envelope' },
+                    { title: '', day: 3, channel: 'email', channelIcon: 'fas fa-envelope' },
+                    { title: '', day: 7, channel: 'linkedin', channelIcon: 'fab fa-linkedin' },
+                    { title: '', day: 14, channel: 'phone', channelIcon: 'fas fa-phone' }
+                ]
+        }
+        showCustomSopModal.value = true
+    }
+
+    const addCustomSopStep = () => {
+        const lastDay = customSopData.value.steps[customSopData.value.steps.length - 1]?.day || 0
+        customSopData.value.steps.push({
+            title: '',
+            day: lastDay + 3,
+            channel: 'email',
+            channelIcon: 'fas fa-envelope'
+        })
+    }
+
+    const removeCustomSopStep = (index) => {
+        if (customSopData.value.steps.length > 1) {
+            customSopData.value.steps.splice(index, 1)
+        }
+    }
+
+    const updateChannelIcon = (index) => {
+        const channel = customSopData.value.steps[index].channel
+        const icons = {
+            email: 'fas fa-envelope',
+            whatsapp: 'fab fa-whatsapp',
+            linkedin: 'fab fa-linkedin',
+            phone: 'fas fa-phone',
+            wechat: 'fab fa-weixin'
+        }
+        customSopData.value.steps[index].channelIcon = icons[channel] || 'fas fa-envelope'
+    }
+
+    const saveCustomSop = () => {
+        if (!customSopData.value.name) {
+            toast('请输入SOP名称', 'error')
+            return
+        }
+        const validSteps = customSopData.value.steps.filter(s => s.title)
+        if (validSteps.length === 0) {
+            toast('请至少填写一个步骤', 'error')
+            return
+        }
+        // 将自定义SOP应用到活动
+        newCampaign.value.sopTemplate = 'custom'
+        newCampaign.value.customSOP = { ...customSopData.value }
+        showCustomSopModal.value = false
+        toast('自定义SOP已保存', 'success')
+    }
+
+    const open = () => { currentStep.value = 1; showCreateModal.value = true }
+    const closeCreateModal = () => { showCreateModal.value = false; currentStep.value = 1 }
+
+    defineExpose({
+        open,
+        duplicateCampaign
+    })
+</script>
+
+<style scoped>
+@import '../assets/styles/marketing.css'
+</style>

+ 2 - 24
ui/smarttrade-platform/src/components/layout/Sidebar.vue

@@ -125,26 +125,6 @@
                 <span class="menu-item-desc">编辑头像、姓名等信息</span>
               </div>
             </router-link>
-            
-            <div class="menu-item" @click="goToSettings('security')">
-              <div class="menu-item-icon" style="background: rgba(16, 185, 129, 0.2); color: var(--success);">
-                <i class="fas fa-shield-alt"></i>
-              </div>
-              <div class="menu-item-content">
-                <span class="menu-item-title">账号安全</span>
-                <span class="menu-item-desc">密码、两步验证设置</span>
-              </div>
-            </div>
-            
-            <div class="menu-item" @click="goToSettings('ai')">
-              <div class="menu-item-icon" style="background: rgba(236, 72, 153, 0.2); color: #EC4899;">
-                <i class="fas fa-brain"></i>
-              </div>
-              <div class="menu-item-content">
-                <span class="menu-item-title">AI偏好</span>
-                <span class="menu-item-desc">模型版本 v2.3</span>
-              </div>
-            </div>
           </div>
           
           <div class="menu-divider"></div>
@@ -155,8 +135,7 @@
                 <i :class="isDarkMode ? 'fas fa-sun' : 'fas fa-moon'"></i>
               </div>
               <div class="menu-item-content">
-                <span class="menu-item-title">{{ isDarkMode ? '浅色模式' : '深色模式' }}</span>
-                <span class="menu-item-desc">切换界面主题</span>
+                <span class="menu-item-title">修改密码</span>
               </div>
             </div>
             
@@ -165,8 +144,7 @@
                 <i class="fas fa-question-circle"></i>
               </div>
               <div class="menu-item-content">
-                <span class="menu-item-title">帮助中心</span>
-                <span class="menu-item-desc">使用指南与FAQ</span>
+                <span class="menu-item-title">登录历史</span>
               </div>
             </div>
           </div>

+ 13 - 94
ui/smarttrade-platform/src/components/layout/TopBar.vue

@@ -7,12 +7,6 @@
     </div>
 
     <div class="top-actions">
-      <!-- Search -->
-      <div class="search-box">
-        <i class="fas fa-search search-icon"></i>
-        <input type="text" class="search-input" placeholder="搜索客户、订单、商机...">
-      </div>
-
       <!-- Quick Actions -->
       <div class="action-btn" @click="showQuickActions = !showQuickActions" style="position: relative;">
         <i class="fas fa-plus"></i>
@@ -20,27 +14,13 @@
         <!-- Quick Actions Menu -->
         <transition name="fade">
           <div v-if="showQuickActions" class="task-menu show" style="top: 100%; right: 0; position: absolute; margin-top: 8px;">
-            <div class="task-menu-item" @click="openModal('prospect')">
-              <div class="task-menu-icon prospect"><i class="fas fa-search"></i></div>
-              <div class="task-menu-text">
-                <h4>AI智能寻客</h4>
-                <p>全网挖掘高匹配潜客</p>
-              </div>
-            </div>
-            <div class="task-menu-item" @click="openModal('marketing')">
+            <div class="task-menu-item" @click.stop="openModal('marketing')">
               <div class="task-menu-icon marketing"><i class="fas fa-paper-plane"></i></div>
               <div class="task-menu-text">
                 <h4>创建营销活动</h4>
                 <p>多渠道自动触达客户</p>
               </div>
             </div>
-            <div class="task-menu-item" @click="openModal('analysis')">
-              <div class="task-menu-icon analysis"><i class="fas fa-chart-bar"></i></div>
-              <div class="task-menu-text">
-                <h4>生成分析报告</h4>
-                <p>AI自动生成业务报告</p>
-              </div>
-            </div>
           </div>
         </transition>
       </div>
@@ -222,34 +202,6 @@
           </div>
         </div>
 
-        <!-- Contact Support -->
-        <div class="help-section">
-          <div class="section-title">📞 联系支持</div>
-          <div class="support-options">
-            <div class="support-item" @click="openChat">
-              <i class="fas fa-comments"></i>
-              <div>
-                <div class="support-title">在线客服</div>
-                <div class="support-desc">工作时间实时响应</div>
-              </div>
-            </div>
-            <div class="support-item" @click="sendFeedback">
-              <i class="fas fa-envelope"></i>
-              <div>
-                <div class="support-title">提交反馈</div>
-                <div class="support-desc">帮助我们改进产品</div>
-              </div>
-            </div>
-            <div class="support-item" @click="openDocs">
-              <i class="fas fa-book"></i>
-              <div>
-                <div class="support-title">完整文档</div>
-                <div class="support-desc">docs.lingcunai.com</div>
-              </div>
-            </div>
-          </div>
-        </div>
-
         <!-- Version Info -->
         <div class="help-footer">
           <div class="version-info">
@@ -258,8 +210,6 @@
           </div>
           <div class="footer-links">
             <a href="#" @click.prevent="showChangelog">更新日志</a>
-            <a href="#" @click.prevent="showTerms">服务条款</a>
-            <a href="#" @click.prevent="showPrivacy">隐私政策</a>
           </div>
         </div>
       </div>
@@ -626,11 +576,14 @@
       </div>
     </transition>
   </header>
+
+  <AddMarketing ref="addMarketingRef" />
 </template>
 
 <script setup>
 import { ref, computed } from 'vue'
 import { useRoute } from 'vue-router'
+import AddMarketing from '../addMarketing.vue'
 
 const route = useRoute()
 const showQuickActions = ref(false)
@@ -698,15 +651,17 @@ const pageTitle = computed(() => {
   return titles[route.path] || '企业大脑'
 })
 
+const addMarketingRef = ref()
 const openModal = (type) => {
   showQuickActions.value = false
-  if (type === 'prospect') {
-    showProspectModal.value = true
-  } else if (type === 'marketing') {
-    showMarketingModal.value = true
-  } else if (type === 'analysis') {
-    showReportModal.value = true
-  }
+  addMarketingRef.value.open()
+  // if (type === 'prospect') {
+  //   showProspectModal.value = true
+  // } else if (type === 'marketing') {
+  //   showMarketingModal.value = true
+  // } else if (type === 'analysis') {
+  //   showReportModal.value = true
+  // }
 }
 
 // 创建寻客任务
@@ -798,7 +753,6 @@ const notifications = ref([
     actions: [
       { label: '立即回复', icon: 'fas fa-reply', primary: true },
       { label: '查看邮件', icon: 'fas fa-envelope-open' },
-      { label: '添加到跟进', icon: 'fas fa-plus' }
     ]
   },
   {
@@ -968,8 +922,6 @@ const notifications = ref([
 const notificationTabs = computed(() => [
   { key: 'all', label: '全部', icon: 'fas fa-inbox', count: notifications.value.filter(n => !n.read).length },
   { key: 'reply', label: '客户回复', icon: 'fas fa-reply', count: notifications.value.filter(n => n.type === 'reply' && !n.read).length },
-  { key: 'risk', label: '风险预警', icon: 'fas fa-exclamation-triangle', count: notifications.value.filter(n => n.type === 'risk' && !n.read).length },
-  { key: 'ai', label: 'AI情报', icon: 'fas fa-robot', count: notifications.value.filter(n => n.type === 'ai' && !n.read).length },
   { key: 'marketing', label: '营销报告', icon: 'fas fa-chart-line', count: notifications.value.filter(n => n.type === 'marketing' && !n.read).length }
 ])
 
@@ -1148,39 +1100,6 @@ const showPrivacy = () => {
   gap: 12px;
 }
 
-.search-box {
-  position: relative;
-  width: 280px;
-}
-
-.search-icon {
-  position: absolute;
-  left: 12px;
-  top: 50%;
-  transform: translateY(-50%);
-  color: var(--text-muted);
-  font-size: 14px;
-}
-
-.search-input {
-  width: 100%;
-  padding: 8px 12px 8px 36px;
-  background: var(--bg-hover);
-  border: 1px solid var(--border);
-  border-radius: 8px;
-  color: var(--text-primary);
-  font-size: 13px;
-}
-
-.search-input::placeholder {
-  color: var(--text-muted);
-}
-
-.search-input:focus {
-  outline: none;
-  border-color: var(--primary);
-}
-
 .action-btn {
   width: 36px;
   height: 36px;

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 24 - 991
ui/smarttrade-platform/src/views/MarketingView.vue


+ 7 - 82
ui/smarttrade-platform/src/views/SettingsView.vue

@@ -18,8 +18,7 @@
     <!-- Settings Grid -->
     <div class="settings-grid">
       <!-- Left Column -->
-      <div class="settings-column">
-        <!-- Account & Security -->
+      <!-- <div class="settings-column">
         <div class="settings-section">
           <div class="section-header">
             <div class="section-icon" style="background: rgba(99, 102, 241, 0.2); color: var(--primary);">
@@ -32,7 +31,6 @@
           </div>
           
           <div class="settings-list">
-            <!-- Profile Card -->
             <div class="profile-card">
               <div class="profile-avatar">
                 <span>张</span>
@@ -94,7 +92,6 @@
           </div>
         </div>
 
-        <!-- AI Brain Config -->
         <div class="settings-section">
           <div class="section-header">
             <div class="section-icon" style="background: rgba(236, 72, 153, 0.2); color: #EC4899;">
@@ -185,12 +182,12 @@
             </div>
           </div>
         </div>
-      </div>
+      </div> -->
 
       <!-- Right Column -->
       <div class="settings-column">
         <!-- Auto Prospect Config -->
-        <div class="settings-section">
+        <!-- <div class="settings-section">
           <div class="section-header">
             <div class="section-icon" style="background: rgba(59, 130, 246, 0.2); color: #3B82F6;">
               <i class="fas fa-search"></i>
@@ -261,7 +258,7 @@
               </div>
             </div>
           </div>
-        </div>
+        </div> -->
 
         <!-- Channel Integration -->
         <div class="settings-section">
@@ -345,7 +342,7 @@
         </div>
 
         <!-- Notification Settings -->
-        <div class="settings-section">
+        <!-- <div class="settings-section">
           <div class="section-header">
             <div class="section-icon" style="background: rgba(245, 158, 11, 0.2); color: var(--warning);">
               <i class="fas fa-bell"></i>
@@ -386,38 +383,8 @@
                 </div>
               </div>
             </div>
-
-            <div class="settings-item">
-              <div class="item-icon" style="background: rgba(239, 68, 68, 0.2); color: var(--danger);">
-                <i class="fas fa-exclamation-triangle"></i>
-              </div>
-              <div class="item-content">
-                <div class="item-title">风险预警提醒</div>
-                <div class="item-desc">高风险事件即时推送</div>
-              </div>
-              <div class="item-action">
-                <div class="toggle-switch" :class="{ active: settings.riskNotify }" @click="settings.riskNotify = !settings.riskNotify">
-                  <span class="toggle-slider"></span>
-                </div>
-              </div>
-            </div>
-
-            <div class="settings-item">
-              <div class="item-icon" style="background: rgba(139, 92, 246, 0.2); color: var(--secondary);">
-                <i class="fas fa-chart-line"></i>
-              </div>
-              <div class="item-content">
-                <div class="item-title">周报汇总</div>
-                <div class="item-desc">每周发送业绩汇总报告</div>
-              </div>
-              <div class="item-action">
-                <div class="toggle-switch" :class="{ active: settings.weeklyReport }" @click="settings.weeklyReport = !settings.weeklyReport">
-                  <span class="toggle-slider"></span>
-                </div>
-              </div>
-            </div>
           </div>
-        </div>
+        </div> -->
       </div>
     </div>
 
@@ -1118,8 +1085,6 @@
           <div class="email-tabs">
             <button class="email-tab active"><i class="fas fa-envelope"></i> 邮箱账号</button>
             <button class="email-tab"><i class="fas fa-chart-bar"></i> 发送统计</button>
-            <button class="email-tab"><i class="fas fa-cog"></i> 域名配置</button>
-            <button class="email-tab"><i class="fas fa-shield-alt"></i> 安全设置</button>
           </div>
           
           <div class="email-accounts-list">
@@ -1134,13 +1099,6 @@
                   <span><i class="fas fa-sync"></i> {{ account.lastSync }}</span>
                 </div>
               </div>
-              <div class="account-usage">
-                <div class="usage-label">本月用量</div>
-                <div class="usage-bar">
-                  <div class="usage-fill" :style="{width: (account.monthlyUsed / account.monthlyLimit * 100) + '%'}"></div>
-                </div>
-                <span class="usage-text">{{ account.monthlyUsed }} / {{ account.monthlyLimit }}</span>
-              </div>
               <div class="account-auth">
                 <span class="auth-badge" :class="account.SPF ? 'active' : ''"><i class="fas fa-check"></i> SPF</span>
                 <span class="auth-badge" :class="account.DKIM ? 'active' : ''"><i class="fas fa-check"></i> DKIM</span>
@@ -1440,15 +1398,6 @@
           <button class="modal-close" @click="showEmailDetailModal = false"><i class="fas fa-times"></i></button>
         </div>
         <div class="modal-body" v-if="selectedEmailAccount">
-          <!-- 标签页 -->
-          <div class="detail-tabs">
-            <button class="detail-tab active">服务器配置</button>
-            <button class="detail-tab">自动回复</button>
-            <button class="detail-tab">邮件签名</button>
-            <button class="detail-tab">转发规则</button>
-            <button class="detail-tab">发送模板</button>
-          </div>
-
           <!-- 服务器配置 -->
           <div class="detail-section">
             <h5><i class="fas fa-server"></i> SMTP / IMAP 服务器配置</h5>
@@ -1533,31 +1482,6 @@
             </div>
           </div>
 
-          <!-- 自动回复 -->
-          <div class="detail-section">
-            <h5><i class="fas fa-reply"></i> 自动回复设置</h5>
-            <div class="auto-reply-config">
-              <div class="config-row-flex">
-                <div class="config-item">
-                  <label>开启自动回复</label>
-                  <div class="toggle-switch" :class="{ active: selectedEmailAccount.autoReply }">
-                    <span class="toggle-slider"></span>
-                  </div>
-                </div>
-                <div class="config-item">
-                  <label>仅工作时间</label>
-                  <div class="toggle-switch">
-                    <span class="toggle-slider"></span>
-                  </div>
-                </div>
-              </div>
-              <div class="form-group" v-if="selectedEmailAccount.autoReply">
-                <label class="form-label">回复内容</label>
-                <textarea class="form-textarea" rows="4">{{ selectedEmailAccount.autoReplyContent || '感谢您的邮件,我们将在工作时间内尽快回复您。祝您有美好的一天!' }}</textarea>
-              </div>
-            </div>
-          </div>
-
           <!-- 邮件签名 -->
           <div class="detail-section">
             <h5><i class="fas fa-pen"></i> 邮件签名</h5>
@@ -1572,6 +1496,7 @@
         </div>
         <div class="modal-footer">
           <button class="btn btn-secondary" @click="showEmailDetailModal = false">关闭</button>
+          <button class="btn btn-primary" @click="showEmailDetailModal = false">配置检测</button>
           <button class="btn btn-primary" @click="showEmailDetailModal = false; showToastMessage('配置已保存', 'success')">保存配置</button>
         </div>
       </div>

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů