|
@@ -0,0 +1,197 @@
|
|
|
+import { Component, OnInit } from '@angular/core';
|
|
|
+import { CommonModule } from '@angular/common';
|
|
|
+import { FormsModule } from '@angular/forms';
|
|
|
+import {
|
|
|
+ IonHeader,
|
|
|
+ IonToolbar,
|
|
|
+ IonTitle,
|
|
|
+ IonContent,
|
|
|
+ IonList,
|
|
|
+ IonItem,
|
|
|
+ IonLabel,
|
|
|
+ IonToggle,
|
|
|
+ IonIcon,
|
|
|
+ IonBackButton,
|
|
|
+ IonButtons,
|
|
|
+ AlertController
|
|
|
+} from '@ionic/angular/standalone';
|
|
|
+import { addIcons } from 'ionicons';
|
|
|
+import {
|
|
|
+ moonOutline,
|
|
|
+ notificationsOutline,
|
|
|
+ languageOutline,
|
|
|
+ lockClosedOutline,
|
|
|
+ helpCircleOutline,
|
|
|
+ informationCircleOutline,
|
|
|
+ chevronForward,
|
|
|
+ eyeOutline
|
|
|
+} from 'ionicons/icons';
|
|
|
+
|
|
|
+@Component({
|
|
|
+ selector: 'app-settings',
|
|
|
+ templateUrl: './settings.page.html',
|
|
|
+ styleUrls: ['./settings.page.scss'],
|
|
|
+ standalone: true,
|
|
|
+ imports: [
|
|
|
+ CommonModule,
|
|
|
+ FormsModule,
|
|
|
+ IonHeader,
|
|
|
+ IonToolbar,
|
|
|
+ IonTitle,
|
|
|
+ IonContent,
|
|
|
+ IonList,
|
|
|
+ IonItem,
|
|
|
+ IonLabel,
|
|
|
+ IonToggle,
|
|
|
+ IonIcon,
|
|
|
+ IonBackButton,
|
|
|
+ IonButtons
|
|
|
+ ]
|
|
|
+})
|
|
|
+export class SettingsPage implements OnInit {
|
|
|
+ // 设置选项
|
|
|
+ settings = {
|
|
|
+ darkMode: false,
|
|
|
+ notifications: true,
|
|
|
+ language: '简体中文',
|
|
|
+ focusMode: false
|
|
|
+ };
|
|
|
+
|
|
|
+ constructor(private alertController: AlertController) {
|
|
|
+ addIcons({
|
|
|
+ moonOutline,
|
|
|
+ notificationsOutline,
|
|
|
+ languageOutline,
|
|
|
+ lockClosedOutline,
|
|
|
+ helpCircleOutline,
|
|
|
+ informationCircleOutline,
|
|
|
+ chevronForward,
|
|
|
+ eyeOutline
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ ngOnInit() {
|
|
|
+ // 从本地存储加载设置
|
|
|
+ this.loadSettings();
|
|
|
+ // 初始化深色模式
|
|
|
+ this.initDarkMode();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 加载设置
|
|
|
+ private loadSettings() {
|
|
|
+ const savedSettings = localStorage.getItem('appSettings');
|
|
|
+ if (savedSettings) {
|
|
|
+ this.settings = JSON.parse(savedSettings);
|
|
|
+ } else {
|
|
|
+ // 如果没有保存的设置,检查系统颜色模式偏好
|
|
|
+ const prefersDark = window.matchMedia('(prefers-color-scheme: dark)');
|
|
|
+ this.settings.darkMode = prefersDark.matches;
|
|
|
+ this.saveSettings();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 初始化深色模式
|
|
|
+ private initDarkMode() {
|
|
|
+ // 应用保存的深色模式设置
|
|
|
+ document.body.classList.toggle('dark', this.settings.darkMode);
|
|
|
+
|
|
|
+ // 监听系统颜色模式变化
|
|
|
+ const prefersDark = window.matchMedia('(prefers-color-scheme: dark)');
|
|
|
+ prefersDark.addListener((e) => {
|
|
|
+ if (e.matches) {
|
|
|
+ document.body.classList.add('dark');
|
|
|
+ this.settings.darkMode = true;
|
|
|
+ } else {
|
|
|
+ document.body.classList.remove('dark');
|
|
|
+ this.settings.darkMode = false;
|
|
|
+ }
|
|
|
+ this.saveSettings();
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 切换深色模式
|
|
|
+ toggleDarkMode(event: any) {
|
|
|
+ // 使用 event.detail.checked 来获取切换后的状态
|
|
|
+ this.settings.darkMode = event.detail.checked;
|
|
|
+ document.body.classList.toggle('dark', this.settings.darkMode);
|
|
|
+ this.saveSettings();
|
|
|
+
|
|
|
+ // 应用深色模式到所有相关组件
|
|
|
+ const elements = document.querySelectorAll('ion-content, ion-header, ion-toolbar');
|
|
|
+ elements.forEach(element => {
|
|
|
+ if (this.settings.darkMode) {
|
|
|
+ element.classList.add('dark');
|
|
|
+ } else {
|
|
|
+ element.classList.remove('dark');
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存设置
|
|
|
+ private saveSettings() {
|
|
|
+ localStorage.setItem('appSettings', JSON.stringify(this.settings));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 切换通知
|
|
|
+ toggleNotifications() {
|
|
|
+ this.settings.notifications = !this.settings.notifications;
|
|
|
+ this.saveSettings();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 选择语言
|
|
|
+ async selectLanguage() {
|
|
|
+ const alert = await this.alertController.create({
|
|
|
+ header: '选择语言',
|
|
|
+ inputs: [
|
|
|
+ {
|
|
|
+ label: '简体中文',
|
|
|
+ type: 'radio',
|
|
|
+ value: '简体中文',
|
|
|
+ checked: this.settings.language === '简体中文'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: 'English',
|
|
|
+ type: 'radio',
|
|
|
+ value: 'English',
|
|
|
+ checked: this.settings.language === 'English'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ buttons: [
|
|
|
+ {
|
|
|
+ text: '取消',
|
|
|
+ role: 'cancel'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ text: '确定',
|
|
|
+ handler: (value) => {
|
|
|
+ this.settings.language = value;
|
|
|
+ this.saveSettings();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ });
|
|
|
+
|
|
|
+ await alert.present();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加切换专注模式的方法
|
|
|
+ toggleFocusMode(event: any) {
|
|
|
+ this.settings.focusMode = event.detail.checked;
|
|
|
+ this.saveSettings();
|
|
|
+
|
|
|
+ // 如果开启专注模式,显示提示
|
|
|
+ if (this.settings.focusMode) {
|
|
|
+ this.showFocusModeEnabledAlert();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 显示专注模式开启提示
|
|
|
+ private async showFocusModeEnabledAlert() {
|
|
|
+ const alert = await this.alertController.create({
|
|
|
+ header: '专注模式已开启',
|
|
|
+ message: '在专注模式下,社区功能将被暂时关闭,帮助你专注于学习。',
|
|
|
+ buttons: ['我知道了']
|
|
|
+ });
|
|
|
+ await alert.present();
|
|
|
+ }
|
|
|
+}
|