| 
					
				 | 
			
			
				@@ -0,0 +1,219 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { Component, OnInit, OnDestroy } from '@angular/core'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { Router } from '@angular/router'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { ModalController } from '@ionic/angular'; // 确保导入 ModalController 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { ArticleCardComponent } from '../component/article-card/article-card.component'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { CommonModule } from '@angular/common'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { CloudObject, CloudQuery, CloudUser } from 'src/lib/ncloud'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { FormsModule } from '@angular/forms'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  airplane, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  bluetooth, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  call, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  wifi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  chevronDownCircle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  chevronForwardCircle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  chevronUpCircle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  colorPalette, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  document, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  globe 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} from 'ionicons/icons'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { addIcons } from 'ionicons'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { IonicModule } from '@ionic/angular'; // 导入 IonicModule 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+addIcons({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  airplane, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  bluetooth, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  call, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  wifi, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  chevronDownCircle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  chevronForwardCircle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  chevronUpCircle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  colorPalette, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  document, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  globe 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Component({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  selector: 'app-tab2', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  templateUrl: 'tab2.page.html', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  styleUrls: ['tab2.page.scss'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  standalone: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  imports: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    IonicModule, // 添加 IonicModule 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CommonModule, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    FormsModule, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ArticleCardComponent, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 其他自定义组件或模块 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export class Tab2Page implements OnInit, OnDestroy { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  selectedSegment: string = '热点'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  segments: string[] = ['热点', '专家科普', '睡眠', '生活', '男性', '女性', '两性', '辟谣', '母婴', '美容']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  images: string[] = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'https://picsum.photos/800/400?random=7', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'https://picsum.photos/800/400?random=8', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'https://picsum.photos/800/400?random=9', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'https://picsum.photos/800/400?random=10', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'https://picsum.photos/800/400?random=11', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    'https://picsum.photos/800/400?random=12', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  currentSlide: number = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  intervalId: any; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  products: CloudObject[] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  allCards: CloudObject[] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  cards: CloudObject[] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  searchTerm: string = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  comment: string = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  shareLink: string = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  isModalOpen: boolean = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  currentProduct: CloudObject | null = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  shareDetail: boolean = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  isLoading: boolean = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  constructor( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private modalCtrl: ModalController, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private router: Router 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ) { } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ngOnInit() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.loadAllCards(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.loadCards(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.startAutoSlide(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ngOnDestroy() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (this.intervalId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      clearInterval(this.intervalId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 轮播图功能 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  nextSlide() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.currentSlide = (this.currentSlide + 1) % this.images.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  prevSlide() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.currentSlide = (this.currentSlide - 1 + this.images.length) % this.images.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  goToSlide(index: number) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.currentSlide = index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  startAutoSlide() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.intervalId = setInterval(() => this.nextSlide(), 3000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 搜索功能 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  async searchProducts(event: any) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.searchTerm = event.detail.value.toLowerCase(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (this.searchTerm) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.products = this.allCards.filter(product => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        product.get('topic').toLowerCase().includes(this.searchTerm) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        product.get('title').toLowerCase().includes(this.searchTerm) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        product.get('category').toLowerCase().includes(this.searchTerm) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        product.get('content')[0].toLowerCase().includes(this.searchTerm) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.products = [...this.allCards]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 分段控制 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  segmentChanged(event: any) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.selectedSegment = event.detail.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.loadCards(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 加载所有卡片 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  async loadAllCards() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.isLoading = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const query = new CloudQuery('HotDot'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.allCards = await query.find(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.products = [...this.allCards]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.error('加载所有卡片失败:', error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.isLoading = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  async loadCards() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.isLoading = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const query = new CloudQuery('HotDot'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    query.equalTo('category', this.selectedSegment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.cards = await query.find(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.error('加载分类卡片失败:', error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.isLoading = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 打开详细信息模态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  openDetailModal(product: CloudObject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const user = new CloudUser(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!user.id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.router.navigate(['/tabs/tab4']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.isModalOpen = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.currentProduct = product; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  closeDetailModal() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.isModalOpen = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.currentProduct = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 分享功能 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  shareDetailModal() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.shareDetail = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.shareLink = window.location.href; // 示例分享链接,可以根据需求调整 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  closeShareModal() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.shareDetail = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  copyLink() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    navigator.clipboard.writeText(this.shareLink).then(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.log('链接已复制'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 可以添加提示用户复制成功的反馈 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }).catch(err => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.error('复制失败:', err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 评论功能 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  onCommentInput(event: any) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.comment = event.detail.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  postComment() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (this.comment.trim()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 实现发布评论的逻辑,例如调用 API 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.log('发布评论:', this.comment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.comment = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 跟踪函数以优化 ngFor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  trackByIndex(index: number, item: any): number { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  trackById(index: number, item: CloudObject): string { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return item.id ?? `no-id-${index}`; // 确保返回 string 类型,避免 null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |