//10自定义消息 1001消息 //20抢修管家消息 2001:抢修单消息 2002:抢修日志消息 //30巡检管家消息 3001 巡检安排消息 3002巡检日志消息 //40操作票助手消息 4001操作票审核提示消息 4002 操作票归档完成消息 //50工作票助手消息 5001 工作票审核提示消息 5002工作票归档完成消息 // 60 预报警消息 6001 预警消息 6002 报警消息 6003 紧急报警消息 // 70报表管家消息 7001 function imgErrorCallback(node) { node.parentNode.removeChild(node); } apiready = function() { ctrl = { userId: null, oldMaxId: null, newMinId: null, page: 0, pageSize: 20, who: null, editMode: false, people: { CUSTOM: { name: "电务小蜜蜂", messageTypes: [1001] }, REPAIR: { name: "抢修管家", messageTypes: [2001, 2002] }, INSPECT: { name: "巡检管家", messageTypes: [3001, 3002] }, OPERATE: { name: "操作票助手", messageTypes: [4001, 4002] }, WORK: { name: "工作票助手", messageTypes: [5001, 5002] }, // 报警管家消息 ALARM: { name: "报警管家", messageTypes: [6001, 6002, 6003] }, // 报表管家消息 REPORT: { name: "报表管家", messageTypes: [7001] }, }, init: {}, bind: {}, updateMsgToIsRead: {}, //更新消息为已读 getMessages: {}, msgFilter: {}, //读取消息前的处理,针对体验账号,替换部分数据 openEditMode: {}, //打开编辑模式 cancelEditMode: {}, //取消编辑模式 onTouchMessage: {}, //跳转到消息详情 checkedAMessage: {}, // 选中一个消息 updateActBtn: {}, // 更新全选按钮的状态 removeMessages: {}, // 批量删除消息 markMessagesToReaded: {}, //批量标记消息为已读 } ctrl.init = function() { //获取userId var userId = $api.getStorage("userId"); ctrl.userId = userId; //获取传递进来的参数:消息类型 var who = api.pageParam.type; ctrl.who = who; //如果是自定义消息 不显示标记为已读按钮 if (who != 'CUSTOM') { $("#mark-to-readed").removeClass('displayNone'); } //显示who $("#title").text(ctrl.people[who].name); ctrl.bind(); //读取消息 ctrl.getOldMessages(); } ctrl.bind = function() { //返回按钮 $("#back").on("touchend", function() { api.closeWin({}); }) // 全选按钮 $('#select-all').on("touchend", function() { var selectAll = $(this).data('select-all'); if (!selectAll) { $('.message input[type="checkbox"]').attr('checked', true); } else { $('.message input[type="checkbox"]').removeAttr('checked'); } ctrl.updateActBtn(); }) // 删除消息 $("#remove").on("touchend", function() { ctrl.removeMessages(); // 向父页面发送关闭编辑模式请求 api.sendEvent({ name: 'requestCancelEditMode' }); }) // 标为已读 $("#mark-to-readed").on("touchend", function() { ctrl.markMessagesToReaded(); // 向父页面发送关闭编辑模式请求 api.sendEvent({ name: 'requestCancelEditMode' }); }) //上拉加载 api.addEventListener({ name: 'scrolltobottom' }, function(ret, err) { ctrl.getOldMessages(); }); //获取新消息 api.addEventListener({ name: 'messageUpdated' }, function(ret, err) { if (ret) { if (ret.value.type == 'delete') { var msgId = ret.value.msgId; $(".message[data-message-id='" + msgId + "']").remove(); } else { ctrl.getNewMessages(); } } }); // 收到父页面发送过来的 打开编辑模式的请求 api.addEventListener({ name: 'openEditMode' }, function(ret, err) { ctrl.openEditMode(); }); // 收到父页面发送过来的取消编辑模式的请求 api.addEventListener({ name: 'cancelEditMode' }, function(ret, err) { ctrl.cancelEditMode(); }); //下来刷新 api.setRefreshHeaderInfo({ bgColor: "#CCCCCC", textColor: "#FFFFFF" }, function(ret, err) { messageDao.updateData(function() { api.refreshHeaderLoadDone(); ctrl.page = 0; $("#list").empty(); ctrl.oldMaxId = null; ctrl.newMinId = null; ctrl.getOldMessages(); }) }) //自定义消息 $("#list").on("jump", ".bee-message", function() { var moreId = $(this).data("more-id"); var messageType = $(this).data("message-type"); var messageId = $(this).data("message-id"); ctrl.updateMsgToIsRead(messageId); $(this).removeClass("unread"); switch (parseInt(messageType)) { //新闻 case 1001: api.openWin({ name: 'news', url: 'widget://html/message/news.html', pageParam: { id: moreId, messageId: messageId } }); } }) $("#list").on("touchend", ".message", function() { ctrl.onTouchMessage(this); }) //点击抢修管家消息 $("#list").on("jump", ".repair-message", function() { var msgId = $(this).data("message-id"); ctrl.updateMsgToIsRead(msgId); $(this).removeClass("unread"); var moreId = $(this).data("more-id"); var messageType = $(this).data("message-type"); var messageId = $(this).data("message-id"); switch (parseInt(messageType)) { case 2001: case 2002: api.openWin({ name: 'repairDetail', url: 'widget://html/feature/logQuery/repairLogDetail.html', pageParam: { id: moreId, messageId: messageId } }); } }) //点击巡检管家消息 $("#list").on("jump", ".inspect-message", function() { var messageId = $(this).data("message-id"); ctrl.updateMsgToIsRead(messageId); $(this).removeClass("unread"); var moreId = $(this).data("more-id"); var messageType = $(this).data("message-type"); switch (parseInt(messageType)) { case 3001: api.openWin({ name: 'inspectArrangement', url: 'widget://html/feature/logQuery/inspectArrangement.html', pageParam: { id: moreId, messageId: messageId } }); break; //巡检日志 case 3002: api.openWin({ name: 'inspectLogDetail', url: 'widget://html/feature/logQuery/inspectLogDetail.html', pageParam: { id: moreId, messageId: messageId } }); } }) // add by guoyuanyuan 2018/9/11 //点击报表管家消息 // 点击报表管家消息 $("#list").on("jump", ".report-message", function() { var messageId = $(this).data("message-id"); var time = $(this).data("time"); ctrl.updateMsgToIsRead(messageId); $(this).removeClass("unread"); // var moreId = $(this).data("more-id"); // var messageType = $(this).data("message-type"); api.openWin({ name: 'reportProject', url: 'widget://html/report/reportProject.html', pageParam: { messageId: messageId, time: time } }); }) // 点击报警管家消息 $("#list").on("jump", ".alarm-message", function() { var messageId = $(this).data("message-id"); ctrl.updateMsgToIsRead(messageId); $(this).removeClass("unread"); var moreId = $(this).data("more-id"); var messageType = $(this).data("message-type"); api.openWin({ name: 'alarmDetail', url: 'widget://html/feature/alarmDetail.html', pageParam: { id: moreId, messageId: messageId } }); }) // add by guoyuanyuan 2018/9/11 //点击报表管家消息 //点击操作票助手消息 $("#list").on("jump", ".operate-message", function() { var msgId = $(this).data("message-id"); ctrl.updateMsgToIsRead(msgId); $(this).removeClass("unread"); var moreId = $(this).data("more-id"); var messageType = $(this).data("message-type"); var messageId = $(this).data("message-id"); switch (parseInt(messageType)) { //审核提示 case 4001: api.openWin({ name: 'operateTicketCommon', url: 'widget://html/message/operateTicketCommon.html', pageParam: { messageId: msgId, type: messageType } }); break; //完成操作票 case 4002: api.openWin({ name: 'operateTicketDetail', url: 'widget://html/feature/logQuery/operateTicketDetail.html', pageParam: { id: moreId, messageId: messageId } }); } }) //点击工作票助手消息 $("#list").on("jump", ".work-message", function() { var messageId = $(this).data("message-id"); ctrl.updateMsgToIsRead(messageId); $(this).removeClass("unread"); var moreId = $(this).data("more-id"); var messageType = $(this).data("message-type"); switch (parseInt(messageType)) { //完成工作票 case 5001: api.openWin({ name: 'workTicket', url: 'widget://html/message/workTicketCommon.html', pageParam: { id: messageId, type: messageType, messageId: messageId } }); break; //完成工作票 case 5002: api.openWin({ name: 'workTicket', url: 'widget://html/feature/logQuery/workTicketDetail.html', pageParam: { ticketId: moreId, messageId: messageId } }); } }) } // 跳转到详情页 ctrl.onTouchMessage = function(dom) { // 如果是编辑模式 不跳转 if (this.editMode) { this.checkedAMessage(dom); return false; } $(dom).trigger('jump'); } // 选择一个消息 ctrl.checkedAMessage = function(dom) { var checkbox = $(dom).find('input[type="checkbox"]'); if (checkbox.is(':checked')) { checkbox.removeAttr('checked'); } else { checkbox.attr('checked', true); } ctrl.updateActBtn(); } //显示消息前的拦截器,当处于体验模式下的话,需要替换配电室名称 ctrl.msgFilter = function(who, list) { if ($api.getStorage('cus') && list && list.length > 0) { //如果处于体验模式下,并且存在消息 switch (who) { case "CUSTOM": break; case "REPAIR": //拦截抢修管家消息 //抢修管家目前有两种2002及2001 for (var i = 0; i < list.length; i++) { var msgEntity = list[i]; if (msgEntity.msg_type == "2002" || msgEntity.msg_type == "2001") { if (/配电室/.test(msgEntity.msg_title)) { msgEntity.msg_title = $api.guestPrName; } } } break; case "INSPECT": //拦截巡检管家消息 //巡检管家消息分两种,只需要对msg_type为3002的巡检日志消息进行处理 //替换掉巡检日志的标题(即配电室名称) for (var i = 0; i < list.length; i++) { var msgEntity = list[i]; if (msgEntity.msg_type == "3002") { msgEntity.msg_title = $api.guestPrName; } } break; case "OPERATE": for (var i = 0; i < list.length; i++) { var msgEntity = list[i]; if (msgEntity.msg_type == "4001" || msgEntity.msg_type == "4002") { msgEntity.msg_title = $api.guestPrName; } } break; case "WORK": for (var i = 0; i < list.length; i++) { var msgEntity = list[i]; if (msgEntity.msg_type == "5001" || msgEntity.msg_type == "5002") { msgEntity.msg_title = $api.guestPrName; } } break; case "REPORT": for (var i = 0; i < list.length; i++) { var msgEntity = list[i]; if (/配电室/.test(msgEntity.msg_title)) { msgEntity.msg_title = $api.guestPrName; } } break; case "ALARM": for (var i = 0; i < list.length; i++) { var msgEntity = list[i]; if (/配电室/.test(msgEntity.msg_title)) { msgEntity.msg_title = $api.guestPrName; } } break; } } }; //读取旧消息 ctrl.getOldMessages = function() { var who = this.people[this.who]; var oldMaxId = this.oldMaxId; messageDao.getOldMessages(who.messageTypes, this.page, this.pageSize, oldMaxId, function(list) { if (list.length == 0) { api.toast({ msg: '没有消息了' }) ctrl.renderMessage([]); } else { //如果 oldMaxId/newMinId 未赋值 表示第一次加载 把最大的id赋值给他们 用于后面渲染是做比较 if (list[0]) { if (!ctrl.newMinId || parseInt(ctrl.newMinId) < parseInt(list[0].msg_id)) { ctrl.newMinId = list[0].msg_id; } if (!ctrl.oldMaxId) { ctrl.oldMaxId = list[0].msg_id; } } ctrl.renderMessage(list); if (list[list.length - 1]) { if (!ctrl.oldMaxId || parseInt(ctrl.oldMaxId) > parseInt(list[list.length - 1].msg_id)) { ctrl.oldMaxId = list[list.length - 1].msg_id; } } ctrl.page++; } }) } //读取新消息 ctrl.getNewMessages = function() { var who = this.people[this.who]; var newMinId = this.newMinId; messageDao.getNewMessages(who.messageTypes, newMinId, function(list) { if (list.length > 0) { ctrl.newMinId = list[list.length - 1].msg_id; ctrl.renderMessage(list); } }) } //渲染消息 ctrl.renderMessage = function(list) { //显示钱先拦截一遍 ctrl.msgFilter(ctrl.who, list); switch (ctrl.who) { case "CUSTOM": ctrl.customRenderCallback(list); break; case "REPAIR": ctrl.repairRenderCallback(list); break; case "INSPECT": ctrl.inspectRenderCallback(list); break; case "OPERATE": ctrl.operateRenderCallback(list); break; case "WORK": ctrl.workRenderCallback(list); break; case 'REPORT': ctrl.reportRenderCallback(list); case 'ALARM': ctrl.alarmRenderCallback(list); } //如果页面上没有消息 显示 空提示 if ($(".message").length == 0) { $("#empty-tips").css("display", "block"); } else { $("#empty-tips").css("display", "none"); } ctrl.updateActBtn(); } //往页面上添加消息 ctrl.appendMessage = function(id, message) { if (parseInt(id) <= parseInt(ctrl.oldMaxId)) { $("#list").append(message); } else { var messages = $(".message"); if (messages.length > 0) { messages.eq(0).before(message); } else { $("#list").append(message); } } } //更新消息为已读 ctrl.updateMsgToIsRead = function(msgId) { messageDao.updateMessageToIsRead(msgId); } var defaltMessagetpl = ''; defaltMessagetpl += '
'; defaltMessagetpl += '
'; defaltMessagetpl += '
'; defaltMessagetpl += '
'; defaltMessagetpl += '
{{msgTitle}}
'; defaltMessagetpl += '
{{content}}
'; defaltMessagetpl += '
'; defaltMessagetpl += '
'; defaltMessagetpl += '
{{time}}
'; defaltMessagetpl += '
'; defaltMessagetpl += '
'; defaltMessagetpl += '
'; defaltMessagetpl += '
'; //渲染自定义消息列表 ctrl.customRenderCallback = function(list) { var length = list.length; var message = ""; for (var i = 0; i < length; i++) { switch (parseInt(list[i].msg_type)) { case 1001: //新闻 message = getNewsDOM(list[i]); break; default: } ctrl.appendMessage(list[i].msg_id, message); } //获取新闻dOM function getNewsDOM(item) { var newsTpl = '
'; newsTpl += '
' newsTpl += '
'; newsTpl += '
{{msgTitle}}
'; newsTpl += '
{{content}} [{{time}}]
'; newsTpl += '
'; newsTpl += '
'; newsTpl += '
'; var msgContent = null; try { msgContent = JSON.parse(item.msg_content); } catch (e) { msgContent = ''; } var content = ""; if (msgContent) { content += msgContent.content.slice(0, 40); } else { content = item.msg_content; } var time = CommonModel.formatDateTime(item.create_time); var unRead = item.is_read == '1' ? "" : 'unread'; var msgTitle = (item.msg_title && item.msg_title != "null" && item.msg_title != "undefined") ? item.msg_title : "新闻"; var message = newsTpl.replace("{{what}}", "operate-message") .replace(/{{messageId}}/g, item.msg_id) .replace("{{messageType}}", item.msg_type) .replace("{{unRead}}", unRead) .replace("{{time}}", time) .replace("{{moreId}}", item.content_id) .replace("{{msgTitle}}", msgTitle) .replace("{{content}}", content); var dom = $(message); if (msgContent && msgContent.pic) { api.imageCache({ url: msgContent.pic, thumbnail: false }, function(ret, err) { if (ret.status) { dom.find(".right").html('
') } }) } return dom; } } //渲染抢修管家消息 ctrl.repairRenderCallback = function(list) { var length = list.length; for (var i = 0; i < length; i++) { var msgTitle = (list[i].msg_title && list[i].msg_title != "null" && list[i].msg_title != "undefined") ? list[i].msg_title : "消息"; var unRead = list[i].is_read == '1' ? "" : 'unread'; var message = defaltMessagetpl.replace("{{what}}", "repair-message") .replace(/{{messageId}}/g, list[i].msg_id) .replace("{{messageType}}", list[i].msg_type) .replace("{{unRead}}", unRead) .replace("{{moreId}}", list[i].content_id) .replace("{{msgTitle}}", msgTitle) .replace("{{time}}", CommonModel.formatDateTime(list[i].create_time)) .replace("{{content}}", list[i].msg_content) .replace("{{iconSrc}}", "../../image/message_icon_" + list[i].msg_type + '.svg') .replace("{{iconClass}}", "icon_" + list[i].msg_type); ctrl.appendMessage(list[i].msg_id, message); } } //渲染巡检管家消息 ctrl.inspectRenderCallback = function(list) { var length = list.length; for (var i = 0; i < length; i++) { var msgTitle = (list[i].msg_title && list[i].msg_title != "null" && list[i].msg_title != "undefined") ? list[i].msg_title : "消息"; var unRead = list[i].is_read == '1' ? "" : 'unread'; var message = defaltMessagetpl.replace("{{what}}", "inspect-message") .replace(/{{messageId}}/g, list[i].msg_id) .replace("{{messageType}}", list[i].msg_type) .replace("{{unRead}}", unRead) .replace("{{moreId}}", list[i].content_id) .replace("{{msgTitle}}", msgTitle) .replace("{{time}}", CommonModel.formatDateTime(list[i].create_time)) .replace("{{content}}", list[i].msg_content) .replace("{{iconSrc}}", "../../image/message_icon_" + list[i].msg_type + '.svg') .replace("{{iconClass}}", "icon_" + list[i].msg_type); ctrl.appendMessage(list[i].msg_id, message); } } // add by guoyuanyuan 2018/9/11 // 渲染报表管家消息 ctrl.reportRenderCallback = function(list) { var length = list.length; for (var i = 0; i < length; i++) { var msgTitle = (list[i].msg_title && list[i].msg_title != "null" && list[i].msg_title != "undefined") ? list[i].msg_title : "消息"; var unRead = list[i].is_read == '1' ? "" : 'unread'; var message = defaltMessagetpl.replace("{{what}}", "report-message") .replace(/{{messageId}}/g, list[i].msg_id) .replace("{{messageType}}", list[i].msg_type) .replace("{{unRead}}", unRead) .replace("{{moreId}}", list[i].content_id) .replace("{{msgTitle}}", msgTitle) .replace("{{currentTime}}", list[i].create_time) .replace("{{time}}", CommonModel.formatDateTime(list[i].create_time)) .replace("{{content}}", list[i].msg_content) .replace("{{iconSrc}}", "../../image/message_icon_" + list[i].msg_type + '.svg') .replace("{{iconClass}}", "icon_" + list[i].msg_type); ctrl.appendMessage(list[i].msg_id, message); } } // add by guoyuanyuan 2018/9/20 // 渲染报警管家消息 ctrl.alarmRenderCallback = function(list) { var length = list.length; for (var i = 0; i < length; i++) { var msgTitle = (list[i].msg_title && list[i].msg_title != "null" && list[i].msg_title != "undefined") ? list[i].msg_title : "消息"; var unRead = list[i].is_read == '1' ? "" : 'unread'; var message = defaltMessagetpl.replace("{{what}}", "alarm-message") .replace(/{{messageId}}/g, list[i].msg_id) .replace("{{messageType}}", list[i].msg_type) .replace("{{unRead}}", unRead) .replace("{{moreId}}", list[i].content_id) .replace("{{msgTitle}}", msgTitle) .replace("{{currentTime}}", list[i].create_time) .replace("{{time}}", CommonModel.formatDateTime(list[i].create_time)) .replace("{{content}}", list[i].msg_content) .replace("{{iconSrc}}", '../../image/message_icon_6001.svg') .replace("{{iconClass}}", "icon_" + list[i].msg_type); ctrl.appendMessage(list[i].msg_id, message); } } //操作票助手消息 ctrl.operateRenderCallback = function(list) { var length = list.length; for (var i = 0; i < length; i++) { var msgTitle = (list[i].msg_title && (list[i].msg_title != "null" || list[i].msg_title != "undefined")) ? list[i].msg_title : "消息"; var unRead = list[i].is_read == '1' ? "" : 'unread'; var message = defaltMessagetpl.replace("{{what}}", "operate-message") .replace(/{{messageId}}/g, list[i].msg_id) .replace("{{messageType}}", list[i].msg_type) .replace("{{unRead}}", unRead) .replace("{{moreId}}", list[i].content_id) .replace("{{msgTitle}}", msgTitle) .replace("{{time}}", CommonModel.formatDateTime(list[i].create_time)) .replace("{{content}}", list[i].msg_content) .replace("{{iconSrc}}", "../../image/message_icon_" + list[i].msg_type + '.svg') .replace("{{iconClass}}", "icon_" + list[i].msg_type); ctrl.appendMessage(list[i].msg_id, message); } } //工作票助手消息 ctrl.workRenderCallback = function(list) { var length = list.length; for (var i = 0; i < length; i++) { var msgTitle = (list[i].msg_title && (list[i].msg_title != "null" || list[i].msg_title != "undefined")) ? list[i].msg_title : "消息"; var unRead = list[i].is_read == '1' ? "" : 'unread'; var message = defaltMessagetpl.replace("{{what}}", "work-message") .replace(/{{messageId}}/g, list[i].msg_id) .replace("{{messageType}}", list[i].msg_type) .replace("{{unRead}}", unRead) .replace("{{moreId}}", list[i].content_id) .replace("{{msgTitle}}", msgTitle) .replace("{{time}}", CommonModel.formatDateTime(list[i].create_time)) .replace("{{content}}", list[i].msg_content) .replace("{{iconSrc}}", "../../image/message_icon_" + list[i].msg_type + '.svg') .replace("{{iconClass}}", "icon_" + list[i].msg_type); ctrl.appendMessage(list[i].msg_id, message); } } // 打开编辑模式 ctrl.openEditMode = function() { $("body").addClass('edit-mode'); $('.message').removeClass('bg-touch'); $(".message input[type='checkbox']").removeAttr('checked'); this.updateActBtn(); this.editMode = true; } // 关闭编辑模式 ctrl.cancelEditMode = function() { $("body").removeClass('edit-mode'); $('.message').addClass('bg-touch'); this.editMode = false; } // 更新全选按钮的状态 ctrl.updateActBtn = function() { var messageLength = $(".message").length; var checkedMessageLength = $(".message input[type='checkbox']:checked").length; var checkedUnReadMessageLength = $(".message.unread input[type='checkbox']:checked").length; // 如果处于编辑状态,页面上的选中条数也总条数不一样,显示全选按钮 var selectAllBtn = $("#select-all"); if (checkedMessageLength != messageLength) { $("#select-all").data('select-all', 0).text('全选'); } else { $("#select-all").data('select-all', 1).text('取消'); } if (checkedUnReadMessageLength > 0) { $('#mark-to-readed').removeClass('color-gray').addClass('color-green').data('useable', 1); } else { $('#mark-to-readed').removeClass('color-green').addClass('color-gray').data('useable', 0); } if (checkedMessageLength > 0) { $('#remove').removeClass('color-gray').addClass('color-red').data('useable', 1); } else { $('#remove').removeClass('color-red').addClass('color-gray').data('useable', 0); } if (messageLength == 0) { $("#act-panel").css('display', 'none'); } } // 批量删除消息 ctrl.removeMessages = function() { var checkedMessage = $(".message input[type='checkbox']:checked"); var index = 0; if (checkedMessage.length > 0) { remove(); } function remove() { (function(index) { var messageId = checkedMessage[index].value; messageDao.deleteOne(messageId, function(ret) { $(checkedMessage[index]).parents('.message').remove(); $(checkedMessage[index]).removeAttr('checked'); }) })(index) index++; if (index < checkedMessage.length) { setTimeout(function() { remove() }, 100); } } } // 批量标记为已读 ctrl.markMessagesToReaded = function() { var checkedMessage = $(".message.unread input[type='checkbox']:checked"); var index = 0; if (checkedMessage.length > 0) { mark(); } function mark() { (function(index) { var messageId = checkedMessage[index].value; messageDao.updateMessageToIsRead(messageId, function(ret) { $(checkedMessage[index]).parents('.message').removeClass('unread'); $(checkedMessage[index]).removeAttr('checked'); }) })(index) index++; if (index < checkedMessage.length) { setTimeout(function() { mark() }, 100); } } } ctrl.init(); }