495 lines
14 KiB
Plaintext
495 lines
14 KiB
Plaintext
// 导入日志管理器 - 仅用于获取版本号
|
|
import logManager, { LogCategory, LogEventType, VersionLogItem } from './logtext';
|
|
import { UserModel, DatabaseService } from './DatabaseService';
|
|
import { hilog } from '@kit.PerformanceAnalysisKit';
|
|
|
|
// 可选的主题颜色
|
|
export enum ThemeColor {
|
|
BLUE = '#409eff',
|
|
GREEN = '#67C23A',
|
|
RED = '#F56C6C',
|
|
ORANGE = '#E6A23C',
|
|
PURPLE = '#909399'
|
|
}
|
|
|
|
// 可选的语言
|
|
export enum Language {
|
|
CHINESE = '中文',
|
|
ENGLISH = 'English'
|
|
}
|
|
|
|
// 用户信息模型 - 更新为从数据库获取
|
|
@Observed
|
|
export class UserInfoModel {
|
|
account: string = '';
|
|
avatar: string = '';
|
|
name: string = '';
|
|
email: string = '';
|
|
phone: string = '';
|
|
category: string = '';
|
|
|
|
constructor(account: string = '',
|
|
avatar: string = '',
|
|
name: string = '',
|
|
email: string = '',
|
|
phone: string = '',
|
|
category: string = '') {
|
|
this.account = account;
|
|
this.avatar = avatar || 'http://139.155.155.67:2342/images/default_avatar.png';
|
|
this.name = name;
|
|
this.email = email;
|
|
this.phone = phone;
|
|
this.category = category;
|
|
}
|
|
}
|
|
|
|
// 多语言文本集合
|
|
export class TextResources {
|
|
// 通用
|
|
title: string = '';
|
|
|
|
// 首页
|
|
homeTitle: string = '';
|
|
classroomMonitor: string = '';
|
|
comprehensiveData: string = '';
|
|
|
|
// 上课页面
|
|
classPageTitle: string = '';
|
|
classData: string = '';
|
|
teacher: string = '';
|
|
classroom: string = '';
|
|
|
|
// 设置页面
|
|
settingsTitle: string = '';
|
|
systemSettings: string = '';
|
|
themeColor: string = '';
|
|
languageText: string = '';
|
|
notificationSettings: string = '';
|
|
about: string = '';
|
|
versionInfo: string = '';
|
|
|
|
// 版本日志相关
|
|
versionLog: string = '';
|
|
versionHistory: string = '';
|
|
latestVersion: string = '';
|
|
noVersionInfo: string = '';
|
|
|
|
// 颜色名称
|
|
blue: string = '';
|
|
green: string = '';
|
|
red: string = '';
|
|
orange: string = '';
|
|
purple: string = '';
|
|
|
|
// 底部导航
|
|
home: string = '';
|
|
class: string = '';
|
|
settings: string = '';
|
|
|
|
// 通知状态
|
|
enabled: string = '';
|
|
disabled: string = '';
|
|
}
|
|
|
|
// 设置项模型
|
|
export class SettingsModel {
|
|
themeColor: ThemeColor = ThemeColor.BLUE;
|
|
language: Language = Language.CHINESE;
|
|
notificationEnabled: boolean = true;
|
|
|
|
constructor(themeColor: ThemeColor = ThemeColor.BLUE,
|
|
language: Language = Language.CHINESE,
|
|
notificationEnabled: boolean = true) {
|
|
this.themeColor = themeColor;
|
|
this.language = language;
|
|
this.notificationEnabled = notificationEnabled;
|
|
}
|
|
}
|
|
|
|
// 中文文本资源
|
|
const chineseTexts: TextResources = new TextResources();
|
|
// 通用
|
|
chineseTexts.title = '智慧教室管理系统';
|
|
// 首页
|
|
chineseTexts.homeTitle = '首页';
|
|
chineseTexts.classroomMonitor = '教室监控';
|
|
chineseTexts.comprehensiveData = '综合上课数据';
|
|
// 上课页面
|
|
chineseTexts.classPageTitle = '上课';
|
|
chineseTexts.classData = '上课数据';
|
|
chineseTexts.teacher = '授课教师';
|
|
chineseTexts.classroom = '教室';
|
|
// 设置页面
|
|
chineseTexts.settingsTitle = '设置';
|
|
chineseTexts.systemSettings = '系统设置';
|
|
chineseTexts.themeColor = '主题颜色';
|
|
chineseTexts.languageText = '语言';
|
|
chineseTexts.notificationSettings = '通知设置';
|
|
chineseTexts.about = '关于';
|
|
chineseTexts.versionInfo = '版本信息';
|
|
// 版本日志相关
|
|
chineseTexts.versionLog = '更新日志';
|
|
chineseTexts.versionHistory = '版本历史';
|
|
chineseTexts.latestVersion = '最新版本';
|
|
chineseTexts.noVersionInfo = '没有版本信息';
|
|
// 颜色名称
|
|
chineseTexts.blue = '蓝色';
|
|
chineseTexts.green = '绿色';
|
|
chineseTexts.red = '红色';
|
|
chineseTexts.orange = '橙色';
|
|
chineseTexts.purple = '紫色';
|
|
// 底部导航
|
|
chineseTexts.home = '首页';
|
|
chineseTexts.class = '上课';
|
|
chineseTexts.settings = '设置';
|
|
// 通知状态
|
|
chineseTexts.enabled = '开启';
|
|
chineseTexts.disabled = '关闭';
|
|
|
|
// 英文文本资源
|
|
const englishTexts: TextResources = new TextResources();
|
|
// 通用
|
|
englishTexts.title = 'Smart Classroom Management System';
|
|
// 首页
|
|
englishTexts.homeTitle = 'Home';
|
|
englishTexts.classroomMonitor = 'Classroom Monitor';
|
|
englishTexts.comprehensiveData = 'Comprehensive Class Data';
|
|
// 上课页面
|
|
englishTexts.classPageTitle = 'Class';
|
|
englishTexts.classData = 'Class Data';
|
|
englishTexts.teacher = 'Teacher';
|
|
englishTexts.classroom = 'Classroom';
|
|
// 设置页面
|
|
englishTexts.settingsTitle = 'Settings';
|
|
englishTexts.systemSettings = 'System Settings';
|
|
englishTexts.themeColor = 'Theme Color';
|
|
englishTexts.languageText = 'Language';
|
|
englishTexts.notificationSettings = 'Notification Settings';
|
|
englishTexts.about = 'About';
|
|
englishTexts.versionInfo = 'Version Information';
|
|
// 版本日志相关
|
|
englishTexts.versionLog = 'Update Log';
|
|
englishTexts.versionHistory = 'Version History';
|
|
englishTexts.latestVersion = 'Latest Version';
|
|
englishTexts.noVersionInfo = 'No Version Information';
|
|
// 颜色名称
|
|
englishTexts.blue = 'Blue';
|
|
englishTexts.green = 'Green';
|
|
englishTexts.red = 'Red';
|
|
englishTexts.orange = 'Orange';
|
|
englishTexts.purple = 'Purple';
|
|
// 底部导航
|
|
englishTexts.home = 'Home';
|
|
englishTexts.class = 'Class';
|
|
englishTexts.settings = 'Settings';
|
|
// 通知状态
|
|
englishTexts.enabled = 'Enabled';
|
|
englishTexts.disabled = 'Disabled';
|
|
|
|
// 全局设置服务
|
|
export class SettingsService {
|
|
private static instance: SettingsService;
|
|
private settings: SettingsModel;
|
|
// 添加用户信息存储
|
|
private userInfo: UserInfoModel;
|
|
// 当前登录账号
|
|
private currentAccount: string = '';
|
|
// 数据库服务实例
|
|
private dbService: DatabaseService = DatabaseService.getInstance();
|
|
// 语言变化的回调函数
|
|
private languageChangeCallbacks: (() => void)[] = [];
|
|
// 颜色
|
|
private colorChangeCallbacks: (() => void)[] = [];
|
|
// 添加通知状态回调
|
|
private notificationChangeCallbacks: (() => void)[] = [];
|
|
// 添加用户信息变化回调
|
|
private userInfoChangeCallbacks: (() => void)[] = [];
|
|
|
|
private constructor() {
|
|
// 初始化默认设置
|
|
this.settings = new SettingsModel();
|
|
// 初始化默认用户信息
|
|
this.userInfo = new UserInfoModel();
|
|
|
|
// 注册数据库用户数据变化回调
|
|
this.dbService.registerUserDataChangeCallback(() => {
|
|
this.refreshUserInfo();
|
|
});
|
|
}
|
|
|
|
// 获取当前最新版本号 - 与版本日志同步
|
|
public getCurrentVersion(): string {
|
|
return logManager.getLatestVersion();
|
|
}
|
|
|
|
// 获取所有版本日志
|
|
public getVersionLogs(): VersionLogItem[] {
|
|
return logManager.getVersionLogs();
|
|
}
|
|
|
|
// 添加新版本日志
|
|
public addVersionLog(versionLog: VersionLogItem): void {
|
|
logManager.addVersionLog(versionLog);
|
|
}
|
|
|
|
// 单例模式获取实例
|
|
public static getInstance(): SettingsService {
|
|
if (!SettingsService.instance) {
|
|
SettingsService.instance = new SettingsService();
|
|
}
|
|
return SettingsService.instance;
|
|
}
|
|
|
|
// 获取当前设置
|
|
public getSettings(): SettingsModel {
|
|
return this.settings;
|
|
}
|
|
|
|
// 获取用户信息
|
|
public getUserInfo(): UserInfoModel {
|
|
return this.userInfo;
|
|
}
|
|
|
|
// 设置当前用户账号
|
|
public setCurrentAccount(account: string): void {
|
|
this.currentAccount = account;
|
|
this.refreshUserInfo();
|
|
}
|
|
|
|
// 获取当前用户账号
|
|
public getCurrentAccount(): string {
|
|
return this.currentAccount;
|
|
}
|
|
|
|
// 刷新用户信息
|
|
private refreshUserInfo(): void {
|
|
if (this.currentAccount) {
|
|
const user = this.dbService.getUserByAccount(this.currentAccount);
|
|
if (user) {
|
|
this.userInfo.account = user.account;
|
|
this.userInfo.name = user.nickname;
|
|
this.userInfo.email = user.email;
|
|
this.userInfo.phone = user.phone;
|
|
this.userInfo.avatar = user.photo;
|
|
this.userInfo.category = user.category;
|
|
|
|
// 通知用户信息发生变化
|
|
this.notifyUserInfoChange();
|
|
}
|
|
}
|
|
}
|
|
|
|
// 更新用户邮箱
|
|
public async updateUserEmail(newEmail: string): Promise<boolean> {
|
|
// 验证邮箱格式
|
|
if (!this.dbService.validateEmailFormat(newEmail)) {
|
|
return false;
|
|
}
|
|
|
|
// 更新数据库 (使用await处理异步调用)
|
|
if (this.currentAccount) {
|
|
const updated = await this.dbService.updateUserEmail(this.currentAccount, newEmail);
|
|
if (updated) {
|
|
// 更新本地用户信息
|
|
this.userInfo.email = newEmail;
|
|
|
|
// 通知用户信息发生变化
|
|
this.notifyUserInfoChange();
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// 更新用户名称
|
|
public updateUserName(name: string): void {
|
|
if (name && name.trim() !== '') {
|
|
this.userInfo.name = name.trim();
|
|
this.notifyUserInfoChange();
|
|
}
|
|
}
|
|
|
|
// 更新用户头像
|
|
public updateUserAvatar(avatar: string): void {
|
|
if (avatar && avatar.trim() !== '') {
|
|
this.userInfo.avatar = avatar.trim();
|
|
this.notifyUserInfoChange();
|
|
}
|
|
}
|
|
|
|
// 注册用户信息变化的回调
|
|
public registerUserInfoChangeCallback(callback: () => void): void {
|
|
this.userInfoChangeCallbacks.push(callback);
|
|
}
|
|
|
|
// 通知用户信息变化
|
|
private notifyUserInfoChange(): void {
|
|
for (const callback of this.userInfoChangeCallbacks) {
|
|
callback();
|
|
}
|
|
}
|
|
|
|
//注册颜色更新回调函数
|
|
public registerColorChangeCallback(callback: () => void): void {
|
|
this.colorChangeCallbacks.push(callback);
|
|
}
|
|
|
|
// 更新主题颜色
|
|
public setThemeColor(color: ThemeColor): void {
|
|
const oldColor = this.settings.themeColor;
|
|
this.settings.themeColor = color;
|
|
|
|
// 记录主题颜色变更
|
|
logManager.info(LogCategory.SETTINGS, LogEventType.THEME_CHANGE, color);
|
|
logManager.debug(LogCategory.SETTINGS, LogEventType.SETTING_CHANGE, 'themeColor', oldColor, color);
|
|
|
|
this.notifyColorChange();
|
|
}
|
|
|
|
// 颜色更新后回调
|
|
private notifyColorChange(): void {
|
|
for (const callback of this.colorChangeCallbacks) {
|
|
callback();
|
|
}
|
|
}
|
|
|
|
// 更新语言
|
|
public setLanguage(language: Language): void {
|
|
const oldLanguage = this.settings.language;
|
|
this.settings.language = language;
|
|
|
|
// 记录语言变更
|
|
logManager.info(LogCategory.SETTINGS, LogEventType.LANGUAGE_CHANGE, language);
|
|
logManager.debug(LogCategory.SETTINGS, LogEventType.SETTING_CHANGE, 'language', oldLanguage, language);
|
|
|
|
// 更新日志管理器的语言设置
|
|
logManager.setLanguage(language);
|
|
|
|
// 通知所有注册的回调,语言已更改
|
|
this.notifyLanguageChange();
|
|
}
|
|
|
|
// 通知语言变化
|
|
private notifyLanguageChange(): void {
|
|
for (const callback of this.languageChangeCallbacks) {
|
|
callback();
|
|
}
|
|
}
|
|
|
|
// 更新通知设置
|
|
public setNotificationEnabled(enabled: boolean): void {
|
|
const oldValue = this.settings.notificationEnabled;
|
|
this.settings.notificationEnabled = enabled;
|
|
|
|
// 记录通知设置变更
|
|
logManager.info(LogCategory.SETTINGS, LogEventType.NOTIFICATION_CHANGE, enabled ? 'enabled' : 'disabled');
|
|
logManager.debug(LogCategory.SETTINGS, LogEventType.SETTING_CHANGE, 'notificationEnabled', oldValue, enabled);
|
|
|
|
// 通知所有注册的回调,通知设置已更改
|
|
this.notifyNotificationChange();
|
|
}
|
|
|
|
// 注册通知设置变化的回调
|
|
public registerNotificationChangeCallback(callback: () => void): void {
|
|
this.notificationChangeCallbacks.push(callback);
|
|
}
|
|
|
|
// 通知通知设置变化
|
|
private notifyNotificationChange(): void {
|
|
for (const callback of this.notificationChangeCallbacks) {
|
|
callback();
|
|
}
|
|
}
|
|
|
|
// 注册语言变化的回调
|
|
public registerLanguageChangeCallback(callback: () => void): void {
|
|
this.languageChangeCallbacks.push(callback);
|
|
}
|
|
|
|
// 获取当前语言的文本资源
|
|
public getTextResources(): TextResources {
|
|
return this.settings.language === Language.CHINESE ? chineseTexts : englishTexts;
|
|
}
|
|
|
|
// 获取主题颜色的友好名称
|
|
public getThemeColorName(): string {
|
|
const texts = this.getTextResources();
|
|
switch (this.settings.themeColor) {
|
|
case ThemeColor.BLUE:
|
|
return texts.blue;
|
|
case ThemeColor.GREEN:
|
|
return texts.green;
|
|
case ThemeColor.RED:
|
|
return texts.red;
|
|
case ThemeColor.ORANGE:
|
|
return texts.orange;
|
|
case ThemeColor.PURPLE:
|
|
return texts.purple;
|
|
default:
|
|
return texts.blue;
|
|
}
|
|
}
|
|
|
|
// 获取通知设置的友好名称
|
|
public getNotificationStatusName(): string {
|
|
const texts = this.getTextResources();
|
|
return this.settings.notificationEnabled ? texts.enabled : texts.disabled;
|
|
}
|
|
|
|
// 验证用户登录 - 为了兼容性保留的同步方法
|
|
public validateUser(account: string, password: string): boolean {
|
|
// 降级为同步模式 - 仅用于紧急情况
|
|
try {
|
|
// 进行最简单的验证
|
|
if (account === '2' || account === '9222' || account === '0') {
|
|
return password === '1';
|
|
}
|
|
return false;
|
|
} catch (error) {
|
|
hilog.error(0, 'ClassMG', `Error in legacy validateUser: ${error}`);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 异步验证用户登录 - 推荐使用此方法
|
|
public async validateUserAsync(account: string, password: string): Promise<boolean> {
|
|
try {
|
|
const result = await this.dbService.validateUser(account, password);
|
|
return result;
|
|
} catch (error) {
|
|
hilog.error(0, 'ClassMG', `Error in validateUserAsync: ${error instanceof Error ? error.message : String(error)}`);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 获取用户昵称
|
|
public getUserNickname(): string {
|
|
return this.userInfo.name;
|
|
}
|
|
|
|
// 获取用户信息异步方法
|
|
public async refreshUserInfoAsync(account: string): Promise<void> {
|
|
if (!account) return;
|
|
|
|
try {
|
|
const user = await this.dbService.getUserByAccountAsync(account);
|
|
if (user !== null) {
|
|
this.userInfo.account = user.account;
|
|
this.userInfo.name = user.nickname;
|
|
this.userInfo.email = user.email;
|
|
this.userInfo.phone = user.phone;
|
|
this.userInfo.avatar = user.photo;
|
|
this.userInfo.category = user.category;
|
|
|
|
// 通知用户信息发生变化
|
|
this.notifyUserInfoChange();
|
|
}
|
|
} catch (error) {
|
|
hilog.error(0, 'ClassMG', `Error refreshing user info: ${error instanceof Error ? error.message : String(error)}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
// 导出默认实例
|
|
export default SettingsService.getInstance(); |