559 lines
11 KiB
JavaScript
559 lines
11 KiB
JavaScript
|
|
// 🔔 通知设置页面逻辑
|
|||
|
|
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();
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|