diff --git a/Web12306/Web12306.csproj b/Web12306/Web12306.csproj index 8244039..f1c42c1 100644 --- a/Web12306/Web12306.csproj +++ b/Web12306/Web12306.csproj @@ -214,6 +214,7 @@ + diff --git a/Web12306/css/ui/date-selector.css b/Web12306/css/ui/date-selector.css index 00ee687..20f75c1 100644 --- a/Web12306/css/ui/date-selector.css +++ b/Web12306/css/ui/date-selector.css @@ -215,7 +215,7 @@ } .date-selector table th { - line-height: 31px; + line-height: 21px; border-top: 1px solid #bb6c29; border-bottom: 1px solid #bb6c29; background: linear-gradient(to top, #f87c06, #fa9104); @@ -244,6 +244,20 @@ cursor: pointer; } + .date-selector table td span.lunar { + display: block; + font-size: 80%; + font-weight: normal; + color: #a8a7a8; + line-height: 120%; + background-color: #e9e9e9; + } + + .date-selector table td:hover span.lunar, + .date-selector table td.date-selected span.lunar { + background-color: #ffdebf; + color: #ff9b00; + } /*.date-selector table td:active { background-color: #f78800; color: #ffffff; @@ -260,6 +274,11 @@ background-color: #FFF1E0; } + .date-selector .date-commonavailable span.lunar { + color: #f87c06; + background-color: #fbe0be; + } + .date-selector .date-notavailable { background-color: #ffffff; color: #ccc; @@ -270,6 +289,7 @@ background: none; color: #ccc; } - .date-selector .date-thismonth { - font-weight: bold; - } \ No newline at end of file + +.date-selector .date-thismonth { + font-weight: bold; +} diff --git a/Web12306/js/boot.js b/Web12306/js/boot.js index 845b7d0..60857eb 100644 --- a/Web12306/js/boot.js +++ b/Web12306/js/boot.js @@ -15,7 +15,8 @@ }; //block aq - localStorage["noDirectAccess"] = "1"; + if (localStorage["noDirectAccess"]) + localStorage.removeItem("noDirectAccess"); //extend jquery $.fn.extend({ diff --git a/Web12306/js/otn/queryticket.js b/Web12306/js/otn/queryticket.js index 661abe9..d328121 100644 --- a/Web12306/js/otn/queryticket.js +++ b/Web12306/js/otn/queryticket.js @@ -159,6 +159,7 @@ exports.queryTicket = function (from, fromName, to, toName, date, student, resign, noProcess, noAction, byAuto) { var def = new $.Deferred(); var queryCount = 0; + var queryLogSubmited = false; def.fail(function () { exports.events.fireEvent("requestFailed"); @@ -180,7 +181,7 @@ toName = evdata.toName; } - var queryFail = function() { + var queryFail = function () { if (queryCount++ < 5) { //def.notify("12306出问题了,正在第 " + queryCount + " 次重连..."); setTimeout(sendQueryRequest, 2000); @@ -216,6 +217,12 @@ queryTicketUrl = this.model.c_url; sendQueryRequest(); } else if (!this.model.status) { + var error = parser.getError(this.model); + if (error && error.message && error.message.indexOf("查询失败") !== -1) { + exports.log(p, cookie, true).always(queryFail); + return; + } + queryFail(); } else { var data = transferData({ @@ -269,17 +276,22 @@ return def.promise(); }; - exports.log = function (data, cookies) { - if (!isLogOpen || (lastLogTime && (new Date() - lastLogTime) < 5000)) - return; + exports.log = function (data, cookies, force) { + var def = new $.Deferred(); + + if (!isLogOpen || ((lastLogTime && (new Date() - lastLogTime) < 5000) && !force)) { + def.reject(); + return def.promise(); + } lastLogTime = new Date(); ajax.sendGet("leftTicket/log", "leftTicket/init", data, "json", function () { - + def.resolve(); }, function () { - + def.reject(); }, false, { "Cookie": cookies }); + return def.promise(); }; exports.queryTrainStop = function (id, from, to, date) { diff --git a/Web12306/js/platform/lunarCalendar.js b/Web12306/js/platform/lunarCalendar.js new file mode 100644 index 0000000..c6f8d46 --- /dev/null +++ b/Web12306/js/platform/lunarCalendar.js @@ -0,0 +1,103 @@ +define(function (require, exports, module) { + var calendarData = [ + 0xA4B, 0x5164B, 0x6A5, 0x6D4, 0x415B5, 0x2B6, 0x957, 0x2092F, 0x497, 0x60C96, 0xD4A, 0xEA5, 0x50DA9, 0x5AD, 0x2B6, 0x3126E, 0x92E, 0x7192D, 0xC95, 0xD4A, 0x61B4A, 0xB55, 0x56A, + 0x4155B, 0x25D, 0x92D, 0x2192B, 0xA95, 0x71695, 0x6CA, 0xB55, 0x50AB5, 0x4DA, 0xA5B, 0x30A57, 0x52B, 0x8152A, 0xE95, 0x6AA, 0x615AA, 0xAB5, 0x4B6, 0x414AE, 0xA57, 0x526, 0x31D26, + 0xD95, 0x70B55, 0x56A, 0x96D, 0x5095D, 0x4AD, 0xA4D, 0x41A4D, 0xD25, 0x81AA5, 0xB54, 0xB6A, 0x612DA, 0x95B, 0x49B, 0x41497, 0xA4B, 0xA164B, 0x6A5, 0x6D4, 0x615B4, 0xAB6, 0x957, + 0x5092F, 0x497, 0x64B, 0x30D4A, 0xEA5, 0x80D65, 0x5AC, 0xAB6, 0x5126D, 0x92E, 0xC96, 0x41A95, 0xD4A, 0xDA5, 0x20B55, 0x56A, 0x7155B, 0x25D, 0x92D, 0x5192B, 0xA95, 0xB4A, 0x416AA, + 0xAD5, 0x90AB5, 0x4BA, 0xA5B, 0x60A57, 0x52B, 0xA93, 0x40E95 + ]; + var madd = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 206, 334]; + var numString = "一二三四五六七八九十"; + var monString = "正二三四五六七八九十冬腊"; + var cYear, cMonth, cDay, theDate; + + var getBit = function (m, n) { return (m >> n) & 1; }; + + var e2c = function () { + theDate = (arguments.length != 3) ? new Date() : new Date(arguments[0], arguments[1], arguments[2]); + var total, m, n, k; + var isEnd = false; + var tmp = theDate.getFullYear(); + total = (tmp - 1921) * 365 + Math.floor((tmp - 1921) / 4) + madd[theDate.getMonth()] + theDate.getDate() - 38; + if (theDate.getYear() % 4 == 0 && theDate.getMonth() > 1) { + total++; + } + for (m = 0; ; m++) { + k = (calendarData[m] < 0xfff) ? 11 : 12; + for (n = k; n >= 0; n--) { + if (total <= 29 + getBit(calendarData[m], n)) { + isEnd = true; + break; + } + total = total - 29 - getBit(calendarData[m], n); + } + if (isEnd) break; + } + cYear = 1921 + m; + cMonth = k - n + 1; + cDay = total; + if (k == 12) { + if (cMonth == Math.floor(calendarData[m] / 0x10000) + 1) { + cMonth = 1 - cMonth; + } + if (cMonth > Math.floor(calendarData[m] / 0x10000) + 1) { + cMonth--; + } + } + }; + var getcDateString = function () { + var tmp = ""; + if (cMonth < 1) { + tmp += "(闰)"; + tmp += monString.charAt(-cMonth - 1); + } else { + tmp += monString.charAt(cMonth - 1); + } + tmp += "月"; + tmp += getShortDateString(); + return tmp; + }; + var getShortDateString = function () { + var tmp = (cDay < 11) ? "初" : ((cDay < 20) ? "十" : ((cDay < 30) ? "廿" : "三十")); + if (cDay % 10 != 0 || cDay == 10) { + tmp += numString.charAt((cDay - 1) % 10); + } + + return tmp; + }; + var getLunarDay = function (solarYear, solarMonth, solarDay) { + if (solarYear < 1921 || solarYear > 2020) { + return ""; + } else { + solarMonth = (parseInt(solarMonth) > 0) ? (solarMonth - 1) : 11; + e2c(solarYear, solarMonth, solarDay); + return getcDateString(); + } + }; + var getShortLunarDay = function (solarYear, solarMonth, solarDay) { + if (solarYear < 1921 || solarYear > 2020) { + return ""; + } else { + solarMonth = (parseInt(solarMonth) > 0) ? (solarMonth - 1) : 11; + e2c(solarYear, solarMonth, solarDay); + return getShortDateString(); + } + }; + + return { + getDisplayDate: function (date) { + var yy = date.getFullYear(); + var mm = date.getMonth() + 1; + var dd = date.getDate(); + + return getLunarDay(yy, mm, dd); + }, + getShortDisplayDate: function (date) { + var yy = date.getFullYear(); + var mm = date.getMonth() + 1; + var dd = date.getDate(); + + return getShortLunarDay(yy, mm, dd); + } + }; +}); diff --git a/Web12306/js/ui/widget_datedropdown.js b/Web12306/js/ui/widget_datedropdown.js index 0598ce8..eb9719f 100644 --- a/Web12306/js/ui/widget_datedropdown.js +++ b/Web12306/js/ui/widget_datedropdown.js @@ -1,6 +1,7 @@ define(function (require, exports, module) { var param = require("../data.js"); var utility = require("../utility.js"); + var lunarCalendar = require("../platform/lunarCalendar.js"); var getCurDate = function () { var now = new Date(); @@ -30,7 +31,16 @@ var maxTime = param.maxDate.getTime(); for (var i = 0; i < 42; i++) { var cell = cells.eq(i); - cell.html(dateTmp.getDate()); + + var lunarDesc = lunarCalendar.getShortDisplayDate(dateTmp); + if (dateTmp.getFullYear() === 2015 && dateTmp.getMonth() === 1) { + var day = dateTmp.getDate(); + if (day === 18) + lunarDesc = "除夕"; + else if (day === 19) + lunarDesc = "春节"; + } + cell.html(dateTmp.getDate() + "" + lunarDesc + ""); cell.removeClass(); if (dateTmp.getMonth() === thismonth) { @@ -38,7 +48,7 @@ } if (/*dateTmp.getMonth() !== thismonth || */dateTmp.getTime() < minTime) { cell.addClass("date-notavailable"); - }else if (dateTmp.getTime() === currentDate.getTime()) { + } else if (dateTmp.getTime() === currentDate.getTime()) { cell.addClass("date-current"); } else if (dateTmp.getTime() <= maxTime) { cell.addClass("date-commonavailable");