hqchart 1.1.13492 → 1.1.13497

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.
@@ -48760,6 +48760,22 @@ HQData.NetworkFilter=function(data, callback)
48760
48760
  case "TradeDetail::RequestData":
48761
48761
  HQData.TradeDetail_RequestData(data,callback);
48762
48762
  break;
48763
+
48764
+ //////////////////////////////////////////////////////
48765
+ //报价列表数据
48766
+ case "JSReportChartContainer::RequestStockListData":
48767
+ HQData.Report_RequestStockListData(data, callback); //码表
48768
+ break;
48769
+
48770
+ case "JSReportChartContainer::RequestMemberListData": //板块成分
48771
+ HQData.Report_RequestMemberListDat(data, callback);
48772
+ break;
48773
+ case "JSDealChartContainer::RequestStockData": //股票数据更新
48774
+ HQData.Report_RequestStockData(data, callback);
48775
+ break;
48776
+ case "JSDealChartContainer::RequestStockSortData": //股票排序数据
48777
+ HQData.Report_RequestStockSortData(data, callback);
48778
+ break;
48763
48779
  }
48764
48780
  }
48765
48781
 
@@ -49170,3 +49186,284 @@ HQData.RequestOverlayHistoryMinuteData=function(data, callback)
49170
49186
  }
49171
49187
 
49172
49188
 
49189
+ //////////////////////////////////////////////////////////////////////////////////////
49190
+ // 报价列表
49191
+ //
49192
+ //
49193
+ /////////////////////////////////////////////////////////////////////////////////////
49194
+
49195
+ //码表
49196
+ HQData.Report_RequestStockListData=function(data, callback)
49197
+ {
49198
+ data.PreventDefault=true;
49199
+
49200
+ var hqchartData={ data:[] };
49201
+
49202
+ if (IFrameSplitOperator.IsNonEmptyArray(SHSZ_STOCK_LIST_TEST_DATA.symbol))
49203
+ {
49204
+ //0=证券代码 1=股票名称
49205
+ for(var i=0;i<SHSZ_STOCK_LIST_TEST_DATA.symbol.length;++i)
49206
+ {
49207
+ var symbol=SHSZ_STOCK_LIST_TEST_DATA.symbol[i];
49208
+ var name=SHSZ_STOCK_LIST_TEST_DATA.name[i];
49209
+
49210
+ hqchartData.data.push([symbol,name]);
49211
+ }
49212
+ }
49213
+
49214
+ console.log("[HQData.Report_RequestStockListData] hqchartData",hqchartData);
49215
+ callback(hqchartData);
49216
+
49217
+ }
49218
+
49219
+ //板块|行业等成分列表
49220
+ HQData.Report_RequestMemberListDat=function(data, callback)
49221
+ {
49222
+ var symbol=data.Request.Data.symbol; //板块代码
49223
+ data.PreventDefault=true;
49224
+
49225
+ var hqchartData= { symbol:symbol , name:symbol, data:[] , code:0 };
49226
+ var testDataCount=SHSZ_STOCK_LIST_TEST_DATA.symbol.length;
49227
+ var testIndex=Math.round(Math.random()*(testDataCount-100));
49228
+ var count=parseInt(Math.random()*(200)+100); ;
49229
+
49230
+ for(var i=testIndex, j=0; i<SHSZ_STOCK_LIST_TEST_DATA.symbol.length && j<count; ++i, ++j)
49231
+ {
49232
+ hqchartData.data.push(SHSZ_STOCK_LIST_TEST_DATA.symbol[i]);
49233
+ }
49234
+
49235
+ callback(hqchartData);
49236
+ }
49237
+
49238
+ HQData.Report_RequestStockData=function(data, callback)
49239
+ {
49240
+ var stocks=data.Request.Data.stocks; //股票列表
49241
+ data.PreventDefault=true;
49242
+
49243
+ var mapStock=new Map();
49244
+ for(var i=0;i<stocks.length;++i)
49245
+ {
49246
+ var item=stocks[i];
49247
+ mapStock.set(item.Symbol,{ Symbol:item.Symbol, Data:null });
49248
+ }
49249
+
49250
+ if (IFrameSplitOperator.IsNonEmptyArray(SHSZ_STOCK_LIST_TEST_DATA.symbol))
49251
+ {
49252
+ for(var i=0;i<SHSZ_STOCK_LIST_TEST_DATA.symbol.length;++i)
49253
+ {
49254
+ var symbol=SHSZ_STOCK_LIST_TEST_DATA.symbol[i];
49255
+ if (!mapStock.has(symbol)) continue;
49256
+ var item=mapStock.get(symbol);
49257
+ var name=SHSZ_STOCK_LIST_TEST_DATA.name[i];
49258
+ var price=SHSZ_STOCK_LIST_TEST_DATA.close[i];
49259
+ var vol=SHSZ_STOCK_LIST_TEST_DATA.vol[i];
49260
+ var newItem=
49261
+ [
49262
+ symbol,
49263
+ name,
49264
+ SHSZ_STOCK_LIST_TEST_DATA.yclose[i],
49265
+ SHSZ_STOCK_LIST_TEST_DATA.open[i],
49266
+ SHSZ_STOCK_LIST_TEST_DATA.high[i],
49267
+ SHSZ_STOCK_LIST_TEST_DATA.low[i],
49268
+ price,
49269
+ vol,
49270
+ SHSZ_STOCK_LIST_TEST_DATA.amount[i],
49271
+ ];
49272
+
49273
+ //买价 量
49274
+ newItem[9]=price+0.05;
49275
+ newItem[10]=10;
49276
+
49277
+ //卖价 量
49278
+ newItem[11]=price-0.06;
49279
+ newItem[12]=5;
49280
+
49281
+ //均价
49282
+ newItem[13]=price-0.03;
49283
+
49284
+ //内盘
49285
+ newItem[18]=vol/4;
49286
+ //外盘
49287
+ newItem[19]=vol/5;
49288
+
49289
+ newItem[14]=vol*1.5; //流通股本
49290
+ newItem[15]=vol*1.8; //总股本
49291
+
49292
+ //换手率
49293
+ newItem[23]=(Math.round(Math.random()*60))/100;
49294
+
49295
+ //名字字段
49296
+ var symbolEx={ Text:name };
49297
+ if (i%20==5)
49298
+ symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue629', Color:'rgb(255,165,0)'}, { Text:'\ue627', Color:'#1c65db'} ] };
49299
+ else if (i%20==9)
49300
+ symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue629', Color:'rgb(255,165,0)'}] } ;
49301
+ else if (i%20==18)
49302
+ symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue627', Color:'#1c65db'}] } ;
49303
+
49304
+ newItem[27]=symbolEx;
49305
+
49306
+
49307
+ //扩展数据 (定制数据)
49308
+ var extendData=[];
49309
+ newItem[30]=extendData;
49310
+
49311
+ //行业
49312
+ extendData[0]="行业X";
49313
+ //地区
49314
+ extendData[1]="地区X";
49315
+
49316
+ //PE|PB
49317
+ extendData[2]=(Math.round(Math.random()*60))/100;
49318
+ extendData[3]=(Math.round(Math.random()*60))/100;
49319
+ extendData[4]=(Math.round(Math.random()*60))/100;
49320
+ extendData[5]=(Math.round(Math.random()*60))/100;
49321
+
49322
+
49323
+ //周涨幅
49324
+ extendData[6]=(Math.round(Math.random()*60))/100;
49325
+ extendData[7]=(Math.round(Math.random()*60))/100;
49326
+ extendData[8]=(Math.round(Math.random()*60))/100;
49327
+
49328
+
49329
+ item.Data=newItem;
49330
+ }
49331
+ }
49332
+
49333
+ var hqchartData={ data:[], code:0 };
49334
+
49335
+ for(var mapItem of mapStock)
49336
+ {
49337
+ var item=mapItem[1];
49338
+ if (!item.Data) continue;
49339
+
49340
+ hqchartData.data.push(item.Data);
49341
+ }
49342
+
49343
+ callback(hqchartData);
49344
+ }
49345
+
49346
+ HQData.Report_RequestStockSortData=function(data, callback)
49347
+ {
49348
+ var blockID=data.Request.Data.symbol; //板块代码
49349
+ var range=data.Request.Data.range; //排序范围
49350
+ var column=data.Request.Data.column; //排序列信息
49351
+ var sortType=data.Request.Data.sort; //排序方向
49352
+ var pageSize=data.Request.Data.pageSize;
49353
+ data.PreventDefault=true;
49354
+
49355
+ var start=range.start;
49356
+ var end=range.end;
49357
+ if (start>0) start-=pageSize;
49358
+ if (start<0) start=0;
49359
+ end+=pageSize;
49360
+
49361
+ var aryData=data.Self.Data.Data.slice(); //所有的股票
49362
+ var mapStock=new Map();
49363
+ var count=end-start+1;
49364
+ for(var i = 0; i < count; i++)
49365
+ {
49366
+ var index = Math.floor(Math.random()*(aryData.length-1));
49367
+ var symbol = aryData[index];
49368
+ mapStock.set(symbol, { Symbol:symbol, Index:i+start, Data:null });
49369
+ aryData.splice(index, 1);
49370
+ }
49371
+
49372
+ if (IFrameSplitOperator.IsNonEmptyArray(SHSZ_STOCK_LIST_TEST_DATA.symbol))
49373
+ {
49374
+ for(var i=0;i<SHSZ_STOCK_LIST_TEST_DATA.symbol.length;++i)
49375
+ {
49376
+ var symbol=SHSZ_STOCK_LIST_TEST_DATA.symbol[i];
49377
+ if (!mapStock.has(symbol)) continue;
49378
+ var item=mapStock.get(symbol);
49379
+ var name=SHSZ_STOCK_LIST_TEST_DATA.name[i];
49380
+ var price=SHSZ_STOCK_LIST_TEST_DATA.close[i];
49381
+ var vol=SHSZ_STOCK_LIST_TEST_DATA.vol[i];
49382
+ var newItem=
49383
+ [
49384
+ symbol,
49385
+ name,
49386
+ SHSZ_STOCK_LIST_TEST_DATA.yclose[i],
49387
+ SHSZ_STOCK_LIST_TEST_DATA.open[i],
49388
+ SHSZ_STOCK_LIST_TEST_DATA.high[i],
49389
+ SHSZ_STOCK_LIST_TEST_DATA.low[i],
49390
+ price,
49391
+ vol,
49392
+ SHSZ_STOCK_LIST_TEST_DATA.amount[i],
49393
+ ];
49394
+
49395
+ //买价 量
49396
+ newItem[9]=price+0.05;
49397
+ newItem[10]=10;
49398
+
49399
+ //卖价 量
49400
+ newItem[11]=price-0.06;
49401
+ newItem[12]=5;
49402
+
49403
+ //均价
49404
+ newItem[13]=price-0.03;
49405
+
49406
+ //内盘
49407
+ newItem[18]=vol/4;
49408
+ //外盘
49409
+ newItem[19]=vol/5;
49410
+
49411
+ newItem[14]=vol*1.5; //流通股本
49412
+ newItem[15]=vol*1.8; //总股本
49413
+
49414
+ //换手率
49415
+ newItem[23]=(Math.round(Math.random()*60))/100;
49416
+
49417
+ //名字字段
49418
+ var symbolEx={ Text:name };
49419
+ if (i%20==5)
49420
+ symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue629', Color:'rgb(255,165,0)'}, { Text:'\ue627', Color:'#1c65db'} ] };
49421
+ else if (i%20==9)
49422
+ symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue629', Color:'rgb(255,165,0)'}] } ;
49423
+ else if (i%20==18)
49424
+ symbolEx.Symbol={ Family:'iconfont', Size:16, Data:[ { Text:'\ue627', Color:'#1c65db'}] } ;
49425
+
49426
+ newItem[27]=symbolEx;
49427
+
49428
+
49429
+ //扩展数据 (定制数据)
49430
+ var extendData=[];
49431
+ newItem[30]=extendData;
49432
+
49433
+ //行业
49434
+ extendData[0]="行业X";
49435
+ //地区
49436
+ extendData[1]="地区X";
49437
+
49438
+ //PE|PB
49439
+ extendData[2]=(Math.round(Math.random()*60))/100;
49440
+ extendData[3]=(Math.round(Math.random()*60))/100;
49441
+ extendData[4]=(Math.round(Math.random()*60))/100;
49442
+ extendData[5]=(Math.round(Math.random()*60))/100;
49443
+
49444
+
49445
+ //周涨幅
49446
+ extendData[6]=(Math.round(Math.random()*60))/100;
49447
+ extendData[7]=(Math.round(Math.random()*60))/100;
49448
+ extendData[8]=(Math.round(Math.random()*60))/100;
49449
+
49450
+
49451
+ item.Data=newItem;
49452
+ }
49453
+ }
49454
+
49455
+ var hqchartData={ data:[], index:[], filedindex:column.index, sort:sortType, symbol:blockID };
49456
+
49457
+ for(var mapItem of mapStock)
49458
+ {
49459
+ var item=mapItem[1];
49460
+ if (!item.Data) continue;
49461
+
49462
+ hqchartData.data.push(item.Data);
49463
+ hqchartData.index.push(item.Index);
49464
+ }
49465
+
49466
+ callback(hqchartData);
49467
+ }
49468
+
49469
+
@@ -2753,6 +2753,9 @@ var JSCHART_MENU_ID=
2753
2753
  CMD_CHANGE_LANGUAGE_ID:37, //语言切换
