sbd-npm 1.5.28 → 1.5.30
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/constant.js +2 -3
- package/package.json +1 -1
- package/stock_basics.js +124 -89
package/constant.js
CHANGED
|
@@ -196,12 +196,11 @@ const MenuList = [
|
|
|
196
196
|
{'key': 'hk_hsi', 'name': '恒生指数', 'url': '/0x3135360dcf6896d681e5db9cd588bc7bd653ba32'},
|
|
197
197
|
{'key': 'hk_hstech', 'name': '恒生科技指数', 'url': '/0x0c340f1dd3760b1b4b0034dc5a258d4e40c1469a'},
|
|
198
198
|
{'key': 'hk_hsci', 'name': '恒生综合指数', 'url': '/0x3dd9fec342f81357a01e8b0f4a242e94892d5439'},
|
|
199
|
-
{'key': 'hk_hsm25', 'name': '恒生中国25指数', 'url': '/0x51c9cebe97e898875fba107e53fad29c79e1a1bb'},
|
|
200
|
-
{'key': 'hk_hsm100', 'name': '恒生中国100指数', 'url': '/0x759fcb84a0a322125df6748dffad66d7b2b44c2d'},
|
|
201
199
|
{'key': 'hk_biotechnology', 'name': '生物科技', 'url': '/0xa131be85db2beb939e93207d0966c3710c7b761a'},
|
|
202
200
|
{'key': 'hk_sell_short', 'name': '沽空排行', 'url': '/0x4ecddc987891875a42d206620cd97ca382613485'},
|
|
203
201
|
{'key': 'hk_mutual', 'name': '港股通持股排行', 'url': '/0x310a47a6abd868f19cd3fdbf2f2566813cb45d57'},
|
|
204
|
-
{'key': 'hk_institutional_positions', 'name': '机构持仓变化', 'url': '/0xe5606bba43cf85cc3870f3608fe556648ce13084'}
|
|
202
|
+
{'key': 'hk_institutional_positions', 'name': '机构持仓变化', 'url': '/0xe5606bba43cf85cc3870f3608fe556648ce13084'},
|
|
203
|
+
{'key': 'hk_prepare_mutual', 'name': '准入通股', 'url': '/0x737d14bafc0049c5a4b3a2ef34e6c2a8e37462bc'}
|
|
205
204
|
]
|
|
206
205
|
},
|
|
207
206
|
{
|
package/package.json
CHANGED
package/stock_basics.js
CHANGED
|
@@ -47,7 +47,7 @@ let Stock = {
|
|
|
47
47
|
Stock.fetch_bias_data();
|
|
48
48
|
break;
|
|
49
49
|
case "holder_top":
|
|
50
|
-
Stock.
|
|
50
|
+
Stock.fetch_top_holder();
|
|
51
51
|
break;
|
|
52
52
|
case "holder_data":
|
|
53
53
|
Stock.fetch_holder_num_data();
|
|
@@ -473,32 +473,35 @@ let Stock = {
|
|
|
473
473
|
}
|
|
474
474
|
},
|
|
475
475
|
|
|
476
|
-
|
|
476
|
+
fetch_top_holder: function () {
|
|
477
477
|
Util.show_loading();
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
478
|
+
if (!document.getElementById("circulation_holder_table_body")) {
|
|
479
|
+
Util.init_table_skeleton({
|
|
480
|
+
"element_id": "circulation_holder_table",
|
|
481
|
+
"head_columns": [
|
|
482
|
+
{"name": "排名", "table_sort": 1},
|
|
483
|
+
{"name": "股东名"},
|
|
484
|
+
{"name": "持股数"},
|
|
485
|
+
{"name": "持股市值"},
|
|
486
|
+
{"name": "持股比例"},
|
|
487
|
+
{"name": "变化"},
|
|
488
|
+
]
|
|
489
|
+
});
|
|
490
|
+
Util.init_table_skeleton({
|
|
491
|
+
"element_id": "main_holder_table",
|
|
492
|
+
"head_columns": [
|
|
493
|
+
{"name": "排名", "table_sort": 1},
|
|
494
|
+
{"name": "股东名"},
|
|
495
|
+
{"name": "持股数"},
|
|
496
|
+
{"name": "持股市值"},
|
|
497
|
+
{"name": "持股比例"},
|
|
498
|
+
{"name": "变化"},
|
|
499
|
+
]
|
|
500
|
+
});
|
|
501
|
+
Stock.fetch_top_holder_modal();
|
|
502
|
+
}
|
|
500
503
|
let payload = {action: "top_holder"};
|
|
501
|
-
let date = $("#
|
|
504
|
+
let date = $("#top_holder_date").val();
|
|
502
505
|
if (date) {
|
|
503
506
|
payload.date = date;
|
|
504
507
|
}
|
|
@@ -549,19 +552,19 @@ let Stock = {
|
|
|
549
552
|
});
|
|
550
553
|
let circulation_tips = "", main_tips = "";
|
|
551
554
|
if (circulation_volume > 0) {
|
|
552
|
-
circulation_tips += "[十大流通股东总持股数: <span class='label label-info'>" + Util.to_unit(circulation_volume, 3) + "
|
|
555
|
+
circulation_tips += "[十大流通股东总持股数: <span class='label label-info'>" + Util.to_unit(circulation_volume, 3) + "</span>(总占流比:<b class='text-primary'>" + Util.to_float(circulation_ratio, 2) + "%</b>)";
|
|
553
556
|
if (pre_circulation_volume > 0) {
|
|
554
|
-
circulation_tips += ",上一季度: <span class='label label-info'>" + Util.to_unit(pre_circulation_volume, 3) + "
|
|
557
|
+
circulation_tips += ",上一季度: <span class='label label-info'>" + Util.to_unit(pre_circulation_volume, 3) + "</span>,";
|
|
555
558
|
circulation_tips += "持股数环比: " + Util.year_price_rate(circulation_volume, pre_circulation_volume, 1);
|
|
556
559
|
}
|
|
557
560
|
if (j.date_price) {
|
|
558
561
|
circulation_tips += ", 当时价: " + Util.digit_compare_trend1(Stock.price, j.date_price);
|
|
559
562
|
}
|
|
560
|
-
circulation_tips += "]";
|
|
563
|
+
circulation_tips += "] <a title='十大股东的季度持股分析' style='cursor: pointer' data-toggle='modal' data-target='.top_holder_modal'><i style='color: #000' class='glyphicon glyphicon-info-sign'></i></a>";
|
|
561
564
|
}
|
|
562
565
|
$("#circulation_holder_tips").html(circulation_tips);
|
|
563
566
|
if (main_volume > 0) {
|
|
564
|
-
main_tips += " [ 当前十大主要股东总持股数: <span class='label label-info'>" + Util.to_unit(main_volume, 3) + "股</span>(总占比:<b class='text-primary'>" + main_ratio + "%</b>)";
|
|
567
|
+
main_tips += " [ 当前十大主要股东总持股数: <span class='label label-info'>" + Util.to_unit(main_volume, 3) + "股</span>(总占比:<b class='text-primary'>" + Util.to_float(main_ratio, 2) + "%</b>)";
|
|
565
568
|
if (pre_main_volume > 0) {
|
|
566
569
|
main_tips += ",上一季度: <span class='label label-info'>" + Util.to_unit(pre_main_volume, 3) + "股</span>,";
|
|
567
570
|
main_tips += " 持股数环比: " + Util.year_price_rate(main_volume, pre_main_volume, 1);
|
|
@@ -580,74 +583,106 @@ let Stock = {
|
|
|
580
583
|
date = Util.seconds_to_format(date, "%Y-%m-%d");
|
|
581
584
|
date_html.push("<option value='", date, "'>", date, "</option>");
|
|
582
585
|
});
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
htd.change(function () {
|
|
586
|
-
Stock.fetch_holder_top();
|
|
586
|
+
$("#top_holder_date").html(date_html.join("")).change(function () {
|
|
587
|
+
Stock.fetch_top_holder();
|
|
587
588
|
});
|
|
588
589
|
}
|
|
589
590
|
Util.hide_tips();
|
|
590
591
|
});
|
|
591
592
|
},
|
|
592
593
|
|
|
593
|
-
|
|
594
|
-
Util.
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
{
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
"link": "https://baike.baidu.com/item/货币资金/2408229"
|
|
620
|
-
},
|
|
621
|
-
{"name": "短期借款"},
|
|
622
|
-
{"name": "一年非流债", "tooltip": "一年内到期的非流动负债"},
|
|
623
|
-
{
|
|
624
|
-
"name": "短期还债比",
|
|
625
|
-
"tooltip": "货币资金 / (短期借款 + 一年内到期的非流动负债)",
|
|
626
|
-
"link": "https://mp.weixin.qq.com/s?__biz=MzAxMjEyOTYwMQ==&mid=2649823683&idx=1&sn=122617d91614ec7b78aa738ca4fdb4ed"
|
|
627
|
-
},
|
|
628
|
-
{"name": "商誉"},
|
|
629
|
-
{"name": "商誉占比"}
|
|
630
|
-
]
|
|
594
|
+
fetch_top_holder_modal: function() {
|
|
595
|
+
Util.init_modal_skeleton("top_holder_modal", "<div id='top_holder_circulation_chart' style='height: 350px;'></div><div id='top_holder_main_chart' style='height: 350px;'></div>");
|
|
596
|
+
$("#top_holder_modal_title").html("十大(流通/主要)股东的季度持股分析");
|
|
597
|
+
let htm_object = $('#top_holder_modal');
|
|
598
|
+
htm_object.on('shown.bs.modal', function (e) {
|
|
599
|
+
Stock.top_holder_circulation_chart = Util.show_chart_loading(Stock.top_holder_circulation_chart, "top_holder_circulation_chart");
|
|
600
|
+
Stock.top_holder_main_chart = Util.show_chart_loading(Stock.top_holder_main_chart, "top_holder_main_chart");
|
|
601
|
+
Util.post("/stock/" + Stock.code, {action: "top_holder_statistics"}, function (j) {
|
|
602
|
+
Stock.top_holder_circulation_chart.hideLoading();
|
|
603
|
+
let date_data = [], volume_data = [], ratio_data = [];
|
|
604
|
+
j.circulation_data.forEach(function (item) {
|
|
605
|
+
date_data.push(Util.seconds_to_format(item.date, "%Y-%m-%d"));
|
|
606
|
+
volume_data.push(Util.to_ten_thousand(item.volume, 3));
|
|
607
|
+
ratio_data.push(Util.to_float(item.ratio, 2));
|
|
608
|
+
});
|
|
609
|
+
Stock.top_holder_circulation_chart = Util.multi_axis_line(Stock.top_holder_circulation_chart, "top_holder_circulation_chart", date_data, "十大流通股东总持股数(万股)", volume_data, "总持股比例", ratio_data);
|
|
610
|
+
Stock.top_holder_main_chart.hideLoading();
|
|
611
|
+
date_data = [], volume_data = [], ratio_data = [];
|
|
612
|
+
j.main_data.forEach(function (item) {
|
|
613
|
+
date_data.push(Util.seconds_to_format(item.date, "%Y-%m-%d"));
|
|
614
|
+
volume_data.push(Util.to_ten_thousand(item.volume, 2));
|
|
615
|
+
ratio_data.push(Util.to_float(item.ratio, 2));
|
|
616
|
+
});
|
|
617
|
+
Stock.top_holder_main_chart = Util.multi_axis_line(Stock.top_holder_main_chart, "top_holder_main_chart", date_data, "十大主要股东总持股数(万股)", volume_data, "总持股比例", ratio_data);
|
|
618
|
+
Util.hide_tips();
|
|
619
|
+
});
|
|
631
620
|
});
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
"head_columns": [
|
|
635
|
-
{"name": "年份-季度"},
|
|
636
|
-
{"name": "净利率"},
|
|
637
|
-
{"name": "毛利率"},
|
|
638
|
-
{"name": "EPS", "tooltip": "每股收益(Earnings Per Share)"},
|
|
639
|
-
{"name": "ROE", "tooltip": "净资产收益率(Return On Equity)"},
|
|
640
|
-
{"name": "营业收入"},
|
|
641
|
-
{"name": "营收同比", "tooltip": "(当前营业收入 - 去年同期的营业收入) / 去年同期的营业收入 × 100%"},
|
|
642
|
-
{"name": "营收环比", "tooltip": "(当前营业收入 - 上一季度的营业收入) / 上一季度的营业收入 × 100%"},
|
|
643
|
-
{"name": "净利润"},
|
|
644
|
-
{"name": "净利同比", "tooltip": "(当前净利润 - 去年同期的净利润) / 去年同期的净利润 × 100%"},
|
|
645
|
-
{"name": "净利环比", "tooltip": "(当前净利润 - 上一季度的净利润) / 上一季度的净利润 × 100%"},
|
|
646
|
-
{"name": "扣非净利润"},
|
|
647
|
-
{"name": "扣净同比", "tooltip": "(当前扣非净利润 - 去年同期的扣非净利润) / 去年同期的扣非净利润 × 100%"},
|
|
648
|
-
{"name": "扣净环比", "tooltip": "(当前扣非净利润 - 上一季度的扣非净利润) / 上一季度的扣非净利润 × 100%"},
|
|
649
|
-
]
|
|
621
|
+
htm_object.on('hidden.bs.modal', function () {
|
|
622
|
+
Util.hide_tips();
|
|
650
623
|
});
|
|
624
|
+
},
|
|
625
|
+
|
|
626
|
+
fetch_finance: function () {
|
|
627
|
+
Util.show_loading();
|
|
628
|
+
if (!document.getElementById("cash_flow_table_body")) {
|
|
629
|
+
Util.init_table_skeleton({
|
|
630
|
+
"element_id": "cash_flow_table",
|
|
631
|
+
"head_columns": [
|
|
632
|
+
{"name": "年份"},
|
|
633
|
+
{"name": "经营活动现金流"},
|
|
634
|
+
{"name": "资本开支"},
|
|
635
|
+
{"name": "自由现金流", "tooltip": "自由现金流 = 经营活动现金流 - 资本开支"},
|
|
636
|
+
{
|
|
637
|
+
"name": "筹资现金净额",
|
|
638
|
+
"tooltip": "筹资活动现金流量,是企业现金流量的重要组成部分,其中包含了筹资活动现金流入和筹资活动现金流出两个小部分,筹资活动现金流入减去筹资活动现金流出,就是企业当期筹资活动产生的现金流量净额"
|
|
639
|
+
},
|
|
640
|
+
]
|
|
641
|
+
});
|
|
642
|
+
Util.init_table_skeleton({
|
|
643
|
+
"element_id": "assets_liabilities_table",
|
|
644
|
+
"head_columns": [
|
|
645
|
+
{"name": "年份"},
|
|
646
|
+
{"name": "总资产"},
|
|
647
|
+
{"name": "总负债"},
|
|
648
|
+
{"name": "净资产", "tooltip": "净资产 = 总资产 - 总负债"},
|
|
649
|
+
{"name": "资产负债率", "tooltip": "资产负债率 = 总负债 / 总资产", "link": "https://baike.baidu.com/item/资产负债率/2429745"},
|
|
650
|
+
{
|
|
651
|
+
"name": "货币资金",
|
|
652
|
+
"tooltip": "货币资金(Money) 是指企业拥有的,以货币形式存在的资产,包括现金、银行存款和其他货币资金",
|
|
653
|
+
"link": "https://baike.baidu.com/item/货币资金/2408229"
|
|
654
|
+
},
|
|
655
|
+
{"name": "短期借款"},
|
|
656
|
+
{"name": "一年非流债", "tooltip": "一年内到期的非流动负债"},
|
|
657
|
+
{
|
|
658
|
+
"name": "短期还债比",
|
|
659
|
+
"tooltip": "货币资金 / (短期借款 + 一年内到期的非流动负债)",
|
|
660
|
+
"link": "https://mp.weixin.qq.com/s?__biz=MzAxMjEyOTYwMQ==&mid=2649823683&idx=1&sn=122617d91614ec7b78aa738ca4fdb4ed"
|
|
661
|
+
},
|
|
662
|
+
{"name": "商誉"},
|
|
663
|
+
{"name": "商誉占比"}
|
|
664
|
+
]
|
|
665
|
+
});
|
|
666
|
+
Util.init_table_skeleton({
|
|
667
|
+
"element_id": "profit_table",
|
|
668
|
+
"head_columns": [
|
|
669
|
+
{"name": "年份-季度"},
|
|
670
|
+
{"name": "净利率"},
|
|
671
|
+
{"name": "毛利率"},
|
|
672
|
+
{"name": "EPS", "tooltip": "每股收益(Earnings Per Share)"},
|
|
673
|
+
{"name": "ROE", "tooltip": "净资产收益率(Return On Equity)"},
|
|
674
|
+
{"name": "营业收入"},
|
|
675
|
+
{"name": "营收同比", "tooltip": "(当前营业收入 - 去年同期的营业收入) / 去年同期的营业收入 × 100%"},
|
|
676
|
+
{"name": "营收环比", "tooltip": "(当前营业收入 - 上一季度的营业收入) / 上一季度的营业收入 × 100%"},
|
|
677
|
+
{"name": "净利润"},
|
|
678
|
+
{"name": "净利同比", "tooltip": "(当前净利润 - 去年同期的净利润) / 去年同期的净利润 × 100%"},
|
|
679
|
+
{"name": "净利环比", "tooltip": "(当前净利润 - 上一季度的净利润) / 上一季度的净利润 × 100%"},
|
|
680
|
+
{"name": "扣非净利润"},
|
|
681
|
+
{"name": "扣净同比", "tooltip": "(当前扣非净利润 - 去年同期的扣非净利润) / 去年同期的扣非净利润 × 100%"},
|
|
682
|
+
{"name": "扣净环比", "tooltip": "(当前扣非净利润 - 上一季度的扣非净利润) / 上一季度的扣非净利润 × 100%"},
|
|
683
|
+
]
|
|
684
|
+
});
|
|
685
|
+
}
|
|
651
686
|
Util.post("/stock/" + Stock.code, {action: "finance"}, function (j) {
|
|
652
687
|
// 现金流量表
|
|
653
688
|
let html = [], total_ncf_from_oa = 0, total_cash_paid_for_assets = 0, total_free_cash_flow = 0, total_ncf_from_fa = 0;
|