同步项目

This commit is contained in:
木鱼(iFish) 2015-12-03 19:35:30 +08:00
parent b5a6b2fda3
commit 4d50df2cf3
19 changed files with 511 additions and 387 deletions

View File

@ -179,7 +179,7 @@
</site>
<site name="ChatRoomServer.Www" id="4">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="E:\Develop\Bussiness\Light12306\ChatRoomServer.Www" />
<virtualDirectory path="/" physicalPath="E:\iFishWork\12306\ChatRoomServer.Www" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:28857:localhost" />

View File

@ -112,8 +112,8 @@ namespace TrainInfomationProviderService
//var maxTimeRage = lines.Max(s => s.CalculatedMinutesBase);
var opt = new TrainTransitSearchOptions();
opt.InitLimit(999999);
var altLines = searchProvider.FindOnceTransitTrains(DateTime.Parse("2015-07-10"), "NVH", "JJG", opt).ToArray();
opt.InitLimit(1357);
var altLines = searchProvider.FindOnceTransitTrains(DateTime.Parse("2016-01-28"), "WMR", "WHN", opt).ToArray();
//var availableLines = lines.Select(s => s.Train.Code + "," + s.FromStation.Name + "," + s.ToStation.Name + "," + s.ElapsedTime).ToArray();
Array.ForEach(altLines.Select(s =>

View File

@ -348,35 +348,35 @@ namespace TrainInfomationProviderService.TrainInfo.Entities
void ProcessPriority()
{
//对换乘站点计算优先级
var stData = _list.GroupBy(s => s.First.ToStation).Select(s => new KeyValuePair<StationDetailInfo, TrainTransitOnceResult[]>(s.Key, s.ToArray())).ToList();
var stData = _list.GroupBy(s => s.First.ToStation).Select(s => new Tuple<StationDetailInfo, TrainTransitOnceResult[]>(s.Key, s.ToArray())).ToList();
stData.Sort((x, y) =>
{
//前车高铁/动车等,优先推荐
var fhc1 = x.Value.Count(_ => _.First.Train.IsHighSpeedClass);
var shc1 = y.Value.Count(_ => _.First.Train.IsHighSpeedClass);
var fhc1 = x.Item2.Count(_ => _.First.Train.IsHighSpeedClass);
var shc1 = y.Item2.Count(_ => _.First.Train.IsHighSpeedClass);
if (shc1 != fhc1)
return shc1 > fhc1 ? 1 : -1;
//否则推荐后车的高铁/动车
var fhc2 = x.Value.Count(_ => _.Second.Train.IsHighSpeedClass);
var shc2 = y.Value.Count(_ => _.Second.Train.IsHighSpeedClass);
var fhc2 = x.Item2.Count(_ => _.Second.Train.IsHighSpeedClass);
var shc2 = y.Item2.Count(_ => _.Second.Train.IsHighSpeedClass);
if (shc2 != fhc2)
return shc1 > fhc1 ? 1 : -1;
return shc2 > fhc2 ? 1 : -1;
//如果都米有,则按线路数推荐
if (x.Value.Length != y.Value.Length)
return y.Value.Length - x.Value.Length;
if (x.Item2.Length != y.Item2.Length)
return y.Item2.Length - x.Item2.Length;
//线路数也相同。。。。那好像没啥再区别的了
return 0;
return string.CompareOrdinal(x.Item1.PyFull, y.Item1.PyFull);
});
CityOrder = stData.Select(s => s.Key.Code).ToArray();
CityOrder = stData.Select(s => s.Item1.Code).ToArray();
//对应起排序
var stationWeight = new Dictionary<StationDetailInfo, int>(stData.Count);
for (var i = 0; i < stData.Count; i++)
{
stationWeight.Add(stData[i].Key, i);
stationWeight.Add(stData[i].Item1, i);
}
//分组排序

View File

@ -5,7 +5,7 @@
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{C385D043-316A-4F05-A6B9-E70BF0ED8DB6}</ProjectGuid>
<OutputType>Exe</OutputType>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>TrainInfomationProviderService</RootNamespace>
<AssemblyName>TrainInfomationProviderService</AssemblyName>

View File

@ -283,11 +283,23 @@
var originalTime = train.TrainInfo.elapsedTime.Value;
//如果时间会超过原来最大的允许值,则排除
var priceExtraRadio = ((current.ElapsedTime - originalTime).TotalSeconds / (1.0 * originalTime.TotalSeconds));
current.BasePriceSeat = Cn12306SuggestionUtility.BaseSeatCodes.First(s => train.TrainInfo.ticketMap.ContainsKey(s));
current.BasePriceSeat = Cn12306SuggestionUtility.BaseSeatCodes.FirstOrDefault(s => train.TrainInfo.ticketMap.ContainsKey(s));
if (current.BasePriceSeat == '\0')
{
//没有席别
line[i].Lines.RemoveAt(j);
continue;
}
current.BasePrice = train.TrainInfo.ticketMap[current.BasePriceSeat].price / 10.0;
current.ExtraPrice = Math.Round(priceExtraRadio * current.BasePrice, 2);
current.Radio = (int)(priceExtraRadio * 100);
}
if (line[i].Lines.Count == 0)
{
line.RemoveAt(i);
}
}
}

