import { Component, OnInit } from '@angular/core'; import * as Parse from 'parse'; import { ActivatedRoute, Router } from '@angular/router'; import { Swiper } from 'swiper'; import { AiChatService } from '../../../services/aichart.service'; import { ConnectTaskService } from '../../../services/connectTask.service'; import { ionicStandaloneModules, AlertController, LoadingController, ToastController, } from '../../ionic-standalone.modules'; import { CommonModule, DatePipe } from '@angular/common'; import { provinceMap } from '../../../services/address'; import { FormsModule } from '@angular/forms'; import { BackgroundColorService } from '../../../services/background-color.service'; import { DeviceService } from '../../../services/device.service'; import { InfiniteScrollCustomEvent } from '@ionic/core'; @Component({ selector: 'app-home', templateUrl: './home.component.html', styleUrls: ['./home.component.scss'], standalone: true, imports: [...ionicStandaloneModules, CommonModule, FormsModule], providers: [DatePipe], }) export class HomeComponent implements OnInit { options: Array = [ { label: '关注', value: 'follow', icon: 'home-outline', color: 'primary', }, { label: '热门', value: 'recommend', icon: 'home-outline', color: 'primary', }, { label: '新人', value: 'news', icon: 'videocam-outline', color: 'danger', }, { label: '三星', value: '三星', icon: 'videocam-outline', color: 'danger', }, { label: '四星', value: '四星', icon: 'videocam-outline', color: 'danger', }, { label: '五星', value: '五星', icon: 'people-outline', }, { label: '海外', value: '海外', icon: 'people-outline', }, ]; currentValue: string = 'recommend'; oldCurrentValue: string = 'recommend'; isOpen: boolean = false; //显示选择弹窗 banner: Array = []; roomList: Array = []; pageSwiper: Swiper | undefined | any; notices: Array = []; viewAnchor: string = localStorage.getItem('viewSex') || '女'; get sex(): string { const map: any = { all: '全部', 男: '男主播', 女: '女主播', }; return map[this.viewAnchor]; } isOpenCity: boolean = false; provinceColumns = []; cityColumns = []; province: string = ''; //省份 city: string = ''; //市 old_province: string = ''; //省份 old_city: string = ''; //市 isColumn: boolean = false; //单排 userList: Array | any = []; disbable: boolean = true; constructor( private loadingCtrl: LoadingController, private alertController: AlertController, // private activateRoute: ActivatedRoute, private connectTask: ConnectTaskService, private router: Router, private aiServ: AiChatService, private datePipe: DatePipe, private backgroundColorService: BackgroundColorService, private toastController: ToastController, public deviceSer: DeviceService ) { // province.unshift({ // provinceName: '全部', // citys: [ // { // cityName: '', // cityType: '', // }, // ], // }); this.provinceColumns = provinceMap.map((item) => item.provinceName); this.cityColumns = provinceMap[0].citys.map((item) => item.cityName); } ngOnInit() { // this.activateRoute.paramMap.subscribe(async (params) => { this.refresh(); this.backgroundColorService.setBackgroundColor('#fe5559'); // }); } async refresh() { const loading = await this.loadingCtrl.create({ message: '正在加载', }); loading.present(); await this.connectTask.init(); await this.getBanner(); await this.getNotice(); await this.getRoom(); setTimeout(() => { this.initSwiperTimeEvent(); loading.dismiss(); }, 100); } async getBanner() { let query = new Parse.Query('Banner'); query.equalTo('company', this.aiServ.company); query.descending('index'); query.equalTo('isEnabled', true); // query.equalTo('type', 'home'); query.notEqualTo('isDeleted', true); query.containedIn('type', ['home', 'userNotice']); let banner = await query.find(); this.banner = banner; } async getNotice() { let query = new Parse.Query('Notice'); query.equalTo('company', this.aiServ.company); query.notEqualTo('isDeleted', true); query.equalTo('type', 'application'); query.select('title', 'content'); query.descending('createdAt'); this.notices = await query.find(); } initSwiperTimeEvent() { // 初始化轮播图 let swiper = new Swiper('.mySwiper', { loop: true, // 循环模式选项 observer: false, //修改swiper自己或子元素时,自动初始化swiper observeParents: true, //修改swiper的父元素时,自动初始化swiper autoplay: { delay: 3000, }, pagination: { el: '.swiper-pagination', }, }); swiper.on('slideChange', function (event: any) { // console.log(event); }); let swiperNot = new Swiper('.swiper-notice', { loop: true, // 循环模式选项 observer: false, //修改swiper自己或子元素时,自动初始化swiper observeParents: true, //修改swiper的父元素时,自动初始化swiper autoplay: { delay: 3000, }, direction: 'vertical', }); } onChangeTab(type: string) { // console.log(type); if (type == this.oldCurrentValue) { return; } this.currentValue = type; // console.log(this.currentValue); this.roomList = []; this.disbable = true; this.getRoom(); } async getRoom() { const loading = await this.loadingCtrl.create({ message: '正在加载', }); loading.present(); let data: Array = []; this.oldCurrentValue = this.currentValue; let uid = Parse.User.current()?.id; let sex = this.viewAnchor == 'all' ? null : this.viewAnchor; if (!this.connectTask.onlineUserList.size) { await this.connectTask.getOnlieUserList('user_connect_room'); } this.userList = Array.from(this.connectTask.onlineUserList) || []; // console.log(userList); switch (this.currentValue) { case 'follow': data = await this.aiServ.getRooms({ uid: uid, skip: this.roomList.length, // users: userList, follow: true, sex, city: this.city, }); break; case 'recommend': data = await this.aiServ.getRooms({ uid: uid, skip: this.roomList.length, // users: userList, recommend: true, sex, city: this.city, }); break; case 'news': data = await this.aiServ.getRooms({ uid: uid, skip: this.roomList.length, // users: userList, sex, city: this.city, }); break; case '三星': data = await this.aiServ.getRooms({ uid: uid, skip: this.roomList.length, // users: userList, star: '三星', sex, city: this.city, }); break; case '四星': data = await this.aiServ.getRooms({ uid: uid, skip: this.roomList.length, // users: userList, star: '四星', sex, city: this.city, }); break; case '五星': data = await this.aiServ.getRooms({ uid: uid, skip: this.roomList.length, // users: userList, star: '五星', sex, city: this.city, }); break; case '海外': data = await this.aiServ.getRooms({ uid: uid, skip: this.roomList.length, // users: userList, star: '海外', sex, city: this.city, }); break; default: break; } if (data.length == 0) { loading.dismiss(); const toast = await this.toastController.create({ message: '已加载全部内容', duration: 1500, color: 'warning', }); toast.present(); return data.length; } this.roomList.push(...data); loading.dismiss(); return data.length; } async presentAlert(item: any) { const alert = await this.alertController.create({ header: item?.get('title') || '消息通知', subHeader: this.datePipe.transform(item?.createdAt, 'yyyy-MM-dd HH:mm')!, message: item?.get('content') || '', buttons: item?.get('url') ? [ { text: '关闭' }, { text: '确定', handler: () => { this.router.navigate([item?.get('url')]); }, }, ] : [{ text: '关闭' }], }); await alert.present(); } segmentChanged(e: any) { let { value } = e.detail; this.currentValue = value; } onIonChange(event: CustomEvent) { this.currentValue = event.detail.value; } /* 关闭弹窗回调 */ onDidDismiss(event: CustomEvent) { this.isOpen = false; // console.log(this.currentValue); } cancel(type: string, value?: string) { console.log(type, value); if (type == 'cancel') { this.currentValue = this.oldCurrentValue; this.isOpen = false; return; } else { if (this.oldCurrentValue != this.currentValue) { this.roomList = []; this.disbable = true; this.getRoom(); } this.oldCurrentValue = this.currentValue; this.isOpen = false; } } onChangeSex(e: any) { // console.log(e.detail.value); localStorage.setItem('viewSex', e.detail.value); if (e.detail.value == this.viewAnchor) return; this.viewAnchor = e.detail.value; this.roomList = []; this.disbable = true; this.getRoom(); } search() { this.router.navigate(['live/search']); } toUrl(url: string) { url && this.router.navigateByUrl(url); } changeCityCancel(type: string) { if (type === 'confirm') { if (this.city !== this.old_city) { this.roomList = []; this.disbable = true; this.getRoom(); } this.old_province = this.province; this.old_city = this.city; } else { this.province = this.old_province; this.city = this.old_city; } this.isOpenCity = false; } onIonChangeCity(event: CustomEvent, type: string) { let val = event.detail.value; switch (type) { case 'province': this.province = event.detail.value; this.cityColumns = provinceMap .find((item) => item.provinceName === val) ?.citys.map((item) => item.cityName)!; console.log(this.cityColumns); this.city = this.cityColumns[0]; break; case 'city': this.city = event.detail.value; break; } console.log(this.province, this.city); } async onIonInfinite(ev: any) { let result = await this.getRoom(); if (result == 0) { this.disbable = false; } setTimeout(() => { (ev as InfiniteScrollCustomEvent).target.complete(); }, 500); } }