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(); }, 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)); 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(){ // cn12306.get("leftTicket/query", setting, "json", function (text) { // var trains = htmlParser.analyzeTicketQueryData(text); // if (showDlg) { // if (!trains.length) { // dlg.setState("block", "未能查询到任何车次,请修改条件或稍后重试。"); // dlg.autoCloseDialog(); // } else { // dlg.closeDialog(); // } // } // callback.call(this, trains); // }, function (text) { // if (showDlg) // dlg.delayExecute(3, runquery, "操作出现网络错误"); // }, "", "leftTicket/init"); var loading = Public.showLoading('正在查票'); cn12306.ajax({ type:"GET", url: "leftTicket/query", 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" }, refer: "leftTicket/init", success: function(json) { // console.log(JSON.stringify(json)); if(json["status"] == true && json["httpstatus"] == 200){ if(json['data'].length > 0){ RunQuery.formatJson(json); RunQuery.formatList(); } } Public.hideLoading(loading); }, error: 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++) { obj['ticketMapSort'][i]; if(obj['ticketMapSort'][i]["count"] == 0){ continue; } html += '
    '; if(obj['ticketMapSort'][i]["count"]=='有'){ html+=''; }else{ html+=''+obj['ticketMapSort'][i]["count"]+''; html+=''; } 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"), "limitSellInfo": t['buttonTextInfo'] && t['buttonTextInfo'].indexOf("暂售") != -1 ? t['buttonTextInfo'].replace(/<[^>]+>/i, "") : null }; 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); console.log(train.ticketMapSort); // 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(); } } // var transferData = function (data, noProcess) { // var result = data; // if (!Array.isArray(result.data) || !result.data.length || !result.data[0].queryLeftNewDTO) { // exports.events.fireEvent("requestFailed"); // }; // var trainData = { raw: result, rawTrainMap: {}, trainMap: {}, auto: null, nextTime: null }; // _.each(result.data, function (t) { // var 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"), // limitSellInfo: t.buttonTextInfo && t.buttonTextInfo.indexOf("暂售") != -1 ? t.buttonTextInfo.replace(/<[^>]+>/i, "") : null // }; // var kp = getTicketInfo(t.queryLeftNewDTO.yp_info); // train.tickets = kp; // train.ticketMap = _.mapObject(kp, function (e) { return e.code; }); // //起售时间 // var 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; // }); // trainData.original = _.values(trainData.trainMap); // trainData.available = trainData.original; // trainData.trainCodes = _.pluck(trainData.original, "code"); // trainData.filtered = []; // trainData.include = trainData.available; // // if (!noProcess) { // // //执行车次预过滤。过滤内容:出发地,目标地,时间 // // exports.events.fireEvent("filterTrains", trainData); // // //处理车次 // // exports.events.fireEvent("processTrains", trainData); // // //过滤数据 // // if (trainData.filtered && trainData.filtered.length) { // // //从原始数据中删除 // // var orgMap = _.mapObject(result.data, function (e) { // // return e.queryLeftNewDTO.train_no; // // }); // // var filtered = _.map(trainData.filtered, function (t) { // // return orgMap[t.id]; // // }); // // trainData.rawDataFiltered = _.without.apply(null, [result.data].concat(filtered)); // // result.data = trainData.rawDataFiltered; // // } // // } // return trainData; // };