st-comp 0.0.277 → 0.0.279

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 (319) hide show
  1. package/README.md +19 -19
  2. package/es/ChartLayout.cjs +1 -1
  3. package/es/ChartLayout.js +1 -1
  4. package/es/ConfigProvider.cjs +1 -1
  5. package/es/ConfigProvider.js +3 -3
  6. package/es/Contextmenu.cjs +1 -1
  7. package/es/Contextmenu.js +7 -7
  8. package/es/CustomFunction.cjs +2 -2
  9. package/es/CustomFunction.js +514 -308
  10. package/es/FactorWarning.cjs +1 -1
  11. package/es/FactorWarning.js +37 -37
  12. package/es/HeatMap.cjs +1 -1
  13. package/es/HeatMap.js +7 -7
  14. package/es/Kline.cjs +1 -1
  15. package/es/Kline.js +18 -18
  16. package/es/KlineBasic.cjs +1 -1
  17. package/es/KlineBasic.js +93 -93
  18. package/es/KlineConfig.cjs +1 -1
  19. package/es/KlineConfig.js +17 -17
  20. package/es/KlineNew.cjs +1 -1
  21. package/es/KlineNew.js +14 -14
  22. package/es/KlinePlus.cjs +4 -4
  23. package/es/KlinePlus.js +760 -656
  24. package/es/LinearLegend.cjs +1 -1
  25. package/es/LinearLegend.js +1 -1
  26. package/es/Map.cjs +1 -1
  27. package/es/Map.js +1 -1
  28. package/es/MonacoEditor.cjs +1 -1
  29. package/es/MonacoEditor.js +18 -18
  30. package/es/Pagination.cjs +1 -1
  31. package/es/Pagination.js +76 -76
  32. package/es/PasswordPrompt.cjs +1 -1
  33. package/es/PasswordPrompt.js +2 -2
  34. package/es/Pie.cjs +2 -2
  35. package/es/Pie.js +14 -14
  36. package/es/Table.cjs +1 -1
  37. package/es/Table.js +22 -22
  38. package/es/TreeMap.cjs +1 -1
  39. package/es/TreeMap.js +4 -4
  40. package/es/User.cjs +1 -1
  41. package/es/User.js +73 -73
  42. package/es/VarSelectDialog.cjs +2 -2
  43. package/es/VarSelectDialog.js +21 -21
  44. package/es/VarietyAiHelper.cjs +4 -4
  45. package/es/VarietyAiHelper.js +139 -138
  46. package/es/VarietyAutoComplete.cjs +1 -1
  47. package/es/VarietyAutoComplete.js +16 -16
  48. package/es/VarietySearch.cjs +4 -4
  49. package/es/VarietySearch.js +861 -857
  50. package/es/{VarietySelect-6a166293.js → VarietySelect-41daac7b.js} +10 -10
  51. package/es/{VarietySelect-610903f0.cjs → VarietySelect-d58eee29.cjs} +1 -1
  52. package/es/VarietyTextCopy.cjs +2 -2
  53. package/es/VarietyTextCopy.js +25 -25
  54. package/es/VirtualTable.cjs +1 -1
  55. package/es/VirtualTable.js +6 -6
  56. package/es/{_initCloneObject-152b4f4e.js → _initCloneObject-5e73c9c8.js} +2 -2
  57. package/es/{_initCloneObject-76e116d0.cjs → _initCloneObject-a5832933.cjs} +1 -1
  58. package/es/aiTools-229609fb.cjs +2 -0
  59. package/es/aiTools-ce2f9281.js +115 -0
  60. package/es/aiTools.js +179 -176
  61. package/es/{config-provider-4c784baf.cjs → config-provider-06ea6b42.cjs} +1 -1
  62. package/es/{config-provider-7a3aca55.js → config-provider-88b637a8.js} +3 -3
  63. package/es/{dropdown-987c47fb.cjs → dropdown-4ce4c3e2.cjs} +1 -1
  64. package/es/{dropdown-01e09205.js → dropdown-72fbc15d.js} +2 -2
  65. package/es/{el-autocomplete-342ae823.js → el-autocomplete-6cafcdf1.js} +5 -5
  66. package/es/{el-autocomplete-16f66b34.cjs → el-autocomplete-e0857c5b.cjs} +1 -1
  67. package/es/{el-button-13dc915f.cjs → el-button-613e0bb2.cjs} +1 -1
  68. package/es/{el-button-314171a0.js → el-button-94d3de38.js} +3 -3
  69. package/es/{el-checkbox-5899681f.js → el-checkbox-6d4cb393.js} +3 -3
  70. package/es/{el-checkbox-bdf64663.cjs → el-checkbox-e90762df.cjs} +1 -1
  71. package/es/{el-dialog-0ef95df6.cjs → el-dialog-02942e22.cjs} +1 -1
  72. package/es/{el-dialog-86a3eec2.js → el-dialog-5e30161f.js} +4 -4
  73. package/es/{el-form-item-77ef6784.cjs → el-form-item-44f060d8.cjs} +1 -1
  74. package/es/{el-form-item-cda4d93c.js → el-form-item-9e8969ea.js} +5 -5
  75. package/es/{el-input-fa1445ad.js → el-input-342b2def.js} +13 -13
  76. package/es/{el-input-89222943.cjs → el-input-9a9a7f7f.cjs} +1 -1
  77. package/es/{el-input-number-d3338e5e.cjs → el-input-number-65c847d6.cjs} +1 -1
  78. package/es/{el-input-number-8f6dbf74.js → el-input-number-c22b803a.js} +35 -35
  79. package/es/{el-loading-84dde1a8.cjs → el-loading-8179b497.cjs} +1 -1
  80. package/es/{el-loading-9b671203.js → el-loading-bcc51e3d.js} +1 -1
  81. package/es/{el-menu-item-535fef90.js → el-menu-item-339baf6d.js} +21 -21
  82. package/es/{el-menu-item-4531fd0e.cjs → el-menu-item-83186444.cjs} +1 -1
  83. package/es/{el-message-box-621ed2f1.js → el-message-box-035b699c.js} +9 -9
  84. package/es/{el-message-box-f5717070.cjs → el-message-box-c62d3217.cjs} +1 -1
  85. package/es/{el-overlay-23de4324.js → el-overlay-3e17604b.js} +3 -3
  86. package/es/{el-overlay-151708cb.cjs → el-overlay-8f1da9e8.cjs} +1 -1
  87. package/es/{el-popconfirm-b8aa490e.cjs → el-popconfirm-4e32ec1b.cjs} +1 -1
  88. package/es/{el-popconfirm-bcff0aa5.js → el-popconfirm-f8a86e2c.js} +4 -4
  89. package/es/{el-popper-43ec37f4.cjs → el-popper-a4f3ae4d.cjs} +1 -1
  90. package/es/{el-popper-03988662.js → el-popper-fbd0dcea.js} +1 -1
  91. package/es/{el-segmented-db3a86be.js → el-segmented-56bd58a8.js} +2 -2
  92. package/es/{el-segmented-79a1367c.cjs → el-segmented-833ac177.cjs} +1 -1
  93. package/es/{el-select-4bd0010d.js → el-select-44fa547d.js} +8 -8
  94. package/es/{el-select-ec04e7ce.cjs → el-select-70806166.cjs} +1 -1
  95. package/es/{el-table-column-35e47229.cjs → el-table-column-3e2cdfca.cjs} +1 -1
  96. package/es/{el-table-column-7af2bec7.js → el-table-column-b74a857d.js} +9 -9
  97. package/es/{el-tag-bef9e83d.js → el-tag-66c83156.js} +2 -2
  98. package/es/{el-tag-5d5608e0.cjs → el-tag-9c2f329f.cjs} +1 -1
  99. package/es/{el-text-f998902c.js → el-text-034bd3f4.js} +1 -1
  100. package/es/{el-text-abf10fdf.cjs → el-text-6b2374bb.cjs} +1 -1
  101. package/es/index-00f6ca75.cjs +1 -0
  102. package/es/{index-a00e0534.cjs → index-185792a7.cjs} +1 -1
  103. package/es/{index-d1b554ac.js → index-1e2a38ab.js} +2 -2
  104. package/es/{index-0986e373.cjs → index-3153c1db.cjs} +1 -1
  105. package/es/{index-936e7dec.js → index-44a382a5.js} +2 -2
  106. package/es/{index-ce21e2ce.js → index-5216d5f5.js} +5 -5
  107. package/es/{index-7ed0999e.js → index-53cc4e43.js} +720 -716
  108. package/es/{index-cfcd60ca.cjs → index-5c0dd943.cjs} +1 -1
  109. package/es/{index-cfd00899.cjs → index-870b6c9d.cjs} +1 -1
  110. package/es/{index-a83ec4b7.js → index-8c2d7e05.js} +1 -1
  111. package/es/{index-8901a38c.cjs → index-94131fd7.cjs} +30 -30
  112. package/es/{index-db846633.cjs → index-9d16cea8.cjs} +1 -1
  113. package/es/{index-f3f6ee27.js → index-a33b2fb8.js} +178 -178
  114. package/es/{index-2d7ac156.cjs → index-a9246d17.cjs} +17 -17
  115. package/es/{index-60c69dd1.cjs → index-ac8dc53d.cjs} +1 -1
  116. package/es/{index-102edf6c.js → index-c5f2d372.js} +2 -2
  117. package/es/{index-6290ae0f.js → index-c6584658.js} +2 -2
  118. package/es/{index-5c44d71a.js → index-eb96e074.js} +149 -119
  119. package/es/{index-5ed42e9c.js → index-f034b910.js} +2 -2
  120. package/es/{index-c58e90e9.cjs → index-f58b2920.cjs} +1 -1
  121. package/es/{python-6cc6ec1b.js → python-8a1664e6.js} +18 -18
  122. package/es/{python-71f59893.cjs → python-a3db9620.cjs} +1 -1
  123. package/es/style.css +1 -1
  124. package/es/{use-form-common-props-02be4928.cjs → use-form-common-props-ac666630.cjs} +1 -1
  125. package/es/{use-form-common-props-76a09d89.js → use-form-common-props-ed72e914.js} +11 -11
  126. package/es/{use-global-config-31b3ec57.cjs → use-global-config-23472471.cjs} +1 -1
  127. package/es/{use-global-config-0f43458b.js → use-global-config-ee406d58.js} +2 -2
  128. package/es/{validator-ea292506.cjs → validator-366dbf39.cjs} +1 -1
  129. package/es/{validator-0e037618.js → validator-c60a8956.js} +1 -1
  130. package/es/{zh-cn-1227eb8a.js → zh-cn-b59a0910.js} +1 -1
  131. package/es/{zh-cn-0edc7234.cjs → zh-cn-c21d12d8.cjs} +1 -1
  132. package/lib/aiTools.js +179 -176
  133. package/lib/bundle.js +1 -1
  134. package/lib/bundle.umd.cjs +230 -230
  135. package/lib/{index-2a269748.js → index-62fa175a.js} +30149 -29800
  136. package/lib/{python-41da18e5.js → python-4a48fa39.js} +1 -1
  137. package/lib/style.css +1 -1
  138. package/package.json +53 -44
  139. package/auto-imports.d.ts +0 -13
  140. package/components.d.ts +0 -59
  141. package/es/aiTools-a3b095f6.js +0 -113
  142. package/es/aiTools-f36136a4.cjs +0 -2
  143. package/es/index-476c4459.cjs +0 -1
  144. package/index.html +0 -13
  145. package/packages/ChartLayout/index.ts +0 -8
  146. package/packages/ChartLayout/index.vue +0 -63
  147. package/packages/ConfigProvider/index.ts +0 -8
  148. package/packages/ConfigProvider/index.vue +0 -66
  149. package/packages/Contextmenu/index.ts +0 -8
  150. package/packages/Contextmenu/index.vue +0 -134
  151. package/packages/CustomFunction/components/ManageDialog.vue +0 -706
  152. package/packages/CustomFunction/index.ts +0 -8
  153. package/packages/CustomFunction/index.vue +0 -200
  154. package/packages/FactorWarning/index.ts +0 -8
  155. package/packages/FactorWarning/index.vue +0 -754
  156. package/packages/FactorWarning/tools.js +0 -10
  157. package/packages/HeatMap/index.ts +0 -8
  158. package/packages/HeatMap/index.vue +0 -141
  159. package/packages/Kline/components/Contextmenu/index.vue +0 -110
  160. package/packages/Kline/components/Tips/index.vue +0 -40
  161. package/packages/Kline/componentsNew/KlineSlide/index.vue +0 -155
  162. package/packages/Kline/componentsNew/KlineSub/index.vue +0 -297
  163. package/packages/Kline/componentsNew/KlineTips/index.vue +0 -66
  164. package/packages/Kline/componentsNew/KlineUtils/index.vue +0 -84
  165. package/packages/Kline/componentsNew/Tips/index.vue +0 -33
  166. package/packages/Kline/formatKlineData.ts +0 -109
  167. package/packages/Kline/images/buy.svg +0 -1
  168. package/packages/Kline/images/pen.png +0 -0
  169. package/packages/Kline/images/sell.svg +0 -1
  170. package/packages/Kline/images/t.svg +0 -1
  171. package/packages/Kline/index.ts +0 -16
  172. package/packages/Kline/index.vue +0 -891
  173. package/packages/Kline/option.ts +0 -539
  174. package/packages/Kline/type.d.ts +0 -219
  175. package/packages/Kline/utils.ts +0 -682
  176. package/packages/KlineBasic/api.js +0 -58
  177. package/packages/KlineBasic/components/AverageTips/index.vue +0 -33
  178. package/packages/KlineBasic/components/Contextmenu/index.vue +0 -105
  179. package/packages/KlineBasic/components/KlineSub/index.vue +0 -332
  180. package/packages/KlineBasic/components/KlineTips/index.vue +0 -99
  181. package/packages/KlineBasic/components/Tips/index.vue +0 -56
  182. package/packages/KlineBasic/index.ts +0 -8
  183. package/packages/KlineBasic/index.vue +0 -839
  184. package/packages/KlineBasic/utils.js +0 -258
  185. package/packages/KlineConfig/config.js +0 -46
  186. package/packages/KlineConfig/index.ts +0 -8
  187. package/packages/KlineConfig/index.vue +0 -356
  188. package/packages/KlineNew/components/KlineSlide/index.vue +0 -156
  189. package/packages/KlineNew/components/KlineSub/index.vue +0 -335
  190. package/packages/KlineNew/components/KlineTips/index.vue +0 -96
  191. package/packages/KlineNew/components/KlineUtils/index.vue +0 -341
  192. package/packages/KlineNew/components/Tips/index.vue +0 -33
  193. package/packages/KlineNew/index.ts +0 -14
  194. package/packages/KlinePlus/components/SliderChart.vue +0 -208
  195. package/packages/KlinePlus/components/Tips.vue +0 -36
  196. package/packages/KlinePlus/images/buy.svg +0 -1
  197. package/packages/KlinePlus/images/sell.svg +0 -1
  198. package/packages/KlinePlus/images/t.svg +0 -1
  199. package/packages/KlinePlus/index.ts +0 -8
  200. package/packages/KlinePlus/index.vue +0 -1067
  201. package/packages/KlinePlus/utils.js +0 -771
  202. package/packages/LinearLegend/index.ts +0 -8
  203. package/packages/LinearLegend/index.vue +0 -112
  204. package/packages/Map/China.json +0 -1
  205. package/packages/Map/index.ts +0 -8
  206. package/packages/Map/index.vue +0 -147
  207. package/packages/MonacoEditor/index.ts +0 -8
  208. package/packages/MonacoEditor/index.vue +0 -1141
  209. package/packages/MonacoEditor/tools.js +0 -18
  210. package/packages/Pagination/index.ts +0 -8
  211. package/packages/Pagination/index.vue +0 -87
  212. package/packages/PasswordPrompt/index.ts +0 -8
  213. package/packages/PasswordPrompt/index.vue +0 -267
  214. package/packages/Pie/index.ts +0 -8
  215. package/packages/Pie/index.vue +0 -148
  216. package/packages/Table/components/Button/index.vue +0 -61
  217. package/packages/Table/components/Formatter/index.vue +0 -26
  218. package/packages/Table/index.d.ts +0 -0
  219. package/packages/Table/index.ts +0 -8
  220. package/packages/Table/index.vue +0 -133
  221. package/packages/TreeMap/index.ts +0 -8
  222. package/packages/TreeMap/index.vue +0 -186
  223. package/packages/User/components/EditInfoDialog/Mobile.vue +0 -214
  224. package/packages/User/components/EditInfoDialog/index.vue +0 -161
  225. package/packages/User/components/EditPasswordDialog.vue +0 -168
  226. package/packages/User/components/SetPasswordDialog.vue +0 -160
  227. package/packages/User/index.ts +0 -8
  228. package/packages/User/index.vue +0 -117
  229. package/packages/VarSelectDialog/Mock.js +0 -495
  230. package/packages/VarSelectDialog/VarietySelect.vue +0 -78
  231. package/packages/VarSelectDialog/index.ts +0 -8
  232. package/packages/VarSelectDialog/index.vue +0 -323
  233. package/packages/VarietyAiHelper/images/like.png +0 -0
  234. package/packages/VarietyAiHelper/images/like_no.png +0 -0
  235. package/packages/VarietyAiHelper/index.ts +0 -8
  236. package/packages/VarietyAiHelper/index.vue +0 -910
  237. package/packages/VarietyAutoComplete/index.ts +0 -8
  238. package/packages/VarietyAutoComplete/index.vue +0 -89
  239. package/packages/VarietySearch/components/AddTag/index.vue +0 -268
  240. package/packages/VarietySearch/components/CommonIndicator/IndicatorTags.vue +0 -52
  241. package/packages/VarietySearch/components/CommonIndicator/index.vue +0 -697
  242. package/packages/VarietySearch/components/CommonIndicator/tools.js +0 -260
  243. package/packages/VarietySearch/components/CompositeOrder/index.vue +0 -260
  244. package/packages/VarietySearch/components/FactorScreen/FactorDescription.vue +0 -70
  245. package/packages/VarietySearch/components/FactorScreen/index.vue +0 -1158
  246. package/packages/VarietySearch/components/FactorScreen/tools.js +0 -34
  247. package/packages/VarietySearch/config.js +0 -539
  248. package/packages/VarietySearch/index.ts +0 -8
  249. package/packages/VarietySearch/index.vue +0 -688
  250. package/packages/VarietyTextCopy/index.ts +0 -8
  251. package/packages/VarietyTextCopy/index.vue +0 -136
  252. package/packages/VirtualTable/index.ts +0 -8
  253. package/packages/VirtualTable/index.vue +0 -241
  254. package/packages/index.ts +0 -59
  255. package/public/aiTools.js +0 -176
  256. package/public/talib.wasm +0 -0
  257. package/public/vite.svg +0 -1
  258. package/src/App.vue +0 -140
  259. package/src/assets/vue.svg +0 -1
  260. package/src/components/Dialog/index.vue +0 -16
  261. package/src/components/Kline/index.vue +0 -21
  262. package/src/components/Table/index.vue +0 -27
  263. package/src/main.ts +0 -17
  264. package/src/pages/ChartLayout/index.vue +0 -22
  265. package/src/pages/ConfigProvider/index.vue +0 -9
  266. package/src/pages/Contextmenu/index.vue +0 -46
  267. package/src/pages/CustomFunction/index.vue +0 -13
  268. package/src/pages/FactorWarning/index.vue +0 -203
  269. package/src/pages/HeatMap/index.vue +0 -128
  270. package/src/pages/Kline/index.vue +0 -12
  271. package/src/pages/KlineBasic/api.js +0 -48
  272. package/src/pages/KlineBasic/index.vue +0 -366
  273. package/src/pages/KlineBasic/indicator.js +0 -114
  274. package/src/pages/KlineConfig/index.vue +0 -20
  275. package/src/pages/KlineNew/components/KlineAction/components/ContextMenu/index.vue +0 -91
  276. package/src/pages/KlineNew/components/KlineAction/components/YearChart/index.vue +0 -532
  277. package/src/pages/KlineNew/components/KlineAction/images/pen.png +0 -0
  278. package/src/pages/KlineNew/components/KlineAction/index.vue +0 -716
  279. package/src/pages/KlineNew/components/KlineAction/mockApi/index.js +0 -13
  280. package/src/pages/KlineNew/components/KlineAction/utils.js +0 -571
  281. package/src/pages/KlineNew/components/KlineBasic/index.vue +0 -336
  282. package/src/pages/KlineNew/components/KlineBasic/utils.js +0 -46
  283. package/src/pages/KlineNew/components/KlineNew/index.vue +0 -316
  284. package/src/pages/KlineNew/components/KlineNew/utils.js +0 -31
  285. package/src/pages/KlineNew/components/KlineSlide/index.vue +0 -448
  286. package/src/pages/KlineNew/components/KlineSlide/utils.js +0 -78
  287. package/src/pages/KlineNew/components/KlineSlideNew/index.vue +0 -430
  288. package/src/pages/KlineNew/components/KlineSlideNew/utils.js +0 -78
  289. package/src/pages/KlineNew/index.vue +0 -92
  290. package/src/pages/KlinePlus/KlineDialog/MultiCycle.vue +0 -312
  291. package/src/pages/KlinePlus/KlineDialog/api.js +0 -108
  292. package/src/pages/KlinePlus/KlineDialog/index.vue +0 -582
  293. package/src/pages/KlinePlus/KlineDialog/indicator.js +0 -109
  294. package/src/pages/KlinePlus/KlineDialog/tools.js +0 -86
  295. package/src/pages/KlinePlus/index.vue +0 -30
  296. package/src/pages/KlinePlus/tradeLogMock.js +0 -1927
  297. package/src/pages/LinearLegend/index.vue +0 -92
  298. package/src/pages/Map/index.vue +0 -62
  299. package/src/pages/MonacoEditor/index.vue +0 -63
  300. package/src/pages/Pagination/index.vue +0 -24
  301. package/src/pages/PasswordPrompt/index.vue +0 -12
  302. package/src/pages/Pie/index.vue +0 -36
  303. package/src/pages/Table/index.vue +0 -117
  304. package/src/pages/TreeMap/index.vue +0 -542
  305. package/src/pages/User/index.vue +0 -24
  306. package/src/pages/VarSelectDialog/index.vue +0 -16
  307. package/src/pages/VarietyAiHelper/index.vue +0 -20
  308. package/src/pages/VarietyAutoComplete/index.vue +0 -19
  309. package/src/pages/VarietySearch/api.js +0 -70
  310. package/src/pages/VarietySearch/index.vue +0 -467
  311. package/src/pages/VarietyTextCopy/index.vue +0 -24
  312. package/src/pages/VirtualTable/demo.json +0 -6377
  313. package/src/pages/VirtualTable/index.vue +0 -79
  314. package/src/router/index.ts +0 -9
  315. package/src/router/routes.ts +0 -132
  316. package/src/style.css +0 -79
  317. package/src/vite-env.d.ts +0 -9
  318. package/tsconfig.json +0 -30
  319. package/tsconfig.node.json +0 -10
@@ -1,430 +0,0 @@
1
- <template>
2
- <div
3
- class="kline"
4
- @mousemove="isSelect = true"
5
- @mouseout="isSelect = false"
6
- >
7
- <div class="kline-mainTips">
8
- <st-kline-tips-new :data="klineData" :activeIndex="activeIndex"/>
9
- </div>
10
- <div class="kline-mainChart" ref="mainChartRef"></div>
11
- <div class="kline-sub">
12
- <st-kline-sub-new
13
- ref="klineSubRef"
14
- v-model="subIndicator"
15
- :data="klineData"
16
- :activeIndex="activeIndex"
17
- :subIndicatorList="subIndicatorList"
18
- />
19
- </div>
20
- <st-kline-slide-new ref="slideChartRef" :data="slideData" @change="slideChange" />
21
- <st-kline-utils-new ref="klineUtilsRef" />
22
- </div>
23
- </template>
24
-
25
- <script setup>
26
- import { ref, onMounted, onUnmounted, watch, computed } from "vue"
27
- import * as echarts from 'echarts'
28
- import { getKlineDataApi, formatConfig } from './utils'
29
- import dayjs from "dayjs"
30
- import { stMath } from 'st-func'
31
- const { round } = stMath
32
-
33
- const props = defineProps({
34
- code: { type: String, required: true }, // 品种代码
35
- freqId: { type: String, required: true }, // 周期
36
- freqDict: { type: Object, required: true }, // 周期字典
37
- mainIndicator: { type: String, required: true }, // 主图指标
38
- mainIndicatorList: { type: Array, required: true }, // 主图指标列表
39
- subIndicatorList: { type: Array, required: true }, // 副图指标列表
40
- config: { type: Object, default: () => ({}) }, // 配置
41
- })
42
-
43
- let mainChart
44
- let mainDataZoomTimer = null // 主图数据缩放定时器
45
- let isLoadHistory = false // 是否正在加载历史数据
46
- let isloadAllHistory = false // 是否加载完全部历史数据
47
- let isLoadNew = false // 是否正在加载新数据
48
- let isloadAllNew = false // 是否加载完全部新数据
49
- let resizeRo // dom元素监听事件
50
- let highlightTimer = null // 高亮处理事件的定时器
51
-
52
- const mainChartRef = ref() // 主图
53
- const klineSubRef = ref() // 副图
54
- const slideChartRef = ref() // 拖动轴
55
- const klineUtilsRef = ref() // k线辅助函数实例
56
- const isSelect = ref(false) // 是否选中,选中可通过键盘按键操作
57
- const klineData = ref({}) // 绘图数据
58
- const slideData = ref([])
59
- const activeIndex = ref(0) // 显示的index
60
- const subIndicator = ref('VOL') // 副图指标
61
-
62
- const config = computed(() => {
63
- const freqName = props.freqDict.find((item) => item.value === props.freqId).label
64
- return formatConfig(props.config, freqName)
65
- })
66
-
67
- watch(
68
- () => props.code,
69
- async() => {
70
- isLoadHistory = false
71
- isloadAllHistory = false
72
- isLoadNew = false
73
- isloadAllNew = false
74
- const res = await getKlineDataApi({
75
- startTime: `${dayjs().subtract(defaultShowYears, 'year').format("YYYY-MM-DD")} 00:00:00`,
76
- endTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
77
- cycle: '6',
78
- varietyCode: props.code,
79
- contractType: 0, // 合约类型 0-主连 1-加权
80
- right: 1,
81
- })
82
- slideData.value = res.map(i => [i[0], i[4]])
83
- getMainData(
84
- `${slideData.value[slideData.value.length - 1 - defaultShowDays][0].split(' ')[0]} 00:00:00`,
85
- `${slideData.value[slideData.value.length - 1][0].split(' ')[0]} 24:00:00`
86
- )
87
- },
88
- { deep: true }
89
- )
90
-
91
- watch(
92
- () => [props.freqId, props.mainIndicator, subIndicator],
93
- () => {
94
- const { defaultShowDays } = config.value
95
- isLoadHistory = false
96
- isloadAllHistory = false
97
- isLoadNew = false
98
- isloadAllNew = false
99
- getMainData(
100
- `${slideData.value[slideData.value.length - 1 - defaultShowDays][0].split(' ')[0]} 00:00:00`,
101
- `${slideData.value[slideData.value.length - 1][0].split(' ')[0]} 24:00:00`
102
- )
103
- },
104
- { deep: true }
105
- )
106
-
107
- onMounted(async () => {
108
- const { defaultShowYears, defaultShowDays } = config.value
109
- // 初始化指标计算方法
110
- mainChart = echarts.init(mainChartRef.value)
111
- klineSubRef.value.connect(mainChart)
112
- addEventListener()
113
- // 请求滚动条数据
114
- const res = await getKlineDataApi({
115
- startTime: `${dayjs().subtract(defaultShowYears, 'year').format("YYYY-MM-DD")} 00:00:00`,
116
- endTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
117
- cycle: '6',
118
- varietyCode: props.code,
119
- contractType: 0, // 合约类型 0-主连 1-加权
120
- right: 1,
121
- })
122
- slideData.value = res.time.map((item, index) => [item, res.data[index][2]])
123
- await getMainData(
124
- `${slideData.value[slideData.value.length - 1 - defaultShowDays][0].split(' ')[0]} 00:00:00`,
125
- `${slideData.value[slideData.value.length - 1][0].split(' ')[0]} 24:00:00`
126
- )
127
- // 绑定resize事件
128
- let isFirst = true
129
- resizeRo = new ResizeObserver(() => {
130
- if (isFirst) {
131
- isFirst = null
132
- return
133
- }
134
- mainChart.resize()
135
- })
136
- resizeRo.observe(mainChartRef.value)
137
- window.addEventListener('keydown', keyDownEvent)
138
- })
139
-
140
- onUnmounted(() => {
141
- window.removeEventListener('keydown', keyDownEvent)
142
- mainChart.off('datazoom')
143
- mainChart.off('highlight')
144
- mainChart.off('globalout')
145
- mainChart.dispose()
146
- resizeRo.disconnect()
147
- resizeRo = null
148
- })
149
-
150
- // 绑定事件
151
- const addEventListener = () => {
152
- mainChart.on('datazoom', (params) => {
153
- clearTimeout(mainDataZoomTimer)
154
- mainDataZoomTimer = setTimeout(() => {
155
- const { loadCheckCount, loadAddCount } = config.value
156
- const { startValue, endValue } = mainChart.getOption().dataZoom[0]
157
- const klineDataTime = mainChart.getOption().xAxis[0].data
158
- const startTime = klineDataTime[startValue].split(' ')[0]
159
- const endTime = klineDataTime[endValue].split(' ')[0]
160
- // 加载数据
161
- if (startValue < loadCheckCount && isLoadHistory === false && isloadAllHistory === false) {
162
- // 左侧数据小于1000条,加载左侧数据
163
- isLoadHistory = true
164
- getMoreData({
165
- endTime: klineData.value.time[0],
166
- cycle: props.freqId,
167
- limit: loadAddCount,
168
- })
169
- }
170
- if (endValue > klineData.value.time.length - loadCheckCount && isLoadNew === false && isloadAllNew === false) {
171
- // 右侧数据小于1000条,加载右侧数据
172
- isLoadNew = true
173
- getMoreData({
174
- startTime: klineData.value.time[klineData.value.time.length - 1],
175
- cycle: props.freqId,
176
- limit: loadAddCount,
177
- })
178
- }
179
- // 重置滚动条
180
- slideChartRef.value.resetSlide(startTime, endTime, config.value.maxShowDays)
181
- clearTimeout(mainDataZoomTimer)
182
- }, 100)
183
- })
184
- // 高亮事件
185
- mainChart.on('highlight', (data) => {
186
- let index = data.dataIndex || -1
187
- if (data.batch ) {
188
- index = typeof data?.batch[0]?.dataIndex === 'number' ? data?.batch[0]?.dataIndex : -1
189
- }
190
- clearTimeout(highlightTimer)
191
- highlightTimer = setTimeout(() => {
192
- activeIndex.value = index
193
- clearTimeout(highlightTimer)
194
- }, 20)
195
- })
196
- // 移出图表事件
197
- mainChart.on('globalout', () => {
198
- const index = mainChart.getOption().dataZoom[0].endValue
199
- activeIndex.value = index
200
- })
201
- }
202
-
203
- // 键盘事件
204
- const keyDownEvent = e => {
205
- // 只有选中或者按ctrl才激活按键
206
- if (!(e.ctrlKey || isSelect.value)) return
207
- const option = mainChart.getOption()
208
- const { startValue, endValue } = option.dataZoom[0]
209
- mainChart.dispatchAction({
210
- type: 'dataZoom',
211
- ...klineUtilsRef.value.handleKeyDown(e, { startValue, endValue, maxIndex: option.xAxis[0].data.length - 1})
212
- })
213
- }
214
-
215
- // 拖动轴发生变化
216
- const slideChange = async({ startTime, endTime }) => {
217
- isLoadHistory = false
218
- isloadAllHistory = false
219
- isLoadNew = false
220
- isloadAllNew = false
221
- getMainData(startTime, endTime, false)
222
- }
223
-
224
- // 获取首屏K线数据
225
- const getMainData = async(startTime, endTime, isResetSlide = true) => {
226
- const { maxShowDays, preLoadDays } = config.value
227
- let startIndex = -1
228
- let endIndex = -1
229
- slideData.value.forEach((item, index) => {
230
- if (item[0].split(' ')[0] === startTime.split(' ')[0]) {
231
- startIndex = index
232
- }
233
- if (item[0].split(' ')[0] === endTime.split(' ')[0]) {
234
- endIndex = index
235
- }
236
- })
237
- const loadStartTime = `${slideData.value[startIndex - preLoadDays < 0 ? 0 : startIndex - preLoadDays][0].split(' ')[0]} 00:00:00`
238
- const loadEndTime = `${slideData.value[endIndex + preLoadDays > slideData.value.length ? slideData.value.length - 1 : endIndex + preLoadDays][0].split(' ')[0]} 24:00:00`
239
- const res = await getKlineDataApi({
240
- startTime: loadStartTime,
241
- endTime: loadEndTime,
242
- cycle: props.freqId,
243
- varietyCode: props.code,
244
- contractType: 0, // 合约类型 0-主连 1-加权
245
- right: 1,
246
- mainIndicator: props.mainIndicator,
247
- subIndicator: subIndicator.value,
248
- })
249
- klineData.value = res
250
- const dataZoomInfo = klineUtilsRef.value.getDataZoomInfoByTime({
251
- showStartTime: startTime,
252
- showEndTime: endTime,
253
- time: res.time,
254
- maxShowDays
255
- })
256
- draw('main', { ...dataZoomInfo })
257
- draw('sub', { ...dataZoomInfo })
258
- activeIndex.value = mainChart.getOption().dataZoom[0].endValue
259
- if (isResetSlide) {
260
- slideChartRef.value.resetSlide(startTime, endTime, config.value.maxShowDays)
261
- }
262
- }
263
-
264
- // 获取更多数据
265
- const getMoreData = async(params) => {
266
- const { maxShowDays } = config.value
267
- const res = await getKlineDataApi({
268
- varietyCode: props.code,
269
- contractType: 0, // 合约类型 0-主连 1-加权
270
- right: 1,
271
- mainIndicator: props.mainIndicator,
272
- subIndicator: subIndicator.value,
273
- ...params,
274
- })
275
- const { startValue, endValue } = mainChart.getOption().dataZoom[0]
276
- const klineDataTime = mainChart.getOption().xAxis[0].data
277
- const showStartTime = klineDataTime[startValue]
278
- const showEndTime = klineDataTime[endValue]
279
- if (params.startTime) {
280
- // 加载新数据
281
- klineData.value = klineUtilsRef.value.mergeData(klineData.value, res)
282
- if (res.time.length === 1) {
283
- // 表示已经加载完全部新数据
284
- isloadAllNew = true
285
- isLoadNew = false
286
- return
287
- }
288
- isLoadNew = false
289
- } else {
290
- // 加载历史数据
291
- klineData.value = klineUtilsRef.value.mergeData(res, klineData.value)
292
- if (new Date(slideData.value[0][0]) > new Date(res.time[0])) {
293
- // 表示历史数据已加载完
294
- isloadAllHistory = true
295
- }
296
- isLoadHistory = false
297
- }
298
- const dataZoomInfo = klineUtilsRef.value.getDataZoomInfoByTime({ showStartTime, showEndTime, time: klineData.value.time, maxShowDays })
299
- draw('main', { ...dataZoomInfo })
300
- draw('sub', { ...dataZoomInfo })
301
- }
302
-
303
- // 绘制函数
304
- const draw = (type, params = {}) => {
305
- const { startValue, endValue, maxValueSpan } = params
306
- const callBackMap = new Map([
307
- [ "main", () => {
308
- const indicatorSeries = klineData.value.mainIndicator.map((item) => {
309
- return {
310
- name: item.key,
311
- type: 'line',
312
- silent: true,
313
- symbol: 'none',
314
- data: item.data,
315
- lineStyle: {
316
- width: item.width || 1,
317
- },
318
- itemStyle: {
319
- color: item.color,
320
- }
321
- }
322
- })
323
-
324
- mainChart.setOption({
325
- animation: false,
326
- grid: {
327
- left: `${config.value.gridLeft}px`,
328
- top: '20px',
329
- right: `${config.value.gridRight}px`,
330
- bottom: '6px',
331
- },
332
- dataZoom: [
333
- {
334
- type: 'inside',
335
- startValue,
336
- endValue,
337
- maxValueSpan,
338
- }
339
- ],
340
- tooltip: {
341
- trigger: 'axis',
342
- appendToBody: true,
343
- confine: true,
344
- axisPointer: {
345
- type: 'cross',
346
- label: {
347
- rich: {},
348
- formatter: data => {
349
- const { axisDimension, value } = data
350
- if(axisDimension === 'x') {
351
- return ''
352
- } else {
353
- return String(round(value))
354
- }
355
- }
356
- },
357
- },
358
- formatter: () => '',
359
- },
360
- xAxis: {
361
- show: false,
362
- type: 'category',
363
- data: klineData.value.time,
364
- splitLine: {
365
- show: false,
366
- },
367
- },
368
- yAxis: {
369
- type: 'value',
370
- axisLine: {
371
- show: true,
372
- },
373
- splitLine: {
374
- show: true,
375
- lineStyle: {
376
- type: "dotted",
377
- color: "#333",
378
- },
379
- },
380
- min: (value) => round(value.min),
381
- max: (value) => round(value.max),
382
- },
383
- series: [
384
- {
385
- type: 'candlestick',
386
- data: klineData.value.data,
387
- itemStyle: {
388
- color: "transparent",
389
- color0: "#00FFFF",
390
- borderColor: "#FF0000",
391
- borderColor0: "#00FFFF",
392
- borderWidth: 1,
393
- },
394
- },
395
- ...indicatorSeries,
396
- ]
397
- }, true)
398
- }],
399
- [ "sub", () => {
400
- klineSubRef.value.draw({ startValue, endValue, maxValueSpan }, config.value)
401
- }],
402
- ]);
403
- const callBack = callBackMap.get(type);
404
- if (callBack instanceof Function) {
405
- callBack();
406
- }
407
- }
408
- </script>
409
-
410
- <style lang="scss" scoped>
411
- .kline {
412
- width: 100%;
413
- height: 100%;
414
- background: #000;
415
- &-mainTips {
416
- height: 26px;
417
- }
418
- &-mainChart {
419
- width: 100%;
420
- height: calc(65% - 26px);
421
- }
422
- &-subTips {
423
- height: 16px;
424
- }
425
- &-sub {
426
- width: 100%;
427
- height: calc(35% - 50px - 16px);
428
- }
429
- }
430
- </style>
@@ -1,78 +0,0 @@
1
- import axios from 'axios'
2
-
3
- const defaultConfig = {
4
- defaultShowDays: 50, // 默认展示天数,会根据不同周期进行赋值
5
- preLoadDays: 50, // 预加载天数,会分局不同周期进行赋值
6
- maxShowDays: 500, // 最大展示天数,会分局不同周期进行赋值
7
- defaultShowYears: 10, // 默认展示多少年数据
8
- preLoadCount: 800, // 预加载数据条数(用于计算指标线)
9
- loadCheckCount: 500, // 加载数据检查条数
10
- loadAddCount: 2000, // 加载数据条数
11
- gridLeft: 60, // echarts绘图左侧grid距离
12
- gridRight: 20, // echarts绘图右侧grid距离
13
- }
14
-
15
- const freqConfig = {
16
- '1m': {
17
- defaultShowDays: 2, // 默认展示天数
18
- preLoadDays: 4, // 预加载天数
19
- maxShowDays: 20, // 最大展示天数
20
- },
21
- '5m': {
22
- defaultShowDays: 4, // 默认展示天数
23
- preLoadDays: 10, // 预加载天数
24
- maxShowDays: 20, // 最大展示天数
25
- },
26
- '15m': {
27
- defaultShowDays: 12, // 默认展示天数
28
- preLoadDays: 24, // 预加载天数
29
- maxShowDays: 50, // 最大展示天数
30
- },
31
- '30m': {
32
- defaultShowDays: 25, // 默认展示天数
33
- preLoadDays: 50, // 预加载天数
34
- maxShowDays: 100, // 最大展示天数
35
- },
36
- '60m': {
37
- defaultShowDays: 50, // 默认展示天数
38
- preLoadDays: 100, // 预加载天数
39
- maxShowDays: 200, // 最大展示天数
40
- },
41
- '1d': {
42
- defaultShowDays: 200, // 默认展示天数
43
- preLoadDays: 400, // 预加载天数
44
- maxShowDays: 800, // 最大展示天数
45
- },
46
- '1w': {
47
- defaultShowDays: 1000, // 默认展示天数
48
- preLoadDays: 2000, // 预加载天数
49
- maxShowDays: 4000, // 最大展示天数
50
- },
51
- '1mon': {
52
- defaultShowDays: 4000, // 默认展示天数
53
- preLoadDays: 8000, // 预加载天数
54
- maxShowDays: 16000, // 最大展示天数
55
- }
56
- }
57
-
58
- // 获取配置
59
- export const formatConfig = (config, freqName) => {
60
- return {
61
- ...defaultConfig,
62
- ...freqConfig[freqName],
63
- ...config,
64
- }
65
- }
66
-
67
- // 默认获取k线参数
68
- export const getKlineDataApi = async(params) => {
69
- const res = await axios({
70
- method: 'post',
71
- headers: {
72
- token: 'd9ceaa273a9c8ac0a1eadf693e8a1a8e',
73
- },
74
- url: 'http://127.0.0.1:7001/middleLayer/kline/getKline',
75
- data: params,
76
- })
77
- return res.data.body
78
- }
@@ -1,92 +0,0 @@
1
- <template>
2
- <div style="width: 100%">
3
- <el-select v-model="freqId" :style="{ width: '120px', marginRight: '12px' }">
4
- <el-option v-for="item in freqOption" :key="item.value" :label="item.label" :value="item.value" />
5
- </el-select>
6
- <el-select v-model="mainIndicator" :style="{ width: '120px', marginRight: '12px' }">
7
- <el-option v-for="item in mainIndicatorList" :key="item.value" :label="item.label" :value="item.value" />
8
- </el-select>
9
- <el-select v-model="chartMode" :style="{ width: '200px', marginRight: '12px' }">
10
- <el-option v-for="item in chartModeList" :key="item" :label="item" :value="item" />
11
- </el-select>
12
- </div>
13
- <el-tabs v-model="activeName" class="demo-tabs">
14
- <el-tab-pane v-for="(item, index) in tabsList" :key="item.name" :label="item.label" :name="item.name">
15
- <div style="height: calc(100vh - 64px - 40px - 40px - 40px - 16px - 32px)">
16
- <component
17
- :is="item.component"
18
- :code="'000002'"
19
- :freqId="freqId"
20
- :freqDict="freqOption"
21
- :mainIndicator="mainIndicator"
22
- :mainIndicatorList="mainIndicatorList"
23
- :subIndicatorList="subIndicatorList"
24
- :chartMode="chartMode"
25
- ></component>
26
- </div>
27
- </el-tab-pane>
28
- </el-tabs>
29
- </template>
30
-
31
- <script setup>
32
- import { ref } from "vue";
33
- import KlineSlide from "./components/KlineSlide/index.vue";
34
- import KlineNew from "./components/KlineNew/index.vue";
35
- import KlineSlideNew from "./components/KlineSlideNew/index.vue";
36
- import KlineBasic from "./components/KlineBasic/index.vue";
37
- import KlineAction from "./components/KlineAction/index.vue";
38
- import { mainIndicatorList, subIndicatorList } from "st-func";
39
-
40
- const freqOption = [
41
- { value: "1", label: "1m" },
42
- { value: "2", label: "5m" },
43
- { value: "3", label: "15m" },
44
- { value: "4", label: "30m" },
45
- { value: "5", label: "60m" },
46
- { value: "6", label: "1d" },
47
- { value: "7", label: "1w" },
48
- { value: "8", label: "1mon" },
49
- ];
50
- const freqId = ref("5");
51
- const mainIndicator = ref("DKX_EMA");
52
-
53
- const chartMode = ref("价差分布图");
54
- const chartModeList = ["二腿价格走势图", "二腿价格走势百分比图", "二腿相关度", "价差周期性", "价差分布图"];
55
-
56
- const tabsList = [
57
- {
58
- label: "新版K线",
59
- name: "KlineNew",
60
- component: KlineNew,
61
- },
62
- // {
63
- // label: "新版拖动K线",
64
- // name: "KlineSlideNew",
65
- // component: KlineSlideNew,
66
- // },
67
- // {
68
- // label: "基础K线组件(条数限制)",
69
- // name: "KlineBasic",
70
- // component: KlineBasic,
71
- // },
72
- // {
73
- // label: "带拖拽的K线组件",
74
- // name: "KlineSlide",
75
- // component: KlineSlide,
76
- // },
77
- // {
78
- // label: "带操作的K线组件",
79
- // name: "KlineAction",
80
- // component: KlineAction,
81
- // },
82
- ];
83
- const activeName = ref("KlineNew");
84
- </script>
85
-
86
- <style lang="scss">
87
- .klineDemoDialog {
88
- .el-dialog__body {
89
- height: calc(100% - 54px - 60px);
90
- }
91
- }
92
- </style>