hqchart 1.1.15382 → 1.1.15428

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.
@@ -17,17 +17,17 @@ function JSTReportChart(divElement)
17
17
  this.JSChartContainer; //表格控件
18
18
  this.ResizeListener; //大小变动监听
19
19
 
20
- //h5 canvas
21
- this.CanvasElement=document.createElement("canvas");
22
- this.CanvasElement.className='jstreport-drawing';
23
- this.CanvasElement.id=Guid();
24
- this.CanvasElement.setAttribute("tabindex",0);
25
- if (this.CanvasElement.style) this.CanvasElement.style.outline='none';
26
- if(divElement.hasChildNodes())
27
- {
28
- JSConsole.Chart.Log("[JSTReportChart::JSReportChart] divElement hasChildNodes", divElement.childNodes);
29
- }
30
- divElement.appendChild(this.CanvasElement);
20
+ //h5 canvas
21
+ this.CanvasElement=document.createElement("canvas");
22
+ this.CanvasElement.className='jstreport-drawing';
23
+ this.CanvasElement.id=Guid();
24
+ this.CanvasElement.setAttribute("tabindex",0);
25
+ if (this.CanvasElement.style) this.CanvasElement.style.outline='none';
26
+ if(divElement.hasChildNodes())
27
+ {
28
+ JSConsole.Chart.Log("[JSTReportChart::JSReportChart] divElement hasChildNodes", divElement.childNodes);
29
+ }
30
+ divElement.appendChild(this.CanvasElement);
31
31
 
32
32
 
33
33
  this.OnSize=function()
@@ -441,6 +441,24 @@ JSComplierHelper.GetConvertValueName=function(funcName)
441
441
 
442
442
  return valueName;
443
443
  }
444
+
445
+
446
+ //DYNAINFO() 转换
447
+ //["DYNA_NOW",null], //DYNA_NOW 现价 DYNAINFO(7) 即时行情数据 没有现价时(比如在开盘前),返回昨收盘价
448
+ //["DYNA_ZAF",null], //DYNA_ZAF 涨幅 DYNAINFO(14) 即时行情数据(沪深京早盘竞价期间使用匹配价的涨幅) 转换成幅度需要乘100
449
+ //["DYNA_LB", null], //DYNA_LB DYNAINFO(17) 量比 即时行情数据
450
+ //["DYNA_ZAS",null], //DYNA_ZAS DYNAINFO(24) 返回涨速 报价界面行情数据 转换成幅度需要乘100
451
+ //["SELLVOL", null], //返回内盘,即DYNAINFO(22) 即时行情数据
452
+ //["BUYVOL", null], //返回外盘,即DYNAINFO(21) 即时行情数据
453
+ const MAP_DYNAINFO_SHORTCUT=new Map(
454
+ [
455
+ ['DYNA_NOW', { Name:"DYNA_NOW", ID:7 } ],
456
+ ['DYNA_LB', { Name:"DYNA_LB", ID:17 } ],
457
+ ['DYNA_ZAS', { Name:"DYNA_ZAS", ID:24 } ],
458
+ ['SELLVOL', { Name:"SELLVOL", ID:22 }],
459
+ ['BUYVOL', { Name:"BUYVOL", ID:21 } ],
460
+ ]
461
+ );
444
462
 
445
463
 
446
464
 
@@ -1380,6 +1398,14 @@ function Node(ErrorHandler)
1380
1398
  return;
1381
1399
  }
1382
1400
 
1401
+ if (MAP_DYNAINFO_SHORTCUT.has(varName))
1402
+ {
1403
+ var item=MAP_DYNAINFO_SHORTCUT.get(varName);
1404
+ var item={ ID:JS_EXECUTE_JOB_ID.JOB_DOWNLOAD_SYMBOL_LATEST_DATA, Args:[item.ID], FunctionName:varName };
1405
+ this.Dynainfo.push(item);
1406
+ return;
1407
+ }
1408
+
1383
1409
  if (varName.indexOf('#')>0)