View File

@ -48,11 +48,12 @@
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<httpRuntime targetFramework="4.5" requestValidationMode="2.0" />
<customErrors mode="RemoteOnly">
<error statusCode="500" redirect="http://store.fishlee.net/static/errors/500.html" />
</customErrors>
<machineKey decryptionKey="388C1C2864EF95BC3D97ED6BA816FE070A90DD05C8860F53" validationKey="B76827CBA3E2F02288AFA80D633372F2988FEBD676F3DCE182C73DAAEE7BFB38FCDCBD3C36625611496C87DDE4AAD12DCB0EB4E346FE43C6D8309C320AE60890" />
<pages validateRequest="false"></pages>
</system.web>
<system.webServer>
<handlers>

View File

@ -124,9 +124,10 @@
.vc-touchclick-marker {
position: absolute;
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAflBMVEX/AAD/////////////////////////////////////////////////////////////////////////////////////////////////Zmb/AAD/o6P/1NT/6ur/9fX/////d3f/U1P/sLD/vLz/IyP/39//PT3/hob/lZX/yMhzeP54AAAAGXRSTlMAEBcgJzA3QEdQV2BncHeAh5CWoLDA0ODw9H53rAAAAUxJREFUeF6909tugzAMBmCga+l6GCsQqHPmTN//BedkEbE6adVuZqkXVT7s3yIk/EUlPPm1/gLSNII8z9NncND6gmBX1MwYKaX/R0G1dOqUlEpY8OG65gkYzoHlcks/3inICoZgbgsRwLyoTwIyLcA1tsNkAVYhdVsdaMjtQS7Gub0VfgUK3h8BjCvnkjUGC3uQDOXUi5nz/i5wPHTfKXRGtthfGYaQleCxREHXPDjQLUtc0077CN5KtR1JI3GYudfHmOFNr9xXh+Mf/RraR3AL51Yj6p2E9oOC2oZYDujRLzHQNY+6FwoQSARGg9dLFUGSXgvmwEBfiMzpmnsP8AiYB4sVahdBVk5yRAAbMHWxIyNCVzG70R7oeOUIGNzvjCAEICN054ACd9POw0+QXJoB4FFqd1dT1OgI8HVm7JSkeeq1aS4vP5x/BS/qC3YfObrN3LM7AAAAAElFTkSuQmCC') /*../images/vc-marker.png*/;
width: 32px;
height: 32px;
width: 16px;
height: 16px;
z-index: 10;
opacity: 0.5;
cursor: pointer;
transform: scale(2);
}

View File

