修正部分bug;增加微博分享功能

This commit is contained in:
iFish 2014-07-23 17:32:50 +08:00
parent 1e4e01168b
commit 29967a9edc
21 changed files with 168 additions and 47 deletions

View File

@ -0,0 +1,2 @@
/// <reference path="/js/modules/jquery/jquery.js"/>
/// <reference path="/js/modules/underscore/underscore.js"/>

View File

@ -205,12 +205,14 @@
<Content Include="js\ui\ui-theme-manager.js" />
<Content Include="js\ui\ui-train-stop.js" />
<Content Include="js\ui\ui-trainlist.js" />
<Content Include="js\ui\ui_sns_share.js" />
<Content Include="js\ui\widget.js" />
<Content Include="js\ui\widget_cityselector.js" />
<Content Include="js\ui\widget_datebar.js" />
<Content Include="js\ui\widget_datedropdown.js" />
<Content Include="js\ui\widget_message_popup.js" />
<Content Include="js\ui\widget_verifycode.js" />
<None Include="Scripts\_references.js" />
<Content Include="Web.config" />
<Content Include="Web.Debug.config">
<DependentUpon>Web.config</DependentUpon>

View File

@ -42,12 +42,18 @@
font-weight: bold;
}
a.button-primary {
color: #fff;
}
.button-primary:hover {
background: linear-gradient(to top, #ff912d, #ffb72e);
color: #ffffff;
}
.button-primary:active {
background: linear-gradient(to top, #ee7609, #ff9712);
color: #ffffff;
}

View File

@ -1,4 +1,8 @@
.search-box {
.options-param {
display: none;
}
.search-box {
height: 193px;
margin-top: 27px;
padding-top: 15px;
@ -52,12 +56,16 @@
background-position: 0 -321px;
}
.search-box .search-tips span {
.search-box .search-tips .order-tips {
display: inline-block;
cursor: pointer;
}
.search-box .search-tips .net-tips {
display: none;
}
.search-box .search-tips .reset-btn {
display: none;
width: 87px;
height: 30px;
background: url(../../images/css-sprite.png) no-repeat;

View File

@ -158,3 +158,7 @@
display: block;
float: left;
}
#index-tip-body {
cursor: pointer;
}

View File

@ -3,10 +3,10 @@
margin-bottom: 55px;
background: #fffefa;
border-top: 1px solid #c6701a;
margin-bottom: 220px;
}
.result .auto-refresh {
margin-bottom: 220px;
}
.result table {
@ -163,6 +163,7 @@
border-right: 1px solid #ccc;
border-top: 1px solid #ccc;
}
.result .train-needauto td button {
margin-left: 20px;
}
.result .train-needauto td button {
margin-left: 20px;
}

View File

@ -42,7 +42,7 @@
#ticket-info .from-station,
#ticket-info .to-station {
display: inline-block;
max-width: 90px;
max-width: 110px;
-ms-text-overflow: ellipsis;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;

View File

@ -54,7 +54,7 @@
<div class="icon search-tips cl">
<span class="net-tips">已分配到畅通的网络环境为你提速80%:乌鲁木齐</span>
<span class="reset-btn">还原到默认</span>
<span class="order-tips">今日可预定9月10日10月2日的火车票</span>
<span class="order-tips"></span>
<span class="icon order-ring fr" id="index-tip-body"><span class="order-num">1</span></span>
<!--提示-->
<section class="search-tips-container">
@ -384,7 +384,7 @@
</td>
</span>
{{~}}
{{?!it.original}}
{{?!it.original||!it.original.length}}
<tr class="train-empty">
<td colspan="4">
没有查询到车次,请更换条件或时间试试..
@ -573,14 +573,14 @@
</p>
</div>
<footer>
<button class="button button-primary">
<a class="button button-primary" href="https://kyfw.12306.cn/otn/queryOrder/initNoComplete" target="_blank">
<i class="fa fa-credit-card"></i>
立刻付款
</button>
<button class="button button-default">
</a>
<a class="button button-default" href="#" id="lnkShareWb" target="_blank">
<i class="fa fa-weibo"></i>
微博炫耀
</button>
</a>
</footer>
</section>
</div>

View File

@ -80,7 +80,13 @@
});
};
that.loadProfile = function (username, checkData) {
//备份当前的查询,并取代为默认的查询
var cp = that.currentProfile;
if (cp && (!cp.fromText || !cp.toText || !cp.depDate))
cp = null;
var profile = storage.obj("12306_user_" + username) || { username: username, passengers: [], savedProfile: {}, currentProfile: {}, rawPassenger: [], options: {} };
profile.currentProfile = cp || $.extend({}, that.defaultProfile, profile.currentProfile);
that.current = profile;
if (username) {
@ -170,7 +176,7 @@
get: function () {
return session && session.currentProfile;
}, set: function (value) {
session.currentProfile = value || that.defaultProfile;
session.currentProfile = $.extend({}, that.defaultProfile, value);
that.fireEvent("currentProfileChanged");
that.save();
}

View File

@ -1,6 +1,22 @@
define(function (require, exports, module) {
var citydata = require("./station/station_data.js");
exports.trimToDay = function (d) {
d = d || new Date();
if (!(d instanceof Date)) {
d = new Date(d + '');
}
var x = new Date();
x.setTime(d.getTime() - d.getTime() % (1000 * 3600 * 24));
return x;
};
exports.addDays = function (date, days) {
var x = new Date();
x.setTime(date.getTime() - date.getTime() % (1000 * 3600 * 24) + 1000 * 3600 * 24 * days);
return x;
};
exports.citydata = citydata;
exports.cities = _(_.flatten(_.map(_.values(citydata.data), function (e) { return _.values(e); }))).mapObject(function (e) { return e.c; });;
exports.identityCardTypes = {
@ -46,12 +62,35 @@
exports.toSeatTypeName = function (code) {
return exports.seatNameInvMap[exports.tagOtnMap[code]];
};
exports.seatDisplayOrder = '9PMO643210'.split('');
exports.seatDisplayOrder = 'O219PM6430'.split('');
exports.isDebug = ((function () { return false; }) + '').indexOf("false;") != -1;
exports.log = function() {
exports.log = function () {
if (!exports.isDebug)
return;
console.log.apply(console, Array.prototype.slice.call(arguments));
};
exports.showMoreOptRange = [
[new Date(2014, 9, 5), new Date(2014, 9, 20)],
[new Date(2015, 1, 20), new Date(2014, 2, 18)]
];
exports.maxSellDays = 19;
exports.minDate = exports.trimToDay(new Date());
exports.maxDate = exports.addDays(exports.minDate, exports.maxSellDays);
exports.isValidDate = function(date) {
date = exports.trimToDay(date);
return date >= exports.minDate;
};
Object.defineProperty(exports, "moreOptDefault", {
get: function () {
var d = exports.minDate;
return _.any(exports.showMoreOptRange,function(v) {
return v[0] <= d && d <= v[1];
});
}
});
});

View File

@ -53,7 +53,7 @@
submitData = JSON.parse(exports.formatJson(formData["ticketInfoForPassengerForm"] || "{}"));
};
return def;
return def.promise();
};
exports.fastPrepareOrder = function (train, profile, passenger) {
@ -132,7 +132,7 @@
};
autoSubmitRequest();
return def;
return def.promise();
};
exports.fastSubmitOrder = function (train, profile, passenger, randcode) {
@ -222,7 +222,7 @@
};
submitOrder();
return def;
return def.promise();
};
exports.submitOrder = function (train, profile, passenger, randcode) {
@ -379,6 +379,6 @@
checkOrderInfo();
return def;
return def.promise();
};
});