2754
2754
 
2755
2755
  CMD_CHANGE_DRAG_RECT_SHOW_MODE_ID:38,
2756
+
2757
+
2758
+ CMD_REPORT_CHANGE_BLOCK_ID:60, //报价列表 切换板块ID
2756
2759
  }
2757
2760
 
2758
2761
 
@@ -61,6 +61,8 @@ function JSReportChart(divElement)
61
61
  this.JSChartContainer=chart;
62
62
  this.DivElement.JSChart=this; //div中保存一份
63
63
 
64
+ if (option.EnablePopMenuV2===true) chart.InitalPopMenu();
65
+
64
66
  if (option.Symbol) chart.Symbol=option.Symbol;
65
67
  if (option.Name) chart.Name=option.Name;
66
68
 
@@ -343,6 +345,8 @@ function JSReportChartContainer(uielement)
343
345
 
344
346
  this.IsDestroy=false; //是否已经销毁了
345
347
 
348
+ this.JSPopMenu; //内置菜单
349
+
346
350
  this.ChartDestory=function() //销毁
347
351
  {
348
352
  this.IsDestroy=true;
@@ -360,6 +364,14 @@ function JSReportChartContainer(uielement)
360
364
  }
361
365
  }
362
366
 
367
+ this.InitalPopMenu=function() //初始化弹出窗口
368
+ {
369
+ if (this.JSPopMenu) return;
370
+
371
+ this.JSPopMenu=new JSPopMenu(); //内置菜单
372
+ this.JSPopMenu.Inital();
373
+ }
374
+
363
375
  this.AutoScrollPage=function(step)
