瀏覽代碼

修改自动营销

Fan 1 月之前
父節點
當前提交
3d2e48bcf5
共有 1 個文件被更改,包括 54 次插入312 次删除
  1. 54 312
      ui/smarttrade-platform/src/views/MarketingView.vue

+ 54 - 312
ui/smarttrade-platform/src/views/MarketingView.vue

@@ -185,7 +185,7 @@
           <div class="detail-section">
             <div class="section-header">
               <h4><i class="fas fa-chart-line"></i> 核心数据</h4>
-              <div class="progress-info">进度 {{ selectedCampaign.progress }}%</div>
+              <div class="progress-info">达成 {{ selectedCampaign.progress }}%</div>
             </div>
             <div class="detail-progress-bar">
               <div class="progress-fill" :style="{ width: selectedCampaign.progress + '%' }"></div>
@@ -212,20 +212,6 @@
                   <div class="metric-label">回复数 ({{ selectedCampaign.stats.replyRate }}%)</div>
                 </div>
               </div>
-              <div class="metric-card">
-                <div class="metric-icon orange"><i class="fas fa-mouse-pointer"></i></div>
-                <div class="metric-content">
-                  <div class="metric-value">{{ Math.round(selectedCampaign.stats.sent * 0.08) }}</div>
-                  <div class="metric-label">点击数 (8%)</div>
-                </div>
-              </div>
-              <div class="metric-card highlight">
-                <div class="metric-icon success"><i class="fas fa-bullseye"></i></div>
-                <div class="metric-content">
-                  <div class="metric-value">{{ Math.round(selectedCampaign.stats.sent * selectedCampaign.stats.replyRate / 100 * 0.4) }}</div>
-                  <div class="metric-label">转化商机</div>
-                </div>
-              </div>
             </div>
           </div>
 
@@ -235,7 +221,7 @@
               <h4><i class="fas fa-bullhorn"></i> 触达渠道</h4>
             </div>
             <div class="channel-detail-list">
-              <div v-for="ch in selectedCampaign.channels" :key="ch" class="channel-detail-item">
+              <div v-for="ch in selectedCampaign.channels.filter(ch => ch !== 'WhatsApp' && ch !== 'LinkedIn')" :key="ch" class="channel-detail-item">
                 <div class="channel-icon-wrapper" :style="getChannelStyleByName(ch)">
                   <i :class="getChannelIcon(ch)"></i>
                 </div>
@@ -272,16 +258,6 @@
                 <div class="target-value">{{ selectedCampaign.pendingCount || 224 }}</div>
                 <div class="target-label">待触达</div>
               </div>
-              <div class="target-breakdown">
-                <div class="breakdown-item">
-                  <span class="breakdown-label">主要地区</span>
-                  <span class="breakdown-value">{{ selectedCampaign.region || '中东' }}</span>
-                </div>
-                <div class="breakdown-item">
-                  <span class="breakdown-label">目标行业</span>
-                  <span class="breakdown-value">{{ selectedCampaign.industry || '电子分销' }}</span>
-                </div>
-              </div>
             </div>
           </div>
 
@@ -546,14 +522,6 @@
                   <option value="sales3">王小明</option>
                 </select>
               </div>
-              <div class="form-group">
-                <label class="form-label">关联商机</label>
-                <select class="form-select" v-model="newCampaign.relatedOpportunity">
-                  <option value="">不关联</option>
-                  <option value="opp1">中东SSD大批量采购</option>
-                  <option value="opp2">欧洲数据中心项目</option>
-                </select>
-              </div>
             </div>
             <div class="form-group">
               <label class="form-label">活动描述</label>
@@ -577,11 +545,6 @@
                   <input type="number" class="goal-input" v-model="newCampaign.goals.replyRate" placeholder="0">
                   <span>% 回复率</span>
                 </div>
-                <div class="goal-item">
-                  <i class="fas fa-bullseye"></i>
-                  <input type="number" class="goal-input" v-model="newCampaign.goals.opportunities" placeholder="0">
-                  <span>商机数</span>
-                </div>
               </div>
             </div>
             <div class="ai-suggest-section" v-if="newCampaign.name">