View File

@ -2,6 +2,9 @@
var ajax = require("../platform/webRequest.js");
var param = require("../data.js");
var parser = require("../platform/parser.js");
var ev = require("../platform/EventObject.js");
exports.events = new ev();
var getTicketInfo = function (v) {
var data = [], info = v.indexOf("#") === -1 ? v : /getSelected\(['"](.*?)['"]\)/i.exec(v)[1].split('#')[11],
@ -38,7 +41,9 @@
var transferData = function (data, noProcess) {
var result = data;
if (!Array.isArray(result.data) || !result.data.length || !result.data[0].queryLeftNewDTO) return null;
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 };
@ -116,9 +121,9 @@
if (!noProcess) {
//执行车次预过滤。过滤内容:出发地,目标地,时间
$(document).trigger("filterTrains", trainData);
exports.events.fireEvent("filterTrains", trainData);
//处理车次
$(document).trigger("processTrains", trainData);
exports.events.fireEvent("processTrains", trainData);
//过滤数据
if (trainData.filtered && trainData.filtered.length) {
@ -152,7 +157,7 @@
def.reject();
});
return def;
return def.promise();
};
exports.queryTrainStop = function (id, from, to, date) {
@ -173,6 +178,6 @@
def.reject("网络错误");
});
return def;
return def.promise();
};
});

