findme-miniprogram-frontend/subpackages/settings/notification-settings/notification-settings.js

559 lines
11 KiB
JavaScript
Raw Normal View History

2025-12-27 17:16:03 +08:00
// 🔔 通知设置页面逻辑
const notificationManager = require('../../../utils/notification-manager.js');
Page({
data: {
// 系统信息
statusBarHeight: 44,
navBarHeight: 88,
// 通知设置
notificationSettings: {
enabled: true,
message: {
enabled: true,
showPreview: true,
sound: true,
vibrate: true,
groupByChat: true
},
group: {
enabled: true,
mentionOnly: false,
sound: true,
vibrate: true
},
friend: {
enabled: true,
sound: true
},
system: {
enabled: true
}
},
// 免打扰设置
doNotDisturb: {
enabled: false,
startTime: '22:00',
endTime: '08:00',
allowUrgent: true,
allowMentions: true
},
// 未读计数
unreadCount: 0,
// 时间选择器
showTimePicker: false,
selectedTime: '22:00',
timePickerType: 'start', // start, end
// 加载状态
loading: false
},
onLoad(options) {
// 获取系统信息
this.getSystemInfo();
// 加载通知设置
this.loadNotificationSettings();
// 加载未读计数
this.loadUnreadCount();
},
onShow() {
// 刷新未读计数
this.loadUnreadCount();
},
// 获取系统信息
getSystemInfo() {
try {
const windowInfo = wx.getWindowInfo();
this.setData({
statusBarHeight: windowInfo.statusBarHeight || 44,
navBarHeight: 88
});
} catch (error) {
console.error('获取系统信息失败:', error);
this.setData({
statusBarHeight: 44,
navBarHeight: 88
});
}
},
// 加载通知设置
loadNotificationSettings() {
try {
// 从通知管理器获取设置
const settings = notificationManager.getStatus();
if (settings.notificationSettings) {
this.setData({
notificationSettings: {
...this.data.notificationSettings,
...settings.notificationSettings
}
});
}
// 加载免打扰设置
const doNotDisturbSettings = wx.getStorageSync('doNotDisturbSettings');
if (doNotDisturbSettings) {
this.setData({
doNotDisturb: {
...this.data.doNotDisturb,
...doNotDisturbSettings
}
});
}
} catch (error) {
console.error('❌ 加载通知设置失败:', error);
}
},
// 加载未读计数
loadUnreadCount() {
try {
const totalUnread = notificationManager.getTotalUnreadCount();
this.setData({
unreadCount: totalUnread
});
} catch (error) {
console.error('❌ 加载未读计数失败:', error);
}
},
// 🔔 ===== 通知设置变更 =====
// 通知总开关变更
onNotificationEnabledChange(e) {
const enabled = e.detail.value;
this.setData({
'notificationSettings.enabled': enabled
});
this.saveNotificationSettings();
},
// 消息通知变更
onMessageNotificationChange(e) {
const enabled = e.detail.value;
this.setData({
'notificationSettings.message.enabled': enabled
});
this.saveNotificationSettings();
},
// 消息预览变更
onMessagePreviewChange(e) {
const enabled = e.detail.value;
this.setData({
'notificationSettings.message.showPreview': enabled
});
this.saveNotificationSettings();
},
// 消息提示音变更
onMessageSoundChange(e) {
const enabled = e.detail.value;
this.setData({
'notificationSettings.message.sound': enabled
});
this.saveNotificationSettings();
},
// 消息震动变更
onMessageVibrateChange(e) {
const enabled = e.detail.value;
this.setData({
'notificationSettings.message.vibrate': enabled
});
this.saveNotificationSettings();
},
// 消息分组变更
onMessageGroupChange(e) {
const enabled = e.detail.value;
this.setData({
'notificationSettings.message.groupByChat': enabled
});
this.saveNotificationSettings();
},
// 群聊通知变更
onGroupNotificationChange(e) {
const enabled = e.detail.value;
this.setData({
'notificationSettings.group.enabled': enabled
});
this.saveNotificationSettings();
},
// 群聊仅@提醒变更
onGroupMentionOnlyChange(e) {
const enabled = e.detail.value;
this.setData({
'notificationSettings.group.mentionOnly': enabled
});
this.saveNotificationSettings();
},
// 群聊提示音变更
onGroupSoundChange(e) {
const enabled = e.detail.value;
this.setData({
'notificationSettings.group.sound': enabled
});
this.saveNotificationSettings();
},
// 群聊震动变更
onGroupVibrateChange(e) {
const enabled = e.detail.value;
this.setData({
'notificationSettings.group.vibrate': enabled
});
this.saveNotificationSettings();
},
// 好友通知变更
onFriendNotificationChange(e) {
const enabled = e.detail.value;
this.setData({
'notificationSettings.friend.enabled': enabled
});
this.saveNotificationSettings();
},
// 好友提示音变更
onFriendSoundChange(e) {
const enabled = e.detail.value;
this.setData({
'notificationSettings.friend.sound': enabled
});
this.saveNotificationSettings();
},
// 系统通知变更
onSystemNotificationChange(e) {
const enabled = e.detail.value;
this.setData({
'notificationSettings.system.enabled': enabled
});
this.saveNotificationSettings();
},
// 🔕 ===== 免打扰设置 =====
// 免打扰模式变更
onDoNotDisturbChange(e) {
const enabled = e.detail.value;
this.setData({
'doNotDisturb.enabled': enabled
});
this.saveDoNotDisturbSettings();
},
// 选择开始时间
selectStartTime() {
this.setData({
showTimePicker: true,
selectedTime: this.data.doNotDisturb.startTime,
timePickerType: 'start'
});
},
// 选择结束时间
selectEndTime() {
this.setData({
showTimePicker: true,
selectedTime: this.data.doNotDisturb.endTime,
timePickerType: 'end'
});
},
// 时间选择变更
onTimeChange(e) {
const time = e.detail.value;
if (this.data.timePickerType === 'start') {
this.setData({
'doNotDisturb.startTime': time,
showTimePicker: false
});
} else {
this.setData({
'doNotDisturb.endTime': time,
showTimePicker: false
});
}
this.saveDoNotDisturbSettings();
},
// 取消时间选择
onTimeCancel() {
this.setData({
showTimePicker: false
});
},
// 允许紧急通知变更
onAllowUrgentChange(e) {
const enabled = e.detail.value;
this.setData({
'doNotDisturb.allowUrgent': enabled
});
this.saveDoNotDisturbSettings();
},
// 允许@提醒变更
onAllowMentionsChange(e) {
const enabled = e.detail.value;
this.setData({
'doNotDisturb.allowMentions': enabled
});
this.saveDoNotDisturbSettings();
},
// 📋 ===== 通知管理 =====
// 查看通知历史
viewNotificationHistory() {
wx.navigateTo({
url: '/subpackages/settings/notification-settings/notification-settings'
});
},
// 清空通知历史
clearNotificationHistory() {
wx.showModal({
title: '清空通知历史',
content: '确定要删除所有通知记录吗?此操作不可恢复。',
confirmText: '清空',
confirmColor: '#FF3B30',
success: (res) => {
if (res.confirm) {
this.performClearHistory();
}
}
});
},
// 执行清空历史
performClearHistory() {
try {
// 清空通知历史
wx.removeStorageSync('notificationHistory');
// 重置未读计数
notificationManager.reset();
this.setData({
unreadCount: 0
});
wx.showToast({
title: '历史已清空',
icon: 'success'
});
} catch (error) {
console.error('❌ 清空通知历史失败:', error);
wx.showToast({
title: '清空失败',
icon: 'none'
});
}
},
// 📱 ===== 订阅消息 =====
// 请求订阅消息权限
async requestSubscribeMessage() {
try {
const templateIds = [
'template_id_1', // 新消息通知
'template_id_2', // 好友请求通知
'template_id_3' // 系统通知
];
const result = await notificationManager.requestSubscribeMessage(templateIds);
if (result) {
wx.showToast({
title: '权限设置完成',
icon: 'success'
});
} else {
wx.showToast({
title: '权限设置失败',
icon: 'none'
});
}
} catch (error) {
console.error('❌ 请求订阅消息权限失败:', error);
wx.showToast({
title: '权限设置失败',
icon: 'none'
});
}
},
// 查看订阅状态
viewSubscribeStatus() {
wx.showToast({
title: '功能开发中',
icon: 'none'
});
},
// ⚙️ ===== 设置管理 =====
// 保存通知设置
saveNotificationSettings() {
try {
// 更新通知管理器设置
notificationManager.updateNotificationSettings(this.data.notificationSettings);
} catch (error) {
console.error('❌ 保存通知设置失败:', error);
}
},
// 保存免打扰设置
saveDoNotDisturbSettings() {
try {
wx.setStorageSync('doNotDisturbSettings', this.data.doNotDisturb);
} catch (error) {
console.error('❌ 保存免打扰设置失败:', error);
}
},
// 重置设置
resetSettings() {
wx.showModal({
title: '重置通知设置',
content: '确定要将所有通知设置恢复为默认值吗?',
confirmText: '重置',
confirmColor: '#FF3B30',
success: (res) => {
if (res.confirm) {
this.performResetSettings();
}
}
});
},
// 执行重置设置
performResetSettings() {
try {
// 重置为默认设置
this.setData({
notificationSettings: {
enabled: true,
message: {
enabled: true,
showPreview: true,
sound: true,
vibrate: true,
groupByChat: true
},
group: {
enabled: true,
mentionOnly: false,
sound: true,
vibrate: true
},
friend: {
enabled: true,
sound: true
},
system: {
enabled: true
}
},
doNotDisturb: {
enabled: false,
startTime: '22:00',
endTime: '08:00',
allowUrgent: true,
allowMentions: true
}
});
// 保存设置
this.saveNotificationSettings();
this.saveDoNotDisturbSettings();
wx.showToast({
title: '设置已重置',
icon: 'success'
});
} catch (error) {
console.error('❌ 重置通知设置失败:', error);
wx.showToast({
title: '重置失败',
icon: 'none'
});
}
},
// 🧭 ===== 页面导航 =====
// 返回上一页
goBack() {
wx.navigateBack();
}
});