@@ -669,16 +632,6 @@
                     <option value="manufacturing">制造业</option>
                   </select>
                 </div>
-                <div class="form-group">
-                  <label class="form-label">客户阶段</label>
-                  <select class="form-select" v-model="newCampaign.filters.stage">
-                    <option value="">全部阶段</option>
-                    <option value="lead">潜客</option>
-                    <option value="qualified">合格潜客</option>
-                    <option value="contacted">已联系</option>
-                    <option value="proposal">方案中</option>
-                  </select>
-                </div>
               </div>
               <div class="filter-row">
                 <div class="form-group">
@@ -699,15 +652,6 @@
                     <option value="small">小微企业(<100)</option>
                   </select>
                 </div>
-                <div class="form-group">
-                  <label class="form-label">采购周期</label>
-                  <select class="form-select" v-model="newCampaign.filters.purchaseCycle">
-                    <option value="">不限</option>
-                    <option value="hot">近期有采购计划</option>
-                    <option value="active">3个月内</option>
-                    <option value="planning">半年内</option>
-                  </select>
-                </div>
               </div>
               <!-- 自定义关键词搜索 -->
               <div class="form-group">
@@ -768,15 +712,6 @@
           <!-- Step 3: Channels -->
           <div v-if="currentStep === 3" class="step-content">
             <h4><i class="fas fa-bullhorn"></i> 触达渠道配置</h4>
-            
-            <!-- 渠道优先级建议 -->
-            <div class="channel-priority-ai">
-              <div class="ai-badge"><i class="fas fa-robot"></i> AI 建议</div>
-              <div class="priority-text">
-                根据目标客户特征,建议优先使用 <strong>邮件</strong> + <strong>LinkedIn</strong> 组合,
-                预计打开率可达 <span class="highlight">48%</span>
-              </div>
-            </div>
 
             <div class="channel-grid">
               <div v-for="ch in availableChannels" :key="ch.id"
@@ -823,7 +758,7 @@
               </div>
               <div class="form-row">
                 <div class="form-group">
-                  <label class="form-label">邮件模板</label>
+                  <label class="form-label">生成方式</label>
                   <select class="form-select" v-model="newCampaign.emailTemplate">
                     <option value="default">默认模板</option>
                     <option value="professional">专业商务</option>
@@ -846,7 +781,7 @@
                 <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生成
+                    <i class="fas fa-magic"></i> AI优化
                   </button>
                 </div>
                 <div class="subject-suggestions" v-if="showSubjectSuggestions">
@@ -860,20 +795,6 @@
                 <label class="form-label">邮件预览文本</label>
                 <input type="text" class="form-input" v-model="newCampaign.emailPreviewText" placeholder="邮件列表中显示的预览文字(可选)">
               </div>
-              <div class="tracking-options">
-                <label class="toggle-option">
-                  <input type="checkbox" v-model="newCampaign.trackOpen">
-                  <span class="toggle-label">追踪邮件打开</span>
-                </label>
-                <label class="toggle-option">
-                  <input type="checkbox" v-model="newCampaign.trackClick">
-                  <span class="toggle-label">追踪链接点击</span>
-                </label>
-                <label class="toggle-option">
-                  <input type="checkbox" v-model="newCampaign.trackReply">
-                  <span class="toggle-label">追踪客户回复</span>
-                </label>
-              </div>
             </div>
 
             <!-- WhatsApp设置 -->
@@ -924,34 +845,6 @@
                 </div>
               </div>
             </div>
-
-            <!-- 渠道组合效果预测 -->
-            <div class="channel-effect-prediction">
-              <h5><i class="fas fa-chart-bar"></i> 渠道效果预测</h5>
-              <div class="effect-metrics">
-                <div class="effect-item">
-                  <div class="effect-icon"><i class="fas fa-envelope-open"></i></div>
-                  <div class="effect-info">
-                    <div class="effect-label">预计打开率</div>
-                    <div class="effect-value">{{ predictedOpenRate }}%</div>
-                  </div>
-                </div>
-                <div class="effect-item">
-                  <div class="effect-icon"><i class="fas fa-reply"></i></div>
-                  <div class="effect-info">
-                    <div class="effect-label">预计回复率</div>
-                    <div class="effect-value">{{ predictedReplyRate }}%</div>
-                  </div>
-                </div>
-                <div class="effect-item highlight">
-                  <div class="effect-icon"><i class="fas fa-bullseye"></i></div>
-                  <div class="effect-info">
-                    <div class="effect-label">预计转化商机</div>
-                    <div class="effect-value">{{ predictedOpportunities }}</div>
-                  </div>
-                </div>
-              </div>
-            </div>
           </div>
 
           <!-- Step 4: Automation Rules -->