364
376
  {
365
377
  this.AutoDragScrollTimer=setTimeout(() =>
@@ -2682,6 +2694,52 @@ function JSReportChartContainer(uielement)
2682
2694
  }
2683
2695
  }
2684
2696
 
2697
+ this.GetTabPopMenu=function(tabItem)
2698
+ {
2699
+ var aryMenu=[ ];
2700
+
2701
+ if (IFrameSplitOperator.IsNonEmptyArray(tabItem.ArySubMenu))
2702
+ {
2703
+ for(var i=0;i<tabItem.ArySubMenu.length;++i)
2704
+ {
2705
+ var item=tabItem.ArySubMenu[i];
2706
+ var menuItem={ Name:item.Title, Data:{ ID:item.CommandID, Args:[item.ID]} };
2707
+
2708
+ aryMenu.push(menuItem);
2709
+ }
2710
+ }
2711
+
2712
+
2713
+ return aryMenu;
2714
+ }
2715
+
2716
+ this.PopupTabMenu=function(menuData, tab, e)
2717
+ {
2718
+ if (!this.JSPopMenu) return;
2719
+
2720
+ var rtTab=tab.Rect;
2721
+ var pixelRatio=GetDevicePixelRatio();
2722
+ var rtCell={ Left:rtTab.Left/pixelRatio, Right:rtTab.Right/pixelRatio, Bottom:rtTab.Bottom/pixelRatio, Top:rtTab.Top/pixelRatio };
2723
+ rtCell.Width=rtCell.Right-rtCell.Left;
2724
+ rtCell.Height=rtCell.Bottom-rtCell.Top;
2725
+
2726
+ var rtClient=this.UIElement.getBoundingClientRect();
2727
+ var rtScroll=GetScrollPosition();
2728
+
2729
+ var offsetLeft=rtClient.left+rtScroll.Left;
2730
+ var offsetTop=rtClient.top+rtScroll.Top;
2731
+ rtCell.Left+=offsetLeft;
2732
+ rtCell.Right+=offsetLeft;
2733
+ rtCell.Top+=offsetTop;
2734
+ rtCell.Bottom+=offsetTop;
2735
+
2736
+ this.JSPopMenu.CreatePopMenu(menuData);
2737
+ this.JSPopMenu.PopupMenuByTab(rtCell);
2738
+
2739
+ if(e.preventDefault) e.preventDefault();
2740
+ if(e.stopPropagation) e.stopPropagation();
2741
+ }
2742
+
2685
2743
  //点击标签