@ -5,138 +5,150 @@
margin-bottom: 10px;
}
.result .auto-refresh {
}
.result .auto-refresh {
}
.result table {
border-collapse: collapse;
width: 100%;
color: #444444;
font-size: 16px;
border: 1px solid #dcdcdc;
}
.result table {
border-collapse: collapse;
width: 100%;
color: #444444;
font-size: 16px;
border: 1px solid #dcdcdc;
}
.result table th {
background: #f5f5f5;
color: #777777;
line-height: 30px;
font-size: 14px;
border-left: 1px solid #dcdcdc;
border-right: 1px solid #dcdcdc;
text-align: center;
}
.result table th {
background: #f5f5f5;
color: #777777;
line-height: 30px;
font-size: 14px;
border-left: 1px solid #dcdcdc;
border-right: 1px solid #dcdcdc;
text-align: center;
}
.result tr.selected td {
background-color: #ebf6e5;
}
.result tr.selected td {
background-color: #ebf6e5;
}
.result .train-num {
padding: 8px 10px 8px 15px;
width: 80px;
font-family: tahoma;
color: #4D5873;
font-size: 24px;
text-align: left;
line-height: 19px;
border: 1px solid #dcdcdc;
border-right: 1px solid #ccc7ba;
background: #fff9e8;
position: relative;
}
.result .train-num {
padding: 8px 10px 8px 15px;
width: 80px;
font-family: tahoma;
color: #4D5873;
font-size: 24px;
text-align: left;
line-height: 19px;
border: 1px solid #dcdcdc;
border-right: 1px solid #ccc7ba;
background: #fff9e8;
position: relative;
}
.result .train-num .train-dp {
color: white;
font-size: 12px;
padding: 2px;
position: absolute;
right: 0;
bottom: 0;
border-radius: 5px 0 0 0;
cursor: pointer;
}
.result .train-num .train-dp {
color: white;
font-size: 12px;
padding: 2px;
position: absolute;
right: 0;
bottom: 0;
border-radius: 5px 0 0 0;
cursor: pointer;
}
.result tr.selected .train-num {
background-color: #d3edcb;
}
.result tr.selected .train-num {
background-color: #d3edcb;
}
.result .train-empty td {
font-size: 24px;
line-height: 100px;
color: #ccc;
text-shadow: 3px 3px 5px rgba(150,150,150,0.2);
text-align: center;
}
.result .train-empty td {
font-size: 24px;
line-height: 100px;
color: #ccc;
text-shadow: 3px 3px 5px rgba(150, 150, 150, 0.2);
text-align: center;
}
.result .train-seats {
padding: 6px 0 1px 0;
border: 1px solid #cccccc;
border-left: none;
line-height: 18px;
overflow: hidden;
position: relative;
}
.result .train-seats {
padding: 6px 0 1px 0;
border: 1px solid #cccccc;
border-left: none;
line-height: 18px;
overflow: hidden;
position: relative;
}
.result .train-seats .train-illegal {
border-radius: 5px 0 0 0;
padding: 3px 3px 3px 6px;
background-color: #D03737;
font-size: 12px;
position: absolute;
bottom: 0;
right: 0;
color: #fff;
cursor: pointer;
}
.result .train-seats .train-illegal {
border-radius: 5px 0 0 0;
padding: 3px 3px 3px 6px;
background-color: #D03737;
font-size: 12px;
position: absolute;
bottom: 0;
right: 0;
color: #fff;
cursor: pointer;
}
.result .train-seats:empty:before {
content: '本车次车票已售完';
color: #cccccc;
}
.result .train-seats .train-notsell-note {
border-radius: 0 0 0 5px;
padding: 3px 3px 3px 6px;
background-color: #73B3D6;
font-size: 12px;
position: absolute;
top: 0;
right: 0;
color: #fff;
cursor: pointer;
}
.result .train-seats .train-limitsell,
.result .train-seats .train-notsell {
font-size: 20px;
color: #999;
}
.result .train-seats:empty:before {
content: '本车次车票已售完';
color: #cccccc;
}
.result .train-seats .train-notontime {
font-size: 16px;
color: #999;
}
.result .train-seats .train-limitsell,
.result .train-seats .train-notsell {
font-size: 20px;
color: #999;
}
.result .train-seats .train-nostarttip {
display: block;
margin-top: 5px;
}
.result .train-seats .train-notontime {
font-size: 16px;
color: #999;
}
.result .train-seats .train-nostarttip-insell {
color: #7F7FE0;
}
.result .train-seats .train-nostarttip {
display: block;
margin-top: 5px;
}
.result .train-seats .train-nostarttip-early {
color: #7F7FE0;
}
.result .train-seats .train-nostarttip-insell {
color: #7F7FE0;
}
.result .train-seats .train-nostarttip-later {
color: green;
}
.result .train-seats .train-nostarttip-early {
color: #7F7FE0;
}
.result .train-seats .row2 {
}
.result .train-seats .train-nostarttip-later {
color: green;
}
.result .train-info {
width: 120px;
padding: 0 25px 0 25px;
border-top: 1px solid #cccccc;
border-bottom: 1px solid #cccccc;
}
.result .train-seats .row2 {
}
.result .train-city {
width: 110px;
border-top: 1px solid #cccccc;
border-bottom: 1px solid #cccccc;
padding: 0 0 0 5px;
}
.result .train-info {
width: 120px;
padding: 0 25px 0 25px;
border-top: 1px solid #cccccc;
border-bottom: 1px solid #cccccc;
}
.result .train-city {
width: 110px;
border-top: 1px solid #cccccc;
border-bottom: 1px solid #cccccc;
padding: 0 0 0 5px;
}
.ticket-block {
display: block;
@ -155,12 +167,12 @@
.ticket-block-selected {
border-color: #e3c69b;
background: linear-gradient(to bottom, #ffffff, #ffffff 5%, #fcf6e1 );
background: linear-gradient(to bottom, #ffffff, #ffffff 5%, #fcf6e1);
font-weight: bold;
}
.ticket-block:hover {
background: linear-gradient(to bottom,#FFFEFD,#F5E3D3);
background: linear-gradient(to bottom, #FFFEFD, #F5E3D3);
}
.ticket-block-selected:hover {
@ -187,15 +199,27 @@
color: #888;
}
.result .train-station-type:after {
content: '';
border-top: 5px solid #888;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
top: 13px;
position: relative;
left: 2px;
}
.result .train-station-type:after {
content: '';
border-top: 5px solid #888;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
top: 13px;
position: relative;
left: 2px;
}
/*禁用的车次席别*/
.ticket-block[disabled] {
background: #eee;
color: #999;
border: 1px solid #dddcdc;
cursor: not-allowed;
}
.ticket-block[disabled] .ticket-num {
color: #aaa;
}
/*始发终到标记*/
.result .train-city .start:after {
@ -214,9 +238,9 @@
border: 1px solid #ccc;
}
.result .train-needauto td button {
margin-left: 20px;
}
.result .train-needauto td button {
margin-left: 20px;
}
.result .train-autotip {
line-height: 50px;
@ -225,9 +249,9 @@
font-weight: bold;
}
.result .train-autotip td {
border-top: 1px solid #cccccc;
}
.result .train-autotip td {
border-top: 1px solid #cccccc;
}
.result .train-list-func {
text-align: center;
@ -242,86 +266,85 @@
border-radius: 3px;
}
#suggestion > header {
line-height: 30px;
font-weight: bold;
text-indent: 10px;
}
#suggestion > header {
line-height: 30px;
font-weight: bold;
text-indent: 10px;
}
#suggestion > header a {
float: right;
margin-right: 20px;
font-weight: normal;
}
#suggestion > header a {
float: right;
margin-right: 20px;
font-weight: normal;
}
#suggestion > footer {
padding: 10px;
}
#suggestion > footer {
padding: 10px;
}
#suggestion > footer > span {
color: #c23825;
font-weight: bold;
}
#suggestion > footer > span {
color: #c23825;
font-weight: bold;
}
#suggestion .result {
margin-bottom: 0;
}
#suggestion .result {
margin-bottom: 0;
}
#suggestion .result th {
text-indent: 15px;
}
#suggestion .result th {
text-indent: 15px;
}
#suggestion .result .train-linename {
border: 1px solid #dcdcdc;
border-left: none;
line-height: 150%;
text-align: center;
color: #707070;
width: 80px;
}
#suggestion .result .train-linename {
border: 1px solid #dcdcdc;
border-left: none;
line-height: 150%;
text-align: center;
color: #707070;
width: 80px;
}
#suggestion .result .train-seats {
border-right: none;
}
#suggestion .result .train-seats {
border-right: none;
}
#suggestion .result .train-linename span {
display: block;
font-weight: bold;
color: #707070;
}
#suggestion .result .train-linename span {
display: block;
font-weight: bold;
color: #707070;
}
#suggestion .result .train-extraprice {
border: 1px solid #dcdcdc;
padding: 10px;
border-right: none;
width: 221px;
}
#suggestion .result .train-extraprice {
border: 1px solid #dcdcdc;
padding: 10px;
border-right: none;
width: 221px;
}
#suggestion .result .train-extraprice span {
font-weight: bold;
color: rgb(209, 72, 72);
margin-left: 5px;
margin-right: 5px;
}
#suggestion .result .train-extraprice span {
font-weight: bold;
color: rgb(209, 72, 72);
margin-left: 5px;
margin-right: 5px;
}
#suggestion .result .train-list {
border: 1px solid #dcdcdc;
padding: 10px;
max-width: 500px;
word-wrap: break-word;
}
#suggestion .result .train-list {
border: 1px solid #dcdcdc;
padding: 10px;
max-width: 500px;
word-wrap: break-word;
}
#suggestion .result .train-list span {
font-weight: bold;
color: rgb(209, 72, 72);
margin-left: 5px;
margin-right: 5px;
}
#suggestion .result td.train-action {
border: 1px solid #dcdcdc;
}
#suggestion .result .train-list span {
font-weight: bold;
color: rgb(209, 72, 72);
margin-left: 5px;
margin-right: 5px;
}
#suggestion .result td.train-action {
border: 1px solid #dcdcdc;
}
#oncetrainsit {
border: 1px solid #d5d5d5;
@ -329,183 +352,183 @@
border-radius: 3px;
}
#oncetrainsit > header {
line-height: 30px;
font-weight: bold;
text-indent: 10px;
background: linear-gradient(to bottom, #efefef, #d9d9d9);
}
#oncetrainsit > header {
line-height: 30px;
font-weight: bold;
text-indent: 10px;
background: linear-gradient(to bottom, #efefef, #d9d9d9);
}
#oncetrainsit > header a {
float: right;
margin-right: 20px;
font-weight: normal;
}
#oncetrainsit > header a {
float: right;
margin-right: 20px;
font-weight: normal;
}
#oncetrainsit > header > ul {
float: right;
overflow: hidden;
font-weight: normal;
}
#oncetrainsit > header > ul {
float: right;
overflow: hidden;
font-weight: normal;
}
#oncetrainsit > header > ul > li {
float: right;
}
#oncetrainsit > header > ul > li {
float: right;
}
#oncetrainsit > footer {
padding: 10px;
}
#oncetrainsit > footer {
padding: 10px;
}
#oncetrainsit > footer > span {
color: #c23825;
font-weight: bold;
}
#oncetrainsit > footer > span {
color: #c23825;
font-weight: bold;
}
#oncetrainsit table {
width: 100%;
border-top: 1px solid #cccccc;
}
#oncetrainsit table {
width: 100%;
border-top: 1px solid #cccccc;
}
#oncetrainsit th {
padding: 5px;
font-weight: normal;
}
#oncetrainsit th {
padding: 5px;
font-weight: normal;
}
#oncetrainsit tr:nth-child(6n+5),
#oncetrainsit tr:nth-child(6n+6),
#oncetrainsit tr:nth-child(6n+7) {
background-color: #FFF9E9;
}
#oncetrainsit tr:nth-child(6n+5),
#oncetrainsit tr:nth-child(6n+6),
#oncetrainsit tr:nth-child(6n+7) {
background-color: #FFF9E9;
}
#oncetrainsit .ticket-container td {
border-bottom: 1px solid #f8f8f8;
padding-left: 5px;
padding-right: 5px;
vertical-align: top;
}
#oncetrainsit .ticket-container td {
border-bottom: 1px solid #f8f8f8;
padding-left: 5px;
padding-right: 5px;
vertical-align: top;
}
#oncetrainsit tr.recommand th {
font-weight: bold;
}
#oncetrainsit tr.recommand th {
font-weight: bold;
}
#oncetrainsit tr.header th {
font-weight: bold;
background-color: #f9f9f9;
border-bottom: 1px solid #cccccc;
}
#oncetrainsit tr.header th {
font-weight: bold;
background-color: #f9f9f9;
border-bottom: 1px solid #cccccc;
}
#oncetrainsit tr.header th:nth-child(n+2) {
border-left: 1px solid #cccccc;
}
#oncetrainsit tr.header th:nth-child(n+2) {
border-left: 1px solid #cccccc;
}
#oncetrainsit tr.sub th:nth-child(6) {
border-left: 1px solid #cccccc;
font-weight: bold;
font-size: 130%;
}
#oncetrainsit tr.sub th:nth-child(6) {
border-left: 1px solid #cccccc;
font-weight: bold;
font-size: 130%;
}
#oncetrainsit tr.sub th:nth-child(1) {
font-weight: bold;
font-size: 130%;
}
#oncetrainsit tr.sub th:nth-child(1) {
font-weight: bold;
font-size: 130%;
}
#oncetrainsit tr.sub th:nth-child(11) {
border-left: 1px solid #cccccc;
}
#oncetrainsit tr.sub th:nth-child(11) {
border-left: 1px solid #cccccc;
}
#oncetrainsit tr.sub th:nth-child(3),
#oncetrainsit tr.sub th:nth-child(8) {
color: #ff781a;
font-size: 120%;
}
#oncetrainsit tr.sub th:nth-child(3),
#oncetrainsit tr.sub th:nth-child(8) {
color: #ff781a;
font-size: 120%;
}
#oncetrainsit tr.row td {
line-height: 40px;
border-bottom: 1px solid #cccccc;
background-color: #f5f5f5;
}
#oncetrainsit tr.row td {
line-height: 40px;
border-bottom: 1px solid #cccccc;
background-color: #f5f5f5;
}
#oncetrainsit tr.ticket-container td {
border-bottom: 1px solid #cccccc;
line-height: 40px;
}
#oncetrainsit tr.ticket-container td {
border-bottom: 1px solid #cccccc;
line-height: 40px;
}
#oncetrainsit tr.ticket-container td:nth-child(n+2) {
border-left: 1px solid #cccccc;
}
#oncetrainsit tr.ticket-container td:nth-child(n+2) {
border-left: 1px solid #cccccc;
}
#oncetrainsit .button {
padding: 0 4px;
font-size: 90%;
}
#oncetrainsit .button {
padding: 0 4px;
font-size: 90%;
}
#oncetrainsit .remark {
text-align: center;
}
#oncetrainsit .remark {
text-align: center;
}
#oncetrainsit tr.catalog th {
background: linear-gradient(to bottom, #fff, #f9f9f9);
border-bottom: 1px solid #cccccc;
text-align: left;
font-weight: normal;
}
#oncetrainsit tr.catalog th {
background: linear-gradient(to bottom, #fff, #f9f9f9);
border-bottom: 1px solid #cccccc;
text-align: left;
font-weight: normal;
}
#oncetrainsit .ae, #oncetrainsit .fe {
color: red;
}
#oncetrainsit .ae, #oncetrainsit .fe {
color: red;
}
#oncetrainsit .fa-angle-right {
border: 1px solid #ff781a;
padding: 0px 3px 0px 5px;
border-radius: 50%;
line-height: 14px;
}
#oncetrainsit .fa-angle-right {
border: 1px solid #ff781a;
padding: 0px 3px 0px 5px;
border-radius: 50%;
line-height: 14px;
}
#oncetrainsit .ae:after,
#oncetrainsit .fe:after {
content: '终';
color: white;
display: inline-block;
background: #FF9310;
border-radius: 5px;
padding: 2px 3px;
font-weight: normal;
font-size: 12px;
margin-left: 4px;
line-height: 12px;
vertical-align: 10%;
}
#oncetrainsit .ae:after,
#oncetrainsit .fe:after {
content: '终';
color: white;
display: inline-block;
background: #FF9310;
border-radius: 5px;
padding: 2px 3px;
font-weight: normal;
font-size: 12px;
margin-left: 4px;
line-height: 12px;
vertical-align: 10%;
}
#oncetrainsit .fe:after {
content: '始';
}
#oncetrainsit .fe:after {
content: '始';
}
#oncetrainsit .btn-ticket-block {
margin-right: 5px;
font-weight: normal;
}
#oncetrainsit .btn-ticket-block {
margin-right: 5px;
font-weight: normal;
}
#oncetrainsit time {
font-weight: normal;
}
#oncetrainsit time {
font-weight: normal;
}
.result .train-list-suggest {
border-bottom: 1px solid #ccc;
padding: 10px;
}
.result .train-list-suggest ul {
padding: 5px;
line-height: 200%;
overflow: hidden;
}
.result .train-list-suggest ul {
padding: 5px;
line-height: 200%;
overflow: hidden;
}
.result .train-list-suggest ul li {
float: left;
margin-left: 20px;
}
.result .train-list-suggest ul li {
float: left;
margin-left: 20px;
}
.result .train-list-suggest ul li i {
color: #6072D4;
margin-right: 5px;
}
.result .train-list-suggest ul li i {
color: #6072D4;
margin-right: 5px;
}