@@ -1021,7 +914,7 @@
                      @click="newCampaign.rules.noReplyFollowup = !newCampaign.rules.noReplyFollowup"></div>
                 <div class="rule-content">
                   <div class="rule-title">未回复自动跟进</div>
-                  <div class="rule-desc">7天后通过 WhatsApp/LinkedIn 跟进</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">
@@ -1031,14 +924,6 @@
                   </select>
                 </div>
               </div>
-              <div class="rule-item">
-                <div class="rule-toggle" :class="{ active: newCampaign.rules.noClickFollowup }"
-                     @click="newCampaign.rules.noClickFollowup = !newCampaign.rules.noClickFollowup"></div>
-                <div class="rule-content">
-                  <div class="rule-title">未点击链接跟进</div>
-                  <div class="rule-desc">5天后发送产品介绍邮件</div>
-                </div>
-              </div>
               <div class="rule-item">
                 <div class="rule-toggle" :class="{ active: newCampaign.rules.stopOnReply }"
                      @click="newCampaign.rules.stopOnReply = !newCampaign.rules.stopOnReply"></div>
@@ -1047,14 +932,6 @@
                   <div class="rule-desc">检测到客户回复后不再发送,转人工跟进</div>
                 </div>
               </div>
-              <div class="rule-item">
-                <div class="rule-toggle" :class="{ active: newCampaign.rules.stopOnBooking }"
-                     @click="newCampaign.rules.stopOnBooking = !newCampaign.rules.stopOnBooking"></div>
-                <div class="rule-content">
-                  <div class="rule-title">客户预约后停止</div>
-                  <div class="rule-desc">检测到客户预约会议后暂停序列</div>
-                </div>
-              </div>
             </div>
 
             <!-- A/B 测试 -->
@@ -1202,27 +1079,6 @@
                     <div class="preview-value highlight">{{ selectedCustomerCount }} 位</div>
                   </div>
                 </div>
-                <div class="preview-card">
-                  <div class="preview-icon"><i class="fas fa-globe"></i></div>
-                  <div class="preview-info">
-                    <div class="preview-label">主要地区</div>
-                    <div class="preview-value">{{ getRegionLabel(newCampaign.filters.region) }}</div>
-                  </div>
-                </div>
-                <div class="preview-card">
-                  <div class="preview-icon"><i class="fas fa-industry"></i></div>
-                  <div class="preview-info">
-                    <div class="preview-label">目标行业</div>
-                    <div class="preview-value">{{ getIndustryLabel(newCampaign.filters.industry) }}</div>
-                  </div>
-                </div>
-                <div class="preview-card">
-                  <div class="preview-icon"><i class="fas fa-star"></i></div>
-                  <div class="preview-info">
-                    <div class="preview-label">平均意向分</div>
-                    <div class="preview-value">72 分</div>
-                  </div>
-                </div>
               </div>
             </div>
 
@@ -1262,42 +1118,6 @@
               </div>
             </div>
 