2686
2744
  this.OnClickTab=function(tabData, e)
2687
2745
  {
@@ -2695,36 +2753,80 @@ function JSReportChartContainer(uielement)
2695
2753
 
2696
2754
  if (tabData.Tab.IsMenu)
2697
2755
  {
2756
+ var menuData={ Menu:this.GetTabPopMenu(tabData.Tab), Position:JSPopMenu.POSITION_ID.TAB_MENU_ID };
2757
+ menuData.ClickCallback=(data)=>{ this.OnClickTabPopMenu(tabData, data); }
2758
+
2698
2759
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_REPORT_TABMENU);
2699
2760
  if (event && event.Callback)
2700
2761
  {
2701
- redraw=true;
2702
- var rtItem=tabData.Rect;
2703
- var rtDOM={ Left: rtItem.Left/pixelTatio, Right:rtItem.Right/pixelTatio, Top:rtItem.Top/pixelTatio, Bottom:rtItem.Bottom/pixelTatio };
2704
-
2705
- var sendData={ Data:tabData, IsSide:{X:x, Y:x}, UIElement:uiElement, Rect:rtDOM, e:e , Redraw:redraw };
2762
+ var sendData={ MenuData:menuData, Tab:tabData, PreventDefault:false, e:e };
2706
2763
  event.Callback(event, sendData, this);
2707
- if (IFrameSplitOperator.IsBool(sendData.Redraw)) redraw=sendData.Redraw;
2764
+ if (sendData.PreventDefault==true) return;
2708
2765
  }
2709
2766
 
2710
- this.SetSelectedTab(tabData.Index); //选中tab
2767
+ this.PopupTabMenu(menuData, tabData.Tab, e);
2711
2768
  }
2712
2769
  else
2713
2770
  {
2714
2771
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_REPORT_TAB);
2715
2772
  if (event && event.Callback)
2716
2773
  {
2717
- var sendData={ Data:tabData, IsSide:{X:x, Y:x}, UIElement:uiElement, e:e , Redraw:redraw };
2774
+ var sendData={ Data:tabData, IsSide:{X:x, Y:x}, UIElement:uiElement, e:e , Redraw:redraw, PreventDefault:false };
2718
2775
  event.Callback(event, sendData, this);
2719
2776
  if (IFrameSplitOperator.IsBool(sendData.Redraw)) redraw=sendData.Redraw;
2777
+ if (sendData.PreventDefault==true) return;
2720
2778
  }
2721
2779
 
2722
- this.SetSelectedTab(tabData.Index);
2780
+ if (tabData.Tab.CommandID==JSCHART_MENU_ID.CMD_REPORT_CHANGE_BLOCK_ID)
2781
+ {
2782
+ this.ExecuteMenuCommand(tabData.Tab.CommandID, [tabData.Tab.ID]);
2783
+ this.SetSelectedTab(tabData.Index);
2784
+ }
2723
2785
  }
