hqchart 1.1.12687 → 1.1.12706

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.
Files changed (228) hide show
  1. package/lib/umychart.vue.js +94 -50
  2. package/package.json +15 -47
  3. package/src/jscommon/umychart.resource/js/codemirror/javascript.js +1 -1
  4. package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +409 -115
  5. package/src/jscommon/umychart.vue/umychart.vue.js +409 -115
  6. package/.babelrc +0 -6
  7. package/.vscode/settings.json +0 -4
  8. package/Makefile +0 -9
  9. package/README.md +0 -452
  10. package/index.js +0 -17
  11. package/postcss.config.js +0 -5
  12. package/src/index.html +0 -18
  13. package/src/jscommon/backup/announcement.png +0 -0
  14. package/src/jscommon/backup/announcement2.png +0 -0
  15. package/src/jscommon/backup/blocktrading.png +0 -0
  16. package/src/jscommon/backup/investor.png +0 -0
  17. package/src/jscommon/backup/pforecast.png +0 -0
  18. package/src/jscommon/backup/research.png +0 -0
  19. package/src/jscommon/backup/tradedetail.png +0 -0
  20. package/src/jscommon/backup/umychart - backup.js +0 -17631
  21. package/src/jscommon/backup/umychart.macro.js +0 -4
  22. package/src/jscommon/backup/umychart.macro.vue.js +0 -3
  23. package/src/jscommon/commonindextree.json +0 -92
  24. package/src/jscommon/index.html +0 -13
  25. package/src/jscommon/jschinamapdata.js +0 -3
  26. package/src/jscommon/umychart.NetworkFilterTest.js +0 -48803
  27. package/src/jscommon/umychart.aliYunnetwork.js +0 -47
  28. package/src/jscommon/umychart.cninfo.components/readme.txt +0 -1
  29. package/src/jscommon/umychart.complier.js +0 -25291
  30. package/src/jscommon/umychart.complier.node/umychart.complier.controller.js +0 -559
  31. package/src/jscommon/umychart.complier.node/umychart.complier.node.js +0 -7043
  32. package/src/jscommon/umychart.complier.node/umychart.data.node.js +0 -816
  33. package/src/jscommon/umychart.console.js +0 -12
  34. package/src/jscommon/umychart.deal.js +0 -1452
  35. package/src/jscommon/umychart.dragdiv.js +0 -48
  36. package/src/jscommon/umychart.index.data.js +0 -4132
  37. package/src/jscommon/umychart.js +0 -90257
  38. package/src/jscommon/umychart.keyboard.js +0 -1659
  39. package/src/jscommon/umychart.listctrl.js +0 -690
  40. package/src/jscommon/umychart.mind.js +0 -2203
  41. package/src/jscommon/umychart.network.js +0 -44
  42. package/src/jscommon/umychart.news.js +0 -823
  43. package/src/jscommon/umychart.node.build/buildall.bat +0 -1
  44. package/src/jscommon/umychart.node.build/umychart.node.bat +0 -1
  45. package/src/jscommon/umychart.node.build/umychart.node.export.js +0 -40
  46. package/src/jscommon/umychart.regressiontest.js +0 -400
  47. package/src/jscommon/umychart.report.js +0 -5803
  48. package/src/jscommon/umychart.scrollbar.js +0 -1345
  49. package/src/jscommon/umychart.stock.js +0 -4218
  50. package/src/jscommon/umychart.style.js +0 -618
  51. package/src/jscommon/umychart.testdata.js +0 -150
  52. package/src/jscommon/umychart.uniapp.build/buildall.bat +0 -1
  53. package/src/jscommon/umychart.uniapp.build/umychart.bat +0 -1
  54. package/src/jscommon/umychart.uniapp.build/umychart.export.js +0 -70
  55. package/src/jscommon/umychart.user.js +0 -137
  56. package/src/jscommon/umychart.version.js +0 -30
  57. package/src/jscommon/umychart.vue/umychart.aliYunnetwork.vue.js +0 -56
  58. package/src/jscommon/umychart.vue.build/buildall.bat +0 -4
  59. package/src/jscommon/umychart.vue.build/copy_codemirror.bat +0 -2
  60. package/src/jscommon/umychart.vue.build/umychart.aliYunnetwork.vue.export.js +0 -9
  61. package/src/jscommon/umychart.vue.build/umychart.dragdiv.bat +0 -1
  62. package/src/jscommon/umychart.vue.build/umychart.dragdiv.export.js +0 -6
  63. package/src/jscommon/umychart.vue.build/umychart.index.data.bat +0 -1
  64. package/src/jscommon/umychart.vue.build/umychart.index.data.export.js +0 -4
  65. package/src/jscommon/umychart.vue.build/umychart.listctrl.vue.export.js +0 -15
  66. package/src/jscommon/umychart.vue.build/umychart.regressiontest.vue.export.js +0 -7
  67. package/src/jscommon/umychart.vue.build/umychart.regressiontest.wechat.export.js +0 -12
  68. package/src/jscommon/umychart.vue.build/umychart.stock.bat +0 -1
  69. package/src/jscommon/umychart.vue.build/umychart.stock.vue.export.js +0 -16
  70. package/src/jscommon/umychart.vue.build/umychart.testdata.bat +0 -3
  71. package/src/jscommon/umychart.vue.build/umychart.testdata.vue.export.js +0 -7
  72. package/src/jscommon/umychart.vue.build/umychart.vue.bat +0 -8
  73. package/src/jscommon/umychart.vue.build/umychart.vue.export.js +0 -112
  74. package/src/jscommon/umychart.vue.components/empyt.vue +0 -51
  75. package/src/jscommon/umychart.vue.components/historydayline.vue +0 -240
  76. package/src/jscommon/umychart.vue.components/jsloader.adddialog.vue +0 -315
  77. package/src/jscommon/umychart.vue.components/jsloader.vue +0 -93
  78. package/src/jscommon/umychart.vue.components/jsvuecontainer.vue +0 -160
  79. package/src/jscommon/umychart.vue.components/jsvuecontainer2.0.vue +0 -391
  80. package/src/jscommon/umychart.vue.components/login.vue +0 -178
  81. package/src/jscommon/umychart.vue.components/queryContent.vue +0 -750
  82. package/src/jscommon/umychart.vue.components/readme.txt +0 -8
  83. package/src/jscommon/umychart.vue.components/searchsymbol.vue +0 -299
  84. package/src/jscommon/umychart.vue.components/simulatetrade.vue +0 -1471
  85. package/src/jscommon/umychart.vue.components/stockchart.vue +0 -343
  86. package/src/jscommon/umychart.vue.components/stockchartV2.vue +0 -195
  87. package/src/jscommon/umychart.vue.components/stockdeal.vue +0 -358
  88. package/src/jscommon/umychart.vue.components/stockdealcount.vue +0 -262
  89. package/src/jscommon/umychart.vue.components/stockdeallastest.vue +0 -316
  90. package/src/jscommon/umychart.vue.components/stockdrawtool.vue +0 -343
  91. package/src/jscommon/umychart.vue.components/stockfull.vue +0 -355
  92. package/src/jscommon/umychart.vue.components/stockinfo.demo.vue +0 -153
  93. package/src/jscommon/umychart.vue.components/stockinfo.vue +0 -685
  94. package/src/jscommon/umychart.vue.components/stockkline.demo.vue +0 -1904
  95. package/src/jscommon/umychart.vue.components/stockmultiorder.vue +0 -174
  96. package/src/jscommon/umychart.vue.components/stockmultiperiod.vue +0 -222
  97. package/src/jscommon/umychart.vue.components/stockorder.vue +0 -320
  98. package/src/jscommon/umychart.vue.components/stocktradeinfo.demo.vue +0 -250
  99. package/src/jscommon/umychart.vue.components/stocktradeinfo.vue +0 -1907
  100. package/src/jscommon/umychart.vue.components/test.vue +0 -0
  101. package/src/jscommon/umychart.wechat/getDate.wechat.js +0 -91
  102. package/src/jscommon/umychart.wechat/lighter.news.wechat.js +0 -262
  103. package/src/jscommon/umychart.wechat/readme.txt +0 -3
  104. package/src/jscommon/umychart.wechat/umychart.analyze.wechat.js +0 -551
  105. package/src/jscommon/umychart.wechat/umychart.apidraw.wechat.js +0 -126
  106. package/src/jscommon/umychart.wechat/umychart.bigV.wechat.js +0 -2510
  107. package/src/jscommon/umychart.wechat/umychart.chartframe.wechat.js +0 -2931
  108. package/src/jscommon/umychart.wechat/umychart.chartpaint.wechat.js +0 -9752
  109. package/src/jscommon/umychart.wechat/umychart.charttitle.wechat.js +0 -2023
  110. package/src/jscommon/umychart.wechat/umychart.complier.wechat.js +0 -14726
  111. package/src/jscommon/umychart.wechat/umychart.console.wechat.js +0 -8
  112. package/src/jscommon/umychart.wechat/umychart.coordinatedata.wechat.js +0 -3654
  113. package/src/jscommon/umychart.wechat/umychart.data.wechat.js +0 -2243
  114. package/src/jscommon/umychart.wechat/umychart.element.wechart.js +0 -132
  115. package/src/jscommon/umychart.wechat/umychart.explainer.wechat.js +0 -1077
  116. package/src/jscommon/umychart.wechat/umychart.extendchart.wechat.js +0 -1140
  117. package/src/jscommon/umychart.wechat/umychart.framesplit.wechat.js +0 -2247
  118. package/src/jscommon/umychart.wechat/umychart.hqIndexformula.wechat.js +0 -941
  119. package/src/jscommon/umychart.wechat/umychart.index.data.wechat.js +0 -3628
  120. package/src/jscommon/umychart.wechat/umychart.index.wechat.js +0 -4074
  121. package/src/jscommon/umychart.wechat/umychart.klineinfo.wechat.js +0 -836
  122. package/src/jscommon/umychart.wechat/umychart.markethot.js +0 -50
  123. package/src/jscommon/umychart.wechat/umychart.network.wechart.js +0 -62
  124. package/src/jscommon/umychart.wechat/umychart.news.wechat.js +0 -3568
  125. package/src/jscommon/umychart.wechat/umychart.regressiontest.wechat.js +0 -412
  126. package/src/jscommon/umychart.wechat/umychart.report.wechat.js +0 -3983
  127. package/src/jscommon/umychart.wechat/umychart.resource.wechat.js +0 -919
  128. package/src/jscommon/umychart.wechat/umychart.shareimage.wechat.js +0 -681
  129. package/src/jscommon/umychart.wechat/umychart.simulatetrade.wechat.js +0 -238
  130. package/src/jscommon/umychart.wechat/umychart.stock.wechat.js +0 -4035
  131. package/src/jscommon/umychart.wechat/umychart.style.wechat.js +0 -419
  132. package/src/jscommon/umychart.wechat/umychart.uniapp.canvas.helper.js +0 -99
  133. package/src/jscommon/umychart.wechat/umychart.user.wechat.js +0 -588
  134. package/src/jscommon/umychart.wechat/umychart.userlog.wechat.js +0 -240
  135. package/src/jscommon/umychart.wechat/umychart.vedio.wechat.js +0 -112
  136. package/src/jscommon/umychart.wechat/umychart.version.wechat.js +0 -36
  137. package/src/jscommon/umychart.wechat/umychart.wechat.3.0.js +0 -12051
  138. package/src/jscommon/umychart.wechat/umychart.wechat.js +0 -15460
  139. package/src/jscommon/umychart.worker.js +0 -114
  140. package/src/jscommon/umychart.ws.stock.js +0 -110
  141. package/src/jscommon/umychart_python/.vscode/launch.json +0 -15
  142. package/src/jscommon/umychart_python/__init__.py +0 -4
  143. package/src/jscommon/umychart_python/build.cmd +0 -2
  144. package/src/jscommon/umychart_python/setup.py +0 -25
  145. package/src/jscommon/umychart_python/umychart_cache_testcase.py +0 -165
  146. package/src/jscommon/umychart_python/umychart_complier_data.py +0 -781
  147. package/src/jscommon/umychart_python/umychart_complier_help.py +0 -175
  148. package/src/jscommon/umychart_python/umychart_complier_job.py +0 -193
  149. package/src/jscommon/umychart_python/umychart_complier_jsalgorithm.py +0 -4144
  150. package/src/jscommon/umychart_python/umychart_complier_jscomplier.py +0 -177
  151. package/src/jscommon/umychart_python/umychart_complier_jsexecute.py +0 -517
  152. package/src/jscommon/umychart_python/umychart_complier_jsparser.py +0 -864
  153. package/src/jscommon/umychart_python/umychart_complier_jssymboldata.py +0 -1238
  154. package/src/jscommon/umychart_python/umychart_complier_jssymboldata_cache.py +0 -146
  155. package/src/jscommon/umychart_python/umychart_complier_jssymboldata_json.py +0 -106
  156. package/src/jscommon/umychart_python/umychart_complier_pandas_help.py +0 -80
  157. package/src/jscommon/umychart_python/umychart_complier_scanner.py +0 -554
  158. package/src/jscommon/umychart_python/umychart_complier_testcase.py +0 -362
  159. package/src/jscommon/umychart_python/umychart_complier_util.py +0 -30
  160. package/src/jscommon/umychart_python/umychart_webtemplate.py +0 -131
  161. package/src/jscommon/umychart_python/updatehqchartweb.bat +0 -5
  162. package/src/jscommon/vendor.js +0 -2
  163. package/src/pages/block.list.demo.page/App.vue +0 -117
  164. package/src/pages/block.list.demo.page/index.js +0 -12
  165. package/src/pages/brushTool.demo.page/App.vue +0 -19
  166. package/src/pages/brushTool.demo.page/index.js +0 -12
  167. package/src/pages/container.demo.page/App.vue +0 -118
  168. package/src/pages/container.demo.page/index.js +0 -18
  169. package/src/pages/dataZoom.demo.page/App.vue +0 -265
  170. package/src/pages/dataZoom.demo.page/components/dataZoom.vue +0 -303
  171. package/src/pages/dataZoom.demo.page/index.js +0 -12
  172. package/src/pages/historydayline.demo.page/App.vue +0 -57
  173. package/src/pages/historydayline.demo.page/index.js +0 -12
  174. package/src/pages/hq.demo.page/App.vue +0 -163
  175. package/src/pages/hq.demo.page/index.js +0 -12
  176. package/src/pages/hqchart.black/App.vue +0 -90
  177. package/src/pages/hqchart.black/components/searchsymbol.vue +0 -299
  178. package/src/pages/hqchart.black/components/stockdrawtool.vue +0 -300
  179. package/src/pages/hqchart.black/components/stockfull.vue +0 -313
  180. package/src/pages/hqchart.black/components/stockinfo.vue +0 -428
  181. package/src/pages/hqchart.black/components/stockkline.demo.vue +0 -1652
  182. package/src/pages/hqchart.black/components/stocktradeinfo.vue +0 -1337
  183. package/src/pages/hqchart.black/index.js +0 -30
  184. package/src/pages/hqchart.black/router/candlestickChart.vue +0 -108
  185. package/src/pages/hqchart.black/router/pricePointsTable.vue +0 -294
  186. package/src/pages/hqchart.black/router/stockDeallas.vue +0 -417
  187. package/src/pages/hqchart.black/router/timeShareChart.vue +0 -108
  188. package/src/pages/hqchart.page/App.vue +0 -101
  189. package/src/pages/hqchart.page/index.js +0 -18
  190. package/src/pages/index/App.vue +0 -1408
  191. package/src/pages/index/index.js +0 -7
  192. package/src/pages/indexHq/App.vue +0 -110
  193. package/src/pages/indexHq/index.js +0 -18
  194. package/src/pages/login.demo.page/App.vue +0 -22
  195. package/src/pages/login.demo.page/index.js +0 -12
  196. package/src/pages/queryContent.demo.page/App.vue +0 -29
  197. package/src/pages/queryContent.demo.page/index.js +0 -18
  198. package/src/pages/ranking.black/App.vue +0 -199
  199. package/src/pages/ranking.black/index.js +0 -18
  200. package/src/pages/search.demo.page/App.vue +0 -28
  201. package/src/pages/search.demo.page/index.js +0 -12
  202. package/src/pages/simulatetrade.demo.page/app.vue +0 -121
  203. package/src/pages/simulatetrade.demo.page/index.js +0 -17
  204. package/src/pages/stockdeal.demo.page/App.vue +0 -63
  205. package/src/pages/stockdeal.demo.page/index.js +0 -19
  206. package/src/pages/stockdealcount.demo.page/App.vue +0 -37
  207. package/src/pages/stockdealcount.demo.page/index.js +0 -12
  208. package/src/pages/stockdeallastest.demo.page/App.vue +0 -74
  209. package/src/pages/stockdeallastest.demo.page/index.js +0 -18
  210. package/src/pages/stockinfo.demo.page/App.vue +0 -92
  211. package/src/pages/stockinfo.demo.page/index.html +0 -13
  212. package/src/pages/stockinfo.demo.page/index.js +0 -19
  213. package/src/pages/stockkline.demo.page/App.vue +0 -55
  214. package/src/pages/stockkline.demo.page/index.js +0 -18
  215. package/src/pages/stockmultiorder.demo.page/App.vue +0 -149
  216. package/src/pages/stockmultiorder.demo.page/index.js +0 -18
  217. package/src/pages/stockmultiperiod.demo.page/App.vue +0 -87
  218. package/src/pages/stockmultiperiod.demo.page/index.js +0 -18
  219. package/src/pages/stockorder.demo.page/App.vue +0 -69
  220. package/src/pages/stockorder.demo.page/index.js +0 -18
  221. package/src/pages/test/App.vue +0 -22
  222. package/src/pages/test/index.js +0 -7
  223. package/src/pages/tradeinfopage/app.vue +0 -40
  224. package/src/pages/tradeinfopage/index.js +0 -7
  225. package/src/pages/tradeinfopage/tradeinfo.html +0 -12
  226. package/src/utils/urlObj.js +0 -81
  227. package/src/vendor.js +0 -2
  228. package/webpack.config.js +0 -104
@@ -1,3983 +0,0 @@
1
- /*
2
- Copyright (c) 2018 jones
3
-
4
- http://www.apache.org/licenses/LICENSE-2.0
5
-
6
- 开源项目 https://github.com/jones2000/HQChart
7
-
8
- jones_2000@163.com
9
-
10
- 封装股票列表控件 (小程序版本)
11
- 不提供内置测试数据
12
- */
13
-
14
- //日志
15
- import { JSConsole } from "./umychart.console.wechat.js"
16
-
17
- //画布DOM
18
- import { JSCanvasElement } from "./umychart.element.wechart.js";
19
-
20
- import{
21
- g_JSChartResource,
22
- JSCHART_LANGUAGE_ID,
23
- g_JSChartLocalization,
24
- } from './umychart.resource.wechat.js'
25
-
26
- import
27
- {
28
- IFrameSplitOperator,
29
- } from './umychart.framesplit.wechat.js'
30
-
31
- import
32
- {
33
- GetfloatPrecision,
34
- } from "./umychart.coordinatedata.wechat.js";
35
-
36
-
37
- //图形库
38
- import {
39
- ChartSplashPaint,
40
- GetFontHeight,
41
- } from "./umychart.chartpaint.wechat.js";
42
-
43
-
44
- //行情数据结构体 及涉及到的行情算法(复权,周期等)
45
- import {
46
- JSCHART_EVENT_ID,
47
- PhoneDBClick,
48
- } from "./umychart.data.wechat.js";
49
-
50
- //边框信息
51
- function ChartBorder()
52
- {
53
- this.UIElement;
54
-
55
- //四周间距
56
- this.Left = 50;
57
- this.Right = 80;
58
- this.Top = 50;
59
- this.Bottom = 50;
60
-
61
- this.GetChartWidth = function ()
62
- {
63
- return this.UIElement.Width;
64
- }
65
-
66
- this.GetChartHeight = function ()
67
- {
68
- return this.UIElement.Height;
69
- }
70
-
71
- this.GetLeft = function ()
72
- {
73
- return this.Left;
74
- }
75
-
76
- this.GetRight = function ()
77
- {
78
- return this.UIElement.Width - this.Right;
79
- }
80
-
81
- this.GetTop = function ()
82
- {
83
- return this.Top;
84
- }
85
-
86
- this.GetBottom = function ()
87
- {
88
- return this.UIElement.Height - this.Bottom;
89
- }
90
-
91
- this.GetWidth = function ()
92
- {
93
- return this.UIElement.Width - this.Left - this.Right;
94
- }
95
-
96
- this.GetHeight = function ()
97
- {
98
- return this.UIElement.Height - this.Top - this.Bottom;
99
- }
100
- }
101
-
102
- function JSReportChart(element)
103
- {
104
- this.CanvasElement=element;
105
- this.JSChartContainer; //表格控件
106
-
107
- this.OnSize=function(option)
108
- {
109
- if (option)
110
- {
111
- if (IFrameSplitOperator.IsNumber(option.Width)) this.CanvasElement.Width=option.Width;
112
- if (IFrameSplitOperator.IsNumber(option.Height)) this.CanvasElement.Height=option.Height;
113
- }
114
-
115
- if (option && option.Redraw==false) return;
116
-
117
- if (this.JSChartContainer && this.JSChartContainer.OnSize)
118
- {
119
- this.JSChartContainer.OnSize();
120
- }
121
- }
122
-
123
- this.SetOption=function(option)
124
- {
125
- var chart=this.CreateJSReportChartContainer(option);
126
-
127
- if (!chart) return false;
128
-
129
- if (option.OnCreatedCallback) option.OnCreatedCallback(chart);
130
-
131
- this.JSChartContainer=chart;
132
-
133
- if (option.Symbol) chart.Symbol=option.Symbol;
134
- if (option.Name) chart.Name=option.Name;
135
-
136
- var requestOption={ Callback:null };
137
- if (chart.Symbol) requestOption.Callback=function() { chart.RequestMemberListData(); };
138
-
139
- chart.RequestStockListData(requestOption); //下载码表
140
- }
141
-
142
- this.CreateJSReportChartContainer=function(option)
143
- {
144
- var chart=new JSReportChartContainer(this.CanvasElement);
145
- chart.Create(option);
146
-
147
- if (option.NetworkFilter) chart.NetworkFilter=option.NetworkFilter;
148
- if (IFrameSplitOperator.IsNonEmptyArray(option.Column)) chart.SetColumn(option.Column);
149
- if (IFrameSplitOperator.IsNonEmptyArray(option.Tab)) chart.SetTab(option.Tab);
150
- if (IFrameSplitOperator.IsNumber(option.TabSelected)) chart.SetSelectedTab(option.TabSelected);
151
-
152
- if (option.SortInfo)
153
- {
154
- var item=option.SortInfo;
155
- if (IFrameSplitOperator.IsNumber(item.Field)) chart.SortInfo.Field=item.Field;
156
- if (IFrameSplitOperator.IsNumber(item.Sort)) chart.SortInfo.Sort=item.Sort;
157
- }
158
-
159
- this.SetChartBorder(chart, option);
160
-
161
- //是否自动更新
162
- if (option.IsAutoUpdate!=null) chart.IsAutoUpdate=option.IsAutoUpdate;
163
- if (option.AutoUpdateFrequency>0) chart.AutoUpdateFrequency=option.AutoUpdateFrequency;
164
- if (IFrameSplitOperator.IsBool(option.EnableFilter)) chart.EnableFilter=option.EnableFilter;
165
-
166
- //注册事件
167
- if (option.EventCallback)
168
- {
169
- for(var i=0;i<option.EventCallback.length;++i)
170
- {
171
- var item=option.EventCallback[i];
172
- chart.AddEventCallback(item);
173
- }
174
- }
175
-
176
- return chart;
177
- }
178
-
179
- this.SetChartBorder=function(chart, option)
180
- {
181
- if (!option.Border) return;
182
-
183
- var item=option.Border;
184
- if (IFrameSplitOperator.IsNumber(option.Border.Left)) chart.Frame.ChartBorder.Left=option.Border.Left;
185
- if (IFrameSplitOperator.IsNumber(option.Border.Right)) chart.Frame.ChartBorder.Right=option.Border.Right;
186
- if (IFrameSplitOperator.IsNumber(option.Border.Top)) chart.Frame.ChartBorder.Top=option.Border.Top;
187
- if (IFrameSplitOperator.IsNumber(option.Border.Bottom)) chart.Frame.ChartBorder.Bottom=option.Border.Bottom;
188
- }
189
-
190
- /////////////////////////////////////////////////////////////////////////////
191
- //对外接口
192
-
193
- //切换股票代码接口
194
- this.ChangeSymbol=function(symbol, option)
195
- {
196
- if (this.JSChartContainer) this.JSChartContainer.ChangeSymbol(symbol,option);
197
- }
198
-
199
- this.SetColumn=function(aryColumn, option)
200
- {
201
- if (this.JSChartContainer) this.JSChartContainer.SetColumn(aryColumn,option);
202
- }
203
-
204
- //事件回调
205
- this.AddEventCallback=function(obj)
206
- {
207
- if(this.JSChartContainer && typeof(this.JSChartContainer.AddEventCallback)=='function')
208
- {
209
- JSConsole.Chart.Log('[JSReportChart:AddEventCallback] obj=', obj);
210
- this.JSChartContainer.AddEventCallback(obj);
211
- }
212
- }
213
-
214
- //重新加载配置
215
- this.ReloadResource=function(option)
216
- {
217
- if(this.JSChartContainer && typeof(this.JSChartContainer.ReloadResource)=='function')
218
- {
219
- JSConsole.Chart.Log('[JSReportChart:ReloadResource] ');
220
- this.JSChartContainer.ReloadResource(option);
221
- }
222
- }
223
-
224
- this.ChartDestory=function()
225
- {
226
- if (this.JSChartContainer && typeof (this.JSChartContainer.ChartDestory) == 'function')
227
- {
228
- JSConsole.Chart.Log("[JSReportChart::ChartDestory]");
229
- this.JSChartContainer.ChartDestory();
230
- }
231
- }
232
-
233
- this.OnTouchStart = function (e)
234
- {
235
- if (this.JSChartContainer) this.JSChartContainer.OnTouchStart(e);
236
- }
237
-
238
- this.OnTouchMove = function (e)
239
- {
240
- if (this.JSChartContainer) this.JSChartContainer.OnTouchMove(e);
241
- }
242
-
243
- this.OnTouchEnd = function (e)
244
- {
245
- if (this.JSChartContainer) this.JSChartContainer.OnTouchEnd(e);
246
- }
247
- }
248
-
249
- JSReportChart.Init=function(uielement)
250
- {
251
- var jsChartControl=new JSReportChart(uielement);
252
- jsChartControl.OnSize();
253
-
254
- return jsChartControl;
255
- }
256
-
257
- //自定义风格
258
- JSReportChart.SetStyle = function (style)
259
- {
260
- if (style) g_JSChartResource.SetStyle(style);
261
- }
262
-
263
- //获取颜色配置 (设置配必须啊在JSChart.Init()之前)
264
- JSReportChart.GetResource = function ()
265
- {
266
- return g_JSChartResource;
267
- }
268
-
269
- //修正线段有毛刺
270
- function ToFixedPoint(value)
271
- {
272
- //return value;
273
- return parseInt(value) + 0.5;
274
- }
275
-
276
- function ToFixedRect(value)
277
- {
278
- var rounded;
279
- return rounded = (0.5 + value) << 0;
280
- }
281
-
282
- function HQReportItem()
283
- {
284
- this.OriginalSymbol; //原始代码
285
- this.Symbol;
286
- this.Name;
287
- this.YClose;
288
- this.Open;
289
- this.Price;
290
- this.High;
291
- this.Low;
292
- this.Amount;
293
- this.Vol;
294
-
295
- this.Increase; //涨幅
296
- this.UpDown; //涨跌
297
- this.Exchange; //换手
298
- this.Amplitude; //振幅
299
-
300
- this.BuyPrice; //买价/量
301
- this.BuyVol;
302
- this.SellPrice; //卖价/量
303
- this.SellVol;
304
-
305
- this.AvPrice; //均价
306
-
307
- this.LimitHigh; //涨停价
308
- this.LimitLow; //跌停价
309
-
310
- this.VolIn; //内盘
311
- this.VolOut; //外盘
312
-
313
- this.DealNum; //现量
314
-
315
- this.OutShares; //流通股本
316
- this.TotalShares; //总股本
317
- this.MarketValue; //总市值
318
- this.CircMarketValue;//流通市值
319
-
320
- this.CloseLine; //{Data:[], Max:, Min:, Count: }
321
-
322
- this.ExtendData; //扩展数据
323
- }
324
-
325
-
326
- function JSReportChartContainer(uielement)
327
- {
328
- this.ClassName='JSReportChartContainer';
329
- this.Frame; //框架画法
330
- this.ChartPaint=[]; //图形画法
331
- this.ChartSplashPaint=null; //等待提示
332
- this.LoadDataSplashTitle="数据加载中"; //下载数据提示信息
333
-
334
- this.SplashTitle={ StockList:"下载码表中.....", MemberList:"下载成分中....." } ;
335
-
336
- this.Canvas=uielement.GetContext("2d"); //画布
337
- this.ShowCanvas=null;
338
-
339
- this.Symbol; //板块代码
340
- this.Name; //板块名称
341
- this.NetworkFilter; //数据回调接口
342
- this.Data={ XOffset:0, YOffset:0, Data:[] }; //股票列表
343
- this.SourceData={ Data:[] } ; //原始股票顺序(排序还原用)
344
- this.BlockData=new Map(); //当前板块数据
345
- this.MapStockData=new Map(); //原始股票数据
346
- this.FixedRowData={ Data:[], Type:0, Symbol:[] }; //顶部固定行Data:[{ Value:, Text:, Color:, TextAgiln: }], Type:0=自定义数据, 1 =(股票数据) Symbol:[],
347
-
348
- //this.FixedRowData.Data=[ [null, {Value:11, Text:"11" }], [null, null, null, {Value:12, Text:"ddddd", Color:"rgb(45,200,4)"}]];
349
-
350
- this.SortInfo={ Field:-1, Sort:0 }; //排序信息 {Field:排序字段id, Sort:0 不排序 1升序 2降序 }
351
-
352
- //事件回调
353
- this.mapEvent=new Map(); //通知外部调用 key:JSCHART_EVENT_ID value:{Callback:回调,}
354
-
355
- this.AutoUpdateTimer=null;
356
- this.AutoUpdateFrequency=15000; //15秒更新一次数据
357
-
358
- this.DelayUpdateTimer=null; //延迟更新
359
- this.DelayUpdateFrequency=500; //延迟更新时间
360
-
361
- this.UIElement=uielement;
362
- this.LastPoint=null; //鼠标位置
363
- this.IsOnTouch=false;
364
- this.TouchDrag;
365
- this.TouchMoveMinAngle=70; //左右移动最小角度
366
- this.YStepPixel=5;
367
- this.XStepPixel=10;
368
-
369
- this.PageUpDownCycle=true; //翻页循环
370
- this.DragPageCycle=true; //手机翻页循环
371
-
372
- //拖拽滚动条
373
- this.DragXScroll=null; //{Start:{x,y}, End:{x, y}}
374
- this.IsDestroy=false; //是否已经销毁了
375
-
376
- this.ChartDestory=function() //销毁
377
- {
378
- this.IsDestroy=true;
379
- this.StopAutoUpdate();
380
- }
381
-
382
- //清空固定行数据
383
- this.ClearFixedRowData=function()
384
- {
385
- this.FixedRowData.Data=[];
386
- this.FixedRowData.Symbol=[];
387
- }
388
-
389
- //设置固定行
390
- this.SetFixedRowCount=function(value)
391
- {
392
- var chart=this.GetReportChart();
393
- if (!chart) return;
394
-
395
- chart.FixedRowCount=value;
396
- }
397
-
398
- //创建
399
- this.Create=function(option)
400
- {
401
- this.UIElement.JSChartContainer=this;
402
-
403
- //创建等待提示
404
- this.ChartSplashPaint = new ChartSplashPaint();
405
- this.ChartSplashPaint.Canvas = this.Canvas;
406
- this.ChartSplashPaint.SetTitle(this.LoadDataSplashTitle);
407
- this.ChartSplashPaint.IsEnableSplash=true;
408
-
409
- //创建框架
410
- this.Frame=new JSReportFrame();
411
- this.Frame.ChartBorder=new ChartBorder();
412
- this.Frame.ChartBorder.UIElement=this.UIElement;
413
- this.Frame.ChartBorder.Top=30;
414
- this.Frame.ChartBorder.Left=5;
415
- this.Frame.ChartBorder.Bottom=20;
416
- this.Frame.Canvas=this.Canvas;
417
-
418
- this.ChartSplashPaint.Frame = this.Frame;
419
-
420
- //创建表格
421
- var chart=new ChartReport();
422
- chart.Frame=this.Frame;
423
- chart.ChartBorder=this.Frame.ChartBorder;
424
- chart.Canvas=this.Canvas;
425
- chart.GetEventCallback=(id)=> { return this.GetEventCallback(id); }
426
- chart.GetStockDataCallback=(symbol)=>{ return this.GetStockData(symbol);}
427
- chart.GetBlockDataCallback=(symbol)=>{ return this.GetBlockData(symbol);}
428
- chart.Data=this.Data;
429
- chart.FixedRowData=this.FixedRowData;
430
- chart.SortInfo=this.SortInfo;
431
- this.ChartPaint[0]=chart;
432
-
433
- //页脚
434
- if (option && option.PageInfo===true)
435
- {
436
- var pageInfoChart=new ChartReportPageInfo();
437
- pageInfoChart.Frame=this.Frame;
438
- pageInfoChart.ChartBorder=this.Frame.ChartBorder;
439
- pageInfoChart.Canvas=this.Canvas;
440
- pageInfoChart.Report=chart;
441
- this.ChartPaint[1]=pageInfoChart;
442
- }
443
-
444
- if (option)
445
- {
446
- if (IFrameSplitOperator.IsBool(option.IsShowHeader)) chart.IsShowHeader=option.IsShowHeader; //是否显示表头
447
- if (IFrameSplitOperator.IsNumber(option.FixedColumn)) chart.FixedColumn=option.FixedColumn; //固定列
448
-
449
- if (IFrameSplitOperator.IsNumber(option.BorderLine)) this.Frame.BorderLine=option.BorderLine; //边框
450
- if (IFrameSplitOperator.IsNumber(option.FixedRowCount)) chart.FixedRowCount=option.FixedRowCount; //固定行
451
- if (IFrameSplitOperator.IsBool(option.ItemBorder)) chart.IsDrawBorder=option.ItemBorder; //单元格边框
452
-
453
- if (IFrameSplitOperator.IsNonEmptyArray(option.FixedSymbol))
454
- {
455
- chart.FixedRowCount=0;
456
- this.FixedRowData.Type=1;
457
- this.FixedRowData.Symbol=[];
458
- var aryData=option.FixedSymbol;
459
- for(var i=0; i<aryData.length; ++i)
460
- {
461
- var item=aryData[i];
462
- this.FixedRowData.Symbol.push(item.Symbol);
463
- ++chart.FixedRowCount;
464
- }
465
- }
466
- }
467
- }
468
-
469
- this.Draw=function()
470
- {
471
- if (this.UIElement.Width<=0 || this.UIElement.Height<=0) return;
472
-
473
- this.Canvas.clearRect(0,0,this.UIElement.Width,this.UIElement.Height);
474
-
475
- if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash)
476
- {
477
- this.Frame.Draw( { IsEnableSplash:this.ChartSplashPaint.IsEnableSplash} );
478
- this.ChartSplashPaint.Draw();
479
- return;
480
- }
481
-
482
- this.Frame.Draw();
483
- this.Frame.DrawLogo();
484
-
485
- //框架内图形
486
- for(var i=0;i<this.ChartPaint.length;++i)
487
- {
488
- var item=this.ChartPaint[i];
489
- if (item.IsDrawFirst)
490
- item.Draw();
491
- }
492
-
493
- for(var i=0; i<this.ChartPaint.length; ++i)
494
- {
495
- var item=this.ChartPaint[i];
496
- if (!item.IsDrawFirst)
497
- item.Draw();
498
- }
499
-
500
- this.Canvas.draw(false);
501
- }
502
-
503
-
504
- this.ResetReportStatus=function()
505
- {
506
- this.Data.XOffset=0;
507
- this.Data.YOffset=0;
508
- }
509
-
510
- this.ResetReportSelectStatus=function()
511
- {
512
- var chart=this.GetReportChart();
513
- if (chart)
514
- {
515
- chart.SelectedRow=-1;
516
- chart.SelectedFixedRow=-1;
517
- }
518
- }
519
-
520
- this.ClearData=function()
521
- {
522
- this.SourceData.Data=[];
523
- this.Data.Data=[];
524
- }
525
-
526
- this.ResetSortStatus=function()
527
- {
528
- this.SortInfo.Field=-1;
529
- this.SortInfo.Sort=0;
530
- }
531
-
532
- //设置股票列表
533
- this.SetSymbolList=function(arySymbol, option)
534
- {
535
- this.ClearData();
536
- this.ResetReportStatus();
537
- this.ResetSortStatus();
538
-
539
- if (IFrameSplitOperator.IsNonEmptyArray(arySymbol))
540
- {
541
- for(var i=0;i<arySymbol.length;++i)
542
- {
543
- this.Data.Data.push(arySymbol[i]);
544
- }
545
- }
546
-
547
- var chart=this.ChartPaint[0];
548
- if (chart) chart.Data=this.Data;
549
-
550
- this.Draw();
551
- }
552
-
553
- this.ChangeSymbol=function(symbol, option)
554
- {
555
- this.Symbol=symbol;
556
- this.ClearData();
557
- this.ResetReportStatus();
558
- this.ResetSortStatus();
559
- this.ResetReportSelectStatus();
560
-
561
- if (option)
562
- {
563
- if (IFrameSplitOperator.IsNumber(option.TabSelected))
564
- {
565
- var chartTab=this.GetTabChart();
566
- if (chartTab) chartTab.SelectedTabIndex=option.TabSelected;
567
- }
568
-
569
- if (Array.isArray(option.FixedSymbol))
570
- {
571
- var chart=this.GetReportChart();
572
- if (chart)
573
- {
574
- chart.FixedRowCount=0;
575
- this.FixedRowData.Type=1;
576
- this.FixedRowData.Symbol=[];
577
- var aryData=option.FixedSymbol;
578
- for(var i=0; i<aryData.length; ++i)
579
- {
580
- var item=aryData[i];
581
- this.FixedRowData.Symbol.push(item.Symbol);
582
- ++chart.FixedRowCount;
583
- }
584
-
585
- this.SetSizeChange(true);
586
- }
587
- }
588
-
589
- if (option.SortInfo)
590
- {
591
- var item=option.SortInfo;
592
- if (IFrameSplitOperator.IsNumber(item.Field)) this.SortInfo.Field=item.Field;
593
- if (IFrameSplitOperator.IsNumber(item.Sort)) this.SortInfo.Sort=item.Sort;
594
- }
595
- }
596
-
597
- this.RequestMemberListData();
598
- }
599
-
600
- this.RequestMemberListData=function()
601
- {
602
- //this.ChartSplashPaint.SetTitle(this.SplashTitle.MemberList);
603
- //this.ChartSplashPaint.EnableSplash(true);
604
- //this.Draw();
605
-
606
- var self=this;
607
- if (this.NetworkFilter)
608
- {
609
- var obj=
610
- {
611
- Name:'JSReportChartContainer::RequestMemberListData', //类名::
612
- Explain:'板块成分数据',
613
- Request:{ Data: { symbol: this.Symbol } },
614
- Self:this,
615
- PreventDefault:false
616
- };
617
-
618
- if (this.SortInfo.Field>=0 && this.SortInfo.Sort>0)
619
- {
620
- var reportChart=this.GetReportChart();
621
- if (reportChart)
622
- {
623
- var column=reportChart.Column[this.SortInfo.Field];
624
- obj.Sort={ Column:column, Field:this.SortInfo.Field, Sort:this.SortInfo.Sort} ;
625
- }
626
- }
627
-
628
- this.NetworkFilter(obj, function(data)
629
- {
630
- self.ChartSplashPaint.EnableSplash(false);
631
- self.RecvMemberListData(data);
632
- });
633
-
634
- if (obj.PreventDefault==true) return; //已被上层替换,不调用默认的网络请求
635
- }
636
-
637
- throw { Name:'JSReportChartContainer::RequestMemberListData', Error:'(板块成分数据)不提供内置测试数据' };
638
- }
639
-
640
- this.RecvMemberListData=function(recvData)
641
- {
642
- this.ClearData();
643
-
644
- if (IFrameSplitOperator.IsNonEmptyArray(recvData.data))
645
- {
646
- for(var i=0;i<recvData.data.length;++i)
647
- {
648
- this.Data.Data.push(recvData.data[i]);
649
- this.SourceData.Data.push(recvData.data[i]);
650
- }
651
- }
652
-
653
- this.Draw();
654
- this.UpdateStockData();
655
- }
656
-
657
- this.AutoUpdateEvent=function(bStart, explain) //自定更新事件, 是给websocket使用
658
- {
659
- var eventID=bStart ? JSCHART_EVENT_ID.RECV_START_AUTOUPDATE:JSCHART_EVENT_ID.RECV_STOP_AUTOUPDATE;
660
- if (!this.mapEvent.has(eventID)) return;
661
-
662
- var self=this;
663
- var event=this.mapEvent.get(eventID);
664
- var data={ Stock:{ Symbol:this.Symbol, Name:this.Name, DayCount:this.DayCount }, Explain: explain };
665
- if (bStart)
666
- {
667
- data.Callback=function(data) //数据到达更新回调
668
- {
669
- self.RecvDealUpdateData(data);
670
- }
671
- }
672
- event.Callback(event,data,this);
673
- }
674
-
675
- //下载码表
676
- this.RequestStockListData=function(option)
677
- {
678
- this.ChartSplashPaint.SetTitle(this.SplashTitle.StockList);
679
- this.ChartSplashPaint.EnableSplash(true);
680
- this.Draw();
681
-
682
- var self=this;
683
- if (this.NetworkFilter)
684
- {
685
- var obj=
686
- {
687
- Name:'JSReportChartContainer::RequestStockListData', //类名::
688
- Explain:'码表数据',
689
- Self:this,
690
- PreventDefault:false
691
- };
692
- this.NetworkFilter(obj, function(data)
693
- {
694
- self.ChartSplashPaint.EnableSplash(false);
695
- self.RecvStockListData(data,option);
696
- });
697
-
698
- if (obj.PreventDefault==true) return; //已被上层替换,不调用默认的网络请求
699
- }
700
-
701
- throw { Name:'JSReportChartContainer::RequestStockListData', Error:'(码表数据)不提供内置测试数据' };
702
- }
703
-
704
- this.RecvStockListData=function(data, option)
705
- {
706
- if (IFrameSplitOperator.IsNonEmptyArray(data.data))
707
- {
708
- //0=证券代码 1=股票名称
709
- for(var i=0;i<data.data.length;++i)
710
- {
711
- var item=data.data[i];
712
- var symbol=item[0];
713
- var stock=null;
714
- if (this.MapStockData.has(symbol))
715
- {
716
- stock=this.MapStockData.get(symbol);
717
- }
718
- else
719
- {
720
- stock=new HQReportItem();
721
- stock.OriginalSymbol=symbol;
722
- this.MapStockData.set(symbol, stock);
723
- }
724
-
725
- stock.Symbol=this.GetSymbolNoSuffix(symbol);
726
- stock.Name=item[1];
727
- this.ReadStockJsonData(stock, item);
728
- }
729
- }
730
-
731
- if (option && option.Callback)
732
- {
733
- option.Callback();
734
- return;
735
- }
736
-
737
- this.Draw();
738
-
739
- this.UpdateStockData();
740
- }
741
-
742
- //更新股票数据
743
- this.UpdateMapStockData=function(data)
744
- {
745
- if (!data || !IFrameSplitOperator.IsNonEmptyArray(data.data)) return;
746
-
747
- //0=证券代码 1=股票名称
748
- for(var i=0;i<data.data.length;++i)
749
- {
750
- var item=data.data[i];
751
- var symbol=item[0];
752
- var stock=null;
753
- if (this.MapStockData.has(symbol))
754
- {
755
- stock=this.MapStockData.get(symbol);
756
- }
757
- else
758
- {
759
- stock=new HQReportItem();
760
- this.MapStockData.set(symbol, stock);
761
- }
762
-
763
- stock.Symbol=this.GetSymbolNoSuffix(symbol);
764
- stock.Name=item[1];
765
- this.ReadStockJsonData(stock, item);
766
- }
767
- }
768
-
769
- //获取个股数据
770
- this.GetStockData=function(symbol)
771
- {
772
- if (!this.MapStockData) return null;
773
- if (!this.MapStockData.has(symbol)) return null;
774
-
775
- return this.MapStockData.get(symbol);
776
- }
777
-
778
- this.GetBlockData=function(symbol)
779
- {
780
- if (!this.BlockData) return null;
781
- if (!this.BlockData.has(symbol)) return null;
782
-
783
- return this.BlockData.get(symbol);
784
- }
785
-
786
- //delay=是否延迟
787
- this.DelayUpdateStockData=function()
788
- {
789
- if (this.DelayUpdateTimer!=null)
790
- {
791
- clearTimeout(this.DelayUpdateTimer);
792
- this.DelayUpdateTimer = null;
793
- }
794
-
795
- var frequency=this.DelayUpdateFrequency;
796
- this.DelayUpdateTimer=setTimeout(()=>
797
- {
798
- this.UpdateStockData();
799
-
800
- },frequency);
801
- }
802
-
803
- this.UpdateStockData=function()
804
- {
805
- if (!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return;
806
-
807
- var chart=this.ChartPaint[0];
808
- if (!chart) return;
809
-
810
- if (this.SortInfo && this.SortInfo.Field>=0 && this.SortInfo.Sort>0)
811
- {
812
- var column=chart.Column[this.SortInfo.Field];
813
- if (column.Sort==2)
814
- {
815
- this.RequestStockSortData(column, this.SortInfo.Field, this.SortInfo.Sort); //远程排序
816
- return;
817
- }
818
- }
819
-
820
- var arySymbol=chart.ShowSymbol;
821
- if (!IFrameSplitOperator.IsNonEmptyArray(arySymbol)) return;
822
- this.RequestStockData(arySymbol);
823
- }
824
-
825
- //下载股票数据
826
- this.RequestStockData=function(arySymbol)
827
- {
828
- var self=this;
829
- if (this.NetworkFilter)
830
- {
831
- var obj=
832
- {
833
- Name:'JSDealChartContainer::RequestStockData', //类名::函数名
834
- Explain:'报价列表股票数据',
835
- Request:{ Data: { stocks: arySymbol } },
836
- Self:this,
837
- PreventDefault:false
838
- };
839
-
840
- this.NetworkFilter(obj, function(data)
841
- {
842
- self.RecvStockData(data);
843
- self.AutoUpdate();
844
- });
845
-
846
- if (obj.PreventDefault==true) return;
847
- }
848
-
849
- throw { Name:'JSReportChartContainer::RequestStockData', Error:'(报价列表股票数据)不提供内置测试数据' };
850
- }
851
-
852
- this.RecvStockData=function(data)
853
- {
854
- var setUpdateSymbol=new Set(); //更新的股票列表
855
- if (IFrameSplitOperator.IsNonEmptyArray(data.data))
856
- {
857
- //0=证券代码 1=股票名称 2=昨收 3=开 4=高 5=低 6=收 7=成交量 8=成交金额, 9=买价 10=买量 11=卖价 12=卖量 13=均价 14=流通股 15=总股本
858
- for(var i=0;i<data.data.length;++i)
859
- {
860
- var item=data.data[i];
861
- var symbol=item[0];
862
- if (!symbol) continue;
863
- var stock=null;
864
- if (this.MapStockData.has(symbol))
865
- {
866
- stock=this.MapStockData.get(symbol);
867
- }
868
- else
869
- {
870
- stock=new HQReportItem();
871
- stock.OriginalSymbol=symbol;
872
- stock.Symbol=this.GetSymbolNoSuffix(symbol);
873
- this.MapStockData.set(symbol, stock);
874
- }
875
-
876
- this.ReadStockJsonData(stock, item);
877
-
878
- if (!setUpdateSymbol.has(symbol)) setUpdateSymbol.add(symbol);
879
- }
880
- }
881
-
882
- var chart=this.ChartPaint[0];
883
- if (!chart) return;
884
-
885
- //更新的股票在当前页面,需要重绘
886
- var bUpdate=false;
887
- var aryStock=chart.ShowSymbol;
888
- for(var i=0;i<aryStock.length;++i)
889
- {
890
- if (setUpdateSymbol.has(aryStock[i].Symbol))
891
- {
892
- bUpdate=true;
893
- break;
894
- }
895
- }
896
-
897
- if (bUpdate) this.Draw();
898
- }
899
-
900
- //读取单条股票json数据
901
- this.ReadStockJsonData=function(stock, item)
902
- {
903
- //0=证券代码 1=股票名称 2=昨收 3=开 4=高 5=低 6=收 7=成交量 8=成交金额, 9=买价 10=买量 11=卖价 12=卖量 13=均价 14=流通股 15=总股本 16=涨停价 17=跌停价
904
- //18=内盘 19=外盘 20=现量 21=涨幅% 22=涨跌 23=换手率% 24=振幅% 25=流通市值 26=总市值
905
- //30=全局扩展数据 31=当前板块扩展数据
906
-
907
- if (IFrameSplitOperator.IsString(item[1])) stock.Name=item[1];
908
- if (IFrameSplitOperator.IsNumber(item[2])) stock.YClose=item[2];
909
- if (IFrameSplitOperator.IsNumber(item[3])) stock.Open=item[3];
910
- if (IFrameSplitOperator.IsNumber(item[4])) stock.High=item[4];
911
- if (IFrameSplitOperator.IsNumber(item[5])) stock.Low=item[5];
912
- if (IFrameSplitOperator.IsNumber(item[6])) stock.Price=item[6];
913
- if (IFrameSplitOperator.IsNumber(item[7])) stock.Vol=item[7];
914
- if (IFrameSplitOperator.IsNumber(item[8])) stock.Amount=item[8];
915
-
916
- if (IFrameSplitOperator.IsNumber(item[9])) stock.BuyPrice=item[9];
917
- if (IFrameSplitOperator.IsNumber(item[10])) stock.BuyVol=item[10];
918
- if (IFrameSplitOperator.IsNumber(item[11])) stock.SellPrice=item[11];
919
- if (IFrameSplitOperator.IsNumber(item[12])) stock.SellVol=item[12];
920
- if (IFrameSplitOperator.IsNumber(item[13])) stock.AvPrice=item[13]; //均价
921
- if (IFrameSplitOperator.IsNumber(item[14])) stock.OutShares=item[14]; //流通股
922
- if (IFrameSplitOperator.IsNumber(item[15])) stock.TotalShares=item[15]; //总股本
923
- if (IFrameSplitOperator.IsNumber(item[16])) stock.LimitHigh=item[16]; //涨停价
924
- if (IFrameSplitOperator.IsNumber(item[17])) stock.LimitLow=item[17]; //跌停价
925
- if (IFrameSplitOperator.IsNumber(item[18])) stock.VolIn=item[18]; //内盘
926
- if (IFrameSplitOperator.IsNumber(item[19])) stock.VolOut=item[19]; //外盘
927
- if (IFrameSplitOperator.IsNumber(item[20])) stock.DealNum=item[20]; //现量
928
-
929
- if (IFrameSplitOperator.IsNumber(item[21])) stock.Increase=item[21]; //涨幅%
930
- if (IFrameSplitOperator.IsNumber(item[22])) stock.UpDown=item[22]; //涨跌
931
- if (IFrameSplitOperator.IsNumber(item[23])) stock.Exchange=item[23]; //换手率%
932
- if (IFrameSplitOperator.IsNumber(item[24])) stock.Amplitude=item[24]; //振幅%
933
- if (IFrameSplitOperator.IsNumber(item[25])) stock.CircMarketValue=item[25]; //流通市值
934
- if (IFrameSplitOperator.IsNumber(item[26])) stock.MarketValue=item[26]; //总市值
935
-
936
- //衍生数据计算
937
- if (!IFrameSplitOperator.IsNumber(item[21])) //涨幅%
938
- {
939
- if (IFrameSplitOperator.IsNumber(stock.Price) && IFrameSplitOperator.IsNumber(stock.YClose) && stock.YClose!=0)
940
- stock.Increase=(stock.Price-stock.YClose)/stock.YClose*100;
941
- }
942
-
943
- if (!IFrameSplitOperator.IsNumber(item[22])) //涨跌
944
- {
945
- if (IFrameSplitOperator.IsNumber(stock.Price) && IFrameSplitOperator.IsNumber(stock.YClose))
946
- stock.UpDown=stock.Price-stock.YClose;
947
- }
948
-
949
- if (!IFrameSplitOperator.IsNumber(item[23])) //换手率%
950
- {
951
- if (IFrameSplitOperator.IsNumber(stock.Vol) && IFrameSplitOperator.IsNumber(stock.OutShares) && stock.OutShares>0)
952
- stock.Exchange=stock.Vol/stock.OutShares*100;
953
- }
954
-
955
- if (!IFrameSplitOperator.IsNumber(item[24])) //振幅%
956
- {
957
- if (IFrameSplitOperator.IsNumber(stock.High) && IFrameSplitOperator.IsNumber(stock.Low) && IFrameSplitOperator.IsNumber(stock.YClose) && stock.YClose!=0)
958
- stock.Amplitude=(stock.High-stock.Low)/stock.YClose*100;
959
- }
960
-
961
- if (!IFrameSplitOperator.IsNumber(item[25])) //流通市值
962
- {
963
- if (IFrameSplitOperator.IsNumber(stock.OutShares) && IFrameSplitOperator.IsNumber(stock.Price))
964
- stock.CircMarketValue=stock.OutShares*stock.Price;
965
- }
966
-
967
- if (!IFrameSplitOperator.IsNumber(item[26])) //总市值
968
- {
969
- if (IFrameSplitOperator.IsNumber(stock.TotalShares) && IFrameSplitOperator.IsNumber(stock.Price))
970
- stock.MarketValue=stock.TotalShares*stock.Price;
971
- }
972
-
973
- if (item[30]) stock.ExtendData=item[30]; //30扩展数据
974
- if (item[31]) this.BlockData.set(stock.OriginalSymbol,item[31]); //31=当前板块数据
975
- if (item[32]) stock.CloseLine=item[32]; //32=收盘价线
976
- }
977
-
978
-
979
-
980
- this.GetSymbolNoSuffix=function(symbol)
981
- {
982
- var index=symbol.lastIndexOf(".");
983
- if (index>0)
984
- return symbol.substring(0,index);
985
- else
986
- return symbol;
987
- }
988
-
989
- this.CancelAutoUpdate=function() //关闭停止更新
990
- {
991
- if (this.AutoUpdateTimer)
992
- {
993
- clearTimeout(this.AutoUpdateTimer);
994
- this.AutoUpdateTimer = null;
995
- }
996
- }
997
-
998
- this.AutoUpdate=function(waitTime) //waitTime 更新时间
999
- {
1000
- this.CancelAutoUpdate();
1001
- if (!this.IsAutoUpdate) return;
1002
-
1003
- var self = this;
1004
- var marketStatus=2;
1005
- var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_REPORT_MARKET_STATUS);
1006
- if (event && event.Callback)
1007
- {
1008
- var sendData={ MarketStatus:2 };
1009
- event.Callback(event, sendData, this);
1010
- if (IFrameSplitOperator.IsNumber(sendData.MarketStatus)) marketStatus=sendData.MarketStatus;
1011
- }
1012
-
1013
- if (marketStatus==0 || marketStatus==3) return; //闭市,盘后
1014
-
1015
- var frequency=this.AutoUpdateFrequency;
1016
- if (marketStatus==1) //盘前
1017
- {
1018
- this.AutoUpdateTimer=setTimeout(function()
1019
- {
1020
- self.AutoUpdate();
1021
- },frequency);
1022
- }
1023
- else if (marketStatus==2) //盘中
1024
- {
1025
- this.AutoUpdateTimer=setTimeout(function()
1026
- {
1027
- self.UpdateStockData();
1028
- },frequency);
1029
- }
1030
- }
1031
-
1032
- this.StopAutoUpdate=function()
1033
- {
1034
- this.CancelAutoUpdate();
1035
- this.AutoUpdateEvent(false,'JSDealChartContainer::StopAutoUpdate');
1036
- if (!this.IsAutoUpdate) return;
1037
- this.IsAutoUpdate=false;
1038
- }
1039
-
1040
- //设置事件回调
1041
- //{event:事件id, callback:回调函数}
1042
- this.AddEventCallback=function(object)
1043
- {
1044
- if (!object || !object.event || !object.callback) return;
1045
-
1046
- var data={Callback:object.callback, Source:object};
1047
- this.mapEvent.set(object.event,data);
1048
- }
1049
-
1050
- this.RemoveEventCallback=function(eventid)
1051
- {
1052
- if (!this.mapEvent.has(eventid)) return;
1053
-
1054
- this.mapEvent.delete(eventid);
1055
- }
1056
-
1057
- this.GetEventCallback=function(id) //获取事件回调
1058
- {
1059
- if (!this.mapEvent.has(id)) return null;
1060
- var item=this.mapEvent.get(id);
1061
- return item;
1062
- }
1063
-
1064
- this.OnSize=function()
1065
- {
1066
- if (!this.Frame) return;
1067
-
1068
- this.SetSizeChange(true);
1069
- this.Draw();
1070
- this.DelayUpdateStockData();
1071
- }
1072
-
1073
- this.SetSizeChange=function(bChanged)
1074
- {
1075
- for(var i=0;i<this.ChartPaint.length;++i)
1076
- {
1077
- var chart=this.ChartPaint[i];
1078
- if (chart) chart.SizeChange=bChanged;
1079
- }
1080
- }
1081
-
1082
- //判断是单个手指
1083
- this.IsPhoneDragging=function(e)
1084
- {
1085
- // JSConsole.Chart.Log(e);
1086
- var changed=e.changedTouches.length;
1087
- var touching=e.touches.length;
1088
-
1089
- return changed==1 && touching==1;
1090
- }
1091
-
1092
- this.GetToucheData=function(e)
1093
- {
1094
- var touches=[];
1095
- for(var i=0; i<e.touches.length; ++i)
1096
- {
1097
- var item=e.touches[i];
1098
- touches.push( {clientX: item.x, clientY: item.y, pageX: item.x, pageY: item.y });
1099
- }
1100
-
1101
- return touches;
1102
- }
1103
-
1104
- this.GetMoveAngle=function(pt,pt2) //计算角度
1105
- {
1106
- var xMove=Math.abs(pt.X-pt2.X);
1107
- var yMove=Math.abs(pt.Y-pt2.Y);
1108
- var angle=Math.atan(xMove/yMove)*180/Math.PI;
1109
- return angle;
1110
- }
1111
-
1112
- this.PreventTouchEvent=function(e)
1113
- {
1114
-
1115
- }
1116
-
1117
- //手势事件
1118
- this.OnTouchStart=function(e)
1119
- {
1120
- if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash == true) return;
1121
- this.IsOnTouch=true;
1122
-
1123
- var reportChart=this.GetReportChart();
1124
- if (!reportChart) return;
1125
-
1126
- if (this.IsPhoneDragging(e))
1127
- {
1128
- var drag= { "Click":{}, "LastMove":{} }; //LastMove 最后移动的位置
1129
- var touches=this.GetToucheData(e);
1130
-
1131
- drag.Click.X=touches[0].clientX;
1132
- drag.Click.Y=touches[0].clientY;
1133
- drag.LastMove.X=touches[0].clientX;
1134
- drag.LastMove.Y=touches[0].clientY;
1135
- drag.IsXMove=false;
1136
- drag.IsYMove=false;
1137
-
1138
- if (reportChart.IsPtInBody(drag.Click.X,drag.Click.Y))
1139
- {
1140
- this.TouchDrag=drag;
1141
- }
1142
-
1143
- this.TouchInfo={ Click:{X:touches[0].clientX, Y:touches[0].clientY } };
1144
- this.PreventTouchEvent(e);
1145
- }
1146
- }
1147
-
1148
- this.OnDragYOffset=function(drag, touches, moveUpDown, e)
1149
- {
1150
- if (moveUpDown<5) return false
1151
-
1152
- var isUp=true;
1153
- if (drag.LastMove.Y<touches[0].clientY) isUp=false; //Down
1154
-
1155
- var oneStep=this.YStepPixel;
1156
- if (oneStep<=0) oneStep=5;
1157
-
1158
- var step=parseInt(moveUpDown/oneStep);
1159
- if (step<=0) return false
1160
-
1161
- if (isUp==false) step*=-1;
1162
-
1163
- if (this.MoveYOffset(step, this.DragPageCycle))
1164
- {
1165
- drag.IsYMove=true;
1166
- this.Draw();
1167
- this.DelayUpdateStockData();
1168
- }
1169
-
1170
- return true;
1171
- }
1172
-
1173
- this.OnDragXOffset=function(drag, touches, moveLeftRight, e)
1174
- {
1175
- if (moveLeftRight<5) return false;
1176
-
1177
- var isLeft=true;
1178
- if (drag.LastMove.X<touches[0].clientX) isLeft=false;//右移数据
1179
-
1180
- var oneStep=this.XStepPixel;
1181
- if (oneStep<=0) oneStep=5;
1182
-
1183
- var step=parseInt(moveLeftRight/oneStep); //除以4个像素
1184
- if (step<=0) return false;
1185
-
1186
- if (!isLeft) step*=-1;
1187
-
1188
- if (this.MoveXOffset(step))
1189
- {
1190
- drag.IsXMove=true;
1191
- this.Draw();
1192
- }
1193
-
1194
- return true;
1195
- }
1196
-
1197
- this.OnTouchMove=function(e)
1198
- {
1199
- if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash == true) return;
1200
-
1201
- var reportChart=this.GetReportChart();
1202
- if (!reportChart) return;
1203
-
1204
- var touches=this.GetToucheData(e);
1205
-
1206
- if (this.IsPhoneDragging(e))
1207
- {
1208
- var drag=this.TouchDrag;
1209
-
1210
- this.TouchInfo.Move={ X:touches[0].clientX, Y:touches[0].clientY };
1211
-
1212
- if (drag)
1213
- {
1214
- this.PreventTouchEvent(e);
1215
-
1216
- var moveAngle=this.GetMoveAngle(drag.LastMove,{X:touches[0].clientX, Y:touches[0].clientY});
1217
- var moveLeftRight=Math.abs(drag.LastMove.X-touches[0].clientX);
1218
- var moveUpDown=Math.abs(drag.LastMove.Y-touches[0].clientY);
1219
-
1220
-
1221
- if (drag.IsYMove==true)
1222
- {
1223
- this.ShowPageInfo(true);
1224
- if (!this.OnDragYOffset(drag, touches,moveUpDown, e)) return;
1225
- }
1226
- else if (drag.IsXMove==true)
1227
- {
1228
- if (!this.OnDragXOffset(drag, touches,moveLeftRight, e)) return;
1229
- }
1230
- else if (moveUpDown>0 && moveAngle<this.TouchMoveMinAngle)
1231
- {
1232
- this.ShowPageInfo(true);
1233
- if (!this.OnDragYOffset(drag, touches,moveUpDown, e)) return;
1234
- }
1235
- else if (moveLeftRight>0 && moveAngle>=this.TouchMoveMinAngle)
1236
- {
1237
- if (!this.OnDragXOffset(drag, touches,moveLeftRight, e)) return;
1238
- }
1239
- else
1240
- {
1241
- return;
1242
- }
1243
-
1244
- drag.LastMove.X=touches[0].clientX;
1245
- drag.LastMove.Y=touches[0].clientY;
1246
- }
1247
-
1248
- }
1249
- }
1250
-
1251
- this.OnTouchEnd=function(e)
1252
- {
1253
- JSConsole.Chart.Log('[JSReportChartContainer:OnTouchEnd]',e);
1254
- if (this.ChartSplashPaint && this.ChartSplashPaint.IsEnableSplash == true) return;
1255
-
1256
- this.ShowPageInfo(false);
1257
- this.OnTouchClick(this.TouchInfo, e);
1258
-
1259
- this.IsOnTouch=false;
1260
- this.TouchDrag=null;
1261
- this.TouchInfo=null;
1262
- }
1263
-
1264
- this.OnTouchClick=function(touchInfo, e)
1265
- {
1266
- if (!touchInfo || !touchInfo.Click) return false;
1267
- if (touchInfo.Move) return false;
1268
- var clickPoint=touchInfo.Click;
1269
- var reportChart=this.GetReportChart();
1270
- if (!reportChart) return false;
1271
-
1272
- var clickData=reportChart.OnMouseDown(clickPoint.X,clickPoint.Y,e);
1273
- if (!clickData) return false;
1274
-
1275
- if (clickData.Type==2 || clickData.Type==4) //点击行
1276
- {
1277
- if (clickData.Redraw==true)
1278
- this.Draw();
1279
- }
1280
- else if (clickData.Type==3) //表头
1281
- {
1282
- this.OnClickHeader(clickData, e);
1283
- }
1284
-
1285
- JSConsole.Chart.Log('[JSReportChartContainer:OnTouchClick] clickData', clickData);
1286
- }
1287
-
1288
- this.GetTabChart=function()
1289
- {
1290
- var chart=this.ChartPaint[0];
1291
- if (!chart) return null;
1292
-
1293
- return chart.Tab;
1294
- }
1295
-
1296
- this.GetReportChart=function()
1297
- {
1298
- var chart=this.ChartPaint[0];
1299
- return chart;
1300
- }
1301
-
1302
- this.GotoNextPage=function(bCycle) //bCycle 是否循环
1303
- {
1304
- if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return false;
1305
- var chart=this.ChartPaint[0];
1306
- if (!chart) return false;
1307
-
1308
- var pageSize=chart.GetPageSize();
1309
- if (pageSize>this.Data.Data.length) return false;
1310
- if (this.Data.YOffset+pageSize>=this.Data.Data.length)
1311
- {
1312
- if (bCycle===true)
1313
- {
1314
- this.Data.YOffset=0; //循环到第1页
1315
- return true;
1316
- }
1317
- else
1318
- {
1319
- return false;
1320
- }
1321
- }
1322
-
1323
- this.Data.YOffset+=pageSize;
1324
- var showDataCount=this.Data.Data.length-this.Data.YOffset;
1325
-
1326
- if (chart.SelectedModel==0)
1327
- {
1328
- if (chart.SelectedRow>showDataCount-1) chart.SelectedRow=showDataCount-1;
1329
- }
1330
-
1331
- return true;
1332
- }
1333
-
1334
- this.GotoPreviousPage=function(bCycle) //bCycle 是否循环
1335
- {
1336
- if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return false;
1337
- var chart=this.ChartPaint[0];
1338
- if (!chart) return false;
1339
- var pageSize=chart.GetPageSize();
1340
- if (pageSize>this.Data.Data.length) return false;
1341
-
1342
- if (this.Data.YOffset<=0)
1343
- {
1344
- if (bCycle===true)
1345
- {
1346
- this.Data.YOffset=this.Data.Data.length-pageSize; //循环到最后一页
1347
- return true;
1348
- }
1349
- else
1350
- {
1351
- return false;
1352
- }
1353
- }
1354
-
1355
- var offset=this.Data.YOffset;
1356
- offset-=pageSize;
1357
- if (offset<0) offset=0;
1358
- this.Data.YOffset=offset;
1359
- return true;
1360
- }
1361
-
1362
- this.MoveYOffset=function(setp, bCycle) //bCycle 是否循环
1363
- {
1364
- if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return false;
1365
- var chart=this.ChartPaint[0];
1366
- if (!chart) return false;
1367
-
1368
- var pageStatus=chart.GetCurrentPageStatus();
1369
- if (pageStatus.IsSinglePage) return false;
1370
-
1371
- if (setp>0) //向上
1372
- {
1373
- var count=this.Data.Data.length;
1374
- var pageSize=pageStatus.PageSize;
1375
- var offset=this.Data.YOffset;
1376
- if (bCycle)
1377
- {
1378
- for(var i=0;i<setp;++i)
1379
- {
1380
- ++offset;
1381
- if (offset+pageSize>count) offset=0;
1382
- }
1383
- }
1384
- else
1385
- {
1386
- if (offset+pageSize>=count) return false;
1387
-
1388
- for(var i=0;i<setp;++i)
1389
- {
1390
- if (offset+pageSize+1>count) break;
1391
- ++offset;
1392
- }
1393
- }
1394
-
1395
- this.Data.YOffset=offset;
1396
- return true;
1397
- }
1398
- else if (setp<0) //向下
1399
- {
1400
- setp=Math.abs(setp);
1401
- var offset=this.Data.YOffset;
1402
- if (bCycle)
1403
- {
1404
- var pageSize=pageStatus.PageSize;
1405
- for(var i=0;i<setp;++i)
1406
- {
1407
- --offset;
1408
- if (offset<0) offset=this.Data.Data.length-pageSize;
1409
- }
1410
- }
1411
- else
1412
- {
1413
- if (this.Data.YOffset<=0) return false;
1414
- for(var i=0;i<setp;++i)
1415
- {
1416
- if (offset-1<0) break;
1417
- --offset;
1418
- }
1419
- }
1420
-
1421
- this.Data.YOffset=offset;
1422
- return true;
1423
- }
1424
-
1425
- return false;
1426
- }
1427
-
1428
- this.MoveSelectedRow=function(step)
1429
- {
1430
- var chart=this.ChartPaint[0];
1431
- if (!chart) return null;
1432
- if (!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return null;
1433
-
1434
- var result={ Redraw:false, Update:false }; //Redraw=重绘, Update=更新数据
1435
-
1436
-
1437
- if (chart.SelectedModel==0) //不可翻页模式, 只能在当前页移动
1438
- {
1439
- var pageStatus=chart.GetCurrentPageStatus();
1440
- var pageSize=pageStatus.End-pageStatus.Start+1;
1441
- var selected=pageStatus.SelectedRow;
1442
- if (step>0)
1443
- {
1444
- selected+=step;
1445
- selected=selected%pageSize;
1446
- chart.SelectedRow=selected;
1447
- chart.SelectedFixedRow=-1;
1448
- result.Redraw=true;
1449
- return result;
1450
- }
1451
- else if (step<0)
1452
- {
1453
- selected+=step;
1454
- if (selected<0)
1455
- {
1456
- selected=selected%pageSize;
1457
- selected=pageSize+selected;
1458
- }
1459
-
1460
- chart.SelectedRow=selected;
1461
- chart.SelectedFixedRow=-1;
1462
- result.Redraw=true;
1463
- return result;
1464
- }
1465
- }
1466
- else if (chart.SelectedModel==1) //可翻页模式
1467
- {
1468
- var pageStatus=chart.GetCurrentPageStatus();
1469
- var pageSize=pageStatus.PageSize;
1470
- var selected=pageStatus.SelectedRow;
1471
- if (step>0)
1472
- {
1473
- if (selected<0 || selected<pageStatus.Start || selected>pageStatus.End)
1474
- {
1475
- chart.SelectedRow=pageStatus.Start;
1476
- result.Redraw=true;
1477
- return result;
1478
- }
1479
-
1480
- var offset=this.Data.YOffset;
1481
- for(var i=0;i<step;++i)
1482
- {
1483
- ++selected;
1484
- if (selected>pageStatus.End) ++offset;
1485
-
1486
- if (selected>=this.Data.Data.length)
1487
- {
1488
- selected=0;
1489
- offset=0;
1490
- }
1491
- }
1492
-
1493
- result.Redraw=true;
1494
- result.Update=(offset!=this.Data.YOffset);
1495
-
1496
- chart.SelectedRow=selected;
1497
- this.Data.YOffset=offset;
1498
-
1499
- return result;
1500
- }
1501
- else if (step<0)
1502
- {
1503
- if (selected<0 || selected<pageStatus.Start || selected>pageStatus.End)
1504
- {
1505
- chart.SelectedRow=pageStatus.End;
1506
- result.Redraw=true;
1507
- return result;
1508
- }
1509
-
1510
- step=Math.abs(step);
1511
- var offset=this.Data.YOffset;
1512
- for(var i=0;i<step;++i)
1513
- {
1514
- --selected;
1515
- if (selected<pageStatus.Start) --offset;
1516
-
1517
- if (selected<0)
1518
- {
1519
- selected=this.Data.Data.length-1;
1520
- offset=this.Data.Data.length-pageSize;
1521
- if (offset<0) offset=0;
1522
- }
1523
- }
1524
-
1525
- result.Redraw=true;
1526
- result.Update=(offset!=this.Data.YOffset);
1527
-
1528
- chart.SelectedRow=selected;
1529
- this.Data.YOffset=offset;
1530
-
1531
- return result;
1532
- }
1533
- }
1534
-
1535
- return null;
1536
- }
1537
-
1538
- //左右移动
1539
- this.MoveXOffset=function(step)
1540
- {
1541
- var chart=this.ChartPaint[0];
1542
- if (!chart) return false;
1543
- var maxOffset=chart.GetXScrollRange();
1544
- if (maxOffset<=0) return false;
1545
-
1546
- if (step>0)
1547
- {
1548
- if (this.Data.XOffset>=maxOffset) return false;
1549
- for(var i=0;i<step;++i)
1550
- {
1551
- if (this.Data.XOffset>=maxOffset) break;
1552
- ++this.Data.XOffset;
1553
- }
1554
-
1555
- return true;
1556
- }
1557
- else if (step<0)
1558
- {
1559
- if (this.Data.XOffset<=0) return false;
1560
- step=Math.abs(step);
1561
- for(var i=0;i<step;++i)
1562
- {
1563
- if (this.Data.XOffset-1<0) break;
1564
- --this.Data.XOffset;
1565
- }
1566
- return true;
1567
- }
1568
-
1569
- return false;
1570
- }
1571
-
1572
- this.SetXOffset=function(pos)
1573
- {
1574
- if (!IFrameSplitOperator.IsNumber(pos)) return false;
1575
-
1576
- var chart=this.ChartPaint[0];
1577
- if (!chart) return false;
1578
- var maxOffset=chart.GetXScrollRange();
1579
- if (pos<0) pos=0;
1580
- if (pos>maxOffset) pos=maxOffset;
1581
-
1582
- this.Data.XOffset=pos;
1583
-
1584
- return true;
1585
- }
1586
-
1587
- this.GotoLastPage=function()
1588
- {
1589
- var chart=this.ChartPaint[0];
1590
- if (!chart) return;
1591
-
1592
- //显示最后一屏
1593
- var pageSize=chart.GetPageSize(true);
1594
- var offset=this.Data.Data.length-pageSize;
1595
- if (offset<0) offset=0;
1596
- this.Data.DataOffset=offset;
1597
- }
1598
-
1599
- this.SetColumn=function(aryColunm, option)
1600
- {
1601
- var chart=this.ChartPaint[0];
1602
- if (!chart) return;
1603
-
1604
- chart.SetColumn(aryColunm);
1605
- chart.SizeChange=true;
1606
-
1607
- if (option && option.Redraw) this.Draw();
1608
- }
1609
-
1610
- this.SetTab=function(aryTab, option)
1611
- {
1612
- var chart=this.ChartPaint[0];;
1613
- if (!chart) return;
1614
-
1615
- var chartTab=chart.Tab;
1616
- if (!chartTab) return;
1617
-
1618
- chartTab.SetTabList(aryTab);
1619
-
1620
- if (option && option.Redraw) this.Draw();
1621
- }
1622
-
1623
- this.SetSelectedTab=function(index, opiton)
1624
- {
1625
- var chart=this.ChartPaint[0];;
1626
- if (!chart) return;
1627
-
1628
- var chartTab=chart.Tab;
1629
- if (!chartTab) return;
1630
-
1631
- chartTab.SelectedTabIndex=index;
1632
- }
1633
-
1634
- this.ReloadResource=function(option)
1635
- {
1636
- this.Frame.ReloadResource(option);
1637
-
1638
- for(var i=0;i<this.ChartPaint.length;++i)
1639
- {
1640
- var item=this.ChartPaint[i];
1641
- if (item.ReloadResource) item.ReloadResource(option);
1642
- }
1643
-
1644
- if (option && option.Redraw)
1645
- {
1646
- this.SetSizeChange(true);
1647
- this.Draw();
1648
- }
1649
- }
1650
-
1651
- //点表头
1652
- this.OnClickHeader=function(clickData, e)
1653
- {
1654
- var header=clickData.Header;
1655
- if (header.Column && (header.Column.Sort==1 || header.Column.Sort==2))
1656
- {
1657
- var index=header.Index;
1658
- var sortInfo={Field:this.SortInfo.Field, Sort:this.SortInfo.Sort };
1659
- var arySortType=header.Column.SortType;
1660
- if (sortInfo.Field!=index)
1661
- {
1662
- sortInfo.Field=index;
1663
- sortInfo.Sort=arySortType[0]
1664
- }
1665
- else
1666
- {
1667
- if (arySortType.length==1)
1668
- {
1669
- sortInfo.Sort=arySortType[0];
1670
- }
1671
- else
1672
- {
1673
- for(var i=0;i<arySortType.length;++i)
1674
- {
1675
- if (sortInfo.Sort==arySortType[i])
1676
- {
1677
- sortInfo.Sort=arySortType[(i+1)%arySortType.length];
1678
- break;
1679
- }
1680
- }
1681
- }
1682
- }
1683
-
1684
- if (header.Column.Sort==1 || header.Column.Sort==2)
1685
- {
1686
- if (sortInfo.Sort==0)
1687
- {
1688
- this.Data.Data=[];
1689
- for(var i=0;i<this.SourceData.Data.length;++i)
1690
- {
1691
- this.Data.Data.push(this.SourceData.Data[i]);
1692
- }
1693
- }
1694
- else
1695
- {
1696
- if (header.Column.Sort==1) //本地排序
1697
- {
1698
- var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_REPORT_LOCAL_SORT);
1699
- if (event && event.Callback)
1700
- {
1701
- var sendData={ Column:header.Column, SortInfo:sortInfo, SymbolList:this.Data.Data, Result:null };
1702
- event.Callback (event, sendData, this);
1703
- if (Array.isArray(sendData.Result)) this.Data.Data=sendData.Result;
1704
- }
1705
- else
1706
- {
1707
- this.Data.Data.sort((left, right)=> { return this.LocalSort(left, right, header.Column, sortInfo.Sort); });
1708
- }
1709
- }
1710
- else if (header.Column.Sort==2) //远程排序
1711
- {
1712
- if (!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return;
1713
-
1714
- this.SortInfo.Field=sortInfo.Field;
1715
- this.SortInfo.Sort=sortInfo.Sort;
1716
- this.Data.YOffset=0;
1717
- this.ResetReportSelectStatus();
1718
- this.RequestStockSortData(header.Column, sortInfo.Field, sortInfo.Sort); //远程排序
1719
- return;
1720
- }
1721
- }
1722
-
1723
- this.Data.YOffset=0;
1724
- this.ResetReportSelectStatus();
1725
- this.SortInfo.Field=sortInfo.Field;
1726
- this.SortInfo.Sort=sortInfo.Sort;
1727
- this.Draw();
1728
- this.DelayUpdateStockData();
1729
- }
1730
- }
1731
- }
1732
-
1733
- //点击标签
1734
- this.OnClickTab=function(tabData, e)
1735
- {
1736
- if (!tabData.Tab) return;
1737
-
1738
- var redraw=false;
1739
- var pixelTatio = GetDevicePixelRatio();
1740
- var x = (e.clientX-this.UIElement.getBoundingClientRect().left)*pixelTatio;
1741
- var y = (e.clientY-this.UIElement.getBoundingClientRect().top)*pixelTatio;
1742
-
1743
- if (tabData.Tab.IsMenu)
1744
- {
1745
- var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_REPORT_TABMENU);
1746
- if (event && event.Callback)
1747
- {
1748
- redraw=true;
1749
- var rtItem=tabData.Rect;
1750
- var rtDOM={ Left: rtItem.Left/pixelTatio, Right:rtItem.Right/pixelTatio, Top:rtItem.Top/pixelTatio, Bottom:rtItem.Bottom/pixelTatio };
1751
-
1752
- var sendData={ Data:tabData, IsSide:{X:x, Y:x}, Rect:rtDOM, e:e , Redraw:redraw };
1753
- event.Callback(event, sendData, this);
1754
- if (IFrameSplitOperator.IsBool(sendData.Redraw)) redraw=sendData.Redraw;
1755
- }
1756
-
1757
- this.SetSelectedTab(tabData.Index); //选中tab
1758
- }
1759
- else
1760
- {
1761
- var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CLICK_REPORT_TAB);
1762
- if (event && event.Callback)
1763
- {
1764
- var sendData={ Data:tabData, IsSide:{X:x, Y:x}, e:e , Redraw:redraw };
1765
- event.Callback(event, sendData, this);
1766
- if (IFrameSplitOperator.IsBool(sendData.Redraw)) redraw=sendData.Redraw;
1767
- }
1768
-
1769
- this.SetSelectedTab(tabData.Index);
1770
- }
1771
-
1772
- if (redraw) this.Draw();
1773
- }
1774
-
1775
- //本地排序
1776
- this.LocalSort=function(left, right, column, sortType)
1777
- {
1778
- switch(column.Type)
1779
- {
1780
- case REPORT_COLUMN_ID.SYMBOL_ID:
1781
- case REPORT_COLUMN_ID.NAME_ID:
1782
- return this.LocalStringSort(left, right, column, sortType);
1783
- case REPORT_COLUMN_ID.PRICE_ID:
1784
- case REPORT_COLUMN_ID.VOL_ID:
1785
- case REPORT_COLUMN_ID.INCREASE_ID:
1786
- case REPORT_COLUMN_ID.UPDOWN_ID:
1787
- case REPORT_COLUMN_ID.BUY_PRICE_ID:
1788
- case REPORT_COLUMN_ID.SELL_PRICE_ID:
1789
- case REPORT_COLUMN_ID.AMOUNT_ID:
1790
- case REPORT_COLUMN_ID.BUY_VOL_ID:
1791
- case REPORT_COLUMN_ID.SELL_VOL_ID:
1792
- case REPORT_COLUMN_ID.YCLOSE_ID:
1793
- case REPORT_COLUMN_ID.OPEN_ID:
1794
- case REPORT_COLUMN_ID.HIGH_ID:
1795
- case REPORT_COLUMN_ID.LOW_ID:
1796
- case REPORT_COLUMN_ID.AVERAGE_PRICE_ID:
1797
-
1798
- case REPORT_COLUMN_ID.OUTSTANDING_SHARES_ID:
1799
- case REPORT_COLUMN_ID.TOTAL_SHARES_ID:
1800
- case REPORT_COLUMN_ID.CIRC_MARKET_VALUE_ID:
1801
- case REPORT_COLUMN_ID.MARKET_VALUE_ID:
1802
-
1803
- case REPORT_COLUMN_ID.EXCHANGE_RATE_ID:
1804
- case REPORT_COLUMN_ID.AMPLITUDE_ID:
1805
-
1806
- case REPORT_COLUMN_ID.LIMIT_HIGH_ID:
1807
- case REPORT_COLUMN_ID.LIMIT_LOW_ID:
1808
-
1809
- case REPORT_COLUMN_ID.VOL_IN_ID:
1810
- case REPORT_COLUMN_ID.VOL_OUT_ID:
1811
-
1812
- return this.LocalNumberSort(left, right, column, sortType);
1813
- case REPORT_COLUMN_ID.CUSTOM_NUMBER_TEXT_ID: //自定义数值字段
1814
- return this.LoacCustomNumberSort(left, right, column, sortType);
1815
- case REPORT_COLUMN_ID.CUSTOM_STRING_TEXT_ID: //自定义字符串字段
1816
- return this.LoacCustomStringSort(left, right, column, sortType);
1817
- case REPORT_COLUMN_ID.CUSTOM_DATETIME_TEXT_ID:
1818
- return this.LoacCustomDateTimeSort(left, right, column, sortType);
1819
- default:
1820
- return 0;
1821
- }
1822
- }
1823
-
1824
- this.GetStockExtendData=function(symbol,column)
1825
- {
1826
- if (IFrameSplitOperator.IsNumber(column.DataIndex))
1827
- {
1828
- if (column.DataIndex<0) return null;
1829
- var stock=this.GetStockData(symbol);
1830
- if (!stock || !stock.ExtendData) return null;
1831
-
1832
- return stock.ExtendData[column.DataIndex];
1833
- }
1834
-
1835
- if (IFrameSplitOperator.IsNumber(column.BlockIndex))
1836
- {
1837
- if (column.BlockIndex<0) return null;
1838
- var stock=this.GetBlockData(symbol);
1839
- if (!stock) return null;
1840
-
1841
- return stock[column.BlockIndex];
1842
- }
1843
-
1844
- return null;
1845
- }
1846
-
1847
- this.LocalStringSort=function(left, right, column, sortType)
1848
- {
1849
- var leftStock=this.GetStockData(left);
1850
- var rightStock=this.GetStockData(right);
1851
-
1852
- var leftValue="", rightValue="";
1853
- if (sortType==2)
1854
- {
1855
- leftValue="啊啊啊啊啊";
1856
- rightValue="啊啊啊啊啊";
1857
- }
1858
-
1859
- var filedName=MAP_COLUMN_FIELD.get(column.Type);
1860
- if (leftStock && leftStock[filedName]) leftValue=leftStock[filedName];
1861
- if (rightStock && rightStock[filedName]) rightValue=rightStock[filedName];
1862
-
1863
- if (sortType==1)
1864
- {
1865
- if (rightValue<leftValue) return -1;
1866
- else if (rightValue<leftValue) return 1;
1867
- else return 0;
1868
- }
1869
- else
1870
- {
1871
- if (leftValue<rightValue) return -1;
1872
- else if (leftValue>rightValue) return 1;
1873
- else return 0;
1874
- }
1875
- }
1876
-
1877
- this.LocalNumberSort=function(left, right, column, sortType)
1878
- {
1879
- var leftStock=this.GetStockData(left);
1880
- var rightStock=this.GetStockData(right);
1881
-
1882
- var leftValue=-99999999999999, rightValue=-99999999999999;
1883
- if (sortType==2) leftValue=rightValue=99999999999999;
1884
-
1885
- var filedName=MAP_COLUMN_FIELD.get(column.Type);
1886
- if (leftStock && IFrameSplitOperator.IsNumber(leftStock[filedName])) leftValue=leftStock[filedName];
1887
- if (rightStock && IFrameSplitOperator.IsNumber(rightStock[filedName])) rightValue=rightStock[filedName];
1888
-
1889
- if (sortType==1)
1890
- {
1891
- if (rightValue<leftValue) return -1;
1892
- else if (rightValue<leftValue) return 1;
1893
- else return 0;
1894
- }
1895
- else
1896
- {
1897
- if (leftValue<rightValue) return -1;
1898
- else if (leftValue>rightValue) return 1;
1899
- else return 0;
1900
- }
1901
- }
1902
-
1903
- this.LoacCustomNumberSort=function(left, right, column, sortType)
1904
- {
1905
- var leftValue=-99999999999999, rightValue=-99999999999999;
1906
- if (sortType==2) leftValue=rightValue=99999999999999;
1907
-
1908
- var value=this.GetStockExtendData(left, column);
1909
- if (IFrameSplitOperator.IsNumber(value)) leftValue=value;
1910
-
1911
- var value=this.GetStockExtendData(right, column);
1912
- if (IFrameSplitOperator.IsNumber(value)) rightValue=value;
1913
-
1914
- if (sortType==1)
1915
- {
1916
- if (rightValue<leftValue) return -1;
1917
- else if (rightValue<leftValue) return 1;
1918
- else return 0;
1919
- }
1920
- else
1921
- {
1922
- if (leftValue<rightValue) return -1;
1923
- else if (leftValue>rightValue) return 1;
1924
- else return 0;
1925
- }
1926
- }
1927
-
1928
- this.LoacCustomDateTimeSort=function(left, right, column, sortType)
1929
- {
1930
- var leftValue=-99999999999999, rightValue=-99999999999999;
1931
- if (sortType==2) leftValue=rightValue=99999999999999;
1932
-
1933
- var value=this.GetStockExtendData(left, column);
1934
- if (IFrameSplitOperator.IsNumber(value)) leftValue=value;
1935
-
1936
- var value=this.GetStockExtendData(right, column);
1937
- if (IFrameSplitOperator.IsNumber(value)) rightValue=value;
1938
-
1939
- if (sortType==1)
1940
- {
1941
- if (rightValue<leftValue) return -1;
1942
- else if (rightValue<leftValue) return 1;
1943
- else return 0;
1944
- }
1945
- else
1946
- {
1947
- if (leftValue<rightValue) return -1;
1948
- else if (leftValue>rightValue) return 1;
1949
- else return 0;
1950
- }
1951
- }
1952
-
1953
- this.RequestStockSortData=function(column, filedid, sortType)
1954
- {
1955
- var chart=this.ChartPaint[0];
1956
- if (!chart) return;
1957
-
1958
- var self=this;
1959
- var startIndex=this.Data.YOffset;
1960
- var pageSize=chart.GetPageSize();
1961
- var endIndex=startIndex+pageSize;
1962
- if (endIndex>=this.Data.Data.length) endIndex=this.Data.Data.length-1;
1963
-
1964
- if (this.NetworkFilter)
1965
- {
1966
- var obj=
1967
- {
1968
- Name:'JSDealChartContainer::RequestStockSortData', //类名::函数名
1969
- Explain:'报价列表股票排序数据',
1970
- Request:
1971
- {
1972
- Data:
1973
- {
1974
- range:{ start:startIndex, end:endIndex, count:this.Data.Data.length },
1975
- column:{ name: column.Title, type: column.Type, index:filedid , ID:column.ID},
1976
- sort:sortType, symbol:this.Symbol, name:this.Name,
1977
- pageSize:pageSize
1978
- }
1979
- },
1980
- Self:this,
1981
- PreventDefault:false
1982
- };
1983
-
1984
- if (chart.FixedRowCount>0 && chart.FixedRowData.Type==1)
1985
- {
1986
- var arySymbol=[];
1987
- for(var i=0;i<chart.FixedRowData.Symbol.length;++i)
1988
- {
1989
- var item=chart.FixedRowData.Symbol[i];
1990
- if (item) arySymbol.push(item);
1991
- }
1992
-
1993
- obj.Request.FixedSymbol=arySymbol;
1994
- }
1995
-
1996
- this.NetworkFilter(obj, function(data)
1997
- {
1998
- self.RecvStockSortData(data);
1999
- self.AutoUpdate();
2000
- });
2001
-
2002
- if (obj.PreventDefault==true) return;
2003
- }
2004
-
2005
- throw { Name:'JSReportChartContainer::RequestStockSortData', Error:'(报价列表股票排序数据)不提供内置测试数据' };
2006
- }
2007
-
2008
- this.RecvStockSortData=function(data)
2009
- {
2010
- //更新股票数据
2011
- var arySymbol=[];
2012
- if (IFrameSplitOperator.IsNonEmptyArray(data.data))
2013
- {
2014
- for(var i=0;i<data.data.length;++i)
2015
- {
2016
- var item=data.data[i]; //数据
2017
- var symbol=item[0];
2018
- if (!symbol) continue;
2019
- var stock=null;
2020
- if (this.MapStockData.has(symbol))
2021
- {
2022
- stock=this.MapStockData.get(symbol);
2023
- }
2024
- else
2025
- {
2026
- stock=new HQReportItem();
2027
- stock.OriginalSymbol=symbol;
2028
- stock.Symbol=this.GetSymbolNoSuffix(symbol);
2029
- this.MapStockData.set(symbol, stock);
2030
- }
2031
-
2032
- this.ReadStockJsonData(stock, item);
2033
-
2034
- arySymbol.push(symbol);
2035
- }
2036
- }
2037
-
2038
- //更新股票顺序
2039
- if (IFrameSplitOperator.IsNonEmptyArray(data.index))
2040
- {
2041
- for(var i=0;i<data.index.length;++i)
2042
- {
2043
- var index=data.index[i];
2044
- var newSymbol=arySymbol[i];
2045
- var oldSymbol=this.Data.Data[index];
2046
- if (newSymbol==oldSymbol) continue;
2047
- this.Data.Data[index]=newSymbol;
2048
- }
2049
- }
2050
-
2051
- var chart=this.ChartPaint[0];
2052
- if (!chart) return;
2053
-
2054
- //更新的股票在当前页面,需要重绘
2055
- var bUpdate=true;
2056
- if (bUpdate) this.Draw();
2057
- }
2058
-
2059
- //底部标签
2060
- this.ShowPageInfo=function(bShow)
2061
- {
2062
- var chart=this.ChartPaint[1];
2063
- if (!chart) return false;
2064
-
2065
- chart.IsShow=bShow;
2066
-
2067
- return true;
2068
- }
2069
- }
2070
-
2071
- function JSReportFrame()
2072
- {
2073
- this.ChartBorder;
2074
- this.Canvas; //画布
2075
-
2076
- this.BorderLine=null; //1=上 2=下 4=左 8=右
2077
-
2078
- this.BorderColor=g_JSChartResource.Report.BorderColor; //边框线
2079
-
2080
- this.LogoTextColor=g_JSChartResource.FrameLogo.TextColor;
2081
- this.LogoTextFont=g_JSChartResource.FrameLogo.Font;
2082
-
2083
- this.ReloadResource=function(resource)
2084
- {
2085
- this.BorderColor=g_JSChartResource.Report.BorderColor; //边框线
2086
- this.LogoTextColor=g_JSChartResource.FrameLogo.TextColor;
2087
- this.LogoTextFont=g_JSChartResource.FrameLogo.Font;
2088
- }
2089
-
2090
- this.Draw=function()
2091
- {
2092
- var left=ToFixedPoint(this.ChartBorder.GetLeft());
2093
- var top=ToFixedPoint(this.ChartBorder.GetTop());
2094
- var right=ToFixedPoint(this.ChartBorder.GetRight());
2095
- var bottom=ToFixedPoint(this.ChartBorder.GetBottom());
2096
- var width=right-left;
2097
- var height=bottom-top;
2098
-
2099
- if (!IFrameSplitOperator.IsNumber(this.BorderLine))
2100
- {
2101
- this.Canvas.strokeStyle=this.BorderColor;
2102
- this.Canvas.strokeRect(left,top,width,height);
2103
- }
2104
- else
2105
- {
2106
- this.Canvas.strokeStyle=this.BorderColor;
2107
- this.Canvas.beginPath();
2108
-
2109
- if ((this.BorderLine&1)>0) //上
2110
- {
2111
- this.Canvas.moveTo(left,top);
2112
- this.Canvas.lineTo(right,top);
2113
- }
2114
-
2115
- if ((this.BorderLine&2)>0) //下
2116
- {
2117
- this.Canvas.moveTo(left,bottom);
2118
- this.Canvas.lineTo(right,bottom);
2119
- }
2120
-
2121
- if ((this.BorderLine&4)>0) //左
2122
- {
2123
- this.Canvas.moveTo(left,top);
2124
- this.Canvas.lineTo(left,bottom);
2125
- }
2126
-
2127
- if ((this.BorderLine&8)>0) //右
2128
- {
2129
- this.Canvas.moveTo(right,top);
2130
- this.Canvas.lineTo(right,bottom);
2131
- }
2132
-
2133
- this.Canvas.stroke();
2134
- }
2135
- }
2136
-
2137
- this.DrawLogo=function()
2138
- {
2139
- var text=g_JSChartResource.FrameLogo.Text;
2140
- if (!IFrameSplitOperator.IsString(text)) return;
2141
-
2142
- this.Canvas.fillStyle=this.LogoTextColor;
2143
- this.Canvas.font=this.LogoTextFont;
2144
- this.Canvas.textAlign = 'right';
2145
- this.Canvas.textBaseline = 'bottom';
2146
-
2147
- var x=this.ChartBorder.GetRight()-10;
2148
- var y=this.ChartBorder.GetBottom()-5;
2149
- this.Canvas.fillText(text,x,y);
2150
- }
2151
- }
2152
-
2153
- var REPORT_COLUMN_ID=
2154
- {
2155
- SYMBOL_ID:0,
2156
- NAME_ID:1,
2157
- PRICE_ID:2, //成交价格
2158
- VOL_ID:3, //成交量
2159
- INCREASE_ID:4, //涨幅
2160
- UPDOWN_ID:5, //涨跌
2161
- BUY_PRICE_ID:6, //买价
2162
- SELL_PRICE_ID:7, //卖价
2163
- AMOUNT_ID:8, //总金额
2164
- BUY_VOL_ID:9, //买量
2165
- SELL_VOL_ID:10, //卖量
2166
- YCLOSE_ID:11, //昨收
2167
- OPEN_ID:12,
2168
- HIGH_ID:13,
2169
- LOW_ID:14,
2170
- AVERAGE_PRICE_ID:15,//均价
2171
- INDEX_ID:16, //序号 从1开始
2172
-
2173
- OUTSTANDING_SHARES_ID:17, //流通股本
2174
- TOTAL_SHARES_ID:18, //总股本
2175
- CIRC_MARKET_VALUE_ID:19, //流通市值
2176
- MARKET_VALUE_ID:20, //总市值
2177
-
2178
- EXCHANGE_RATE_ID:21, //换手率 成交量/流通股本
2179
- AMPLITUDE_ID:22, //振幅
2180
-
2181
- LIMIT_HIGH_ID:23, //涨停价
2182
- LIMIT_LOW_ID:24, //跌停价
2183
-
2184
- VOL_IN_ID:25,
2185
- VOL_OUT_ID:26,
2186
-
2187
- CLOSE_LINE_ID:28, //收盘价线
2188
-
2189
- SYMBOL_NAME_ID:99,
2190
-
2191
- CUSTOM_STRING_TEXT_ID:100, //自定义字符串文本
2192
- CUSTOM_NUMBER_TEXT_ID:101, //自定义数值型
2193
- CUSTOM_DATETIME_TEXT_ID:102 //自定义日期类型
2194
- };
2195
-
2196
- var MAP_COLUMN_FIELD=new Map([
2197
- [REPORT_COLUMN_ID.SYMBOL_ID, "Symbol"],
2198
- [REPORT_COLUMN_ID.NAME_ID, "Name"],
2199
- [REPORT_COLUMN_ID.PRICE_ID, "Price"],
2200
- [REPORT_COLUMN_ID.INCREASE_ID, "Increase"],
2201
- [REPORT_COLUMN_ID.UPDOWN_ID, "UpDown"],
2202
- [REPORT_COLUMN_ID.VOL_ID, "Vol"],
2203
- [REPORT_COLUMN_ID.BUY_PRICE_ID, "BuyPrice"],
2204
- [REPORT_COLUMN_ID.SELL_PRICE_ID, "SellPrice"],
2205
- [REPORT_COLUMN_ID.AMOUNT_ID, "Amount"],
2206
- [REPORT_COLUMN_ID.BUY_VOL_ID, "BuyVol"],
2207
- [REPORT_COLUMN_ID.SELL_VOL_ID, "SellVol"],
2208
- [REPORT_COLUMN_ID.YCLOSE_ID, "YClose"],
2209
- [REPORT_COLUMN_ID.OPEN_ID, "Open"],
2210
- [REPORT_COLUMN_ID.HIGH_ID, "High"],
2211
- [REPORT_COLUMN_ID.LOW_ID, "Low"],
2212
- [REPORT_COLUMN_ID.AVERAGE_PRICE_ID,"AvPrice"],
2213
-
2214
- [REPORT_COLUMN_ID.OUTSTANDING_SHARES_ID,"OutShares"],
2215
- [REPORT_COLUMN_ID.TOTAL_SHARES_ID,"TotalShares"],
2216
- [REPORT_COLUMN_ID.CIRC_MARKET_VALUE_ID,"CircMarketValue"],
2217
- [REPORT_COLUMN_ID.MARKET_VALUE_ID,"MarketValue"],
2218
-
2219
- [REPORT_COLUMN_ID.EXCHANGE_RATE_ID, "Exchange"],
2220
- [REPORT_COLUMN_ID.AMPLITUDE_ID, "Amplitude"],
2221
-
2222
- [REPORT_COLUMN_ID.LIMIT_HIGH_ID, "LimitHigh"],
2223
- [REPORT_COLUMN_ID.LIMIT_LOW_ID,"LimitLow"],
2224
-
2225
- [REPORT_COLUMN_ID.VOL_IN_ID, "VolIn"],
2226
- [REPORT_COLUMN_ID.VOL_OUT_ID,"VolOut"],
2227
- ]);
2228
-
2229
- function ChartReport()
2230
- {
2231
- this.Canvas; //画布
2232
- this.ChartBorder; //边框信息
2233
- this.ChartFrame; //框架画法
2234
- this.Name; //名称
2235
- this.ClassName='ChartReport'; //类名
2236
- this.IsDrawFirst=false;
2237
- this.GetEventCallback; //获取事件
2238
- this.GetStockDataCallback; //获取股票数据
2239
- this.GetBlockDataCallback; //获取当前板块的数据
2240
- this.Data; //数据 { XOffset:0, YOffset:0, Data:['600000.sh', '000001.sz'] }
2241
- this.FixedRowData; //固定行
2242
- this.SortInfo; //排序信息 {Field:排序字段id, Sort:0 不排序 1升序 2降序 }
2243
- this.FixedColumn=2; //固定列
2244
- this.FixedRowCount=0; //固定行
2245
-
2246
- this.IsShowHeader=true; //是否显示表头
2247
- this.SizeChange=true;
2248
-
2249
- this.SelectedModel=0; //选中模式 0=SelectedRow表示当前屏索引
2250
- this.SelectedRow=-1; //选中行ID
2251
- this.SelectedFixedRow=-1; //选中固定行ID
2252
- this.IsDrawBorder=1; //是否绘制单元格边框
2253
-
2254
- this.ShowSymbol=[]; //显示的股票列表 { Index:序号(排序用), Symbol:股票代码 }
2255
-
2256
- //涨跌颜色
2257
- this.UpColor=g_JSChartResource.Report.UpTextColor;
2258
- this.DownColor=g_JSChartResource.Report.DownTextColor;
2259
- this.UnchagneColor=g_JSChartResource.Report.UnchagneTextColor;
2260
-
2261
- this.BorderColor=g_JSChartResource.Report.BorderColor; //边框线
2262
- this.SelectedColor=g_JSChartResource.Report.SelectedColor; //选中行
2263
-
2264
- //表头配置
2265
- this.HeaderFontConfig={ Size:g_JSChartResource.Report.Header.Font.Size, Name:g_JSChartResource.Report.Header.Font.Name };
2266
- this.HeaderColor=g_JSChartResource.Report.Header.Color;
2267
- this.SortColor=g_JSChartResource.Report.Header.SortColor; //排序箭头颜色
2268
- this.HeaderMergin=
2269
- {
2270
- Left:g_JSChartResource.Report.Header.Mergin.Left,
2271
- Right:g_JSChartResource.Report.Header.Mergin.Right,
2272
- Top:g_JSChartResource.Report.Header.Mergin.Top,
2273
- Bottom:g_JSChartResource.Report.Header.Mergin.Bottom
2274
- };
2275
-
2276
- //表格内容配置
2277
- this.ItemFontConfig={ Size:g_JSChartResource.Report.Item.Font.Size, Name:g_JSChartResource.Report.Item.Font.Name };
2278
- this.ItemFixedFontConfg={ Size:g_JSChartResource.Report.FixedItem.Font.Size, Name:g_JSChartResource.Report.FixedItem.Font.Name }; //固定行
2279
- this.ItemMergin=
2280
- {
2281
- Left:g_JSChartResource.Report.Item.Mergin.Left,
2282
- Right:g_JSChartResource.Report.Item.Mergin.Right,
2283
- Top:g_JSChartResource.Report.Item.Mergin.Top,
2284
- Bottom:g_JSChartResource.Report.Item.Mergin.Bottom
2285
- };
2286
- this.BarMergin=
2287
- {
2288
- Top:g_JSChartResource.Report.Item.BarMergin.Top,
2289
- Left:g_JSChartResource.Report.Item.BarMergin.Left,
2290
- Right:g_JSChartResource.Report.Item.BarMergin.Right,
2291
- Bottom:g_JSChartResource.Report.Item.BarMergin.Bottom
2292
- };
2293
-
2294
- this.LimitBorderColor=g_JSChartResource.Report.LimitBorder.Color;
2295
- this.LimitMergin=
2296
- {
2297
- Top:g_JSChartResource.Report.LimitBorder.Mergin.Top,
2298
- Left:g_JSChartResource.Report.LimitBorder.Mergin.Left,
2299
- Right:g_JSChartResource.Report.LimitBorder.Mergin.Right,
2300
- Bottom:g_JSChartResource.Report.LimitBorder.Mergin.Bottom
2301
- }
2302
-
2303
- //股票代码+股票名称
2304
- this.ItemSymbolFontConfig={Size:g_JSChartResource.Report.Item.SymbolFont.Size, Name:g_JSChartResource.Report.Item.SymbolFont.Name};
2305
- this.ItemNameFontConfg={Size:g_JSChartResource.Report.Item.NameFont.Size, Name:g_JSChartResource.Report.Item.NameFont.Name};
2306
-
2307
- //缓存
2308
- this.HeaderFont="12px 微软雅黑";
2309
- this.ItemFont="15px 微软雅黑";
2310
- this.ItemFixedFont="15px 微软雅黑";
2311
- this.ItemSymbolFont="12px 微软雅黑";
2312
- this.ItemNameFont="15px 微软雅黑";
2313
- this.ItemNameHeight=0;
2314
- this.RowCount=0; //一屏显示行数
2315
- this.HeaderHeight=0; //表头高度
2316
- this.FixedRowHeight=0; //固定行高度
2317
- this.RowHeight=0; //行高度
2318
- this.BottomToolbarHeight=0; //底部工具条高度
2319
- this.IsShowAllColumn=false; //是否已显示所有列
2320
-
2321
- this.Column= //{ Type:列id, Title:标题, TextAlign:文字对齐方式, MaxText:文字最大宽度 , TextColor:文字颜色, Sort:0=不支持排序 1=本地排序 0=远程排序 }
2322
- [
2323
- { Type:REPORT_COLUMN_ID.INDEX_ID, Title:"序号", TextAlign:"center", Width:null, TextColor:g_JSChartResource.Report.FieldColor.Index, MaxText:"8888"},
2324
- { Type:REPORT_COLUMN_ID.SYMBOL_ID, Title:"代码", TextAlign:"left", Width:null, TextColor:g_JSChartResource.Report.FieldColor.Symbol, MaxText:"888888"},
2325
- { Type:REPORT_COLUMN_ID.NAME_ID, Title:"名称", TextAlign:"left", Width:null, TextColor:g_JSChartResource.Report.FieldColor.Name, MaxText:"擎擎擎擎" },
2326
- { Type:REPORT_COLUMN_ID.INCREASE_ID, Title:"涨幅%", TextAlign:"right", Width:null, MaxText:"-888.88" },
2327
- ];
2328
-
2329
- this.RectClient={};
2330
-
2331
- this.ReloadResource=function(resource)
2332
- {
2333
- this.UpColor=g_JSChartResource.Report.UpTextColor;
2334
- this.DownColor=g_JSChartResource.Report.DownTextColor;
2335
- this.UnchagneColor=g_JSChartResource.Report.UnchagneTextColor;
2336
-
2337
- this.BorderColor=g_JSChartResource.Report.BorderColor; //边框线
2338
- this.SelectedColor=g_JSChartResource.Report.SelectedColor; //选中行
2339
-
2340
- //表头配置
2341
- this.HeaderFontConfig={ Size:g_JSChartResource.Report.Header.Font.Size, Name:g_JSChartResource.Report.Header.Font.Name };
2342
- this.HeaderColor=g_JSChartResource.Report.Header.Color;
2343
- this.SortColor=g_JSChartResource.Report.Header.SortColor; //排序箭头颜色
2344
- this.HeaderMergin=
2345
- {
2346
- Left:g_JSChartResource.Report.Header.Mergin.Left,
2347
- Right:g_JSChartResource.Report.Header.Mergin.Right,
2348
- Top:g_JSChartResource.Report.Header.Mergin.Top,
2349
- Bottom:g_JSChartResource.Report.Header.Mergin.Bottom
2350
- };
2351
-
2352
- //表格内容配置
2353
- this.ItemFontConfig={ Size:g_JSChartResource.Report.Item.Font.Size, Name:g_JSChartResource.Report.Item.Font.Name };
2354
- this.ItemMergin=
2355
- {
2356
- Left:g_JSChartResource.Report.Item.Mergin.Left,
2357
- Right:g_JSChartResource.Report.Item.Mergin.Right,
2358
- Top:g_JSChartResource.Report.Item.Mergin.Top,
2359
- Bottom:g_JSChartResource.Report.Item.Mergin.Bottom
2360
- };
2361
- this.BarMergin=
2362
- {
2363
- Top:g_JSChartResource.Report.Item.BarMergin.Top,
2364
- Left:g_JSChartResource.Report.Item.BarMergin.Left,
2365
- Right:g_JSChartResource.Report.Item.BarMergin.Right,
2366
- Bottom:g_JSChartResource.Report.Item.BarMergin.Bottom
2367
- };
2368
-
2369
- this.LimitBorderColor=g_JSChartResource.Report.LimitBorder.Color;
2370
- this.LimitMergin=
2371
- {
2372
- Top:g_JSChartResource.Report.LimitBorder.Mergin.Top,
2373
- Left:g_JSChartResource.Report.LimitBorder.Mergin.Left,
2374
- Right:g_JSChartResource.Report.LimitBorder.Mergin.Right,
2375
- Bottom:g_JSChartResource.Report.LimitBorder.Mergin.Bottom
2376
- }
2377
-
2378
- for(var i=0;i<this.Column.length;++i)
2379
- {
2380
- var item=this.Column[i];
2381
- if (item.Type==REPORT_COLUMN_ID.INDEX_ID)
2382
- item.TextColor=g_JSChartResource.Report.FieldColor.Index;
2383
- else if (item.Type==REPORT_COLUMN_ID.SYMBOL_ID)
2384
- item.TextColor=g_JSChartResource.Report.FieldColor.Symbol;
2385
- else if (item.Type==REPORT_COLUMN_ID.NAME_ID)
2386
- item.TextColor=g_JSChartResource.Report.FieldColor.Name;
2387
- else if (item.Type==REPORT_COLUMN_ID.VOL_ID)
2388
- item.TextColor=g_JSChartResource.Report.FieldColor.Vol;
2389
- else if (item.Type==REPORT_COLUMN_ID.BUY_VOL_ID)
2390
- item.TextColor=g_JSChartResource.Report.FieldColor.Vol;
2391
- else if (item.Type==REPORT_COLUMN_ID.SELL_VOL_ID)
2392
- item.TextColor=g_JSChartResource.Report.FieldColor.Vol;
2393
- else if (item.Type==REPORT_COLUMN_ID.AMOUNT_ID)
2394
- item.TextColor=g_JSChartResource.Report.FieldColor.Amount;
2395
- else if (item.Type==REPORT_COLUMN_ID.VOL_IN_ID)
2396
- item.TextColor=g_JSChartResource.Report.DownTextColor;
2397
- else if (item.Type==REPORT_COLUMN_ID.VOL_OUT_ID)
2398
- item.TextColor=g_JSChartResource.Report.UpTextColor;
2399
- else
2400
- item.TextColor=g_JSChartResource.Report.FieldColor.Text;
2401
- }
2402
-
2403
- if (this.Tab) this.Tab.ReloadResource(resource);
2404
- }
2405
-
2406
- this.SetColumn=function(aryColumn)
2407
- {
2408
- if (!IFrameSplitOperator.IsNonEmptyArray(aryColumn)) return;
2409
-
2410
- this.Column=[];
2411
- for(var i=0;i<aryColumn.length;++i)
2412
- {
2413
- var item=aryColumn[i];
2414
- var colItem=this.GetDefaultColunm(item.Type);
2415
- if (!colItem) continue;
2416
-
2417
- if (item.Title) colItem.Title=item.Title;
2418
- if (item.TextAlign) colItem.TextAlign=item.TextAlign;
2419
- if (item.TextColor) colItem.TextColor=item.TextColor;
2420
- if (item.MaxText) colItem.MaxText=item.MaxText;
2421
- if (item.ID) colItem.ID=item.ID;
2422
- if (IFrameSplitOperator.IsNumber(item.Sort)) colItem.Sort=item.Sort;
2423
- if (item.Sort==1 || item.Sort==2) //1本地排序 2=远程排序
2424
- {
2425
- colItem.SortType=[1,2]; //默认 降序 ,升序
2426
- if (IFrameSplitOperator.IsNonEmptyArray(item.SortType)) colItem.SortType=item.SortType.slice();
2427
- }
2428
-
2429
- if (item.Type==REPORT_COLUMN_ID.CUSTOM_STRING_TEXT_ID)
2430
- {
2431
- if (!IFrameSplitOperator.IsNumber(item.DataIndex) && !IFrameSplitOperator.IsNumber(item.BlockIndex)) continue;
2432
- if (IFrameSplitOperator.IsNumber(item.DataIndex)) colItem.DataIndex=item.DataIndex; //数据在扩展数据索引列
2433
- if (IFrameSplitOperator.IsNumber(item.BlockIndex)) colItem.BlockIndex=item.BlockIndex;
2434
- colItem.IsDrawCallback=false; //是否回调
2435
- if (IFrameSplitOperator.IsBool(item.IsDrawCallback)) colItem.IsDrawCallback=item.IsDrawCallback;
2436
- }
2437
- else if (item.Type==REPORT_COLUMN_ID.CUSTOM_NUMBER_TEXT_ID)
2438
- {
2439
- if (!IFrameSplitOperator.IsNumber(item.DataIndex) && !IFrameSplitOperator.IsNumber(item.BlockIndex)) continue;
2440
- if (IFrameSplitOperator.IsNumber(item.DataIndex)) colItem.DataIndex=item.DataIndex; //数据在扩展数据索引列
2441
- if (IFrameSplitOperator.IsNumber(item.BlockIndex)) colItem.BlockIndex=item.BlockIndex;
2442
- colItem.Decimal=2;
2443
- colItem.FormatType=0; //0=默认格式化 1=原始输出 2=科学计数 3=成交量格式化
2444
- colItem.ColorType=0; //0=默认使用TextColor, 1=(>0涨,<0跌)2=(>昨收涨,<昨收跌)
2445
- colItem.IsDrawCallback=false; //是否回调
2446
- if (IFrameSplitOperator.IsNumber(item.Decimal)) colItem.Decimal=item.Decimal; //小数位数
2447
- if (IFrameSplitOperator.IsNumber(item.FormatType)) colItem.FormatType=item.FormatType; //输出样式
2448
- if (IFrameSplitOperator.IsNumber(item.ColorType)) colItem.ColorType=item.ColorType; //颜色属性
2449
- if (IFrameSplitOperator.IsBool(item.IsDrawCallback)) colItem.IsDrawCallback=item.IsDrawCallback;
2450
- }
2451
- else if (item.Type==REPORT_COLUMN_ID.CUSTOM_DATETIME_TEXT_ID)
2452
- {
2453
- if (!IFrameSplitOperator.IsNumber(item.DataIndex) && !IFrameSplitOperator.IsNumber(item.BlockIndex)) continue;
2454
- if (IFrameSplitOperator.IsNumber(item.DataIndex)) colItem.DataIndex=item.DataIndex; //数据在扩展数据索引列
2455
- if (IFrameSplitOperator.IsNumber(item.BlockIndex)) colItem.BlockIndex=item.BlockIndex;
2456
- colItem.FormatType=0; //0=yyyy-mm-dd 1=YYYY/MM/DD
2457
- colItem.ValueType=0; //0=yyyymmdd 1=hhmmss
2458
- colItem.IsDrawCallback=false; //是否回调
2459
- if (IFrameSplitOperator.IsNumber(item.FormatType)) colItem.FormatType=item.FormatType; //输出样式
2460
- if (IFrameSplitOperator.IsNumber(item.ValueType)) colItem.FormatType=item.ValueType; //输出样式
2461
- if (IFrameSplitOperator.IsBool(item.IsDrawCallback)) colItem.IsDrawCallback=item.IsDrawCallback;
2462
- }
2463
-
2464
- this.Column.push(colItem);
2465
- }
2466
- }
2467
-
2468
- this.GetDefaultColunm=function(id)
2469
- {
2470
- var DEFAULT_COLUMN=
2471
- [
2472
- { Type:REPORT_COLUMN_ID.INDEX_ID, Title:"序号", TextAlign:"center", Width:null, TextColor:g_JSChartResource.Report.FieldColor.Index, MaxText:"8888"},
2473
- { Type:REPORT_COLUMN_ID.SYMBOL_ID, Title:"代码", TextAlign:"left", Width:null, TextColor:g_JSChartResource.Report.FieldColor.Symbol, MaxText:"888888"},
2474
- { Type:REPORT_COLUMN_ID.NAME_ID, Title:"名称", TextAlign:"left", Width:null, TextColor:g_JSChartResource.Report.FieldColor.Name, MaxText:"擎擎擎擎" },
2475
- { Type:REPORT_COLUMN_ID.SYMBOL_NAME_ID, Title:"股票名称", TextAlign:"left", Width:null, TextColor:g_JSChartResource.Report.FieldColor.Name, MaxText:"擎擎擎擎"},
2476
-
2477
- { Type:REPORT_COLUMN_ID.INCREASE_ID, Title:"涨幅%", TextAlign:"right", Width:null, MaxText:"-888.88" },
2478
- { Type:REPORT_COLUMN_ID.PRICE_ID, Title:"现价", TextAlign:"right", Width:null, MaxText:"88888.88" },
2479
- { Type:REPORT_COLUMN_ID.UPDOWN_ID, Title:"涨跌", TextAlign:"right", Width:null, MaxText:"-888.88" },
2480
- { Type:REPORT_COLUMN_ID.AMPLITUDE_ID, Title:"振幅%", TextAlign:"right", Width:null, MaxText:"888.88" },
2481
- { Type:REPORT_COLUMN_ID.BUY_PRICE_ID, Title:"买价", TextAlign:"right", Width:null, MaxText:"88888.88" },
2482
- { Type:REPORT_COLUMN_ID.SELL_PRICE_ID, Title:"卖价", TextAlign:"right", Width:null, MaxText:"88888.88" },
2483
- { Type:REPORT_COLUMN_ID.AVERAGE_PRICE_ID, Title:"均价", TextAlign:"right", Width:null, MaxText:"88888.88" },
2484
- { Type:REPORT_COLUMN_ID.OPEN_ID, Title:"今开", TextAlign:"right", Width:null, MaxText:"88888.88" },
2485
- { Type:REPORT_COLUMN_ID.HIGH_ID, Title:"最高", TextAlign:"right", Width:null, MaxText:"88888.88" },
2486
- { Type:REPORT_COLUMN_ID.LOW_ID, Title:"最低", TextAlign:"right", Width:null, MaxText:"88888.88" },
2487
- { Type:REPORT_COLUMN_ID.YCLOSE_ID, Title:"昨收", TextAlign:"right", Width:null, MaxText:"88888.88" },
2488
-
2489
- { Type:REPORT_COLUMN_ID.VOL_ID, Title:"总量", TextAlign:"right", TextColor:g_JSChartResource.Report.FieldColor.Vol, Width:null, MaxText:"8888.8擎" },
2490
- { Type:REPORT_COLUMN_ID.AMOUNT_ID, Title:"总金额", TextAlign:"right", TextColor:g_JSChartResource.Report.FieldColor.Amount, Width:null, MaxText:"8888.8擎" },
2491
- { Type:REPORT_COLUMN_ID.EXCHANGE_RATE_ID, Title:"换手%", TextAlign:"right", TextColor:g_JSChartResource.Report.FieldColor.Text, Width:null, MaxText:"88.88" },
2492
-
2493
- { Type:REPORT_COLUMN_ID.OUTSTANDING_SHARES_ID, Title:"流通股本", TextAlign:"right", TextColor:g_JSChartResource.Report.FieldColor.Text, Width:null, MaxText:"8888.8擎" },
2494
- { Type:REPORT_COLUMN_ID.TOTAL_SHARES_ID, Title:"总股本", TextAlign:"right", TextColor:g_JSChartResource.Report.FieldColor.Text, Width:null, MaxText:"8888.8擎" },
2495
- { Type:REPORT_COLUMN_ID.CIRC_MARKET_VALUE_ID, Title:"流通市值", TextAlign:"right", TextColor:g_JSChartResource.Report.FieldColor.Text, Width:null, MaxText:"8888.8擎" },
2496
- { Type:REPORT_COLUMN_ID.MARKET_VALUE_ID, Title:"总市值", TextAlign:"right", TextColor:g_JSChartResource.Report.FieldColor.Text, Width:null, MaxText:"8888.8擎" },
2497
-
2498
-
2499
- { Type:REPORT_COLUMN_ID.VOL_IN_ID, Title:"内盘", TextAlign:"right", TextColor:g_JSChartResource.Report.DownTextColor, Width:null, MaxText:"8888.8擎" },
2500
- { Type:REPORT_COLUMN_ID.VOL_OUT_ID, Title:"外盘", TextAlign:"right", TextColor:g_JSChartResource.Report.UpTextColor, Width:null, MaxText:"8888.8擎" },
2501
-
2502
- { Type:REPORT_COLUMN_ID.CLOSE_LINE_ID, Title:"走势", TextAlign:"center", TextColor:g_JSChartResource.Report.CloseLineColor, Width:null, MaxText:"88888.88" },
2503
-
2504
- { Type:REPORT_COLUMN_ID.BUY_VOL_ID, Title:"买量", TextAlign:"right", TextColor:g_JSChartResource.Report.FieldColor.Vol, Width:null, MaxText:"8888.8擎" },
2505
- { Type:REPORT_COLUMN_ID.SELL_VOL_ID, Title:"卖量", TextAlign:"right", TextColor:g_JSChartResource.Report.FieldColor.Vol, Width:null, MaxText:"8888.8擎" },
2506
-
2507
- //{ Type:REPORT_COLUMN_ID.MULTI_BAR_ID, Title:"柱子", TextAlign:"center", Width:null, TextColor:g_JSChartResource.DealList.FieldColor.BarTitle, MaxText:"888888" },
2508
- //{ Type:REPORT_COLUMN_ID.CENTER_BAR_ID, Title:"柱子2", TextAlign:"center", Width:null, TextColor:g_JSChartResource.DealList.FieldColor.BarTitle, MaxText:"888888" },
2509
- { Type:REPORT_COLUMN_ID.CUSTOM_STRING_TEXT_ID, Title:"自定义", TextAlign:"center", Width:null, TextColor:g_JSChartResource.Report.FieldColor.Text, MaxText:"擎擎擎擎擎" },
2510
- { Type:REPORT_COLUMN_ID.CUSTOM_NUMBER_TEXT_ID, Title:"自定义", TextAlign:"center", Width:null, TextColor:g_JSChartResource.Report.FieldColor.Text, MaxText:"擎擎擎擎擎" },
2511
- { Type:REPORT_COLUMN_ID.CUSTOM_DATETIME_TEXT_ID, Title:"自定义", TextAlign:"center", Width:null, TextColor:g_JSChartResource.Report.FieldColor.Text, MaxText:"9999-99-99" },
2512
- ];
2513
-
2514
- for(var i=0;i<DEFAULT_COLUMN.length;++i)
2515
- {
2516
- var item=DEFAULT_COLUMN[i];
2517
- if (item.Type==id) return item;
2518
- }
2519
-
2520
- return null;
2521
- }
2522
-
2523
-
2524
- this.Draw=function()
2525
- {
2526
- this.ShowSymbol=[];
2527
-
2528
- if (this.SizeChange) this.CalculateSize();
2529
- else this.UpdateCacheData();
2530
-
2531
- this.Canvas.save();
2532
-
2533
- this.Canvas.beginPath();
2534
- this.Canvas.rect(this.RectClient.Left,this.RectClient.Top,(this.RectClient.Right-this.RectClient.Left),(this.RectClient.Bottom-this.RectClient.Top));
2535
- //this.Canvas.stroke(); //调试用
2536
- this.Canvas.clip();
2537
-
2538
- this.DrawHeader();
2539
- this.DrawBody();
2540
- this.Canvas.restore();
2541
-
2542
- if (this.Tab && this.BottomToolbarHeight>0)
2543
- {
2544
- var bottom=this.ChartBorder.GetBottom();
2545
- this.Tab.DrawTab(this.RectClient.Left,bottom-this.BottomToolbarHeight, this.RectClient.Right, bottom)
2546
- this.Tab.DrawScrollbar(this.RectClient.Left,bottom-this.BottomToolbarHeight, this.RectClient.Right, bottom);
2547
- }
2548
-
2549
- this.DrawBorder();
2550
-
2551
- this.SizeChange=false;
2552
- }
2553
-
2554
- //更新缓存变量
2555
- this.UpdateCacheData=function()
2556
- {
2557
- this.RectClient.Left=this.ChartBorder.GetLeft();
2558
- this.RectClient.Right=this.ChartBorder.GetRight();
2559
- this.RectClient.Top=this.ChartBorder.GetTop();
2560
- this.RectClient.Bottom=this.ChartBorder.GetBottom()-this.BottomToolbarHeight;
2561
- }
2562
-
2563
- this.GetPageSize=function(recalculate) //recalculate 是否重新计算
2564
- {
2565
- if (recalculate) this.CalculateSize();
2566
- var size=this.RowCount;
2567
- return size;
2568
- }
2569
-
2570
- this.GetCurrentPageStatus=function() //{ Start:起始索引, End:结束索引(数据), PageSize:页面可以显示几条记录, IsEnd:是否是最后一页, IsSinglePage:是否只有一页数据}
2571
- {
2572
- var result={ Start:this.Data.YOffset, PageSize:this.RowCount, IsEnd:false, SelectedRow:this.SelectedRow, IsSinglePage:false, DataCount:0 };
2573
- if (IFrameSplitOperator.IsNonEmptyArray(this.Data.Data))
2574
- {
2575
- result.End=this.Data.YOffset+this.RowCount-1;
2576
- result.IsSinglePage=this.Data.Data.length<=this.RowCount;
2577
- result.DataCount=this.Data.Data.length;
2578
- if (result.End>=this.Data.Data.length-1) result.IsEnd=true;
2579
- if (result.End>=this.Data.Data.length) result.End=this.Data.Data.length-1;
2580
- }
2581
- else
2582
- {
2583
- result.Star=0;
2584
- result.End=0;
2585
- result.IsEnd=true;
2586
- result.IsSinglePage=true;
2587
- }
2588
-
2589
- return result;
2590
- }
2591
-
2592
- this.CalculateSize=function() //计算大小
2593
- {
2594
- this.BottomToolbarHeight=0;
2595
- this.UpdateCacheData();
2596
-
2597
- this.HeaderFont=`${this.HeaderFontConfig.Size}px ${ this.HeaderFontConfig.Name}`;
2598
- this.ItemFont=`${this.ItemFontConfig.Size}px ${ this.ItemFontConfig.Name}`;
2599
- this.ItemFixedFont=`${this.ItemFixedFontConfg.Size}px ${ this.ItemFixedFontConfg.Name}`;
2600
- this.ItemSymbolFont=`${this.ItemSymbolFontConfig.Size}px ${ this.ItemSymbolFontConfig.Name}`;
2601
- this.ItemNameFont=`${this.ItemNameFontConfg.Size}px ${ this.ItemNameFontConfg.Name}`;
2602
-
2603
- this.RowHeight=this.GetFontHeight(this.ItemFont,"擎")+ this.ItemMergin.Top+ this.ItemMergin.Bottom;
2604
- this.FixedRowHeight=this.GetFontHeight(this.ItemFixedFont,"擎")+ this.ItemMergin.Top+ this.ItemMergin.Bottom;
2605
-
2606
- this.Canvas.font=this.ItemFont;
2607
- var itemWidth=0;
2608
- for(var i=0;i<this.Column.length;++i)
2609
- {
2610
- var item=this.Column[i];
2611
- if (item.Type==REPORT_COLUMN_ID.SYMBOL_NAME_ID)
2612
- {
2613
- this.Canvas.font=this.ItemNameFont;
2614
- var nameWidth=this.Canvas.measureText(item.MaxText).width;
2615
- var nameHeight=this.GetFontHeight(this.ItemNameFont,"擎");
2616
- this.ItemNameHeight=nameHeight;
2617
-
2618
- this.Canvas.font=this.ItemSymbolFont;
2619
- var symbolWidth=this.Canvas.measureText(item.MaxText).width;
2620
- var symboHeight=this.GetFontHeight(this.ItemSymbolFont,"擎");
2621
-
2622
- this.Canvas.font=this.ItemFont;
2623
-
2624
- itemWidth=Math.max(nameWidth, symbolWidth);
2625
- item.Width=itemWidth+4+this.ItemMergin.Left+this.ItemMergin.Right;
2626
-
2627
- var rowHeight=nameHeight+symboHeight+this.ItemMergin.Top+ this.ItemMergin.Bottom;
2628
- if (rowHeight>this.RowHeight) this.RowHeight=rowHeight;
2629
- if (rowHeight>this.FixedRowHeight) this.FixedRowHeight=rowHeight;
2630
- }
2631
- else
2632
- {
2633
- itemWidth=this.Canvas.measureText(item.MaxText).width;
2634
- item.Width=itemWidth+4+this.ItemMergin.Left+this.ItemMergin.Right;
2635
- }
2636
- }
2637
-
2638
- this.Canvas.font=this.HeaderFont;
2639
- for(var i=0;i<this.Column.length;++i)
2640
- {
2641
- var item=this.Column[i];
2642
- if (!item.Title || item.Title.length<=0) continue;
2643
- var text=item.Title;
2644
- if (item.Sort>0) text+="↓";
2645
- itemWidth=this.Canvas.measureText(text).width;
2646
- itemWidth+=(4+this.HeaderMergin.Left+this.HeaderMergin.Right);
2647
- if (item.Width<itemWidth) item.Width=itemWidth;
2648
- }
2649
-
2650
- this.HeaderHeight=this.GetFontHeight(this.HeaderFont,"擎")+ this.HeaderMergin.Top+ this.HeaderMergin.Bottom;
2651
- if (!this.IsShowHeader) this.HeaderHeight=0;
2652
- if (this.FixedRowCount<=0) this.FixedRowHeight=0;
2653
-
2654
-
2655
- this.RowCount=parseInt((this.RectClient.Bottom-this.RectClient.Top-this.HeaderHeight-(this.FixedRowHeight*this.FixedRowCount))/this.RowHeight);
2656
-
2657
- var subWidth=0;
2658
- var reportWidth=this.RectClient.Right-this.RectClient.Left;
2659
- for(var i=0;i<this.Column.length;++i)
2660
- {
2661
- var item=this.Column[i];
2662
- subWidth+=item.Width;
2663
- }
2664
-
2665
- this.IsShowAllColumn=(subWidth<reportWidth);
2666
- }
2667
-
2668
- this.DrawHeader=function()
2669
- {
2670
- if (!this.IsShowHeader) return;
2671
-
2672
- var left=this.RectClient.Left;
2673
- var top=this.RectClient.Top;
2674
- var y=top+this.HeaderMergin.Top+(this.HeaderHeight-this.HeaderMergin.Top-this.HeaderMergin.Bottom)/2;
2675
-
2676
- this.Canvas.font=this.HeaderFont;
2677
- this.Canvas.fillStyle=this.HeaderColor;
2678
-
2679
- var textLeft=left;
2680
- //固定列
2681
- for(var i=0;i<this.FixedColumn && i<this.Column.length;++i)
2682
- {
2683
- var item=this.Column[i];
2684
- var itemWidth=item.Width;
2685
- var textWidth=itemWidth-this.HeaderMergin.Left-this.HeaderMergin.Right;
2686
- var x=textLeft+this.HeaderMergin.Left;
2687
-
2688
- if (this.SortInfo && this.SortInfo.Field==i && this.SortInfo.Sort>0)
2689
- {
2690
- this.DrawSortHeader(item.Title,item.TextAlign,x,y,textWidth,this.SortInfo.Sort);
2691
- }
2692
- else
2693
- {
2694
- this.DrawText(item.Title,item.TextAlign,x,y,textWidth);
2695
- }
2696
-
2697
- textLeft+=item.Width;
2698
- }
2699
-
2700
- for(var i=this.FixedColumn+this.Data.XOffset;i<this.Column.length;++i)
2701
- {
2702
- var item=this.Column[i];
2703
- var itemWidth=item.Width;
2704
- var textWidth=itemWidth-this.HeaderMergin.Left-this.HeaderMergin.Right;
2705
- var x=textLeft+this.HeaderMergin.Left;
2706
-
2707
- if (this.SortInfo && this.SortInfo.Field==i && this.SortInfo.Sort>0)
2708
- {
2709
- this.DrawSortHeader(item.Title,item.TextAlign,x,y,textWidth,this.SortInfo.Sort);
2710
- }
2711
- else
2712
- {
2713
- this.DrawText(item.Title,item.TextAlign,x,y,textWidth);
2714
- }
2715
-
2716
- textLeft+=item.Width;
2717
- }
2718
- }
2719
-
2720
- this.DrawText=function(text, textAlign, x, y, textWidth)
2721
- {
2722
- if (textAlign=='center')
2723
- {
2724
- x=x+textWidth/2;
2725
- this.Canvas.textAlign="center";
2726
- }
2727
- else if (textAlign=='right')
2728
- {
2729
- x=x+textWidth;
2730
- this.Canvas.textAlign="right";
2731
- }
2732
- else
2733
- {
2734
- this.Canvas.textAlign="left";
2735
- }
2736
-
2737
- this.Canvas.textBaseline="middle";
2738
- this.Canvas.fillText(text,x,y);
2739
- }
2740
-
2741
- this.DrawSortHeader=function(text, textAlign, x, y, width, sortType)
2742
- {
2743
- var sortText=sortType==1?"↓":"↑";
2744
- var sortTextWidth=this.Canvas.measureText(sortText).width;
2745
- var textWidth=this.Canvas.measureText(text).width+2;
2746
- this.Canvas.textBaseline="middle";
2747
- this.Canvas.textAlign="left";
2748
-
2749
- if (textAlign=='center')
2750
- {
2751
- x=x+width/2-(sortTextWidth+textWidth)/2;
2752
- }
2753
- else if (textAlign=='right')
2754
- {
2755
- x=(x+width)-sortTextWidth-textWidth;
2756
- }
2757
- else
2758
- {
2759
-
2760
- }
2761
-
2762
- this.Canvas.fillText(text,x,y);
2763
- this.Canvas.fillStyle=this.SortColor;
2764
- this.Canvas.fillText(sortText,x+textWidth,y);
2765
- this.Canvas.fillStyle=this.HeaderColor;
2766
- }
2767
-
2768
-
2769
- this.DrawBorder=function()
2770
- {
2771
- if (!this.IsDrawBorder) return;
2772
-
2773
- var left=this.RectClient.Left;
2774
- var right=this.RectClient.Right;
2775
- var top=this.RectClient.Top;
2776
- var bottom=this.RectClient.Bottom;
2777
-
2778
- this.Canvas.strokeStyle=this.BorderColor;
2779
- this.Canvas.beginPath();
2780
-
2781
- this.Canvas.moveTo(left,ToFixedPoint(top+this.HeaderHeight));
2782
- this.Canvas.lineTo(right,ToFixedPoint(top+this.HeaderHeight));
2783
-
2784
- var rowTop=top+this.HeaderHeight+this.RowHeight;
2785
- var rotBottom=rowTop;
2786
- for(var i=0;i<this.FixedRowCount;++i)
2787
- {
2788
- var drawTop=ToFixedPoint(rowTop);
2789
- this.Canvas.moveTo(left,drawTop);
2790
- this.Canvas.lineTo(right,drawTop);
2791
- rotBottom=rowTop;
2792
- rowTop+=this.FixedRowHeight;
2793
- }
2794
-
2795
- var rowTop=top+this.HeaderHeight+this.RowHeight+this.FixedRowHeight*this.FixedRowCount;
2796
- var rotBottom=rowTop;
2797
- //横线
2798
- for(var i=0;i<this.RowCount;++i)
2799
- {
2800
- var drawTop=ToFixedPoint(rowTop);
2801
- this.Canvas.moveTo(left,drawTop);
2802
- this.Canvas.lineTo(right,drawTop);
2803
- rotBottom=rowTop;
2804
- rowTop+=this.RowHeight;
2805
- }
2806
-
2807
- //竖线
2808
- var columnLeft=left;
2809
- for(var i=0;i<this.FixedColumn && i<this.Column.length; ++i)
2810
- {
2811
- var item=this.Column[i];
2812
- var drawLeft=ToFixedPoint(columnLeft+item.Width);
2813
- this.Canvas.moveTo(drawLeft,top);
2814
- this.Canvas.lineTo(drawLeft,rotBottom);
2815
-
2816
- columnLeft+=item.Width;
2817
- }
2818
-
2819
- for(var i=this.FixedColumn+this.Data.XOffset;i<this.Column.length;++i)
2820
- {
2821
- var item=this.Column[i];
2822
- var drawLeft=ToFixedPoint(columnLeft+item.Width);
2823
- this.Canvas.moveTo(drawLeft,top);
2824
- this.Canvas.lineTo(drawLeft,rotBottom);
2825
-
2826
- columnLeft+=item.Width;
2827
- }
2828
-
2829
- this.Canvas.stroke();
2830
- }
2831
-
2832
- this.DrawBody=function()
2833
- {
2834
- if (!this.Data) return;
2835
- if (!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return;
2836
-
2837
- this.Canvas.font=this.ItemFont;
2838
- var top=this.RectClient.Top+this.HeaderHeight;
2839
- var left=this.RectClient.Left;
2840
- var rowWidth=this.RectClient.Right-this.RectClient.Left;
2841
-
2842
- //固定行
2843
- var textTop=top;
2844
- this.Canvas.font=this.ItemFixedFont;
2845
- for(var i=0; i<this.FixedRowCount; ++i)
2846
- {
2847
- if (this.SelectedFixedRow==i)
2848
- {
2849
- this.Canvas.fillStyle=this.SelectedColor;;
2850
- this.Canvas.fillRect(left,textTop,rowWidth,this.FixedRowHeight);
2851
- }
2852
-
2853
- if (this.FixedRowData.Type==1)
2854
- this.DrawFixedSymbolRow(textTop,i);
2855
- else
2856
- this.DrawFixedRow(textTop, i);
2857
-
2858
- textTop+=this.FixedRowHeight;
2859
- }
2860
-
2861
-
2862
- textTop=top+this.FixedRowHeight*this.FixedRowCount;
2863
- this.Canvas.font=this.ItemFont;
2864
- for(var i=this.Data.YOffset, j=0; i<this.Data.Data.length && j<this.RowCount ;++i, ++j)
2865
- {
2866
- var symbol=this.Data.Data[i];
2867
-
2868
- var bFillRow=false;
2869
- if (this.SelectedModel==0)
2870
- {
2871
- if (j==this.SelectedRow) bFillRow=true; //选中行
2872
- }
2873
- else
2874
- {
2875
- if (i==this.SelectedRow) bFillRow=true; //选中行
2876
- }
2877
-
2878
- if (bFillRow)
2879
- {
2880
- this.Canvas.fillStyle=this.SelectedColor;
2881
- this.Canvas.fillRect(left,textTop,rowWidth,this.RowHeight);
2882
- }
2883
-
2884
-
2885
- this.DrawRow(symbol, textTop, i);
2886
-
2887
- this.ShowSymbol.push( { Index:i, Symbol:symbol } );
2888
-
2889
- textTop+=this.RowHeight;
2890
- }
2891
- }
2892
-
2893
-
2894
- this.DrawFixedSymbolRow=function(top, dataIndex)
2895
- {
2896
- var left=this.RectClient.Left;
2897
- var chartRight=this.RectClient.Right;
2898
-
2899
- if (!this.FixedRowData || !IFrameSplitOperator.IsNonEmptyArray(this.FixedRowData.Symbol)) return;
2900
- var symbol=this.FixedRowData.Symbol[dataIndex];
2901
- if (!symbol) return;
2902
-
2903
- this.DrawRow(symbol, top, dataIndex, 1);
2904
-
2905
- this.ShowSymbol.push( { Index:dataIndex, Symbol:symbol, RowType:1 } );
2906
- }
2907
-
2908
-
2909
- this.DrawFixedRow=function(top, dataIndex)
2910
- {
2911
- var left=this.RectClient.Left;
2912
- var chartRight=this.RectClient.Right;
2913
-
2914
- for(var i=0;i<this.FixedColumn && i<this.Column.length;++i)
2915
- {
2916
- var item=this.Column[i];
2917
- this.DrawFixedItem(dataIndex, i, item, left, top);
2918
- left+=item.Width;
2919
-
2920
- if (left>=chartRight) break;
2921
- }
2922
-
2923
- for(var i=this.FixedColumn+this.Data.XOffset;i<this.Column.length;++i)
2924
- {
2925
- var item=this.Column[i];
2926
- this.DrawFixedItem(dataIndex, i, item, left, top);
2927
- left+=item.Width;
2928
-
2929
- if (left>=chartRight) break;
2930
- }
2931
- }
2932
-
2933
- this.DrawFixedItem=function(dataIndex, colIndex, column, left, top)
2934
- {
2935
- var x=left+this.ItemMergin.Left;
2936
- var textWidth=column.Width-this.ItemMergin.Left-this.ItemMergin.Right;
2937
- var drawInfo={ Text:null, TextColor:column.TextColor , TextAlign:column.TextAlign };
2938
-
2939
- if (this.GetFixedRowTextDrawInfo(dataIndex, colIndex, column, drawInfo))
2940
- {
2941
- this.DrawItemText(drawInfo.Text, drawInfo.TextColor, drawInfo.TextAlign, x, top, textWidth);
2942
- return;
2943
- }
2944
-
2945
- if (!this.FixedRowData || !IFrameSplitOperator.IsNonEmptyArray(this.FixedRowData.Data)) return;
2946
-
2947
- var data=this.FixedRowData.Data;
2948
- var rowData=data[dataIndex];
2949
- if (!IFrameSplitOperator.IsNonEmptyArray(rowData)) return;
2950
- var itemData=rowData[colIndex];
2951
- if (!itemData || !itemData.Text) return;
2952
-
2953
- drawInfo.Text=itemData.Text;
2954
- if (itemData.Color) drawInfo.TextColor=itemData.Color;
2955
- if (itemData.TextAlign) drawInfo.TextAlign=itemData.TextAlign;
2956
-
2957
- this.DrawItemText(drawInfo.Text, drawInfo.TextColor, drawInfo.TextAlign, x, top, textWidth);
2958
- }
2959
-
2960
- this.DrawRow=function(symbol, top, dataIndex, rowType) //rowType 0=表格行 1=顶部固定行
2961
- {
2962
- var left=this.RectClient.Left;
2963
- var chartRight=this.RectClient.Right;
2964
- var data= { Symbol:symbol , Stock:null };
2965
- if (this.GetStockDataCallback) data.Stock=this.GetStockDataCallback(symbol);
2966
- if (this.GetBlockDataCallback) data.Block=this.GetBlockDataCallback(symbol);
2967
- data.Decimal=GetfloatPrecision(symbol); //小数位数
2968
-
2969
- for(var i=0;i<this.FixedColumn && i<this.Column.length;++i)
2970
- {
2971
- var item=this.Column[i];
2972
- this.DrawItem(dataIndex, data, item, left, top, rowType);
2973
- left+=item.Width;
2974
-
2975
- if (left>=chartRight) break;
2976
- }
2977
-
2978
- for(var i=this.FixedColumn+this.Data.XOffset;i<this.Column.length;++i)
2979
- {
2980
- var item=this.Column[i];
2981
- this.DrawItem(dataIndex, data, item, left, top, rowType);
2982
- left+=item.Width;
2983
-
2984
- if (left>=chartRight) break;
2985
- }
2986
- }
2987
-
2988
- this.DrawItem=function(index, data, column, left, top, rowType)
2989
- {
2990
- var itemWidth=column.Width;
2991
- var x=left+this.ItemMergin.Left;
2992
- var textWidth=column.Width-this.ItemMergin.Left-this.ItemMergin.Right;
2993
- var stock=data.Stock;
2994
- var drawInfo={ Text:null, TextColor:column.TextColor , TextAlign:column.TextAlign };
2995
- if (column.Type==REPORT_COLUMN_ID.INDEX_ID)
2996
- {
2997
- if (rowType==1) return; //固定行序号空
2998
- drawInfo.Text=(index+1).toString();
2999
- }
3000
- else if (column.Type==REPORT_COLUMN_ID.SYMBOL_ID)
3001
- {
3002
- if (stock && stock.Symbol) drawInfo.Text=stock.Symbol;
3003
- else drawInfo.Text=data.Symbol;
3004
- }
3005
- else if (column.Type==REPORT_COLUMN_ID.SYMBOL_NAME_ID)
3006
- {
3007
- this.DrawSymbolName(data, column, left, top, rowType);
3008
- }
3009
- else if (column.Type==REPORT_COLUMN_ID.NAME_ID)
3010
- {
3011
- if (stock && stock.Name)
3012
- {
3013
- drawInfo.Text=this.TextEllipsis(stock.Name, textWidth, column.MaxText);
3014
- drawInfo.TextColor=this.GetNameColor(column,data.Symbol, rowType);
3015
- }
3016
- }
3017
- else if (column.Type==REPORT_COLUMN_ID.PRICE_ID)
3018
- {
3019
- if (stock) this.GetPriceDrawInfo(stock.Price, stock, data, drawInfo);
3020
- }
3021
- else if (column.Type==REPORT_COLUMN_ID.OPEN_ID)
3022
- {
3023
- //如果行情开盘价为涨停价或跌停价,则对内容加灰框
3024
- if (stock)
3025
- {
3026
- this.DrawLimitPriceBorder(stock.Open, stock, left, top, column.Width);
3027
- this.GetPriceDrawInfo(stock.Open, stock, data, drawInfo);
3028
- }
3029
- }
3030
- else if (column.Type==REPORT_COLUMN_ID.HIGH_ID)
3031
- {
3032
- //如果行情最高价为涨停价,则对内容加灰框
3033
- if (stock)
3034
- {
3035
- this.DrawLimitPriceBorder(stock.High, stock, left, top, column.Width);
3036
- this.GetPriceDrawInfo(stock.High, stock, data, drawInfo);
3037
- }
3038
- }
3039
- else if (column.Type==REPORT_COLUMN_ID.LOW_ID)
3040
- {
3041
- //如果行情最低价为跌停价,则对内容加灰框
3042
- if (stock)
3043
- {
3044
- this.DrawLimitPriceBorder(stock.Low, stock, left, top, column.Width);
3045
- this.GetPriceDrawInfo(stock.Low, stock, data, drawInfo);
3046
- }
3047
- }
3048
- else if (column.Type==REPORT_COLUMN_ID.YCLOSE_ID)
3049
- {
3050
- if (stock) this.GetPriceDrawInfo(stock.YClose, stock, data, drawInfo);
3051
- }
3052
- else if (column.Type==REPORT_COLUMN_ID.BUY_PRICE_ID)
3053
- {
3054
- if (stock) this.GetPriceDrawInfo(stock.BuyPrice, stock, data, drawInfo);
3055
- }
3056
- else if (column.Type==REPORT_COLUMN_ID.SELL_PRICE_ID)
3057
- {
3058
- if (stock) this.GetPriceDrawInfo(stock.SellPrice, stock, data, drawInfo);
3059
- }
3060
- else if (column.Type==REPORT_COLUMN_ID.AVERAGE_PRICE_ID)
3061
- {
3062
- if (stock) this.GetPriceDrawInfo(stock.AvPrice, stock, data, drawInfo);
3063
- }
3064
- else if (column.Type==REPORT_COLUMN_ID.EXCHANGE_RATE_ID)
3065
- {
3066
- if (stock && IFrameSplitOperator.IsNumber(stock.Exchange))
3067
- drawInfo.Text=stock.Exchange.toFixed(2);
3068
- }
3069
- else if (column.Type==REPORT_COLUMN_ID.BUY_VOL_ID)
3070
- {
3071
- if (stock && IFrameSplitOperator.IsNumber(stock.BuyVol)) drawInfo.Text=this.FormatVolString(stock.BuyVol);
3072
- }
3073
- else if (column.Type==REPORT_COLUMN_ID.SELL_VOL_ID)
3074
- {
3075
- if (stock && IFrameSplitOperator.IsNumber(stock.SellVol)) drawInfo.Text=this.FormatVolString(stock.SellVol);
3076
- }
3077
- else if (column.Type==REPORT_COLUMN_ID.VOL_ID)
3078
- {
3079
- if (stock && IFrameSplitOperator.IsNumber(stock.Vol)) drawInfo.Text=this.FormatVolString(stock.Vol);
3080
- }
3081
- else if (column.Type==REPORT_COLUMN_ID.VOL_IN_ID)
3082
- {
3083
- if (stock && IFrameSplitOperator.IsNumber(stock.VolIn)) drawInfo.Text=this.FormatVolString(stock.VolIn);
3084
- }
3085
- else if (column.Type==REPORT_COLUMN_ID.VOL_OUT_ID)
3086
- {
3087
- if (stock && IFrameSplitOperator.IsNumber(stock.VolOut)) drawInfo.Text=this.FormatVolString(stock.VolOut);
3088
- }
3089
- else if (column.Type==REPORT_COLUMN_ID.TOTAL_SHARES_ID)
3090
- {
3091
- if (stock && IFrameSplitOperator.IsNumber(stock.TotalShares)) drawInfo.Text=this.FormatVolString(stock.TotalShares);
3092
- }
3093
- else if (column.Type==REPORT_COLUMN_ID.OUTSTANDING_SHARES_ID)
3094
- {
3095
- if (stock && IFrameSplitOperator.IsNumber(stock.OutShares)) drawInfo.Text=this.FormatVolString(stock.OutShares);
3096
- }
3097
- else if (column.Type==REPORT_COLUMN_ID.CIRC_MARKET_VALUE_ID || column.Type==REPORT_COLUMN_ID.MARKET_VALUE_ID || column.Type==REPORT_COLUMN_ID.AMOUNT_ID)
3098
- {
3099
- var fieldName=MAP_COLUMN_FIELD.get(column.Type);
3100
- if (stock && IFrameSplitOperator.IsNumber(stock[fieldName]))
3101
- drawInfo.Text=this.FormatVolString(stock[fieldName]);
3102
- }
3103
- else if (column.Type==REPORT_COLUMN_ID.INCREASE_ID || column.Type==REPORT_COLUMN_ID.AMPLITUDE_ID || column.Type==REPORT_COLUMN_ID.UPDOWN_ID)
3104
- {
3105
- var fieldName=MAP_COLUMN_FIELD.get(column.Type);
3106
- if (stock && IFrameSplitOperator.IsNumber(stock[fieldName]))
3107
- {
3108
- var value=stock[fieldName];
3109
- drawInfo.Text=value.toFixed(2);
3110
- drawInfo.TextColor=this.GetUpDownColor(value,0);
3111
- }
3112
- }
3113
- else if (column.Type==REPORT_COLUMN_ID.CUSTOM_STRING_TEXT_ID)
3114
- {
3115
- this.GetCustomStringDrawInfo(data, column, drawInfo);
3116
- }
3117
- else if (column.Type==REPORT_COLUMN_ID.CUSTOM_NUMBER_TEXT_ID)
3118
- {
3119
- this.GetCustomNumberDrawInfo(data, column, drawInfo);
3120
- }
3121
- else if (column.Type==REPORT_COLUMN_ID.CUSTOM_DATETIME_TEXT_ID)
3122
- {
3123
- this.GetCustomDateTimeDrawInfo(data, column, drawInfo);
3124
- }
3125
- else if (column.Type==REPORT_COLUMN_ID.CLOSE_LINE_ID)
3126
- {
3127
- var rtItem={ Left:left, Top:top, Width:column.Width, Height:this.RowHeight };
3128
- rtItem.Right=rtItem.Left+rtItem.Width;
3129
- rtItem.Bottom=rtItem.Top+rtItem.Height;
3130
- this.DrawLine(stock.CloseLine, column, rtItem);
3131
- }
3132
-
3133
- this.DrawItemText(drawInfo.Text, drawInfo.TextColor, drawInfo.TextAlign, x, top, textWidth);
3134
- }
3135
-
3136
- this.DrawSymbolName=function(data, column, left, top, rowType)
3137
- {
3138
- var stock=data.Stock;
3139
- var symbol=data.Symbol;
3140
- var name;
3141
- if (stock)
3142
- {
3143
- symbol=stock.Symbol;
3144
- name=stock.Name;
3145
- }
3146
-
3147
- if (!symbol && !name) return;
3148
-
3149
- var y=top+this.ItemMergin.Top+this.ItemNameHeight;
3150
- var textLeft=left+this.ItemMergin.Left;
3151
- var x=textLeft;
3152
- var width=column.Width-this.ItemMergin.Left-this.ItemMergin.Right;
3153
- var textAlign=column.TextAlign;
3154
- if (textAlign=='center')
3155
- {
3156
- x=textLeft+width/2;
3157
- this.Canvas.textAlign="center";
3158
- }
3159
- else if (textAlign=='right')
3160
- {
3161
- x=textLeft+width-2;
3162
- this.Canvas.textAlign="right";
3163
- }
3164
- else
3165
- {
3166
- x+=2;
3167
- this.Canvas.textAlign="left";
3168
- }
3169
-
3170
- var textColor=this.GetNameColor(column,symbol,rowType);
3171
- var text=name;
3172
- if (text)
3173
- {
3174
- this.Canvas.textBaseline="ideographic";
3175
- this.Canvas.fillStyle=textColor;
3176
- this.Canvas.font=this.ItemNameFont;
3177
- text=this.TextEllipsis(text, width, column.MaxText);
3178
- if (text) this.Canvas.fillText(text,x,y);
3179
- }
3180
-
3181
- text=symbol;
3182
- if (text)
3183
- {
3184
- this.Canvas.textBaseline="top";
3185
- this.Canvas.font=this.ItemSymbolFont;
3186
- this.Canvas.fillStyle=textColor;
3187
- this.Canvas.fillText(text,x,y);
3188
- }
3189
-
3190
- this.Canvas.font=this.ItemFont; //还原字体
3191
- }
3192
-
3193
- this.DrawLimitPriceBorder=function(value, stock, left, top, itemWidth)
3194
- {
3195
- if (!IFrameSplitOperator.IsNumber(value) || !stock) return;
3196
-
3197
- var bDraw=false;
3198
- if (IFrameSplitOperator.IsNumber(stock.LimitHigh))
3199
- {
3200
- if (value>=stock.LimitHigh) bDraw=true;
3201
- }
3202
-
3203
- if (IFrameSplitOperator.IsNumber(stock.LimitLow))
3204
- {
3205
- if (value<=stock.LimitLow) bDraw=true;
3206
- }
3207
-
3208
- if (!bDraw) return;
3209
-
3210
- var x=left+this.ItemMergin.Left+this.LimitMergin.Left;
3211
- var width=itemWidth-this.ItemMergin.Left-this.ItemMergin.Right-this.LimitMergin.Left-this.LimitMergin.Right;
3212
- var y=top+this.ItemMergin.Top+this.LimitMergin.Top;
3213
- var height=this.RowHeight-this.ItemMergin.Top-this.ItemMergin.Bottom-this.LimitMergin.Top-this.LimitMergin.Bottom;
3214
-
3215
- this.Canvas.strokeStyle=this.LimitBorderColor;
3216
- this.Canvas.strokeRect(ToFixedPoint(x),ToFixedPoint(y),ToFixedRect(width),ToFixedRect(height));
3217
- }
3218
-
3219
- this.GetExtendData=function(data, column)
3220
- {
3221
- if (IFrameSplitOperator.IsNumber(column.DataIndex))
3222
- {
3223
- if (!data.Stock || !data.Stock.ExtendData) return null;
3224
- if (column.DataIndex<0) return;
3225
- return data.Stock.ExtendData[column.DataIndex];
3226
- }
3227
-
3228
- if (IFrameSplitOperator.IsNumber(column.BlockIndex))
3229
- {
3230
- if (!data.Block) return;
3231
- if (column.BlockIndex<0) return;
3232
- return data.Block[column.BlockIndex];
3233
- }
3234
-
3235
- return null;
3236
- }
3237
-
3238
- this.GetCustomStringDrawInfo=function(data, column, drawInfo)
3239
- {
3240
- var value=this.GetExtendData(data, column);
3241
- if (!IFrameSplitOperator.IsString(value)) return;
3242
-
3243
- if (column.IsDrawCallback) //外部处理输出格式
3244
- {
3245
- this.GetCustomTextDrawInfo(column, data.Symbol, value, drawInfo, data);
3246
- return;
3247
- }
3248
-
3249
- drawInfo.Text=value;
3250
- }
3251
-
3252
- this.GetCustomNumberDrawInfo=function(data, column, drawInfo)
3253
- {
3254
- var value=this.GetExtendData(data, column);
3255
- if (!IFrameSplitOperator.IsNumber(value)) return;
3256
-
3257
- if (column.IsDrawCallback) //外部处理输出格式
3258
- {
3259
- this.GetCustomTextDrawInfo(column, data.Symbol, value, drawInfo,data);
3260
- return;
3261
- }
3262
-
3263
- //格式化输出
3264
- switch(column.FormatType)
3265
- {
3266
- case 1:
3267
- drawInfo.Text=value.toFixed(column.Decimal);
3268
- break;
3269
- case 2:
3270
- drawInfo.Text=IFrameSplitOperator.FormatValueThousandsString(value, column.Decimal);
3271
- break;
3272
- case 3:
3273
- drawInfo.Text=this.FormatVolString(value);
3274
- break;
3275
- default:
3276
- drawInfo.Text=IFrameSplitOperator.FormatValueString(value, column.Decimal);
3277
- break;
3278
- }
3279
-
3280
- //颜色
3281
- switch(column.ColorType)
3282
- {
3283
- case 1:
3284
- drawInfo.TextColor=this.GetUpDownColor(value,0);
3285
- break;
3286
- case 2:
3287
- if (!IFrameSplitOperator.IsNumber(data.Stock.YClose))
3288
- drawInfo.TextColor=this.UnchagneColor;
3289
- else
3290
- drawInfo.TextColor=this.GetUpDownColor(value, data.Stock.YClose);
3291
- break;
3292
- default:
3293
- break;
3294
- }
3295
- }
3296
-
3297
- this.GetCustomDateTimeDrawInfo=function(data, column, drawInfo)
3298
- {
3299
- var value=this.GetExtendData(data, column);
3300
- if (!IFrameSplitOperator.IsNumber(value)) return;
3301
-
3302
- if (column.IsDrawCallback) //外部处理输出格式
3303
- {
3304
- this.GetCustomTextDrawInfo(column, data.Symbol, value, drawInfo, data);
3305
- return;
3306
- }
3307
-
3308
- if (column.ValueType==0)
3309
- {
3310
- if (column.FormatType==1)
3311
- drawInfo.Text=IFrameSplitOperator.FormatDateString(value,"YYYY/MM/DD");
3312
- else
3313
- drawInfo.Text=IFrameSplitOperator.FormatDateString(value);
3314
- }
3315
- }
3316
-
3317
- this.GetPriceDrawInfo=function(price, stock, data, drawInfo)
3318
- {
3319
- if (!IFrameSplitOperator.IsNumber(price)) return false;
3320
-
3321
- drawInfo.Text=price.toFixed(data.Decimal);
3322
- if (!IFrameSplitOperator.IsNumber(stock.YClose))
3323
- drawInfo.TextColor=this.UnchagneColor;
3324
- else
3325
- drawInfo.TextColor=this.GetUpDownColor(price, stock.YClose);
3326
- }
3327
-
3328
- this.GetUpDownColor=function(price, price2)
3329
- {
3330
- if (price>price2) return this.UpColor;
3331
- else if (price<price2) return this.DownColor;
3332
- else return this.UnchagneColor;
3333
- }
3334
-
3335
- //单独处理成交量显示
3336
- this.FormatVolString=function(value,languageID)
3337
- {
3338
- var absValue = Math.abs(value);
3339
- if (absValue<100000)
3340
- return absValue.toFixed(0);
3341
- else if (absValue<10000000)
3342
- return (value/10000).toFixed(1)+"万";
3343
- else if (absValue<100000000)
3344
- return (value/10000).toFixed(0)+"万";
3345
- else if (absValue<1000000000)
3346
- return (value/100000000).toFixed(2)+"亿";
3347
- else if (absValue < 1000000000000)
3348
- return (value/100000000).toFixed(1)+"亿";
3349
- else
3350
- return (value/1000000000000).toFixed(1)+"万亿";
3351
- }
3352
-
3353
- this.DrawItemText=function(text, textColor, textAlign, left, top, width)
3354
- {
3355
- if (!text) return;
3356
-
3357
- var x=left;
3358
- if (textAlign=='center')
3359
- {
3360
- x=left+width/2;
3361
- this.Canvas.textAlign="center";
3362
- }
3363
- else if (textAlign=='right')
3364
- {
3365
- x=left+width-2;
3366
- this.Canvas.textAlign="right";
3367
- }
3368
- else
3369
- {
3370
- x+=2;
3371
- this.Canvas.textAlign="left";
3372
- }
3373
-
3374
- this.Canvas.textBaseline="middle";
3375
- this.Canvas.fillStyle=textColor;
3376
- this.Canvas.fillText(text,x,top+this.ItemMergin.Top+this.RowHeight/2);
3377
- }
3378
-
3379
- //字体由外面设置
3380
- this.TextEllipsis=function(text, maxWidth, maxText)
3381
- {
3382
- if (!text) return null;
3383
-
3384
- if (text.length<=maxText.length) return text;
3385
-
3386
- var start=maxText.length-3;
3387
- if (start<0) return null;
3388
- var newText=text.slice(0,start);
3389
- for(var i=start;i<text.length;++i)
3390
- {
3391
- var value=newText + text[i] + "...";
3392
- var width=this.Canvas.measureText(value).width;
3393
- if (width>maxWidth)
3394
- {
3395
- newText+="...";
3396
- break;
3397
- }
3398
- newText+=text[i];
3399
- }
3400
-
3401
- return newText;
3402
- }
3403
-
3404
- this.DrawMultiBar=function(colunmInfo, data, rtItem)
3405
- {
3406
- if (!data.Source || !IFrameSplitOperator.IsNonEmptyArray(data.Source)) return false;
3407
- var barData=data.Source[colunmInfo.DataIndex]; //{ Value:[0.4,0,2], Color:[0,1] };
3408
- if (!barData) return false;
3409
- if (!IFrameSplitOperator.IsNonEmptyArray(barData.Value)) return false;
3410
-
3411
- var width=rtItem.Width-this.BarMergin.Left-this.BarMergin.Right;
3412
- var left=rtItem.Left+this.BarMergin.Left;
3413
- var top=rtItem.Top+this.RowMergin.Top+this.BarMergin.Top;
3414
- var height=rtItem.Height-this.RowMergin.Top-this.RowMergin.Bottom-this.BarMergin.Top-this.BarMergin.Bottom;
3415
- var right=left+width;
3416
- for(var i=0;i<barData.Value.length;++i)
3417
- {
3418
- var value=barData.Value[i];
3419
- if (value<=0) continue;
3420
- if (left>=right) break;
3421
-
3422
- var barWidth=width*value;
3423
- if (barWidth<1) barWidth=1;
3424
- if (left+barWidth>right) barWidth=right-left;
3425
-
3426
- var colorIndex=i;
3427
- if (IFrameSplitOperator.IsNonEmptyArray(barData.Color) && i<barData.Color.length) colorIndex= barData.Color[i];
3428
-
3429
- this.Canvas.fillStyle=g_JSChartResource.DealList.FieldColor.Bar[colorIndex];
3430
- this.Canvas.fillRect(left,top,barWidth,height);
3431
-
3432
- left+=barWidth;
3433
- }
3434
- return true;
3435
- }
3436
-
3437
- this.DrawCenterBar=function(colunmInfo, data, rtItem)
3438
- {
3439
- if (!data.Source || !IFrameSplitOperator.IsNonEmptyArray(data.Source)) return false;
3440
- var barData=data.Source[colunmInfo.DataIndex]; //{ Value:[0.4,0,2], Color:[0,1] };
3441
- if (!barData) return false;
3442
- if (!IFrameSplitOperator.IsNonEmptyArray(barData.Value)) return false;
3443
-
3444
- var width=(rtItem.Width-this.BarMergin.Left-this.BarMergin.Right)/2;
3445
- var left=rtItem.Left+this.BarMergin.Left;
3446
- var center=left+width;
3447
- var top=rtItem.Top+this.RowMergin.Top+this.BarMergin.Top;
3448
- var height=rtItem.Height-this.RowMergin.Top-this.RowMergin.Bottom-this.BarMergin.Top-this.BarMergin.Bottom;
3449
- var right=left+width;
3450
-
3451
- for(var i=0;i<barData.Value.length && i<2;++i)
3452
- {
3453
- var value=barData.Value[i];
3454
- if (value<=0) continue;
3455
-
3456
- if (value>1) value=1;
3457
- var barWidth=width*value;
3458
- if (barWidth<1) barWidth=1;
3459
-
3460
- var colorIndex=i;
3461
- if (IFrameSplitOperator.IsNonEmptyArray(barData.Color) && i<barData.Color.length) colorIndex= barData.Color[i];
3462
- this.Canvas.fillStyle=g_JSChartResource.DealList.FieldColor.Bar[colorIndex];
3463
-
3464
- if (i==0) //左边
3465
- {
3466
- this.Canvas.fillRect(center,top,-barWidth,height);
3467
- }
3468
- else //右边
3469
- {
3470
- this.Canvas.fillRect(center,top,barWidth,height);
3471
- }
3472
- }
3473
- }
3474
-
3475
- //绘制线段
3476
- this.DrawLine=function(lineData, column, rtItem)
3477
- {
3478
- if (!lineData) return false;
3479
- if (!IFrameSplitOperator.IsNonEmptyArray(lineData.Data)) return false;
3480
-
3481
- var width=rtItem.Width-this.ItemMergin.Left-this.ItemMergin.Right;
3482
- var left=rtItem.Left+this.ItemMergin.Left;
3483
- var top=rtItem.Top+this.ItemMergin.Top;
3484
- var height=rtItem.Height-this.ItemMergin.Top-this.ItemMergin.Bottom;
3485
- var right=left+width;
3486
- var bottom=top+height;
3487
-
3488
- var Temp_GetXFromIndex=function(index)
3489
- {
3490
- var count=lineData.Count;
3491
- if (count==1)
3492
- {
3493
- if (index==0) return left;
3494
- else return right;
3495
- }
3496
- else if (count<=0)
3497
- {
3498
- return left;
3499
- }
3500
- else if (index>=count)
3501
- {
3502
- return right;
3503
- }
3504
- else
3505
- {
3506
- var offset=left+width*index/count;
3507
- return offset;
3508
- }
3509
- }
3510
-
3511
- var Temp_GetYFromData=function(value)
3512
- {
3513
- if(value<=lineData.Min) return bottom;
3514
- if(value>=lineData.Max) return top;
3515
-
3516
- var value=height*(value-lineData.Min)/(lineData.Max-lineData.Min);
3517
- return bottom-value;
3518
- }
3519
-
3520
- this.Canvas.save();
3521
- if (lineData.Color) this.Canvas.strokeStyle=lineData.Color;
3522
- else this.Canvas.strokeStyle=column.TextColor;
3523
-
3524
- var bFirstPoint=true;
3525
- var drawCount=0, x,y;
3526
- for(var i=0; i<lineData.Data.length; ++i)
3527
- {
3528
- var value=lineData.Data[i];
3529
- if (!IFrameSplitOperator.IsNumber(value)) continue;
3530
-
3531
- x=Temp_GetXFromIndex(i);
3532
- y=Temp_GetYFromData(value);
3533
-
3534
- if (bFirstPoint)
3535
- {
3536
- this.Canvas.beginPath();
3537
- this.Canvas.moveTo(x,y);
3538
- bFirstPoint=false;
3539
- }
3540
- else
3541
- {
3542
- this.Canvas.lineTo(x,y);
3543
- }
3544
-
3545
- ++drawCount;
3546
- }
3547
-
3548
- if (drawCount>0) this.Canvas.stroke();
3549
- this.Canvas.restore();
3550
- }
3551
-
3552
- //外部配置显示格式 颜色 对齐方式
3553
- this.GetCustomTextDrawInfo=function(columnInfo, symbol, value, drawInfo,data)
3554
- {
3555
- var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_DRAW_CUSTOM_TEXT);
3556
- if (!event || !event.Callback) return false;
3557
-
3558
- var sendData=
3559
- {
3560
- Symbol:symbol, Column:columnInfo, Value:value, Data:data,
3561
- Out:{ Text:null, TextColor:null, TextAlign:null }
3562
- };
3563
-
3564
- event.Callback(event,sendData,this);
3565
-
3566
- if (sendData.Out.Text) drawInfo.Text=sendData.Out.Text;
3567
- if (sendData.Out.TextColor) drawInfo.TextColor=sendData.Out.TextColor;
3568
- if (sendData.Out.TextAlign) drawInfo.TextAlign=sendData.Out.TextAlign;
3569
-
3570
- return true;
3571
- }
3572
-
3573
- this.GetFixedRowTextDrawInfo=function(rowIndex, colIndex, columnInfo, drawInfo)
3574
- {
3575
- var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_DRAW_REPORT_FIXEDROW_TEXT);
3576
- if (!event || !event.Callback) return false;
3577
-
3578
- var sendData=
3579
- {
3580
- RowIndex:rowIndex, ColIndex:colIndex, Column:columnInfo, Data:this.FixedRowData,
3581
- Out:{ Text:null, TextColor:null, TextAlign:null }
3582
- };
3583
-
3584
- event.Callback(event,sendData,this);
3585
-
3586
- if (sendData.Out.Text) drawInfo.Text=sendData.Out.Text;
3587
- if (sendData.Out.TextColor) drawInfo.TextColor=sendData.Out.TextColor;
3588
- if (sendData.Out.TextAlign) drawInfo.TextAlign=sendData.Out.TextAlign;
3589
-
3590
- return true;
3591
-
3592
- }
3593
-
3594
- this.GetVolColor=function(colunmInfo, data)
3595
- {
3596
- var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_DRAW_DEAL_VOL_COLOR);
3597
- if (event && event.Callback)
3598
- {
3599
- var sendData={ Data:data, TextColor:null };
3600
- event.Callback(event,sendData,this);
3601
- if (sendData.TextColor) return sendData.TextColor;
3602
- }
3603
-
3604
- return colunmInfo.TextColor;
3605
- }
3606
-
3607
- //获取股票名称颜色
3608
- this.GetNameColor=function(colunmInfo, symbol, rowType)
3609
- {
3610
- var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_DRAW_REPORT_NAME_COLOR);
3611
- if (event && event.Callback)
3612
- {
3613
- var sendData={ Symbol:symbol, TextColor:null, RowType:rowType };
3614
- event.Callback(event,sendData,this);
3615
- if (sendData.TextColor) return sendData.TextColor;
3616
- }
3617
-
3618
- return colunmInfo.TextColor;
3619
- }
3620
-
3621
- this.GetFontHeight=function(font,word)
3622
- {
3623
- return GetFontHeight(this.Canvas, font, word);
3624
- }
3625
-
3626
- this.OnMouseDown=function(x,y,e)
3627
- {
3628
- if (!this.Data) return null;
3629
-
3630
- if (this.Tab)
3631
- {
3632
- var tab=this.Tab.OnMouseDown(x,y,e);
3633
- if (tab) return { Type:1, Tab: tab }; //顶部工具栏
3634
- }
3635
-
3636
- var row=this.PtInFixedBody(x,y)
3637
- if (row)
3638
- {
3639
- var bRedraw=true;
3640
- var eventID=JSCHART_EVENT_ID.ON_CLICK_REPORT_FIXEDROW;
3641
- if (e.button==2) eventID=JSCHART_EVENT_ID.ON_RCLICK_REPORT_FIXEDROW;
3642
- this.SendClickEvent(eventID, { Data:row, X:x, Y:y, e:e });
3643
-
3644
- this.SelectedFixedRow=row.Index;
3645
- this.SelectedRow=-1;
3646
-
3647
- return { Type:4, Redraw:bRedraw, Row:row }; //行
3648
- }
3649
-
3650
- var row=this.PtInBody(x,y);
3651
- if (row)
3652
- {
3653
- var bRedraw=true;
3654
- if (this.SelectedModel==0)
3655
- {
3656
- if (this.SelectedRow==row.Index) bRedraw=false;
3657
- this.SelectedRow=row.Index;
3658
- this.SelectedFixedRow=-1;
3659
- }
3660
- else
3661
- {
3662
- if (this.SelectedRow==row.DataIndex) bRedraw=false;
3663
- this.SelectedRow=row.DataIndex;
3664
- this.SelectedFixedRow=-1;
3665
- }
3666
-
3667
- var eventID=JSCHART_EVENT_ID.ON_CLICK_REPORT_ROW;
3668
- if (e.button==2) eventID=JSCHART_EVENT_ID.ON_RCLICK_REPORT_ROW;
3669
- this.SendClickEvent(eventID, { Data:row, X:x, Y:y, e:e });
3670
-
3671
- return { Type:2, Redraw:bRedraw, Row:row }; //行
3672
- }
3673
-
3674
- var header=this.PtInHeader(x,y);
3675
- if (header)
3676
- {
3677
- var eventID=JSCHART_EVENT_ID.ON_CLICK_REPORT_HEADER;
3678
- if (e.button==2)
3679
- {
3680
- eventID=JSCHART_EVENT_ID.ON_RCLICK_REPORT_HEADER;
3681
- }
3682
- else if (e.button==0)
3683
- {
3684
- eventID=JSCHART_EVENT_ID.ON_CLICK_REPORT_HEADER;
3685
- }
3686
-
3687
- this.SendClickEvent(eventID, { Data:row, X:x, Y:y , e:e });
3688
- return { Type:3, Redraw:bRedraw, Header:header }; //表头
3689
- }
3690
-
3691
- return null;
3692
- }
3693
-
3694
- this.OnDblClick=function(x,y,e)
3695
- {
3696
- if (!this.Data) return false;
3697
-
3698
- var row=this.PtInBody(x,y);
3699
- if (row)
3700
- {
3701
- this.SendClickEvent(JSCHART_EVENT_ID.ON_DBCLICK_REPORT_ROW, { Data:row, X:x, Y:y });
3702
- return true;
3703
- }
3704
-
3705
- return false;
3706
- }
3707
-
3708
- this.PtInBody=function(x,y)
3709
- {
3710
- if (!this.Data) return null;
3711
- if (!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return null;
3712
-
3713
- var top=this.RectClient.Top+this.HeaderHeight;
3714
- var left=this.RectClient.Left;
3715
- var right=this.RectClient.Right;
3716
- var rowWidth=this.RectClient.Right-this.RectClient.Left;
3717
-
3718
- var textTop=top+this.FixedRowHeight*this.FixedRowCount;
3719
- for(var i=this.Data.YOffset, j=0; i<this.Data.Data.length && j<this.RowCount ;++i, ++j)
3720
- {
3721
- var symbol=this.Data.Data[i];
3722
- var rtRow={ Left:left, Top:textTop, Right:right, Bottom: textTop+this.RowHeight };
3723
-
3724
- if (x>=rtRow.Left && x<=rtRow.Right && y>=rtRow.Top && y<=rtRow.Bottom)
3725
- {
3726
- var data={ Rect:rtRow, DataIndex:i, Index:j , Symbol:symbol };
3727
- data.Item=this.PtInItem(x,y, rtRow.Top, rtRow.Bottom);
3728
- return data;
3729
- }
3730
-
3731
- textTop+=this.RowHeight;
3732
- }
3733
-
3734
- return null;
3735
- }
3736
-
3737
- this.PtInFixedBody=function(x,y)
3738
- {
3739
- if (this.FixedRowCount<=0) return null;
3740
-
3741
- var top=this.RectClient.Top+this.HeaderHeight;
3742
- var left=this.RectClient.Left;
3743
- var right=this.RectClient.Right;
3744
- var rowWidth=this.RectClient.Right-this.RectClient.Left;
3745
-
3746
- var textTop=top;
3747
- for(var i=0; i<this.FixedRowCount; ++i)
3748
- {
3749
- var rtRow={ Left:left, Top:textTop, Right:right, Bottom: textTop+this.FixedRowHeight };
3750
-
3751
- if (x>=rtRow.Left && x<=rtRow.Right && y>=rtRow.Top && y<=rtRow.Bottom)
3752
- {
3753
- var data={ Rect:rtRow, Index:i};
3754
- data.Item=this.PtInItem(x,y, rtRow.Top, rtRow.Bottom);
3755
- return data;
3756
- }
3757
-
3758
- textTop+=this.FixedRowHeight;
3759
- }
3760
-
3761
- return null;
3762
-
3763
- }
3764
-
3765
- this.PtInItem=function(x,y, top, bottom)
3766
- {
3767
- var left=this.RectClient.Left;
3768
- var right=this.RectClient.Right;
3769
-
3770
- var textLeft=left;
3771
- //固定列
3772
- for(var i=0;i<this.FixedColumn && i<this.Column.length;++i)
3773
- {
3774
- var item=this.Column[i];
3775
- var header={Left:textLeft, Right:textLeft+item.Width, Top:top, Bottom:bottom };
3776
-
3777
- if (x>=header.Left && x<=header.Right && y>=header.Top && y<=header.Bottom)
3778
- {
3779
- return { Rect:header, Column:item, Index:i };
3780
- }
3781
-
3782
- textLeft+=item.Width;
3783
- }
3784
-
3785
- for(var i=this.FixedColumn+this.Data.XOffset;i<this.Column.length;++i)
3786
- {
3787
- var item=this.Column[i];
3788
- if (textLeft>=right) break;
3789
-
3790
- var header={Left:textLeft, Right:textLeft+item.Width, Top:top, Bottom:bottom };
3791
-
3792
- if (x>=header.Left && x<=header.Right && y>=header.Top && y<=header.Bottom)
3793
- {
3794
- return { Rect:header, Column:item, Index:i };
3795
- }
3796
- textLeft+=item.Width;
3797
- }
3798
-
3799
- return null;
3800
- }
3801
-
3802
- this.PtInHeader=function(x,y)
3803
- {
3804
- if (!this.IsShowHeader) return null;
3805
-
3806
- var left=this.RectClient.Left;
3807
- var right=this.RectClient.Right;
3808
- var top=this.RectClient.Top;
3809
- var bottom=top+this.HeaderHeight;
3810
-
3811
- if (!(x>=left && x<=right && y>=top && y<=bottom)) return null;
3812
-
3813
- return this.PtInItem(x,y,top,bottom);
3814
- }
3815
-
3816
- this.IsPtInBody=function(x,y)
3817
- {
3818
- var top=this.RectClient.Top+this.HeaderHeight;
3819
- var left=this.RectClient.Left;
3820
- var right=this.RectClient.Right;
3821
- var bottom=this.RectClient.Bottom;
3822
-
3823
- if (x>=left && x<=right && y>=top && y<=bottom) return true;
3824
-
3825
- return false;
3826
- }
3827
-
3828
- this.IsPtInHeader=function(x,y)
3829
- {
3830
- if (!this.IsShowHeader) return false;
3831
-
3832
- var left=this.RectClient.Left;
3833
- var right=this.RectClient.Right;
3834
- var top=this.RectClient.Top;
3835
- var bottom=top+this.HeaderHeight;
3836
-
3837
- if (x>=left && x<=right && y>=top && y<=bottom) return true;
3838
-
3839
- return false;
3840
- }
3841
-
3842
- this.SendClickEvent=function(id, data)
3843
- {
3844
- var event=this.GetEventCallback(id);
3845
- if (event && event.Callback)
3846
- {
3847
- event.Callback(event,data,this);
3848
- }
3849
- }
3850
-
3851
- this.GetXScrollPos=function()
3852
- {
3853
- return this.Data.XOffset;
3854
- }
3855
-
3856
- this.GetXScrollRange=function()
3857
- {
3858
- var maxOffset=this.Column.length-this.FixedColumn-3;
3859
- if (maxOffset<0) return 0;
3860
-
3861
- return maxOffset;
3862
- }
3863
- }
3864
-
3865
-
3866
-
3867
- //页脚信息
3868
- function ChartReportPageInfo()
3869
- {
3870
- this.Canvas; //画布
3871
- this.ChartBorder; //边框信息
3872
- this.ChartFrame; //框架画法
3873
- this.Name; //名称
3874
- this.ClassName='ChartPageInfo'; //类名
3875
- this.IsDrawFirst=false;
3876
- this.IsShow=false; //是否显示
3877
- this.SizeChange=true;
3878
- this.Report;
3879
-
3880
- this.FontConfig={ Size:g_JSChartResource.Report.PageInfo.Font.Size, Name:g_JSChartResource.Report.PageInfo.Font.Name };
3881
- this.TextColor=g_JSChartResource.Report.PageInfo.TextColor;
3882
- this.BGColor=g_JSChartResource.Report.PageInfo.BGColor;
3883
- this.Mergin=
3884
- {
3885
- Top:g_JSChartResource.Report.PageInfo.Mergin.Top,
3886
- Left:g_JSChartResource.Report.PageInfo.Mergin.Left,
3887
- Right:g_JSChartResource.Report.PageInfo.Mergin.Right,
3888
- Bottom:g_JSChartResource.Report.PageInfo.Mergin.Bottom
3889
- }
3890
-
3891
-
3892
- this.Font;
3893
- this.TextHeight=0;
3894
-
3895
- this.ReloadResource=function(resource)
3896
- {
3897
- this.FontConfig={ Size:g_JSChartResource.Report.PageInfo.Font.Size, Name:g_JSChartResource.Report.PageInfo.Font.Name };
3898
- this.TextColor=g_JSChartResource.Report.PageInfo.TextColor;
3899
- this.BGColor=g_JSChartResource.Report.PageInfo.BGColor;
3900
- this.Mergin=
3901
- {
3902
- Top:g_JSChartResource.Report.PageInfo.Mergin.Top,
3903
- Left:g_JSChartResource.Report.PageInfo.Mergin.Left,
3904
- Right:g_JSChartResource.Report.PageInfo.Mergin.Right,
3905
- Bottom:g_JSChartResource.Report.PageInfo.Mergin.Bottom
3906
- }
3907
- }
3908
-
3909
- this.Draw=function()
3910
- {
3911
- if (!this.IsShow) return;
3912
- if (!this.Report) return;
3913
-
3914
- var pageStatus=this.Report.GetCurrentPageStatus();
3915
- if (pageStatus.IsSinglePage) return;
3916
-
3917
- if (this.SizeChange)
3918
- {
3919
- this.Font=`${this.FontConfig.Size}px ${ this.FontConfig.Name}`;
3920
- this.TextHeight=GetFontHeight(this.Canvas, this.Font, "擎")+this.Mergin.Top+this.Mergin.Bottom;
3921
- }
3922
-
3923
- var left=this.ChartBorder.GetLeft();
3924
- var right=this.ChartBorder.GetRight();
3925
- var bottom=this.ChartBorder.GetBottom()-2;
3926
-
3927
- var center=left+(right-left)/2;
3928
- var text=`${pageStatus.DataCount}/${pageStatus.DataCount}`;
3929
- this.Canvas.font=this.Font;
3930
- var textWidth=this.Canvas.measureText(text).width+4;
3931
-
3932
- var bgLeft=center-textWidth/2-this.Mergin.Left;
3933
- var bgTop=bottom-this.TextHeight;
3934
- this.Canvas.fillStyle=this.BGColor;;
3935
- this.Canvas.fillRect(bgLeft,bgTop,textWidth+(this.Mergin.Left+this.Mergin.Right),this.TextHeight);
3936
-
3937
- text=`${pageStatus.Start+1}/${pageStatus.DataCount}`;
3938
- this.Canvas.textAlign="center";
3939
- this.Canvas.textBaseline="bottom";
3940
- this.Canvas.fillStyle=this.TextColor;
3941
- this.Canvas.fillText(text,center,bottom-this.Mergin.Bottom);
3942
-
3943
- this.SizeChange=false;
3944
- }
3945
- }
3946
-
3947
-
3948
- //导出统一使用JSCommon命名空间名
3949
-
3950
- var JSReport=
3951
- {
3952
- JSCanvasElement:JSCanvasElement,
3953
- JSReportChart: JSReportChart,
3954
- IFrameSplitOperator: IFrameSplitOperator,
3955
- JSCHART_EVENT_ID:JSCHART_EVENT_ID,
3956
- REPORT_COLUMN_ID:REPORT_COLUMN_ID,
3957
- };
3958
-
3959
- export
3960
- {
3961
- JSReport,
3962
-
3963
- JSCanvasElement,
3964
- JSReportChart,
3965
- IFrameSplitOperator,
3966
- JSCHART_EVENT_ID,
3967
- REPORT_COLUMN_ID,
3968
- }
3969
-
3970
- /*
3971
- module.exports =
3972
- {
3973
- JSReport:
3974
- {
3975
- JSCanvasElement:JSCanvasElement,
3976
- JSReportChart: JSReportChart,
3977
- IFrameSplitOperator: IFrameSplitOperator,
3978
- JSCHART_EVENT_ID:JSCHART_EVENT_ID,
3979
- REPORT_COLUMN_ID:REPORT_COLUMN_ID,
3980
- },
3981
- };
3982
- */
3983
-