-            <!-- 预计效果 -->
-            <div class="estimated-impact">
-              <h5><i class="fas fa-chart-line"></i> 预计效果</h5>
-              <div class="impact-metrics">
-                <div class="impact-metric">
-                  <div class="metric-icon"><i class="fas fa-envelope-open"></i></div>
-                  <div class="metric-value">{{ Math.round(selectedCustomerCount * predictedOpenRate / 100) }}</div>
-                  <div class="metric-label">预计打开</div>
-                  <div class="metric-rate">{{ predictedOpenRate }}%</div>
-                </div>
-                <div class="impact-metric">
-                  <div class="metric-icon"><i class="fas fa-reply"></i></div>
-                  <div class="metric-value">{{ Math.round(selectedCustomerCount * predictedReplyRate / 100) }}</div>
-                  <div class="metric-label">预计回复</div>
-                  <div class="metric-rate">{{ predictedReplyRate }}%</div>
-                </div>
-                <div class="impact-metric">
-                  <div class="metric-icon"><i class="fas fa-mouse-pointer"></i></div>
-                  <div class="metric-value">{{ Math.round(selectedCustomerCount * 0.08) }}</div>
-                  <div class="metric-label">预计点击</div>
-                  <div class="metric-rate">8%</div>
-                </div>
-                <div class="impact-metric">
-                  <div class="metric-icon"><i class="fas fa-bullseye"></i></div>
-                  <div class="metric-value">{{ Math.round(selectedCustomerCount * 0.05) }}</div>
-                  <div class="metric-label">预计商机</div>
-                  <div class="metric-rate">5%</div>
-                </div>
-                <div class="impact-metric highlight">
-                  <div class="metric-icon"><i class="fas fa-dollar-sign"></i></div>
-                  <div class="metric-value">¥{{ (selectedCustomerCount * 2.5).toFixed(0) }}K</div>
-                  <div class="metric-label">预计营收</div>
-                </div>
-              </div>
-            </div>
-
             <!-- 警告提示 -->
             <div class="warning-section" v-if="hasWarnings">
               <h5><i class="fas fa-exclamation-triangle"></i> 注意事项</h5>
@@ -1335,11 +1155,6 @@
                 <span class="checkmark"></span>
                 <span>已确认符合反垃圾邮件法规(GDPR/CAN-SPAM)</span>
               </label>
-              <label class="confirm-item">
-                <input type="checkbox" v-model="confirmChecks.unsubscribe">
-                <span class="checkmark"></span>
-                <span>已确认邮件包含退订链接</span>
-              </label>
             </div>
           </div>
         </div>
@@ -1444,6 +1259,9 @@
         </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>
@@ -1516,7 +1334,7 @@
               </button>
             </div>
             <div class="generator-output">
-              <h4>生成结果</h4>
+              <h4>效果预览</h4>
               <div v-if="!generatedEmail.subject" class="output-placeholder">
                 <i class="fas fa-envelope-open-text"></i>
                 <p>填写表单并点击生成</p>
@@ -1541,11 +1359,8 @@
         </div>
         <div class="modal-footer">
           <button class="btn btn-secondary" @click="showAIModal = false">关闭</button>
-          <button v-if="generatedEmail.subject" class="btn btn-secondary" @click="copyEmail">
-            <i class="fas fa-copy"></i> 复制
-          </button>
           <button v-if="generatedEmail.subject" class="btn btn-primary" @click="useEmail">
-            <i class="fas fa-check"></i> 使用此邮件
+            <i class="fas fa-check"></i> 保存使用
           </button>
         </div>
       </div>
@@ -2057,7 +1872,7 @@
             <button class="filter-btn active">全部</button>
             <button class="filter-btn">高价值</button>
             <button class="filter-btn">已保护</button>
-            <button class="filter-btn">待审核</button>
+            <button class="filter-btn">营销暂停</button>
           </div>
           <div class="customers-list">
             <div v-for="customer in openedCustomers" :key="customer.id" class="customer-item" :class="{ protected: customer.protected }">
@@ -2071,22 +1886,8 @@
                   </div>
                   <div class="customer-email">{{ customer.email }}</div>
                 </div>
-                <div class="customer-badges">
-                  <span class="value-badge" :class="customer.value">{{ customer.value }}</span>
-                  <span class="engagement-badge" :style="{ background: customer.engagement === '高' ? 'rgba(16, 185, 129, 0.2)' : customer.engagement === '中' ? 'rgba(245, 158, 11, 0.2)' : 'rgba(107, 114, 128, 0.2)', color: customer.engagement === '高' ? '#10B981' : customer.engagement === '中' ? '#F59E0B' : '#6B7280' }">
-                    {{ customer.engagement }}参与度
-                  </span>
-                </div>
               </div>
               <div class="customer-details">
