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,48 +0,0 @@
1
- import axios from "axios";
2
-
3
- // 测试环境
4
- // const token = "dc4eb64816effa53ccee0de7a02e777b";
5
- // export const host = "http://192.168.12.38:5173";
6
-
7
- // 线上环境
8
- const token = "10831ed6ce9ff2652a732f63c5d79c5c";
9
- export const host = "//investapi.hzyotoy.com";
10
-
11
- // 获取指标线配置
12
- export const getIndicator = async () => {
13
- const res = await axios({
14
- method: "post",
15
- headers: { token },
16
- url: `${host}/middleLayer/kline/getIndicator`,
17
- });
18
- return res.data;
19
- }
20
- // 获取配置
21
- export const getConfig = async () => {
22
- const res = await axios({
23
- method: "get",
24
- headers: { token },
25
- url: `${host}/middleLayer/get/invest/sys/frontconfig/info`,
26
- });
27
- return res.data;
28
- }
29
- // 设置配置
30
- export const setConfig = async (data) => {
31
- const res = await axios({
32
- method: "post",
33
- headers: { token },
34
- url: `${host}/middleLayer/post/invest/sys/frontconfig/save`,
35
- data,
36
- });
37
- return res.data;
38
- }
39
- // 获取周期列表
40
- export const getCycleList = async () => {
41
- const res = await axios({
42
- method: "post",
43
- headers: { token },
44
- url: `${host}/middleLayer/post/common/qt/getDict`,
45
- data: { dictIds: [1002] },
46
- });
47
- return res.data;
48
- }
@@ -1,366 +0,0 @@
1
- <template>
2
- <div style="width: 100%;height: 100%; display: flex; flex-direction: column;">
3
- <!-- 工具栏 -->
4
- <div style="height: 42px; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 0 12px; flex-shrink: 0;">
5
- <el-radio-group v-model="displayMode" size="small" @change="handleModeChange">
6
- <el-radio-button value="single">单周期</el-radio-button>
7
- <el-radio-button value="multi">多周期</el-radio-button>
8
- </el-radio-group>
9
-
10
- <el-divider direction="vertical" />
11
-
12
- <!-- 单周期模式下的配置 -->
13
- <template v-if="displayMode === 'single'">
14
- <el-input
15
- v-model="singleConfig.variety"
16
- placeholder="品种代码"
17
- size="small"
18
- style="width: 120px;"
19
- />
20
- <el-input
21
- v-model="singleConfig.varietyName"
22
- placeholder="品种名称"
23
- size="small"
24
- style="width: 120px;"
25
- />
26
- <el-input
27
- v-model="singleConfig.featureId"
28
- placeholder="合约ID"
29
- size="small"
30
- style="width: 120px;"
31
- />
32
- <el-input
33
- v-model="singleConfig.featureType"
34
- placeholder="合约类型"
35
- size="small"
36
- style="width: 120px;"
37
- />
38
- <el-select
39
- v-model="singleConfig.cycle"
40
- placeholder="周期"
41
- size="small"
42
- style="width: 120px;"
43
- >
44
- <el-option
45
- v-for="item in cycleOptions"
46
- :key="item.value"
47
- :label="item.label"
48
- :value="item.value"
49
- />
50
- </el-select>
51
- <el-select
52
- v-model="singleConfig.mainIndicator"
53
- placeholder="主图指标"
54
- size="small"
55
- style="width: 120px;"
56
- >
57
- <el-option
58
- v-for="(item, index) in indicatorStore.mainIndicatorList"
59
- :key="index"
60
- :label="item.label"
61
- :value="item.value"
62
- />
63
- </el-select>
64
- </template>
65
-
66
- <!-- 多周期模式下的配置(共用基础信息) -->
67
- <template v-if="displayMode === 'multi'">
68
- <el-input
69
- v-model="multiBaseConfig.variety"
70
- placeholder="品种代码"
71
- size="small"
72
- style="width: 120px;"
73
- @change="refreshMultiCharts"
74
- />
75
- <el-input
76
- v-model="multiBaseConfig.varietyName"
77
- placeholder="品种名称"
78
- size="small"
79
- style="width: 120px;"
80
- @change="refreshMultiCharts"
81
- />
82
- <el-input
83
- v-model="multiBaseConfig.featureId"
84
- placeholder="合约ID"
85
- size="small"
86
- style="width: 120px;"
87
- @change="refreshMultiCharts"
88
- />
89
- <el-input
90
- v-model="multiBaseConfig.featureType"
91
- placeholder="合约类型"
92
- size="small"
93
- style="width: 120px;"
94
- @change="refreshMultiCharts"
95
- />
96
- <el-select
97
- v-model="multiBaseConfig.mainIndicator"
98
- placeholder="主图指标"
99
- size="small"
100
- style="width: 120px;"
101
- @change="refreshMultiCharts"
102
- >
103
- <el-option
104
- v-for="(item, index) in indicatorStore.mainIndicatorList"
105
- :key="index"
106
- :label="item.label"
107
- :value="item.value"
108
- />
109
- </el-select>
110
- </template>
111
- </div>
112
-
113
- <!-- 图表展示区域 -->
114
- <div
115
- class="charts-container"
116
- :style="{
117
- height: 'calc(100% - 42px)',
118
- overflow: 'auto'
119
- }"
120
- >
121
- <!-- 单周期模式:单个图表 -->
122
- <div
123
- v-if="displayMode === 'single' && show"
124
- class="single-chart"
125
- >
126
- <st-klineBasic
127
- :key="singleChartKey"
128
- :variety="singleConfig.variety"
129
- :varietyName="singleConfig.varietyName"
130
- :featureId="singleConfig.featureId"
131
- :featureType="singleConfig.featureType"
132
- :cycle="singleConfig.cycle"
133
- :mainIndicator="singleConfig.mainIndicator"
134
- :indicatorStore="indicatorStore"
135
- :env="{ VITE_BASE_URL: host }"
136
- :brushRange="['2025-06-03 00:00:00', '2025-06-05 23:59:59']"
137
- />
138
- </div>
139
-
140
- <!-- 多周期模式:6个图表网格布局 -->
141
- <div
142
- v-if="displayMode === 'multi' && show"
143
- class="multi-charts-grid"
144
- >
145
- <div
146
- v-for="(chart, index) in multiCharts"
147
- :key="`${chart.cycle}-${multiBaseConfig.variety}`"
148
- class="multi-chart-item"
149
- >
150
- <div class="multi-chart-header">
151
- <span class="multi-chart-title">{{ chart.cycleLabel }}</span>
152
- </div>
153
- <div class="multi-chart-content">
154
- <st-klineBasic
155
- :ref="(el) => setChartRef(el, chart.cycle)"
156
- :variety="multiBaseConfig.variety"
157
- :varietyName="multiBaseConfig.varietyName"
158
- :featureId="multiBaseConfig.featureId"
159
- :featureType="multiBaseConfig.featureType"
160
- :cycle="chart.cycle"
161
- :mainIndicator="multiBaseConfig.mainIndicator"
162
- :indicatorStore="indicatorStore"
163
- :env="{ VITE_BASE_URL: host }"
164
- :brushRange="['2025-06-03 00:00:00', '2025-06-05 23:59:59']"
165
- />
166
- </div>
167
- </div>
168
- </div>
169
- </div>
170
- </div>
171
- </template>
172
-
173
- <script setup>
174
- import { ref, reactive, computed, onMounted, watch } from 'vue';
175
- import useIndicatorStore from './indicator';
176
- import { getCycleList, host } from './api';
177
-
178
- const indicatorStore = useIndicatorStore();
179
-
180
- // 显示模式
181
- const displayMode = ref('multi'); // single: 单周期, multi: 多周期
182
- const show = ref(false);
183
-
184
- // 周期映射
185
- const cycleMap = {
186
- '15m': { value: '3', label: '15分钟' },
187
- '30m': { value: '4', label: '30分钟' },
188
- '60m': { value: '5', label: '60分钟' },
189
- '1d': { value: '6', label: '日线' },
190
- '1w': { value: '7', label: '周线' },
191
- '1mon': { value: '8', label: '月线' }
192
- };
193
-
194
- // 多周期展示的周期列表
195
- const multiCycleList = [
196
- { cycle: '3', cycleLabel: '15分钟' }, // 15m
197
- { cycle: '4', cycleLabel: '30分钟' }, // 30m
198
- { cycle: '5', cycleLabel: '60分钟' }, // 60m
199
- { cycle: '6', cycleLabel: '日线' }, // 1d
200
- { cycle: '7', cycleLabel: '周线' }, // 1w
201
- { cycle: '8', cycleLabel: '月线' } // 1mon
202
- ];
203
-
204
- // 周期选项
205
- const cycleOptions = ref([]);
206
-
207
- // 单周期配置
208
- const singleConfig = reactive({
209
- variety: '000001',
210
- varietyName: '平安银行',
211
- featureId: 88,
212
- featureType: '3',
213
- cycle: '',
214
- mainIndicator: 'DKX_EMA'
215
- });
216
-
217
- // 多周期基础配置(共用)
218
- const multiBaseConfig = reactive({
219
- variety: '000001',
220
- varietyName: '平安银行',
221
- featureId: 88,
222
- featureType: '3',
223
- mainIndicator: 'DKX_EMA'
224
- });
225
-
226
- // 多周期图表数据
227
- const multiCharts = ref(multiCycleList);
228
-
229
- // 存储图表实例引用(用于需要时手动刷新)
230
- const chartRefs = ref({});
231
-
232
- // 单图表刷新key
233
- const singleChartKey = ref(0);
234
-
235
- // 设置图表引用
236
- const setChartRef = (el, cycle) => {
237
- if (el) {
238
- chartRefs.value[cycle] = el;
239
- }
240
- };
241
-
242
- // 刷新多周期图表
243
- const refreshMultiCharts = () => {
244
- // 通过重新生成key来强制刷新
245
- multiCharts.value = [...multiCycleList];
246
- };
247
-
248
- // 模式切换处理
249
- const handleModeChange = () => {
250
- // 切换模式时不需要额外操作,Vue会自动重新渲染
251
- };
252
-
253
- // 监听单周期配置变化,刷新图表
254
- watch(
255
- () => [singleConfig.variety, singleConfig.cycle, singleConfig.mainIndicator],
256
- () => {
257
- if (displayMode.value === 'single') {
258
- singleChartKey.value++;
259
- }
260
- }
261
- );
262
-
263
- // 监听多周期基础配置变化,刷新所有图表
264
- watch(
265
- () => [multiBaseConfig.variety, multiBaseConfig.mainIndicator],
266
- () => {
267
- if (displayMode.value === 'multi') {
268
- refreshMultiCharts();
269
- }
270
- }
271
- );
272
-
273
- // 初始化
274
- onMounted(async () => {
275
- await indicatorStore.init();
276
- const res = await getCycleList();
277
- cycleOptions.value = res?.body?.[1002].map(item => ({
278
- label: item.dictName,
279
- value: item.dictCode
280
- }));
281
-
282
- // 设置默认周期(取第二个选项,通常是日线)
283
- if (cycleOptions.value.length > 1) {
284
- singleConfig.cycle = cycleOptions.value[1].value;
285
- } else if (cycleOptions.value.length > 0) {
286
- singleConfig.cycle = cycleOptions.value[0].value;
287
- }
288
-
289
- show.value = true;
290
- });
291
- </script>
292
-
293
- <style lang="scss" scoped>
294
- .charts-container {
295
- flex: 1;
296
- overflow: auto;
297
- padding: 12px;
298
- background: #f5f5f5;
299
- }
300
-
301
- // 单周期模式
302
- .single-chart {
303
- width: 100%;
304
- height: 100%;
305
- min-height: 600px;
306
- background: #000;
307
- border-radius: 4px;
308
- overflow: hidden;
309
- }
310
-
311
- // 多周期模式 - 网格布局
312
- .multi-charts-grid {
313
- display: grid;
314
- grid-template-columns: repeat(3, 1fr);
315
- gap: 12px;
316
- width: 100%;
317
- }
318
-
319
- // 多周期模式 - 6宫格布局
320
- .multi-charts-grid {
321
- display: grid;
322
- grid-template-columns: repeat(3, 1fr); // 3列
323
- grid-template-rows: repeat(2, 1fr); // 2行,每行占满剩余空间
324
- gap: 12px;
325
- width: 100%;
326
- height: 100%; // 占满父容器高度
327
- min-height: 0; // 确保grid可以正确收缩
328
-
329
- .multi-chart-item {
330
- background: #000;
331
- border-radius: 4px;
332
- overflow: hidden;
333
- display: flex;
334
- flex-direction: column;
335
- min-height: 0; // 确保flex子项可以正确收缩
336
- height: 100%; // 占满grid单元格高度
337
-
338
- .multi-chart-header {
339
- height: 32px;
340
- padding: 0 12px;
341
- background: #1a1a1a;
342
- display: flex;
343
- align-items: center;
344
- border-bottom: 1px solid #333;
345
- flex-shrink: 0; // 头部固定高度,不收缩
346
-
347
- .multi-chart-title {
348
- font-size: 14px;
349
- font-weight: 500;
350
- color: #fff;
351
- }
352
- }
353
-
354
- .multi-chart-content {
355
- flex: 1; // 占满剩余空间
356
- min-height: 0; // 确保内容区域可以正确收缩
357
- position: relative;
358
-
359
- // 确保K线组件占满容器
360
- :deep(.klineBasic) {
361
- height: 100%;
362
- }
363
- }
364
- }
365
- }
366
- </style>
@@ -1,114 +0,0 @@
1
- import { defineStore } from 'pinia'
2
- import { getConfig, setConfig, getIndicator } from './api'
3
-
4
- const useIndicatorStore = defineStore(
5
- 'indicator',
6
- {
7
- state: () => ({
8
- visible: false, // 是否显示配置弹窗
9
- originConfig: {}, // 原始配置
10
- filterIndicator: {}, // 内置指标过滤配置
11
- customIndicator: [], // 自定义指标配置
12
- mainSystemIndicatorList: [], // 内置主图指标配置
13
- subIndicatorList: [], // 副图指标配置
14
- indicatorItemList: [], // 指标项配置
15
- }),
16
- getters: {
17
- mainIndicatorList: state => { // 主图指标列表(过滤隐藏的指标)
18
- return [
19
- ...state.mainSystemIndicatorList,
20
- ...state.customIndicator,
21
- ]
22
- },
23
- // 获取指标项配置
24
- getIndicatorParams: state => {
25
- return (mainIndicator) => {
26
- let indicatorParams = []
27
- state.mainSystemIndicatorList.forEach(item => {
28
- if (item.label === mainIndicator) {
29
- const filterConfig = state.filterIndicator[mainIndicator] || []
30
- indicatorParams = item.config.filter(i => !filterConfig.includes(i.key)).map(i => i.key)
31
- }
32
- })
33
- state.customIndicator.forEach(item => {
34
- if (item.label === mainIndicator) {
35
- indicatorParams = item.config.map(i => i.key)
36
- }
37
- })
38
- return indicatorParams
39
- }
40
- },
41
- },
42
- actions: {
43
- // 初始化配置
44
- async init() {
45
- const indicatorRes = await getIndicator()
46
- this.mainSystemIndicatorList = indicatorRes?.body?.mainIndicatorList || []
47
- this.subIndicatorList = indicatorRes?.body?.subIndicatorList || []
48
- this.indicatorItemList = indicatorRes?.body?.indicatorItemList || []
49
- const res = await getConfig()
50
- let originConfig = {}
51
- let filterIndicator = {}
52
- let customIndicator = []
53
- if (res.data) {
54
- originConfig = JSON.parse(res.data)
55
- filterIndicator = originConfig.filterIndicator || {}
56
- customIndicator = originConfig.customIndicator || []
57
- }
58
- this.originConfig = originConfig
59
- this.filterIndicator = filterIndicator
60
- this.customIndicator = customIndicator
61
- },
62
- // 代开配置弹窗
63
- config() {
64
- this.visible = true
65
- },
66
- // 更新内置指标过滤配置
67
- async setFilterIndicator(key, filterIndicatorList) {
68
- await setConfig({
69
- data: JSON.stringify({
70
- ...this.originConfig,
71
- filterIndicator: {
72
- ...this.filterIndicator,
73
- [key]: filterIndicatorList
74
- }
75
- })
76
- })
77
- this.filterIndicator[key] = filterIndicatorList
78
- },
79
- // 更新自定义指标配置配置
80
- async setCustomIndicator({ label, config, originLabel, type }) {
81
- let newCustomIndicator = [...this.customIndicator]
82
- if (type === 'add') {
83
- // 新增指标
84
- newCustomIndicator = [...newCustomIndicator, { label, value: label, config: [], type: 'custom' }]
85
- } else if (type === 'editLabel') {
86
- // 编辑指标名称
87
- newCustomIndicator = newCustomIndicator.map(item => {
88
- if (item.label === originLabel) {
89
- return { ...item, label, value: label }
90
- }
91
- return item
92
- })
93
- } else if (type === 'editConfig') {
94
- // 编辑指标配置
95
- newCustomIndicator = newCustomIndicator.map(item => {
96
- if (item.label === label) {
97
- return { ...item, config }
98
- }
99
- return item
100
- })
101
- } else if (type === 'delete') {
102
- // 删除指标
103
- newCustomIndicator = newCustomIndicator.filter(item => item.label !== label)
104
- }
105
- await setConfig({
106
- data: JSON.stringify({ ...this.originConfig, customIndicator: newCustomIndicator })
107
- })
108
- this.customIndicator = newCustomIndicator
109
- },
110
- }
111
- }
112
- )
113
-
114
- export default useIndicatorStore
@@ -1,20 +0,0 @@
1
- <template>
2
- <div>
3
- <el-button @click="stKlineConfigRef?.open">打开K线自定义配置</el-button>
4
- <st-klineConfig
5
- ref="stKlineConfigRef"
6
- :indicatorStore="indicatorStore"
7
- @callBack="(formJson) => console.log(formJson)"
8
- />
9
- </div>
10
- </template>
11
-
12
- <script setup>
13
- import { ref } from "vue";
14
- const stKlineConfigRef = ref(null);
15
- const indicatorStore = {
16
- mainIndicatorList: [{ label: "MA", value: "MA" }],
17
- };
18
- </script>
19
-
20
- <style lang="scss" scoped></style>
@@ -1,91 +0,0 @@
1
- <!-- 提供右键菜单的父级DOM组件 -->
2
- <template>
3
- <div ref="contextmenuRef" class="contextmenu" @contextmenu="handleContextMenu" @mouseleave="handleMouseLeave">
4
- <!-- 主DOM插槽 -->
5
- <slot />
6
- <!-- 自定义菜单插槽 -->
7
- <div ref="menuRef" v-if="menuStyle.display !== 'none'" class="contextmenu-popover" :style="menuStyle">
8
- <slot name="popover" />
9
- </div>
10
- </div>
11
- </template>
12
-
13
- <script setup>
14
- import { ref, nextTick } from "vue";
15
- // 自定义事件函数: 关闭悬浮菜单回调
16
- const emits = defineEmits(["closeMenuCallBack"]);
17
- // 组件Ref
18
- const contextmenuRef = ref();
19
- // 悬浮菜单Ref
20
- const menuRef = ref();
21
- // 悬浮菜单样式
22
- const menuStyle = ref({
23
- display: "none", // 是否展示
24
- top: "0px", // 位置:上边距
25
- left: "0px", // 位置:左边距
26
- });
27
-
28
- // 打开悬浮菜单
29
- const handleContextMenu = (el) => {
30
- // 1.阻止默认事件 + 冒泡
31
- el.preventDefault();
32
- el.stopPropagation();
33
- // @todo: 解决: 右键菜单项,重复触发本函数导致菜单位置异常问题
34
- if (menuStyle.value.display === "block") {
35
- // 判断鼠标位置是否在悬浮菜单内,如果是,则return,否则继续执行在新的位置打开
36
- const { offsetX, offsetY } = el; // 鼠标
37
- const { offsetWidth, offsetHeight } = menuRef.value;
38
- if (offsetX <= offsetWidth && offsetY <= offsetHeight) {
39
- return;
40
- }
41
- }
42
- contextmenuRef.value.click();
43
- // 2.初始化展示悬浮菜单位置
44
- menuStyle.value = {
45
- display: "block",
46
- top: `${el.offsetY}px`,
47
- left: `${el.offsetX}px`,
48
- };
49
- // 3.计算悬浮菜单是否超出范围
50
- nextTick(() => {
51
- const { bottom, height, right, width } = menuRef.value.getBoundingClientRect();
52
- if (bottom > window.innerHeight) {
53
- // 高度超出
54
- menuStyle.value = {
55
- display: "block",
56
- top: `${el.offsetY - height}px`,
57
- left: `${el.offsetX}px`,
58
- };
59
- } else if (right > window.innerWidth) {
60
- // 宽度超出
61
- menuStyle.value = {
62
- display: "block",
63
- top: `${el.offsetY}px`,
64
- left: `${el.offsetX - width}px`,
65
- };
66
- }
67
- });
68
- // 4.监听点击事件 -> 调用关闭悬浮菜单事件
69
- document.addEventListener("click", handleMouseLeave);
70
- };
71
-
72
- // 关闭悬浮菜单
73
- const handleMouseLeave = () => {
74
- menuStyle.value.display = "none";
75
- emits("closeMenuCallBack");
76
- document.removeEventListener("click", handleMouseLeave);
77
- };
78
- </script>
79
-
80
- <style lang="scss" scoped>
81
- .contextmenu {
82
- position: relative;
83
- width: 100%;
84
- height: 100%;
85
- &-popover {
86
- position: absolute;
87
- z-index: 10;
88
- display: none;
89
- }
90
- }
91
- </style>