View File

@ -126,3 +126,20 @@
#user-login-dialog .verify-code-touch a {
margin-top: 5px;
}
@media(min-width: 1024px){
#user-login-dialog{
width: 740px;
}
#user-login-dialog .verify-code-touch span.verify-code-image {
width: 596px;
height: 380px;
}
#user-login-dialog .vc-touchclick-marker{
height: 32px;
width: 32px;
}
}

View File

@ -272,7 +272,7 @@
display: inline-block;
}
/*订单结果*/
/*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#ticket-submit-info .ticket-submit-info-status-failed,
#ticket-submit-info .ticket-submit-info-status-ok {
display: none;
@ -304,7 +304,6 @@
}
/*点触验证码*/
#ticket-submit-info .ticket-submit-info-vc .verify-code-touch input {
display: none;
}
@ -313,3 +312,30 @@
height: 190px;
margin-left: 0;
}
@media(min-width: 1280px){
#ticket-submit-container{
width: 1200px;
}
#ticket-info{
height: 600px;
}
#ticket-submit-info{
width: 790px;
height: 600px;
}
#ticket-submit-info .ticket-submit-vc{
width: 600px;
}
#ticket-submit-info .ticket-submit-info-vc .verify-code-touch span.verify-code-image{
width: 594px;
height: 380px;
}
#ticket-submit-info .vc-touchclick-marker{
height: 32px;
width: 32px;
}
}

View File

@ -725,8 +725,13 @@
var t1=ext.param.findSeatData(t.ticketMap, code);
if(!t1||!t1.count) continue;
hasSeat=true;
var extraClass='';
var extraAttr='';
if(t.available===-1||t.available===0)
extraAttr+="disabled='disabled' ";
}}
<a href="javascript:void(0);" class="ticket-block {{=it.selectedSeats[code]?'ticket-block-selected':''}}" data-traincode="{{=t.id}}" data-seatcode="{{=t1.code}}">
<a {{=extraAttr}} href="javascript:void(0);" class="ticket-block {{=it.selectedSeats[code]?'ticket-block-selected':''}} {{=extraClass}}" data-traincode="{{=t.id}}" data-seatcode="{{=t1.code}}">
<p><span>{{=t1.name}}</span></p>
<p class="row2">
<span class="ticket-num">{{=(t1.count?t1.count+"张":"无票")}} </span>
@ -751,6 +756,9 @@
{{?t.maybeIllegal}}
<span class="train-illegal" title="经过检测显示此车票数据可能是无效的,提交可能会失败">可能无效</span>
{{?}}
{{?hasSeat&&(t.available===-1||t.available===0)&&t.selltime}}
<span class="train-notsell-note" title="车次尚未起售">{{=ext.utility.formatSellDate(t.selltime)}} 起售</span>
{{?}}
</td>
{{~}}
{{?!it.original||!it.original.length}}

View File

@ -227,6 +227,26 @@
callback(that.current);
}
};
that.checkUser = function () {
var def = new $.Deferred();
//获得用户json att
ajax.sendPost("login/checkUser", "login/init", null, "json", function () {
var m = this.model;
if (m && m.status && m.data && m.data.flag) {
ajax.userAtts = m.data.attributes;
def.resolve(true);
} else {
def.reject(false);
}
}, function () {
def.reject(null);
});
return def;
};
this.defaultUser = { options: { soundPrompt: true, popupAt: true } };
this.defaultProfile = {
autoRefreshDelay: 5,
@ -278,14 +298,7 @@
if (that.isLogined) {
//获得用户json att
ajax.sendPost("login/checkUser", "login/init", null, "json", function () {
var m = this.model;
if (!m && !m.status && !m.data && m.data.flag) {
ajax.userAtts = m.data.attributes;
}
}, function () {
});
that.checkUser();
keepAlive.start();
} else {

View File

@ -103,9 +103,9 @@
var exData = (dynamicKey ? encodeURIComponent(dynamicKey.code) + "=" + encodeURIComponent(dynamicKey.value) + "&" : "") + "myversion=undefined&";
ajax.sendPost("confirmPassenger/autoSubmitOrderRequest", "leftTicket/init", exData + data, "json", function (json) {
if (!json.status || !json.data) {
var msg = parser.getError(json).message;
var msg = parser.getError(json).message || "未知错误";
if ((msg.indexOf("非法请求") !== -1 || msg.indexOf("第三方") !== -1)) {
if (msg.indexOf("非法请求") !== -1 || msg.indexOf("第三方") !== -1) {
if (!forceReloadKey) {
forceReloadKey = true;
preparePageInfo();
@ -116,9 +116,21 @@
}
forceReloadKey = false;
//**未登录,也提示有未完成订单**
// 则检查一次登录状态。如果未登录,则返回未登录信息。
if (msg.indexOf("未处理的订单") !== -1) {
sessmgr.checkUser().done(function (state) {
if (state === true)
def.reject({ msg: msg });
else def.reject({ msg: "12306取消了您的登录请重新登录" });
}).fail(def.reject({ msg: msg }));
return;
}
if (msg.indexOf("未登录") !== -1)
msg = "12306取消了您的登录请重新登录...";
def.reject({ msg: msg || "12306返回了未知的状态信息请刷新重试。" });
def.reject({ msg: msg });
} else if (json.data.isRelogin) {
def.reject({ msg: "12306取消了您的登录请重新登录" });
} else if (json.data.errMsg) {

View File

@ -300,7 +300,7 @@
"_jc_save_wfdc_flag": resign ? "gc" : "dc"
} : {});
if (isLogOpen) {
exports.log(p, cookie);
exports.log(p, cookie, true);
}
queryStartTime = new Date().getTime();
ajax.sendGet(queryTicketUrl, "leftTicket/init", p, "json", function () {
@ -357,8 +357,8 @@
isLogOpen = m[2] === "Y";
}
if (!queryTicketUrl) {
document.dispatchEvent(new CustomEvent("platformError"));
def.reject("未能初始化查询地址");
//document.dispatchEvent(new CustomEvent("platformError"));
def.reject("由于12306访问故障未能初始化查询, 请重试");
}
else postFetchTicketUrl();
}).fail(function () {

View File

@ -74,8 +74,10 @@
}).done(preprocessServerResponse).fail(function () {
setTimeout(function () {
that.clearQueryResultCache();
//如果服务器出现错误,则等待十秒后再恢复状态
}, 10000);
//如果服务器出现错误则等待30分钟后再恢复状态
}, 1000*60*30);
//直接当没有响应内容处理。
preprocessServerResponse();
});
};
var preprocessServerResponse = function (serverSuggestion) {

File diff suppressed because one or more lines are too long

View File

@ -20,6 +20,7 @@
var that = this;
var dlg = $("#user-login-dialog");
var btn = dlg.find("button.button-primary");
var notifysession=null;
ev.apply(this, arguments);
@ -116,6 +117,7 @@
loginFailed((this.model.data && this.model.data.loginFail) || (this.model.messages || ["未知错误"]).join(","));
} else {
realName = this.model.data.username;
notifysession=this.model.data.notifysession==="Y"?"警告检测到登录冲突。12306已禁止一个账户多点登录之前的登录已被注销。如果您需要多开浏览器请使用多个账号。":null;
submitLoginInfo();
}
}, function () {
@ -129,7 +131,10 @@
//查询状态
ajax.sendGet("index/initMy12306", "login/init", null, "text", function () {
var notice = /var\s+(notify_TWO_2)\s*=['"]?([^;\r\n]+?)['"]?;/i.exec(this.model) && unescape(RegExp.$2.replace(/\\/g, '%'));
var notice = notifysession || /var\s+(notify_TWO_2)\s*=['"]?([^;\r\n]+?)['"]?;/i.exec(this.model) && unescape(RegExp.$2.replace(/\\/g, '%'));
////登录冲突
//if(/var\s+(notify_SESSION)\s*=['"]?Y['"]?;/i.test(this.model))
// notice="";
if (notice && notice.indexOf("null") === -1) {
events.msgFrom12306.trigger(notice);

View File

@ -179,6 +179,9 @@
});
//监听订票请求
$(document).on("click", ".ticket-block, .btn-ticket-block", function () {
if(this.getAttribute("disabled"))
return;
var id = this.dataset.traincode;
var seatcode = this.dataset.seatcode;
var train;

View File

@ -35,7 +35,8 @@
var touchClick = function (e) {
var img = $(this);
var parent = img.parent();
var pos = { x: e.offsetX, y: e.offsetY };
var ratio = this.clientHeight > 220 ? 2 : 1;
var pos = { x: Math.round(e.offsetX / ratio), y:Math.round( e.offsetY / ratio) };
var realPos = { x: pos.x, y: pos.y - 30 };
var poslist = img.data("poslist");
var imgPos = img.position();
@ -63,7 +64,7 @@
poslist.push(realPos);
//add marker
var marker = $("<span class='vc-touchclick-marker' style='top:" + (pos.y + imgPos.top - 16) + "px; left:" + (pos.x + imgPos.left - 16) + "px;'></span>");
var marker = $("<span class='vc-touchclick-marker' style='top:" + (pos.y * ratio + imgPos.top - 16) + "px; left:" + (pos.x * ratio + imgPos.left - 16) + "px;'></span>");
marker.data("pos", realPos);
parent.append(marker);