-                <div class="detail-item">
-                  <span class="label">年采购额:</span>
-                  <span class="value">{{ customer.annualPurchase }}</span>
-                </div>
-                <div class="detail-item">
-                  <span class="label">最后订单:</span>
-                  <span class="value">{{ customer.lastOrder }}</span>
-                </div>
                 <div class="detail-item">
                   <span class="label">打开时间:</span>
                   <span class="value">{{ customer.openTime }}</span>
@@ -2109,9 +1910,6 @@
                 <button class="btn btn-secondary btn-sm" @click="resumeCampaignForCustomer(customer)" v-else title="恢复向该客户发送邮件">
                   <i class="fas fa-play"></i> 恢复
                 </button>
-                <button class="btn btn-primary btn-sm" @click="assignToSalesRep(customer, '销售人员')" title="分配给销售人员进行人工跟进">
-                  <i class="fas fa-user-tie"></i> 分配销售
-                </button>
               </div>
             </div>
           </div>
@@ -2130,22 +1928,22 @@
       <div class="modal detail-modal">
         <div class="modal-header">
           <div class="modal-title">
-            <i class="fas fa-reply"></i> 回复邮件审核 ({{ repliedCustomers.length }}个)
+            <i class="fas fa-reply"></i> 回复邮件的客户 ({{ repliedCustomers.length }}个)
           </div>
           <button class="modal-close" @click="showReplyReviewModal = false"><i class="fas fa-times"></i></button>
         </div>
         <div class="modal-body">
           <div class="review-stats">
             <div class="stat-box">
-              <span class="stat-label">待审核</span>
+              <span class="stat-label">全部</span>
               <span class="stat-value">{{ repliedCustomers.filter(r => r.status === 'pending-review').length }}</span>
             </div>
             <div class="stat-box">
-              <span class="stat-label">需人工介入</span>
+              <span class="stat-label">已保护</span>
               <span class="stat-value">{{ repliedCustomers.filter(r => r.requiresHumanReview).length }}</span>
             </div>
             <div class="stat-box">
-              <span class="stat-label">高优先级</span>
+              <span class="stat-label">营销暂停</span>
               <span class="stat-value">{{ repliedCustomers.filter(r => r.priority === '高').length }}</span>
             </div>
           </div>
@@ -2155,26 +1953,16 @@
                 <div class="reply-info">
                   <div class="reply-name">
                     {{ reply.name }}
-                    <span v-if="reply.requiresHumanReview" class="review-required-badge">
-                      <i class="fas fa-exclamation-circle"></i> 需人工审核
-                    </span>
                   </div>
                   <div class="reply-email">{{ reply.email }}</div>
                 </div>
                 <div class="reply-badges">
-                  <span class="sentiment-badge" :style="{ background: getSentimentColor(reply.sentiment) + '20', color: getSentimentColor(reply.sentiment) }">
-                    {{ reply.sentiment }}
-                  </span>
                   <span class="priority-badge" :class="reply.priority">
                     {{ reply.priority }}优先级
                   </span>
                   <span class="value-badge" :class="reply.value">{{ reply.value }}</span>
                 </div>
               </div>
-              <div class="reply-customer-info">
-                <span>年采购额: {{ reply.annualPurchase }}</span>
-                <span>最后订单: {{ reply.lastOrder }}</span>
-              </div>
               <div class="reply-time">回复时间: {{ reply.replyTime }}</div>
               <div class="reply-content">
                 <p>{{ reply.replyContent }}</p>
@@ -2183,25 +1971,20 @@
                 <i class="fas fa-lightbulb"></i>
                 <span>{{ reply.reviewNotes }}</span>
               </div>
-              <div class="reply-actions" v-if="reply.status === 'pending-review'" @click.stop>
-                <button class="btn btn-secondary btn-sm" @click="rejectReplyWithReason(reply, '不符合要求')">
-                  <i class="fas fa-times"></i> 拒绝
+              <div class="reply-actions">
+                <button v-if="!reply.protected" class="btn btn-secondary btn-sm" @click="protectCustomer(reply)" title="添加到保护白名单">
+                  <i class="fas fa-shield-alt"></i> 保护
+                </button>
+                <button v-else class="btn btn-secondary btn-sm" @click="unprotectCustomer(reply)" title="从保护白名单中移除">
+                  <i class="fas fa-times"></i> 取消保护
                 </button>