1384
1410
  {
1385
1411
  var aryWrods = varName.split('#');
@@ -12135,8 +12161,10 @@ var DYNAINFO_ARGUMENT_ID=
12135
12161
  CLOSE:7,
12136
12162
  VOL:8,
12137
12163
  AMOUNT:10,
12164
+ UPDOWN:12, //DYNAINFO(12) 日涨跌 即时行情数据
12138
12165
  AMPLITUDE:13, //振幅
12139
12166
  INCREASE:14, //涨幅
12167
+
12140
12168
  EXCHANGERATE:37, //换手率
12141
12169
  };
12142
12170
 
@@ -12315,16 +12343,18 @@ function JSSymbolData(ast,option,jsExecute)
12315
12343
  let stock=data.stock[0];
12316
12344
  if (!stock) return;
12317
12345
 
12318
- if (IFrameSplitOperator.IsNumber(stock.yclose)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.YCLOSE,stock.yclose);
12319
- if (IFrameSplitOperator.IsNumber(stock.open)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.OPEN,stock.open);
12320
- if (IFrameSplitOperator.IsNumber(stock.high)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.HIGH,stock.high);
12321
- if (IFrameSplitOperator.IsNumber(stock.low)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.LOW,stock.low);
12322
- if (IFrameSplitOperator.IsNumber(stock.price)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.CLOSE,stock.price);
12323
- if (IFrameSplitOperator.IsNumber(stock.vol)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.VOL,stock.vol);
12324
- if (IFrameSplitOperator.IsNumber(stock.amount)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.AMOUNT,stock.amount);
12325
- if (IFrameSplitOperator.IsNumber(stock.increase)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.INCREASE,stock.increase);
12326
- if (IFrameSplitOperator.IsNumber(stock.exchangerate)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.EXCHANGERATE,stock.exchangerate);
12327
- if (IFrameSplitOperator.IsNumber(stock.amplitude)) this.LatestData.set(DYNAINFO_ARGUMENT_ID.AMPLITUDE,stock.amplitude);
12346
+ if (IFrameSplitOperator.IsNumber(stock.yclose)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.YCLOSE),stock.yclose);
12347
+ if (IFrameSplitOperator.IsNumber(stock.open)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.OPEN),stock.open);
12348
+ if (IFrameSplitOperator.IsNumber(stock.high)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.HIGH),stock.high);
12349
+ if (IFrameSplitOperator.IsNumber(stock.low)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.LOW),stock.low);
12350
+ if (IFrameSplitOperator.IsNumber(stock.price)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.CLOSE),stock.price);
12351
+ if (IFrameSplitOperator.IsNumber(stock.vol)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.VOL),stock.vol);
12352
+ if (IFrameSplitOperator.IsNumber(stock.amount)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.AMOUNT),stock.amount);
12353
+ if (IFrameSplitOperator.IsNumber(stock.increase)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.INCREASE),stock.increase);
12354
+ if (IFrameSplitOperator.IsNumber(stock.exchangerate)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.EXCHANGERATE),stock.exchangerate);
12355
+ if (IFrameSplitOperator.IsNumber(stock.amplitude)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.AMPLITUDE),stock.amplitude);
12356
+ if (IFrameSplitOperator.IsNumber(stock.updown)) this.LatestData.set(this.GetLatestDataKey(DYNAINFO_ARGUMENT_ID.UPDOWN),stock.updown);
12357
+
12328
12358
 
