st-comp 0.0.146 → 0.0.147

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 (148) hide show
  1. package/components.d.ts +0 -3
  2. package/es/ChartLayout.cjs +1 -1
  3. package/es/ChartLayout.js +2 -2
  4. package/es/Dialog.cjs +1 -1
  5. package/es/Dialog.js +22 -26
  6. package/es/FactorWarning.cjs +1 -1
  7. package/es/FactorWarning.js +103 -112
  8. package/es/KlineBasic.cjs +1 -1
  9. package/es/KlineBasic.js +1426 -671
  10. package/es/KlineNew.cjs +3 -1
  11. package/es/KlineNew.js +2736 -314
  12. package/es/Pagination.cjs +1 -1
  13. package/es/Pagination.js +96 -102
  14. package/es/Table.cjs +1 -1
  15. package/es/Table.js +60 -66
  16. package/es/User.cjs +1 -1
  17. package/es/User.js +96 -103
  18. package/es/VarietySearch.cjs +1 -1
  19. package/es/VarietySearch.js +32 -41
  20. package/es/VirtualTable.cjs +1 -13
  21. package/es/VirtualTable.js +1 -2801
  22. package/es/_initCloneObject-7493ecd5.cjs +1 -0
  23. package/es/{_initCloneObject-14b53c6f.js → _initCloneObject-a8dcd058.js} +26 -26
  24. package/es/{base-ec05f348.cjs → base-00ce90ec.cjs} +3 -3
  25. package/es/{base-437d17f3.js → base-674a354a.js} +63 -64
  26. package/es/config-provider-419ffbf2.js +120 -0
  27. package/es/config-provider-68414290.cjs +3 -0
  28. package/es/dropdown-127a8c0d.cjs +1 -0
  29. package/es/{dropdown-634b5e27.js → dropdown-ce30ada6.js} +30 -31
  30. package/es/el-button-7b9f5933.js +745 -0
  31. package/es/el-button-c00975e1.cjs +1 -0
  32. package/es/{el-checkbox-group-e8fece80.js → el-checkbox-group-0554b352.js} +10 -10
  33. package/es/el-checkbox-group-7a313d34.cjs +1 -0
  34. package/es/{el-empty-bacc6613.js → el-empty-39b3aed7.js} +5 -5
  35. package/es/{el-empty-19ea04f4.cjs → el-empty-87154b6d.cjs} +1 -1
  36. package/es/el-form-item-7867f64d.cjs +12 -0
  37. package/es/{el-form-item-af1855f0.js → el-form-item-fc6f80ab.js} +78 -79
  38. package/es/el-input-2ff1628c.cjs +1 -0
  39. package/es/{el-input-4961b99f.js → el-input-d249ac86.js} +82 -84
  40. package/es/{el-input-number-610fc8ba.js → el-input-number-2066fbb7.js} +35 -36
  41. package/es/el-input-number-d6801a5c.cjs +1 -0
  42. package/es/{el-message-c3b3ac96.js → el-message-9859835d.js} +79 -81
  43. package/es/el-message-ffcf690c.cjs +1 -0
  44. package/es/el-overlay-91784be2.cjs +1 -0
  45. package/es/el-overlay-f0757cc4.js +525 -0
  46. package/es/el-popover-4db657e2.cjs +1 -0
  47. package/es/{el-popover-0aa071f2.js → el-popover-b7b43c1f.js} +18 -18
  48. package/es/el-scrollbar-35bac6b3.js +2452 -0
  49. package/es/el-scrollbar-ec09bbd3.cjs +1 -0
  50. package/es/el-select-0785c35a.cjs +1 -0
  51. package/es/{el-select-9381b156.js → el-select-bcbb7e55.js} +329 -333
  52. package/es/el-table-column-2478adf8.cjs +14 -0
  53. package/es/{el-table-column-55bffba5.js → el-table-column-c1e1a206.js} +346 -350
  54. package/es/el-tag-13ee17b3.cjs +1 -0
  55. package/es/el-tag-73372c6c.js +359 -0
  56. package/es/index-07b61d12.cjs +1 -0
  57. package/es/{index-39ec9741.js → index-45de4a12.js} +7 -7
  58. package/es/index-65b719a4.cjs +1 -0
  59. package/es/index-8b5fbc11.js +66 -0
  60. package/es/index-8c85d7c5.js +858 -0
  61. package/es/index-a49f4743.cjs +2 -0
  62. package/es/{scroll-387fcfdb.js → scroll-cb696ed2.js} +1 -1
  63. package/es/{scroll-41224831.cjs → scroll-cca17da0.cjs} +1 -1
  64. package/es/style.css +1 -1
  65. package/es/{zh-cn-ab9a583d.cjs → zh-cn-37af467d.cjs} +1 -1
  66. package/es/{zh-cn-eb9c2820.js → zh-cn-ef7d7220.js} +2 -2
  67. package/lib/bundle.js +1 -1
  68. package/lib/bundle.umd.cjs +206 -206
  69. package/lib/{index-9b8ff62a.js → index-24f8572c.js} +31450 -33319
  70. package/lib/{python-a9c3d9e5.js → python-2143eee4.js} +1 -1
  71. package/lib/style.css +1 -1
  72. package/package.json +1 -1
  73. package/packages/KlineBasic/components/KlineSub/index.vue +17 -3
  74. package/packages/KlineBasic/index.vue +2 -1
  75. package/packages/KlineBasic/utils.js +20 -2
  76. package/packages/index.ts +0 -2
  77. package/src/pages/KlineBasic/api.js +1 -1
  78. package/src/router/routes.ts +0 -5
  79. package/es/Kline.cjs +0 -1
  80. package/es/Kline.js +0 -1901
  81. package/es/_initCloneObject-441db749.cjs +0 -1
  82. package/es/castArray-4251bbe4.js +0 -10
  83. package/es/castArray-a45823fe.cjs +0 -1
  84. package/es/config-provider-55482a43.js +0 -47
  85. package/es/config-provider-7cdfca4d.cjs +0 -1
  86. package/es/debounce-ac30be50.js +0 -83
  87. package/es/debounce-b2ff12bd.cjs +0 -1
  88. package/es/dropdown-d7c59a21.cjs +0 -1
  89. package/es/el-button-196807af.cjs +0 -1
  90. package/es/el-button-e1665717.js +0 -235
  91. package/es/el-checkbox-group-492b95cc.cjs +0 -1
  92. package/es/el-form-item-5bdffd07.cjs +0 -12
  93. package/es/el-input-23e2bac3.cjs +0 -1
  94. package/es/el-input-number-40a81eb5.cjs +0 -1
  95. package/es/el-menu-item-78b858f2.cjs +0 -1
  96. package/es/el-menu-item-7d04c11a.js +0 -771
  97. package/es/el-message-d4df8136.cjs +0 -1
  98. package/es/el-overlay-12dd9b35.js +0 -519
  99. package/es/el-overlay-bc0790a2.cjs +0 -1
  100. package/es/el-popover-8a77e015.cjs +0 -1
  101. package/es/el-popper-50100766.js +0 -2262
  102. package/es/el-popper-746070ba.cjs +0 -1
  103. package/es/el-scrollbar-562d0595.js +0 -201
  104. package/es/el-scrollbar-d1c3e7f7.cjs +0 -1
  105. package/es/el-select-b162dffc.cjs +0 -1
  106. package/es/el-table-column-6d761fce.cjs +0 -14
  107. package/es/el-tag-985d9aff.js +0 -279
  108. package/es/el-tag-c51a6490.cjs +0 -1
  109. package/es/index-09e01b1d.js +0 -81
  110. package/es/index-0cb48e01.js +0 -306
  111. package/es/index-3bf8d597.cjs +0 -1
  112. package/es/index-657047bb.js +0 -513
  113. package/es/index-8a0b1c53.cjs +0 -3
  114. package/es/index-a387515d.cjs +0 -1
  115. package/es/index-a902a0d9.js +0 -59
  116. package/es/index-deb8de52.cjs +0 -1
  117. package/es/index-eea0bcb3.cjs +0 -1
  118. package/es/index.esm-8d9a2abe.js +0 -2432
  119. package/es/index.esm-94a95a2a.cjs +0 -3
  120. package/es/raf-8fc301fd.cjs +0 -1
  121. package/es/raf-b128c7b7.js +0 -6
  122. package/es/typescript-7ae59c4c.js +0 -4
  123. package/es/typescript-b63f8e83.cjs +0 -1
  124. package/es/use-form-common-props-1b84d8f4.cjs +0 -2
  125. package/es/use-form-common-props-f377e500.js +0 -587
  126. package/es/vnode-7dfd4ed5.js +0 -14
  127. package/es/vnode-7fbc61e1.cjs +0 -1
  128. package/packages/Kline/components/Contextmenu/index.vue +0 -110
  129. package/packages/Kline/components/Tips/index.vue +0 -40
  130. package/packages/Kline/componentsNew/KlineSlide/index.vue +0 -155
  131. package/packages/Kline/componentsNew/KlineSub/index.vue +0 -297
  132. package/packages/Kline/componentsNew/KlineTips/index.vue +0 -66
  133. package/packages/Kline/componentsNew/KlineUtils/index.vue +0 -84
  134. package/packages/Kline/componentsNew/Tips/index.vue +0 -33
  135. package/packages/Kline/formatKlineData.ts +0 -109
  136. package/packages/Kline/images/buy.svg +0 -1
  137. package/packages/Kline/images/pen.png +0 -0
  138. package/packages/Kline/images/sell.svg +0 -1
  139. package/packages/Kline/images/t.svg +0 -1
  140. package/packages/Kline/index.ts +0 -16
  141. package/packages/Kline/index.vue +0 -891
  142. package/packages/Kline/option.ts +0 -539
  143. package/packages/Kline/type.d.ts +0 -219
  144. package/packages/Kline/utils.ts +0 -682
  145. package/src/pages/Kline/api.ts +0 -127
  146. package/src/pages/Kline/components/MultiCycleSingleVariety.vue +0 -701
  147. package/src/pages/Kline/components/SingleCycleSingleVariety.vue +0 -924
  148. package/src/pages/Kline/index.vue +0 -90