-                <button class="btn btn-secondary btn-sm" @click="assignReplyToSales(reply, '销售人员')">
-                  <i class="fas fa-user-tie"></i> 分配销售
+                <button class="btn btn-secondary btn-sm" @click="pauseCampaignForCustomer(reply)" v-if="reply.interventionStatus !== 'paused'" title="暂停向该客户发送邮件">
+                  <i class="fas fa-pause"></i> 暂停
                 </button>
-                <button class="btn btn-primary btn-sm" @click="approveReplyWithReview(reply, '当前用户')">
-                  <i class="fas fa-check"></i> 批准跟进
+                <button class="btn btn-secondary btn-sm" @click="resumeCampaignForCustomer(reply)" v-else title="恢复向该客户发送邮件">
+                  <i class="fas fa-play"></i> 恢复
                 </button>
               </div>
-              <div class="reply-status" v-else @click.stop>
-                <span class="status-badge" :class="reply.status">
-                  {{ reply.status === 'approved' ? '✓ 已批准' : reply.status === 'rejected' ? '✗ 已拒绝' : '→ 已分配' }}
-                </span>
-                <span class="review-info" v-if="reply.reviewedBy">
-                  审核人: {{ reply.reviewedBy }} | 时间: {{ reply.reviewTime }}
-                </span>
-              </div>
             </div>
           </div>
         </div>
@@ -2219,7 +2002,7 @@
       <div class="modal detail-modal">
         <div class="modal-header">
           <div class="modal-title">
-            <i class="fas fa-hand-paper"></i> 人工干预与客户保护 - {{ selectedIntervention?.name }}
+            <i class="fas fa-hand-paper"></i> 人工干预
           </div>
           <button class="modal-close" @click="showInterventionModal = false"><i class="fas fa-times"></i></button>
         </div>
@@ -2229,13 +2012,12 @@
               <i class="fas fa-shield-alt"></i> 客户保护白名单
             </div>
             <div class="tab-item" @click="selectedIntervention.activeTab = 'history'">
-              <i class="fas fa-hand-paper"></i> 干预历史
+              <i class="fas fa-hand-paper"></i> 营销暂停
             </div>
           </div>
 
           <!-- Protected Customers List -->
           <div v-if="!selectedIntervention.activeTab || selectedIntervention.activeTab === 'protected'" class="detail-section">
-            <h5>受保护的客户 ({{ protectedCustomersList.length }})</h5>
             <div class="protected-customers">
               <div v-for="customer in protectedCustomersList" :key="customer.id" class="protected-customer-item">
                 <div class="customer-header">
@@ -2248,10 +2030,6 @@
                     </div>
                     <div class="customer-email">{{ customer.email }}</div>
                   </div>
-                  <div class="customer-meta">
-                    <span class="meta-item">年值: {{ customer.annualValue }}</span>
-                    <span class="meta-item">销售: {{ customer.assignedSalesRep }}</span>
-                  </div>
                 </div>
                 <div class="customer-details">
                   <span class="detail">保护原因: {{ customer.reason }}</span>
@@ -2288,41 +2066,6 @@
             </div>
           </div>
 
-          <!-- Intervention Types -->
-          <div class="detail-section">
-            <h5>干预类型</h5>
-            <div class="intervention-options">
-              <div class="option-item" @click="createIntervention('客户保护', '高价值客户需要人工跟进')">
-                <i class="fas fa-shield-alt"></i>
-                <div>
-                  <div class="option-title">客户保护</div>
-                  <div class="option-desc">将高价值客户添加到保护白名单,由销售人员专属跟进</div>
-                </div>
-              </div>
-              <div class="option-item" @click="createIntervention('审核干预', '所有回复邮件需人工审核')">
-                <i class="fas fa-check-circle"></i>
-                <div>
-                  <div class="option-title">审核干预</div>
-                  <div class="option-desc">所有回复邮件必须经过人工审核后才能进行后续跟进</div>
-                </div>
-              </div>
-              <div class="option-item" @click="createIntervention('内容调整', '根据客户数据调整邮件内容')">
-                <i class="fas fa-edit"></i>
-                <div>
-                  <div class="option-title">内容调整</div>
-                  <div class="option-desc">根据客户历史数据调整邮件内容,提高相关性和转化率</div>
-                </div>
-              </div>
-              <div class="option-item" @click="createIntervention('发送暂停', '等待销售人员反馈')">
-                <i class="fas fa-pause-circle"></i>
-                <div>
-                  <div class="option-title">发送暂停</div>
-                  <div class="option-desc">暂停向该客户群体发送邮件,等待销售团队的跟进反馈</div>
-                </div>
-              </div>
-            </div>
-          </div>
-
           <!-- Current Interventions -->
           <div class="detail-section">
             <h5>现有干预</h5>