12329
12359
  /*
12330
12360
  this.LatestData={ Symbol:stock.symbol, Name:stock.name, Date:stock.date, Time:stock.time,
@@ -12349,7 +12379,7 @@ function JSSymbolData(ast,option,jsExecute)
12349
12379
  if (IFrameSplitOperator.IsNumber(item.value) || IFrameSplitOperator.IsString(item.value))
12350
12380
  {
12351
12381
  JSConsole.Complier.Log(`[JSSymbolData::RecvLatestDataVer2] symbol=${symbol} DYNAINFO(${item.id})=${item.value}.`);
12352
- this.LatestData.set(item.id, item.value);
12382
+ this.LatestData.set(this.GetLatestDataKey(item.id), item.value);
12353
12383
  }
12354
12384
 
12355
12385
  }
@@ -12357,11 +12387,50 @@ function JSSymbolData(ast,option,jsExecute)
12357
12387
  JSConsole.Complier.Log('[JSSymbolData::RecvLatestDataVer2]', this.LatestData);
12358
12388
  }
12359
12389
 
12360
- this.GetLatestCacheData=function(dataname)
12390
+ this.GetLatestCacheData=function(dataID)
12361
12391
  {
12362
- if (this.LatestData.has(dataname)) return this.LatestData.get(dataname);
12392
+ var key=this.GetLatestDataKey(dataID);
12393
+ if (!this.LatestData.has(key)) return null;
12363
12394
 
12364
- return null;
12395
+ var data=this.LatestData.get(key);
12396
+
12397
+ //DYNAINFO(36) 自由流通换手率(序列数据,每个周期的数据不同,使用最新的自由流通股本) 转换成幅度需要乘100 比如DYNAINFO(36)>0.25表示换手超过25%
12398
+ //DYNAINFO(37) 换手率(序列数据,每个周期的数据不同,使用的流通股本为最近数据) 转换成幅度需要乘100 比如DYNAINFO(37)>0.1表示换手超过10%
12399
+ if (dataID==37 || dataID==36)
12400
+ {
12401
+ var value=null;
12402
+ if (IFrameSplitOperator.IsNumber(data)) value=data;
12403
+ else if (IFrameSplitOperator.IsNonEmptyArray(data) && IFrameSplitOperator.IsNumber(data[0])) value=data[0];
12404
+ else return null;
12405
+
12406
+ if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return null;
12407
+
12408
+ var aryData=[];
12409
+ for(var i=0;i<this.Data.Data.length;++i)
12410
+ {
12411
+ var kItem=this.Data.Data[i];
12412
+ aryData[i]=null;
12413
+ if (!kItem || !IFrameSplitOperator.IsNumber(kItem.Vol)) continue;
12414
+
12415
+ aryData[i]=kItem.Vol/value*100.0;// 换手率
12416
+ }
12417
+
12418
+ return aryData;
12419
+ }
12420
+
12421
+
12422
+ return data;
12423
+ }
12424
+
12425
+ this.GetDynaCacheData=function(name)
12426
+ {
12427
+ var data=null;
12428
+ if (MAP_DYNAINFO_SHORTCUT.has(name))
12429
+ {
12430
+ var item=MAP_DYNAINFO_SHORTCUT.get(name);
12431
+ data=this.GetLatestCacheData(item.ID);
12432
+ }
12433
+ return data;
12365
12434
  }
12366
12435
 
12367
12436
  this.GetLatestIndexData=function()
@@ -13437,12 +13506,7 @@ function JSSymbolData(ast,option,jsExecute)
13437
13506
  { Url:self.RealtimeApiUrl, Type:'POST' ,
13438
13507
  Data:
13439
13508
  {
13440
- "field": [ "name", "symbol","yclose","open","price","high","low","vol"],
13441
- "symbol": self.Symbol,
13442
- "start": -1,
13443
- "count": self.MaxRequestDataCount,
13444
- "period":this.Period,
13445
- "right":this.Right
13509
+ symbol: self.Symbol,count: self.MaxRequestDataCount, period:this.Period,right:this.Right
13446
13510
  }
13447
13511
  },
13448
13512
  Self:this,
@@ -13454,6 +13518,7 @@ function JSSymbolData(ast,option,jsExecute)
13454
13518
  obj.Request.KLineDataTimeRange={Start:{ Date:this.KLineDateTimeRange.Start.Date}, End:{ Date:this.KLineDateTimeRange.End.Date} };
13455
13519
  if (this.IsNumber(this.KLineDateTimeRange.Start.Time)) obj.Request.KLineDataTimeRange.Start.Time=this.KLineDateTimeRange.Start.Time;
13456
13520
  if (this.IsNumber(this.KLineDateTimeRange.End.Time)) obj.Request.KLineDataTimeRange.End.Time=this.KLineDateTimeRange.End.Time;
13521
+ obj.Request.Data.dateRange=obj.Request.KLineDataTimeRange;
13457
13522
  }
13458
13523
 
13459
13524
  this.NetworkFilter(obj, function(data)
@@ -15815,13 +15880,14 @@ function JSSymbolData(ast,option,jsExecute)
15815
15880
  if (readArgument.Value=='') readArgument.Value=this.Symbol; //缺省使用股票代码
15816
15881
 
15817
15882
  var symbol=readArgument.Value;
15883
+ var upperSymbol=symbol.toUpperCase();
15818
15884
 
15819
15885
  //支持 SH60000, SZ000001
15820
15886
  //A股后缀小写
15821
- if (symbol.indexOf('.SH')>0) result.Symbol=symbol.replace('.SH', ".sh");
15822
- else if (symbol.indexOf('.SZ')>0) result.Symbol=symbol.replace('.SZ', ".sz");
15823
- else if (symbol.indexOf("SH")==0) result.Symbol=symbol.slice(2)+".sh";
15824
- else if (symbol.indexOf("SZ")==0) result.Symbol=symbol.slice(2)+".sz";
15887
+ if (upperSymbol.indexOf('.SH')>0) result.Symbol=symbol.replace('.SH', ".sh");
15888
+ else if (upperSymbol.indexOf('.SZ')>0) result.Symbol=symbol.replace('.SZ', ".sz");
15889
+ else if (upperSymbol.indexOf("SH")==0) result.Symbol=symbol.slice(2)+".sh";
15890
+ else if (upperSymbol.indexOf("SZ")==0) result.Symbol=symbol.slice(2)+".sz";
15825
15891
  else result.Symbol=symbol;
15826
15892
 
15827
15893
  return true;
@@ -17346,6 +17412,13 @@ function JSExecute(ast,option)
17346
17412
  ["TR", null], //真实波幅
17347
17413
  ["AUTOFILTER", null],
17348
17414
 
17415
+ ["DYNA_NOW",null], //DYNA_NOW 现价 DYNAINFO(7) 即时行情数据 没有现价时(比如在开盘前),返回昨收盘价
17416
+ ["DYNA_ZAF",null], //DYNA_ZAF 涨幅 DYNAINFO(14) 即时行情数据(沪深京早盘竞价期间使用匹配价的涨幅) 转换成幅度需要乘100
17417
+ ["DYNA_LB", null], //DYNA_LB DYNAINFO(17) 量比 即时行情数据
17418
+ ["DYNA_ZAS",null], //DYNA_ZAS DYNAINFO(24) 返回涨速 报价界面行情数据 转换成幅度需要乘100
17419
+ ["SELLVOL", null], //返回内盘,即DYNAINFO(22) 即时行情数据
17420
+ ["BUYVOL", null], //返回外盘,即DYNAINFO(21) 即时行情数据
17421
+
17349
17422
  ['LARGEINTRDVOL', null], //逐笔买入大单成交量,相当于L2_VOL(0,0)+L2_VOL(1,0),沪深京品种的资金流向,仅日线以上周期,用于特定版本
17350
17423
  ['LARGEOUTTRDVOL', null], //逐笔卖出大单成交量,相当于L2_VOL(0,1)+L2_VOL(1,1),沪深京品种的资金流向,仅日线以上周期,用于特定版本
17351
17424
  ["TRADENUM", null], //逐笔成交总单数,沪深京品种的资金流向,仅日线以上周期,用于特定版本
@@ -17510,6 +17583,8 @@ function JSExecute(ast,option)
17510
17583
 
17511
17584
  this.ReadSymbolData=function(name,node)
17512
17585
  {
17586
+ if (MAP_DYNAINFO_SHORTCUT.has(name)) return this.SymbolData.GetDynaCacheData(name);
17587
+
17513
17588
  switch(name)
17514
17589
  {
17515
17590
  case 'CLOSE':
@@ -17577,7 +17652,6 @@ function JSExecute(ast,option)
17577
17652
  case 'CAPITAL':
17578
17653
  case 'EXCHANGE':
17579
17654
  case "HSL":
17580
-
17581
17655
  case "HYBLOCK":
17582
17656
  case "DYBLOCK":
17583
17657
  case "GNBLOCK":
@@ -27036,8 +27110,8 @@ function DownloadFinanceData(obj)
27036
27110
  {
27037
27111
  case 1: //FINANCE(1) 总股本(随时间可能有变化) 股
27038
27112
  case 7: //FINANCE(7) 流通股本(随时间可能有变化) 股
27039
- case "EXCHANGE": //换手率
27040
27113
  case "HSL"://换手率
27114
+ case "EXCHANGE": //换手率
27041
27115
  this.DownloadHistoryData(id);
27042
27116
  break;
27043
27117
  case 3:
@@ -27298,7 +27372,7 @@ function DownloadFinanceData(obj)
27298
27372
  if (!item.capital) return null;
27299
27373
  return { Date:date, Value:item.capital.total };
27300
27374
  case 7:
27301
- case "HSL": //换手率
27375
+ case "HSL":
27302
27376
  case "EXCHANGE": //换手率 历史流通股本
27303
27377
  if (!item.capital) return null;
27304
27378
  return { Date:date, Value:item.capital.a };
@@ -33,9 +33,18 @@ function JSDealChart(divElement)
33
33
  this.OnSize=function()
34
34
  {
35
35
  //画布大小通过div获取
36
- var height=parseInt(this.DivElement.style.height.replace("px",""));
36
+ var height=this.DivElement.offsetHeight;
37
+ var width=this.DivElement.offsetWidth;
38
+ if (this.DivElement.style.height && this.DivElement.style.width)
39
+ {
40
+ if (this.DivElement.style.height.includes("px"))
41
+ height=parseInt(this.DivElement.style.height.replace("px",""));
42
+ if (this.DivElement.style.width.includes("px"))
43
+ width=parseInt(this.DivElement.style.width.replace("px",""));
44
+ }
45
+
37
46
  this.CanvasElement.height=height;
38
- this.CanvasElement.width=parseInt(this.DivElement.style.width.replace("px",""));
47
+ this.CanvasElement.width=width;
39
48
  this.CanvasElement.style.width=this.CanvasElement.width+'px';
40
49
  this.CanvasElement.style.height=this.CanvasElement.height+'px';
41
50
 
@@ -500,8 +509,8 @@ function JSDealChartContainer(uielement)
500
509
  this.ChangeSymbol=function(symbol, option)
501
510
  {
502
511
  this.Symbol=symbol;
503
- this.Data=null;
504
- this.SourceData=null;
512
+ this.Data={ DataOffset:0, Data:[] }; //分笔数据
513
+ this.SourceData={DataOffset:0, Data:[] }; //原始分笔数据
505
514
 
506
515
  var chart=this.ChartPaint[0];
507
516
  if (chart) chart.Data=null;
@@ -1148,17 +1157,23 @@ JSDealChartContainer.JsonDataToDealData=function(data)
1148
1157
 
1149
1158
  if (item[100]) dealItem.Guid=item[100];
1150
1159
 
1151
- //10个数值型 101-199
1152
- if (IFrameSplitOperator.IsNumber(item[101])) dealItem.ReserveNumber1=item[101];
1153
- if (IFrameSplitOperator.IsNumber(item[102])) dealItem.ReserveNumber2=item[102];
1154
- if (IFrameSplitOperator.IsNumber(item[103])) dealItem.ReserveNumber3=item[103];
1155
- if (IFrameSplitOperator.IsNumber(item[104])) dealItem.ReserveNumber4=item[104];
1156
- if (IFrameSplitOperator.IsNumber(item[105])) dealItem.ReserveNumber5=item[105];
1157
- if (IFrameSplitOperator.IsNumber(item[106])) dealItem.ReserveNumber6=item[106];
1158
- if (IFrameSplitOperator.IsNumber(item[107])) dealItem.ReserveNumber7=item[107];
1159
- if (IFrameSplitOperator.IsNumber(item[108])) dealItem.ReserveNumber8=item[108];
1160
- if (IFrameSplitOperator.IsNumber(item[109])) dealItem.ReserveNumber9=item[109];
1161
- if (IFrameSplitOperator.IsNumber(item[110])) dealItem.ReserveNumber10=item[110];
1160
+ //柱子类型
1161
+ if (item[50]) dealItem.MultiBar1=item[50];
1162
+ if (item[51]) dealItem.MultiBar2=item[51];
1163
+ if (item[52]) dealItem.MultiBar3=item[52];
1164
+ if (item[53]) dealItem.MultiBar4=item[53];
1165
+
1166
+ //10个数值型 101-199
1167
+ if (IFrameSplitOperator.IsNumber(item[101])) dealItem.ReserveNumber1=item[101];
1168
+ if (IFrameSplitOperator.IsNumber(item[102])) dealItem.ReserveNumber2=item[102];
1169
+ if (IFrameSplitOperator.IsNumber(item[103])) dealItem.ReserveNumber3=item[103];
1170
+ if (IFrameSplitOperator.IsNumber(item[104])) dealItem.ReserveNumber4=item[104];
1171
+ if (IFrameSplitOperator.IsNumber(item[105])) dealItem.ReserveNumber5=item[105];
1172
+ if (IFrameSplitOperator.IsNumber(item[106])) dealItem.ReserveNumber6=item[106];
1173
+ if (IFrameSplitOperator.IsNumber(item[107])) dealItem.ReserveNumber7=item[107];
1174
+ if (IFrameSplitOperator.IsNumber(item[108])) dealItem.ReserveNumber8=item[108];
1175
+ if (IFrameSplitOperator.IsNumber(item[109])) dealItem.ReserveNumber9=item[109];
1176
+ if (IFrameSplitOperator.IsNumber(item[110])) dealItem.ReserveNumber10=item[110];
1162
1177
 
1163
1178
  //10个字符型 201-299
1164
1179
  if (IFrameSplitOperator.IsString(item[201]) || IFrameSplitOperator.IsObject(item[201])) dealItem.ReserveString1=item[201];
@@ -1269,13 +1284,14 @@ var DEAL_COLUMN_ID=
1269
1284
  UPDOWN_ID:5, //涨跌
1270
1285
  STRING_TIME_ID:6, //字符串时间
1271
1286
  INDEX_ID:7, //序号 从1开始
1272
- MULTI_BAR_ID:8, //多颜色柱子
1287
+
1273
1288
  CENTER_BAR_ID:9, //中心柱子
1274
1289
  CUSTOM_TEXT_ID:10, //自定义文本
1275
1290
 
1276
1291
  SYMBOL_ID:11, //股票代码
1277
1292
  NAME_ID:12, //股票名称
1278
1293
 
1294
+
1279
1295
 
1280
1296
  //预留数值类型 10个
1281
1297
  RESERVE_NUMBER1_ID:201, //ReserveNumber1:
@@ -1300,6 +1316,11 @@ var DEAL_COLUMN_ID=
1300
1316
  RESERVE_STRING8_ID:308,
1301
1317
  RESERVE_STRING9_ID:309,
1302
1318
  RESERVE_STRING10_ID:310,
1319
+
1320
+ MULTI_BAR_ID:50, //多颜色柱子
1321
+ MULTI_BAR2_ID:51,
1322
+ MULTI_BAR3_ID:52,
1323
+ MULTI_BAR4_ID:53
1303
1324
  }
1304
1325
 
1305
1326
  var MAP_DEAL_COLUMN_FIELD=new Map(
@@ -1308,6 +1329,11 @@ var MAP_DEAL_COLUMN_FIELD=new Map(
1308
1329
  [DEAL_COLUMN_ID.NAME_ID, "Name"],
1309
1330
  [DEAL_COLUMN_ID.PRICE_ID, "Price"],
1310
1331
 
1332
+ [DEAL_COLUMN_ID.MULTI_BAR_ID, "MultiBar1"],
1333
+ [DEAL_COLUMN_ID.MULTI_BAR2_ID, "MultiBar2"],
1334
+ [DEAL_COLUMN_ID.MULTI_BAR3_ID, "MultiBar3"],
1335
+ [DEAL_COLUMN_ID.MULTI_BAR4_ID, "MultiBar4"],
1336
+
1311
1337
  [DEAL_COLUMN_ID.RESERVE_NUMBER1_ID,"ReserveNumber1"],
1312
1338
  [DEAL_COLUMN_ID.RESERVE_NUMBER2_ID,"ReserveNumber2"],
1313
1339
  [DEAL_COLUMN_ID.RESERVE_NUMBER3_ID,"ReserveNumber3"],
@@ -1464,7 +1490,7 @@ function ChartDealList()
1464
1490
 
1465
1491
  if (item.ChartTooltip) colItem.ChartTooltip={ Enable:item.ChartTooltip.Enable, Type:item.ChartTooltip.Type }; //图形提示信息
1466
1492
 
1467
- if (item.Type==DEAL_COLUMN_ID.MULTI_BAR_ID || item.Type==DEAL_COLUMN_ID.CENTER_BAR_ID)
1493
+ if (item.Type==DEAL_COLUMN_ID.CENTER_BAR_ID)
1468
1494
  {
1469
1495
  if (!IFrameSplitOperator.IsNumber(item.DataIndex)) continue;
1470
1496
  colItem.DataIndex=item.DataIndex; //柱子数据所在原始数据索引列
@@ -1477,6 +1503,8 @@ function ChartDealList()
1477
1503
  {
1478
1504
  if (item.Format) colItem.Format=item.Format; //数据格式化设置{ Type:1=原始 2=千分位分割 3=万亿转换, ExFloatPrecision:万亿转换以后的小数位数 }
1479
1505
  if (IFrameSplitOperator.IsNumber(item.ColorType)) colItem.ColorType=item.ColorType; //0=默认 1=(>0, =0, <0) 2=(>=0, <0)
1506
+ if (IFrameSplitOperator.IsNumber(item.FloatPrecision)) colItem.FloatPrecision=item.FloatPrecision;
1507
+ if (item.StringFormat) colItem.StringFormat=item.StringFormat; //"{0}%" 输出增加固定字符
1480
1508
  }
1481
1509
 
1482
1510
  this.Column.push(colItem);
@@ -1496,7 +1524,7 @@ function ChartDealList()
1496
1524
  { Type:DEAL_COLUMN_ID.STRING_TIME_ID, Title:"时间", TextAlign:"center", Width:null, TextColor:g_JSChartResource.DealList.FieldColor.Time, MaxText:"88:88:88" },
1497
1525
  { Type:DEAL_COLUMN_ID.INDEX_ID, Title:"序号", TextAlign:"center", Width:null, TextColor:g_JSChartResource.DealList.FieldColor.Index, MaxText:"88888" },
1498
1526
 
1499
- { Type:DEAL_COLUMN_ID.MULTI_BAR_ID, Title:"柱子", TextAlign:"center", Width:null, TextColor:g_JSChartResource.DealList.FieldColor.BarTitle, MaxText:"888888" },
1527
+
1500
1528
  { Type:DEAL_COLUMN_ID.CENTER_BAR_ID, Title:"柱子2", TextAlign:"center", Width:null, TextColor:g_JSChartResource.DealList.FieldColor.BarTitle, MaxText:"888888" },
1501
1529
  { Type:DEAL_COLUMN_ID.CUSTOM_TEXT_ID, Title:"自定义", TextAlign:"center", Width:null, TextColor:g_JSChartResource.DealList.FieldColor.Text, MaxText:"擎擎擎擎擎" },
1502
1530
 
@@ -1524,6 +1552,11 @@ function ChartDealList()
1524
1552
  { Type:DEAL_COLUMN_ID.RESERVE_STRING8_ID, Title:"文字8", TextAlign:"right", TextColor:g_JSChartResource.Report.FieldColor.Text, MaxText:"擎擎擎擎擎擎" },
1525
1553
  { Type:DEAL_COLUMN_ID.RESERVE_STRING9_ID, Title:"文字9", TextAlign:"right", TextColor:g_JSChartResource.Report.FieldColor.Text, MaxText:"擎擎擎擎擎擎" },
1526
1554
  { Type:DEAL_COLUMN_ID.RESERVE_STRING10_ID, Title:"文字10", TextAlign:"right", TextColor:g_JSChartResource.Report.FieldColor.Text, MaxText:"擎擎擎擎擎擎" },
1555
+
1556
+ { Type:DEAL_COLUMN_ID.MULTI_BAR_ID, Title:"柱子", TextAlign:"center", Width:null, TextColor:g_JSChartResource.DealList.FieldColor.BarTitle, MaxText:"888888" },
1557
+ { Type:DEAL_COLUMN_ID.MULTI_BAR2_ID, Title:"柱子2", TextAlign:"center", Width:null, TextColor:g_JSChartResource.DealList.FieldColor.BarTitle, MaxText:"888888" },
1558
+ { Type:DEAL_COLUMN_ID.MULTI_BAR3_ID, Title:"柱子3", TextAlign:"center", Width:null, TextColor:g_JSChartResource.DealList.FieldColor.BarTitle, MaxText:"888888" },
1559
+ { Type:DEAL_COLUMN_ID.MULTI_BAR4_ID, Title:"柱子4", TextAlign:"center", Width:null, TextColor:g_JSChartResource.DealList.FieldColor.BarTitle, MaxText:"888888" },
1527
1560
 
1528
1561
  ];
1529
1562
 
@@ -1864,7 +1897,7 @@ function ChartDealList()
1864
1897
  {
1865
1898
  text=(dataIndex+1).toString();
1866
1899
  }
1867
- else if (item.Type==DEAL_COLUMN_ID.MULTI_BAR_ID)
1900
+ else if (this.IsMulitBar(item.Type))
1868
1901
  {
1869
1902
  var rtItem={Left:left, Top:top, Width:itemWidth, Height:this.RowHeight};
1870
1903
  this.DrawMultiBar(item, data, rtItem);
@@ -1965,6 +1998,11 @@ function ChartDealList()
1965
1998
  break;
1966
1999
  }
1967
2000
  }
2001
+
2002
+ if (column.StringFormat && text)
2003
+ {
2004
+ text=column.StringFormat.replace("{0}", text);
2005
+ }
1968
2006
 
1969
2007
  drawInfo.Text=text;
1970
2008
  }
@@ -2086,8 +2124,10 @@ function ChartDealList()
2086
2124
 
2087
2125
  this.DrawMultiBar=function(colunmInfo, data, rtItem)
2088
2126
  {
2089
- if (!data.Source || !IFrameSplitOperator.IsNonEmptyArray(data.Source)) return false;
2090
- var barData=data.Source[colunmInfo.DataIndex]; //{ Value:[0.4,0,2], Color:[0,1] };
2127
+ var fieldName=MAP_DEAL_COLUMN_FIELD.get(colunmInfo.Type);
2128
+ if (!data || !fieldName) return;
2129
+
2130
+ var barData=data[fieldName]; //{ Value:[0.4,0,2], Color:[0,1] };
2091
2131
  if (!barData) return false;
2092
2132
  if (!IFrameSplitOperator.IsNonEmptyArray(barData.Value)) return false;
2093
2133
 
@@ -2275,6 +2315,16 @@ function ChartDealList()
2275
2315
  return ARARY_TYPE.includes(value);
2276
2316
  }
2277
2317
 
2318
+ this.IsMulitBar=function(value)
2319
+ {
2320
+ var ARARY_TYPE=
2321
+ [
2322
+ DEAL_COLUMN_ID.MULTI_BAR_ID,DEAL_COLUMN_ID.MULTI_BAR2_ID,DEAL_COLUMN_ID.MULTI_BAR3_ID,DEAL_COLUMN_ID.MULTI_BAR4_ID,
2323
+ ];
2324
+
2325
+ return ARARY_TYPE.includes(value);
2326
+ }
2327
+
2278
2328
  this.IsReserveNumber=function(value)
2279
2329
  {
2280
2330
  var ARARY_TYPE=