package/es/Kline.js DELETED
@@ -1,1901 +0,0 @@
1
- import "./base-437d17f3.js";
2
- import { E as he, a as Ce } from "./el-menu-item-7d04c11a.js";
3
- import "./el-tooltip-4ed993c7.js";
4
- import "./el-popper-50100766.js";
5
- import { defineComponent as Me, openBlock as C, createElementBlock as v, createElementVNode as K, Fragment as ae, renderList as le, normalizeStyle as ye, toDisplayString as q, ref as S, renderSlot as De, createCommentVNode as xe, nextTick as Ye, computed as W, watch as H, onMounted as de, onUnmounted as ge, createVNode as V, withCtx as X, createBlock as Ae, createTextVNode as Oe, normalizeClass as ke } from "vue";
6
- import * as oe from "echarts";
7
- import { _ as $ } from "./_plugin-vue_export-helper-dad06003.js";
8
- import { x as re } from "./index-8542fe24.js";
9
- import { i as ve, t as be } from "./index.esm-8d9a2abe.js";
10
- import "./el-tag-985d9aff.js";
11
- import { E as Ee, a as Se } from "./el-select-9381b156.js";
12
- import "./el-scrollbar-562d0595.js";
13
- import "./use-form-common-props-f377e500.js";
14
- import "./index-0cb48e01.js";
15
- import "./index-657047bb.js";
16
- import "./typescript-7ae59c4c.js";
17
- import "./vnode-7dfd4ed5.js";
18
- import "./index-39ec9741.js";
19
- import "./castArray-4251bbe4.js";
20
- import "./index-a902a0d9.js";
21
- import "./scroll-387fcfdb.js";
22
- import "./debounce-ac30be50.js";
23
- const Fe = { class: "st-kline-tips" }, Qe = { class: "st-kline-tips-row" }, _e = /* @__PURE__ */ Me({
24
- __name: "index",
25
- props: {
26
- // 提示数据
27
- data: {
28
- type: Array,
29
- default: () => []
30
- }
31
- },
32
- setup(a) {
33
- return (t, i) => (C(), v("div", Fe, [
34
- K("div", Qe, [
35
- (C(!0), v(ae, null, le(a.data, (e) => (C(), v("div", {
36
- class: "st-kline-tips-row-item",
37
- style: ye({ color: e.color })
38
- }, q(e.label) + " " + q(e.value), 5))), 256))
39
- ])
40
- ]));
41
- }
42
- });
43
- const se = /* @__PURE__ */ $(_e, [["__scopeId", "data-v-78aed210"]]), Ue = /* @__PURE__ */ Me({
44
- __name: "index",
45
- emits: ["closeContextMenuCallBack"],
46
- setup(a, { emit: t }) {
47
- const i = t, e = S(), n = S(), o = S({
48
- display: "none",
49
- top: "0px",
50
- left: "0px"
51
- }), z = () => {
52
- o.value.display = "none", i("closeContextMenuCallBack"), document.removeEventListener("click", z);
53
- }, s = (l) => {
54
- if (l.preventDefault(), l.stopPropagation(), o.value.display === "block") {
55
- const { offsetX: r, offsetY: j } = l, { offsetWidth: D, offsetHeight: c } = n.value;
56
- if (r <= D && j <= c)
57
- return;
58
- }
59
- e.value.click(), o.value = {
60
- display: "block",
61
- top: `${l.offsetY}px`,
62
- left: `${l.offsetX}px`
63
- }, Ye(() => {
64
- const { bottom: r, height: j, right: D, width: c } = n.value.getBoundingClientRect();
65
- r > window.innerHeight ? o.value = {
66
- display: "block",
67
- top: `${l.offsetY - j}px`,
68
- left: `${l.offsetX}px`
69
- } : D > window.innerWidth && (o.value = {
70
- display: "block",
71
- top: `${l.offsetY}px`,
72
- left: `${l.offsetX - c}px`
73
- });
74
- }), document.addEventListener("click", z);
75
- };
76
- return (l, r) => (C(), v("div", {
77
- ref_key: "contextmenuRef",
78
- ref: e,
79
- class: "contextmenu",
80
- onContextmenu: s,
81
- onMouseleave: z
82
- }, [
83
- De(l.$slots, "default", {}, void 0, !0),
84
- o.value.display !== "none" ? (C(), v("div", {
85
- key: 0,
86
- ref_key: "contextmenuContentRef",
87
- ref: n,
88
- class: "contextmenu-popover",
89
- style: ye(o.value)
90
- }, [
91
- De(l.$slots, "popover", {}, void 0, !0)
92
- ], 4)) : xe("", !0)
93
- ], 544));
94
- }
95
- });
96
- const Re = /* @__PURE__ */ $(Ue, [["__scopeId", "data-v-249fd104"]]);
97
- let Ie = !1, Le = !0, pe = [];
98
- const fe = (a) => {
99
- const t = [], i = [], e = [], n = [], o = [], z = [];
100
- return a.forEach((s, l) => {
101
- t.push(s[0]), i.push(s[1]), e.push(s[4]), n.push(s[2]), o.push(s[3]), z.push([s[1], s[4], s[3], s[2], Number(s[6]), l === 0 ? s[4] : a[l - 1][4]]);
102
- }), { time: t, open: i, close: e, high: n, low: o, kLineData: z };
103
- }, Be = async () => {
104
- if (!Ie)
105
- Ie = !0, await ve("./talib.wasm"), Le = !1, pe.forEach((a) => {
106
- a();
107
- });
108
- else if (Le)
109
- return new Promise((a) => {
110
- pe.push(a);
111
- });
112
- }, ne = (a, t) => a.length > t ? a.slice(a.length - t) : a, Ve = (a, t, i) => a.calculationFn ? a.calculationFn(be, t, i) : new Array(t.time.length).fill(null), Pe = async (a, t, i) => {
113
- const e = fe(a);
114
- let n = [];
115
- return n = fe(n), await Be(), {
116
- originData: ne(a, i),
117
- kLine: ne(e.kLineData, i),
118
- time: ne(e.time, i),
119
- indicator: t.config.reduce((o, z) => (o.push({
120
- key: z.key,
121
- color: z.color,
122
- data: ne(Ve(z, e, n), i)
123
- }), o), [])
124
- };
125
- }, ce = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjgzNzAzMjM4NzI1IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI2MjUiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTE5OC4wMTYgMTA5LjczODY2N0E3Ny44NjY2NjcgNzcuODY2NjY3IDAgMCAwIDE3MC42NjY2NjcgMTY3LjY4bDAuNTEyIDQxOC45NDRjMCAyMi44NjkzMzMgNi40IDQ4IDE5LjAyOTMzMyA3NS4zMDY2NjcgMTIuNjcyIDI3LjIyMTMzMyAyNy45ODkzMzMgNDguOTM4NjY3IDQ1Ljk1MiA2NC45Mzg2NjZsMjExLjE1NzMzMyAxODguMjAyNjY3YzE3LjA2NjY2NyAxNS40ODggNDAuNTc2IDIzLjk3ODY2NyA2NC45Mzg2NjcgMjMuNTk0NjY3IDI1LjY4NTMzMy0wLjA4NTMzMyA0Ny4zNi03LjkzNiA2NC45ODEzMzMtMjMuNTk0NjY3bDIxMS4yLTE4OC4yMDI2NjdjMTcuOTItMTYgMzMuMTk0NjY3LTM3LjYzMiA0NS44NjY2NjctNjQuOTM4NjY2IDEyLjY3Mi0yNy4zMDY2NjcgMTguNzczMzMzLTUyLjIyNCAxOC41MTczMzMtNzQuOTIyNjY3TDg1My4zMzMzMzMgMTY3LjI1MzMzM2MwLTIyLjI3Mi04Ljk2LTQxLjQ3Mi0yNi44MzczMzMtNTcuNDcyLTE3LjU3ODY2Ny0xNS42MTYtMzkuMzM4NjY3LTIzLjg5MzMzMy02NC45Mzg2NjctMjQuNDA1MzMzbC00OTkuMDI5MzMzIDAuNDY5MzMzYTkzLjMxMiA5My4zMTIgMCAwIDAtNjQuNTEyIDIzLjg5MzMzNHoiIGZpbGw9IiNGRjAwMDAiIHAtaWQ9IjI2MjYiPjwvcGF0aD48cGF0aCBkPSJNMTcwLjcwOTMzMyAxNjcuNzIyNjY3YzAuMTI4LTIxLjc2IDkuOTg0LTQyLjY2NjY2NyAyNy4zOTItNTcuOTQxMzM0YTkzLjMxMiA5My4zMTIgMCAwIDEgNjQuNDY5MzM0LTIzLjg5MzMzM0w3NjEuNiA4NS4zMzMzMzNjMjUuNiAwLjU1NDY2NyA0Ny4zNiA4Ljc4OTMzMyA2NC45Mzg2NjcgMjQuNDA1MzM0IDE3LjkyIDE2IDI2Ljg4IDM1LjIgMjYuODggNTcuNDcybC0wLjU1NDY2NyA0MTkuODRjMC4yOTg2NjcgMjIuNjk4NjY3LTUuODQ1MzMzIDQ3LjYxNi0xOC41MTczMzMgNzQuOTIyNjY2LTEyLjYyOTMzMyAyNy4zMDY2NjctMjcuOTQ2NjY3IDQ4Ljg5Ni00NS44MjQgNjQuODk2bC0yMTEuMjQyNjY3IDE4OC4yMDI2NjdjLTE3LjU3ODY2NyAxNS43MDEzMzMtMzkuMjUzMzMzIDIzLjUwOTMzMy02NC45Mzg2NjcgMjMuNTk0NjY3YTk0LjcyIDk0LjcyIDAgMCAxLTY0Ljk4MTMzMy0yMy41OTQ2NjdsLTIxMS4xNTczMzMtMTg4LjE2Yy0xNy45Mi0xNi4wNDI2NjctMzMuMjgtMzcuNzE3MzMzLTQ1LjkwOTMzNC02NC45ODEzMzMtMTIuNjcyLTI3LjMwNjY2Ny0xOS4wMjkzMzMtNTIuMzk0NjY3LTE5LjAyOTMzMy03NS4zMDY2NjdMMTcwLjY2NjY2NyAxNjcuNzIyNjY3eiBtNDIuNjY2NjY3IDAuMjU2bDAuNTU0NjY3IDQxOC42ODhjMCAxNi4yMTMzMzMgNC44MjEzMzMgMzUuMzI4IDE1LjAxODY2NiA1Ny4zNDQgMTAuMzY4IDIyLjI3MiAyMi4zNTczMzMgMzkuMjEwNjY3IDM1LjYyNjY2NyA1MS4wNzJsMjExLjQxMzMzMyAxODguNDE2YzguOTYgOC4xMDY2NjcgMjEuODg4IDEyLjggMzYuMjI0IDEyLjU0NCAxNS41MzA2NjctMC4wNDI2NjcgMjcuMDkzMzMzLTQuMjY2NjY3IDM2LjY5MzMzNC0xMi44bDIxMS4xNTczMzMtMTg4LjExNzMzNGMxMy4zMTItMTEuOTQ2NjY3IDI1LjMwMTMzMy0yOC44NDI2NjcgMzUuNTg0LTUxLjA3MiAxMC4xMTItMjEuODQ1MzMzIDE0Ljc2MjY2Ny00MC41NzYgMTQuNTA2NjY3LTU3LjA0NTMzM2wwLjU1NDY2Ni00MTkuNzU0NjY3YzAtOS44OTg2NjctMy41ODQtMTcuNjIxMzMzLTEyLjQ1ODY2Ni0yNS42YTU0LjY5ODY2NyA1NC42OTg2NjcgMCAwIDAtMzYuNjA4LTEzLjYxMDY2NmwtNDk5LjYyNjY2NyAwLjQ2OTMzM2E1MS4zMjggNTEuMzI4IDAgMCAwLTM1Ljc1NDY2NyAxMy4zMTIgMzYuNTY1MzMzIDM2LjU2NTMzMyAwIDAgMC0xMi41MDEzMzMgMjEuNDYxMzMzbC0wLjQyNjY2NyA0LjY5MzMzNHoiIGZpbGw9IiNBRTAwMDAiIHAtaWQ9IjI2MjciPjwvcGF0aD48cGF0aCBkPSJNMzg0IDY1NC4xMjI2NjdoMTUzLjUxNDY2N2M5Ni43NjggMCAxNDIuNzYyNjY3LTQ4Ljk4MTMzMyAxNDIuNzYyNjY2LTExNy4wNzczMzQgMC01OS43MzMzMzMtMzMuNDUwNjY3LTg4LjQwNTMzMy04NC44MjEzMzMtOTcuOTYyNjY2di0xLjc5MmM0OC45ODEzMzMtMTUuNTMwNjY3IDY2LjkwMTMzMy00Ni41OTIgNjYuOTAxMzMzLTg5LjYgMC02NS4xMDkzMzMtNDAuNjE4NjY3LTEwMy4zMzg2NjctMTM0Ljk5NzMzMy0xMDMuMzM4NjY3SDM4NHY0MDkuNzcwNjY3eiBtNzIuODc0NjY3LTU0Ljk1NDY2N3YtMTMxLjQxMzMzM2g2Ni4zMDRjNTEuOTY4IDAgODAuMDQyNjY3IDE3LjkyIDgwLjA0MjY2NiA2NS4xMDkzMzMgMCA0NC44LTI2LjI4MjY2NyA2Ni4zMDQtNzUuODYxMzMzIDY2LjMwNGgtNzAuNDg1MzMzeiBtMC0xODAuMzk0NjY3VjI5OC43MDkzMzNoNjAuMzMwNjY2YzQ3LjE4OTMzMyAwIDcyLjI3NzMzMyAxNC45MzMzMzMgNzIuMjc3MzM0IDU5LjEzNiAwIDQ2LjU5Mi0zMi4yNTYgNjAuOTI4LTc1LjI2NCA2MC45MjhoLTU3LjM0NHoiIGZpbGw9IiNGRkZGRkYiIHAtaWQ9IjI2MjgiPjwvcGF0aD48L3N2Zz4=", ue = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjgzNzAzMjQxNjY0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI3NzciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTE5OC4wMTYgMTA5LjczODY2N0E3Ny44NjY2NjcgNzcuODY2NjY3IDAgMCAwIDE3MC42NjY2NjcgMTY3LjY4bDAuNTEyIDQxOC45NDRjMCAyMi44NjkzMzMgNi40IDQ4IDE5LjAyOTMzMyA3NS4zMDY2NjcgMTIuNjcyIDI3LjIyMTMzMyAyNy45ODkzMzMgNDguOTM4NjY3IDQ1Ljk1MiA2NC45Mzg2NjZsMjExLjE1NzMzMyAxODguMjAyNjY3YzE3LjA2NjY2NyAxNS40ODggNDAuNTc2IDIzLjk3ODY2NyA2NC45Mzg2NjcgMjMuNTk0NjY3IDI1LjY4NTMzMy0wLjA4NTMzMyA0Ny4zNi03LjkzNiA2NC45ODEzMzMtMjMuNTk0NjY3bDIxMS4yLTE4OC4yMDI2NjdjMTcuOTItMTYgMzMuMTk0NjY3LTM3LjYzMiA0NS44NjY2NjctNjQuOTM4NjY2IDEyLjY3Mi0yNy4zMDY2NjcgMTguNzczMzMzLTUyLjIyNCAxOC41MTczMzMtNzQuOTIyNjY3TDg1My4zMzMzMzMgMTY3LjI1MzMzM2MwLTIyLjI3Mi04Ljk2LTQxLjQ3Mi0yNi44MzczMzMtNTcuNDcyLTE3LjU3ODY2Ny0xNS42MTYtMzkuMzM4NjY3LTIzLjg5MzMzMy02NC45Mzg2NjctMjQuNDA1MzMzbC00OTkuMDI5MzMzIDAuNDY5MzMzYTkzLjMxMiA5My4zMTIgMCAwIDAtNjQuNTEyIDIzLjg5MzMzNHoiIGZpbGw9IiM1NEFCMzAiIHAtaWQ9IjI3NzgiPjwvcGF0aD48cGF0aCBkPSJNMTcwLjY2NjY2NyAxNjcuNjhjMC4xMjgtMjEuNzYgOS45NDEzMzMtNDIuNjY2NjY3IDI3LjM0OTMzMy01Ny45NDEzMzNhOTMuMzEyIDkzLjMxMiAwIDAgMSA2NC41MTItMjMuODkzMzM0TDc2MS41NTczMzMgODUuMzMzMzMzYzI1LjYgMC41NTQ2NjcgNDcuMzYgOC43ODkzMzMgNjQuOTM4NjY3IDI0LjQwNTMzNCAxNy45MiAxNiAyNi44MzczMzMgMzUuMiAyNi44MzczMzMgNTcuNDcybC0wLjUxMiA0MTkuODRjMC4yOTg2NjcgMjIuNjU2LTUuODQ1MzMzIDQ3LjYxNi0xOC41MTczMzMgNzQuODgtMTIuNjcyIDI3LjMwNjY2Ny0yNy45NDY2NjcgNDguOTM4NjY3LTQ1Ljg2NjY2NyA2NC45Mzg2NjZsLTIxMS4yIDE4OC4yMDI2NjdjLTE3LjYyMTMzMyAxNS42NTg2NjctMzkuMjUzMzMzIDIzLjUwOTMzMy02NC45ODEzMzMgMjMuNTk0NjY3YTk0LjcyIDk0LjcyIDAgMCAxLTY0LjkzODY2Ny0yMy41OTQ2NjdsLTIxMS4yLTE4OC4yMDI2NjdjLTE3LjkyLTE2LTMzLjIzNzMzMy0zNy43MTczMzMtNDUuOTA5MzMzLTY0LjkzODY2Ni0xMi42MjkzMzMtMjcuMzA2NjY3LTE5LjAyOTMzMy01Mi40MzczMzMtMTkuMDI5MzMzLTc1LjMwNjY2N0wxNzAuNjY2NjY3IDE2Ny42OHogbTQyLjYyNCAwLjI1NmwwLjU1NDY2NiA0MTguNjg4YzAgMTYuMTcwNjY3IDQuODY0IDM1LjMyOCAxNS4wNjEzMzQgNTcuMzQ0IDEwLjM2OCAyMi4yNzIgMjIuMzE0NjY3IDM5LjE2OCAzNS42MjY2NjYgNTEuMDI5MzMzbDIxMS40MTMzMzQgMTg4LjQxNmM4Ljk2IDguMTA2NjY3IDIxLjg4OCAxMi44IDM2LjIyNCAxMi41ODY2NjcgMTUuNTMwNjY3LTAuMDQyNjY3IDI3LjA5MzMzMy00LjI2NjY2NyAzNi42OTMzMzMtMTIuOGwyMTEuMTE0NjY3LTE4OC4xNmMxMy4zNTQ2NjctMTEuOTQ2NjY3IDI1LjMwMTMzMy0yOC44NDI2NjcgMzUuNjI2NjY2LTUxLjA3MiAxMC4xMTItMjEuNzYgMTQuNzYyNjY3LTQwLjUzMzMzMyAxNC41MDY2NjctNTcuMDAyNjY3TDgxMC42NjY2NjcgMTY3LjIxMDY2N2MwLTkuODk4NjY3LTMuNTg0LTE3LjYyMTMzMy0xMi41MDEzMzQtMjUuNkE1NC42OTg2NjcgNTQuNjk4NjY3IDAgMCAwIDc2MS42IDEyOGwtNDk5LjYyNjY2NyAwLjQ2OTMzM2E1MS4zMjggNTEuMzI4IDAgMCAwLTM1Ljc1NDY2NiAxMy4yNjkzMzQgMzYuNTY1MzMzIDM2LjU2NTMzMyAwIDAgMC0xMi41MDEzMzQgMjEuNTA0bC0wLjQyNjY2NiA0LjY5MzMzM3oiIGZpbGw9IiMzODhEMTQiIHAtaWQ9IjI3NzkiPjwvcGF0aD48cGF0aCBkPSJNNTA2LjQ1MzMzMyA2NzQuNzMwNjY3Yzk5LjE1NzMzMyAwIDE0Ni4zNDY2NjctNDguMzg0IDE0Ni4zNDY2NjctMTI2LjAzNzMzNCAwLTcyLjg3NDY2Ny0zOC44MjY2NjctOTkuNzU0NjY3LTEwMy4zMzg2NjctMTE4LjI3MmwtMzguMjI5MzMzLTExLjk0NjY2NmMtNDAuNjE4NjY3LTExLjM0OTMzMy01Mi41NjUzMzMtMjUuMDg4LTUyLjU2NTMzMy01Ny4zNDQgMC0zMi44NTMzMzMgMjMuODkzMzMzLTUwLjc3MzMzMyA2Ni45MDEzMzMtNTAuNzczMzM0IDQ1LjM5NzMzMyAwIDc4Ljg0OCA5LjU1NzMzMyAxMDQuNTMzMzMzIDIwLjMwOTMzNFYyNzMuMzIyNjY3Yy0yMi42OTg2NjctMTEuOTQ2NjY3LTUxLjk2OC0yMi4xMDEzMzMtMTA1LjcyOC0yMi4xMDEzMzQtOTIuNTg2NjY3IDAtMTM3LjM4NjY2NyA0Ny4xODkzMzMtMTM3LjM4NjY2NiAxMTYuNDggMCA2OS4yOTA2NjcgMzUuMjQyNjY3IDEwMC4zNTIgOTMuMTg0IDExNi40OGwzOC44MjY2NjYgMTAuNzUyYzQ0LjggMTMuNzM4NjY3IDU5LjczMzMzMyAyNi44OCA1OS43MzMzMzQgNjAuOTI4IDAgMzcuMDM0NjY3LTIzLjI5NiA1OS43MzMzMzMtNzguMjUwNjY3IDU5LjczMzMzNC00NC44IDAtODMuNjI2NjY3LTEwLjc1Mi0xMTYuNDgtMjUuMDg4djU3Ljk0MTMzM2MyOC4wNzQ2NjcgMTQuOTMzMzMzIDY4LjY5MzMzMyAyNi4yODI2NjcgMTIyLjQ1MzMzMyAyNi4yODI2Njd6IiBmaWxsPSIjRkZGRkZGIiBwLWlkPSIyNzgwIj48L3BhdGg+PC9zdmc+", Ne = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjgzNzAzMjI4MjAyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjMwNzgiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTE5OC4wMTYgMTA5LjczODY2N0E3Ny44NjY2NjcgNzcuODY2NjY3IDAgMCAwIDE3MC42NjY2NjcgMTY3LjY4bDAuNTEyIDQxOC45NDRjMCAyMi44NjkzMzMgNi40IDQ4IDE5LjAyOTMzMyA3NS4zMDY2NjcgMTIuNjcyIDI3LjIyMTMzMyAyNy45ODkzMzMgNDguOTM4NjY3IDQ1Ljk1MiA2NC45Mzg2NjZsMjExLjE1NzMzMyAxODguMjAyNjY3YzE3LjA2NjY2NyAxNS40ODggNDAuNTc2IDIzLjk3ODY2NyA2NC45Mzg2NjcgMjMuNTk0NjY3IDI1LjY4NTMzMy0wLjA4NTMzMyA0Ny4zNi03LjkzNiA2NC45ODEzMzMtMjMuNTk0NjY3bDIxMS4yLTE4OC4yMDI2NjdjMTcuOTItMTYgMzMuMTk0NjY3LTM3LjYzMiA0NS44NjY2NjctNjQuOTM4NjY2IDEyLjY3Mi0yNy4zMDY2NjcgMTguNzczMzMzLTUyLjIyNCAxOC41MTczMzMtNzQuOTIyNjY3TDg1My4zMzMzMzMgMTY3LjI1MzMzM2MwLTIyLjI3Mi04Ljk2LTQxLjQ3Mi0yNi44MzczMzMtNTcuNDcyLTE3LjU3ODY2Ny0xNS42MTYtMzkuMzM4NjY3LTIzLjg5MzMzMy02NC45Mzg2NjctMjQuNDA1MzMzbC00OTkuMDI5MzMzIDAuNDY5MzMzYTkzLjMxMiA5My4zMTIgMCAwIDAtNjQuNTEyIDIzLjg5MzMzNHoiIGZpbGw9IiNDODgwRkYiIHAtaWQ9IjMwNzkiPjwvcGF0aD48cGF0aCBkPSJNMTcwLjY2NjY2NyAxNjcuNjhjMC4xMjgtMjEuNzYgOS45NDEzMzMtNDIuNjY2NjY3IDI3LjM0OTMzMy01Ny45NDEzMzNhOTMuMzEyIDkzLjMxMiAwIDAgMSA2NC41MTItMjMuODkzMzM0TDc2MS41NTczMzMgODUuMzMzMzMzYzI1LjYgMC41NTQ2NjcgNDcuMzYgOC43ODkzMzMgNjQuOTM4NjY3IDI0LjQwNTMzNCAxNy45MiAxNiAyNi44MzczMzMgMzUuMiAyNi44MzczMzMgNTcuNDcybC0wLjUxMiA0MTkuODRjMC4yOTg2NjcgMjIuNjU2LTUuODQ1MzMzIDQ3LjYxNi0xOC41MTczMzMgNzQuODgtMTIuNjcyIDI3LjMwNjY2Ny0yNy45NDY2NjcgNDguOTM4NjY3LTQ1Ljg2NjY2NyA2NC45Mzg2NjZsLTIxMS4yIDE4OC4yMDI2NjdjLTE3LjYyMTMzMyAxNS42NTg2NjctMzkuMjUzMzMzIDIzLjUwOTMzMy02NC45ODEzMzMgMjMuNTk0NjY3YTk0LjcyIDk0LjcyIDAgMCAxLTY0LjkzODY2Ny0yMy41OTQ2NjdsLTIxMS4yLTE4OC4yMDI2NjdjLTE3LjkyLTE2LTMzLjIzNzMzMy0zNy43MTczMzMtNDUuOTA5MzMzLTY0LjkzODY2Ni0xMi42MjkzMzMtMjcuMzA2NjY3LTE5LjAyOTMzMy01Mi40MzczMzMtMTkuMDI5MzMzLTc1LjMwNjY2N0wxNzAuNjY2NjY3IDE2Ny42OHogbTQyLjYyNCAwLjI1NmwwLjU1NDY2NiA0MTguNjg4YzAgMTYuMTcwNjY3IDQuODY0IDM1LjMyOCAxNS4wNjEzMzQgNTcuMzQ0IDEwLjM2OCAyMi4yNzIgMjIuMzE0NjY3IDM5LjE2OCAzNS42MjY2NjYgNTEuMDI5MzMzbDIxMS40MTMzMzQgMTg4LjQxNmM4Ljk2IDguMTA2NjY3IDIxLjg4OCAxMi44IDM2LjIyNCAxMi41ODY2NjcgMTUuNTMwNjY3LTAuMDQyNjY3IDI3LjA5MzMzMy00LjI2NjY2NyAzNi42OTMzMzMtMTIuOGwyMTEuMTE0NjY3LTE4OC4xNmMxMy4zNTQ2NjctMTEuOTQ2NjY3IDI1LjMwMTMzMy0yOC44NDI2NjcgMzUuNjI2NjY2LTUxLjA3MiAxMC4xMTItMjEuNzYgMTQuNzYyNjY3LTQwLjUzMzMzMyAxNC41MDY2NjctNTcuMDAyNjY3TDgxMC42NjY2NjcgMTY3LjIxMDY2N2MwLTkuODk4NjY3LTMuNTg0LTE3LjYyMTMzMy0xMi41MDEzMzQtMjUuNkE1NC42OTg2NjcgNTQuNjk4NjY3IDAgMCAwIDc2MS42IDEyOGwtNDk5LjYyNjY2NyAwLjQ2OTMzM2E1MS4zMjggNTEuMzI4IDAgMCAwLTM1Ljc1NDY2NiAxMy4yNjkzMzQgMzYuNTY1MzMzIDM2LjU2NTMzMyAwIDAgMC0xMi41MDEzMzQgMjEuNTA0bC0wLjQyNjY2NiA0LjY5MzMzM3oiIGZpbGw9IiNBRTQ0RkYiIHAtaWQ9IjMwODAiPjwvcGF0aD48cGF0aCBkPSJNNDc1LjMwNjY2NyA2NTguMjE4NjY3aDczLjQ3MlYzMDYuMzg5MzMzaDExNi40OFYyNDguNDQ4aC0zMDcuNjI2NjY3djU3Ljk0MTMzM2gxMTcuNjc0NjY3eiIgZmlsbD0iI0ZGRkZGRiIgcC1pZD0iMzA4MSI+PC9wYXRoPjwvc3ZnPg==", J = (a, t) => {
126
- const { type: i = "log", color: e = "black" } = t ?? {};
127
- localStorage.getItem("st-kline-console-show") === "true" && console[i](`%c${a}`, `color:${e}`);
128
- }, h = (a) => a || a === 0 ? Math.round(a * 1e3) / 1e3 : null, We = (a) => a >= 1e12 ? `${(a / 1e12).toFixed(2)}万亿` : a >= 1e8 ? `${(a / 1e8).toFixed(2)}亿` : a >= 1e4 ? `${(a / 1e4).toFixed(2)}万` : a.toFixed(2), Ze = (a) => {
129
- const { y: t, text: i, info: e, gridLeft: n, gridRight: o, echartsWidth: z, echartsInstance: s } = a, { config: l, event: r } = e;
130
- let j = 0;
131
- return {
132
- type: "group",
133
- draggable: l.draggable ? "vertical" : !1,
134
- children: [
135
- {
136
- type: "line",
137
- info: e,
138
- shape: {
139
- x1: n,
140
- y1: t,
141
- x2: z - o,
142
- y2: t
143
- },
144
- style: {
145
- stroke: l.lineColor,
146
- lineWidth: 1,
147
- lineDash: [8, 4]
148
- },
149
- z: 10
150
- },
151
- {
152
- type: "group",
153
- x: z,
154
- y: t - 5,
155
- children: [
156
- {
157
- type: "text",
158
- left: -1 * o,
159
- info: e,
160
- style: {
161
- fill: l.textColor,
162
- text: i,
163
- stroke: "#000",
164
- lineWidth: 1,
165
- opacity: 1
166
- },
167
- z: 10
168
- }
169
- ]
170
- }
171
- ],
172
- // 事件:鼠标滑入
173
- onmouseover: (D) => {
174
- r.onmouseover instanceof Function && r.onmouseover(D, e);
175
- },
176
- // 事件:鼠标滑出
177
- onmouseout: (D) => {
178
- r.onmouseout instanceof Function && r.onmouseout(D, e);
179
- },
180
- // 事件:开始拖拽
181
- ondragstart: (D) => {
182
- r.ondragstart instanceof Function && l.draggable && (j = D.offsetY, r.ondragstart(D, e));
183
- },
184
- // 事件:结束拖拽
185
- ondragend: (D) => {
186
- if (r.ondragend instanceof Function && l.draggable) {
187
- const u = D.offsetY - j;
188
- if (u === 0)
189
- return;
190
- const I = s.convertFromPixel({ yAxisIndex: 0 }, t + u);
191
- r.ondragend(D, e, I);
192
- }
193
- }
194
- };
195
- }, Ge = (a) => {
196
- const { y: t, text: i, info: e, gridLeft: n, gridRight: o, echartsWidth: z, echartsInstance: s } = a, { config: l, event: r } = e;
197
- let j = 0;
198
- const D = (u) => {
199
- let I = null;
200
- u.target.type === "line" ? I = u.target.parent : u.target.type === "tspan" && (I = u.target.parent.parent.parent), I.children()[1].children()[0].animate("style", !1).when(200, { opacity: 1 }).start();
201
- }, c = (u) => {
202
- let I = null;
203
- u.target.type === "line" ? I = u.target.parent : u.target.type === "tspan" && (I = u.target.parent.parent.parent), I.children()[1].children()[0].animate("style", !1).when(200, { opacity: 0 }).start();
204
- };
205
- return {
206
- type: "group",
207
- draggable: l.draggable ? "vertical" : !1,
208
- // 是否支持拖拽
209
- children: [
210
- {
211
- type: "line",
212
- info: e,
213
- shape: {
214
- x1: n,
215
- y1: t,
216
- x2: z - o,
217
- y2: t
218
- },
219
- style: {
220
- stroke: l.lineColor,
221
- lineWidth: 1
222
- },
223
- z: 10
224
- },
225
- {
226
- type: "group",
227
- x: z / 2,
228
- y: t - 5,
229
- children: [
230
- {
231
- type: "text",
232
- left: "center",
233
- info: e,
234
- style: {
235
- fill: l.textColor,
236
- text: i,
237
- stroke: "#000",
238
- lineWidth: 1,
239
- opacity: 0
240
- //隐藏文本
241
- },
242
- z: 10
243
- }
244
- ]
245
- }
246
- ],
247
- // 事件:鼠标滑入
248
- onmouseover: (u) => {
249
- r.onmouseover instanceof Function ? r.onmouseover(u, e) : D(u);
250
- },
251
- // 事件:鼠标滑出
252
- onmouseout: (u) => {
253
- r.onmouseout instanceof Function ? r.onmouseout(u, e) : c(u);
254
- },
255
- // 事件:开始拖拽
256
- ondragstart: (u) => {
257
- r.ondragstart instanceof Function && l.draggable && (j = u.offsetY, r.ondragstart(u, e));
258
- },
259
- // 事件:结束拖拽
260
- ondragend: (u) => {
261
- if (r.ondragend instanceof Function && l.draggable) {
262
- const M = u.offsetY - j;
263
- if (M === 0)
264
- return;
265
- const p = s.convertFromPixel({ yAxisIndex: 0 }, t + M);
266
- r.ondragend(u, e, p);
267
- }
268
- }
269
- };
270
- }, $e = (a) => {
271
- const { y: t, text: i, profitY: e, profitText: n, lossY: o, lossText: z, info: s, gridLeft: l, gridRight: r, echartsWidth: j, echartsInstance: D } = a, { config: c, event: u } = s;
272
- let I = 0, M = null, p = null;
273
- const m = (N, d) => {
274
- var T, x, A, k;
275
- (T = N.children()[2]) == null || T.animate("style", !1).when(200, { opacity: ~~d }).start(), (x = N.children()[3].children()[0]) == null || x.animate("style", !1).when(200, { opacity: ~~d }).start(), (A = N.children()[4]) == null || A.animate("style", !1).when(200, { opacity: ~~d }).start(), (k = N.children()[5].children()[0]) == null || k.animate("style", !1).when(200, { opacity: ~~d }).start();
276
- }, w = (N) => {
277
- let d = null;
278
- N.target.type === "line" ? d = N.target.parent : N.target.type === "tspan" && (d = N.target.parent.parent.parent), M = (T) => {
279
- T.preventDefault(), (T.code === "AltLeft" || T.code === "AltRight") && m(d, !0);
280
- }, p = (T) => {
281
- (T.code === "AltLeft" || T.code === "AltRight") && m(d, !1);
282
- }, window.addEventListener("keydown", M), window.addEventListener("keyup", p);
283
- }, b = (N) => {
284
- let d = null;
285
- N.target.type === "line" ? d = N.target.parent : N.target.type === "tspan" && (d = N.target.parent.parent.parent), m(d, !1), window.removeEventListener("keydown", M), window.removeEventListener("keyup", p);
286
- };
287
- return {
288
- type: "group",
289
- draggable: c.draggable ? "vertical" : !1,
290
- // 是否支持拖拽
291
- children: [
292
- // 条件单-主线
293
- {
294
- type: "line",
295
- info: s,
296
- shape: {
297
- x1: l,
298
- y1: t,
299
- x2: j - r,
300
- y2: t
301
- },
302
- style: {
303
- stroke: c.lineColor,
304
- lineWidth: 1
305
- },
306
- z: 10
307
- },
308
- // 条件单-文本内容
309
- {
310
- type: "group",
311
- x: j / 2,
312
- y: t - 5,
313
- children: [
314
- {
315
- type: "text",
316
- left: "center",
317
- info: s,
318
- style: {
319
- fill: c.textColor,
320
- // 填充色
321
- text: i,
322
- stroke: "#000",
323
- // 线条颜色
324
- lineWidth: 1,
325
- opacity: 1
326
- //直接展示文本
327
- },
328
- z: 10
329
- }
330
- ]
331
- },
332
- // 条件单-止盈线
333
- {
334
- type: "line",
335
- info: s,
336
- shape: {
337
- x1: l,
338
- y1: e,
339
- x2: j - r,
340
- y2: e
341
- },
342
- style: {
343
- stroke: c.profitLineColor,
344
- lineWidth: 1,
345
- lineDash: [8, 4],
346
- opacity: 0
347
- },
348
- z: 10
349
- },
350
- // 条件单-止盈线文本内容
351
- {
352
- type: "group",
353
- x: j / 2,
354
- y: e - 5,
355
- children: [
356
- {
357
- type: "text",
358
- left: "center",
359
- info: s,
360
- style: {
361
- fill: c.profitTextColor,
362
- text: n,
363
- stroke: "#000",
364
- lineWidth: 1,
365
- opacity: 0
366
- },
367
- z: 10
368
- }
369
- ]
370
- },
371
- // 条件单-止损线
372
- {
373
- type: "line",
374
- info: s,
375
- shape: {
376
- x1: l,
377
- y1: o,
378
- x2: j - r,
379
- y2: o
380
- },
381
- style: {
382
- stroke: c.lossLineColor,
383
- lineWidth: 1,
384
- lineDash: [8, 4],
385
- opacity: 0
386
- },
387
- z: 10
388
- },
389
- // 条件单-止损线文本内容
390
- {
391
- type: "group",
392
- x: j / 2,
393
- y: o - 5,
394
- children: [
395
- {
396
- type: "text",
397
- left: "center",
398
- info: s,
399
- style: {
400
- fill: c.lossTextColor,
401
- text: z,
402
- stroke: "#000",
403
- lineWidth: 1,
404
- opacity: 0
405
- },
406
- z: 10
407
- }
408
- ]
409
- }
410
- ],
411
- // 事件:鼠标滑入
412
- onmouseover: (N) => {
413
- u.onmouseover instanceof Function ? u.onmouseover(N, s) : w(N);
414
- },
415
- // 事件:鼠标滑出
416
- onmouseout: (N) => {
417
- u.onmouseout instanceof Function ? u.onmouseout(N, s) : b(N);
418
- },
419
- // 事件:开始拖拽
420
- ondragstart: (N) => {
421
- u.ondragstart instanceof Function && c.draggable && (I = N.offsetY, u.ondragstart(N, s));
422
- },
423
- // 事件:结束拖拽
424
- ondragend: (N) => {
425
- if (u.ondragend instanceof Function && c.draggable) {
426
- const T = N.offsetY - I;
427
- if (T === 0)
428
- return;
429
- const x = D.convertFromPixel({ yAxisIndex: 0 }, t + T);
430
- u.ondragend(N, s, x);
431
- }
432
- }
433
- };
434
- }, ie = (a, t) => {
435
- const { direction: i = "", tradeAction: e = "", tradeType: n = "" } = a;
436
- if (t === "sellBuy") {
437
- const o = n ?? i + e;
438
- return (/* @__PURE__ */ new Map([
439
- ["开多", "买"],
440
- ["平多", "卖"],
441
- ["开空", "卖"],
442
- ["平空", "买"]
443
- ])).get(o);
444
- } else if (t === "openClose")
445
- return n ?? i + e;
446
- }, He = (a, t) => a.reduce((i, e) => {
447
- var j;
448
- const n = ie(e, "sellBuy"), o = a.filter((D) => D.time === e.time);
449
- let z = "image://" + new URL((/* @__PURE__ */ Object.assign({ "./images/buy.svg": ce, "./images/sell.svg": ue, "./images/t.svg": Ne }))[`./images/${n === "买" ? "buy" : "sell"}.svg`], self.location).href;
450
- o.length > 1 ? [...new Set(o.map((c) => ie(c, "sellBuy")))].length > 1 ? z = "image://" + new URL("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjgzNzAzMjI4MjAyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjMwNzgiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTE5OC4wMTYgMTA5LjczODY2N0E3Ny44NjY2NjcgNzcuODY2NjY3IDAgMCAwIDE3MC42NjY2NjcgMTY3LjY4bDAuNTEyIDQxOC45NDRjMCAyMi44NjkzMzMgNi40IDQ4IDE5LjAyOTMzMyA3NS4zMDY2NjcgMTIuNjcyIDI3LjIyMTMzMyAyNy45ODkzMzMgNDguOTM4NjY3IDQ1Ljk1MiA2NC45Mzg2NjZsMjExLjE1NzMzMyAxODguMjAyNjY3YzE3LjA2NjY2NyAxNS40ODggNDAuNTc2IDIzLjk3ODY2NyA2NC45Mzg2NjcgMjMuNTk0NjY3IDI1LjY4NTMzMy0wLjA4NTMzMyA0Ny4zNi03LjkzNiA2NC45ODEzMzMtMjMuNTk0NjY3bDIxMS4yLTE4OC4yMDI2NjdjMTcuOTItMTYgMzMuMTk0NjY3LTM3LjYzMiA0NS44NjY2NjctNjQuOTM4NjY2IDEyLjY3Mi0yNy4zMDY2NjcgMTguNzczMzMzLTUyLjIyNCAxOC41MTczMzMtNzQuOTIyNjY3TDg1My4zMzMzMzMgMTY3LjI1MzMzM2MwLTIyLjI3Mi04Ljk2LTQxLjQ3Mi0yNi44MzczMzMtNTcuNDcyLTE3LjU3ODY2Ny0xNS42MTYtMzkuMzM4NjY3LTIzLjg5MzMzMy02NC45Mzg2NjctMjQuNDA1MzMzbC00OTkuMDI5MzMzIDAuNDY5MzMzYTkzLjMxMiA5My4zMTIgMCAwIDAtNjQuNTEyIDIzLjg5MzMzNHoiIGZpbGw9IiNDODgwRkYiIHAtaWQ9IjMwNzkiPjwvcGF0aD48cGF0aCBkPSJNMTcwLjY2NjY2NyAxNjcuNjhjMC4xMjgtMjEuNzYgOS45NDEzMzMtNDIuNjY2NjY3IDI3LjM0OTMzMy01Ny45NDEzMzNhOTMuMzEyIDkzLjMxMiAwIDAgMSA2NC41MTItMjMuODkzMzM0TDc2MS41NTczMzMgODUuMzMzMzMzYzI1LjYgMC41NTQ2NjcgNDcuMzYgOC43ODkzMzMgNjQuOTM4NjY3IDI0LjQwNTMzNCAxNy45MiAxNiAyNi44MzczMzMgMzUuMiAyNi44MzczMzMgNTcuNDcybC0wLjUxMiA0MTkuODRjMC4yOTg2NjcgMjIuNjU2LTUuODQ1MzMzIDQ3LjYxNi0xOC41MTczMzMgNzQuODgtMTIuNjcyIDI3LjMwNjY2Ny0yNy45NDY2NjcgNDguOTM4NjY3LTQ1Ljg2NjY2NyA2NC45Mzg2NjZsLTIxMS4yIDE4OC4yMDI2NjdjLTE3LjYyMTMzMyAxNS42NTg2NjctMzkuMjUzMzMzIDIzLjUwOTMzMy02NC45ODEzMzMgMjMuNTk0NjY3YTk0LjcyIDk0LjcyIDAgMCAxLTY0LjkzODY2Ny0yMy41OTQ2NjdsLTIxMS4yLTE4OC4yMDI2NjdjLTE3LjkyLTE2LTMzLjIzNzMzMy0zNy43MTczMzMtNDUuOTA5MzMzLTY0LjkzODY2Ni0xMi42MjkzMzMtMjcuMzA2NjY3LTE5LjAyOTMzMy01Mi40MzczMzMtMTkuMDI5MzMzLTc1LjMwNjY2N0wxNzAuNjY2NjY3IDE2Ny42OHogbTQyLjYyNCAwLjI1NmwwLjU1NDY2NiA0MTguNjg4YzAgMTYuMTcwNjY3IDQuODY0IDM1LjMyOCAxNS4wNjEzMzQgNTcuMzQ0IDEwLjM2OCAyMi4yNzIgMjIuMzE0NjY3IDM5LjE2OCAzNS42MjY2NjYgNTEuMDI5MzMzbDIxMS40MTMzMzQgMTg4LjQxNmM4Ljk2IDguMTA2NjY3IDIxLjg4OCAxMi44IDM2LjIyNCAxMi41ODY2NjcgMTUuNTMwNjY3LTAuMDQyNjY3IDI3LjA5MzMzMy00LjI2NjY2NyAzNi42OTMzMzMtMTIuOGwyMTEuMTE0NjY3LTE4OC4xNmMxMy4zNTQ2NjctMTEuOTQ2NjY3IDI1LjMwMTMzMy0yOC44NDI2NjcgMzUuNjI2NjY2LTUxLjA3MiAxMC4xMTItMjEuNzYgMTQuNzYyNjY3LTQwLjUzMzMzMyAxNC41MDY2NjctNTcuMDAyNjY3TDgxMC42NjY2NjcgMTY3LjIxMDY2N2MwLTkuODk4NjY3LTMuNTg0LTE3LjYyMTMzMy0xMi41MDEzMzQtMjUuNkE1NC42OTg2NjcgNTQuNjk4NjY3IDAgMCAwIDc2MS42IDEyOGwtNDk5LjYyNjY2NyAwLjQ2OTMzM2E1MS4zMjggNTEuMzI4IDAgMCAwLTM1Ljc1NDY2NiAxMy4yNjkzMzQgMzYuNTY1MzMzIDM2LjU2NTMzMyAwIDAgMC0xMi41MDEzMzQgMjEuNTA0bC0wLjQyNjY2NiA0LjY5MzMzM3oiIGZpbGw9IiNBRTQ0RkYiIHAtaWQ9IjMwODAiPjwvcGF0aD48cGF0aCBkPSJNNDc1LjMwNjY2NyA2NTguMjE4NjY3aDczLjQ3MlYzMDYuMzg5MzMzaDExNi40OFYyNDguNDQ4aC0zMDcuNjI2NjY3djU3Ljk0MTMzM2gxMTcuNjc0NjY3eiIgZmlsbD0iI0ZGRkZGRiIgcC1pZD0iMzA4MSI+PC9wYXRoPjwvc3ZnPg==", self.location).href : z = "image://" + new URL((/* @__PURE__ */ Object.assign({ "./images/buy.svg": ce, "./images/sell.svg": ue, "./images/t.svg": Ne }))[`./images/${n === "买" ? "buy" : "sell"}.svg`], self.location).href : z = "image://" + new URL((/* @__PURE__ */ Object.assign({ "./images/buy.svg": ce, "./images/sell.svg": ue, "./images/t.svg": Ne }))[`./images/${n === "买" ? "buy" : "sell"}.svg`], self.location).href;
451
- const l = (t.find((D) => D[0] === e.time) ?? [])[2], r = ((j = e == null ? void 0 : e.markLineTarget) == null ? void 0 : j.map((D) => {
452
- const c = e.time, u = l + "", I = D.time, M = t.find((m) => m[0] === D.time), p = M ? M[3] : null;
453
- return [
454
- {
455
- coord: [c, u],
456
- lineStyle: D.lineStyle
457
- },
458
- {
459
- coord: [I, p]
460
- }
461
- ];
462
- })) ?? null;
463
- return i.push({
464
- symbol: z,
465
- // 图标
466
- symbolSize: 25,
467
- // 图标大小
468
- animation: !1,
469
- // 是否展示动画
470
- coord: [e.time + "", l],
471
- // X轴[时间],Y轴[最高价]
472
- symbolRotate: 0,
473
- // 旋转角度
474
- symbolOffset: [0, "-7"],
475
- // 偏移距离
476
- markLineTarget: r
477
- }), i;
478
- }, []), Je = (a, t) => a.reduce((i, e, n) => {
479
- var D;
480
- const o = ie(e, "openClose"), z = o === "开多" || o === "开空" ? "top" : "bottom", s = t.find((c) => c[0] === e.time) ?? [], l = z === "top" ? s[2] : s[3];
481
- let r = 7;
482
- r += a.slice(0, n).filter((c) => {
483
- const u = ie(c, "openClose");
484
- return (u === "开多" || u === "开空" ? "top" : "bottom") === z && c.time === e.time;
485
- }).length * 7;
486
- const j = ((D = e == null ? void 0 : e.markLineTarget) == null ? void 0 : D.map((c) => {
487
- const u = e.time, I = l + "", M = c.time, p = t.find((m) => m[0] === c.time)[3];
488
- return [
489
- {
490
- coord: [u, I],
491
- lineStyle: c.lineStyle
492
- },
493
- {
494
- coord: [M, p]
495
- }
496
- ];
497
- })) ?? null;
498
- return i.push({
499
- symbol: "triangle",
500
- // 图标
501
- symbolSize: [10, 12],
502
- // 图标大小
503
- animation: !1,
504
- // 是否展示动画
505
- coord: [e.time + "", l],
506
- // X轴[时间],Y轴[最高价||最低价]
507
- symbolRotate: z === "top" ? 180 : 0,
508
- //标注旋转角度
509
- symbolOffset: [0, `${z === "top" ? r * -1 : r}`],
510
- //标注偏移距离
511
- itemStyle: { color: z === "top" ? "#FF0000" : "#389e0d" },
512
- // 图标颜色
513
- // 文本
514
- label: {
515
- show: !0,
516
- // 是否展示
517
- position: z,
518
- color: "#fff",
519
- formatter: `${o} ${z === "top" ? "+" : "-"} ${e.amount}手 ${e.part ? `(${e.part}份)` : ""}`
520
- },
521
- markLineTarget: j
522
- }), i;
523
- }, []), Xe = (a, t) => a.reduce((i, e) => {
524
- const { key: n, data: o } = e;
525
- if (o === null || o.length === 0)
526
- return i;
527
- const s = (/* @__PURE__ */ new Map([
528
- // 买卖点
529
- [
530
- "sellBuy",
531
- () => He(o, t)
532
- ],
533
- // 开平点
534
- [
535
- "openClose",
536
- () => Je(o, t)
537
- ],
538
- // 信号点
539
- ["signal", () => {
540
- }]
541
- ])).get(n);
542
- return s instanceof Function && i.push(...s()), i;
543
- }, []), ze = async (a, t, i, e, n, o) => {
544
- const { totalBarCount: z, defaultShowBarCount: s, maxValueSpan: l, gridLeft: r, gridTop: j, gridRight: D, gridBottom: c, zoomLock: u } = e, { time: I, kLine: M, originData: p, indicator: m } = await Pe(a, i, z), w = m.map((d) => {
545
- const { key: T, data: x, color: A } = d;
546
- return {
547
- name: T,
548
- type: "line",
549
- silent: !0,
550
- symbol: "none",
551
- data: x,
552
- lineStyle: {
553
- width: 1
554
- },
555
- itemStyle: {
556
- color: A
557
- }
558
- };
559
- }), b = Xe(t, p);
560
- let N = [];
561
- return b.forEach((d) => {
562
- d.markLineTarget && (N = [...N, ...d.markLineTarget]);
563
- }), {
564
- animation: !1,
565
- dataset: {
566
- id: "data",
567
- source: {
568
- klineData: M,
569
- indicatorData: m
570
- }
571
- },
572
- grid: {
573
- left: `${r}px`,
574
- top: `${j}px`,
575
- right: `${D}px`,
576
- bottom: `${c}px`
577
- },
578
- tooltip: {
579
- trigger: "axis",
580
- axisPointer: {
581
- type: "cross",
582
- label: {
583
- formatter: (d) => {
584
- const { axisDimension: T, value: x } = d;
585
- return T === "x" ? x : String(h(x));
586
- }
587
- }
588
- },
589
- formatter: (d) => {
590
- let T = null, x = "";
591
- return d.forEach((A) => {
592
- A.seriesName === "资产持仓净值" && A.data !== null && (x += `<div>资产持仓净值: ${A.data}</div>`), A.componentSubType === "candlestick" && t.forEach((k) => {
593
- const { key: E, data: U } = k;
594
- if (E === "sellBuy") {
595
- const F = U.filter((f) => f.time === A.axisValue);
596
- let B = 0, g = 0;
597
- F.forEach((f) => {
598
- f.tradeType === "开多" || f.tradeType === "平空" ? B += f.amount : g += f.amount;
599
- }), B && (x += `<div>买: ${B}</div>`), g && (x += `<div>卖: ${g}</div>`);
600
- }
601
- E === "openClose" && U.forEach((F) => {
602
- F.time === A.axisValue && (x += F.tooltip);
603
- });
604
- }), x && (T = `<div><span style="font-weight: bold;">${A.axisValue}</span>${x}</div>`);
605
- }), T;
606
- }
607
- },
608
- xAxis: {
609
- type: "category",
610
- data: I,
611
- axisLine: {
612
- show: !0
613
- },
614
- splitLine: {
615
- show: !0,
616
- lineStyle: {
617
- type: "dotted",
618
- color: "#333"
619
- }
620
- },
621
- axisLabel: {
622
- show: !0,
623
- formatter: (d) => d
624
- }
625
- },
626
- yAxis: [
627
- {
628
- index: 0,
629
- splitLine: {
630
- show: !0,
631
- lineStyle: {
632
- type: "dotted",
633
- color: "#333"
634
- }
635
- },
636
- min: (d) => {
637
- const { min: T, max: x } = d, A = Math.abs((x - T) / 10);
638
- return T - A;
639
- },
640
- max: (d) => {
641
- const { min: T, max: x } = d, A = Math.abs((x - T) / 10);
642
- return x + A;
643
- },
644
- axisLine: {
645
- show: !0
646
- },
647
- axisLabel: {
648
- formatter: (d) => h(d),
649
- showMaxLabel: !1
650
- }
651
- },
652
- {
653
- show: !1,
654
- min: "dataMin"
655
- }
656
- ],
657
- dataZoom: [
658
- {
659
- type: "inside",
660
- xAxisIndex: [0, 0],
661
- zoomLock: u,
662
- maxValueSpan: l,
663
- start: M.length >= s ? (M.length - s) / M.length * 100 : 0,
664
- end: 99.99
665
- // startValue: kLine.length >= defaultShowBarCount ? kLine.length - defaultShowBarCount : 0,
666
- // endValue: kLine.length - 1,
667
- }
668
- ],
669
- series: [
670
- {
671
- name: "k线",
672
- type: "candlestick",
673
- data: M,
674
- markPoint: {
675
- data: b
676
- },
677
- markLine: {
678
- position: "middle",
679
- textStyle: { color: "blue", fontSize: 15 },
680
- animation: !1,
681
- data: N,
682
- lineStyle: {
683
- width: 3,
684
- type: "solid"
685
- },
686
- symbol: ["none", "none"]
687
- },
688
- itemStyle: {
689
- color: "transparent",
690
- color0: "#00FFFF",
691
- borderColor: "#FF0000",
692
- borderColor0: "#00FFFF",
693
- borderWidth: 1
694
- },
695
- z: 1
696
- },
697
- ...w,
698
- {
699
- name: "资产持仓净值",
700
- type: "line",
701
- data: n ?? [],
702
- symbol: "none",
703
- yAxisIndex: 1,
704
- connectNulls: !0,
705
- itemStyle: {
706
- color: "#666"
707
- }
708
- },
709
- {
710
- name: "二腿相关度",
711
- type: "line",
712
- data: o ?? [],
713
- symbol: "none",
714
- yAxisIndex: 1,
715
- connectNulls: !0,
716
- itemStyle: {
717
- color: "#FFF"
718
- },
719
- lineStyle: {
720
- // type: "dashed", // 虚线
721
- width: 2
722
- },
723
- label: {
724
- show: !0,
725
- // 显示文字
726
- position: "top",
727
- // 文字位置
728
- formatter: (d) => `相关度: ${d.data[1]}`,
729
- textStyle: {
730
- color: "#FFF",
731
- // 文字颜色
732
- fontSize: 14
733
- // 文字字体大小
734
- }
735
- }
736
- }
737
- ],
738
- toolbox: {
739
- show: !1
740
- },
741
- brush: {
742
- xAxisIndex: "all",
743
- brushLink: "all",
744
- transformable: !1,
745
- outOfBrush: {
746
- colorAlpha: 1
747
- },
748
- brushStyle: {
749
- color: "rgba(120,140,180,0)",
750
- borderColor: "rgba(255,255,255,0.4)"
751
- }
752
- }
753
- };
754
- }, Ke = (a, t, i) => {
755
- var D;
756
- const { gridLeft: e, gridRight: n, gridBottom: o, warningConfig: z, positionConfig: s, conditionConfig: l, isOpenDS: r } = t;
757
- let j = [];
758
- if ((D = i == null ? void 0 : i.getModel()) != null && D.getComponent) {
759
- const [c, u] = i.getModel().getComponent("yAxis").axis.scale._extent;
760
- let I = [], M = {}, p = [], m = {}, w = [], b = {};
761
- if (a.forEach(({ key: N, data: d, ...T }) => {
762
- N === "warning" ? (I = d, M = T) : N === "position" ? (p = d, m = T) : N === "condition" && (w = d, b = T);
763
- }), I.length > 0 && (j = I.reduce((N, d) => {
764
- const { value: T, text: x, info: A, config: k } = d;
765
- if (T > u || T < c)
766
- return N;
767
- const E = {
768
- y: i.convertToPixel({ yAxisIndex: 0 }, T),
769
- text: x,
770
- info: { info: A, config: { ...z, ...k }, event: { ...M } },
771
- gridLeft: e,
772
- gridRight: n,
773
- echartsWidth: i.getWidth(),
774
- echartsInstance: i
775
- };
776
- return [...N, Ze(E)];
777
- }, j)), p.length > 0 && (j = p.reduce((N, d) => {
778
- const { value: T, text: x, info: A, config: k } = d;
779
- if (T > u || T < c)
780
- return N;
781
- const E = {
782
- y: i.convertToPixel({ yAxisIndex: 0 }, T),
783
- text: x,
784
- info: { info: A, config: { ...s, ...k }, event: { ...m } },
785
- gridLeft: e,
786
- gridRight: n,
787
- echartsWidth: i.getWidth(),
788
- echartsInstance: i
789
- };
790
- return [...N, Ge(E)];
791
- }, j)), w.length > 0 && (j = w.reduce((N, d) => {
792
- const { value: T, text: x, profitValue: A, profitText: k, lossValue: E, lossText: U, info: F, config: B } = d;
793
- if (T > u || T < c)
794
- return N;
795
- const g = {
796
- y: i.convertToPixel({ yAxisIndex: 0 }, T),
797
- text: x,
798
- profitY: i.convertToPixel({ yAxisIndex: 0 }, A),
799
- profitText: k,
800
- lossY: i.convertToPixel({ yAxisIndex: 0 }, E),
801
- lossText: U,
802
- info: { info: F, config: { ...l, ...B }, event: { ...b } },
803
- gridLeft: e,
804
- gridRight: n,
805
- echartsWidth: i.getWidth(),
806
- echartsInstance: i
807
- };
808
- return [...N, $e(g)];
809
- }, j)), r) {
810
- const N = i.getOption(), d = N.dataset[0].source.klineData.slice(
811
- N.dataZoom[0].startValue,
812
- N.dataZoom[0].endValue + 1
813
- ), T = {};
814
- d.forEach((g) => {
815
- T[g[1]] ? T[g[1]] += 1 : T[g[1]] = 1;
816
- });
817
- const x = d[d.length - 1][1], A = d.reduce((g, f) => g + f[1], 0) / d.length, k = x - A, E = et(d, 1, 50), U = tt(d), F = U ? k / U : 0, B = qe(d, 1, x);
818
- j = [
819
- ...j,
820
- {
821
- type: "group",
822
- draggable: !1,
823
- children: Object.keys(T).map((g) => ({
824
- type: "line",
825
- shape: {
826
- x1: i.getWidth() - n - 100 * T[g],
827
- y1: i.convertToPixel({ yAxisIndex: 0 }, g),
828
- x2: i.getWidth() - n,
829
- y2: i.convertToPixel({ yAxisIndex: 0 }, g)
830
- },
831
- style: {
832
- stroke: "rgb(124,124,124)",
833
- lineWidth: 1
834
- },
835
- z: 10
836
- }))
837
- },
838
- {
839
- type: "text",
840
- x: e + 6,
841
- y: i.getHeight() - o - 20,
842
- style: {
843
- fill: "#FFF",
844
- text: `均值: ${h(A)}    距均值: ${h(
845
- k
846
- )}    中值: ${h(E)}    标准差: ${h(
847
- U
848
- )}    距均值/标准差: ${h(F)}    百分位: ${h(
849
- B
850
- )}%`,
851
- lineWidth: 1,
852
- opacity: 1
853
- },
854
- z: 10
855
- }
856
- ];
857
- }
858
- }
859
- return { elements: j };
860
- }, qe = (a, t, i) => {
861
- const { round: e, add: n, subtract: o, multiply: z, divide: s } = re, l = a.map((j) => j[t]).sort((j, D) => j - D);
862
- let r = 0;
863
- for (let j = 0; j < l.length; j++)
864
- if (l[j] === i) {
865
- r = j;
866
- break;
867
- } else if (l[j] >= i) {
868
- r = n(j, s(o(l[j + 1], l[j]), l[j]));
869
- break;
870
- }
871
- return e(s(z(r, 100), a.length + 1));
872
- }, et = (a, t, i) => {
873
- const { round: e, add: n, subtract: o, multiply: z, divide: s } = re, l = a.map((c) => c[t]).sort((c, u) => c - u), r = z(a.length + 1, s(i, 100)), j = Math.floor(r), D = o(r, j);
874
- return e(D === 0 ? l[r] : n(
875
- l[j],
876
- z(
877
- o(
878
- l[j >= a.length - 1 ? j : j + 1],
879
- l[j]
880
- ),
881
- D
882
- )
883
- ));
884
- };
885
- function tt(a) {
886
- const t = a.map((z) => z[1]), i = t.length;
887
- let e = 0, n = 0;
888
- for (const z of t)
889
- e += z;
890
- const o = e / i;
891
- for (const z of t)
892
- n += Math.pow(z - o, 2);
893
- return Math.sqrt(n / i);
894
- }
895
- const nt = { class: "st-kline" }, ot = { class: "st-kline-header" }, it = 300, Mt = /* @__PURE__ */ Me({
896
- __name: "index",
897
- props: {
898
- indicator: {
899
- type: Object,
900
- default: () => ({})
901
- },
902
- klineData: {
903
- type: Array,
904
- default: () => []
905
- },
906
- markData: {
907
- type: Array,
908
- default: () => []
909
- },
910
- lineData: {
911
- type: Array,
912
- default: () => []
913
- },
914
- netPositionData: {
915
- type: Array,
916
- default: () => []
917
- },
918
- relevanceData: {
919
- type: Array,
920
- default: () => []
921
- },
922
- priceTrendData: {
923
- type: Array,
924
- default: () => []
925
- },
926
- priceTrendPercentData: {
927
- type: Array,
928
- default: () => []
929
- },
930
- brushRange: {
931
- type: Array,
932
- default: () => []
933
- },
934
- defaultMenuData: {
935
- type: Array,
936
- default: () => []
937
- },
938
- isSelect: {
939
- type: Boolean,
940
- default: () => !1
941
- },
942
- config: {
943
- type: Object,
944
- default: () => ({})
945
- }
946
- },
947
- setup(a) {
948
- const t = a, i = {
949
- totalBarCount: 2e3,
950
- defaultShowBarCount: 200,
951
- preBarCount: 800,
952
- maxValueSpan: 1e4,
953
- gridLeft: 60,
954
- gridTop: 0,
955
- gridRight: 60,
956
- gridBottom: 30,
957
- // 预警线配置
958
- warningConfig: {
959
- draggable: !1,
960
- lineColor: "#fff",
961
- textColor: "#fff"
962
- },
963
- // 持仓线配置
964
- positionConfig: {
965
- draggable: !1,
966
- lineColor: "#e45d07",
967
- textColor: "#fff"
968
- },
969
- // 条件单配置
970
- conditionConfig: {
971
- draggable: !1,
972
- lineColor: "#fff",
973
- textColor: "#fff",
974
- profitLineColor: "#b71e44",
975
- profitTextColor: "#fff",
976
- lossLineColor: "#749b66",
977
- lossTextColor: "#fff"
978
- },
979
- // Tips配置
980
- tipsConfig: {
981
- open: !0,
982
- heigh: !0,
983
- low: !0,
984
- close: !0,
985
- business: !0,
986
- riseAndFall: !0
987
- },
988
- // 动态加载配置
989
- dynamicLoadConfig: {
990
- historyVisible: !1,
991
- historyLoadCallBack: () => {
992
- },
993
- futureVisible: !1,
994
- futureLoadCallBack: () => {
995
- }
996
- },
997
- // 是否禁用鼠标滚轮缩放K线,在开启动态后续数据加载时,建议开启,否则会引起datazoom内部缩放拖拽触发后续加载冲突
998
- zoomLock: !1,
999
- // 是否启用计算收盘价分布统计功能
1000
- isOpenDS: !1
1001
- }, e = W(() => ({ ...i, ...t.config })), n = S(null), o = S(-1), z = W(() => {
1002
- var g, f;
1003
- if (n.value && ((f = (g = n.value.dataset[0]) == null ? void 0 : g.source) != null && f.klineData[o.value])) {
1004
- const L = n.value.dataset[0].source.klineData[o.value], y = [], { open: Y, heigh: O, low: Q, close: R, business: Z, riseAndFall: G } = e.value.tipsConfig;
1005
- if (Y && y.push({ label: "开", value: h(L[0]), color: "rgb(153, 153, 153)" }), O && y.push({ label: "高", value: h(L[3]), color: "rgb(153, 153, 153)" }), Q && y.push({ label: "低", value: h(L[2]), color: "rgb(153, 153, 153)" }), R && y.push({ label: "收", value: h(L[1]), color: "rgb(153, 153, 153)" }), Z && y.push({ label: "额", value: We(L[4]), color: "rgb(153, 153, 153)" }), G) {
1006
- let P = ((L[1] - L[5]) / L[1] * 100).toFixed(2), _ = +P == 0 ? "white" : +P > 0 ? "red" : "#00ff00";
1007
- y.push({ label: "涨跌", value: `${P}%`, color: _ });
1008
- }
1009
- return y;
1010
- }
1011
- return [];
1012
- }), s = W(() => {
1013
- var g, f;
1014
- return n.value && ((f = (g = n.value.dataset[0]) == null ? void 0 : g.source) != null && f.indicatorData) ? n.value.dataset[0].source.indicatorData.reduce((L, y) => (y.data[o.value] && L.push({
1015
- label: y.key,
1016
- value: h(y.data[o.value]),
1017
- color: y.color
1018
- }), L), []) : [];
1019
- }), l = W(() => {
1020
- const g = [
1021
- "#FFFFFF",
1022
- "#FFDD00",
1023
- "#FF00FF",
1024
- "#00FF00",
1025
- "#FF6000",
1026
- "#1677FF",
1027
- "#7C3CC9",
1028
- "#FF0000",
1029
- "#FB9A0E",
1030
- "#00B7FF"
1031
- ];
1032
- if (t.priceTrendData.length > 0) {
1033
- const f = [];
1034
- return t.priceTrendData.forEach((L, y) => {
1035
- var O;
1036
- (L.data[o.value] ? h(L.data[o.value][1]) : null) !== null && f.push({
1037
- label: L.name,
1038
- value: h((O = L.data[o.value]) == null ? void 0 : O[1]),
1039
- color: g[y]
1040
- });
1041
- }), f;
1042
- }
1043
- if (t.priceTrendPercentData.length > 0) {
1044
- const f = [];
1045
- return M.getOption().series.filter((y) => y.name.includes("二腿价格走势百分比图")).forEach((y, Y) => {
1046
- var Q;
1047
- (y.data[o.value] ? h(y.data[o.value][1]) : null) !== null && f.push({
1048
- label: y.name.split("-")[1],
1049
- value: `${h((Q = y.data[o.value]) == null ? void 0 : Q[1])}%`,
1050
- color: g[Y]
1051
- });
1052
- }), f;
1053
- }
1054
- return [];
1055
- });
1056
- H(
1057
- () => [t.klineData, t.indicator, t.markData, t.netPositionData, t.relevanceData],
1058
- () => {
1059
- r();
1060
- },
1061
- {
1062
- deep: !0
1063
- }
1064
- ), H(
1065
- () => t.lineData,
1066
- async () => {
1067
- J("st-kline组件消息:props.lineData监控,额外画线数据发生改变,重绘->line", {
1068
- color: "red"
1069
- }), r("line");
1070
- },
1071
- {
1072
- deep: !0
1073
- }
1074
- ), H(
1075
- () => t.brushRange,
1076
- async () => {
1077
- J("st-kline组件消息:props.brushRange监控,区域刷选数据发生改变,重绘->brush", {
1078
- color: "red"
1079
- }), r("brush");
1080
- },
1081
- {
1082
- deep: !0
1083
- }
1084
- ), H(
1085
- () => t.priceTrendData,
1086
- async () => {
1087
- r("priceTrend");
1088
- },
1089
- {
1090
- deep: !0
1091
- }
1092
- ), H(
1093
- () => t.priceTrendPercentData,
1094
- async () => {
1095
- r("priceTrendPercent");
1096
- },
1097
- {
1098
- deep: !0
1099
- }
1100
- );
1101
- const r = async (g) => {
1102
- const L = (/* @__PURE__ */ new Map([
1103
- // kline-K线绘制
1104
- [
1105
- "kline",
1106
- async () => {
1107
- const y = await ze(
1108
- t.klineData,
1109
- t.markData,
1110
- t.indicator,
1111
- e.value,
1112
- t.netPositionData,
1113
- t.relevanceData
1114
- ), { graphic: Y } = M.getOption() ?? { graphic: [] };
1115
- n.value = { ...y, graphic: Y }, M.setOption(n.value, !0), J("st-kline组件消息:K线绘制完毕-draw", { color: "green" });
1116
- }
1117
- ],
1118
- // line-额外线条绘制
1119
- [
1120
- "line",
1121
- () => {
1122
- const y = M.getOption(), Y = Ke(t.lineData, e.value, M);
1123
- n.value = { ...y, graphic: Y }, M.setOption(n.value, {
1124
- replaceMerge: ["graphic"]
1125
- }), J("st-kline组件消息:额外画线绘制完毕-draw", { color: "green" });
1126
- }
1127
- ],
1128
- // brush-区域刷选
1129
- [
1130
- "brush",
1131
- () => {
1132
- const { brushRange: y } = t;
1133
- y instanceof Array && y.length > 0 && (M.dispatchAction({
1134
- type: "brush",
1135
- areas: [
1136
- {
1137
- brushType: "lineX",
1138
- coordRange: [y[0] + "", y[1] + ""],
1139
- xAxisIndex: 0
1140
- }
1141
- ]
1142
- }), J("st-kline组件消息:区域刷选绘制完毕-draw", { color: "green" }));
1143
- }
1144
- ],
1145
- // 全部绘制
1146
- [
1147
- void 0,
1148
- async () => {
1149
- await r("kline"), await r("line"), await r("priceTrend"), await r("priceTrendPercent"), await r("brush");
1150
- }
1151
- ],
1152
- // history-K线历史数据绘制
1153
- [
1154
- "history",
1155
- async () => {
1156
- const y = M.getOption(), Y = await ze(
1157
- t.klineData,
1158
- t.markData,
1159
- t.indicator,
1160
- e.value,
1161
- t.netPositionData,
1162
- t.relevanceData
1163
- ), O = Y.dataset.source.klineData.length - y.dataset[0].source.klineData.length;
1164
- M.setOption(
1165
- {
1166
- ...Y,
1167
- dataZoom: [
1168
- {
1169
- type: "inside",
1170
- xAxisIndex: [0, 0],
1171
- zoomLock: e.value.zoomLock,
1172
- maxValueSpan: e.value.maxValueSpan,
1173
- startValue: y.dataZoom[0].startValue + O,
1174
- endValue: y.dataZoom[0].endValue + O
1175
- }
1176
- ]
1177
- },
1178
- !0
1179
- ), await r("priceTrend");
1180
- }
1181
- ],
1182
- // future-K线后续数据绘制
1183
- [
1184
- "future",
1185
- async () => {
1186
- const y = M.getOption(), Y = await ze(
1187
- t.klineData,
1188
- t.markData,
1189
- t.indicator,
1190
- e.value,
1191
- t.netPositionData,
1192
- t.relevanceData
1193
- );
1194
- Y.dataZoom[0].start = (t.klineData.length - y.dataZoom[0].endValue + y.dataZoom[0].startValue) / t.klineData.length * 100, M.setOption(Y, !0), await r("priceTrend");
1195
- }
1196
- ],
1197
- // priceTrend-二腿价格趋势绘制
1198
- [
1199
- "priceTrend",
1200
- () => {
1201
- if (t.priceTrendData.length === 0)
1202
- return;
1203
- const y = M.getOption(), Y = [
1204
- "#FFFFFF",
1205
- "#FFDD00",
1206
- "#FF00FF",
1207
- "#00FF00",
1208
- "#FF6000",
1209
- "#1677FF",
1210
- "#7C3CC9",
1211
- "#FF0000",
1212
- "#FB9A0E",
1213
- "#00B7FF"
1214
- ], O = t.priceTrendData.reduce((Q, R, Z) => {
1215
- const { name: G, data: P } = R, _ = {
1216
- name: `二腿价格走势图-${G}`,
1217
- type: "line",
1218
- data: P,
1219
- symbol: "none",
1220
- yAxisIndex: 1,
1221
- connectNulls: !0,
1222
- itemStyle: {
1223
- color: Y[Z]
1224
- },
1225
- lineStyle: {
1226
- type: "dashed",
1227
- // 虚线
1228
- width: 1
1229
- }
1230
- };
1231
- return Q.push(_), Q;
1232
- }, []);
1233
- n.value = { ...y, series: [...y.series, ...O] }, M.setOption(n.value, {
1234
- replaceMerge: ["series"]
1235
- });
1236
- }
1237
- ],
1238
- // priceTrendPercent-二腿价格趋势百分比绘制-初始绘制
1239
- [
1240
- "priceTrendPercent",
1241
- async () => {
1242
- if (t.priceTrendPercentData.length === 0)
1243
- return;
1244
- const y = M.getOption(), Y = [
1245
- "#FFFFFF",
1246
- "#FFDD00",
1247
- "#FF00FF",
1248
- "#00FF00",
1249
- "#FF6000",
1250
- "#1677FF",
1251
- "#7C3CC9",
1252
- "#FF0000",
1253
- "#FB9A0E",
1254
- "#00B7FF"
1255
- ], O = y.dataZoom[0].startValue, Q = t.priceTrendPercentData.reduce((R, Z, G) => {
1256
- const { name: P, data: _ } = Z, ee = _.length > e.value.totalBarCount ? _.slice(_.length - e.value.totalBarCount) : _, te = ee[O][1], me = ee.map((Te) => [Te[0], (Te[1] - te) / te * 100]), we = {
1257
- name: `二腿价格走势百分比图-${P}`,
1258
- type: "line",
1259
- data: me,
1260
- symbol: "none",
1261
- yAxisIndex: 1,
1262
- connectNulls: !0,
1263
- itemStyle: {
1264
- color: Y[G]
1265
- },
1266
- lineStyle: {
1267
- type: "dashed",
1268
- // 虚线
1269
- width: 1
1270
- }
1271
- };
1272
- return R.push(we), R;
1273
- }, []);
1274
- y.series = [...y.series.filter((R) => !R.name.includes("二腿价格走势百分比图")), ...Q], M.setOption(y, !0);
1275
- }
1276
- ]
1277
- ])).get(g);
1278
- L instanceof Function && await L();
1279
- }, j = S(!1), D = S([]), c = (g) => {
1280
- const { callBack: f } = g;
1281
- f instanceof Function && f(M, j);
1282
- }, u = () => {
1283
- D.value = t.defaultMenuData;
1284
- }, I = S();
1285
- let M, p;
1286
- const m = (g, f) => {
1287
- var L, y;
1288
- if (g)
1289
- o.value = typeof ((L = g == null ? void 0 : g.batch[0]) == null ? void 0 : L.dataIndex) == "number" ? (y = g == null ? void 0 : g.batch[0]) == null ? void 0 : y.dataIndex : -1;
1290
- else {
1291
- const Y = f.getOption();
1292
- Y.dataZoom instanceof Array && (o.value = Y.dataZoom[0].endValue);
1293
- }
1294
- };
1295
- let w = null, b = !1, N = S(!1), d = !1, T = S(!1);
1296
- const x = async (g) => {
1297
- const f = g.batch ? g.batch[0].start * e.value.totalBarCount : g.startValue;
1298
- e.value.dynamicLoadConfig.historyVisible && f <= 100 && !b && !N.value && (b = !0, await e.value.dynamicLoadConfig.historyLoadCallBack(N), await r("history"), b = !1);
1299
- const L = g.batch ? g.batch[0].end === 100 : g.endValue >= t.klineData.length - e.value.preBarCount - 1, y = g.actionIsWheel;
1300
- e.value.dynamicLoadConfig.futureVisible && L && !d && !T.value && !y && (d = !0, await e.value.dynamicLoadConfig.futureLoadCallBack(T), await r("future"), d = !1), clearTimeout(w), w = setTimeout(() => {
1301
- r("line"), r("priceTrendPercent"), clearTimeout(w), w = null;
1302
- }, it);
1303
- };
1304
- let A = null;
1305
- const k = (g) => {
1306
- A = setTimeout(() => {
1307
- var f;
1308
- if (g.componentType === "graphic") {
1309
- const { oncontextmenu: L } = ((f = g.info) == null ? void 0 : f.event) ?? {};
1310
- L instanceof Function && L(g, g.info, D);
1311
- }
1312
- clearTimeout(A), A = null;
1313
- });
1314
- }, E = () => {
1315
- M.on("highlight", (g) => {
1316
- m(g, M);
1317
- }), M.on("globalout", () => {
1318
- m(null, M);
1319
- }), M.on("contextmenu", (g) => {
1320
- k(g);
1321
- }), M.on("datazoom", (g) => {
1322
- x(g);
1323
- });
1324
- }, U = () => {
1325
- M.off("highlight"), M.off("globalout"), M.off("contextmenu"), M.off("datazoom");
1326
- }, F = (g) => {
1327
- if (!M || !(g.ctrlKey || t.isSelect))
1328
- return;
1329
- const f = M.getOption();
1330
- let { startValue: L, endValue: y, start: Y, end: O } = f.dataZoom[0];
1331
- const Q = () => {
1332
- L !== 0 && (L = L - 1, y = y - 1, M.dispatchAction({
1333
- type: "dataZoom",
1334
- startValue: L,
1335
- endValue: y,
1336
- maxValueSpan: e.value.maxValueSpan
1337
- }));
1338
- }, R = () => {
1339
- if (e.value.dynamicLoadConfig.futureVisible && !d && !T.value)
1340
- L = L + 1, y = y + 1, M.dispatchAction({
1341
- type: "dataZoom",
1342
- startValue: L,
1343
- endValue: y,
1344
- maxValueSpan: e.value.maxValueSpan
1345
- });
1346
- else {
1347
- if (y === f.xAxis[0].data.length - 1)
1348
- return;
1349
- L = L + 1, y = y + 1, M.dispatchAction({
1350
- type: "dataZoom",
1351
- startValue: L,
1352
- endValue: y,
1353
- maxValueSpan: e.value.maxValueSpan
1354
- });
1355
- }
1356
- }, Z = () => {
1357
- if (y - L < 5)
1358
- return;
1359
- const ee = Math.floor((o.value - L) / 2) + 1, te = Math.floor((y - o.value) / 2) + 1;
1360
- L = L + ee, y = y - te, M.dispatchAction({
1361
- type: "dataZoom",
1362
- startValue: L,
1363
- endValue: y,
1364
- actionIsWheel: !0,
1365
- // 标记为缩放
1366
- maxValueSpan: e.value.maxValueSpan
1367
- });
1368
- }, G = () => {
1369
- Y = Y - (O - Y) / 4, M.dispatchAction({
1370
- type: "dataZoom",
1371
- start: Y,
1372
- end: O,
1373
- actionIsWheel: !0,
1374
- // 标记为缩放
1375
- maxValueSpan: e.value.maxValueSpan
1376
- });
1377
- }, _ = (/* @__PURE__ */ new Map([
1378
- ["ArrowLeft", Q],
1379
- ["ArrowRight", R],
1380
- ["ArrowUp", Z],
1381
- ["ArrowDown", G]
1382
- ])).get(g.code);
1383
- _ instanceof Function && _();
1384
- }, B = async () => {
1385
- let g = !0;
1386
- M = oe.init(I.value), await r(), D.value = t.defaultMenuData, o.value = M.getOption().dataZoom[0].endValue ?? -1, E(), p = new ResizeObserver(() => {
1387
- if (g) {
1388
- g = null;
1389
- return;
1390
- }
1391
- M.resize(), r("line");
1392
- }), p.observe(I.value), window.addEventListener("keydown", F);
1393
- };
1394
- return de(() => {
1395
- B();
1396
- }), ge(() => {
1397
- U(), window.removeEventListener("keydown", F), M.dispose(), p.disconnect(), p = null;
1398
- }), (g, f) => {
1399
- const L = he, y = Ce;
1400
- return C(), v("div", nt, [
1401
- K("div", ot, [
1402
- V(se, { data: z.value }, null, 8, ["data"]),
1403
- V(se, { data: s.value }, null, 8, ["data"]),
1404
- V(se, { data: l.value }, null, 8, ["data"])
1405
- ]),
1406
- V(Re, {
1407
- class: "st-kline-body",
1408
- onCloseContextMenuCallBack: u
1409
- }, {
1410
- popover: X(() => [
1411
- V(y, { class: "menu" }, {
1412
- default: X(() => [
1413
- (C(!0), v(ae, null, le(D.value, (Y) => (C(), Ae(L, {
1414
- key: Y.label,
1415
- index: Y.label,
1416
- class: "menuItem",
1417
- onClick: (O) => c(Y)
1418
- }, {
1419
- default: X(() => [
1420
- Oe(q(Y.label), 1)
1421
- ]),
1422
- _: 2
1423
- }, 1032, ["index", "onClick"]))), 128))
1424
- ]),
1425
- _: 1
1426
- })
1427
- ]),
1428
- default: X(() => [
1429
- K("div", {
1430
- ref_key: "echartsRef",
1431
- ref: I,
1432
- class: ke(j.value ? "st-kline-chart cursorPen" : "st-kline-chart")
1433
- }, null, 2)
1434
- ]),
1435
- _: 1
1436
- })
1437
- ]);
1438
- };
1439
- }
1440
- });
1441
- const at = /* @__PURE__ */ $(Mt, [["__scopeId", "data-v-7f014d0e"]]), lt = { class: "kline-tips" }, rt = /* @__PURE__ */ Me({
1442
- __name: "index",
1443
- props: {
1444
- // 提示数据
1445
- data: {
1446
- type: Array,
1447
- require: !0
1448
- }
1449
- },
1450
- setup(a) {
1451
- return (t, i) => (C(), v("div", lt, [
1452
- (C(!0), v(ae, null, le(a.data, (e, n) => (C(), v("div", {
1453
- key: n,
1454
- class: "kline-tips-item",
1455
- style: ye({ color: e.color })
1456
- }, q(e.label) + " " + q(e.value), 5))), 128))
1457
- ]));
1458
- }
1459
- });
1460
- const je = /* @__PURE__ */ $(rt, [["__scopeId", "data-v-dc7d381b"]]);
1461
- const st = { class: "klineSub" }, ct = { class: "klineSub-tips" }, ut = {
1462
- key: 0,
1463
- class: "klineSub-tips-select"
1464
- }, Nt = {
1465
- __name: "index",
1466
- props: {
1467
- data: { type: Object, require: !0 },
1468
- activeIndex: { type: [Number, String], require: !0 },
1469
- modelValue: { type: String, required: !0 },
1470
- // 副图指标
1471
- subIndicatorList: { type: Array, required: !0 }
1472
- // 副图指标列表
1473
- },
1474
- emits: ["update:modelValue"],
1475
- setup(a, { expose: t, emit: i }) {
1476
- const { round: e } = re;
1477
- let n, o;
1478
- const z = i, s = a, l = S(), r = W({
1479
- get() {
1480
- return s.modelValue;
1481
- },
1482
- set(c) {
1483
- z("update:modelValue", c);
1484
- }
1485
- }), j = W(() => {
1486
- var I;
1487
- const { data: c, activeIndex: u } = s;
1488
- return ((I = c == null ? void 0 : c.subIndicator) == null ? void 0 : I.map((M) => ({ label: M.key, color: M.color, value: M.data[u] || "-" }))) || [];
1489
- });
1490
- de(() => {
1491
- n = oe.init(l.value);
1492
- let c = !0;
1493
- o = new ResizeObserver(() => {
1494
- if (c) {
1495
- c = null;
1496
- return;
1497
- }
1498
- n.resize();
1499
- }), o.observe(l.value);
1500
- }), ge(() => {
1501
- n.dispose(), o.disconnect(), o = null;
1502
- });
1503
- const D = (c, u) => {
1504
- const I = c[u], M = u === 0 ? c[u] : c[u - 1];
1505
- return I[0] === I[1] ? I[0] >= M[1] ? {
1506
- color: "transparent",
1507
- borderColor: "#FF0000"
1508
- } : {
1509
- color: "#00FFFF"
1510
- } : I[1] > I[0] ? {
1511
- color: "transparent",
1512
- borderColor: "#FF0000"
1513
- } : {
1514
- color: "#00FFFF"
1515
- };
1516
- };
1517
- return t({
1518
- connect: (c) => {
1519
- oe.connect([c, n]);
1520
- },
1521
- // 联动
1522
- draw: (c, u) => {
1523
- Ye(() => {
1524
- const { startValue: I, endValue: M, maxValueSpan: p } = c, { leftYAxisRange: m, rightYAxisRange: w } = s.data.subIndicator[0], b = s.data.subIndicator.map((N) => {
1525
- if (N.series === "bar")
1526
- return {
1527
- name: "subMain",
1528
- xAxisIndex: 0,
1529
- yAxisIndex: 1,
1530
- type: "bar",
1531
- silent: !0,
1532
- symbol: "none",
1533
- data: N.data.map((d, T) => N.seriesColor === "kline" ? {
1534
- value: d,
1535
- itemStyle: D(s.data.data, T)
1536
- } : N.seriesColor === "value" ? {
1537
- value: d,
1538
- itemStyle: {
1539
- color: d >= 0 ? "#FF0000" : "#00FFFF"
1540
- }
1541
- } : {
1542
- value: d,
1543
- itemStyle: {
1544
- color: N.seriesColor
1545
- }
1546
- })
1547
- };
1548
- if (N.series === "line")
1549
- return {
1550
- xAxisIndex: 0,
1551
- yAxisIndex: N.yAxis === "right" ? 2 : 1,
1552
- name: N.key,
1553
- type: "line",
1554
- silent: !0,
1555
- symbol: "none",
1556
- data: N.data,
1557
- lineStyle: {
1558
- width: 1
1559
- },
1560
- itemStyle: {
1561
- color: N.color
1562
- }
1563
- };
1564
- });
1565
- n.setOption(
1566
- {
1567
- animation: !1,
1568
- grid: {
1569
- left: `${u.gridLeft}px`,
1570
- top: "10px",
1571
- right: `${u.gridRight}px`,
1572
- bottom: "20px"
1573
- },
1574
- dataZoom: [
1575
- {
1576
- type: "inside",
1577
- startValue: I,
1578
- endValue: M,
1579
- maxValueSpan: p
1580
- }
1581
- ],
1582
- tooltip: {
1583
- trigger: "axis",
1584
- appendToBody: !0,
1585
- confine: !0,
1586
- axisPointer: {
1587
- type: "cross",
1588
- label: {
1589
- rich: {},
1590
- formatter: (N) => {
1591
- const { axisDimension: d, value: T } = N;
1592
- if (d === "x")
1593
- return T;
1594
- if (N.axisIndex === 1)
1595
- return String(e(T));
1596
- }
1597
- }
1598
- },
1599
- formatter: () => ""
1600
- },
1601
- xAxis: {
1602
- type: "category",
1603
- data: s.data.time,
1604
- axisLine: {
1605
- show: !0
1606
- },
1607
- splitLine: {
1608
- show: !1
1609
- },
1610
- axisLabel: {
1611
- show: !0,
1612
- formatter: (N) => N
1613
- }
1614
- },
1615
- yAxis: [
1616
- {
1617
- position: "right"
1618
- },
1619
- {
1620
- position: "left",
1621
- min: m === "cover" ? (N) => N.min : null,
1622
- max: m === "cover" ? (N) => N.max : null,
1623
- splitNumber: 1,
1624
- axisLine: {
1625
- show: !0
1626
- },
1627
- splitLine: {
1628
- show: !0,
1629
- lineStyle: {
1630
- type: "dotted",
1631
- color: "#333"
1632
- }
1633
- }
1634
- },
1635
- {
1636
- position: "right",
1637
- min: w === "cover" ? (N) => N.min : null,
1638
- max: w === "cover" ? (N) => N.max : null,
1639
- splitNumber: 1,
1640
- axisLine: {
1641
- show: !1
1642
- },
1643
- splitLine: {
1644
- show: !1
1645
- },
1646
- axisLabel: {
1647
- show: !1
1648
- }
1649
- }
1650
- ],
1651
- series: b
1652
- },
1653
- !0
1654
- );
1655
- });
1656
- }
1657
- // 重置
1658
- }), (c, u) => {
1659
- const I = Ee, M = Se;
1660
- return C(), v("div", st, [
1661
- K("div", ct, [
1662
- j.value.length ? (C(), v("div", ut, [
1663
- V(M, {
1664
- modelValue: r.value,
1665
- "onUpdate:modelValue": u[0] || (u[0] = (p) => r.value = p),
1666
- size: "small",
1667
- "popper-class": "element-dark",
1668
- class: "element-dark subIndicator"
1669
- }, {
1670
- default: X(() => [
1671
- (C(!0), v(ae, null, le(a.subIndicatorList, (p) => (C(), Ae(I, {
1672
- key: p.value,
1673
- label: p.label,
1674
- value: p.value
1675
- }, null, 8, ["label", "value"]))), 128))
1676
- ]),
1677
- _: 1
1678
- }, 8, ["modelValue"])
1679
- ])) : xe("", !0),
1680
- V(je, { data: j.value }, null, 8, ["data"])
1681
- ]),
1682
- K("div", {
1683
- class: "klineSub-chart",
1684
- ref_key: "subChartRef",
1685
- ref: l
1686
- }, null, 512)
1687
- ]);
1688
- };
1689
- }
1690
- }, zt = /* @__PURE__ */ $(Nt, [["__scopeId", "data-v-aba58678"]]);
1691
- const jt = { class: "kline-tips" }, yt = {
1692
- __name: "index",
1693
- props: {
1694
- // 提示数据
1695
- data: {
1696
- type: Object,
1697
- require: !0
1698
- },
1699
- activeIndex: {
1700
- type: [Number, String],
1701
- require: !0
1702
- }
1703
- },
1704
- setup(a) {
1705
- const { round: t, formatValue: i } = re, e = a, n = W(() => {
1706
- const { data: z, activeIndex: s } = e;
1707
- if (z.data && z.data[s]) {
1708
- const l = z.data[s], r = [
1709
- { label: "开", value: t(l[0]) },
1710
- { label: "高", value: t(l[3]) },
1711
- { label: "低", value: t(l[2]) },
1712
- { label: "收", value: t(l[1]) }
1713
- ];
1714
- l[4] !== null && r.push({ label: "额", value: i(l[4]) });
1715
- let j;
1716
- return l[6] > 0 ? j = "red" : l[6] < 0 && (j = "green"), r.push({ label: "涨跌", value: `${t(l[6])}%`, color: j }), r;
1717
- }
1718
- return [];
1719
- }), o = W(() => {
1720
- var l;
1721
- const { data: z, activeIndex: s } = e;
1722
- return ((l = z == null ? void 0 : z.mainIndicator) == null ? void 0 : l.map((r) => ({ label: r.key, value: t(r.data[s]), color: r.color }))) || [];
1723
- });
1724
- return (z, s) => (C(), v("div", jt, [
1725
- V(je, { data: n.value }, null, 8, ["data"]),
1726
- V(je, { data: o.value }, null, 8, ["data"])
1727
- ]));
1728
- }
1729
- }, dt = /* @__PURE__ */ $(yt, [["__scopeId", "data-v-a12855fe"]]), gt = {
1730
- __name: "index",
1731
- setup(a, { expose: t }) {
1732
- return t({
1733
- // 键盘事件处理
1734
- handleKeyDown: (i, e) => {
1735
- let { startValue: n, endValue: o, maxIndex: z } = e;
1736
- if (i.code === "ArrowLeft") {
1737
- if (n === 0)
1738
- return;
1739
- n = n - 1, o = o - 1;
1740
- } else if (i.code === "ArrowRight") {
1741
- if (o === z)
1742
- return;
1743
- n = n + 1, o = o + 1;
1744
- } else if (i.code === "ArrowUp") {
1745
- if (o - n < 5)
1746
- return;
1747
- const s = Math.floor((o - n) / 2) + 1;
1748
- n = n + s, o - n < 5 && (n = o - 4);
1749
- } else if (i.code === "ArrowDown") {
1750
- const s = Math.min(500, o - n);
1751
- n = n - s - 1;
1752
- }
1753
- return {
1754
- startValue: n,
1755
- endValue: o
1756
- };
1757
- },
1758
- // 合并数据
1759
- mergeData: (i, e) => ({
1760
- time: [...i.time, ...e.time.slice(1)],
1761
- data: [...i.data, ...e.data.slice(1)],
1762
- mainIndicator: i.mainIndicator.map((n, o) => ({
1763
- ...n,
1764
- data: [...n.data, ...e.mainIndicator[o].data.slice(1)]
1765
- })),
1766
- subIndicator: i.subIndicator.map((n, o) => ({
1767
- ...n,
1768
- data: [...n.data, ...e.subIndicator[o].data.slice(1)]
1769
- }))
1770
- }),
1771
- // 根据时间解析dataZoom
1772
- getDataZoomInfoByTime: (i) => {
1773
- const { showStartTime: e, showEndTime: n, maxShowDays: o } = i;
1774
- let z = -1, s = -1, l = {};
1775
- return i.time.forEach((r, j) => {
1776
- const D = r.split(" ")[0];
1777
- l[D] = l[D] || 0, l[D] += 1, z === -1 && new Date(r) >= new Date(e) && (z = j), s === -1 && new Date(r) >= new Date(n) && (s = j);
1778
- }), s = s === -1 ? i.time.length - 1 : s, {
1779
- startValue: z,
1780
- endValue: s,
1781
- maxValueSpan: Math.max(...Object.values(l)) * o
1782
- };
1783
- }
1784
- }), (i, e) => null;
1785
- }
1786
- };
1787
- const Tt = {
1788
- __name: "index",
1789
- props: {
1790
- data: { type: Array, default: () => [] }
1791
- // 时间数据
1792
- },
1793
- emits: ["change"],
1794
- setup(a, { expose: t, emit: i }) {
1795
- let e, n, o = null;
1796
- const z = i, s = a, l = S();
1797
- H(
1798
- () => s.data,
1799
- () => {
1800
- D();
1801
- },
1802
- { deep: !0 }
1803
- ), de(() => {
1804
- e = oe.init(l.value), r(), D();
1805
- let c = !0;
1806
- n = new ResizeObserver(() => {
1807
- if (c) {
1808
- c = null;
1809
- return;
1810
- }
1811
- e.resize();
1812
- }), n.observe(l.value);
1813
- }), ge(() => {
1814
- e.off("datazoom"), e.dispose(), n.disconnect(), n = null;
1815
- });
1816
- const r = () => {
1817
- e.on("datazoom", (c) => {
1818
- c.dataZoomId && (clearTimeout(o), o = setTimeout(() => {
1819
- const { data: u } = s, { start: I, end: M } = c, p = Math.floor(I * u.length / 100), m = M === 100 ? u.length - 1 : Math.floor(M * u.length / 100);
1820
- j(p, m), clearTimeout(o);
1821
- }, 100));
1822
- });
1823
- }, j = (c, u) => {
1824
- const I = s.data;
1825
- if (I.length === 0)
1826
- return;
1827
- const M = I[c][0].split(" ")[0], p = I[u][0].split(" ")[0];
1828
- z("change", {
1829
- startTime: `${M} 00:00:00`,
1830
- endTime: `${p} 24:00:00`
1831
- });
1832
- }, D = () => {
1833
- const { data: c } = s;
1834
- if (c.length === 0)
1835
- return;
1836
- const u = c.map((M) => M[0].split(" ")[0]), I = c.map((M) => M[1]);
1837
- e.setOption({
1838
- grid: {
1839
- height: 0,
1840
- left: "80px",
1841
- right: "80px"
1842
- },
1843
- xAxis: {
1844
- type: "category",
1845
- data: u,
1846
- show: !1
1847
- },
1848
- yAxis: {
1849
- type: "value"
1850
- },
1851
- series: [
1852
- {
1853
- data: I,
1854
- type: "line"
1855
- }
1856
- ]
1857
- }, !0);
1858
- };
1859
- return t({
1860
- resetSlide: (c, u, I) => {
1861
- let M = -1, p = -1;
1862
- s.data.forEach((m, w) => {
1863
- M === -1 && m[0] === c ? M = w : M === -1 && new Date(m[0]) > new Date(c) && (M = w - 1), (p === -1 && m[0] === u || p === -1 && new Date(m[0]) > new Date(u)) && (p = w);
1864
- }), p = p === -1 ? s.data.length - 1 : p, e.setOption({
1865
- dataZoom: [
1866
- {
1867
- show: !0,
1868
- startValue: M,
1869
- endValue: p,
1870
- maxValueSpan: I,
1871
- textStyle: {
1872
- color: "#ccc"
1873
- }
1874
- },
1875
- {
1876
- type: "inside",
1877
- startValue: M,
1878
- endValue: p,
1879
- maxValueSpan: I
1880
- }
1881
- ]
1882
- });
1883
- },
1884
- // 重置
1885
- resize: () => {
1886
- e == null || e.resize();
1887
- }
1888
- }), (c, u) => (C(), v("div", {
1889
- class: "klineSlide",
1890
- ref_key: "slideChartRef",
1891
- ref: l
1892
- }, null, 512));
1893
- }
1894
- }, Dt = /* @__PURE__ */ $(Tt, [["__scopeId", "data-v-7a2f3dd0"]]), Rt = {
1895
- install(a) {
1896
- a.component("st-kline", at), a.component("st-kline-sub-new", zt), a.component("st-kline-tips-new", dt), a.component("st-kline-slide-new", Dt), a.component("st-kline-utils-new", gt);
1897
- }
1898
- };
1899
- export {
1900
- Rt as default
1901
- };