@@ -2518,15 +2261,12 @@ const confirmChecks = ref({ content: false, schedule: false, compliance: false,
 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: '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 },
-  { id: 'whatsapp', name: 'WhatsApp', icon: 'fab fa-whatsapp', iconBg: 'rgba(37, 211, 102, 0.2)', iconColor: '#25D366', description: '即时通讯触达', enabled: true, avgOpenRate: 78 },
-  { id: 'linkedin', name: 'LinkedIn', icon: 'fab fa-linkedin', iconBg: 'rgba(10, 102, 194, 0.2)', iconColor: '#0A66C2', description: '社交销售', enabled: true, avgOpenRate: 52 },
-  { id: 'wechat', name: '微信企业号', icon: 'fab fa-weixin', iconBg: 'rgba(7, 193, 96, 0.2)', iconColor: '#07C160', description: '中国客户', enabled: true, avgOpenRate: 65 }
 ]
 
 const sopTemplates = [
@@ -3183,7 +2923,7 @@ const editCampaign = (campaign) => {
 .required { color: var(--danger); }
 
 /* Goal Inputs Enhancement */
-.goal-inputs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
+.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; }
@@ -3440,10 +3180,10 @@ const editCampaign = (campaign) => {
 .required { color: var(--danger); }
 
 /* Goal Inputs */
-.goal-inputs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
+.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: 60px; 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-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 */
@@ -3506,7 +3246,7 @@ const editCampaign = (campaign) => {
 
 .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(3, 1fr); gap: 12px; }
+.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); }
@@ -3623,18 +3363,20 @@ const editCampaign = (campaign) => {
 .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(5, 1fr); gap: 12px; }
-.metric-card { display: flex; align-items: center; gap: 12px; padding: 14px; background: var(--bg-card); border-radius: 10px; }
-.metric-card.highlight { background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.2); }
-.metric-icon { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 16px; }
-.metric-icon.blue { background: rgba(99, 102, 241, 0.2); color: var(--primary); }
-.metric-icon.green { background: rgba(16, 185, 129, 0.2); color: var(--success); }
-.metric-icon.purple { background: rgba(139, 92, 246, 0.2); color: var(--secondary); }
-.metric-icon.orange { background: rgba(245, 158, 11, 0.2); color: var(--warning); }
-.metric-icon.success { background: rgba(16, 185, 129, 0.2); color: var(--success); }
-.metric-content .metric-value { font-size: 18px; font-weight: 700; }
-.metric-content .metric-label { font-size: 11px; color: var(--text-muted); }
-.metric-card.highlight .metric-value { color: var(--success); }
+.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; }
@@ -3646,14 +3388,14 @@ const editCampaign = (campaign) => {
 .status-dot { width: 8px; height: 8px; border-radius: 50%; }
 .status-dot.active { background: var(--success); }
 
-.target-info { display: flex; align-items: center; gap: 24px; }
-.target-stat { text-align: center; padding: 16px 24px; background: var(--bg-card); border-radius: 10px; }
-.target-value { font-size: 24px; font-weight: 700; color: var(--text-primary); }
-.target-label { font-size: 11px; color: var(--text-muted); margin-top: 4px; }
-.target-breakdown { flex: 1; display: flex; flex-direction: column; gap: 10px; padding-left: 24px; border-left: 1px solid var(--border); }
-.breakdown-item { display: flex; justify-content: space-between; font-size: 13px; }
-.breakdown-label { color: var(--text-muted); }
-.breakdown-value { font-weight: 600; }
+.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-detail { }
 .sop-header-info { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }