Light12306/Web12306/js/ui/ui-sysnotice.js

71 lines
2.4 KiB
JavaScript

define(function (require, exports, module) {
var data = require("../data.js");
var utility = require("../utility.js");
var storage = require("../platform/storage.js");
var loadUrl = data.sysNoticeUrl;
var savedNotice = JSON.parse(storage.get("systemNotice") || "{}");
var unreadNotice = null;
var noticeTemplate = $("#search_tips_template").doT();
var loadSystemNotice = function () {
$.get(loadUrl).done(function (json) {
json.lastLoad = new Date().getTime();
if (savedNotice.lastReadId) {
var takeCounter = 0;
json.items = _.filter(json.items, function (i) {
return !savedNotice.lastReadId || savedNotice.lastReadId < i.id || (takeCounter++ < data.sysNoticeMaxShowCount);
});
json.lastReadId = savedNotice.lastReadId;
}
savedNotice = json;
unreadNotice = _.filter(savedNotice.items, function (s) {
return !savedNotice.lastReadId || savedNotice.lastReadId < s.id;
});
renderUnreadNotice();
storage.put("systemNotice", savedNotice);
//定时器
setTimeout(loadSystemNotice, data.sysNoticeLoadInterval);
});
};
var renderUnreadNotice = function () {
if (unreadNotice && unreadNotice.length) {
$(".search-tips-container").html(noticeTemplate(unreadNotice));
$("#index-tip-body").find(".order-num").html(unreadNotice.length).show();
} else {
$("#index-tip-body").find(".order-num").html(0).hide();
//取最新的几条通知
var shownNotice = _.first(savedNotice.items, data.sysNoticeMaxShowCount);
$(".search-tips-container").html(noticeTemplate(shownNotice));
}
};
var resetUnreadItems = function () {
unreadNotice = null;
renderUnreadNotice();
};
//是否需要立刻刷新通知?
if (!savedNotice.lastLoad || (new Date().getTime() - savedNotice.lastLoad) > 1000 * 60 * 30) {
loadSystemNotice();
} else {
unreadNotice = _.filter(savedNotice.items, function (s) {
return savedNotice.lastReadId < s.id;
});
renderUnreadNotice();
var nextTime = Math.min(savedNotice.lastLoad ? new Date() - savedNotice.lastLoad : data.sysNoticeLoadInterval, data.sysNoticeLoadInterval);
setTimeout(loadSystemNotice, nextTime);
}
$("#index-tip-body").click(function () {
$(this).next().fadeIn();
});
$(document).on("click", "section.search-tips-container i.fa-times", function () {
$(this).closest("section.search-tips-container").fadeOut();
savedNotice.lastReadId = savedNotice.items[0].id;
resetUnreadItems();
});
});