sbd-npm 1.4.96 → 1.4.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/stock_basics.js CHANGED
@@ -86,10 +86,10 @@ let Stock = {
86
86
  Stock.fetch_report_organization();
87
87
  break;
88
88
  case "public_fund":
89
- Util.fetch_public_fund(Stock["code"]);
89
+ Util.fetch_public_fund(Stock.code);
90
90
  break;
91
91
  case "public_fund_change":
92
- Util.fetch_public_fund_change(Stock["code"]);
92
+ Util.fetch_public_fund_change(Stock.code);
93
93
  break;
94
94
  case "big_deal":
95
95
  Stock.fetch_big_deal();
@@ -168,11 +168,11 @@ let Stock = {
168
168
  let cf_obj = $("#currency_funds");
169
169
  cf_obj.html(Util.to_unit(cf_obj.attr("title"), 2, 0));
170
170
  //获取股票详情数据
171
- Util.post("/stock/" + Stock["code"], {action: "code_detail"}, function (item) {
172
- Util.init_profile_component("profile", item["intro"]);
173
- if (item["latest_date"] && !Stock.hist_end_date) {
174
- Stock.hist_end_date = Util.seconds_to_format(item["latest_date"], "%Y-%m-%d");
175
- Stock.hist_start_date = Util.seconds_to_format(item["latest_date"] - 60 * Util.one_day_second, "%Y-%m-%d");
171
+ Util.post("/stock/" + Stock.code, {action: "code_detail"}, function (item) {
172
+ Util.init_profile_component("profile", item.intro);
173
+ if (item.latest_date && !Stock.hist_end_date) {
174
+ Stock.hist_end_date = Util.seconds_to_format(item.latest_date, "%Y-%m-%d");
175
+ Stock.hist_start_date = Util.seconds_to_format(item.latest_date - 60 * Util.one_day_second, "%Y-%m-%d");
176
176
  }
177
177
  item.price = (item.price && item.price > 0) ? item.price : parseFloat($("#price").html());
178
178
  Stock.price = item.price;
@@ -216,22 +216,22 @@ let Stock = {
216
216
  if (remark_html.length > 0) {
217
217
  remark_html.push("<br>");
218
218
  }
219
- if (item["description"]) {
220
- remark_html.push("<br><p>" + item["description"] + "</p>");
219
+ if (item.description) {
220
+ remark_html.push("<br><p>" + item.description + "</p>");
221
221
  }
222
222
  remark_html = remark_html.join("");
223
223
  // 同花顺|申万行业板块数据
224
- if (item["industry_data"] && item["industry_data"].length > 0) {
224
+ if (item.industry_data && item.industry_data.length > 0) {
225
225
  if (remark_html.length > 0) {
226
226
  remark_html += "<br>";
227
227
  }
228
228
  remark_html += "&nbsp;&nbsp;<b>行业板块:</b> ";
229
- item["industry_data"].forEach(function (i_d) {
229
+ item.industry_data.forEach(function (i_d) {
230
230
  let url = Util.get_url("summary_industry") + "?code=" + i_d["code"] + "&industry_type=" + i_d["industry_type"];
231
231
  remark_html += " <a href='" + url + "' class='btn btn-xs btn-warning'>" + i_d["name"] + "</a>";
232
232
  });
233
233
  }
234
- if (item["is_sh50"]) {
234
+ if (item.is_sh50) {
235
235
  remark_html += " <a href='" + (Util.get_url("summary_index") + "?index_code=SH000016") + "' class='btn btn-xs btn-warning'>上证50</a>";
236
236
  }
237
237
  if (item["is_star50"]) {
@@ -243,16 +243,16 @@ let Stock = {
243
243
  if (item["is_hs300"]) {
244
244
  remark_html += " <a href='" + (Util.get_url("summary_index") + "?index_code=SH000300") + "' class='btn btn-xs btn-warning'>沪深300</a>";
245
245
  }
246
- if (item["etf_data"]) {
247
- item["etf_data"].forEach(function (etf) {
246
+ if (item.etf_data) {
247
+ item.etf_data.forEach(function (etf) {
248
248
  remark_html += " <a class='btn btn-xs btn-warning' data-toggle='modal' data-target='.public_fund_modal' data-val='" + etf["etf_code"] + "'>" + etf["etf_name"] + "</a>";
249
249
  });
250
250
  }
251
- if (item["links"]) {
251
+ if (item.links) {
252
252
  if (remark_html.length > 0) {
253
253
  remark_html += "<br>";
254
254
  }
255
- remark_html += item["links"];
255
+ remark_html += item.links;
256
256
  }
257
257
  let remark_obj = $("#remark");
258
258
  remark_obj.html(remark_html);
@@ -262,12 +262,12 @@ let Stock = {
262
262
  });
263
263
  // 日均线/抵扣价数据
264
264
  Util.render_ma_deduction(item, "ma_deduction");
265
- if (item["boll_up"] && item["boll_up"] > 0 && item["boll_down"] && item["boll_down"] > 0) {
266
- $("#boll").html("<a title='当前上轨线 / 当前下轨线' target='_blank' rel='noopener noreferrer nofollow' href='" + Util.get_url("trend_boll_lower_band") + "'><b class='text-danger'>" + Util.to_float(item["boll_up"], 2) + "</b> / <b class='text-success'>" + Util.to_float(item["boll_down"], 2) + "</b></a>");
265
+ if (item.boll_up && item.boll_up > 0 && item.boll_down && item.boll_down > 0) {
266
+ $("#boll").html("<a title='当前上轨线 / 当前下轨线' target='_blank' rel='noopener noreferrer nofollow' href='" + Util.get_url("trend_boll_lower_band") + "'><b class='text-danger'>" + Util.to_float(item.boll_up, 2) + "</b> / <b class='text-success'>" + Util.to_float(item.boll_down, 2) + "</b></a>");
267
267
  }
268
- if (item["usd_exchange_rate"] && item["usd_exchange_rate"] > 0) {
268
+ if (item.usd_exchange_rate && item.usd_exchange_rate > 0) {
269
269
  let market_capital = $("#market_capital").attr("data-val");
270
- let usd_exchange_rate = Util.to_float((market_capital * 100) / item["usd_exchange_rate"], 2);
270
+ let usd_exchange_rate = Util.to_float((market_capital * 100) / item.usd_exchange_rate, 2);
271
271
  $("#usd_market_capital").html("($" + usd_exchange_rate + "亿)");
272
272
  }
273
273
  // 雪球人数关注排名数据
@@ -275,12 +275,12 @@ let Stock = {
275
275
  // 股东户数
276
276
  let holder_num_url = Util.get_url("holder_num");
277
277
  Util.post(holder_num_url, {action: "holder_num_info", code: Stock.code}, function (j) {
278
- if (j["holder_num"] > 0 && j["pre_holder_num"]) {
279
- let holder_num = Util.digit_compare_trend(j["holder_num"], j["pre_holder_num"]);
278
+ if (j.holder_num > 0 && j.pre_holder_num) {
279
+ let holder_num = Util.digit_compare_trend(j.holder_num, j.pre_holder_num);
280
280
  $("#holder_num").html(Util.pack_html_link(holder_num_url + "?code=" + Stock.code, holder_num));
281
281
  }
282
282
  });
283
- if (item["is_retire"] && item["is_retire"] === 1) {
283
+ if (item.is_retire && item.is_retire === 1) {
284
284
  let code_a_obj = $('#code a').first();
285
285
  if (!code_a_obj.hasClass('label-default')) {
286
286
  code_a_obj.addClass('label label-default');
@@ -303,13 +303,13 @@ let Stock = {
303
303
  hist_type: hist_type,
304
304
  is_init: Stock.data.hasOwnProperty(localStorage[Stock.tab_token]) ? 1 : 0
305
305
  };
306
- Util.post("/stock/" + Stock["code"], payload, function (j) {
307
- if (j["init_start_date"]) {
308
- let init_start_date = Util.seconds_to_format(j["init_start_date"], "%Y-%m-%d");
306
+ Util.post("/stock/" + Stock.code, payload, function (j) {
307
+ if (j.init_start_date) {
308
+ let init_start_date = Util.seconds_to_format(j.init_start_date, "%Y-%m-%d");
309
309
  $("#hist_start_date").val(init_start_date).data('daterangepicker').setStartDate(init_start_date);
310
310
  }
311
- if (j["init_end_date"]) {
312
- let init_end_date = Util.seconds_to_format(j["init_end_date"], "%Y-%m-%d");
311
+ if (j.init_end_date) {
312
+ let init_end_date = Util.seconds_to_format(j.init_end_date, "%Y-%m-%d");
313
313
  $("#hist_end_date").val(init_end_date).data('daterangepicker').setStartDate(init_end_date);
314
314
  }
315
315
  Stock.hist_type = "";
@@ -334,9 +334,9 @@ let Stock = {
334
334
  html.push("<td>", Util.to_float(item.amount / (item.volume * 100), 2), "</td>");
335
335
  html.push("<td class='volume-td'>", Util.to_float(item.volume / 10000, 2), "万手</td>");
336
336
  html.push("<td class='volume_ratio-td'>", item.volume_ratio, "</td>");
337
- html.push("<td class='volume_ratio30-td'>", (item["volume_ratio30"] ? item["volume_ratio30"] : "--"), "</td>");
337
+ html.push("<td class='volume_ratio30-td'>", (item.volume_ratio30 ? item.volume_ratio30 : "--"), "</td>");
338
338
  html.push("<td class='amount-td'>", Util.to_hundred_million(item.amount), "亿</td>");
339
- html.push("<td>", (item["turnover"] > 0 ? (item["turnover"] + "%") : "--"), "</td>");
339
+ html.push("<td>", (item.turnover > 0 ? (item.turnover + "%") : "--"), "</td>");
340
340
  html.push("</tr>");
341
341
  });
342
342
  Util.render_table_html("hist_table_body", html);
@@ -359,8 +359,8 @@ let Stock = {
359
359
  Util.parse_value_trend("rzmre-td");
360
360
  Util.parse_value_trend("rzye-td");
361
361
  let stock_hist_summary = "";
362
- if (j["high_amount"] && j["high_amount"] > 0) {
363
- stock_hist_summary += "<b>历史最高成交额(<a class='hist_summary_link' href='#'>" + Util.seconds_to_format(j["high_amount_date"], "%Y-%m-%d") + "</a>):<span class='label label-danger'>" + Util.to_unit(j["high_amount"]) + "</span></b>,";
362
+ if (j.high_amount && j.high_amount > 0) {
363
+ stock_hist_summary += "<b>历史最高成交额(<a class='hist_summary_link' href='#'>" + Util.seconds_to_format(j.high_amount_date, "%Y-%m-%d") + "</a>):<span class='label label-danger'>" + Util.to_unit(j.high_amount) + "</span></b>,";
364
364
  }
365
365
  if (j["high_volume"] && j["high_volume"] > 0) {
366
366
  stock_hist_summary += "<b>历史最高成交量(<a class='hist_summary_link' href='#'>" + Util.seconds_to_format(j["high_volume_date"], "%Y-%m-%d") + "</a>):<span class='label label-danger'>" + Util.to_unit(j["high_volume"]) + "手</span></b>,";
@@ -420,26 +420,26 @@ let Stock = {
420
420
  let day3_net_inflow = 0, day5_net_inflow = 0, day10_net_inflow = 0, day20_net_inflow = 0, day60_net_inflow = 0;
421
421
  j["money_net_inflow"].forEach(function (item) {
422
422
  i++;
423
- total_net_inflow += item["main_net_inflow"];
423
+ total_net_inflow += item.main_net_inflow;
424
424
  if (i <= 3) {
425
- day3_net_inflow += item["main_net_inflow"];
425
+ day3_net_inflow += item.main_net_inflow;
426
426
  }
427
427
  if (i <= 5) {
428
- day5_net_inflow += item["main_net_inflow"];
428
+ day5_net_inflow += item.main_net_inflow;
429
429
  }
430
430
  if (i <= 10) {
431
- day10_net_inflow += item["main_net_inflow"];
431
+ day10_net_inflow += item.main_net_inflow;
432
432
  }
433
433
  if (i <= 20) {
434
- day20_net_inflow += item["main_net_inflow"];
434
+ day20_net_inflow += item.main_net_inflow;
435
435
  }
436
436
  if (i <= 60) {
437
- day60_net_inflow += item["main_net_inflow"];
437
+ day60_net_inflow += item.main_net_inflow;
438
438
  }
439
439
  html.push("<tr>");
440
440
  html.push("<td>", Util.seconds_to_format(item.date, "%Y-%m-%d"), "</td>");
441
- html.push("<td><b class='", Util.text_color(item["price_change"]), "'>", item.price, "(", item["price_change"], "%)</b></td>");
442
- html.push("<td data-val='", item["main_net_inflow"], "'><b class='", Util.text_color(item["main_net_inflow"]), "'>", Util.to_unit(item["main_net_inflow"]), "</b></td>");
441
+ html.push("<td><b class='", Util.text_color(item.price_change), "'>", item.price, "(", item.price_change, "%)</b></td>");
442
+ html.push("<td data-val='", item.main_net_inflow, "'><b class='", Util.text_color(item.main_net_inflow), "'>", Util.to_unit(item.main_net_inflow), "</b></td>");
443
443
  html.push("<td data-val='", item["large_net_inflow"], "'><b class='", Util.text_color(item["large_net_inflow"]), "'>", Util.to_unit(item["large_net_inflow"]), "</b></td>");
444
444
  html.push("<td data-val='", item["big_net_inflow"], "'><b class='", Util.text_color(item["big_net_inflow"]), "'>", Util.to_unit(item["big_net_inflow"]), "</b></td>");
445
445
  html.push("<td data-val='", item["middle_net_inflow"], "'><b class='", Util.text_color(item["middle_net_inflow"]), "'>", Util.to_unit(item["middle_net_inflow"]), "</b></td>");
@@ -505,11 +505,11 @@ let Stock = {
505
505
  if (date) {
506
506
  payload.date = date;
507
507
  }
508
- Util.post("/stock/" + Stock["code"], payload, function (j) {
508
+ Util.post("/stock/" + Stock.code, payload, function (j) {
509
509
  let main_html = [], circulation_html = [];
510
510
  let main_volume = 0, pre_main_volume = 0, circulation_volume = 0, pre_circulation_volume = 0;
511
511
  j.data.forEach(function (item) {
512
- let change = item["change"];
512
+ let change = item.change;
513
513
  if (change === "None") {
514
514
  change = "<b class='text-danger'>新增</b>";
515
515
  } else if (parseInt(change) === 0) {
@@ -523,20 +523,20 @@ let Stock = {
523
523
  main_volume += item.volume;
524
524
  main_html.push("<tr>");
525
525
  main_html.push("<td>", item.rank, "</td>");
526
- main_html.push("<td>", item["holder_name"], "</td>");
526
+ main_html.push("<td>", item.holder_name, "</td>");
527
527
  main_html.push("<td>", Util.to_unit(item.volume), "</td>");
528
528
  main_html.push("<td>", Util.to_unit(item.volume * Stock.price), "</td>");
529
- main_html.push("<td>", item["holder_ratio"], "%</td>");
529
+ main_html.push("<td>", item.holder_ratio, "%</td>");
530
530
  main_html.push("<td>", change, "</td>");
531
531
  main_html.push("</tr>");
532
532
  } else {
533
533
  circulation_volume += item.volume;
534
534
  circulation_html.push("<tr>");
535
535
  circulation_html.push("<td>", item.rank, "</td>");
536
- circulation_html.push("<td>", item["holder_name"], "</td>");
536
+ circulation_html.push("<td>", item.holder_name, "</td>");
537
537
  circulation_html.push("<td>", Util.to_unit(item.volume), "</td>");
538
538
  circulation_html.push("<td>", Util.to_unit(item.volume * Stock.price), "</td>");
539
- circulation_html.push("<td>", item["holder_ratio"], "%</td>");
539
+ circulation_html.push("<td>", item.holder_ratio, "%</td>");
540
540
  circulation_html.push("<td>", change, "</td>");
541
541
  circulation_html.push("</tr>");
542
542
  }
@@ -556,7 +556,7 @@ let Stock = {
556
556
  circulation_tips += " 持股数环比: " + Util.year_price_rate(circulation_volume, pre_circulation_volume, 1);
557
557
  }
558
558
  if (j["date_price"]) {
559
- circulation_tips += ", 当时价: " + Util.digit_compare_trend1(Stock["price"], j["date_price"]);
559
+ circulation_tips += ", 当时价: " + Util.digit_compare_trend1(Stock.price, j["date_price"]);
560
560
  }
561
561
  circulation_tips += " ]";
562
562
  }
@@ -575,9 +575,9 @@ let Stock = {
575
575
  $("#circulation_holder_url").attr("href", "https://xueqiu.com/snowman/S/" + symbol + "/detail#/LTGD");
576
576
  Util.render_table_html("main_holder_table_body", main_html);
577
577
  $("#main_holder_url").attr("href", "https://xueqiu.com/snowman/S/" + symbol + "/detail#/SDGD");
578
- if (j["date_list"]) {
578
+ if (j.date_list) {
579
579
  let date_html = [];
580
- j["date_list"].forEach(function (date) {
580
+ j.date_list.forEach(function (date) {
581
581
  date = Util.seconds_to_format(date, "%Y-%m-%d");
582
582
  date_html.push("<option value='", date, "'>", date, "</option>");
583
583
  });
@@ -649,7 +649,7 @@ let Stock = {
649
649
  {"name": "扣净环比", "tooltip": "(当前扣非净利润 - 上一季度的扣非净利润) / 上一季度的扣非净利润 × 100%"},
650
650
  ]
651
651
  });
652
- Util.post("/stock/" + Stock["code"], {action: "finance"}, function (j) {
652
+ Util.post("/stock/" + Stock.code, {action: "finance"}, function (j) {
653
653
  // 现金流量表
654
654
  let html = [], total_ncf_from_oa = 0, total_cash_paid_for_assets = 0, total_free_cash_flow = 0, total_ncf_from_fa = 0;
655
655
  j["cash_flow_data"].forEach(function (item) {
@@ -687,7 +687,7 @@ let Stock = {
687
687
  debt_asset_ratio = Util.to_float(item["debt_asset_ratio"], 2) + "%";
688
688
  }
689
689
  html.push("<tr>");
690
- html.push("<td>", item["year"], "(", item["quarter"], ")</td>");
690
+ html.push("<td>", item.year, "(", item.quarter, ")</td>");
691
691
  html.push("<td>", Util.to_unit(item.total_assets), "</td>");
692
692
  html.push("<td>", Util.to_unit(item.total_liabilities), "</td>");
693
693
  html.push("<td>", Util.to_unit(net_assets), "</td>");
@@ -722,14 +722,14 @@ let Stock = {
722
722
  let html = [];
723
723
  let quarter = parseInt($("#quarter").val());
724
724
  Stock["income_statement_data"].forEach(function (item) {
725
- item["quarter"] = Util.get_quarter(item.date);
726
- if (quarter === 0 || quarter === item["quarter"]) {
727
- let tr_cls = (quarter === 0 && item["quarter"] === 4) ? "success" : "";
725
+ item.quarter = Util.get_quarter(item.date);
726
+ if (quarter === 0 || quarter === item.quarter) {
727
+ let tr_cls = (quarter === 0 && item.quarter === 4) ? "success" : "";
728
728
  html.push("<tr class='", tr_cls, "'>");
729
- html.push("<td>", Util.get_year(item.date), "-", item["quarter"], "</td>");
729
+ html.push("<td>", Util.get_year(item.date), "-", item.quarter, "</td>");
730
730
  html.push("<td>", item.net_profit_rate, "%</td>");
731
731
  html.push("<td>", Util.to_float(item.gross_profit_rate, 2), "%</td>");
732
- html.push("<td>", Util.to_float(item["eps"], 2), "元</td>");
732
+ html.push("<td>", Util.to_float(item.eps, 2), "元</td>");
733
733
  html.push("<td>", item.roe, "%</td>");
734
734
  let total_revenue = Util.to_unit(item.total_revenue, 3);
735
735
  html.push("<td>", total_revenue, "</td>");
@@ -797,7 +797,7 @@ let Stock = {
797
797
  {"name": "人均持股市值", "table_sort": 1},
798
798
  ]
799
799
  });
800
- Util.post("/stock/" + Stock["code"], {action: "holder_num"}, function (j) {
800
+ Util.post("/stock/" + Stock.code, {action: "holder_num"}, function (j) {
801
801
  Stock["holder_chart"].hideLoading();
802
802
  let html = [], date_data = [], holder_data = [], price_data = [];
803
803
  let latest_date = 0, max_holder_num = 0, max_holder_num_date = 0, min_holder_num = Util.max_32bit_integer, min_holder_num_date = 0;
@@ -818,9 +818,9 @@ let Stock = {
818
818
  html.push("<tr>");
819
819
  html.push("<td>", date_format, "</td>");
820
820
  html.push("<td>", Util.digit_compare_trend(item.holder_num, item.pre_holder_num), "</td>");
821
- html.push("<td><b class='", Util.text_color(item["price_change"]), "'>", item.price, "(", item["price_change"], "%)</b></td>");
822
- html.push("<td>", item["avg_num"], "</td>");
823
- html.push("<td>", Util.to_unit(item["avg_num"] * item.price), "</td>");
821
+ html.push("<td><b class='", Util.text_color(item.price_change), "'>", item.price, "(", item.price_change, "%)</b></td>");
822
+ html.push("<td>", item.avg_num, "</td>");
823
+ html.push("<td>", Util.to_unit(item.avg_num * item.price), "</td>");
824
824
  html.push("</tr>");
825
825
  });
826
826
  let holder_num_summary = "";
@@ -871,7 +871,7 @@ let Stock = {
871
871
  });
872
872
  let symbol = Util.code_to_symbol(Stock.code).toLowerCase();
873
873
  $("#notice_url").attr("href", "https://vip.stock.finance.sina.com.cn/corp/view/vCB_BulletinGather.php?stock_str=" + symbol);
874
- Util.post("/stock/" + Stock["code"], {action: "notice"}, function (j) {
874
+ Util.post("/stock/" + Stock.code, {action: "notice"}, function (j) {
875
875
  let html = [];
876
876
  j.data.forEach(function (item, index) {
877
877
  html.push("<tr title='", item.title, "'>");
@@ -889,7 +889,7 @@ let Stock = {
889
889
  let html = [];
890
890
  html.push("<option value=''>年度报告</option>");
891
891
  j.data.forEach(function (item) {
892
- html.push("<option value='", item.url, "'>", item["year"], "年度报告</option>");
892
+ html.push("<option value='", item.url, "'>", item.year, "年度报告</option>");
893
893
  });
894
894
  let report_obj = $("#report");
895
895
  report_obj.html(html.join(""));
@@ -919,16 +919,16 @@ let Stock = {
919
919
  {"name": "价格变化", "table_sort": 1},
920
920
  ]
921
921
  });
922
- Util.post("/stock/" + Stock["code"], {action: "report_organization"}, function (j) {
922
+ Util.post("/stock/" + Stock.code, {action: "report_organization"}, function (j) {
923
923
  let html = [];
924
924
  j.data.forEach(function (item, i) {
925
925
  html.push("<tr title='", item.title, "'>");
926
926
  html.push("<td>", i + 1, "</td>");
927
- html.push("<td>", Util.pack_html_link("https://data.eastmoney.com/report/info/" + item["id"] + ".html", Util.substring(item.title, 70)), "</td>");
927
+ html.push("<td>", Util.pack_html_link("https://data.eastmoney.com/report/info/" + item.id + ".html", Util.substring(item.title, 70)), "</td>");
928
928
  html.push("<td>", item.organization, "</td>");
929
929
  html.push("<td>", item.analysts, "</td>");
930
930
  html.push("<td>", Util.seconds_to_format(item.ctime, "%Y-%m-%d"), "</td>");
931
- html.push("<td>", Util.digit_compare_trend1(Stock["price"], item["day_price"]), "</td>");
931
+ html.push("<td>", Util.digit_compare_trend1(Stock.price, item.day_price), "</td>");
932
932
  html.push("</tr>");
933
933
  });
934
934
  Util.render_table_html("report_organization_table_body", html);
@@ -949,7 +949,7 @@ let Stock = {
949
949
  }
950
950
  let metrics_drop_down_btn_id = metrics + "_btn_" + date_type;
951
951
  let interval = parseInt($("#" + metrics_drop_down_btn_id).text());
952
- Util.post("/stock/" + Stock["code"], {
952
+ Util.post("/stock/" + Stock.code, {
953
953
  action: "metrics_statistics",
954
954
  metrics: metrics,
955
955
  date_type: date_type,
@@ -966,10 +966,10 @@ let Stock = {
966
966
  price_data.push(item.price);
967
967
  color_data.push("#E74C3C");
968
968
  });
969
- if (j["current"] && j["current"]["value"] && j["current"]["value"] > 0) {
970
- date_data.push(j["current"]["date"]);
971
- value_data.push(j["current"]["value"]);
972
- price_data.push(j["current"]["price"]);
969
+ if (j.current && j.current.value && j.current.value > 0) {
970
+ date_data.push(j.current.date);
971
+ value_data.push(j.current.value);
972
+ price_data.push(j.current.price);
973
973
  color_data.push("#C9CBCF");
974
974
  }
975
975
  let title = Util.strip_bracket_string($("#" + metrics + "_title").text());
@@ -1037,20 +1037,20 @@ let Stock = {
1037
1037
 
1038
1038
  fetch_bias_data: function () {
1039
1039
  Util.show_loading();
1040
- Util.post("/stock/" + Stock["code"], {action: "bias"}, function (j) {
1040
+ Util.post("/stock/" + Stock.code, {action: "bias"}, function (j) {
1041
1041
  let date_data = [], bias20_data = [], bias60_data = [], bias120_data = [], price_data = [], color_data = [];
1042
1042
  let current_date = 0, current_bias20 = 0, current_bias60 = 0, current_bias120 = 0;
1043
1043
  j.data.forEach(function (item) {
1044
1044
  if (item.date > current_date) {
1045
1045
  current_date = item.date;
1046
- current_bias20 = item["bias20"];
1047
- current_bias60 = item["bias60"];
1048
- current_bias120 = item["bias120"];
1046
+ current_bias20 = item.bias20;
1047
+ current_bias60 = item.bias60;
1048
+ current_bias120 = item.bias120;
1049
1049
  }
1050
1050
  date_data.push(Util.seconds_to_format(item.date, "%Y-%m-%d"));
1051
- bias20_data.push(item["bias20"]);
1052
- bias60_data.push(item["bias60"]);
1053
- bias120_data.push(item["bias120"]);
1051
+ bias20_data.push(item.bias20);
1052
+ bias60_data.push(item.bias60);
1053
+ bias120_data.push(item.bias120);
1054
1054
  price_data.push(item.price);
1055
1055
  color_data.push("#C9CBCF");
1056
1056
  });
@@ -1066,7 +1066,7 @@ let Stock = {
1066
1066
  */
1067
1067
  fetch_margin: function () {
1068
1068
  Stock["rzye_chart"] = Util.show_chart_loading(Stock["rzye_chart"], "rzye_line_canvas");
1069
- let margin_url = "https://data.10jqka.com.cn/market/rzrqgg/code/" + Stock["code"];
1069
+ let margin_url = "https://data.10jqka.com.cn/market/rzrqgg/code/" + Stock.code;
1070
1070
  $("#margin_panel_title").html(Util.pack_html_link(margin_url, "[" + Stock.name + "]融资余额"));
1071
1071
  let payload = {
1072
1072
  action: "margin",
@@ -1074,19 +1074,19 @@ let Stock = {
1074
1074
  start_date: $("#margin_start_date").val(),
1075
1075
  end_date: $("#margin_end_date").val()
1076
1076
  };
1077
- Util.post("/stock/" + Stock["code"], payload, function (j) {
1077
+ Util.post("/stock/" + Stock.code, payload, function (j) {
1078
1078
  Stock["rzye_chart"].hideLoading();
1079
1079
  let date_data = [], rzye_data = [], rqye_data = [], price_data = [], rqye_color_data = [], rzye_low = Number.MAX_SAFE_INTEGER, rzye_high = 0, rqye_low = Number.MAX_SAFE_INTEGER, rqye_high = 0;
1080
1080
  let latest_date = 0, margin_summary = "", rqye_summary = "";
1081
1081
  j.data.forEach(function (item) {
1082
1082
  latest_date = Math.max(latest_date, item.date);
1083
1083
  date_data.push(Util.seconds_to_format(item.date, "%Y-%m-%d"));
1084
- rzye_low = Math.min(rzye_low, item["rzye"]);
1085
- rzye_high = Math.max(rzye_high, item["rzye"]);
1086
- rzye_data.push(Util.to_hundred_million(item["rzye"], 3));
1087
- rqye_low = Math.min(rqye_low, item["rqye"]);
1088
- rqye_high = Math.max(rqye_high, item["rqye"]);
1089
- rqye_data.push(Util.to_ten_thousand(item["rqye"], 3));
1084
+ rzye_low = Math.min(rzye_low, item.rzye);
1085
+ rzye_high = Math.max(rzye_high, item.rzye);
1086
+ rzye_data.push(Util.to_hundred_million(item.rzye, 3));
1087
+ rqye_low = Math.min(rqye_low, item.rqye);
1088
+ rqye_high = Math.max(rqye_high, item.rqye);
1089
+ rqye_data.push(Util.to_ten_thousand(item.rqye, 3));
1090
1090
  price_data.push(item.price);
1091
1091
  rqye_color_data.push("#E74C3C");
1092
1092
  });
@@ -1174,17 +1174,17 @@ let Stock = {
1174
1174
  {"name": "涨跌", "table_sort": 1},
1175
1175
  ]
1176
1176
  });
1177
- Util.post("/stock/" + Stock["code"], {action: "margin_detail"}, function (j) {
1177
+ Util.post("/stock/" + Stock.code, {action: "margin_detail"}, function (j) {
1178
1178
  let html = [];
1179
1179
  j.data.forEach(function (item, index) {
1180
1180
  html.push("<tr>");
1181
1181
  html.push("<td>", Util.seconds_to_format(item.date, "%Y-%m-%d"), "</td>");
1182
- html.push("<td title='", item["rzye"], "' data-val='", item["rzye"], "'>", Util.to_unit(item["rzye"], 3), "</td>");
1183
- html.push("<td title='", item["rzmre"], "' data-val='", item["rzmre"], "'>", Util.to_unit(item["rzmre"], 3), "</td>");
1184
- html.push("<td title='", item["rzche"], "' data-val='", item["rzche"], "'>", Util.to_unit(item["rzche"], 3), "</td>");
1182
+ html.push("<td title='", item.rzye, "' data-val='", item.rzye, "'>", Util.to_unit(item.rzye, 3), "</td>");
1183
+ html.push("<td title='", item.rzmre, "' data-val='", item.rzmre, "'>", Util.to_unit(item.rzmre, 3), "</td>");
1184
+ html.push("<td title='", item.rzche, "' data-val='", item.rzche, "'>", Util.to_unit(item.rzche, 3), "</td>");
1185
1185
  let net_rzye = "--", gap_rzye = 0;
1186
1186
  if (j.data[index + 1] && j.data[index + 1]["rzye"]) {
1187
- gap_rzye = item["rzye"] - j.data[index + 1]["rzye"];
1187
+ gap_rzye = item.rzye - j.data[index + 1]["rzye"];
1188
1188
  if (gap_rzye > 0) {
1189
1189
  net_rzye = "<b class='text-danger'>+" + Util.to_unit(gap_rzye, 3) + "</b>";
1190
1190
  } else if (gap_rzye < 0) {
@@ -1192,8 +1192,8 @@ let Stock = {
1192
1192
  }
1193
1193
  }
1194
1194
  html.push("<td title='", gap_rzye, "' data-val='", gap_rzye, "'>", net_rzye, "</td>");
1195
- html.push("<td title='", item["rqye"], "' data-val='", item["rqye"], "'>", (item["rqye"] > 0 ? Util.to_unit(item["rqye"], 3) : "--"), "</td>");
1196
- html.push("<td title='", item["rqyl"], "' data-val='", item["rqyl"], "'>", Util.to_unit(item["rqyl"], 3), "</td>");
1195
+ html.push("<td title='", item.rqye, "' data-val='", item.rqye, "'>", (item.rqye > 0 ? Util.to_unit(item.rqye, 3) : "--"), "</td>");
1196
+ html.push("<td title='", item.rqyl, "' data-val='", item.rqyl, "'>", Util.to_unit(item.rqyl, 3), "</td>");
1197
1197
  let text_color = Util.text_color(item.p_change);
1198
1198
  html.push("<td><b class='", text_color, "'>", item.close, "</b></td>");
1199
1199
  item.p_change = item.p_change > 0 ? ("+" + Util.to_float(item.p_change, 2)) : Util.to_float(item.p_change, 2);
@@ -1229,7 +1229,7 @@ let Stock = {
1229
1229
  start_date: $("#hkex_start_date").val(),
1230
1230
  end_date: $("#hkex_end_date").val()
1231
1231
  };
1232
- Util.post("/stock/" + Stock["code"], payload, function (j) {
1232
+ Util.post("/stock/" + Stock.code, payload, function (j) {
1233
1233
  Stock["hkex_holding_chart"].hideLoading();
1234
1234
  let date_data = [], volume_data = [], price_data = [];
1235
1235
  j.data.forEach(function (item) {
@@ -1237,7 +1237,7 @@ let Stock = {
1237
1237
  volume_data.push(item.volume);
1238
1238
  price_data.push(item.price);
1239
1239
  });
1240
- let hkex_holding_summary = "[" + Util.pack_html_link(j["url"] + "&code=" + Stock["code"] + "&name=" + Stock["name"], Stock["name"]) + "]";
1240
+ let hkex_holding_summary = "[" + Util.pack_html_link(j.url + "&code=" + Stock.code + "&name=" + Stock["name"], Stock["name"]) + "]";
1241
1241
  if (j["latest"].length > 0) {
1242
1242
  let latest_html = "最新(" + Util.seconds_to_format(j["latest"][0]["date"], "%Y-%m-%d") + "): <span style='color: #FFF;' class='label label-info'>" + Util.to_hundred_million(j["latest"][0]["volume"], 4) + "</span>亿股";
1243
1243
  let dist_tips = "";
@@ -1291,7 +1291,7 @@ let Stock = {
1291
1291
  {"name": "持股比例", "table_sort": 1, "title": "内地港股通账户持仓股数 / 流通股本数"},
1292
1292
  ]
1293
1293
  });
1294
- Util.post("/stock/" + Stock["code"], {action: "hk_mutual"}, function (j) {
1294
+ Util.post("/stock/" + Stock.code, {action: "hk_mutual"}, function (j) {
1295
1295
  let html = [];
1296
1296
  j.data.forEach(function (item, index) {
1297
1297
  html.push("<tr>");