st-comp 0.0.165 → 0.0.166
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.
- package/es/KlinePlus.cjs +3 -3
- package/es/KlinePlus.js +418 -415
- package/es/style.css +1 -1
- package/lib/bundle.js +1 -1
- package/lib/bundle.umd.cjs +67 -67
- package/lib/{index-98f7afa7.js → index-80531492.js} +1303 -1300
- package/lib/{python-e64d75ae.js → python-20a1a5fc.js} +1 -1
- package/lib/style.css +1 -1
- package/package.json +1 -1
- package/packages/KlinePlus/components/SliderChart.vue +26 -9
- package/packages/KlinePlus/index.vue +2 -10
package/es/KlinePlus.js
CHANGED
|
@@ -5,9 +5,9 @@ import "./el-tag-6036f51c.js";
|
|
|
5
5
|
import { E as ke, a as be } from "./el-select-d3bce4d1.js";
|
|
6
6
|
import "./el-scrollbar-bcf29780.js";
|
|
7
7
|
import "./el-popper-85365d5b.js";
|
|
8
|
-
import { openBlock as R, createElementBlock as _, Fragment as Le, renderList as Ae, normalizeStyle as he, toDisplayString as te, inject as me, ref as P, onMounted as xe, nextTick as Ee,
|
|
8
|
+
import { openBlock as R, createElementBlock as _, Fragment as Le, renderList as Ae, normalizeStyle as he, toDisplayString as te, inject as me, ref as P, onMounted as xe, nextTick as Ee, watch as Ne, onUnmounted as we, computed as se, withDirectives as ve, createElementVNode as $, createVNode as ee, createCommentVNode as oe, withCtx as Se, createBlock as ge } from "vue";
|
|
9
9
|
import { d as p } from "./dayjs.min-54a4e095.js";
|
|
10
|
-
import * as
|
|
10
|
+
import * as ce from "echarts";
|
|
11
11
|
import { x as pe, G as Me, D as Qe } from "./index-7ed0999e.js";
|
|
12
12
|
import { _ as ze } from "./_plugin-vue_export-helper-dad06003.js";
|
|
13
13
|
import "./use-global-config-946f61a4.js";
|
|
@@ -29,22 +29,22 @@ const Ue = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPS
|
|
|
29
29
|
loadCheckCount: 500,
|
|
30
30
|
// 加载更多: 载入条目
|
|
31
31
|
loadAddCount: 2e3
|
|
32
|
-
}, Ve = (
|
|
33
|
-
const
|
|
34
|
-
return
|
|
32
|
+
}, Ve = (n, d) => {
|
|
33
|
+
const l = n[d], j = d === 0 ? n[d] : n[d - 1];
|
|
34
|
+
return l[0] === l[1] ? l[0] >= j[1] ? {
|
|
35
35
|
color: "transparent",
|
|
36
36
|
borderColor: "#FF0000"
|
|
37
37
|
} : {
|
|
38
38
|
color: "#00FFFF"
|
|
39
|
-
} :
|
|
39
|
+
} : l[1] > l[0] ? {
|
|
40
40
|
color: "transparent",
|
|
41
41
|
borderColor: "#FF0000"
|
|
42
42
|
} : {
|
|
43
43
|
color: "#00FFFF"
|
|
44
44
|
};
|
|
45
|
-
}, _e = (
|
|
46
|
-
var
|
|
47
|
-
const
|
|
45
|
+
}, _e = (n, d, l) => {
|
|
46
|
+
var u, A, I, D;
|
|
47
|
+
const j = n.subIndicator.map((e) => {
|
|
48
48
|
if (e.series === "bar")
|
|
49
49
|
return {
|
|
50
50
|
name: "subMain",
|
|
@@ -53,16 +53,16 @@ const Ue = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPS
|
|
|
53
53
|
type: "bar",
|
|
54
54
|
silent: !0,
|
|
55
55
|
symbol: "none",
|
|
56
|
-
data: e.data.map((
|
|
57
|
-
value:
|
|
58
|
-
itemStyle: Ve(
|
|
56
|
+
data: e.data.map((E, v) => e.seriesColor === "kline" ? {
|
|
57
|
+
value: E,
|
|
58
|
+
itemStyle: Ve(n.data, v)
|
|
59
59
|
} : e.seriesColor === "value" ? {
|
|
60
|
-
value:
|
|
60
|
+
value: E,
|
|
61
61
|
itemStyle: {
|
|
62
|
-
color:
|
|
62
|
+
color: E >= 0 ? "#FF0000" : "#00FFFF"
|
|
63
63
|
}
|
|
64
64
|
} : {
|
|
65
|
-
value:
|
|
65
|
+
value: E,
|
|
66
66
|
itemStyle: {
|
|
67
67
|
color: e.seriesColor
|
|
68
68
|
}
|
|
@@ -97,7 +97,7 @@ const Ue = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPS
|
|
|
97
97
|
{
|
|
98
98
|
type: "inside",
|
|
99
99
|
startValue: d,
|
|
100
|
-
endValue:
|
|
100
|
+
endValue: l,
|
|
101
101
|
maxValueSpan: J.maxValueSpan
|
|
102
102
|
}
|
|
103
103
|
],
|
|
@@ -110,8 +110,8 @@ const Ue = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPS
|
|
|
110
110
|
label: {
|
|
111
111
|
rich: {},
|
|
112
112
|
formatter: (e) => {
|
|
113
|
-
const { axisDimension:
|
|
114
|
-
if (
|
|
113
|
+
const { axisDimension: E, value: v } = e;
|
|
114
|
+
if (E === "x")
|
|
115
115
|
return null;
|
|
116
116
|
if (e.axisIndex === 1)
|
|
117
117
|
return String(Fe(v));
|
|
@@ -120,7 +120,7 @@ const Ue = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPS
|
|
|
120
120
|
},
|
|
121
121
|
xAxis: {
|
|
122
122
|
type: "category",
|
|
123
|
-
data:
|
|
123
|
+
data: n.time,
|
|
124
124
|
axisLine: {
|
|
125
125
|
show: !0
|
|
126
126
|
},
|
|
@@ -137,8 +137,8 @@ const Ue = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPS
|
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
position: "left",
|
|
140
|
-
min: ((
|
|
141
|
-
max: ((A =
|
|
140
|
+
min: ((u = n.subIndicator[0]) == null ? void 0 : u.leftYAxisRange) === "cover" ? (e) => e.min : null,
|
|
141
|
+
max: ((A = n.subIndicator[0]) == null ? void 0 : A.leftYAxisRange) === "cover" ? (e) => e.max : null,
|
|
142
142
|
splitNumber: 1,
|
|
143
143
|
axisLine: {
|
|
144
144
|
show: !0
|
|
@@ -153,8 +153,8 @@ const Ue = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPS
|
|
|
153
153
|
},
|
|
154
154
|
{
|
|
155
155
|
position: "right",
|
|
156
|
-
min: ((I =
|
|
157
|
-
max: ((
|
|
156
|
+
min: ((I = n.subIndicator[0]) == null ? void 0 : I.rightYAxisRange) === "cover" ? (e) => e.min : null,
|
|
157
|
+
max: ((D = n.subIndicator[0]) == null ? void 0 : D.rightYAxisRange) === "cover" ? (e) => e.max : null,
|
|
158
158
|
splitNumber: 1,
|
|
159
159
|
axisLine: {
|
|
160
160
|
show: !1
|
|
@@ -167,101 +167,101 @@ const Ue = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPS
|
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
169
|
],
|
|
170
|
-
series:
|
|
170
|
+
series: j
|
|
171
171
|
};
|
|
172
|
-
}, je = (
|
|
173
|
-
let
|
|
174
|
-
for (;
|
|
175
|
-
let I = Math.floor((
|
|
176
|
-
if (
|
|
177
|
-
if (
|
|
172
|
+
}, je = (n, d, l = "strict") => {
|
|
173
|
+
let j = 0, u = n.length - 1, A = -1;
|
|
174
|
+
for (; j <= u; ) {
|
|
175
|
+
let I = Math.floor((j + u) / 2);
|
|
176
|
+
if (l === "strict") {
|
|
177
|
+
if (n[I] === d)
|
|
178
178
|
return I;
|
|
179
|
-
|
|
179
|
+
n[I] < d ? j = I + 1 : u = I - 1;
|
|
180
180
|
} else
|
|
181
|
-
|
|
181
|
+
l === "gte" && (n[I] >= d ? (A = I, u = I - 1) : j = I + 1);
|
|
182
182
|
}
|
|
183
|
-
return
|
|
184
|
-
}, Ie = (
|
|
185
|
-
data: [...
|
|
186
|
-
mainIndicator:
|
|
187
|
-
...
|
|
188
|
-
data: [...
|
|
183
|
+
return l === "strict" ? -1 : A;
|
|
184
|
+
}, Ie = (n, d) => ({
|
|
185
|
+
data: [...n.data, ...d.data.slice(1)],
|
|
186
|
+
mainIndicator: n.mainIndicator.map((l, j) => ({
|
|
187
|
+
...l,
|
|
188
|
+
data: [...l.data, ...d.mainIndicator[j].data.slice(1)]
|
|
189
189
|
})),
|
|
190
|
-
subIndicator:
|
|
191
|
-
...
|
|
192
|
-
data: [...
|
|
190
|
+
subIndicator: n.subIndicator.map((l, j) => ({
|
|
191
|
+
...l,
|
|
192
|
+
data: [...l.data, ...d.subIndicator[j].data.slice(1)]
|
|
193
193
|
})),
|
|
194
|
-
time: [...
|
|
195
|
-
}), Ye = (
|
|
196
|
-
switch (
|
|
194
|
+
time: [...n.time, ...d.time.slice(1)]
|
|
195
|
+
}), Ye = (n, d, l) => {
|
|
196
|
+
switch (l) {
|
|
197
197
|
case "5": {
|
|
198
|
-
let
|
|
198
|
+
let g = [
|
|
199
199
|
...new Set(
|
|
200
|
-
|
|
201
|
-
const
|
|
202
|
-
return `${
|
|
200
|
+
n.slice(-20).map((z) => {
|
|
201
|
+
const t = new Date(z), N = String(t.getHours()).padStart(2, "0"), Y = String(t.getMinutes()).padStart(2, "0"), f = String(t.getSeconds()).padStart(2, "0");
|
|
202
|
+
return `${N}:${Y}:${f}`;
|
|
203
203
|
})
|
|
204
204
|
)
|
|
205
205
|
];
|
|
206
|
-
|
|
207
|
-
const
|
|
208
|
-
if (`${
|
|
209
|
-
return `${
|
|
206
|
+
g.includes("00:00:00") && (g.splice(g.indexOf("00:00:00"), 1), g.push("24:00:00")), g = g.sort((z, t) => (/* @__PURE__ */ new Date(`2000-01-30 ${z}`)).getTime() - (/* @__PURE__ */ new Date(`2000-01-30 ${t}`)).getTime());
|
|
207
|
+
const y = new Date(d), o = y.getFullYear(), s = String(y.getMonth() + 1).padStart(2, "0"), M = String(y.getDate()).padStart(2, "0"), L = String(y.getHours()).padStart(2, "0"), c = String(y.getMinutes()).padStart(2, "0"), i = String(y.getSeconds()).padStart(2, "0");
|
|
208
|
+
if (`${L}:${c}:${i}` == "00:00:00")
|
|
209
|
+
return `${o}-${s}-${M} 01:00:00`;
|
|
210
210
|
{
|
|
211
|
-
let
|
|
212
|
-
for (let
|
|
213
|
-
const
|
|
214
|
-
if (+`${
|
|
215
|
-
|
|
211
|
+
let z = null;
|
|
212
|
+
for (let t = 0; t < g.length; t++) {
|
|
213
|
+
const N = g[t].split(":");
|
|
214
|
+
if (+`${N[0]}${N[1]}${N[2]}` >= +`${L}${c}${i}`) {
|
|
215
|
+
z = g[t];
|
|
216
216
|
break;
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
|
-
if (
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
const
|
|
223
|
-
return `${
|
|
219
|
+
if (z === "24:00:00") {
|
|
220
|
+
const t = new Date(d);
|
|
221
|
+
t.setDate(t.getDate() + 1);
|
|
222
|
+
const N = t.getFullYear(), Y = String(t.getMonth() + 1).padStart(2, "0"), f = String(t.getDate()).padStart(2, "0");
|
|
223
|
+
return `${N}-${Y}-${f} 00:00:00`;
|
|
224
224
|
}
|
|
225
|
-
return `${
|
|
225
|
+
return `${o}-${s}-${M} ${z}`;
|
|
226
226
|
}
|
|
227
227
|
}
|
|
228
228
|
case "6": {
|
|
229
|
-
const
|
|
230
|
-
if (
|
|
231
|
-
const
|
|
232
|
-
return `${
|
|
229
|
+
const g = new Date(d), y = g.getHours();
|
|
230
|
+
if (y >= 4 && y < 21) {
|
|
231
|
+
const o = g.getFullYear(), s = String(g.getMonth() + 1).padStart(2, "0"), M = String(g.getDate()).padStart(2, "0");
|
|
232
|
+
return `${o}-${s}-${M} 09:00:00`;
|
|
233
233
|
} else {
|
|
234
|
-
const
|
|
235
|
-
|
|
236
|
-
const
|
|
237
|
-
return
|
|
234
|
+
const o = new Date(d);
|
|
235
|
+
o.getHours() >= 21 && o.setDate(o.getDate() + 1);
|
|
236
|
+
const s = o.getFullYear(), M = String(o.getMonth() + 1).padStart(2, "0"), L = String(o.getDate()).padStart(2, "0"), c = `${s}-${M}-${L} 09:00:00`, i = je(n, c, "gte");
|
|
237
|
+
return i === -1 ? c : n[i];
|
|
238
238
|
}
|
|
239
239
|
}
|
|
240
240
|
case "7": {
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
const
|
|
246
|
-
|
|
247
|
-
const
|
|
248
|
-
return `${
|
|
241
|
+
const g = new Date(d), y = new Date(g);
|
|
242
|
+
y.setDate(g.getDate() - g.getDay()), y.setHours(0, 0, 0, 0);
|
|
243
|
+
const o = new Date(y);
|
|
244
|
+
o.setDate(y.getDate() + 5), o.setHours(23, 59, 59, 0);
|
|
245
|
+
const s = new Date(y);
|
|
246
|
+
s.setDate(y.getDate() + 12), s.setHours(9, 0, 0, 0);
|
|
247
|
+
const M = g <= o ? o : s, L = M.getFullYear(), c = String(M.getMonth() + 1).padStart(2, "0"), i = String(M.getDate()).padStart(2, "0");
|
|
248
|
+
return `${L}-${c}-${i} 09:00:00`;
|
|
249
249
|
}
|
|
250
250
|
case "8": {
|
|
251
|
-
const
|
|
252
|
-
|
|
253
|
-
const
|
|
254
|
-
return `${
|
|
251
|
+
const g = new Date(d), y = new Date(g.getFullYear(), g.getMonth() + 1, 1), o = new Date(y);
|
|
252
|
+
o.setDate(y.getDate() - 1), o.setHours(9, 0, 0, 0);
|
|
253
|
+
const s = o.getFullYear(), M = String(o.getMonth() + 1).padStart(2, "0"), L = String(o.getDate()).padStart(2, "0");
|
|
254
|
+
return `${s}-${M}-${L} 09:00:00`;
|
|
255
255
|
}
|
|
256
256
|
}
|
|
257
|
-
const
|
|
258
|
-
let
|
|
259
|
-
const
|
|
260
|
-
e %
|
|
261
|
-
const
|
|
262
|
-
return `${
|
|
257
|
+
const j = new Date(d), u = j.getFullYear(), A = j.getMonth(), I = j.getDate(), D = j.getHours(), e = j.getMinutes(), E = j.getSeconds(), v = (g) => {
|
|
258
|
+
let y = null;
|
|
259
|
+
const o = Math.floor(e / g);
|
|
260
|
+
e % g === 0 && E === 0 ? y = e : y = (o + 1) * g;
|
|
261
|
+
const s = Math.floor(y / 60), M = D + s, L = y % 60, c = new Date(u, A, I, M, L, 0), i = (S) => String(S).padStart(2, "0"), z = c.getFullYear(), t = i(c.getMonth() + 1), N = i(c.getDate()), Y = i(c.getHours()), f = i(c.getMinutes());
|
|
262
|
+
return `${z}-${t}-${N} ${Y}:${f}:00`;
|
|
263
263
|
};
|
|
264
|
-
switch (
|
|
264
|
+
switch (l) {
|
|
265
265
|
case "1":
|
|
266
266
|
return v(1);
|
|
267
267
|
case "2":
|
|
@@ -271,61 +271,61 @@ const Ue = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPS
|
|
|
271
271
|
case "4":
|
|
272
272
|
return v(30);
|
|
273
273
|
default:
|
|
274
|
-
throw new Error(`Unsupported cycle: ${d} ${
|
|
274
|
+
throw new Error(`Unsupported cycle: ${d} ${l}`);
|
|
275
275
|
}
|
|
276
|
-
}, re = (
|
|
277
|
-
let
|
|
276
|
+
}, re = (n, d, l) => {
|
|
277
|
+
let j = null, u = null;
|
|
278
278
|
const [A, I] = d;
|
|
279
|
-
switch (
|
|
279
|
+
switch (l) {
|
|
280
280
|
case "6": {
|
|
281
|
-
|
|
281
|
+
j = n.find((D) => new Date(p(D).format("YYYY-MM-DD 23:59:59")).getTime() >= new Date(A).getTime()), u = n.findLast((D) => new Date(p(D).format("YYYY-MM-DD 00:00:00")).getTime() <= new Date(I).getTime());
|
|
282
282
|
break;
|
|
283
283
|
}
|
|
284
284
|
case "7": {
|
|
285
|
-
const
|
|
286
|
-
|
|
285
|
+
const D = p(I).endOf("week").add(1, "day").format("YYYY-MM-DD 23:59:59");
|
|
286
|
+
j = n.find((e) => p(e).endOf("week").add(1, "day").format("YYYY-MM-DD") === p(A).endOf("week").add(1, "day").format("YYYY-MM-DD")), u = n.findLast((e) => new Date(e).getTime() <= new Date(D).getTime());
|
|
287
287
|
break;
|
|
288
288
|
}
|
|
289
289
|
case "8": {
|
|
290
|
-
|
|
290
|
+
j = n.find((D) => p(D).format("YYYY-MM") === p(A).format("YYYY-MM")), u = n.findLast((D) => p(D).format("YYYY-MM") === p(I).format("YYYY-MM"));
|
|
291
291
|
break;
|
|
292
292
|
}
|
|
293
293
|
default:
|
|
294
|
-
|
|
294
|
+
j = n.find((D) => new Date(D).getTime() >= new Date(A).getTime()), u = n.findLast((D) => new Date(D).getTime() <= new Date(I).getTime());
|
|
295
295
|
}
|
|
296
|
-
return [
|
|
297
|
-
}, Ge = (
|
|
296
|
+
return [j, u];
|
|
297
|
+
}, Ge = (n) => {
|
|
298
298
|
const d = [];
|
|
299
|
-
return
|
|
300
|
-
const
|
|
301
|
-
return I ? (
|
|
299
|
+
return n.reduce((l, j) => {
|
|
300
|
+
const u = `${j.coord[0]}+${j.label.position}`, A = j.label.position === "top" ? -16 : 16, I = l.get(u);
|
|
301
|
+
return I ? (l.set(u, I + 1), j.symbolOffset[1] = A * (I + 1)) : (l.set(u, 1), j.symbolOffset[1] = j.label.position === "top" ? -7 : 7), d.push(j), l;
|
|
302
302
|
}, /* @__PURE__ */ new Map()), d;
|
|
303
|
-
}, Ze = (
|
|
304
|
-
const A = (
|
|
305
|
-
const { direction:
|
|
306
|
-
switch (
|
|
303
|
+
}, Ze = (n, d, l, j, u) => {
|
|
304
|
+
const A = (y, o) => {
|
|
305
|
+
const { direction: s = "", tradeAction: M = "", tradeType: L = "" } = y, c = L ?? s + M;
|
|
306
|
+
switch (o) {
|
|
307
307
|
case 0:
|
|
308
308
|
return (/* @__PURE__ */ new Map([
|
|
309
309
|
["开多", "买"],
|
|
310
310
|
["平多", "卖"],
|
|
311
311
|
["开空", "卖"],
|
|
312
312
|
["平空", "买"]
|
|
313
|
-
])).get(
|
|
313
|
+
])).get(c);
|
|
314
314
|
case 1:
|
|
315
|
-
return
|
|
315
|
+
return L ?? s + M;
|
|
316
316
|
}
|
|
317
|
-
}, I = (
|
|
317
|
+
}, I = (y, o, s, M) => y.reduce((L, c) => {
|
|
318
318
|
var S;
|
|
319
|
-
const
|
|
320
|
-
let
|
|
321
|
-
|
|
322
|
-
const
|
|
323
|
-
return
|
|
319
|
+
const i = A(c, 0), z = y.filter((U) => U.klineTime === c.klineTime), t = [...new Set(z.map((U) => A(U, 0)))];
|
|
320
|
+
let N = null;
|
|
321
|
+
t.length > 1 ? N = "image://" + new URL("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjgzNzAzMjI4MjAyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjMwNzgiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTE5OC4wMTYgMTA5LjczODY2N0E3Ny44NjY2NjcgNzcuODY2NjY3IDAgMCAwIDE3MC42NjY2NjcgMTY3LjY4bDAuNTEyIDQxOC45NDRjMCAyMi44NjkzMzMgNi40IDQ4IDE5LjAyOTMzMyA3NS4zMDY2NjcgMTIuNjcyIDI3LjIyMTMzMyAyNy45ODkzMzMgNDguOTM4NjY3IDQ1Ljk1MiA2NC45Mzg2NjZsMjExLjE1NzMzMyAxODguMjAyNjY3YzE3LjA2NjY2NyAxNS40ODggNDAuNTc2IDIzLjk3ODY2NyA2NC45Mzg2NjcgMjMuNTk0NjY3IDI1LjY4NTMzMy0wLjA4NTMzMyA0Ny4zNi03LjkzNiA2NC45ODEzMzMtMjMuNTk0NjY3bDIxMS4yLTE4OC4yMDI2NjdjMTcuOTItMTYgMzMuMTk0NjY3LTM3LjYzMiA0NS44NjY2NjctNjQuOTM4NjY2IDEyLjY3Mi0yNy4zMDY2NjcgMTguNzczMzMzLTUyLjIyNCAxOC41MTczMzMtNzQuOTIyNjY3TDg1My4zMzMzMzMgMTY3LjI1MzMzM2MwLTIyLjI3Mi04Ljk2LTQxLjQ3Mi0yNi44MzczMzMtNTcuNDcyLTE3LjU3ODY2Ny0xNS42MTYtMzkuMzM4NjY3LTIzLjg5MzMzMy02NC45Mzg2NjctMjQuNDA1MzMzbC00OTkuMDI5MzMzIDAuNDY5MzMzYTkzLjMxMiA5My4zMTIgMCAwIDAtNjQuNTEyIDIzLjg5MzMzNHoiIGZpbGw9IiNDODgwRkYiIHAtaWQ9IjMwNzkiPjwvcGF0aD48cGF0aCBkPSJNMTcwLjY2NjY2NyAxNjcuNjhjMC4xMjgtMjEuNzYgOS45NDEzMzMtNDIuNjY2NjY3IDI3LjM0OTMzMy01Ny45NDEzMzNhOTMuMzEyIDkzLjMxMiAwIDAgMSA2NC41MTItMjMuODkzMzM0TDc2MS41NTczMzMgODUuMzMzMzMzYzI1LjYgMC41NTQ2NjcgNDcuMzYgOC43ODkzMzMgNjQuOTM4NjY3IDI0LjQwNTMzNCAxNy45MiAxNiAyNi44MzczMzMgMzUuMiAyNi44MzczMzMgNTcuNDcybC0wLjUxMiA0MTkuODRjMC4yOTg2NjcgMjIuNjU2LTUuODQ1MzMzIDQ3LjYxNi0xOC41MTczMzMgNzQuODgtMTIuNjcyIDI3LjMwNjY2Ny0yNy45NDY2NjcgNDguOTM4NjY3LTQ1Ljg2NjY2NyA2NC45Mzg2NjZsLTIxMS4yIDE4OC4yMDI2NjdjLTE3LjYyMTMzMyAxNS42NTg2NjctMzkuMjUzMzMzIDIzLjUwOTMzMy02NC45ODEzMzMgMjMuNTk0NjY3YTk0LjcyIDk0LjcyIDAgMCAxLTY0LjkzODY2Ny0yMy41OTQ2NjdsLTIxMS4yLTE4OC4yMDI2NjdjLTE3LjkyLTE2LTMzLjIzNzMzMy0zNy43MTczMzMtNDUuOTA5MzMzLTY0LjkzODY2Ni0xMi42MjkzMzMtMjcuMzA2NjY3LTE5LjAyOTMzMy01Mi40MzczMzMtMTkuMDI5MzMzLTc1LjMwNjY2N0wxNzAuNjY2NjY3IDE2Ny42OHogbTQyLjYyNCAwLjI1NmwwLjU1NDY2NiA0MTguNjg4YzAgMTYuMTcwNjY3IDQuODY0IDM1LjMyOCAxNS4wNjEzMzQgNTcuMzQ0IDEwLjM2OCAyMi4yNzIgMjIuMzE0NjY3IDM5LjE2OCAzNS42MjY2NjYgNTEuMDI5MzMzbDIxMS40MTMzMzQgMTg4LjQxNmM4Ljk2IDguMTA2NjY3IDIxLjg4OCAxMi44IDM2LjIyNCAxMi41ODY2NjcgMTUuNTMwNjY3LTAuMDQyNjY3IDI3LjA5MzMzMy00LjI2NjY2NyAzNi42OTMzMzMtMTIuOGwyMTEuMTE0NjY3LTE4OC4xNmMxMy4zNTQ2NjctMTEuOTQ2NjY3IDI1LjMwMTMzMy0yOC44NDI2NjcgMzUuNjI2NjY2LTUxLjA3MiAxMC4xMTItMjEuNzYgMTQuNzYyNjY3LTQwLjUzMzMzMyAxNC41MDY2NjctNTcuMDAyNjY3TDgxMC42NjY2NjcgMTY3LjIxMDY2N2MwLTkuODk4NjY3LTMuNTg0LTE3LjYyMTMzMy0xMi41MDEzMzQtMjUuNkE1NC42OTg2NjcgNTQuNjk4NjY3IDAgMCAwIDc2MS42IDEyOGwtNDk5LjYyNjY2NyAwLjQ2OTMzM2E1MS4zMjggNTEuMzI4IDAgMCAwLTM1Ljc1NDY2NiAxMy4yNjkzMzQgMzYuNTY1MzMzIDM2LjU2NTMzMyAwIDAgMC0xMi41MDEzMzQgMjEuNTA0bC0wLjQyNjY2NiA0LjY5MzMzM3oiIGZpbGw9IiNBRTQ0RkYiIHAtaWQ9IjMwODAiPjwvcGF0aD48cGF0aCBkPSJNNDc1LjMwNjY2NyA2NTguMjE4NjY3aDczLjQ3MlYzMDYuMzg5MzMzaDExNi40OFYyNDguNDQ4aC0zMDcuNjI2NjY3djU3Ljk0MTMzM2gxMTcuNjc0NjY3eiIgZmlsbD0iI0ZGRkZGRiIgcC1pZD0iMzA4MSI+PC9wYXRoPjwvc3ZnPg==", self.location).href : N = "image://" + new URL((/* @__PURE__ */ Object.assign({ "./images/buy.svg": Ue, "./images/sell.svg": Pe, "./images/t.svg": Re }))[`./images/${i === "买" ? "buy" : "sell"}.svg`], self.location).href;
|
|
322
|
+
const Y = je(s, c.klineTime), f = (S = M[Y]) == null ? void 0 : S[3];
|
|
323
|
+
return o.forEach((U) => {
|
|
324
324
|
var Z;
|
|
325
|
-
const K =
|
|
326
|
-
U.range[K] ===
|
|
327
|
-
}),
|
|
328
|
-
symbol:
|
|
325
|
+
const K = i === "买" ? 0 : 1;
|
|
326
|
+
U.range[K] === c.klineTime && (U.rangeValue[K] = (Z = M[Y]) == null ? void 0 : Z[i === "买" ? 2 : 3]);
|
|
327
|
+
}), L.push({
|
|
328
|
+
symbol: N,
|
|
329
329
|
symbolSize: 25,
|
|
330
330
|
symbolRotate: 0,
|
|
331
331
|
symbolOffset: [0, 0],
|
|
@@ -333,106 +333,106 @@ const Ue = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPS
|
|
|
333
333
|
show: !1,
|
|
334
334
|
position: "top"
|
|
335
335
|
},
|
|
336
|
-
coord: [
|
|
336
|
+
coord: [c.klineTime, f],
|
|
337
337
|
silent: !0,
|
|
338
338
|
animation: !1,
|
|
339
339
|
customData: {
|
|
340
|
-
tradeType:
|
|
341
|
-
amount:
|
|
340
|
+
tradeType: i,
|
|
341
|
+
amount: c.amount,
|
|
342
342
|
// 手数
|
|
343
|
-
part:
|
|
343
|
+
part: c.part,
|
|
344
344
|
// 份数
|
|
345
|
-
profitAndLoss:
|
|
345
|
+
profitAndLoss: c.profitAndLoss,
|
|
346
346
|
// 盈亏
|
|
347
|
-
openPriceAll:
|
|
347
|
+
openPriceAll: c.openPriceAll,
|
|
348
348
|
// 开仓价
|
|
349
|
-
closePriceAll:
|
|
349
|
+
closePriceAll: c.closePriceAll
|
|
350
350
|
// 收仓价
|
|
351
351
|
}
|
|
352
|
-
}),
|
|
353
|
-
}, []),
|
|
354
|
-
var
|
|
355
|
-
const
|
|
356
|
-
return
|
|
357
|
-
(
|
|
358
|
-
}),
|
|
352
|
+
}), L;
|
|
353
|
+
}, []), D = (y, o, s, M) => y.reduce((L, c, i) => {
|
|
354
|
+
var f, S;
|
|
355
|
+
const z = A(c, 1), t = ["开多", "开空"].includes(z) ? "top" : "bottom", N = je(s, c.klineTime), Y = t === "top" ? (f = M[N]) == null ? void 0 : f[3] : (S = M[N]) == null ? void 0 : S[2];
|
|
356
|
+
return o.forEach((U) => {
|
|
357
|
+
(t === "top" ? U.range[0] : U.range[1]) === c.klineTime && (U.rangeValue[t === "top" ? 0 : 1] = Y);
|
|
358
|
+
}), L.push({
|
|
359
359
|
symbol: "triangle",
|
|
360
360
|
symbolSize: [10, 12],
|
|
361
|
-
symbolRotate:
|
|
361
|
+
symbolRotate: t === "top" ? 180 : 0,
|
|
362
362
|
symbolOffset: [0, 0],
|
|
363
363
|
label: {
|
|
364
364
|
show: !0,
|
|
365
|
-
position:
|
|
365
|
+
position: t,
|
|
366
366
|
color: "#fff",
|
|
367
|
-
formatter: `${
|
|
367
|
+
formatter: `${z} ${t === "top" ? "+" : "-"} ${c.amount}手 ${c.part ? `(${c.part}份)` : ""}`
|
|
368
368
|
},
|
|
369
|
-
itemStyle: { color:
|
|
370
|
-
coord: [
|
|
369
|
+
itemStyle: { color: t === "top" ? "#FF0000" : "#389e0d" },
|
|
370
|
+
coord: [c.klineTime, Y],
|
|
371
371
|
silent: !0,
|
|
372
372
|
animation: !1,
|
|
373
373
|
customData: {
|
|
374
|
-
tradeType:
|
|
375
|
-
amount:
|
|
374
|
+
tradeType: z,
|
|
375
|
+
amount: c.amount,
|
|
376
376
|
// 手数
|
|
377
|
-
part:
|
|
377
|
+
part: c.part,
|
|
378
378
|
// 份数
|
|
379
|
-
profitAndLoss:
|
|
379
|
+
profitAndLoss: c.profitAndLoss,
|
|
380
380
|
// 盈亏
|
|
381
|
-
openPriceAll:
|
|
381
|
+
openPriceAll: c.openPriceAll,
|
|
382
382
|
// 开仓价
|
|
383
|
-
closePriceAll:
|
|
383
|
+
closePriceAll: c.closePriceAll
|
|
384
384
|
// 收仓价
|
|
385
385
|
}
|
|
386
|
-
}),
|
|
387
|
-
}, []), e = (
|
|
388
|
-
const { basePointData:
|
|
389
|
-
(
|
|
390
|
-
const
|
|
391
|
-
pointTime:
|
|
386
|
+
}), L;
|
|
387
|
+
}, []), e = (y, o, s) => {
|
|
388
|
+
const { basePointData: M, baseLineData: L } = y.reduce(
|
|
389
|
+
(t, N) => {
|
|
390
|
+
const Y = {
|
|
391
|
+
pointTime: N.openTime,
|
|
392
392
|
// 交易点位的真实时间
|
|
393
|
-
klineTime: Ye(
|
|
393
|
+
klineTime: Ye(s, N.openTime, o),
|
|
394
394
|
// 交易点位的K线时间
|
|
395
395
|
tradeAction: "开",
|
|
396
396
|
// 交易行为
|
|
397
|
-
tradeDirection:
|
|
397
|
+
tradeDirection: N.tradeDirection ? "空" : "多",
|
|
398
398
|
// 交易方向 1:空, 0:多
|
|
399
|
-
tradeType: `开${
|
|
399
|
+
tradeType: `开${N.tradeDirection ? "空" : "多"}`,
|
|
400
400
|
part: null,
|
|
401
401
|
// 份数,
|
|
402
|
-
amount:
|
|
402
|
+
amount: N.tradeVolume,
|
|
403
403
|
// 手数
|
|
404
|
-
profitAndLoss:
|
|
404
|
+
profitAndLoss: N.profitAndLoss,
|
|
405
405
|
// 盈亏
|
|
406
|
-
openPriceAll:
|
|
406
|
+
openPriceAll: N.openPrice * N.tradeVolume,
|
|
407
407
|
// 开仓价格
|
|
408
|
-
closePriceAll:
|
|
408
|
+
closePriceAll: N.closePrice * N.tradeVolume
|
|
409
409
|
// 平仓价格
|
|
410
|
-
},
|
|
411
|
-
pointTime:
|
|
410
|
+
}, f = {
|
|
411
|
+
pointTime: N.closeTime,
|
|
412
412
|
// 交易点位的真实时间
|
|
413
|
-
klineTime: Ye(
|
|
413
|
+
klineTime: Ye(s, N.closeTime, o),
|
|
414
414
|
// 交易点位的K线时间
|
|
415
415
|
tradeAction: "平",
|
|
416
416
|
// 交易行为
|
|
417
|
-
tradeDirection:
|
|
417
|
+
tradeDirection: N.tradeDirection ? "空" : "多",
|
|
418
418
|
// 交易方向 1:空, 0:多
|
|
419
|
-
tradeType: `平${
|
|
419
|
+
tradeType: `平${N.tradeDirection ? "空" : "多"}`,
|
|
420
420
|
part: null,
|
|
421
421
|
// 份数,
|
|
422
|
-
amount:
|
|
422
|
+
amount: N.tradeVolume,
|
|
423
423
|
// 手数
|
|
424
|
-
profitAndLoss:
|
|
424
|
+
profitAndLoss: N.profitAndLoss,
|
|
425
425
|
// 盈亏
|
|
426
|
-
openPriceAll:
|
|
426
|
+
openPriceAll: N.openPrice * N.tradeVolume,
|
|
427
427
|
// 开仓价格
|
|
428
|
-
closePriceAll:
|
|
428
|
+
closePriceAll: N.closePrice * N.tradeVolume
|
|
429
429
|
// 平仓价格
|
|
430
430
|
};
|
|
431
|
-
return
|
|
432
|
-
range: [
|
|
431
|
+
return t.basePointData.push(Y, f), t.baseLineData.push({
|
|
432
|
+
range: [Y.klineTime, f.klineTime],
|
|
433
433
|
rangeValue: [null, null],
|
|
434
|
-
color:
|
|
435
|
-
}),
|
|
434
|
+
color: f.profitAndLoss > 0 ? "#FF0000" : "#389e0d"
|
|
435
|
+
}), t;
|
|
436
436
|
},
|
|
437
437
|
{
|
|
438
438
|
basePointData: [],
|
|
@@ -440,47 +440,47 @@ const Ue = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPS
|
|
|
440
440
|
baseLineData: []
|
|
441
441
|
// 连线数据
|
|
442
442
|
}
|
|
443
|
-
),
|
|
444
|
-
const
|
|
445
|
-
if (
|
|
446
|
-
const S =
|
|
447
|
-
|
|
443
|
+
), i = [...M.reduce((t, N) => {
|
|
444
|
+
const Y = JSON.parse(JSON.stringify(N)), f = Y.klineTime + Y.tradeType;
|
|
445
|
+
if (t.has(f)) {
|
|
446
|
+
const S = t.get(f);
|
|
447
|
+
Y.amount += S.amount, Y.part += S.part, Y.profitAndLoss += S.profitAndLoss, Y.openPriceAll += S.openPriceAll, Y.closePriceAll += S.closePriceAll;
|
|
448
448
|
}
|
|
449
|
-
return
|
|
450
|
-
}, /* @__PURE__ */ new Map([])).values()].sort((
|
|
451
|
-
return { pointData:
|
|
452
|
-
}, { pointData:
|
|
449
|
+
return t.set(f, Y), t;
|
|
450
|
+
}, /* @__PURE__ */ new Map([])).values()].sort((t, N) => new Date(t.klineTime) - new Date(N.klineTime)), z = L.filter(({ range: t }) => t[0] !== t[1]);
|
|
451
|
+
return { pointData: i, lineData: z };
|
|
452
|
+
}, { pointData: E, lineData: v } = e(n, d, j);
|
|
453
453
|
return {
|
|
454
|
-
tradePointData: (
|
|
455
|
-
tradeLineData: v.map(({ range:
|
|
454
|
+
tradePointData: (l === 0 ? I : D)(E, v, j, u),
|
|
455
|
+
tradeLineData: v.map(({ range: y, rangeValue: o, color: s }) => [
|
|
456
456
|
{
|
|
457
457
|
symbol: "none",
|
|
458
|
-
coord: [
|
|
459
|
-
lineStyle: { color:
|
|
458
|
+
coord: [y[0], o[0]],
|
|
459
|
+
lineStyle: { color: s, width: 2, type: "solid" },
|
|
460
460
|
silent: !0,
|
|
461
461
|
animation: !1
|
|
462
462
|
},
|
|
463
463
|
{
|
|
464
464
|
symbol: "none",
|
|
465
|
-
coord: [
|
|
465
|
+
coord: [y[1], o[1]],
|
|
466
466
|
silent: !0,
|
|
467
467
|
animation: !1
|
|
468
468
|
}
|
|
469
469
|
])
|
|
470
470
|
};
|
|
471
|
-
}, Be = (
|
|
472
|
-
let
|
|
471
|
+
}, Be = (n, d) => {
|
|
472
|
+
let l = [];
|
|
473
473
|
if (Number(d) <= 5)
|
|
474
|
-
|
|
474
|
+
l = n.map(({ tradeDate: j, netPositionValue: u }) => [p(j).format("YYYY-MM-DD HH:mm:ss"), u]);
|
|
475
475
|
else if (Number(d) === 6) {
|
|
476
|
-
const
|
|
477
|
-
const { tradeDate: I, netPositionValue:
|
|
478
|
-
return
|
|
476
|
+
const j = n.reduce((u, A) => {
|
|
477
|
+
const { tradeDate: I, netPositionValue: D } = A;
|
|
478
|
+
return u.set(p(I).format("YYYY-MM-DD 09:00:00"), D), u;
|
|
479
479
|
}, /* @__PURE__ */ new Map());
|
|
480
|
-
|
|
480
|
+
l = Array.from(j, ([u, A]) => [u, A]);
|
|
481
481
|
} else
|
|
482
|
-
|
|
483
|
-
return { netPositionLineData:
|
|
482
|
+
l = [];
|
|
483
|
+
return { netPositionLineData: l };
|
|
484
484
|
};
|
|
485
485
|
const He = { class: "tips" }, $e = {
|
|
486
486
|
__name: "Tips",
|
|
@@ -490,19 +490,21 @@ const He = { class: "tips" }, $e = {
|
|
|
490
490
|
default: () => []
|
|
491
491
|
}
|
|
492
492
|
},
|
|
493
|
-
setup(
|
|
494
|
-
return (d,
|
|
495
|
-
(R(!0), _(Le, null, Ae(
|
|
496
|
-
key:
|
|
493
|
+
setup(n) {
|
|
494
|
+
return (d, l) => (R(), _("div", He, [
|
|
495
|
+
(R(!0), _(Le, null, Ae(n.data, (j, u) => (R(), _("span", {
|
|
496
|
+
key: u,
|
|
497
497
|
class: "item",
|
|
498
|
-
style: he({ color:
|
|
499
|
-
}, te(
|
|
498
|
+
style: he({ color: j.color })
|
|
499
|
+
}, te(j.label) + " " + te(j.value), 5))), 128))
|
|
500
500
|
]));
|
|
501
501
|
}
|
|
502
502
|
}, le = /* @__PURE__ */ ze($e, [["__scopeId", "data-v-df1caefe"]]);
|
|
503
503
|
const We = {
|
|
504
504
|
__name: "SliderChart",
|
|
505
505
|
props: {
|
|
506
|
+
// K线当屏时间范围
|
|
507
|
+
screenTimeRange: { type: Array, required: !0 },
|
|
506
508
|
// 品种代码
|
|
507
509
|
varietyCode: { type: String, required: !0 },
|
|
508
510
|
// 品种市场类型: 0-期货, 1-股票, 2-期权
|
|
@@ -513,55 +515,57 @@ const We = {
|
|
|
513
515
|
klineType: { type: Number, required: !0 }
|
|
514
516
|
},
|
|
515
517
|
emits: ["change"],
|
|
516
|
-
setup(
|
|
517
|
-
const { request:
|
|
518
|
-
let
|
|
519
|
-
const A = P(null), I =
|
|
518
|
+
setup(n, { expose: d, emit: l }) {
|
|
519
|
+
const { request: j } = me("stConfig");
|
|
520
|
+
let u = null;
|
|
521
|
+
const A = P(null), I = l, D = n, e = P({
|
|
520
522
|
data: [],
|
|
521
523
|
// <[开 收 低 高 成交额 涨跌值 涨跌百分比]>
|
|
522
524
|
mainIndicator: [],
|
|
523
525
|
subIndicator: [],
|
|
524
526
|
time: []
|
|
525
|
-
}),
|
|
526
|
-
const
|
|
527
|
-
varietyCode:
|
|
527
|
+
}), E = async () => {
|
|
528
|
+
const o = {
|
|
529
|
+
varietyCode: D.varietyCode,
|
|
528
530
|
cycle: "6",
|
|
529
531
|
startTime: "1999-01-01 00:00:00",
|
|
530
532
|
endTime: p().format("YYYY-MM-DD 23:59:59"),
|
|
531
533
|
deleteFirstNumber: 1
|
|
532
534
|
// 后端要求标识
|
|
533
535
|
};
|
|
534
|
-
switch (
|
|
536
|
+
switch (D.varietyStock) {
|
|
535
537
|
case 0: {
|
|
536
|
-
Object.assign(
|
|
537
|
-
contractType:
|
|
538
|
+
Object.assign(o, {
|
|
539
|
+
contractType: D.klineType
|
|
538
540
|
});
|
|
539
541
|
break;
|
|
540
542
|
}
|
|
541
543
|
case 1: {
|
|
542
|
-
Object.assign(
|
|
543
|
-
right:
|
|
544
|
+
Object.assign(o, {
|
|
545
|
+
right: D.rightType
|
|
544
546
|
});
|
|
545
547
|
break;
|
|
546
548
|
}
|
|
547
549
|
}
|
|
548
|
-
const { body:
|
|
549
|
-
|
|
550
|
-
}, v = Me((
|
|
551
|
-
if (!
|
|
550
|
+
const { body: s } = await j.post("/middleLayer/kline/getKline", o);
|
|
551
|
+
s ? e.value = s : e.value = { data: [], mainIndicator: [], subIndicator: [], time: [] }, y("init");
|
|
552
|
+
}, v = Me((o) => {
|
|
553
|
+
if (!o.dataZoomId)
|
|
552
554
|
return;
|
|
553
|
-
const
|
|
554
|
-
if (
|
|
555
|
-
const { startValue:
|
|
556
|
-
console.log(`检测到拖拽轴被拖动, 时间区间: ${
|
|
555
|
+
const s = u.getOption();
|
|
556
|
+
if (s != null && s.dataZoom[0]) {
|
|
557
|
+
const { startValue: M, endValue: L } = u.getOption().dataZoom[0], { time: c } = e.value, i = `${c[M].split(" ")[0]} 00:00:00`, z = `${c[L].split(" ")[0]} 23:59:59`;
|
|
558
|
+
console.log(`检测到拖拽轴被拖动, 时间区间: ${i} - ${z}`), I("change", { startTime: i, endTime: z });
|
|
557
559
|
}
|
|
558
|
-
}, 200),
|
|
559
|
-
|
|
560
|
+
}, 200), g = Me(({ startTime: o, endTime: s }) => {
|
|
561
|
+
y("reset", { startTime: o, endTime: s });
|
|
562
|
+
}, 100), y = (o, s) => {
|
|
563
|
+
switch (o) {
|
|
560
564
|
case "init": {
|
|
561
|
-
const { data:
|
|
562
|
-
(
|
|
565
|
+
const { data: M, time: L } = e.value, { xAxisData: c, lineData: i } = M.reduce(
|
|
566
|
+
(t, N, Y) => (t.xAxisData.push(L[Y].split(" ")[0]), t.lineData.push(N[1]), t),
|
|
563
567
|
{ xAxisData: [], lineData: [] }
|
|
564
|
-
),
|
|
568
|
+
), z = {
|
|
565
569
|
grid: {
|
|
566
570
|
height: 0,
|
|
567
571
|
left: "100px",
|
|
@@ -569,7 +573,7 @@ const We = {
|
|
|
569
573
|
},
|
|
570
574
|
xAxis: {
|
|
571
575
|
type: "category",
|
|
572
|
-
data:
|
|
576
|
+
data: c,
|
|
573
577
|
show: !1
|
|
574
578
|
},
|
|
575
579
|
yAxis: {
|
|
@@ -592,27 +596,30 @@ const We = {
|
|
|
592
596
|
],
|
|
593
597
|
series: [
|
|
594
598
|
{
|
|
595
|
-
data:
|
|
599
|
+
data: i,
|
|
596
600
|
type: "line"
|
|
597
601
|
}
|
|
598
602
|
]
|
|
599
603
|
};
|
|
600
|
-
|
|
604
|
+
if (u.setOption(z, !0), D.screenTimeRange.length) {
|
|
605
|
+
const [t, N] = D.screenTimeRange;
|
|
606
|
+
g({ startTime: t, endTime: N });
|
|
607
|
+
}
|
|
601
608
|
break;
|
|
602
609
|
}
|
|
603
610
|
case "reset": {
|
|
604
|
-
const { time:
|
|
605
|
-
let
|
|
606
|
-
for (let
|
|
607
|
-
const
|
|
608
|
-
if (
|
|
611
|
+
const { time: M } = e.value, L = p(s.startTime).format("YYYY-MM-DD"), c = p(s.endTime).format("YYYY-MM-DD");
|
|
612
|
+
let i = -1, z = -1;
|
|
613
|
+
for (let t = 0; t < M.length; t++) {
|
|
614
|
+
const N = p(M[t]).format("YYYY-MM-DD");
|
|
615
|
+
if (i !== -1 && z !== -1)
|
|
609
616
|
break;
|
|
610
|
-
|
|
617
|
+
i === -1 && (new Date(N) === new Date(L) ? i = t : new Date(N) > new Date(L) && (i = t - 1)), z === -1 && (new Date(N) === new Date(c) ? z = t : new Date(N) > new Date(c) && (z = t - 1));
|
|
611
618
|
}
|
|
612
|
-
|
|
619
|
+
z === -1 && (z = M.length - 1), u.dispatchAction({
|
|
613
620
|
type: "dataZoom",
|
|
614
|
-
startValue:
|
|
615
|
-
endValue:
|
|
621
|
+
startValue: i,
|
|
622
|
+
endValue: z
|
|
616
623
|
});
|
|
617
624
|
break;
|
|
618
625
|
}
|
|
@@ -620,23 +627,26 @@ const We = {
|
|
|
620
627
|
};
|
|
621
628
|
return xe(() => {
|
|
622
629
|
Ee(() => {
|
|
623
|
-
|
|
630
|
+
u = ce.init(A.value), u.on("datazoom", v), E();
|
|
624
631
|
});
|
|
625
|
-
}),
|
|
626
|
-
|
|
632
|
+
}), Ne(
|
|
633
|
+
() => D.screenTimeRange,
|
|
634
|
+
(o) => {
|
|
635
|
+
const [s, M] = o;
|
|
636
|
+
g({ startTime: s, endTime: M });
|
|
637
|
+
},
|
|
638
|
+
{ deep: !0 }
|
|
639
|
+
), we(() => {
|
|
640
|
+
u.off("datazoom"), u.dispose();
|
|
627
641
|
}), d({
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
resize: Me(() => z.resize(), 100),
|
|
631
|
-
// 重置拖拽轴的定位
|
|
632
|
-
reset: Me(({ startTime: c, endTime: N }) => D("reset", { startTime: c, endTime: N }), 100)
|
|
633
|
-
}), (c, N) => (R(), _("div", {
|
|
642
|
+
resize: Me(() => u.resize(), 100)
|
|
643
|
+
}), (o, s) => (R(), _("div", {
|
|
634
644
|
class: "chart",
|
|
635
645
|
ref_key: "sliderChartRef",
|
|
636
646
|
ref: A
|
|
637
647
|
}, null, 512));
|
|
638
648
|
}
|
|
639
|
-
}, Je = /* @__PURE__ */ ze(We, [["__scopeId", "data-v-
|
|
649
|
+
}, Je = /* @__PURE__ */ ze(We, [["__scopeId", "data-v-503077bd"]]);
|
|
640
650
|
const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
641
651
|
key: 0,
|
|
642
652
|
class: "screen-time-range"
|
|
@@ -674,17 +684,17 @@ const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
|
674
684
|
// 功能: 同步刷选范围(非必填)
|
|
675
685
|
syncBrushRange: { type: Object, default: () => ({ cycleList: [], startTime: null, endTime: null }) }
|
|
676
686
|
},
|
|
677
|
-
setup(
|
|
678
|
-
const { round:
|
|
679
|
-
let
|
|
680
|
-
const
|
|
687
|
+
setup(n, { expose: d }) {
|
|
688
|
+
const { round: l, formatValue: j } = pe, { request: u } = me("stConfig"), A = P(), I = P(!1), D = P(!1), e = n;
|
|
689
|
+
let E = !1, v = !1, g = !1, y = !1, o = null, s = null, M = null;
|
|
690
|
+
const L = P(null), c = P(null), i = P({
|
|
681
691
|
data: [],
|
|
682
692
|
mainIndicator: [],
|
|
683
693
|
subIndicator: [],
|
|
684
694
|
time: []
|
|
685
|
-
}),
|
|
686
|
-
const
|
|
687
|
-
if (!
|
|
695
|
+
}), z = P(0), t = P([]), N = P(null), Y = P("VOL"), f = se(() => {
|
|
696
|
+
const a = i.value.data[z.value];
|
|
697
|
+
if (!a)
|
|
688
698
|
return [
|
|
689
699
|
{ label: "开", value: "-" },
|
|
690
700
|
{ label: "高", value: "-" },
|
|
@@ -693,49 +703,49 @@ const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
|
693
703
|
{ label: "额", value: "-" },
|
|
694
704
|
{ label: "涨跌", value: "-" }
|
|
695
705
|
];
|
|
696
|
-
const
|
|
697
|
-
{ label: "开", value:
|
|
698
|
-
{ label: "高", value:
|
|
699
|
-
{ label: "低", value:
|
|
700
|
-
{ label: "收", value:
|
|
706
|
+
const r = [
|
|
707
|
+
{ label: "开", value: l(a[0]) },
|
|
708
|
+
{ label: "高", value: l(a[3]) },
|
|
709
|
+
{ label: "低", value: l(a[2]) },
|
|
710
|
+
{ label: "收", value: l(a[1]) }
|
|
701
711
|
];
|
|
702
|
-
|
|
712
|
+
a[4] !== null && r.push({ label: "额", value: j(a[4]) });
|
|
703
713
|
let T;
|
|
704
|
-
return
|
|
705
|
-
}), S =
|
|
706
|
-
var
|
|
707
|
-
return ((
|
|
708
|
-
}), U =
|
|
709
|
-
var
|
|
710
|
-
return ((
|
|
714
|
+
return a[6] > 0 ? T = "red" : a[6] < 0 && (T = "green"), r.push({ label: "涨跌", value: `${l(a[6])}%`, color: T }), r;
|
|
715
|
+
}), S = se(() => {
|
|
716
|
+
var a, r;
|
|
717
|
+
return ((r = (a = i.value) == null ? void 0 : a.mainIndicator) == null ? void 0 : r.map((T) => ({ label: T.key, value: l(T.data[z.value]), color: T.color }))) || [];
|
|
718
|
+
}), U = se(() => {
|
|
719
|
+
var a, r;
|
|
720
|
+
return ((r = (a = i.value) == null ? void 0 : a.subIndicator) == null ? void 0 : r.map((T) => ({ label: T.key, color: T.color, value: T.data[z.value] || "-" }))) || [];
|
|
711
721
|
}), K = () => {
|
|
712
|
-
|
|
722
|
+
M || (M = ce.init(c.value), M.on(
|
|
713
723
|
"highlight",
|
|
714
|
-
Me((
|
|
715
|
-
var
|
|
716
|
-
|
|
724
|
+
Me((a) => {
|
|
725
|
+
var r;
|
|
726
|
+
a.dataIndex ? z.value = a.dataIndex : z.value = ((r = a.batch) == null ? void 0 : r[0].dataIndex) ?? -1;
|
|
717
727
|
}, 10)
|
|
718
|
-
),
|
|
728
|
+
), M.on(
|
|
719
729
|
"datazoom",
|
|
720
730
|
Me(async () => {
|
|
721
|
-
var
|
|
722
|
-
const { loadCheckCount:
|
|
723
|
-
|
|
731
|
+
var k;
|
|
732
|
+
const { loadCheckCount: a } = J, { startValue: r, endValue: T } = ((k = M.getOption()) == null ? void 0 : k.dataZoom[0]) ?? {};
|
|
733
|
+
g === !1 && y === !1 && r < a && await ue("history"), E === !1 && v === !1 && T > i.value.time.length - a && await ue("new"), ye();
|
|
724
734
|
})
|
|
725
|
-
),
|
|
726
|
-
const
|
|
727
|
-
|
|
728
|
-
}),
|
|
729
|
-
var
|
|
730
|
-
|
|
731
|
-
}), window.addEventListener("keydown", Te), e.userKlineConfig.enable_subChart && (
|
|
735
|
+
), M.on("globalout", () => {
|
|
736
|
+
const a = M.getOption();
|
|
737
|
+
z.value = a.dataZoom[0].endValue;
|
|
738
|
+
}), M.getZr().on("contextmenu", () => {
|
|
739
|
+
var a;
|
|
740
|
+
N.value = (a = i.value) == null ? void 0 : a.time[z.value];
|
|
741
|
+
}), window.addEventListener("keydown", Te), e.userKlineConfig.enable_subChart && (s = ce.init(L.value), ce.connect([M, s])), o = Qe(c.value), o.listen(() => {
|
|
732
742
|
requestAnimationFrame(() => {
|
|
733
|
-
var
|
|
734
|
-
|
|
743
|
+
var a;
|
|
744
|
+
M.resize(), s == null || s.resize(), (a = A.value) == null || a.resize();
|
|
735
745
|
});
|
|
736
746
|
}));
|
|
737
|
-
}, Z = async ({ startTime:
|
|
738
|
-
|
|
747
|
+
}, Z = async ({ startTime: a, endTime: r }) => {
|
|
748
|
+
g = !1, y = !1, E = !1, v = !1;
|
|
739
749
|
try {
|
|
740
750
|
I.value = !0;
|
|
741
751
|
const T = {
|
|
@@ -747,45 +757,45 @@ const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
|
747
757
|
contractType: e.varietyStock ? null : e.klineType,
|
|
748
758
|
// 合约类型
|
|
749
759
|
mainIndicatorList: e.indicatorStore.getIndicatorParams(e.mainIndicator),
|
|
750
|
-
subIndicator:
|
|
751
|
-
startTime: p(
|
|
760
|
+
subIndicator: Y.value,
|
|
761
|
+
startTime: p(a).subtract(50, "day").format("YYYY-MM-DD HH:mm:ss"),
|
|
752
762
|
// 确保缩放, 多请求部分数据, 也可以兼容undefined的情况
|
|
753
|
-
endTime: p(
|
|
763
|
+
endTime: p(r).add(50, "day").format("YYYY-MM-DD HH:mm:ss"),
|
|
754
764
|
// 确保缩放, 多请求部分数据, 也可以兼容undefined的情况
|
|
755
765
|
deleteFirstNumber: 1
|
|
756
766
|
// >> 重要: 绩效后端特殊要求传参 <<
|
|
757
|
-
}, { body:
|
|
758
|
-
|
|
759
|
-
const
|
|
767
|
+
}, { body: k } = await u.post("/middleLayer/kline/getKline", T);
|
|
768
|
+
i.value = k ?? { data: [], mainIndicator: [], subIndicator: [], time: [] };
|
|
769
|
+
const C = i.value.time.findIndex((m) => new Date(m) >= new Date(a)), w = i.value.time.findIndex((m) => new Date(m) >= new Date(r));
|
|
760
770
|
ae({
|
|
761
|
-
startValue:
|
|
762
|
-
endValue: w === -1 ?
|
|
771
|
+
startValue: C === -1 ? 0 : C,
|
|
772
|
+
endValue: w === -1 ? i.value.time.length - 1 : w
|
|
763
773
|
});
|
|
764
774
|
} finally {
|
|
765
775
|
I.value = !1;
|
|
766
776
|
}
|
|
767
|
-
}, ue = async (
|
|
777
|
+
}, ue = async (a) => {
|
|
768
778
|
var F, ie;
|
|
769
|
-
const { loadAddCount:
|
|
770
|
-
switch (
|
|
779
|
+
const { loadAddCount: r } = J;
|
|
780
|
+
switch (a) {
|
|
771
781
|
case "history": {
|
|
772
|
-
|
|
782
|
+
g = !0;
|
|
773
783
|
const Q = {
|
|
774
784
|
varietyCode: e.varietyCode,
|
|
775
785
|
cycle: e.cycle,
|
|
776
786
|
right: e.rightType,
|
|
777
787
|
contractType: e.varietyStock ? null : e.klineType,
|
|
778
|
-
endTime:
|
|
779
|
-
limit:
|
|
788
|
+
endTime: i.value.time[0],
|
|
789
|
+
limit: r,
|
|
780
790
|
mainIndicatorList: e.indicatorStore.getIndicatorParams(e.mainIndicator),
|
|
781
|
-
subIndicator:
|
|
791
|
+
subIndicator: Y.value,
|
|
782
792
|
deleteFirstNumber: 1
|
|
783
|
-
}, { body: B } = await
|
|
784
|
-
|
|
793
|
+
}, { body: B } = await u.post("/middleLayer/kline/getKline", Q);
|
|
794
|
+
i.value = Ie(B, i.value), B.data.length < r && (console.log("[K线] 获取更多数据: 左侧已全部获取完毕, 关闭"), y = !0), g = !1;
|
|
785
795
|
break;
|
|
786
796
|
}
|
|
787
797
|
case "new": {
|
|
788
|
-
|
|
798
|
+
E = !0;
|
|
789
799
|
const Q = {
|
|
790
800
|
varietyCode: e.varietyCode,
|
|
791
801
|
cycle: e.cycle,
|
|
@@ -794,33 +804,33 @@ const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
|
794
804
|
// 复权方式
|
|
795
805
|
contractType: e.varietyStock ? null : e.klineType,
|
|
796
806
|
// 合约类型
|
|
797
|
-
startTime:
|
|
807
|
+
startTime: i.value.time[i.value.time.length - 1],
|
|
798
808
|
// 开始时间
|
|
799
|
-
limit:
|
|
809
|
+
limit: r,
|
|
800
810
|
// 查询K线数量
|
|
801
811
|
deleteFirstNumber: 1,
|
|
802
812
|
// >> 重要: 绩效后端特殊要求传参 <<
|
|
803
813
|
mainIndicatorList: e.indicatorStore.getIndicatorParams(e.mainIndicator),
|
|
804
|
-
subIndicator:
|
|
805
|
-
}, { body: B } = await
|
|
806
|
-
|
|
814
|
+
subIndicator: Y.value
|
|
815
|
+
}, { body: B } = await u.post("/middleLayer/kline/getKline", Q);
|
|
816
|
+
i.value = Ie(i.value, B), B.data.length < r && (console.log("[K线] 获取更多数据: 右侧已全部获取完毕, 关闭"), v = !0), E = !1;
|
|
807
817
|
break;
|
|
808
818
|
}
|
|
809
819
|
}
|
|
810
|
-
const { startValue: T, endValue:
|
|
820
|
+
const { startValue: T, endValue: k } = ((F = M.getOption()) == null ? void 0 : F.dataZoom[0]) ?? {}, C = (ie = M.getOption()) == null ? void 0 : ie.xAxis[0].data, w = i.value.time.findIndex((Q) => new Date(Q) >= new Date(C[T])), m = i.value.time.findIndex((Q) => new Date(Q) >= new Date(C[k]));
|
|
811
821
|
ae({
|
|
812
822
|
startValue: w === -1 ? 0 : w,
|
|
813
|
-
endValue: m === -1 ?
|
|
823
|
+
endValue: m === -1 ? i.value.time.length - 1 : m
|
|
814
824
|
});
|
|
815
825
|
}, ye = () => {
|
|
816
826
|
var w;
|
|
817
|
-
if (!
|
|
818
|
-
return
|
|
819
|
-
const { time:
|
|
820
|
-
["6", "7", "8"].includes(e.cycle) ?
|
|
821
|
-
}, ae = (
|
|
827
|
+
if (!i.value.time)
|
|
828
|
+
return t.value = [];
|
|
829
|
+
const { time: a } = i.value, { startValue: r, endValue: T } = ((w = M.getOption()) == null ? void 0 : w.dataZoom[0]) ?? {}, k = a[r], C = a[T];
|
|
830
|
+
["6", "7", "8"].includes(e.cycle) ? t.value = [p(k).format("YYYY-MM-DD"), p(C).format("YYYY-MM-DD")] : t.value = [k, C];
|
|
831
|
+
}, ae = (a = { startValue: 0, endValue: 0 }) => {
|
|
822
832
|
K();
|
|
823
|
-
const { maxValueSpan:
|
|
833
|
+
const { maxValueSpan: r } = J, { time: T, data: k, mainIndicator: C } = i.value, w = a.endValue - a.startValue > r ? a.endValue - r : a.startValue, m = a.endValue, F = C.map((x) => ({
|
|
824
834
|
name: x.key,
|
|
825
835
|
type: "line",
|
|
826
836
|
silent: !0,
|
|
@@ -832,8 +842,8 @@ const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
|
832
842
|
itemStyle: {
|
|
833
843
|
color: x.color
|
|
834
844
|
}
|
|
835
|
-
})), { netPositionLineData: ie } = Be(e.netPositionData, e.cycle), { tradePointData: Q, tradeLineData: B } = Ze(e.tradeLog, e.cycle, e.sellBuy, T,
|
|
836
|
-
|
|
845
|
+
})), { netPositionLineData: ie } = Be(e.netPositionData, e.cycle), { tradePointData: Q, tradeLineData: B } = Ze(e.tradeLog, e.cycle, e.sellBuy, T, k);
|
|
846
|
+
M.setOption(
|
|
837
847
|
{
|
|
838
848
|
animation: !1,
|
|
839
849
|
grid: {
|
|
@@ -860,43 +870,43 @@ const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
|
860
870
|
label: {
|
|
861
871
|
rich: {},
|
|
862
872
|
formatter: (x) => {
|
|
863
|
-
const { axisDimension:
|
|
864
|
-
return
|
|
873
|
+
const { axisDimension: O, value: b } = x;
|
|
874
|
+
return O === "x" ? ["6", "7", "8"].includes(e.cycle) ? p(b).format("YYYY-MM-DD") : b : String(l(b));
|
|
865
875
|
}
|
|
866
876
|
}
|
|
867
877
|
},
|
|
868
878
|
formatter: (x) => {
|
|
869
879
|
if (!(x != null && x.length))
|
|
870
880
|
return null;
|
|
871
|
-
let
|
|
872
|
-
if (x.forEach((
|
|
873
|
-
if (
|
|
881
|
+
let O = "";
|
|
882
|
+
if (x.forEach((h) => {
|
|
883
|
+
if (h.seriesName === "netPosition" && h.data !== null && (O += `<div>资产持仓净值: ${h.data[1]}</div>`), h.componentSubType === "candlestick")
|
|
874
884
|
if (e.sellBuy === 0) {
|
|
875
|
-
const W = Q.filter((V) => (V == null ? void 0 : V.coord[0]) ===
|
|
885
|
+
const W = Q.filter((V) => (V == null ? void 0 : V.coord[0]) === h.axisValue);
|
|
876
886
|
let H = 0, G = 0;
|
|
877
887
|
W.forEach((V) => {
|
|
878
888
|
const { tradeType: q, amount: ne } = V.customData;
|
|
879
889
|
q === "买" && (H += ne), q === "卖" && (G += ne);
|
|
880
|
-
}), H && (
|
|
890
|
+
}), H && (O += `<div>买: ${H}</div>`), G && (O += `<div>卖: ${G}</div>`);
|
|
881
891
|
} else
|
|
882
892
|
Q.forEach((W) => {
|
|
883
|
-
if ((W == null ? void 0 : W.coord[0]) ===
|
|
893
|
+
if ((W == null ? void 0 : W.coord[0]) === h.axisValue) {
|
|
884
894
|
const { tradeType: H, amount: G, profitAndLoss: V, openPriceAll: q, closePriceAll: ne } = W.customData;
|
|
885
895
|
let X = `<div>${H}: ${G}手</div>`;
|
|
886
896
|
if (H.includes("开") && (X += `<div>开仓价: ${(q / G).toFixed(2)}</div>`), H.includes("平")) {
|
|
887
897
|
const de = (q / G).toFixed(2), De = (ne / G).toFixed(2);
|
|
888
898
|
X += `<div>平仓价: ${De}</div>`, X += `<div>盈亏: ${V == null ? void 0 : V.toFixed(2)}</div>`, X += `<div>盈亏比率: ${((De - de) / de * 100).toFixed(2)} %</div>`;
|
|
889
899
|
}
|
|
890
|
-
|
|
900
|
+
O += X;
|
|
891
901
|
}
|
|
892
902
|
});
|
|
893
|
-
}), !
|
|
903
|
+
}), !O)
|
|
894
904
|
return null;
|
|
895
905
|
let b = x[0].axisValue;
|
|
896
906
|
return ["6", "7", "8"].includes(e.cycle) && (b = p(b).format("YYYY-MM-DD")), `
|
|
897
907
|
<div>
|
|
898
908
|
<span style="font-weight: bold;">${b}</span>
|
|
899
|
-
${
|
|
909
|
+
${O}
|
|
900
910
|
</div>
|
|
901
911
|
`;
|
|
902
912
|
}
|
|
@@ -926,27 +936,27 @@ const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
|
926
936
|
}
|
|
927
937
|
},
|
|
928
938
|
min: (x) => {
|
|
929
|
-
const { min:
|
|
930
|
-
return
|
|
939
|
+
const { min: O, max: b } = x, h = Math.abs((b - O) / 10);
|
|
940
|
+
return l(O - h);
|
|
931
941
|
},
|
|
932
|
-
max: (x) =>
|
|
942
|
+
max: (x) => l(x.max)
|
|
933
943
|
},
|
|
934
944
|
{
|
|
935
945
|
show: !1,
|
|
936
946
|
min: (x) => {
|
|
937
|
-
const { min:
|
|
938
|
-
return
|
|
947
|
+
const { min: O, max: b } = x, h = Math.abs((b - O) / 10);
|
|
948
|
+
return O - h;
|
|
939
949
|
},
|
|
940
950
|
max: (x) => {
|
|
941
|
-
const { min:
|
|
942
|
-
return b +
|
|
951
|
+
const { min: O, max: b } = x, h = Math.abs((b - O) / 10);
|
|
952
|
+
return b + h;
|
|
943
953
|
}
|
|
944
954
|
}
|
|
945
955
|
],
|
|
946
956
|
series: [
|
|
947
957
|
{
|
|
948
958
|
type: "candlestick",
|
|
949
|
-
data:
|
|
959
|
+
data: k,
|
|
950
960
|
markPoint: { data: Ge([...Q]) },
|
|
951
961
|
markLine: { data: [...B] },
|
|
952
962
|
itemStyle: {
|
|
@@ -992,25 +1002,25 @@ const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
|
992
1002
|
}
|
|
993
1003
|
},
|
|
994
1004
|
!0
|
|
995
|
-
), e.userKlineConfig.enable_subChart &&
|
|
1005
|
+
), e.userKlineConfig.enable_subChart && s.setOption(_e(i.value, w, m), !0), ye(), z.value = m;
|
|
996
1006
|
{
|
|
997
1007
|
const x = [];
|
|
998
1008
|
if (e.userKlineConfig.enable_tradeLogBrush && Q.length) {
|
|
999
|
-
const [
|
|
1009
|
+
const [O, b] = [Q[0].coord[0], Q.at(-1).coord[0]], h = re(T, [O, b], e.cycle);
|
|
1000
1010
|
x.push({
|
|
1001
1011
|
brushId: "开平仓范围",
|
|
1002
1012
|
brushType: "lineX",
|
|
1003
1013
|
xAxisIndex: 0,
|
|
1004
|
-
coordRange:
|
|
1014
|
+
coordRange: h
|
|
1005
1015
|
});
|
|
1006
1016
|
}
|
|
1007
1017
|
if (e.syncBrushRange.cycleList.includes(e.cycle)) {
|
|
1008
|
-
const { startTime:
|
|
1018
|
+
const { startTime: O, endTime: b } = e.syncBrushRange, h = re(T, [O, b], e.cycle);
|
|
1009
1019
|
x.push({
|
|
1010
1020
|
brushId: "同步刷选范围",
|
|
1011
1021
|
brushType: "lineX",
|
|
1012
1022
|
xAxisIndex: 0,
|
|
1013
|
-
coordRange:
|
|
1023
|
+
coordRange: h,
|
|
1014
1024
|
brushStyle: {
|
|
1015
1025
|
fill: "rgba(64, 158, 255, 0.2)",
|
|
1016
1026
|
stroke: "rgba(64, 158, 255, 0.8)",
|
|
@@ -1019,12 +1029,12 @@ const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
|
1019
1029
|
});
|
|
1020
1030
|
}
|
|
1021
1031
|
if (e.positionTime) {
|
|
1022
|
-
const [
|
|
1032
|
+
const [O, b] = [p(e.positionTime).format("YYYY-MM-DD 00:00:00"), p(e.positionTime).format("YYYY-MM-DD 23:59:59")], h = re(T, [O, b], e.cycle);
|
|
1023
1033
|
x.push({
|
|
1024
1034
|
brushId: "强制定位高亮",
|
|
1025
1035
|
brushType: "lineX",
|
|
1026
1036
|
xAxisIndex: 0,
|
|
1027
|
-
coordRange:
|
|
1037
|
+
coordRange: h,
|
|
1028
1038
|
brushStyle: {
|
|
1029
1039
|
fill: "rgba(217, 179, 255, 0.2)",
|
|
1030
1040
|
stroke: "rgba(217, 179, 255, 0.8)",
|
|
@@ -1032,21 +1042,21 @@ const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
|
1032
1042
|
}
|
|
1033
1043
|
});
|
|
1034
1044
|
}
|
|
1035
|
-
|
|
1045
|
+
M.dispatchAction({
|
|
1036
1046
|
type: "brush",
|
|
1037
1047
|
areas: x
|
|
1038
1048
|
});
|
|
1039
1049
|
}
|
|
1040
|
-
}, Oe = (
|
|
1041
|
-
const { startTime:
|
|
1042
|
-
Z({ startTime:
|
|
1043
|
-
}, Te = ({ code:
|
|
1044
|
-
if (!(
|
|
1050
|
+
}, Oe = (a) => {
|
|
1051
|
+
const { startTime: r, endTime: T } = a;
|
|
1052
|
+
Z({ startTime: r, endTime: T });
|
|
1053
|
+
}, Te = ({ code: a, ctrlKey: r }) => {
|
|
1054
|
+
if (!(r || D.value))
|
|
1045
1055
|
return;
|
|
1046
|
-
const { xAxis: T, dataZoom:
|
|
1047
|
-
let { startValue: w, endValue: m } = (
|
|
1048
|
-
if (
|
|
1049
|
-
switch (
|
|
1056
|
+
const { xAxis: T, dataZoom: k } = M.getOption(), { data: C } = (T == null ? void 0 : T[0]) ?? { data: [] };
|
|
1057
|
+
let { startValue: w, endValue: m } = (k == null ? void 0 : k[0]) ?? {};
|
|
1058
|
+
if (C != null && C.length) {
|
|
1059
|
+
switch (a) {
|
|
1050
1060
|
case "ArrowUp": {
|
|
1051
1061
|
if (m - w < 5)
|
|
1052
1062
|
return;
|
|
@@ -1060,108 +1070,100 @@ const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
|
1060
1070
|
break;
|
|
1061
1071
|
}
|
|
1062
1072
|
case "ArrowLeft": {
|
|
1063
|
-
w > 0 && (w -= 1, m -= 1),
|
|
1073
|
+
w > 0 && (w -= 1, m -= 1), z.value > 0 && (z.value -= 1);
|
|
1064
1074
|
break;
|
|
1065
1075
|
}
|
|
1066
1076
|
case "ArrowRight": {
|
|
1067
|
-
m <
|
|
1077
|
+
m < C.length - 1 && (w += 1, m += 1), D.value && z.value < C.length - 1 && (z.value += 1);
|
|
1068
1078
|
break;
|
|
1069
1079
|
}
|
|
1070
1080
|
}
|
|
1071
|
-
|
|
1081
|
+
M.dispatchAction({
|
|
1072
1082
|
type: "dataZoom",
|
|
1073
1083
|
startValue: w,
|
|
1074
1084
|
endValue: m
|
|
1075
|
-
}),
|
|
1085
|
+
}), M.dispatchAction({
|
|
1076
1086
|
type: "updateAxisPointer",
|
|
1077
1087
|
seriesIndex: 0,
|
|
1078
|
-
dataIndex:
|
|
1079
|
-
}),
|
|
1088
|
+
dataIndex: D.value ? z.value : null
|
|
1089
|
+
}), M.dispatchAction({
|
|
1080
1090
|
type: "highlight",
|
|
1081
|
-
dataIndex:
|
|
1091
|
+
dataIndex: D.value ? z.value : m
|
|
1082
1092
|
});
|
|
1083
1093
|
}
|
|
1084
1094
|
};
|
|
1085
1095
|
return xe(() => {
|
|
1086
|
-
const [
|
|
1087
|
-
Z({ startTime:
|
|
1088
|
-
}),
|
|
1096
|
+
const [a, r] = e.initTimeRange;
|
|
1097
|
+
Z({ startTime: a, endTime: r });
|
|
1098
|
+
}), Ne(
|
|
1089
1099
|
() => [e.varietyCode, e.initTimeRange],
|
|
1090
1100
|
() => {
|
|
1091
|
-
const [
|
|
1092
|
-
Z({ startTime:
|
|
1101
|
+
const [a, r] = e.initTimeRange;
|
|
1102
|
+
Z({ startTime: a, endTime: r });
|
|
1093
1103
|
},
|
|
1094
1104
|
{ deep: !0 }
|
|
1095
|
-
),
|
|
1105
|
+
), Ne(
|
|
1096
1106
|
() => {
|
|
1097
|
-
var
|
|
1098
|
-
return [e.mainIndicator,
|
|
1107
|
+
var a, r;
|
|
1108
|
+
return [e.mainIndicator, Y.value, (a = e.indicatorStore) == null ? void 0 : a.filterIndicator, (r = e.indicatorStore) == null ? void 0 : r.customIndicator, e.cycle, e.rightType, e.klineType];
|
|
1099
1109
|
},
|
|
1100
1110
|
() => {
|
|
1101
|
-
var
|
|
1102
|
-
const { startValue:
|
|
1103
|
-
Z({ startTime: T, endTime:
|
|
1111
|
+
var C;
|
|
1112
|
+
const { startValue: a, endValue: r } = ((C = M.getOption()) == null ? void 0 : C.dataZoom[0]) ?? {}, [T, k] = [i.value.time[a], i.value.time[r]];
|
|
1113
|
+
Z({ startTime: T, endTime: k });
|
|
1104
1114
|
},
|
|
1105
1115
|
{ deep: !0 }
|
|
1106
|
-
),
|
|
1116
|
+
), Ne(
|
|
1107
1117
|
() => [e.sellBuy, e.tradeLog, e.netPositionData],
|
|
1108
1118
|
() => {
|
|
1109
1119
|
var T;
|
|
1110
|
-
const { startValue:
|
|
1111
|
-
ae({ startValue:
|
|
1112
|
-
},
|
|
1113
|
-
{ deep: !0 }
|
|
1114
|
-
), oe(
|
|
1115
|
-
() => n.value,
|
|
1116
|
-
(t) => {
|
|
1117
|
-
var O;
|
|
1118
|
-
const [s, T] = t;
|
|
1119
|
-
(O = A.value) == null || O.reset({ startTime: s, endTime: T });
|
|
1120
|
+
const { startValue: a, endValue: r } = ((T = M.getOption()) == null ? void 0 : T.dataZoom[0]) ?? {};
|
|
1121
|
+
ae({ startValue: a, endValue: r });
|
|
1120
1122
|
},
|
|
1121
1123
|
{ deep: !0 }
|
|
1122
1124
|
), we(() => {
|
|
1123
|
-
|
|
1125
|
+
M.off("highlight"), M.off("globalout"), M.off("datazoom"), M.getZr().off("contextmenu"), window.removeEventListener("keydown", Te), M.dispose(), s == null || s.dispose(), o.dispose(), o = null;
|
|
1124
1126
|
}), d({
|
|
1125
|
-
screenTimeRange:
|
|
1126
|
-
contextmenuKlineTime:
|
|
1127
|
+
screenTimeRange: t,
|
|
1128
|
+
contextmenuKlineTime: N,
|
|
1127
1129
|
reDraw: () => {
|
|
1128
1130
|
var T;
|
|
1129
|
-
const { startValue:
|
|
1130
|
-
ae({ startValue:
|
|
1131
|
+
const { startValue: a, endValue: r } = ((T = M.getOption()) == null ? void 0 : T.dataZoom[0]) ?? {};
|
|
1132
|
+
ae({ startValue: a, endValue: r });
|
|
1131
1133
|
}
|
|
1132
|
-
}), (
|
|
1133
|
-
const T = ke,
|
|
1134
|
+
}), (a, r) => {
|
|
1135
|
+
const T = ke, k = be, C = fe, w = Ce;
|
|
1134
1136
|
return ve((R(), _("div", {
|
|
1135
1137
|
class: "kline-plus",
|
|
1136
|
-
onMousemove:
|
|
1137
|
-
onMouseout:
|
|
1138
|
+
onMousemove: r[1] || (r[1] = (m) => D.value = !0),
|
|
1139
|
+
onMouseout: r[2] || (r[2] = (m) => D.value = !1)
|
|
1138
1140
|
}, [
|
|
1139
1141
|
$("div", Ke, [
|
|
1140
1142
|
$("div", qe, [
|
|
1141
|
-
ee(le, { data:
|
|
1143
|
+
ee(le, { data: f.value }, null, 8, ["data"]),
|
|
1142
1144
|
ee(le, { data: S.value }, null, 8, ["data"])
|
|
1143
1145
|
]),
|
|
1144
|
-
|
|
1146
|
+
n.userKlineConfig.enable_showScreenTimeRange ? (R(), _("span", Xe, te(t.value[0]) + " - " + te(t.value[1]), 1)) : oe("", !0),
|
|
1145
1147
|
$("div", {
|
|
1146
1148
|
ref_key: "mainChartRef",
|
|
1147
|
-
ref:
|
|
1149
|
+
ref: c,
|
|
1148
1150
|
class: "chart"
|
|
1149
1151
|
}, null, 512)
|
|
1150
1152
|
]),
|
|
1151
|
-
|
|
1153
|
+
n.userKlineConfig.enable_subChart ? (R(), _("div", et, [
|
|
1152
1154
|
$("div", tt, [
|
|
1153
1155
|
$("div", Mt, [
|
|
1154
|
-
$("span", null, te(
|
|
1155
|
-
ee(
|
|
1156
|
-
modelValue:
|
|
1157
|
-
"onUpdate:modelValue":
|
|
1156
|
+
$("span", null, te(Y.value), 1),
|
|
1157
|
+
ee(k, {
|
|
1158
|
+
modelValue: Y.value,
|
|
1159
|
+
"onUpdate:modelValue": r[0] || (r[0] = (m) => Y.value = m),
|
|
1158
1160
|
style: { width: "100px", "margin-right": "4px", height: "25px" },
|
|
1159
1161
|
size: "small",
|
|
1160
1162
|
class: "element-dark",
|
|
1161
1163
|
"popper-class": "element-dark"
|
|
1162
1164
|
}, {
|
|
1163
1165
|
default: Se(() => [
|
|
1164
|
-
(R(!0), _(Le, null, Ae(
|
|
1166
|
+
(R(!0), _(Le, null, Ae(n.indicatorStore.subIndicatorList, (m, F) => (R(), ge(T, {
|
|
1165
1167
|
key: F,
|
|
1166
1168
|
label: m.label,
|
|
1167
1169
|
value: m.value
|
|
@@ -1174,22 +1176,23 @@ const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
|
1174
1176
|
]),
|
|
1175
1177
|
$("div", {
|
|
1176
1178
|
ref_key: "subChartRef",
|
|
1177
|
-
ref:
|
|
1179
|
+
ref: L,
|
|
1178
1180
|
class: "chart"
|
|
1179
1181
|
}, null, 512)
|
|
1180
|
-
])) :
|
|
1181
|
-
|
|
1182
|
+
])) : oe("", !0),
|
|
1183
|
+
n.userKlineConfig.enable_sliderChart ? (R(), _("div", at, [
|
|
1182
1184
|
ee(Je, {
|
|
1183
1185
|
ref_key: "sliderChartRef",
|
|
1184
1186
|
ref: A,
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1187
|
+
screenTimeRange: t.value,
|
|
1188
|
+
varietyCode: n.varietyCode,
|
|
1189
|
+
varietyStock: n.varietyStock,
|
|
1190
|
+
rightType: n.rightType,
|
|
1191
|
+
klineType: n.klineType,
|
|
1189
1192
|
onChange: Oe
|
|
1190
|
-
}, null, 8, ["varietyCode", "varietyStock", "rightType", "klineType"])
|
|
1191
|
-
])) :
|
|
1192
|
-
|
|
1193
|
+
}, null, 8, ["screenTimeRange", "varietyCode", "varietyStock", "rightType", "klineType"])
|
|
1194
|
+
])) : oe("", !0),
|
|
1195
|
+
i.value.time.length ? oe("", !0) : (R(), ge(C, {
|
|
1193
1196
|
key: 2,
|
|
1194
1197
|
class: "empty",
|
|
1195
1198
|
description: "暂无数据"
|
|
@@ -1199,9 +1202,9 @@ const Ke = { class: "main-chart" }, qe = { class: "indicator" }, Xe = {
|
|
|
1199
1202
|
]);
|
|
1200
1203
|
};
|
|
1201
1204
|
}
|
|
1202
|
-
}, nt = /* @__PURE__ */ ze(it, [["__scopeId", "data-v-
|
|
1203
|
-
install(
|
|
1204
|
-
|
|
1205
|
+
}, nt = /* @__PURE__ */ ze(it, [["__scopeId", "data-v-9917caf7"]]), Ot = {
|
|
1206
|
+
install(n) {
|
|
1207
|
+
n.component("st-klinePlus", nt);
|
|
1205
1208
|
}
|
|
1206
1209
|
};
|
|
1207
1210
|
export {
|