hqchart 1.1.14320 → 1.1.14336
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/lib/umychart.vue.js +243 -229
- package/package.json +1 -1
- package/src/jscommon/umychart.NetworkFilterTest.js +75 -1
- package/src/jscommon/umychart.complier.js +151 -22
- package/src/jscommon/umychart.js +542 -222
- package/src/jscommon/umychart.style.js +14 -0
- package/src/jscommon/umychart.testdata.js +75 -1
- package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +708 -245
- package/src/jscommon/umychart.version.js +1 -1
- package/src/jscommon/umychart.vue/umychart.NetworkFilterTest.vue.js +75 -1
- package/src/jscommon/umychart.vue/umychart.vue.js +708 -245
package/src/jscommon/umychart.js
CHANGED
|
@@ -2846,6 +2846,9 @@ var JSCHART_MENU_ID=
|
|
|
2846
2846
|
CMD_MODIFY_INDEX_PARAM:45, //指标删除修改 [windowIndex, ]
|
|
2847
2847
|
CMD_MODIFY_OVERLAY_INDEX_PARAM:46, //叠加指标修改 [windowIndex, ID ]
|
|
2848
2848
|
|
|
2849
|
+
CMD_LOCK_CROSSCURSOR:47, //锁十字光标
|
|
2850
|
+
CMD_UNLOCK_CROSSCURSOR:48, //解锁十字光标
|
|
2851
|
+
|
|
2849
2852
|
|
|
2850
2853
|
CMD_REPORT_CHANGE_BLOCK_ID:100, //报价列表 切换板块ID
|
|
2851
2854
|
CMD_REPORT_COLUMN_SORT_ID:101, //报价列表 表头排序 Arg[列序号, 排序方向]
|
|
@@ -10187,6 +10190,12 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
|
|
|
10187
10190
|
var sendData={ e:null, WindowIndex:param, Type:2, Identify:aryArgs[1] };
|
|
10188
10191
|
this.ShowModifyIndexParamDialog(sendData);
|
|
10189
10192
|
break;
|
|
10193
|
+
case JSCHART_MENU_ID.CMD_LOCK_CROSSCURSOR:
|
|
10194
|
+
if (srcParam) this.LockCorssCursor(srcParam);
|
|
10195
|
+
break;
|
|
10196
|
+
case JSCHART_MENU_ID.CMD_UNLOCK_CROSSCURSOR:
|
|
10197
|
+
if (this.IsLockCorssCursor()) this.UnlockCorssCursor({ Draw:true })
|
|
10198
|
+
break;
|
|
10190
10199
|
}
|
|
10191
10200
|
}
|
|
10192
10201
|
|
|
@@ -10273,13 +10282,13 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
|
|
|
10273
10282
|
if (!this.JSPopMenu) return;
|
|
10274
10283
|
var x=data.X, y=data.Y;
|
|
10275
10284
|
var frameID=data.FrameID;
|
|
10276
|
-
var menuData={ Menu:this.GetRightMenuData(frameID), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
|
|
10285
|
+
var menuData={ Menu:this.GetRightMenuData(frameID, data), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
|
|
10277
10286
|
menuData.ClickCallback=(data)=>{ this.OnClickRightMenu(data); }
|
|
10278
10287
|
|
|
10279
10288
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CREATE_RIGHT_MENU);
|
|
10280
10289
|
if (event && event.Callback)
|
|
10281
10290
|
{
|
|
10282
|
-
var sendData={ MenuData:menuData, FrameID:frameID };
|
|
10291
|
+
var sendData={ MenuData:menuData, FrameID:frameID, Data:data };
|
|
10283
10292
|
event.Callback(event, sendData, this);
|
|
10284
10293
|
}
|
|
10285
10294
|
|
|
@@ -20696,9 +20705,9 @@ function HQTradeFrame()
|
|
|
20696
20705
|
return null;
|
|
20697
20706
|
}
|
|
20698
20707
|
|
|
20699
|
-
this.GetXFromIndex=function(index)
|
|
20708
|
+
this.GetXFromIndex=function(index,isLimit)
|
|
20700
20709
|
{
|
|
20701
|
-
return this.SubFrame[0].Frame.GetXFromIndex(index);
|
|
20710
|
+
return this.SubFrame[0].Frame.GetXFromIndex(index,isLimit);
|
|
20702
20711
|
}
|
|
20703
20712
|
|
|
20704
20713
|
this.GetYFromData=function(value)
|
|
@@ -23698,15 +23707,15 @@ function ChartData()
|
|
|
23698
23707
|
this.FindDataIndexByDateTime=function(aryDateTime) //aryDateTime=[ { Date:, Time:, Index:-1 }, ......]
|
|
23699
23708
|
{
|
|
23700
23709
|
var findCount=0;
|
|
23701
|
-
for(var i
|
|
23710
|
+
for(var i=0;i<aryDateTime.length;++i)
|
|
23702
23711
|
{
|
|
23703
23712
|
aryDateTime[i].Index=-1;
|
|
23704
23713
|
}
|
|
23705
23714
|
|
|
23706
|
-
for(var i
|
|
23715
|
+
for(var i=0;i<this.Data.length;++i)
|
|
23707
23716
|
{
|
|
23708
23717
|
var item=this.Data[i];
|
|
23709
|
-
for(var j
|
|
23718
|
+
for(var j=0;j<aryDateTime.length;++j)
|
|
23710
23719
|
{
|
|
23711
23720
|
var findItem=aryDateTime[j];
|
|
23712
23721
|
if (findItem.Index>=0) continue;
|
|
@@ -23715,7 +23724,7 @@ function ChartData()
|
|
|
23715
23724
|
{
|
|
23716
23725
|
if (findItem.Date==item.Date && findItem.Time==item.Time)
|
|
23717
23726
|
{
|
|
23718
|
-
findItem.Index=
|
|
23727
|
+
findItem.Index=i;
|
|
23719
23728
|
++findCount;
|
|
23720
23729
|
break;
|
|
23721
23730
|
}
|
|
@@ -23724,7 +23733,7 @@ function ChartData()
|
|
|
23724
23733
|
{
|
|
23725
23734
|
if (findItem.Date==item.Date)
|
|
23726
23735
|
{
|
|
23727
|
-
findItem.Index=
|
|
23736
|
+
findItem.Index=i;
|
|
23728
23737
|
++findCount;
|
|
23729
23738
|
break;
|
|
23730
23739
|
}
|
|
@@ -24348,6 +24357,30 @@ ChartData.GetPeriodName=function(period)
|
|
|
24348
24357
|
}
|
|
24349
24358
|
|
|
24350
24359
|
|
|
24360
|
+
ChartData.GetKValue=function(kItem, valueName)
|
|
24361
|
+
{
|
|
24362
|
+
if (!kItem) return null;
|
|
24363
|
+
|
|
24364
|
+
switch(valueName)
|
|
24365
|
+
{
|
|
24366
|
+
case "HIGH":
|
|
24367
|
+
case "H":
|
|
24368
|
+
return kItem.High;
|
|
24369
|
+
case "L":
|
|
24370
|
+
case "LOW":
|
|
24371
|
+
return kItem.Low;
|
|
24372
|
+
case "C":
|
|
24373
|
+
case "CLOSE":
|
|
24374
|
+
return kItem.Close;
|
|
24375
|
+
case "O":
|
|
24376
|
+
case "OPEN":
|
|
24377
|
+
return KItem.Open;
|
|
24378
|
+
default:
|
|
24379
|
+
return null;
|
|
24380
|
+
}
|
|
24381
|
+
}
|
|
24382
|
+
|
|
24383
|
+
|
|
24351
24384
|
|
|
24352
24385
|
function TooltipData() //提示信息
|
|
24353
24386
|
{
|
|
@@ -31938,199 +31971,292 @@ function ChartSimpleRadar()
|
|
|
31938
31971
|
delete this.newMethod;
|
|
31939
31972
|
|
|
31940
31973
|
this.ClassName='ChartSimpleRadar'; //类名
|
|
31941
|
-
|
|
31942
|
-
this.
|
|
31943
|
-
this.CenterPoint={};
|
|
31944
|
-
this.StartAngle=0;
|
|
31945
|
-
this.Color='rgb(198,198,198)';
|
|
31946
|
-
this.AreaColor='rgba(242,154,118,0.4)'; //面积图颜色
|
|
31974
|
+
|
|
31975
|
+
this.AreaColor='rgba(242,154,118,0.4)'; //
|
|
31947
31976
|
this.AreaLineColor='rgb(242,154,118)';
|
|
31948
|
-
|
|
31949
|
-
this.TitleColor=
|
|
31950
|
-
this.
|
|
31977
|
+
|
|
31978
|
+
this.TitleColor=g_JSChartResource.ChartSimpleRadar.TextColor;
|
|
31979
|
+
this.TextFontConfig=CloneData(g_JSChartResource.ChartSimpleRadar.TextFont);
|
|
31980
|
+
this.Offset=CloneData(g_JSChartResource.ChartSimpleRadar.Offset);
|
|
31981
|
+
this.BorderColor=g_JSChartResource.ChartSimpleRadar.BorderColor;
|
|
31982
|
+
this.AryBGColor=g_JSChartResource.ChartSimpleRadar.AryBGColor.slice();//背景色
|
|
31983
|
+
this.AryAreaConfig=g_JSChartResource.ChartSimpleRadar.AryArea.slice(); //面积图颜色
|
|
31984
|
+
|
|
31985
|
+
this.StartAngle=270;
|
|
31986
|
+
this.Radius=50;
|
|
31987
|
+
this.AryBorder=[1, 0.75, 0.5, 0.25];
|
|
31988
|
+
this.AryIndex; //指标{ Name:, Max:100, Min:0 },
|
|
31951
31989
|
|
|
31952
|
-
this.
|
|
31990
|
+
this.CenterPoint={};
|
|
31991
|
+
this.RectClient={ };
|
|
31992
|
+
this.AryIndexCache=[];
|
|
31993
|
+
this.MapDataCache=new Map(); //key=name value={ Data:[] }
|
|
31994
|
+
this.TextFont;
|
|
31995
|
+
|
|
31996
|
+
|
|
31997
|
+
this.ReloadResource=function(resource)
|
|
31953
31998
|
{
|
|
31954
|
-
|
|
31999
|
+
this.TitleColor=g_JSChartResource.ChartSimpleRadar.TextColor;
|
|
32000
|
+
this.TextFontConfig=CloneData(g_JSChartResource.ChartSimpleRadar.TextFont);
|
|
32001
|
+
this.Offset=CloneData(g_JSChartResource.ChartSimpleRadar.Offset);
|
|
32002
|
+
this.BorderColor=g_JSChartResource.ChartSimpleRadar.BorderColor;
|
|
32003
|
+
this.AryBGColor=g_JSChartResource.ChartSimpleRadar.AryBGColor.slice();//背景色
|
|
32004
|
+
this.AryAreaConfig=g_JSChartResource.ChartSimpleRadar.AryArea.slice(); //面积图颜色
|
|
32005
|
+
}
|
|
31955
32006
|
|
|
31956
|
-
|
|
31957
|
-
|
|
31958
|
-
|
|
31959
|
-
|
|
32007
|
+
this.DrawBorder=function() //画边框
|
|
32008
|
+
{
|
|
32009
|
+
this.Canvas.strokeStyle = this.BorderColor;
|
|
32010
|
+
this.Canvas.font=this.TextFont;
|
|
32011
|
+
for(var i=0;i<this.AryBorder.length;++i)
|
|
31960
32012
|
{
|
|
31961
|
-
var rate =
|
|
31962
|
-
var
|
|
31963
|
-
|
|
32013
|
+
var rate = this.AryBorder[i];
|
|
32014
|
+
var radius=this.RectClient.Radius*rate;
|
|
32015
|
+
var bFirstDraw=true;
|
|
32016
|
+
for(var j=0;j<this.AryIndexCache.length;++j)
|
|
31964
32017
|
{
|
|
31965
|
-
var item=this.
|
|
31966
|
-
|
|
31967
|
-
|
|
31968
|
-
if (
|
|
32018
|
+
var item=this.AryIndexCache[j];
|
|
32019
|
+
var x = this.CenterPoint.X + radius * Math.cos(item.Angle * Math.PI / 180);
|
|
32020
|
+
var y = this.CenterPoint.Y + radius * Math.sin(item.Angle * Math.PI / 180);
|
|
32021
|
+
if (bFirstDraw)
|
|
31969
32022
|
{
|
|
31970
32023
|
this.Canvas.beginPath();
|
|
31971
|
-
this.Canvas.moveTo(
|
|
31972
|
-
|
|
32024
|
+
this.Canvas.moveTo(x,y);
|
|
32025
|
+
bFirstDraw=false;
|
|
31973
32026
|
}
|
|
31974
32027
|
else
|
|
31975
32028
|
{
|
|
31976
|
-
this.Canvas.lineTo(
|
|
32029
|
+
this.Canvas.lineTo(x,y);
|
|
31977
32030
|
}
|
|
31978
32031
|
}
|
|
31979
32032
|
|
|
31980
32033
|
this.Canvas.closePath();
|
|
31981
32034
|
this.Canvas.stroke();
|
|
31982
|
-
|
|
31983
|
-
this.
|
|
32035
|
+
|
|
32036
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.AryBGColor))
|
|
32037
|
+
{
|
|
32038
|
+
this.Canvas.fillStyle = this.AryBGColor[i%this.AryBGColor.length];
|
|
32039
|
+
this.Canvas.fill();
|
|
32040
|
+
}
|
|
31984
32041
|
}
|
|
31985
32042
|
|
|
31986
32043
|
this.Canvas.beginPath();
|
|
31987
|
-
for(
|
|
32044
|
+
for(var i=0;i<this.AryIndexCache.length;++i)
|
|
31988
32045
|
{
|
|
31989
|
-
var item=this.
|
|
31990
|
-
|
|
31991
|
-
|
|
32046
|
+
var item=this.AryIndexCache[i];
|
|
32047
|
+
var x = this.CenterPoint.X + item.Radius * Math.cos(item.Angle * Math.PI / 180);
|
|
32048
|
+
var y = this.CenterPoint.Y + item.Radius * Math.sin(item.Angle * Math.PI / 180);
|
|
31992
32049
|
this.Canvas.moveTo(this.CenterPoint.X,this.CenterPoint.Y);
|
|
31993
|
-
this.Canvas.lineTo(
|
|
31994
|
-
this.DrawText(item);
|
|
32050
|
+
this.Canvas.lineTo(x,y);
|
|
32051
|
+
this.DrawText(item, x, y);
|
|
31995
32052
|
}
|
|
31996
32053
|
this.Canvas.stroke();
|
|
32054
|
+
|
|
32055
|
+
}
|
|
32056
|
+
|
|
32057
|
+
this.GetRadarRate=function(indexItem, value)
|
|
32058
|
+
{
|
|
32059
|
+
var range={ Max:100, Min:0 };
|
|
32060
|
+
if (IFrameSplitOperator.IsNumber(indexItem.Max)) range.Max=indexItem.Max;
|
|
32061
|
+
if (IFrameSplitOperator.IsNumber(indexItem.Min)) range.Min=indexItem.Min;
|
|
32062
|
+
|
|
32063
|
+
if (value>range.Max) value=range.Max;
|
|
32064
|
+
else if (value<range.Min) value=range.Min;
|
|
32065
|
+
|
|
32066
|
+
return (value-range.Min)/(range.Max-range.Min);
|
|
31997
32067
|
}
|
|
31998
32068
|
|
|
31999
32069
|
this.DrawArea=function()
|
|
32000
32070
|
{
|
|
32001
|
-
if (
|
|
32071
|
+
if (this.MapDataCache.size<=0) return;
|
|
32002
32072
|
|
|
32003
|
-
|
|
32004
|
-
|
|
32005
|
-
this.Canvas.beginPath();
|
|
32006
|
-
var isFirstDraw=true;
|
|
32007
|
-
for(let i in this.DataPoint)
|
|
32073
|
+
var index=0;
|
|
32074
|
+
for(var mapItem of this.MapDataCache)
|
|
32008
32075
|
{
|
|
32009
|
-
var
|
|
32010
|
-
|
|
32076
|
+
var mapData=mapItem[1].MapData;
|
|
32077
|
+
|
|
32078
|
+
var bFirstDraw=true;
|
|
32079
|
+
var pointCount=0;
|
|
32080
|
+
for(var i=0;i<this.AryIndexCache.length;++i)
|
|
32011
32081
|
{
|
|
32012
|
-
this.
|
|
32013
|
-
|
|
32014
|
-
|
|
32082
|
+
var indexItem=this.AryIndexCache[i];
|
|
32083
|
+
if (!indexItem.Data || !indexItem.Data.Name) continue;
|
|
32084
|
+
if (!mapData.has(indexItem.Data.Name)) continue;
|
|
32085
|
+
var item=mapData.get(indexItem.Data.Name);
|
|
32086
|
+
if (!item.Data && !IFrameSplitOperator.IsNumber(item.Data.Value)) conintue;
|
|
32087
|
+
|
|
32088
|
+
var widthRate=this.GetRadarRate(indexItem, item.Data.Value);
|
|
32089
|
+
var x = this.CenterPoint.X+indexItem.Radius*widthRate*Math.cos(indexItem.Angle * Math.PI / 180);
|
|
32090
|
+
var y = this.CenterPoint.Y+indexItem.Radius*widthRate*Math.sin(indexItem.Angle * Math.PI / 180);
|
|
32091
|
+
|
|
32092
|
+
if (bFirstDraw)
|
|
32093
|
+
{
|
|
32094
|
+
this.Canvas.beginPath();
|
|
32095
|
+
this.Canvas.moveTo(x,y);
|
|
32096
|
+
bFirstDraw=false;
|
|
32097
|
+
++pointCount;
|
|
32098
|
+
}
|
|
32099
|
+
else
|
|
32100
|
+
{
|
|
32101
|
+
this.Canvas.lineTo(x,y);
|
|
32102
|
+
++pointCount;
|
|
32103
|
+
}
|
|
32015
32104
|
}
|
|
32016
|
-
|
|
32105
|
+
|
|
32106
|
+
if (pointCount>0)
|
|
32017
32107
|
{
|
|
32018
|
-
this.Canvas.
|
|
32108
|
+
this.Canvas.closePath();
|
|
32109
|
+
|
|
32110
|
+
var config=this.AryAreaConfig[index%this.AryAreaConfig.length];
|
|
32111
|
+
if (config.Color)
|
|
32112
|
+
{
|
|
32113
|
+
this.Canvas.fillStyle = config.Color;
|
|
32114
|
+
this.Canvas.fill();
|
|
32115
|
+
}
|
|
32116
|
+
|
|
32117
|
+
if (config.LineColor)
|
|
32118
|
+
{
|
|
32119
|
+
this.Canvas.strokeStyle = config.LineColor;
|
|
32120
|
+
this.Canvas.stroke();
|
|
32121
|
+
}
|
|
32019
32122
|
}
|
|
32020
|
-
}
|
|
32021
32123
|
|
|
32022
|
-
|
|
32023
|
-
|
|
32024
|
-
this.Canvas.stroke();
|
|
32124
|
+
++index;
|
|
32125
|
+
}
|
|
32025
32126
|
}
|
|
32026
32127
|
|
|
32027
|
-
this.DrawText=function(item)
|
|
32128
|
+
this.DrawText=function(item, x, y)
|
|
32028
32129
|
{
|
|
32029
|
-
if (!item.
|
|
32130
|
+
if (!item.Data || !item.Data.Name) return;
|
|
32030
32131
|
|
|
32031
32132
|
//JSConsole.Chart.Log(item.Text, item.Angle);
|
|
32032
32133
|
this.Canvas.fillStyle = this.TitleColor;
|
|
32033
|
-
var xText =
|
|
32134
|
+
var xText = x, yText =y;
|
|
32135
|
+
|
|
32136
|
+
var angle=item.Angle%360;
|
|
32034
32137
|
|
|
32035
32138
|
//显示每个角度的位置
|
|
32036
|
-
if (
|
|
32139
|
+
if (angle > 0 && angle < 45) {
|
|
32037
32140
|
this.Canvas.textAlign = 'left';
|
|
32038
32141
|
this.Canvas.textBaseline = 'middle';
|
|
32039
32142
|
xText += 2;
|
|
32040
32143
|
}
|
|
32041
|
-
else if (
|
|
32144
|
+
else if (angle >= 45 && angle < 90) {
|
|
32042
32145
|
this.Canvas.textAlign = 'left';
|
|
32043
32146
|
this.Canvas.textBaseline = 'top';
|
|
32044
32147
|
xText += 2;
|
|
32045
32148
|
}
|
|
32046
|
-
else if (
|
|
32149
|
+
else if (angle==90)
|
|
32150
|
+
{
|
|
32151
|
+
this.Canvas.textAlign = 'center';
|
|
32152
|
+
this.Canvas.textBaseline = 'top';
|
|
32153
|
+
yText+=2;
|
|
32154
|
+
}
|
|
32155
|
+
else if (angle >= 90 && angle < 135) {
|
|
32047
32156
|
this.Canvas.textAlign = 'right';
|
|
32048
32157
|
this.Canvas.textBaseline = 'top';
|
|
32049
32158
|
xText -= 2;
|
|
32050
32159
|
}
|
|
32051
|
-
else if (
|
|
32160
|
+
else if (angle >= 135 && angle < 180) {
|
|
32052
32161
|
this.Canvas.textAlign = 'right';
|
|
32053
32162
|
this.Canvas.textBaseline = 'top';
|
|
32054
32163
|
xText -= 2;
|
|
32055
32164
|
}
|
|
32056
|
-
else if (
|
|
32165
|
+
else if (angle >= 180 && angle < 225) {
|
|
32057
32166
|
this.Canvas.textAlign = 'right';
|
|
32058
32167
|
this.Canvas.textBaseline = 'middle';
|
|
32059
32168
|
xText -= 2;
|
|
32060
32169
|
}
|
|
32061
|
-
else if (
|
|
32170
|
+
else if (angle >= 225 && angle <= 270) {
|
|
32062
32171
|
this.Canvas.textAlign = 'center';
|
|
32063
32172
|
this.Canvas.textBaseline = 'bottom';
|
|
32064
32173
|
}
|
|
32065
|
-
else if (
|
|
32174
|
+
else if (angle > 270 && angle < 315) {
|
|
32066
32175
|
this.Canvas.textAlign = 'left';
|
|
32067
32176
|
this.Canvas.textBaseline = 'bottom';
|
|
32068
32177
|
xText += 2;
|
|
32069
32178
|
}
|
|
32070
|
-
else
|
|
32179
|
+
else
|
|
32180
|
+
{
|
|
32071
32181
|
this.Canvas.textAlign = 'left';
|
|
32072
32182
|
this.Canvas.textBaseline = 'middle';
|
|
32073
32183
|
xText += 2;
|
|
32074
32184
|
}
|
|
32075
32185
|
|
|
32076
|
-
this.Canvas.fillText(item.
|
|
32186
|
+
this.Canvas.fillText(item.Data.Name, xText, yText);
|
|
32077
32187
|
}
|
|
32078
32188
|
|
|
32079
32189
|
this.Draw=function()
|
|
32080
32190
|
{
|
|
32081
|
-
this.
|
|
32082
|
-
this.
|
|
32083
|
-
this.
|
|
32084
|
-
|
|
32085
|
-
|
|
32086
|
-
else
|
|
32087
|
-
this.CalculatePoints(this.Data.Data);
|
|
32191
|
+
this.AryIndexCache=[];
|
|
32192
|
+
this.MapData=new Map();
|
|
32193
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.AryIndex)) return;
|
|
32194
|
+
|
|
32195
|
+
this.CalculateSize();
|
|
32088
32196
|
|
|
32089
32197
|
this.DrawBorder();
|
|
32198
|
+
|
|
32090
32199
|
this.DrawArea();
|
|
32091
32200
|
}
|
|
32092
32201
|
|
|
32093
|
-
this.
|
|
32202
|
+
this.BuildCacheData=function()
|
|
32094
32203
|
{
|
|
32095
|
-
|
|
32096
|
-
let right=this.ChartBorder.GetRight();
|
|
32097
|
-
let top=this.ChartBorder.GetTop();
|
|
32098
|
-
let bottom=this.ChartBorder.GetBottom();
|
|
32099
|
-
let width=this.ChartBorder.GetWidth();
|
|
32100
|
-
let height=this.ChartBorder.GetHeight();
|
|
32204
|
+
this.MapDataCache=new Map();
|
|
32101
32205
|
|
|
32102
|
-
|
|
32103
|
-
let radius=Math.min(width/2,height/2)-2 //半径
|
|
32104
|
-
let count=Math.max(5,data?data.length:0);
|
|
32105
|
-
let averageAngle=360/count;
|
|
32106
|
-
for(let i=0;i<count;++i)
|
|
32206
|
+
for(var i=0;i<this.Data.Data.length;++i)
|
|
32107
32207
|
{
|
|
32108
|
-
|
|
32109
|
-
|
|
32208
|
+
var item=this.Data.Data[i];
|
|
32209
|
+
if (!this.MapDataCache.has(item.Group))
|
|
32210
|
+
{
|
|
32211
|
+
this.MapDataCache.set(item.Group, { MapData:new Map() })
|
|
32212
|
+
}
|
|
32213
|
+
|
|
32214
|
+
var mpaItem=this.MapDataCache.get(item.Group);
|
|
32215
|
+
mpaItem.MapData.set(item.Name, { Data:item });
|
|
32216
|
+
}
|
|
32217
|
+
}
|
|
32218
|
+
|
|
32219
|
+
this.CalculateSize=function(data)
|
|
32220
|
+
{
|
|
32221
|
+
var border=this.ChartBorder.GetBorder();
|
|
32222
|
+
var pixelRatio=GetDevicePixelRatio();
|
|
32223
|
+
this.TextFont=`${this.TextFontConfig.Size*pixelRatio}px ${ this.TextFontConfig.Name}`;
|
|
32224
|
+
var fontHeight=this.GetFontHeight(this.TextFont,"擎")+1;
|
|
32110
32225
|
|
|
32111
|
-
|
|
32226
|
+
var maxTextWidth=0;
|
|
32227
|
+
if (IFrameSplitOperator.IsNonEmptyArray(this.AryIndex))
|
|
32228
|
+
{
|
|
32229
|
+
for(var i=0;i<this.AryIndex.length;++i)
|
|
32112
32230
|
{
|
|
32113
|
-
var item=
|
|
32114
|
-
|
|
32115
|
-
|
|
32116
|
-
if (
|
|
32117
|
-
|
|
32118
|
-
|
|
32119
|
-
|
|
32120
|
-
|
|
32121
|
-
|
|
32122
|
-
|
|
32123
|
-
|
|
32124
|
-
|
|
32125
|
-
|
|
32126
|
-
|
|
32127
|
-
|
|
32128
|
-
|
|
32231
|
+
var item=this.AryIndex[i];
|
|
32232
|
+
if (!item.Name) continue;
|
|
32233
|
+
var textWidth=this.Canvas.measureText(item.Name).width;
|
|
32234
|
+
if (maxTextWidth<textWidth) maxTextWidth=textWidth;
|
|
32235
|
+
}
|
|
32236
|
+
}
|
|
32237
|
+
|
|
32238
|
+
var radius=this.Radius*2*pixelRatio; //半径
|
|
32239
|
+
this.RectClient={ Width:radius*2, Height:radius*2, Radius:radius };
|
|
32240
|
+
this.RectClient.Right=border.Right+this.Offset.X-maxTextWidth;
|
|
32241
|
+
this.RectClient.Top=border.TopEx+this.Offset.Y+fontHeight;
|
|
32242
|
+
this.RectClient.Left=this.RectClient.Right-this.RectClient.Width;
|
|
32243
|
+
this.RectClient.Bottom=this.RectClient.Top+this.RectClient.Height;
|
|
32244
|
+
|
|
32245
|
+
var ptCenter={X:this.RectClient.Left+this.RectClient.Width/2, Y:this.RectClient.Top+this.RectClient.Height/2}; //中心点
|
|
32246
|
+
|
|
32247
|
+
var count=Math.max(5,this.AryIndex.length);
|
|
32248
|
+
var averageAngle=360/count;
|
|
32249
|
+
for(var i=0;i<count;++i)
|
|
32250
|
+
{
|
|
32251
|
+
var angle=i*averageAngle+this.StartAngle;
|
|
32129
32252
|
|
|
32130
|
-
|
|
32253
|
+
var indexItem={ Data:null, Index:i, Angle:angle, Radius:radius };
|
|
32254
|
+
if (this.AryIndex && this.AryIndex[i])
|
|
32255
|
+
{
|
|
32256
|
+
indexItem.Data=this.AryIndex[i];
|
|
32131
32257
|
}
|
|
32132
32258
|
|
|
32133
|
-
this.
|
|
32259
|
+
this.AryIndexCache.push(indexItem);
|
|
32134
32260
|
}
|
|
32135
32261
|
|
|
32136
32262
|
this.CenterPoint=ptCenter;
|
|
@@ -32139,7 +32265,7 @@ function ChartSimpleRadar()
|
|
|
32139
32265
|
//空数据
|
|
32140
32266
|
this.DrawEmptyData=function()
|
|
32141
32267
|
{
|
|
32142
|
-
JSConsole.Chart.Log('[
|
|
32268
|
+
JSConsole.Chart.Log('[ChartSimpleRadar::DrawEmptyData]')
|
|
32143
32269
|
}
|
|
32144
32270
|
}
|
|
32145
32271
|
|
|
@@ -40795,98 +40921,219 @@ function ChartMultiPoint()
|
|
|
40795
40921
|
delete this.newMethod;
|
|
40796
40922
|
|
|
40797
40923
|
this.ClassName="ChartMultiPoint";
|
|
40798
|
-
this.PointGroup=[]; // [ {Point:[ {
|
|
40924
|
+
this.PointGroup=[]; // [ {Point:[ {Date, Time, Value }, ], Color: }, ]
|
|
40799
40925
|
|
|
40800
40926
|
|
|
40801
40927
|
this.IsHScreen=false;
|
|
40802
40928
|
this.LineWidth=1;
|
|
40803
40929
|
this.PointRadius=5;
|
|
40804
40930
|
|
|
40931
|
+
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
40932
|
+
this.GetKValue=ChartData.GetKValue;
|
|
40933
|
+
|
|
40934
|
+
this.BuildKey=function(item)
|
|
40935
|
+
{
|
|
40936
|
+
if (IFrameSplitOperator.IsNumber(item.Time)) return `${item.Date}-${item.Time}`;
|
|
40937
|
+
else return item.Date;
|
|
40938
|
+
}
|
|
40939
|
+
|
|
40940
|
+
this.GetItem=function(kItem)
|
|
40941
|
+
{
|
|
40942
|
+
if (!this.MapCache || this.MapCache.size<=0) return null;
|
|
40943
|
+
|
|
40944
|
+
var key=this.BuildKey(kItem);
|
|
40945
|
+
if (!this.MapCache.has(key)) return null;
|
|
40946
|
+
|
|
40947
|
+
return this.MapCache.get(key);
|
|
40948
|
+
}
|
|
40949
|
+
|
|
40950
|
+
this.BuildCacheData=function()
|
|
40951
|
+
{
|
|
40952
|
+
var mapData=new Map();
|
|
40953
|
+
this.MapCache=mapData;
|
|
40954
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
40955
|
+
|
|
40956
|
+
for(var i=0; i<this.PointGroup.length; ++i)
|
|
40957
|
+
{
|
|
40958
|
+
var groupItem=this.PointGroup[i];
|
|
40959
|
+
if (!groupItem || !IFrameSplitOperator.IsNonEmptyArray(groupItem.Point)) continue;
|
|
40960
|
+
|
|
40961
|
+
var clrConfig= { Color:groupItem.Color, BGColor:groupItem.BGColor, LineWidth:this.LineWidth, Radius:this.PointRadius, Name:groupItem.Name };
|
|
40962
|
+
if (IFrameSplitOperator.IsNumber(groupItem.PointRadius)) clrConfig.Radius=groupItem.PointRadius;
|
|
40963
|
+
|
|
40964
|
+
for(var j=0; j<groupItem.Point.length; ++j)
|
|
40965
|
+
{
|
|
40966
|
+
var point=groupItem.Point[j];
|
|
40967
|
+
var key=this.BuildKey(point);
|
|
40968
|
+
|
|
40969
|
+
var item={ Data:point, ColorConfig:clrConfig }
|
|
40970
|
+
if (mapData.has(key))
|
|
40971
|
+
{
|
|
40972
|
+
var mapItem=mapData.get(key);
|
|
40973
|
+
mapItem.Data.push(item);
|
|
40974
|
+
}
|
|
40975
|
+
else
|
|
40976
|
+
{
|
|
40977
|
+
mapData.set(key,{ Data:[item] });
|
|
40978
|
+
}
|
|
40979
|
+
}
|
|
40980
|
+
}
|
|
40981
|
+
}
|
|
40982
|
+
|
|
40805
40983
|
this.Draw=function()
|
|
40806
40984
|
{
|
|
40807
|
-
if (!this.IsShow || this.ChartFrame.IsMinSize) return;
|
|
40808
|
-
if (
|
|
40985
|
+
if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
|
|
40986
|
+
if (this.IsShowIndexTitleOnly()) return;
|
|
40987
|
+
if (this.IsHideScriptIndex()) return;
|
|
40988
|
+
|
|
40989
|
+
if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return; //k线数据
|
|
40809
40990
|
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
40991
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
40810
40992
|
|
|
40811
40993
|
this.IsHScreen=(this.ChartFrame.IsHScreen===true);
|
|
40812
40994
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
40813
|
-
var
|
|
40814
|
-
var
|
|
40995
|
+
var dataWidth=this.ChartFrame.DataWidth;
|
|
40996
|
+
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
40997
|
+
var isMinute=this.IsMinuteFrame();
|
|
40998
|
+
|
|
40999
|
+
var border=this.GetBorder();
|
|
41000
|
+
if (this.IsHScreen)
|
|
41001
|
+
{
|
|
41002
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
41003
|
+
var chartright=border.BottomEx;
|
|
41004
|
+
var chartLeft=border.TopEx;
|
|
41005
|
+
}
|
|
41006
|
+
else
|
|
41007
|
+
{
|
|
41008
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
41009
|
+
var chartright=border.RightEx;
|
|
41010
|
+
var chartLeft=border.LeftEx;
|
|
41011
|
+
}
|
|
41012
|
+
|
|
41013
|
+
//计算所有的点位置
|
|
41014
|
+
var mapPoint=new Map();
|
|
41015
|
+
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
|
|
41016
|
+
{
|
|
41017
|
+
var kItem=this.Data.Data[i];
|
|
41018
|
+
var key=this.BuildKey(kItem);
|
|
41019
|
+
if (!this.MapCache.has(key)) continue;
|
|
41020
|
+
var mapItem=this.MapCache.get(key);
|
|
41021
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
41022
|
+
|
|
41023
|
+
if (isMinute)
|
|
41024
|
+
{
|
|
41025
|
+
var x=this.ChartFrame.GetXFromIndex(j);
|
|
41026
|
+
}
|
|
41027
|
+
else
|
|
41028
|
+
{
|
|
41029
|
+
var left=xOffset;
|
|
41030
|
+
var right=xOffset+dataWidth;
|
|
41031
|
+
if (right>chartright) break;
|
|
41032
|
+
var x=left+(right-left)/2;
|
|
41033
|
+
}
|
|
41034
|
+
|
|
41035
|
+
this.CalculateItem(mapItem, kItem, x, mapPoint);
|
|
41036
|
+
}
|
|
41037
|
+
|
|
41038
|
+
if (mapPoint.size<=0) return;
|
|
40815
41039
|
|
|
40816
41040
|
this.Canvas.save();
|
|
40817
41041
|
this.ClipClient(this.IsHScreen);
|
|
40818
|
-
|
|
40819
|
-
|
|
41042
|
+
|
|
41043
|
+
this.DrawAllPoint(mapPoint);
|
|
41044
|
+
|
|
41045
|
+
this.Canvas.restore();
|
|
41046
|
+
}
|
|
41047
|
+
|
|
41048
|
+
this.CalculateItem=function(groupItem, kItem, x, mapPoint)
|
|
41049
|
+
{
|
|
41050
|
+
for(var i=0; i<groupItem.Data.length; ++i)
|
|
40820
41051
|
{
|
|
40821
|
-
var item=
|
|
40822
|
-
var
|
|
40823
|
-
|
|
40824
|
-
|
|
40825
|
-
|
|
40826
|
-
|
|
40827
|
-
|
|
41052
|
+
var item=groupItem.Data[i];
|
|
41053
|
+
var value=item.Data.Value;
|
|
41054
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
41055
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
41056
|
+
|
|
41057
|
+
var y=this.ChartFrame.GetYFromData(value,false);
|
|
41058
|
+
|
|
41059
|
+
var strConfig=JSON.stringify(item.ColorConfig);
|
|
41060
|
+
if (!mapPoint.has(strConfig)) mapPoint.set(strConfig, { AryPoint:[]});
|
|
41061
|
+
var mapItem=mapPoint.get(strConfig);
|
|
41062
|
+
|
|
41063
|
+
mapItem.AryPoint.push({ X:x, Y:y, Data:item });
|
|
41064
|
+
}
|
|
41065
|
+
}
|
|
41066
|
+
|
|
41067
|
+
this.DrawAllPoint=function(mapPoint)
|
|
41068
|
+
{
|
|
41069
|
+
var pixelRatio=GetDevicePixelRatio();
|
|
41070
|
+
|
|
41071
|
+
for(var mapItem of mapPoint)
|
|
41072
|
+
{
|
|
41073
|
+
var aryPoint=mapItem[1].AryPoint;
|
|
41074
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(aryPoint)) continue;
|
|
41075
|
+
var config=null;
|
|
40828
41076
|
var path=new Path2D();
|
|
40829
41077
|
var count=0;
|
|
40830
|
-
|
|
40831
|
-
for(var j=0; j<item.Point.length; ++j)
|
|
41078
|
+
for(var i=0;i<aryPoint.length;++i)
|
|
40832
41079
|
{
|
|
40833
|
-
var
|
|
40834
|
-
if (!
|
|
40835
|
-
|
|
40836
|
-
var index=point.Index-offset;
|
|
40837
|
-
if (index>=0 && index<xPointCount)
|
|
40838
|
-
{
|
|
40839
|
-
var x=this.ChartFrame.GetXFromIndex(index);
|
|
40840
|
-
var y=this.ChartFrame.GetYFromData(point.Value, false);
|
|
41080
|
+
var item=aryPoint[i];
|
|
41081
|
+
if (!config) config=item.Data.ColorConfig;
|
|
40841
41082
|
|
|
40842
|
-
|
|
40843
|
-
|
|
40844
|
-
|
|
40845
|
-
|
|
40846
|
-
|
|
41083
|
+
var pointPath = new Path2D();
|
|
41084
|
+
if (this.IsHScreen)
|
|
41085
|
+
pointPath.arc(item.Y,item.X,config.Radius*pixelRatio,0,360,false);
|
|
41086
|
+
else
|
|
41087
|
+
pointPath.arc(item.X,item.Y,config.Radius**pixelRatio,0,360,false);
|
|
40847
41088
|
|
|
40848
|
-
|
|
40849
|
-
|
|
40850
|
-
}
|
|
41089
|
+
path.addPath(pointPath);
|
|
41090
|
+
++count;
|
|
40851
41091
|
}
|
|
40852
41092
|
|
|
40853
|
-
if (count>0 &&
|
|
41093
|
+
if (count>0 && config)
|
|
40854
41094
|
{
|
|
40855
|
-
|
|
40856
|
-
|
|
40857
|
-
|
|
41095
|
+
if (config.BGColor)
|
|
41096
|
+
{
|
|
41097
|
+
this.Canvas.fillStyle=config.BGColor; //背景填充颜色
|
|
41098
|
+
this.Canvas.fill(path);
|
|
41099
|
+
}
|
|
40858
41100
|
|
|
40859
|
-
if (
|
|
40860
|
-
|
|
41101
|
+
if (config.Color)
|
|
41102
|
+
{
|
|
41103
|
+
this.Canvas.lineWidth=config.LineWidth*pixelRatio;
|
|
41104
|
+
this.Canvas.strokeStyle=config.Color;
|
|
41105
|
+
this.Canvas.stroke(path);
|
|
41106
|
+
}
|
|
40861
41107
|
}
|
|
40862
|
-
|
|
40863
41108
|
}
|
|
40864
|
-
|
|
40865
|
-
this.Canvas.restore();
|
|
40866
41109
|
}
|
|
40867
41110
|
|
|
40868
41111
|
this.GetMaxMin=function()
|
|
40869
41112
|
{
|
|
40870
41113
|
var range={ Min:null, Max:null };
|
|
41114
|
+
if(!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return range;
|
|
41115
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
40871
41116
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
40872
|
-
var start=this.Data.DataOffset;
|
|
40873
|
-
var end=start+xPointCount;
|
|
40874
41117
|
|
|
40875
|
-
for(var i=0;
|
|
41118
|
+
for(var i=this.Data.DataOffset,j=0, k=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
|
|
40876
41119
|
{
|
|
40877
|
-
var
|
|
40878
|
-
|
|
41120
|
+
var kItem=this.Data.Data[i];
|
|
41121
|
+
var key=this.BuildKey(kItem);
|
|
41122
|
+
if (!this.MapCache.has(key)) continue;
|
|
41123
|
+
var mapItem=this.MapCache.get(key);
|
|
41124
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
40879
41125
|
|
|
40880
|
-
for(
|
|
41126
|
+
for(k=0;k<mapItem.Data.length;++k)
|
|
40881
41127
|
{
|
|
40882
|
-
var
|
|
40883
|
-
|
|
40884
|
-
|
|
40885
|
-
|
|
40886
|
-
|
|
40887
|
-
|
|
40888
|
-
|
|
40889
|
-
|
|
41128
|
+
var item=mapItem.Data[k];
|
|
41129
|
+
var value=item.Data.Value;
|
|
41130
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
41131
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
41132
|
+
|
|
41133
|
+
if (range.Max==null) range.Max=value;
|
|
41134
|
+
else if (range.Max<value) range.Max=value;
|
|
41135
|
+
if (range.Min==null) range.Min=value;
|
|
41136
|
+
else if (range.Min>value) range.Min=value;
|
|
40890
41137
|
}
|
|
40891
41138
|
}
|
|
40892
41139
|
|
|
@@ -41153,6 +41400,8 @@ function ChartMultiSVGIconV2()
|
|
|
41153
41400
|
this.IconRect=[]; //0=序号,1=区域
|
|
41154
41401
|
|
|
41155
41402
|
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
41403
|
+
this.GetKValue=ChartData.GetKValue;
|
|
41404
|
+
|
|
41156
41405
|
|
|
41157
41406
|
this.BuildKey=function(item)
|
|
41158
41407
|
{
|
|
@@ -41267,28 +41516,7 @@ function ChartMultiSVGIconV2()
|
|
|
41267
41516
|
|
|
41268
41517
|
this.Canvas.restore();
|
|
41269
41518
|
}
|
|
41270
|
-
|
|
41271
|
-
this.GetKValue=function(kItem, valueName)
|
|
41272
|
-
{
|
|
41273
|
-
switch(valueName)
|
|
41274
|
-
{
|
|
41275
|
-
case "HIGH":
|
|
41276
|
-
case "H":
|
|
41277
|
-
return kItem.High;
|
|
41278
|
-
case "L":
|
|
41279
|
-
case "LOW":
|
|
41280
|
-
return kItem.Low;
|
|
41281
|
-
case "C":
|
|
41282
|
-
case "CLOSE":
|
|
41283
|
-
return kItem.Close;
|
|
41284
|
-
case "O":
|
|
41285
|
-
case "OPEN":
|
|
41286
|
-
return KItem.Open;
|
|
41287
|
-
default:
|
|
41288
|
-
return null;
|
|
41289
|
-
}
|
|
41290
|
-
}
|
|
41291
|
-
|
|
41519
|
+
|
|
41292
41520
|
this.DrawItem=function(groupItem, kItem, x, drawInfo)
|
|
41293
41521
|
{
|
|
41294
41522
|
if (!IFrameSplitOperator.IsNonEmptyArray(groupItem.Data)) return;
|
|
@@ -57244,24 +57472,29 @@ function DynamicChartTitlePainting()
|
|
|
57244
57472
|
|
|
57245
57473
|
this.ForamtMultiPointTitle=function(dataIndex, dataInfo)
|
|
57246
57474
|
{
|
|
57247
|
-
if (!
|
|
57475
|
+
if (!dataInfo.GetItemCallback) return null;
|
|
57476
|
+
if (!dataInfo.Data || !IFrameSplitOperator.IsNonEmptyArray(dataInfo.Data.Data)) return null;
|
|
57477
|
+
var kItem=dataInfo.Data.Data[dataIndex];
|
|
57478
|
+
if (!kItem) return null;
|
|
57479
|
+
|
|
57480
|
+
var group=dataInfo.GetItemCallback(kItem);
|
|
57481
|
+
if (!group || !IFrameSplitOperator.IsNonEmptyArray(group.Data)) return null;
|
|
57248
57482
|
|
|
57249
57483
|
var aryText=[];
|
|
57250
|
-
for(var i=0;i<
|
|
57484
|
+
for(var i=0;i<group.Data.length;++i)
|
|
57251
57485
|
{
|
|
57252
|
-
var
|
|
57253
|
-
|
|
57254
|
-
|
|
57255
|
-
|
|
57256
|
-
|
|
57257
|
-
|
|
57258
|
-
|
|
57259
|
-
|
|
57260
|
-
|
|
57261
|
-
|
|
57262
|
-
|
|
57263
|
-
|
|
57264
|
-
}
|
|
57486
|
+
var item=group.Data[i];
|
|
57487
|
+
var config=item.ColorConfig;
|
|
57488
|
+
|
|
57489
|
+
var color=null;
|
|
57490
|
+
if (config.BGColor) color=config.BGColor;
|
|
57491
|
+
else if (config.Color) color=config.Color;
|
|
57492
|
+
|
|
57493
|
+
if (config.Name) aryText.push({ Text:`${config.Name}:`, Color:color });
|
|
57494
|
+
|
|
57495
|
+
var value=item.Data.Value;
|
|
57496
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=ChartData.GetKValue(kItem, item.Data.Value);
|
|
57497
|
+
aryText.push({ Text:this.FormatValue(value, dataInfo), Color:color});
|
|
57265
57498
|
}
|
|
57266
57499
|
|
|
57267
57500
|
if (!IFrameSplitOperator.IsNonEmptyArray(aryText)) return null;
|
|
@@ -58032,6 +58265,11 @@ function DynamicChartTitlePainting()
|
|
|
58032
58265
|
aryText=this.FromatStackedBarTitle(value, item);
|
|
58033
58266
|
if (!aryText) continue;
|
|
58034
58267
|
}
|
|
58268
|
+
else if (item.DataType=="ChartMultiPoint")
|
|
58269
|
+
{
|
|
58270
|
+
aryText=this.ForamtMultiPointTitle(dataIndex, item);
|
|
58271
|
+
if (!aryText) continue;
|
|
58272
|
+
}
|
|
58035
58273
|
else
|
|
58036
58274
|
{
|
|
58037
58275
|
valueText=this.FormatValue(value,item);
|
|
@@ -71036,6 +71274,20 @@ function JSChartResource()
|
|
|
71036
71274
|
Offset:{ X:-5, Y:5 }
|
|
71037
71275
|
}
|
|
71038
71276
|
|
|
71277
|
+
this.ChartSimpleRadar=
|
|
71278
|
+
{
|
|
71279
|
+
TextFont:{ Family:'微软雅黑' , Size:12 },
|
|
71280
|
+
BorderColor:"rgb(169,169,169)",
|
|
71281
|
+
Offset:{ X:-5, Y:5 },
|
|
71282
|
+
TextColor:"rgb(105,105,105)",
|
|
71283
|
+
AryBGColor:['rgba(255,255,255,0.9)', 'rgba(230, 234, 242,0.9)'],
|
|
71284
|
+
AryArea:
|
|
71285
|
+
[
|
|
71286
|
+
{ Color:"rgba(242,154,118,0.4)", LineColor:"rgb(242,154,118)"},
|
|
71287
|
+
{ Color:"rgba(121,197,228,0.4)", LineColor:"rgb(92,165,196)"},
|
|
71288
|
+
],
|
|
71289
|
+
}
|
|
71290
|
+
|
|
71039
71291
|
//手机端tooltip
|
|
71040
71292
|
this.TooltipPaint = {
|
|
71041
71293
|
BGColor:'rgba(250,250,250,0.8)', //背景色
|
|
@@ -72267,6 +72519,7 @@ function JSChartResource()
|
|
|
72267
72519
|
|
|
72268
72520
|
if (style.ChartSimpleTable) this.SetChartSimpleTable(style.ChartSimpleTable);
|
|
72269
72521
|
if (style.ChartSimplePie) this.SetChartSimplePie(style.ChartSimplePie);
|
|
72522
|
+
if (style.ChartSimpleRadar) this.SetChartSimpleRadar(style.ChartSimpleRadar);
|
|
72270
72523
|
|
|
72271
72524
|
if (style.DRAWICON)
|
|
72272
72525
|
{
|
|
@@ -73360,6 +73613,30 @@ function JSChartResource()
|
|
|
73360
73613
|
}
|
|
73361
73614
|
}
|
|
73362
73615
|
|
|
73616
|
+
this.SetChartSimpleRadar=function(style)
|
|
73617
|
+
{
|
|
73618
|
+
var dest=this.ChartSimpleRadar;
|
|
73619
|
+
if (style.TextFont)
|
|
73620
|
+
{
|
|
73621
|
+
var item=style.TextFont;
|
|
73622
|
+
if (item.Name) dest.TextFont.Name=item.Name;
|
|
73623
|
+
if (IFrameSplitOperator.IsNumber(item.Size)) dest.TextFont.Size=item.Size;
|
|
73624
|
+
}
|
|
73625
|
+
|
|
73626
|
+
if (style.BorderColor) dest.BorderColor=style.BorderColor;
|
|
73627
|
+
if (style.TextColor) dest.TextColor=style.TextColor;
|
|
73628
|
+
|
|
73629
|
+
if (style.Offset)
|
|
73630
|
+
{
|
|
73631
|
+
var item=style.Offset;
|
|
73632
|
+
if (IFrameSplitOperator.IsNumber(item.X)) dest.Offset.X=item.X;
|
|
73633
|
+
if (IFrameSplitOperator.IsNumber(item.Y)) dest.Offset.Y=item.Y;
|
|
73634
|
+
}
|
|
73635
|
+
|
|
73636
|
+
if (IFrameSplitOperator.IsNonEmptyArray(style.AryBGColor)) dest.AryBGColor=style.AryBGColor.slice();
|
|
73637
|
+
if (IFrameSplitOperator.IsNonEmptyArray(style.AryArea)) dest.AryArea=style.AryArea.slice();
|
|
73638
|
+
}
|
|
73639
|
+
|
|
73363
73640
|
}
|
|
73364
73641
|
|
|
73365
73642
|
var g_JSChartResource=new JSChartResource();
|
|
@@ -79973,18 +80250,18 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
79973
80250
|
{
|
|
79974
80251
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
79975
80252
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
79976
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
80253
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio}}, e);
|
|
79977
80254
|
|
|
79978
80255
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
79979
80256
|
if (event)
|
|
79980
80257
|
{
|
|
79981
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
80258
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, Point:{ X:x*pixelTatio, Y:y*pixelTatio}, CursorIndex:this.CursorIndex, };
|
|
79982
80259
|
event.Callback(event,data,this);
|
|
79983
80260
|
}
|
|
79984
80261
|
}
|
|
79985
80262
|
|
|
79986
80263
|
//右键菜单数据
|
|
79987
|
-
this.GetRightMenuData=function(frameID)
|
|
80264
|
+
this.GetRightMenuData=function(frameID, option)
|
|
79988
80265
|
{
|
|
79989
80266
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
79990
80267
|
var klineChart=this.ChartPaint[0];
|
|
@@ -80027,6 +80304,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
80027
80304
|
var bPopMinuteChart=false;
|
|
80028
80305
|
if (this.PopMinuteChart) bPopMinuteChart=true;
|
|
80029
80306
|
|
|
80307
|
+
var kItem=null;
|
|
80308
|
+
if (frameID>=0 && option && IFrameSplitOperator.IsNumber(option.CursorIndex))
|
|
80309
|
+
{
|
|
80310
|
+
var kData=this.GetKData();
|
|
80311
|
+
if (kData && IFrameSplitOperator.IsNonEmptyArray(kData.Data))
|
|
80312
|
+
{
|
|
80313
|
+
var dataIndex=kData.DataOffset+option.CursorIndex;
|
|
80314
|
+
if (dataIndex>=0 && dataIndex<kData.Data.length) kItem=kData.Data[dataIndex];
|
|
80315
|
+
}
|
|
80316
|
+
}
|
|
80317
|
+
|
|
80030
80318
|
var aryMenu=
|
|
80031
80319
|
[
|
|
80032
80320
|
{
|
|
@@ -80309,6 +80597,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
80309
80597
|
}
|
|
80310
80598
|
}
|
|
80311
80599
|
}
|
|
80600
|
+
else if (item.Name=="其他设置")
|
|
80601
|
+
{
|
|
80602
|
+
if (kItem)
|
|
80603
|
+
{
|
|
80604
|
+
var bLocked=this.IsLockCorssCursor();
|
|
80605
|
+
if (bLocked)
|
|
80606
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_UNLOCK_CROSSCURSOR }, Checked:bLocked });
|
|
80607
|
+
else
|
|
80608
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_LOCK_CROSSCURSOR, Args:[{ KItem:{Date:kItem.Date, Time:kItem.Time}, Draw:true }] }, Checked:bLocked });
|
|
80609
|
+
}
|
|
80610
|
+
}
|
|
80312
80611
|
}
|
|
80313
80612
|
|
|
80314
80613
|
return aryMenu;
|
|
@@ -81912,19 +82211,36 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
81912
82211
|
if (option && option.Draw) this.Draw();
|
|
81913
82212
|
}
|
|
81914
82213
|
|
|
82214
|
+
//option={ KItem:{ Date:, Time:}}
|
|
81915
82215
|
this.LockCorssCursor=function(option)
|
|
81916
82216
|
{
|
|
81917
|
-
if (
|
|
81918
|
-
|
|
81919
|
-
|
|
82217
|
+
if (option && option.KItem) //指定日期时间
|
|
82218
|
+
{
|
|
82219
|
+
var kData=this.GetKData();
|
|
82220
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
81920
82221
|
|
|
81921
|
-
|
|
81922
|
-
|
|
81923
|
-
|
|
82222
|
+
var kItem={ Date:option.KItem.Date, Time:option.KItem.Time, Index:-1};
|
|
82223
|
+
kData.FindDataIndexByDateTime([kItem]);
|
|
82224
|
+
if (kItem.Index<0) return false;
|
|
81924
82225
|
|
|
81925
|
-
|
|
81926
|
-
|
|
81927
|
-
|
|
82226
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
82227
|
+
xItem.KLine={ DataIndex:kItem.Index, Date:kItem.Date, Time:kItem.Time };
|
|
82228
|
+
xItem.Enable=true;
|
|
82229
|
+
}
|
|
82230
|
+
else
|
|
82231
|
+
{
|
|
82232
|
+
if (this.CursorIndex<0) return false;
|
|
82233
|
+
var kData=this.GetKData();
|
|
82234
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
82235
|
+
|
|
82236
|
+
var dataIndex=kData.DataOffset+parseInt(this.CursorIndex.toFixed(0));
|
|
82237
|
+
var kItem=kData.Data[dataIndex];
|
|
82238
|
+
if (!kItem) return false;
|
|
82239
|
+
|
|
82240
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
82241
|
+
xItem.KLine={ DataIndex:dataIndex, Date:kItem.Date, Time:kItem.Time };
|
|
82242
|
+
xItem.Enable=true;
|
|
82243
|
+
}
|
|
81928
82244
|
|
|
81929
82245
|
if (option && option.Draw) this.Draw();
|
|
81930
82246
|
return true;
|
|
@@ -81947,7 +82263,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
81947
82263
|
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return position;
|
|
81948
82264
|
|
|
81949
82265
|
position.CursorIndex=xItem.KLine.DataIndex-kData.DataOffset;
|
|
81950
|
-
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex);
|
|
82266
|
+
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex, false);
|
|
81951
82267
|
|
|
81952
82268
|
var border=this.Frame.ChartBorder.GetBorder();
|
|
81953
82269
|
if (position.LastPoint.Y<border.Top || position.LastPoint.Y>border.Bottom) //超出图形框子, 调整为收盘价
|
|
@@ -84020,18 +84336,18 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
84020
84336
|
{
|
|
84021
84337
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
84022
84338
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
84023
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
84339
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} }, e);
|
|
84024
84340
|
|
|
84025
84341
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
84026
84342
|
if (event)
|
|
84027
84343
|
{
|
|
84028
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
84344
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} };
|
|
84029
84345
|
event.Callback(event,data,this);
|
|
84030
84346
|
}
|
|
84031
84347
|
}
|
|
84032
84348
|
|
|
84033
84349
|
//右键菜单数据
|
|
84034
|
-
this.GetRightMenuData=function(frameID)
|
|
84350
|
+
this.GetRightMenuData=function(frameID, option)
|
|
84035
84351
|
{
|
|
84036
84352
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
84037
84353
|
|
|
@@ -84158,11 +84474,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
84158
84474
|
}
|
|
84159
84475
|
|
|
84160
84476
|
|
|
84161
|
-
|
|
84477
|
+
|
|
84162
84478
|
for(var i=0;i<aryMenu.length;++i)
|
|
84163
84479
|
{
|
|
84164
84480
|
var item=aryMenu[i];
|
|
84165
|
-
if (item.Name=="叠加品种")
|
|
84481
|
+
if (item.Name=="叠加品种") //删除菜单
|
|
84166
84482
|
{
|
|
84167
84483
|
for(var j=0;j<item.SubMenu.length;++j)
|
|
84168
84484
|
{
|
|
@@ -84174,6 +84490,10 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
84174
84490
|
}
|
|
84175
84491
|
}
|
|
84176
84492
|
}
|
|
84493
|
+
else if (item.Name=="其他设置")
|
|
84494
|
+
{
|
|
84495
|
+
|
|
84496
|
+
}
|
|
84177
84497
|
}
|
|
84178
84498
|
|
|
84179
84499
|
return aryMenu;
|