View File

@ -8,6 +8,8 @@
var handleQueue = handles[name] || [];
handles[name] = handleQueue;
handleQueue.push(callback);
return this;
};
this.off = function (name, callback) {
@ -25,6 +27,8 @@
handleQueue.length = 0;
}
handles[name] = handleQueue;
return this;
};
this.fireEvent = function (type) {

View File

@ -1,18 +1,23 @@
define(function(require, exports, module) {
define(function (require, exports, module) {
var port = require("./extensionPort.js");
var audio = new Audio("http://static.liebao.cn/resources/audio/music2.ogg");
audio.loop = true;
exports.play = function() {
exports.play = function () {
audio.play();
$("#music_controller").show();
};
exports.stop = function() {
exports.stop = function () {
audio.pause();
$("#music_controller").hide();
};
window.test = exports.notify = function (title, content) {
port.sendMessage({ action: "notify", title: title, content: content });
}
$("#btn_stop_sound").click(exports.stop);
$("#music_controller button").click(exports.stop);
});

View File

@ -1,12 +1,11 @@
define(function (require) {
var param = require("../data.js");
var ajax = require("../platform/webRequest.js");
var storage = require('../platform/storage.js');
var widget = require("./widget.js");
var sessMgr = require("../account/sessionMgr.js");
var mp = require("./widget_message_popup.js");
var datebar = require("./widget_datebar.js");
var parser = require("../platform/parser.js");
var media = require("../platform/media.js");
//会话管理器事件
sessMgr.on("notValidPassengerFound", function () {
@ -31,7 +30,7 @@
//自动刷新呢
var autorefresh = require("./ui-autorefresh.js");
autorefresh.init();
autorefresh.on("requestQueryTicket", function() {
autorefresh.on("requestQueryTicket", function () {
ui_result.load();
});
@ -54,6 +53,7 @@
//订票列表交互
(function () {
ui_result.on("requireSubmitOrder", function (e, d) {
autorefresh.stop();
uiOrderProcess.start(d.train, d.seat, sessMgr.currentProfile, null);
});
autorefresh.on("requireSubmitOrder", function (e, d) {
@ -64,17 +64,21 @@
//界面交互初始化
(function () {
$(".order-tips").html("今日可预定:" + parser.formatDate(param.minDate, "MM月dd日") + "" + parser.formatDate(param.maxDate, "MM月dd日") + "的火车票");
//自动加速关闭
$(".net-tips, .reset-btn").hide();
var resetInterfaceByProfile = function () {
var user = sessMgr.current;
if (!user) {
return;
}
if (user.options.showMoreOpt !== undefined) {
var div = $("div.options-param");
if (user.options.showMoreOpt ^ div.is(":visible"))
!user.options.showMoreOpt ? (div.hide(), $(".search-more-option").html("显示更多选项")) : (div.show(), $(".search-more-option").html("隐藏更多选项"));
}
var showMoreOpt = user.options.showMoreOpt !== undefined ? user.options.showMoreOpt : param.moreOptDefault;
var div = $("div.options-param");
if (showMoreOpt ^ div.is(":visible"))
!user.options.showMoreOpt ? (div.hide(), $(".search-more-option").html("显示更多选项")) : (div.show(), $(".search-more-option").html("隐藏更多选项"));
var p = user.currentProfile;
$("#from_city").val(p.fromText).attr("data-code", p.fromCode);
@ -127,7 +131,7 @@
sessMgr.currentProfile.studentTicket = this.value === "1";
sessMgr.save();
});
$("div.transfer-city-btn").click(function() {
$("div.transfer-city-btn").click(function () {
var f = document.getElementById("from_city");
var t = document.getElementById("to_city");
@ -142,6 +146,7 @@
});
$("#btnQuery").click(function () {
autorefresh.stop();
media.stop();
if (!sessMgr.currentProfile.fromCode || !sessMgr.currentProfile.toCode || !sessMgr.currentProfile.depDate) {
mp.showMessagePopup("error", "亲,还没有设置查询的条件哦。");
return;

View File

@ -5,6 +5,7 @@
var expdata = require("../data.js");
var inAutoRefresh = false;
var media = require("../platform/media.js");
var query = require("../otn/queryticket.js");
sessMgr.on("sessionChanged", function () {
session = sessMgr.current;
@ -73,7 +74,7 @@
})();
//如果开启了自动预定,那么不显示预定结果以外的车次
if (currentProfile.selectedTrain && currentProfile.selectedTrain.length) {
var rule = new RegExp("^" + currentProfile.selectedTrain.join("|") + "$", "i");
var rule = new RegExp("^(" + currentProfile.selectedTrain.join("|") + ")$", "i");
var filtered3 = _.filter(data.available, function (e) { return !rule.test(e.code); });
data.include = _.difference(data.available, filtered3);
@ -92,7 +93,7 @@
};
var processTrains = function (data) {
if (!currentProfile || !session.options.showMoreOpt)
if (!currentProfile || (!session.options.showMoreOpt && !inAutoRefresh))
return;
//预置参数
@ -161,9 +162,10 @@
data.nextTime = null;
if (inAutoRefresh) {
media.play();
media.notify("可以订票了!", "终于等到可以订的 " + data.auto.train + "次列车" + expdata.toSeatTypeName(data.auto.seat) + "");
}
if (currentProfile.autoSubmitEnabled && data.enableAuto) {
$(document).trigger("performAutoSubmit", data.auto);
auto.fireEvent("performAutoSubmit", data.auto);
}
} else {
//规则:如果只有待售的,那么等到指定的时间
@ -200,9 +202,9 @@
var currentDateLoopIndex = -1;
this.init = function () {
$(document).on("filterTrains", function (e, d) {
query.events.on("filterTrains", function(e, d) {
filterTrains(d);
}).on("processTrains", function (e, d) {
}).on("processTrains", function(e, d) {
processTrains(d);
if (!d.auto && (d.nextTime && inAutoRefresh)) {
@ -212,7 +214,10 @@
} else if (d.auto) {
that.stop();
}
}).on("performAutoSubmit", function (e, d) {
}).on("requestFailed", function () {
//失败?不做任何处理
});
that.on("performAutoSubmit", function (e, d) {
that.dispatchEvent("requireSubmitOrder", d);
});
};
@ -317,5 +322,6 @@
AutoRefresh.prototype = Object.create(ev);
AutoRefresh.constructor = AutoRefresh;
return new AutoRefresh();
var auto = new AutoRefresh();
return auto;
});

View File

@ -24,6 +24,7 @@
allpasseengers = data;
currentSearchKey = null;
if (!data.length) {
uiDlgList.empty();
uiDlg.find(".empty-indicator").show();
}
performSearch();
@ -104,7 +105,7 @@
break;
}
}
span.fadeOut('fast', function () { $(this).remove(); });
span.remove();
e.stopPropagation();
}).on("click", ".optional-block", function (e) {
@ -192,6 +193,7 @@
}
queryLoadingRow.show();
queryErrorRow.hide();
query.queryTicket(cp.fromCode, cp.toCode, cp.depDate, cp.studentTicket, true)
.done(function () {
traindata = this;
@ -248,7 +250,7 @@
container.on("click", ".optional-block", function () {
var obj = $(this).closest("span[data-code]");
exports.removeTrainFromList(obj[0].dataset.code);
obj.fadeOut('fast', function () { $(this).remove(); });
obj.remove();
});
exports.addTrainToList = function (t) {
@ -298,7 +300,12 @@
var initProfile = function () {
container.find(">span").remove();
if (cp && cp.dateloop) {
container.append(tpl(cp.dateloop));
var filteredDate = _.filter(cp.dateloop, data.isValidDate);
if (filteredDate.length !== cp.dateloop.length) {
cp.dateloop = filteredDate;
sessmgr.save();
}
container.append(tpl(_.filter(cp.dateloop, data.isValidDate)));
}
};

View File

@ -6,6 +6,8 @@
var op = require("../otn/orderprocess.js");
var vc = require("./widget_verifycode.js");
var param = require("../data.js");
var media = require("../platform/media.js");
var share = require("./ui_sns_share.js");
//提交参数
var pTrain, pStu, pPassengers, pProfile;
var submitDef;
@ -75,6 +77,8 @@
}
};
this.submitOrder = function () {
media.stop();
var randCode = $("#ticket-submit-info .ticket-submit-vc input:text").val();
if (randCode.length !== 4) {
mp.showMessagePopup("error", "请输入验证码...");
@ -93,6 +97,7 @@
dom.find("div>p:eq(0) span").html(data.orderId);
submitProgress.removeClass().addClass("ticket-submit-status ticket-submit-status-ok");
submitProgress.find("span").html("订票成功!订单号为 " + data.orderId);
share.makeWeiboShare(document.getElementById("lnkShareWb"), null, "我刚在#猎豹浏览器#上用#订票助手#抢到了" + pPassengers.length + "张车票!你的车票买到了吗?", null);
submitBtn[0].disabled = false;
});
submitDef.fail(function (data) {

View File

@ -9,6 +9,7 @@
var tsquery = require("./ui-train-stop.js");
var datebar = require("./widget_datebar.js");
var parser = require("../platform/parser.js");
var autorefresh = require("./ui-autorefresh.js");
var TrainListObj = function () {
var __ = this;
@ -61,6 +62,7 @@
datebar.init();
datebar.on("requireChangeDate", function (e, d) {
autorefresh.stop();
//请求切换时间
$("#dep_date").val(d).change();
sessMgr.save();

View File

@ -0,0 +1,13 @@
define(function (require, exports, module) {
exports.makeWeiboShare = function (target, url, text, imageUrl) {
url = url || self.location + '';
((function (s, d, e, r, l, p, t, z, c) {
var f = 'http://v.t.sina.com.cn/share/share.php?',
u = z || d.location,
p = ['url=', e(u), '&title=', e(t || d.title), '&source=', e(r), '&sourceUrl=', e(l), '&content=', c || 'gb2312', '&pic=', e(p || '')].join('');
target.setAttribute("href", [f, p].join(''));
})(screen, document, encodeURIComponent, '', '', imageUrl || "", text, url, 'utf-8'));
};
});

View File

@ -1,5 +1,6 @@
define(function (require, exports, module) {
var eo = require("../platform/EventObject.js");
var data = require("../data.js");
var getCurDate = function () {
var now = new Date();