|
@@ -1,219 +0,0 @@
|
|
|
-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
|
|
|
- }
|
|
|
-
|
|
|
-}
|