2724
2786
 
2725
2787
  if (redraw) this.Draw();
2726
2788
  }
2727
2789
 
2790
+ this.OnClickTabPopMenu=function(tabData, data)
2791
+ {
2792
+ JSConsole.Chart.Log('[JSReportChartContainer::OnClickTabPopMenu] ',tabData, data);
2793
+
2794
+ var cmdID=data.Data.ID; //命令ID
2795
+ var aryArgs=data.Data.Args; //参数
2796
+
2797
+ var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_MENU_COMMAND); //回调通知外部
2798
+ if (event && event.Callback)
2799
+ {
2800
+ var data={ PreventDefault:false, CommandID:cmdID, Args:aryArgs, SrcData:data, TabData:tabData };
2801
+ event.Callback(event,data,this);
2802
+ if (data.PreventDefault) return;
2803
+ }
2804
+
2805
+ this.ExecuteMenuCommand(cmdID,aryArgs);
2806
+
2807
+ this.SetSelectedTab(tabData.Index);
2808
+ this.Draw();
2809
+ }
2810
+
2811
+ this.ExecuteMenuCommand=function(cmdID, aryArgs)
2812
+ {
2813
+ JSConsole.Chart.Log('[JSReportChartContainer::ExecuteMenuCommand] cmdID=, aryArgs=', cmdID,aryArgs);
2814
+
2815
+ var param=null, srcParam=null; //原始值
2816
+ if (IFrameSplitOperator.IsNonEmptyArray(aryArgs))
2817
+ {
2818
+ srcParam=aryArgs[0];
2819
+ if (IFrameSplitOperator.IsNumber(aryArgs[0])) param=aryArgs[0];
2820
+ }
2821
+
2822
+ switch(cmdID)
2823
+ {
2824
+ case JSCHART_MENU_ID.CMD_REPORT_CHANGE_BLOCK_ID:
2825
+ if (srcParam) this.ChangeSymbol(param);
2826
+ break;
2827
+ }
2828
+ }
2829
+
2728
2830
  this.SwapColumn=function(leftIndex, rightIndex, option)
2729
2831
  {
2730
2832
  var reportChart=this.GetReportChart();
@@ -5800,7 +5902,7 @@ function ChartReportTab()
5800
5902
  this.IsShow=true; //是否显示
5801
5903
 
5802
5904
  //Tab
5803
- this.TabList=[]; //{ Title:标题, ID:, IsMenu: 是否菜单 }
5905
+ this.TabList=[]; //{ Title:标题, ID:, IsMenu: 是否菜单, ArySubMenu:[ { Title:, ID: }] }
5804
5906
  this.SelectedTabIndex=-1;
5805
5907
  this.MoveOnTabIndex=-1;
5806
5908
 
@@ -5869,7 +5971,7 @@ function ChartReportTab()
5869
5971
 
5870
5972
  var tabItem={ Title:item.Title, IsMenu:false, FixedSymbol:[], FixedRowCount:0 };
5871
5973
  if (item.ID) tabItem.ID=item.ID;
5872
- if (item.MenuID) tabItem.MenuID=item.MenuID;
5974
+ if (item.CommandID) tabItem.CommandID=item.CommandID;
5873
5975
  if (IFrameSplitOperator.IsBool(item.IsMenu)) tabItem.IsMenu=item.IsMenu;
5874
5976
  if (IFrameSplitOperator.IsNonEmptyArray(item.FixedSymbol))
5875
5977
  {
@@ -5881,6 +5983,10 @@ function ChartReportTab()
5881
5983
  ++tabItem.FixedRowCount;
5882
5984
  }
5883
5985
  }
5986
+
5987
+ if (IFrameSplitOperator.IsNonEmptyArray(item.ArySubMenu))
5988
+ tabItem.ArySubMenu=item.ArySubMenu.slice();
5989
+
5884
5990
  this.TabList.push(tabItem);
5885
5991
  }
5886
5992
  }