var RunQuery = { init: function() { if ($('#runquery_page').length == 0) { return false; } var maxDay = (new Date()).addDays(19); Public.formatString = 'M月d日'; Public.setDate(maxDay); Public.calendar.checkCallback = RunQuery.dateChangeCallback; RunQuery.getQueryData(); if (!RunQuery.curData) { window.location.href = 'query.html'; return false; } $('#filter_ok').on('click', function() { Public.hideInnerPage('filter'); $('#query_form [name=filters]').val($('#filter_form').serialize()); RunQuery.hisUpdata(); }); $('#check_left,#check_right').on('click', function() { RunQuery.hisUpdata(); }); $('#filter_cancel').on('click', function() { Public.hideInnerPage('filter'); var bak = $('#query_form [name=filters]').val(), querys = bak.split('&'); Query.setFilter(querys); }); RunQuery.checkLogin(); RunQuery.setFilter(); $('#filter_btn').on('click', function() { Public.showInnerPage('filter'); }); $('#filter_cancel').on('click', function() { Public.hideInnerPage(); }); RunQuery.queryTicket(); $('[data-fn="buy"]').live('click',function(){ var train = $(this).attr('data-traincode'), seat = $(this).attr('data-seatcode'); console.log(RunQuery.trainData.trainMap[train]) sessionStorage.setItem('curBuy',JSON.stringify(RunQuery.trainData.trainMap[train])); sessionStorage.setItem('curBuySeat',seat); window.location.href = 'perfect.html'; }); }, curData: null, getQueryData: function() { if (!!Public.his.queryObjs[Public.his.querys[0][0]]) { RunQuery.curData = Public.his.queryObjs[Public.his.querys[0][0]]; } }, setFilter: function() { Query.setFilter(RunQuery.curData['filters'].split('&')); $('.station_title strong').html(RunQuery.curData['startname'] + '→' + RunQuery.curData['endname']); $('#query_form [name=startname]').val(RunQuery.curData['startname']); $('#query_form [name=startcode]').val(RunQuery.curData['startcode']); $('#query_form [name=endname]').val(RunQuery.curData['endname']); $('#query_form [name=endcode]').val(RunQuery.curData['endcode']); $('#query_form [name=type]').val(RunQuery.curData['type']); $('#query_form [name=filters]').val(RunQuery.curData['filters']); var date = new Date(RunQuery.curData['start_date'].replace(/\-/g, '/')); $('#start_date').html(date.format('M月d日') + ' ' + date.day(3)); $('#start_date_val').val(date.format('yyyy-MM-dd')); Public.calendar.setCurDate(date); }, isLogin: false, checkNum: 0, checkLogin: function() { RunQuery.checkNum++; cn12306.isUserLogined(RunQuery.hasLogin, RunQuery.noLogin, function() { RunQuery.noLogin(); // Public.toast("登录时网络错误"); if (RunQuery.checkNum < 2) { RunQuery.checkLogin(); } }); }, hasLogin: function() { RunQuery.isLogin = true; $('body').removeClass('nologin'); $('#login_tip').hide(); }, noLogin: function() { RunQuery.isLogin = false; $('body').addClass('nologin'); $('#login_tip').show(); }, queryTicket: function() { var loading = Public.showLoading('正在查票'), data = { "leftTicketDTO.train_date": RunQuery.curData.start_date, "leftTicketDTO.from_station": RunQuery.curData.startcode, "leftTicketDTO.to_station": RunQuery.curData.endcode, "purpose_codes": RunQuery.curData.type == "2" ? "0X00" : "ADULT" }; // (url, returnType, postdata, refer, headers) bootStrap.get("leftTicket/query", "json", data, "leftTicket/init").done(function(json) { if (json["status"] == true && json["httpstatus"] == 200) { if (json['data'].length > 0) { RunQuery.formatJson(json); RunQuery.formatList(); } } Public.hideLoading(loading); }).fail(function(xhr, type) { console.log(xhr, type); Public.hideLoading(loading); }); }, formatList: function() { var lists = RunQuery.trainData.trainMap, html = '', obj = {}; for (var k in lists) { // if (!lists[k]['available']) { // continue; // } obj = lists[k]; html += '
  • '; /*第1行*/ html += '
    '; html += '' + obj["code"] + ''; html += '' + obj["from"]["time"] + ''; html += ''; if (obj["from"]["code"] == obj["start"]["code"]) { html += ''; } html += obj["from"]["name"] + ''; html += '
    '; /*第2行*/ html += '
    '; ls = obj["elapsedTime"]['total'].split(':'); html += '' + (!!ls[0] ? ls[0] + '小时' : '') + (!!ls[1] ? ls[1] + '分' : '0分') + ''; html += ''; html += obj["to"]["time"] + ''; html += '' if (obj["to"]["code"] == obj["end"]["code"]) { html += ''; } html += obj["to"]["name"] + ''; html += '
    '; /*输出席别*/ /*商务坐*/ for (var i = 0; i < obj['ticketMapSort'].length; i++) { if (obj['ticketMapSort'][i]["count"] == 0) { continue; } html += '
    '; if (obj['ticketMapSort'][i]["count"] == '有') { html += ''; } else { html += '' + obj['ticketMapSort'][i]["count"] + ''; html += ''; } if(!obj['isMaintain']){ html += '抢票'; }else{ html += '维护'; } html += ''; html += '' + obj['ticketMapSort'][i]['name'] + ''; html += '' + (obj['ticketMapSort'][i]['price'] / 10) + '元'; html += '
    '; }; html += '
  • '; }; $('#train_list').html(html); $('.station_title span').html('共 ' + $('#train_list li').length + ' 趟列车'); }, getTicketInfo: function(v) { var data = [], info = v.indexOf("#") === -1 ? v : /getSelected\(['"](.*?)['"]\)/i.exec(v)[1].split('#')[11], match = info.match(/([A-Z\d])0*?([\*\d]{5})0*?(\d{4})/gi); for (var j in match) { var m = /([A-Z\d])0*?([\*\d]{5})0*?(\d{4})/i.exec(match[j]); var sc = m[1]; var sp = m[2][0] == '*' ? null : parseInt(m[2], 10); var st = parseInt(m[3], 10); var seat = { code: sc, name: Util.toSeatTypeName(sc), price: sp }; if (st < 3000) { seat.count = st; //TODO 二等软座提交是否和二等座一样都用的MO? //一等软座 7, 二等软座 8 if (sc === "7") { data.push({ code: 'M', name: Util.toSeatTypeName('M'), price: sp, count: st }); } else if (sc === "8") { data.push({ code: 'O', name: Util.toSeatTypeName('O'), price: sp, count: st }); } else { data.push(seat); } } else { seat.count = st - 3000; seat.code = '0'; seat.name = "无座"; data.push(seat); } }; return data; }, trainData: null, formatJson: function(data) { if (!Array.isArray(data['data']) && !data['data'].length) { return null; } var lists = data['data'], train, kp, selltimem, trainData = { raw: data, rawTrainMap: {}, trainMap: {}, auto: null, nextTime: null }; for (var i = 0; i < lists.length; i++) { t = lists[i]; train = { "id": t["queryLeftNewDTO"]["train_no"], "code": t["queryLeftNewDTO"]["station_train_code"], "available": t["queryLeftNewDTO"]["canWebBuy"] === 'Y' ? 1 : 0, "start": { "code": t["queryLeftNewDTO"]['start_station_telecode'], "name": t["queryLeftNewDTO"]["start_station_name"] }, "from": { "code": t["queryLeftNewDTO"]['from_station_telecode'], "fromStationNo": t["queryLeftNewDTO"]['from_station_no'], "name": t["queryLeftNewDTO"]['from_station_name'], "endpoint": t["queryLeftNewDTO"]['from_station_telecode'] == t["queryLeftNewDTO"]['start_station_telecode'], "time": t["queryLeftNewDTO"]['start_time'] }, "to": { "code": t["queryLeftNewDTO"]['to_station_telecode'], "toStationNo": t["queryLeftNewDTO"]['to_station_no'], "name": t["queryLeftNewDTO"]['to_station_name'], "endpoint": t["queryLeftNewDTO"]['end_station_telecode'] == t["queryLeftNewDTO"]['to_station_telecode'], "time": t["queryLeftNewDTO"]['arrive_time'] }, "elapsedTime": { "days": t["queryLeftNewDTO"]['day_difference'], "total": t["queryLeftNewDTO"]['lishi'] }, "end": { "code": t["queryLeftNewDTO"]['end_station_telecode'], "name": t["queryLeftNewDTO"]['end_station_name'] }, "ypinfo": t["queryLeftNewDTO"]['yp_info'], "ypinfo_ex": t["queryLeftNewDTO"]['yp_ex'], "locationCode": t["queryLeftNewDTO"]['location_code'], "controlDay": t["queryLeftNewDTO"]['control_day'], "supportCard": t["queryLeftNewDTO"]['is_support_card'], "saleTime": t["queryLeftNewDTO"]['sale_time'], "secureStr": t['secretStr'], "selltime": null, "date": t["queryLeftNewDTO"]['start_train_date'].replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3"), "form_train_date":RunQuery.curData.start_date, "limitSellInfo": t['buttonTextInfo'] && t['buttonTextInfo'].indexOf("暂售") != -1 ? t['buttonTextInfo'].replace(/<[^>]+>/i, "") : null, "isMaintain":t['buttonTextInfo'].indexOf("系统维护时间") != -1 }; kp = RunQuery.getTicketInfo(t["queryLeftNewDTO"]['yp_info']); train.tickets = kp; train.ticketMap = Util.mapObject(kp, function(e) { return e.code; }); train.ticketMapSort = Util.sortType(train.ticketMap); // for (var i = 0; i < train.ticketMapSort.length; i++) { // if(train.ticketMapSort[i]['count'] == 0){ // train.ticketMapSort.splice(i,1); // i--; // } // }; // //起售时间 selltimem = /(0*(\d+)月0*(\d+)日)?(\d+)\s*点\s*((\d+)分)?\s*起售/i.exec(t.buttonTextInfo.replace(/<.*?>/g, '')); if (selltimem) { train.available = -1; train.selltime = new Date(); train.selltime.setHours(parseInt(selltimem[4])); train.selltime.setMinutes(parseInt(selltimem[6] || "0", 10)); train.selltime.setSeconds(0); if (selltimem[1]) { //带日期 train.selltime.setMonth(parseInt(selltimem[2]) - 1); train.selltime.setDate(parseInt(selltimem[3])); if (train.selltime.getMonth() < new Date().getMonth()) { train.selltime.setFullYear(train.selltime.getFullYear() + 1); } } } trainData.rawTrainMap[train.id] = t; trainData.trainMap[train.id] = train; }; RunQuery.trainData = trainData; }, dateChangeCallback: function(date) { var time = date.date.getTime(); if (time >= Public.calendar.minDate.date.getTime() && time <= Public.calendar.maxDate.date.getTime()) { $('#date_tip').hide(); Public.hideInnerPage('date_box'); $('#start_date').html(Public.calendar.curDate.format(Public.formatString) + ' ' + Public.calendar.curDate.day(3)); $('#start_date_val').val(Public.calendar.curDate.format('yyyy-MM-dd')); RunQuery.hisUpdata(); console.log(date); } else { var offset = $('a.cur', Public.calendar.wrap).offset(); $('#date_tip').css({ 'left': offset.left, 'top': offset.top, 'display': 'block' }).html('

    ' + date.format('M月d日') + '不在预售期

    预约提醒'); if (offset.left / window.innerWidth > 0.75) { $('#date_tip').attr('class', 'tip_small tip_right'); } else if (offset.left / window.innerWidth < 0.15) { $('#date_tip').attr('class', 'tip_small tip_left'); } else { $('#date_tip').attr('class', 'tip_small'); } } }, hisUpdata: function() { Public.setHisQuery($('#startStationCode').val() + '-' + $('#endStationCode').val(), $('#query_form').serialize()); Public.setHis(); RunQuery.getQueryData(); RunQuery.queryTicket(); } }