const app = getApp(); Page({ onShareAppMessage() { const promise = new Promise(resolve => { setTimeout(() => { resolve({ title: '用水宝', path: '/homepage/homepage', imageUrl: '/static_file/share_img.png', }) }, 500) }) return { title: '用水宝', path: '/homepage/homepage', imageUrl: '/static_file/share_img.png', promise } }, data: { images: { logo: '/static_file/logo.png', background: '/static_file/background.png', card: '/static_file/card.png', tzd: '/static_file/backgrountzdd.png', phone: '/static_file/phone.png', yl: '/static_file/background.yl', jcsfcjtzd: '/static_file/jcsfcjtzd.png', kapiantubiao: '/static_file/kapiantubiao.png' }, // 用户信息 userInfo: { name: "", accountNumber: "", address: "" }, //企业地址信息 enterPriseAddress: "", //企业用户须知 userNotices: "", // 账单信息 billInfo: { totalAmount: "", // 总计应缴 waterUsage: "", // 用水量 balance: "" // 账户余额 }, // 功能按钮配置 functionList: [{ icon: '/static_file/zdlb.png', text: '账单列表', url: '/pages/zhangdanlist/zhangdanlist' }, { icon: '/static_file/jfjl.png', text: '缴费记录', url: '/pages/jiaofeiList/jiaofeiList' }, // { // icon: '/static_file/yhbx.png', // text: '用户报修', // url: '/pages/baoxiudj/baoxiudj' // }, { icon: '/static_file/tzgg.png', text: '消息通知', url: '/pages/tongzhiList/tongzhiList' }, { icon: '/static_file/ckys.png', text: '户号绑定', url: '/pages/huhaoguanli/huhaoguanli' }, // { // icon: '/static_file/yjfk.png', // text: '投诉建议', // url: '/pages/tousujianyi/tousujianyi' // }, { icon: '/static_file/yjfk.png', text: '用户须知', url: '/pages/usernotice/usernotice' } ], currentIndex: 0, noticeList: [], // 活动信息 activity: { title: '净水器活动', subtitle: '预留入口', imageUrl: '/static_file/background.png' }, currentAccountInfo: {}, unreadCount: 0 }, onLoad() { // 检查是否刚刚绑定了新户号 const justBoundNewAccount = wx.getStorageSync('justBoundNewAccount'); if (justBoundNewAccount) { // 清除标记 wx.removeStorageSync('justBoundNewAccount'); // 直接加载页面数据 this.loadPageData(); return; } // 检查是否所有户号已解绑 const allAccountsUnbound = wx.getStorageSync('allAccountsUnbound'); if (allAccountsUnbound) { // 清除标记 wx.removeStorageSync('allAccountsUnbound'); // 跳转到首次绑定页面 wx.redirectTo({ url: '/pages/FirstBangDing/FirstBangDing', }); return; } // 检查全局用户信息是否存在 if (!app.globalData.currentAccountInfo || !app.globalData.currentAccountInfo.usernumber || app.globalData.userWxInfo.currentDsKey === "") { wx.redirectTo({ url: '/pages/FirstBangDing/FirstBangDing', }); return; } let refresh = app.globalData.refresh; if (refresh == 1) { wx.showLoading({ title: '加载中...', }); if (!app.globalData.userWxInfo.token) { wx.hideLoading(); return; } const _this = this; wx.request({ url: app.globalData.interfaceUrls.homePageInfo + app.globalData.currentAccountInfo.usernumber, method: 'GET', header: { 'content-type': 'application/json', // 默认值 'token': app.globalData.userWxInfo.token, 'source': "wc", '!SAAS_LOGIN_TOKEN_!': app.globalData.currentAccountInfo.dsKey }, success(res) { wx.hideLoading(); let apiReturnData = res.data; // 处理轮播通知数据 if (apiReturnData.data && apiReturnData.data.swNotificationAnnouncementDos) { // 处理日期格式 apiReturnData.data.swNotificationAnnouncementDos.forEach(data => { if (data.publishtime) { data.publishtime = data.publishtime.slice(0, 10); } }); // 所有的通知公告 app.globalData.notices = apiReturnData.data.swNotificationAnnouncementDos; // 需要轮播的公告 let noticeData = apiReturnData.data.swNotificationAnnouncementDos.filter(data => { return data.homepageslider == '1'; }); // 更新轮播通知数据 _this.setData({ noticeList: noticeData, isScrolling: noticeData && noticeData.length > 0 }); // 如果有轮播数据,立即开始轮播 if (noticeData && noticeData.length > 0) { _this.startNoticeScroll(); } } // 该用户所有的消息通知 app.globalData.userNoticesList = apiReturnData.data.sysNotifyAnnounceUserDos; // 计算未读消息数 if (app.globalData.userNoticesList) { const unreadCount = app.globalData.userNoticesList.filter(notice => notice.readstate === '2').length; _this.setData({ unreadCount: unreadCount }); } // 更新页面数据 _this.setData({ billInfo: { totalAmount: apiReturnData.data.duFees ?? 0, // 总计应缴 waterUsage: apiReturnData.data.waterConsumption ?? 0, // 用水量 balance: apiReturnData.data.accountbalance ?? 0 // 账户余额 }, userInfo: { name: apiReturnData.data.username, accountNumber: apiReturnData.data.usernumber, address: apiReturnData.data.address }, enterPriseAddress: apiReturnData.data.enterPriseAddress, userNotices: apiReturnData.data.userNotice }); }, fail(error) { wx.hideLoading() utils.simleInfo('登录失败,请稍后再试') } }) } // 加载账户和账单信息 this.loadAccountInfo(); }, onShow() { // 检查是否刚刚绑定了新户号 const justBoundNewAccount = wx.getStorageSync('justBoundNewAccount'); if (justBoundNewAccount) { // 清除标记 wx.removeStorageSync('justBoundNewAccount'); // 直接加载页面数据 this.loadPageData(); return; } // 首先检查全局用户信息是否存在,如果没有则跳转到首次绑定页面 if (!app.globalData.currentAccountInfo || !app.globalData.currentAccountInfo.usernumber || app.globalData.userWxInfo.currentDsKey === "") { wx.redirectTo({ url: '/pages/FirstBangDing/FirstBangDing', }); return; } // 检查是否需要刷新 const needRefresh = wx.getStorageSync('needRefreshHomepage'); if (needRefresh) { // 清除刷新标记 wx.removeStorageSync('needRefreshHomepage'); this.loadPageData(); } // 检查是否从户号管理页面返回 const backFromHuHao = wx.getStorageSync('backFromHuHao'); if (backFromHuHao) { wx.removeStorageSync('backFromHuHao'); // 从户号管理页面返回时重新加载全部数据 this.loadHomepageData(); } else { // 即使不是从户号管理页面返回,也更新未读消息数 this.getUnreadNoticeCount(); } }, loadPageData: function () { const _this = this; wx.showLoading({ title: '加载中...', }); // 检查token和账户信息是否存在 if (!app.globalData.userWxInfo.token || !app.globalData.currentAccountInfo || !app.globalData.currentAccountInfo.usernumber || !app.globalData.userWxInfo.currentDsKey) { wx.hideLoading(); console.error('缺少必要的账户信息'); // 尝试从本地存储恢复账户信息 const storedHuHao = wx.getStorageSync('currentHuHao'); if (storedHuHao && storedHuHao.usernumber) { app.globalData.currentAccountInfo = storedHuHao; app.globalData.userWxInfo.currentDsKey = storedHuHao.dsKey; // 重新尝试加载 setTimeout(() => { this.loadPageData(); }, 100); return; } // 如果无法恢复,则跳转到首次绑定页面 wx.redirectTo({ url: '/pages/FirstBangDing/FirstBangDing', }); return; } wx.request({ url: app.globalData.interfaceUrls.homePageInfo + app.globalData.currentAccountInfo.usernumber, method: 'GET', header: { 'content-type': 'application/json', 'token': app.globalData.userWxInfo.token, 'source': "wc", '!SAAS_LOGIN_TOKEN_!': app.globalData.userWxInfo.currentDsKey }, success(res) { wx.hideLoading(); let apiReturnData = res.data; // 处理轮播通知数据 if (apiReturnData.data && apiReturnData.data.swNotificationAnnouncementDos) { // 处理日期格式 apiReturnData.data.swNotificationAnnouncementDos.forEach(data => { if (data.publishtime) { data.publishtime = data.publishtime.slice(0, 10); } }); // 所有的通知公告 app.globalData.notices = apiReturnData.data.swNotificationAnnouncementDos; // 需要轮播的公告 let noticeData = apiReturnData.data.swNotificationAnnouncementDos.filter(data => { return data.homepageslider == '1'; }); // 更新轮播通知数据 _this.setData({ noticeList: noticeData, isScrolling: noticeData && noticeData.length > 0 }); // 如果有轮播数据,立即开始轮播 if (noticeData && noticeData.length > 0) { _this.startNoticeScroll(); } } // 该用户所有的消息通知 app.globalData.userNoticesList = apiReturnData.data.sysNotifyAnnounceUserDos; // 获取用户须知 const userNotices = apiReturnData.data.userNotice || ''; // 计算未读消息数 const unreadCount = app.globalData.userNoticesList ? app.globalData.userNoticesList.filter(notice => notice.readstate === '2').length : 0; // 更新全局数据中的用户须知 app.globalData.currentAccountInfo = { ...app.globalData.currentAccountInfo, userNotices: userNotices }; _this.setData({ unreadCount: unreadCount, billInfo: { totalAmount: apiReturnData.data.duFees ?? 0, // 总计应缴 waterUsage: apiReturnData.data.waterConsumption ?? 0, // 用水量 balance: apiReturnData.data.accountbalance ?? 0 // 账户余额 }, userInfo: { name: apiReturnData.data.username, accountNumber: apiReturnData.data.usernumber, address: apiReturnData.data.address }, enterPriseAddress: apiReturnData.data.enterPriseAddress, userNotices: userNotices }); }, fail(error) { wx.hideLoading(); wx.showToast({ title: '数据加载失败,请稍后再试', icon: 'none', duration: 2000 }); } }); }, // 切换户号 handleSwitchMeter() { wx.navigateTo({ url: '/pages/huhaoguanli/huhaoguanli' }) }, // 充值缴费 handlePayment() { wx.navigateTo({ // url: '/pages/payment/payment' }) }, // 功能按钮点击事件 handleFunctionClick(e) { const index = e.currentTarget.dataset.index const item = this.data.functionList[index] if (item && item.url) { if (item.url === '/pages/usernotice/usernotice') { // 如果是跳转到用户须知页面,将用户须知信息存储到全局数据中 app.globalData.currentAccountInfo = { ...app.globalData.currentAccountInfo, userNotices: this.data.userNotices }; // 确保用户须知不为空 if (!this.data.userNotices) { // 如果为空,尝试重新获取数据 this.loadPageData(); // 延迟跳转,等待数据加载完成 setTimeout(() => { wx.navigateTo({ url: item.url, fail: function (err) { console.error('页面跳转失败:', err) wx.showToast({ title: '功能开发中', icon: 'none', duration: 2000 }) } }) }, 500); return; } } wx.navigateTo({ url: item.url, fail: function (err) { console.error('页面跳转失败:', err) wx.showToast({ title: '功能开发中', icon: 'none', duration: 2000 }) } }) } else { wx.showToast({ title: '功能开发中', icon: 'none', duration: 2000 }) } }, // 查看账单列表 handleViewBill() { wx.navigateTo({ // url: '/pages/billList/billList' }) }, // 查看更多活动 handleMoreActivity() { wx.navigateTo({ // url: '/pages/activityList/activityList' }) }, // 添加或修改立即缴费按钮点击事件 goToPayment: function (e) { wx.navigateTo({ url: `/pages/lijijiaofei/lijijiaofei` }); }, // 跳转到通知公告列表页面 goToNoticeList: function () { wx.navigateTo({ url: '/pages/tongzhiList/tongzhiList' }) }, // 跳转到通知详情页面 goToNoticeDetail: function () { const currentNotice = this.data.noticeList[this.data.currentIndex]; wx.navigateTo({ url: `/pages/tzxq/tzxq?id=${currentNotice.id}` }); }, onReady: function () { this.startNoticeScroll(); }, startNoticeScroll: function () { // 检查是否有通知数据 if (!this.data.noticeList || this.data.noticeList.length === 0) { console.log('无轮播通知数据'); return; } // 过滤需要轮播的公告 let data = this.data.noticeList.filter(data => { return data.homepageslider == '1'; }); // 如果没有需要轮播的公告,直接返回 if (!data || data.length === 0) { console.log('没有需要轮播的公告'); return; } // 确保currentIndex在有效范围内 const safeIndex = this.data.currentIndex < data.length ? this.data.currentIndex : 0; // 获取当前公告内容和标题 const content = data[safeIndex].scrollingcontent || ''; const title = data[safeIndex].noticetitle || ''; // 计算滚动时长,基于内容长度 const duration = Math.max(3, (title.length + content.length) * 0.5); // 更新数据 this.setData({ currentIndex: safeIndex, scrollDuration: duration, isScrolling: true, }); }, onScrollComplete: function () { this.setData({ isScrolling: false }); // 等待2秒后切换到下一条 setTimeout(() => { const nextIndex = (this.data.currentIndex + 1) % this.data.noticeList.length; this.setData({ currentIndex: nextIndex }, () => { this.startNoticeScroll(); }); }, 1000); }, // 加载账户和账单信息 loadAccountInfo: function () { const accountInfo = app.globalData.currentAccountInfo || {}; // 检查账户信息是否为空(解绑后返回的情况) if (!accountInfo || !accountInfo.usernumber) { // 检查是否已全部解绑 const allAccountsUnbound = wx.getStorageSync('allAccountsUnbound'); if (allAccountsUnbound) { // 清除标记 wx.removeStorageSync('allAccountsUnbound'); // 跳转到首次绑定页面 wx.redirectTo({ url: '/pages/FirstBangDing/FirstBangDing', }); return; } // 尝试请求账户列表,查看是否有其他账户 this.checkAndFetchAccounts(); return; } // 检查是否是首次加载 const isFirstLoad = wx.getStorageSync('isFirstLoad') !== 'false'; // 检查是否在户号管理页面切换过账户 const hasUserSwitchedAccount = wx.getStorageSync('hasUserSwitchedAccount') === true; if (isFirstLoad && !hasUserSwitchedAccount) { // 首次加载且未切换过账户,查找并设置默认账户 this.loadDefaultAccount(); // 设置标记,表示已不是首次加载 wx.setStorageSync('isFirstLoad', 'false'); } else { if (!isFirstLoad && hasUserSwitchedAccount) { // 用户在户号管理中切换过账户,需要重新加载数据 this.loadDefaultAccount(); } else { // 非首次加载或已在户号管理中切换过账户,直接使用当前账户 this.setData({ currentAccountInfo: accountInfo }); // 如果是从户号管理页面切换了账户,需要清除该标记 if (hasUserSwitchedAccount) { wx.removeStorageSync('hasUserSwitchedAccount'); // 从户号管理页面返回时,确保加载最新数据 this.loadHomepageData(); } } } }, // 检查并获取账户列表 checkAndFetchAccounts: function () { if (!app.globalData.userWxInfo.token) { // 没有token,直接跳转到首次绑定页面 wx.redirectTo({ url: '/pages/FirstBangDing/FirstBangDing', }); return; } const _this = this; wx.showLoading({ title: '加载中...', }); wx.request({ url: app.globalData.interfaceUrls.accountList, method: 'GET', header: { 'content-type': 'application/json', 'token': app.globalData.userWxInfo.token, 'source': "wc" }, success(res) { wx.hideLoading(); if (res.data && res.data.data && res.data.data.length > 0) { // 找到了账户,设置默认账户 const defaultAccount = res.data.data.find(account => account.defaultAccount === "0") || res.data.data[0]; // 更新全局账户信息 app.globalData.currentAccountInfo = defaultAccount; app.globalData.userWxInfo.currentDsKey = defaultAccount.dsKey; app.globalData.userWxInfo.username = defaultAccount.username; app.globalData.userWxInfo.usernumber = defaultAccount.usernumber; app.globalData.userWxInfo.address = defaultAccount.address; app.globalData.userWxInfo.groupName = defaultAccount.groupName; // 保存到本地存储 wx.setStorageSync('currentHuHao', defaultAccount); // 更新页面数据并加载详细信息 _this.setData({ currentAccountInfo: defaultAccount }); _this.loadPageData(); } else { // 没有找到任何账户,跳转到首次绑定页面 wx.redirectTo({ url: '/pages/FirstBangDing/FirstBangDing', }); } }, fail(error) { wx.hideLoading(); // 请求失败,跳转到首次绑定页面 wx.redirectTo({ url: '/pages/FirstBangDing/FirstBangDing', }); } }); }, // 加载默认账户 loadDefaultAccount: function () { if (!app.globalData.userWxInfo.token) { return; } const _this = this; wx.showLoading({ title: '加载中...', }); wx.request({ url: app.globalData.interfaceUrls.accountList, method: 'GET', header: { 'content-type': 'application/json', 'token': app.globalData.userWxInfo.token, 'source': "wc" }, success(res) { wx.hideLoading(); if (res.data && res.data.data) { // 查找 defaultAccount 为 0 的账户 const defaultAccount = res.data.data.find(account => account.defaultAccount === "0"); if (defaultAccount) { // 设置为当前账户 app.globalData.currentAccountInfo = defaultAccount; _this.setData({ currentAccountInfo: defaultAccount }); // 加载该默认账户的详细信息 _this.loadPageData(); } else { // 没有找到默认账户,使用当前账户 _this.setData({ currentAccountInfo: app.globalData.currentAccountInfo || {} }); // 确保加载页面数据,获取userNotices _this.loadPageData(); } } }, fail(error) { wx.hideLoading(); wx.showToast({ title: '加载默认账户失败', icon: 'none', duration: 2000 }); // 使用当前账户作为备选 _this.setData({ currentAccountInfo: app.globalData.currentAccountInfo || {} }); } }); }, onPullDownRefresh: function () { // 刷新数据 this.refreshData(); }, // 修改刷新数据的函数 refreshData: function () { console.log('正在刷新数据...'); this.loadPageData(); // 刷新完成后停止下拉刷新动画 wx.stopPullDownRefresh({ success: (res) => { wx.showToast({ title: '刷新成功', icon: 'success', duration: 1000 }); } }); }, // 获取未读消息数量的方法 getUnreadNoticeCount: function () { const _this = this; // 从服务器获取最新的消息通知数据 if (app.globalData.userWxInfo.token && app.globalData.currentAccountInfo) { wx.request({ url: app.globalData.interfaceUrls.homePageInfo + app.globalData.currentAccountInfo.usernumber, method: 'GET', header: { 'content-type': 'application/json', 'token': app.globalData.userWxInfo.token, 'source': "wc", '!SAAS_LOGIN_TOKEN_!': app.globalData.currentAccountInfo.dsKey }, success(res) { if (res.data && res.data.data) { // 更新全局的用户通知列表 app.globalData.userNoticesList = res.data.data.sysNotifyAnnounceUserDos; // 计算未读消息数量 const unreadCount = app.globalData.userNoticesList.filter(notice => notice.readstate === '2').length; _this.setData({ unreadCount: unreadCount, enterPriseAddress: res.data.data.enterPriseAddress, userNotices: res.data.data.userNotice }); // 更新全局数据中的用户须知 app.globalData.currentAccountInfo = { ...app.globalData.currentAccountInfo, userNotices: res.data.data.userNotice }; } } }); } else { this.setData({ unreadCount: 0 }); } }, // 新增方法:加载主页全部数据(包括消息通知) loadHomepageData: function () { const _this = this; wx.showLoading({ title: '加载中...', }); if (!app.globalData.userWxInfo.token) { wx.hideLoading(); return; } wx.request({ url: app.globalData.interfaceUrls.homePageInfo + app.globalData.currentAccountInfo.usernumber, method: 'GET', header: { 'content-type': 'application/json', 'token': app.globalData.userWxInfo.token, 'source': "wc", '!SAAS_LOGIN_TOKEN_!': app.globalData.currentAccountInfo.dsKey }, success(res) { wx.hideLoading(); if (res.data && res.data.data) { let apiReturnData = res.data; // 更新消息通知数据 apiReturnData.data.swNotificationAnnouncementDos.forEach(data => { data.publishtime = data.publishtime.slice(0, 10); }); // 更新全局数据 app.globalData.notices = apiReturnData.data.swNotificationAnnouncementDos; app.globalData.userNoticesList = apiReturnData.data.sysNotifyAnnounceUserDos; // 需要轮播的公告 let data = apiReturnData.data.swNotificationAnnouncementDos.filter(data => { return data.homepageslider == '1'; }); // 获取用户须知 const userNotices = apiReturnData.data.userNotice || ''; // 更新全局数据中的用户须知 app.globalData.currentAccountInfo = { ...app.globalData.currentAccountInfo, userNotices: userNotices }; // 更新未读消息数 const unreadCount = app.globalData.userNoticesList ? app.globalData.userNoticesList.filter(notice => notice.readstate === '2').length : 0; // 更新页面数据 _this.setData({ billInfo: { totalAmount: apiReturnData.data.duFees ?? 0, waterUsage: apiReturnData.data.waterConsumption ?? 0, balance: apiReturnData.data.accountbalance ?? 0 }, userInfo: { name: apiReturnData.data.username, accountNumber: apiReturnData.data.usernumber, address: apiReturnData.data.address }, enterPriseAddress: apiReturnData.data.enterPriseAddress, userNotices: userNotices, noticeList: data, isScrolling: true, unreadCount: unreadCount }); // 如果有轮播公告,重新开始轮播 if (data && data.length > 0) { _this.startNoticeScroll(); } } }, fail(error) { wx.hideLoading(); wx.showToast({ title: '数据加载失败', icon: 'none', duration: 2000 }); } }); }, // 显示地址弹窗并提供复制功能 showAddressPopup(e) { const address = e.currentTarget.dataset.address; if (!address) return; wx.showModal({ title: '地址信息', content: address, showCancel: false, confirmText: '确定' }); } })