| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- const api = require('../../api/index.js');
- Page({
- data: {
- // 筛选状态
- activeFilter: 'all', // all/car/station/user
- activeStatus: 'unread', // unread/read/handled
- // 告警数量统计
- alertCount: {
- all: 0,
- car: 0,
- station: 0,
- user: 0
- },
- // 是否有未处理告警(控制底部批量操作栏显示)
- hasUnHandled: false,
- // 原始告警数据(实际项目从接口获取)
- alertData: [],
- // 筛选后的告警列表
- filteredAlerts: [],
-
- // ===== 新增分页相关数据 =====
- pageNum: 1, // 当前页码
- pageSize: 10, // 每页条数
- totalPages: 0, // 总数据量
- hasMore: true, // 是否还有更多数据
- isLoading: false // 是否正在加载(防止重复请求)
- },
-
- onLoad(options) {
- this.handleWsMessage()
- },
- onHide(){
- // 页面卸载时,取消订阅,这是至关重要的一步!
- wx.$off('wsMessage', this.handleWsMessage);
- },
- /**
- * 处理接收到的 WebSocket 消息
- * @param {Object} message 从 app.js 广播过来的消息对象
- */
- handleWsMessage(message) {
- console.log('Other Page 收到 WebSocket 消息:', message);
-
- // 根据消息类型进行不同的处理
- switch (message.api) {
- case '/alarm/selectalarm':
- // 在这里可以更新地图、刷新UI等
- this.initAlertData(true);
- break;
-
- }
- },
- onShow(){
- // 初始化告警数据(第一页)
-
- this.initAlertData(true);
-
- },
- /**
- * 下拉刷新:重新加载第一页告警数据
- */
- onPullDownRefresh() {
- // 重置分页状态,重新加载第一页
- this.initAlertData(true);
- wx.stopPullDownRefresh();
- },
-
- /**
- * 上拉加载更多:加载下一页数据
- */
- onReachBottom() {
- // 没有更多数据或正在加载时,不执行
- if (!this.data.hasMore || this.data.isLoading) return;
-
- // 加载下一页
- this.initAlertData(false);
- },
-
- /**
- * 初始化/加载告警数据(支持分页)
- * @param {Boolean} isRefresh 是否刷新(true=重新加载第一页,false=加载下一页)
- */
- initAlertData(isRefresh = true) {
- // 防止重复加载
- if (this.data.isLoading) return;
-
- // 设置加载状态
- this.setData({ isLoading: true });
-
- // 分页参数处理
- const pageNum = isRefresh ? 1 : this.data.pageNum + 1;
- const pageSize = this.data.pageSize;
-
- // 接口请求参数
- let activeStatus = ''
- if (this.data.activeStatus=='unread') {
- activeStatus = ''
- }else if(this.data.activeStatus=='read'){
- activeStatus = 0
- }else if(this.data.activeStatus=='handled'){
- activeStatus = 1
- }
- let data = {
- faultstatus: activeStatus,
- pageNum,
- pageSize
- };
-
- api.request(`/alarm/selectalarm`, 'post', data, { isPublic: false })
- .then((res) => {
- console.log('告警数据请求结果:', res);
- if (res.code === 200) {
- const { data: responseData } = res;
- const { data: list, totalPages } = responseData;
-
- // 数据处理:刷新=覆盖,加载更多=追加
- const newAlertData = isRefresh
- ? list
- : [...this.data.alertData, ...list];
-
- // 计算是否还有更多数据
- const hasMore = newAlertData.length < totalPages;
- console.log(newAlertData);
- console.log(pageNum);
- console.log(totalPages);
- console.log(hasMore);
- // 更新数据
- this.setData({
- alertData: newAlertData,
- pageNum:res.data.currentPage, // 更新当前页码
- totalPages:res.data.totalCount, // 更新总条数
- hasMore // 更新是否有更多数据
- });
- this.filterAlerts();
-
- }
- })
- .catch((err) => {
- console.error('告警数据请求失败:', err);
- wx.showToast({
- title: '数据加载失败',
- icon: 'none',
- duration: 1500
- });
- })
- .finally(() => {
- // 无论成功失败,都结束加载状态
- this.setData({ isLoading: false });
- });
- },
-
- /**
- * 统计各类型告警数量(角标显示)
- */
- calcAlertCount() {
- const { alertData } = this.data;
- // 过滤已处理的告警(角标只显示未处理的)
- const unHandledAlerts = alertData.filter(item => item.faultstatus != 0);
-
- // 统计数量
- const count = {
- all: unHandledAlerts.length,
- car: unHandledAlerts.filter(item => item.type === 'car').length,
- station: unHandledAlerts.filter(item => item.type === 'station').length,
- user: unHandledAlerts.filter(item => item.type === 'user').length
- };
-
- // 判断是否有未处理告警
- const hasUnHandled = unHandledAlerts.length > 0;
-
- this.setData({
- alertCount: count,
- hasUnHandled
- });
- },
-
- /**
- * 筛选告警列表(根据类型+状态)
- */
- filterAlerts() {
- const { alertData} = this.data;
-
- // 第一步:按类型筛选
- let filtered = alertData;
-
- // 更新筛选后的列表
- this.setData({ filteredAlerts: filtered });
- },
-
- /**
- * 切换告警类型筛选
- */
- switchFilter(e) {
- const type = e.currentTarget.dataset.type;
- this.setData({ activeFilter: type }, () => {
- this.filterAlerts();
- });
- },
-
- /**
- * 切换告警状态筛选
- */
- switchStatus(e) {
- const status = e.currentTarget.dataset.status;
- this.setData({
- activeStatus: status
- })
- this.initAlertData()
-
- },
- /**
- * 跳转告警详情页
- */
- toAlertDetail(e) {
- const alert = e.currentTarget.dataset.alert;
- console.log(alert);
- if (!alert.faultId) return;
-
- // 先标记为已读(未读状态下)
- if (alert.status === 'unread') {
- const { alertData } = this.data;
- const newAlerts = alertData.map(item => {
- if (item.id === alert.id) {
- return { ...item, status: 'read' };
- }
- return item;
- });
- this.setData({ alertData: newAlerts }, () => {
- this.calcAlertCount();
- this.filterAlerts();
- });
- }
-
- // 跳转详情页(替换为你的详情页路径)
- wx.navigateTo({
- url: `/pages/alert-detail/alert-detail?id=${alert.id}`
- });
- },
-
-
-
- /**
- * 重置分页状态(可选:筛选条件变更时调用)
- */
- resetPage() {
- this.setData({
- pageNum: 1,
- totalPages: 0,
- hasMore: true,
- alertData: []
- });
- }
- });
- //
|