st-comp 0.0.247 → 0.0.248

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 (86) hide show
  1. package/es/ChartLayout.js +4 -4
  2. package/es/CustomFunction.js +42 -42
  3. package/es/FactorWarning.js +33 -33
  4. package/es/Kline.js +17 -17
  5. package/es/KlineBasic.js +26 -26
  6. package/es/KlineConfig.js +61 -61
  7. package/es/KlineNew.js +16 -16
  8. package/es/KlinePlus.cjs +4 -4
  9. package/es/KlinePlus.js +589 -575
  10. package/es/LinearLegend.cjs +1 -1
  11. package/es/LinearLegend.js +1 -63
  12. package/es/MonacoEditor.js +24 -24
  13. package/es/Pagination.js +73 -73
  14. package/es/PasswordPrompt.js +3 -3
  15. package/es/Table.js +38 -38
  16. package/es/User.js +44 -44
  17. package/es/VarSelectDialog.js +25 -25
  18. package/es/VarietyAutoComplete.js +10 -10
  19. package/es/VarietySearch.js +38 -38
  20. package/es/{VarietySelect-5a9dd50b.js → VarietySelect-b9fe3000.js} +4 -4
  21. package/es/VarietyTextCopy.js +12 -12
  22. package/es/VirtualTable.js +14 -14
  23. package/es/{_initCloneObject-c34c65bc.js → _initCloneObject-382335b2.js} +7 -7
  24. package/es/{base-a5af3db3.js → base-ff0e366f.js} +40 -40
  25. package/es/{castArray-7741a212.js → castArray-15070be9.js} +1 -1
  26. package/es/{config-provider-06a63185.js → config-provider-2e85eee8.js} +6 -6
  27. package/es/{debounce-8d53f4dd.js → debounce-e9e47f9a.js} +1 -1
  28. package/es/{dropdown-302f71e7.js → dropdown-2b35a683.js} +13 -13
  29. package/es/{el-autocomplete-ed75a659.js → el-autocomplete-18be2c5a.js} +16 -16
  30. package/es/{el-button-d09ff85f.js → el-button-f08c0639.js} +39 -39
  31. package/es/{el-checkbox-64648e02.js → el-checkbox-058dba2d.js} +31 -31
  32. package/es/{el-dialog-6a80e3d8.js → el-dialog-d328e0d8.js} +15 -15
  33. package/es/{el-divider-4e059794.js → el-divider-4fe55ebe.js} +1 -1
  34. package/es/{el-empty-33cb66f1.js → el-empty-ceecb81c.js} +5 -5
  35. package/es/{el-form-item-4eca95be.js → el-form-item-cb328886.js} +36 -36
  36. package/es/{el-input-cae60510.js → el-input-0f6ead19.js} +50 -50
  37. package/es/{el-input-number-c2499410.js → el-input-number-66e68609.js} +36 -36
  38. package/es/{el-loading-c738468d.js → el-loading-412370c7.js} +5 -5
  39. package/es/{el-menu-item-f904f685.js → el-menu-item-0ee8ad18.js} +22 -22
  40. package/es/{el-message-box-05d8cf39.js → el-message-box-6db52b29.js} +11 -11
  41. package/es/{el-message-0df23ae7.js → el-message-e6c755df.js} +23 -23
  42. package/es/{el-overlay-cc9bc792.js → el-overlay-981f8d49.js} +56 -56
  43. package/es/{el-popconfirm-a6f66a0e.js → el-popconfirm-005013fa.js} +20 -20
  44. package/es/{el-popper-a38874f4.js → el-popper-fdc7c793.js} +109 -109
  45. package/es/{el-segmented-51b1c797.js → el-segmented-050d0090.js} +8 -8
  46. package/es/{el-select-1b149fab.js → el-select-23a1f302.js} +64 -64
  47. package/es/{el-table-column-3e30ebae.js → el-table-column-d0c374cf.js} +15 -15
  48. package/es/{el-tag-0a25efdf.js → el-tag-f13f463b.js} +15 -15
  49. package/es/{el-text-73d899ff.js → el-text-27cef2be.js} +2 -2
  50. package/es/{index-42e59bf5.js → index-09bd2621.js} +43 -43
  51. package/es/{index-94e43e0d.js → index-15b9603e.js} +3 -3
  52. package/es/{index-960806da.js → index-269b8a8c.js} +36 -36
  53. package/es/{index-54d289d1.js → index-4a3f30c5.js} +12 -12
  54. package/es/{index-6e967429.js → index-80a7ad32.js} +17 -17
  55. package/es/{index-d77a7336.js → index-93a8960e.js} +1 -1
  56. package/es/{index-4194c942.js → index-b937ea22.js} +2 -2
  57. package/es/{index-ac98a4d8.js → index-c266c23a.js} +10 -10
  58. package/es/{index-6806997d.js → index-e0901394.js} +34 -34
  59. package/es/{index-87b4bf61.js → index-ec7ad93f.js} +31 -31
  60. package/es/{python-a914569a.js → python-823b276b.js} +24 -24
  61. package/es/raf-8e05a7f4.js +6 -0
  62. package/es/{scroll-679bd6bf.js → scroll-41b4f625.js} +5 -5
  63. package/es/style.css +1 -1
  64. package/es/{use-form-common-props-47e50c10.js → use-form-common-props-631cacae.js} +65 -65
  65. package/es/{use-global-config-f52caea0.js → use-global-config-5d001623.js} +14 -14
  66. package/es/{validator-94c04152.js → validator-4160d9e7.js} +1 -1
  67. package/es/{vnode-5ddb7ed1.js → vnode-06571d5b.js} +1 -1
  68. package/es/{zh-cn-4921961d.js → zh-cn-5df98ac2.js} +2 -2
  69. package/lib/bundle.js +1 -1
  70. package/lib/bundle.umd.cjs +79 -79
  71. package/lib/{index-750ede1b.js → index-f00d1e1f.js} +4912 -4898
  72. package/lib/{python-e34a2958.js → python-0f34e2e6.js} +1 -1
  73. package/lib/style.css +1 -1
  74. package/package.json +1 -1
  75. package/packages/KlinePlus/index.vue +88 -62
  76. package/src/App.vue +15 -4
  77. package/src/pages/KlineNew/components/KlineAction/mockApi/index.js +1 -1
  78. package/src/pages/KlineNew/components/KlineBasic/utils.js +1 -1
  79. package/src/pages/KlineNew/components/KlineSlide/utils.js +1 -1
  80. package/src/pages/KlinePlus/KlineDialog/MultiCycle.vue +312 -0
  81. package/src/pages/KlinePlus/KlineDialog/api.js +108 -0
  82. package/src/pages/KlinePlus/KlineDialog/index.vue +582 -0
  83. package/src/pages/KlinePlus/KlineDialog/indicator.js +109 -0
  84. package/src/pages/KlinePlus/KlineDialog/tools.js +86 -0
  85. package/src/pages/KlinePlus/index.vue +23 -209
  86. package/es/raf-80ef0c0a.js +0 -6
@@ -0,0 +1,109 @@
1
+ import { defineStore } from "pinia";
2
+ import { getIndicator, getConfig, setConfig } from "./api";
3
+
4
+ const useIndicatorStore = defineStore("indicator", {
5
+ state: () => ({
6
+ visible: false, // 是否显示配置弹窗
7
+ originConfig: {}, // 原始配置
8
+ filterIndicator: {}, // 内置指标过滤配置
9
+ customIndicator: [], // 自定义指标配置
10
+ mainSystemIndicatorList: [], // 内置主图指标配置
11
+ subIndicatorList: [], // 副图指标配置
12
+ indicatorItemList: [], // 指标项配置
13
+ }),
14
+ getters: {
15
+ mainIndicatorList: (state) => {
16
+ // 主图指标列表(过滤隐藏的指标)
17
+ return [...state.mainSystemIndicatorList, ...state.customIndicator];
18
+ },
19
+ // 获取指标项配置
20
+ getIndicatorParams: (state) => {
21
+ return (mainIndicator) => {
22
+ let indicatorParams = [];
23
+ state.mainSystemIndicatorList.forEach((item) => {
24
+ if (item.label === mainIndicator) {
25
+ const filterConfig = state.filterIndicator[mainIndicator] || [];
26
+ indicatorParams = item.config.filter((i) => !filterConfig.includes(i.key)).map((i) => i.key);
27
+ }
28
+ });
29
+ state.customIndicator.forEach((item) => {
30
+ if (item.label === mainIndicator) {
31
+ indicatorParams = item.config.map((i) => i.key);
32
+ }
33
+ });
34
+ return indicatorParams;
35
+ };
36
+ },
37
+ },
38
+ actions: {
39
+ // 初始化配置
40
+ async init() {
41
+ const indicatorRes = await getIndicator();
42
+ this.mainSystemIndicatorList = indicatorRes?.body?.mainIndicatorList || [];
43
+ this.subIndicatorList = indicatorRes?.body?.subIndicatorList || [];
44
+ this.indicatorItemList = indicatorRes?.body?.indicatorItemList || [];
45
+ const res = await getConfig();
46
+ let originConfig = {};
47
+ let filterIndicator = {};
48
+ let customIndicator = [];
49
+ if (res.data) {
50
+ originConfig = JSON.parse(res.data);
51
+ filterIndicator = originConfig.filterIndicator || {};
52
+ customIndicator = originConfig.customIndicator || [];
53
+ }
54
+ this.originConfig = originConfig;
55
+ this.filterIndicator = filterIndicator;
56
+ this.customIndicator = customIndicator;
57
+ },
58
+ // 代开配置弹窗
59
+ config() {
60
+ this.visible = true;
61
+ },
62
+ // 更新内置指标过滤配置
63
+ async setFilterIndicator(key, filterIndicatorList) {
64
+ await setConfig({
65
+ data: JSON.stringify({
66
+ ...this.originConfig,
67
+ filterIndicator: {
68
+ ...this.filterIndicator,
69
+ [key]: filterIndicatorList,
70
+ },
71
+ }),
72
+ });
73
+ this.filterIndicator[key] = filterIndicatorList;
74
+ },
75
+ // 更新自定义指标配置配置
76
+ async setCustomIndicator({ label, config, originLabel, type }) {
77
+ let newCustomIndicator = [...this.customIndicator];
78
+ if (type === "add") {
79
+ // 新增指标
80
+ newCustomIndicator = [...newCustomIndicator, { label, value: label, config: [], type: "custom" }];
81
+ } else if (type === "editLabel") {
82
+ // 编辑指标名称
83
+ newCustomIndicator = newCustomIndicator.map((item) => {
84
+ if (item.label === originLabel) {
85
+ return { ...item, label, value: label };
86
+ }
87
+ return item;
88
+ });
89
+ } else if (type === "editConfig") {
90
+ // 编辑指标配置
91
+ newCustomIndicator = newCustomIndicator.map((item) => {
92
+ if (item.label === label) {
93
+ return { ...item, config };
94
+ }
95
+ return item;
96
+ });
97
+ } else if (type === "delete") {
98
+ // 删除指标
99
+ newCustomIndicator = newCustomIndicator.filter((item) => item.label !== label);
100
+ }
101
+ await setConfig({
102
+ data: JSON.stringify({ ...this.originConfig, customIndicator: newCustomIndicator }),
103
+ });
104
+ this.customIndicator = newCustomIndicator;
105
+ },
106
+ },
107
+ });
108
+
109
+ export default useIndicatorStore;
@@ -0,0 +1,86 @@
1
+ import dayjs from "dayjs";
2
+
3
+ // 数据源: 成交点类型
4
+ export const sellBuyOptions = [
5
+ { label: "买卖", value: 0 },
6
+ { label: "开平", value: 1 },
7
+ ];
8
+ // 数据源: 复权类型
9
+ export const rightTypeOptions = [
10
+ { label: "不复权", value: 0 },
11
+ { label: "前复权", value: 1 },
12
+ ];
13
+ // 数据源: 合约类型
14
+ export const klineTypeOptions = [
15
+ { value: 0, label: "主连" },
16
+ { value: 1, label: "加权" },
17
+ { value: 2, label: "收益率指数" },
18
+ ];
19
+
20
+ // 字典文案映射
21
+ export const formatLabel = (value, options) => {
22
+ return options.find((item) => item.value === value)?.label ?? "-";
23
+ };
24
+
25
+ // 前端估算K线根数的周期分布
26
+ const dayBarsNumByCycle = {
27
+ 1: 240, // 每天240根(4小时×60分钟)
28
+ 2: 48, // 每天48根(4小时×12根)
29
+ 3: 16, // 每天16根(4小时×4根)
30
+ 4: 8, // 每天8根(4小时×2根)
31
+ 5: 4, // 每天4根(4小时×1根)
32
+ 6: 1, // 每天1根
33
+ 7: 0.2, // 每周1根(按5个交易日算)
34
+ 8: 0.033, // 每月1根(按21个交易日算)
35
+ };
36
+ // 前端估算大致根数的K线时间
37
+ export const estimateKlineTime = (time, direction, num, cycle) => {
38
+ const dayBarsNum = dayBarsNumByCycle[cycle] || 1;
39
+ // 计算需要的大概天数
40
+ const daysNeeded = num / dayBarsNum;
41
+
42
+ let resultTime;
43
+ if (direction === "before") {
44
+ resultTime = dayjs(time).subtract(daysNeeded, "day");
45
+ } else {
46
+ resultTime = dayjs(time).add(daysNeeded, "day");
47
+ }
48
+
49
+ return resultTime.format("YYYY-MM-DD HH:mm:ss");
50
+ };
51
+ /**
52
+ * @description: 根据开始时间, 结束时间, 返回拓展K线根数+校验间隔后的时间范围
53
+ * @params
54
+ * {
55
+ * startTime 开始时间;
56
+ * endTime: 结束时间;
57
+ * cycle: 周期Id;
58
+ *
59
+ * type: 类型, 默认reset;
60
+ * num: 推算根数, 默认200;
61
+ * maxSpan: 一屏上限根数, 默认3000; 这里是因为前端估算忽略了交易日等因素, 所以在计算差值时, 根数的上限可以比常规的一屏上限数量大一些
62
+ * }
63
+ * @return [startTime, endTime]
64
+ */
65
+ export const getTimeRange = (rest) => {
66
+ const params = Object.assign({}, { type: "reset", num: 200, maxSpan: 3000 }, rest);
67
+ switch (params.type) {
68
+ case "week": {
69
+ return [dayjs().startOf("week").add(1, "day").format("YYYY-MM-DD HH:mm:ss"), dayjs().endOf("week").add(1, "day").format("YYYY-MM-DD HH:mm:ss")];
70
+ }
71
+ case "month": {
72
+ return [dayjs().startOf("month").format("YYYY-MM-DD HH:mm:ss"), dayjs().endOf("month").format("YYYY-MM-DD HH:mm:ss")];
73
+ }
74
+ case "reset": {
75
+ // 1. 推算根数后的时间范围
76
+ const startTime = estimateKlineTime(params.startTime, "before", params.num, params.cycle);
77
+ const endTime = estimateKlineTime(params.endTime, "after", params.num, params.cycle);
78
+ // 2. 进行N天间隔校验
79
+ const N = Math.ceil(params.maxSpan / dayBarsNumByCycle[params.cycle]);
80
+ const d1 = dayjs(startTime);
81
+ const d2 = dayjs(endTime);
82
+ const diff = d2.diff(d1, "day");
83
+ return [diff <= N ? startTime : dayjs(endTime).subtract(N, "day").format("YYYY-MM-DD HH:mm:ss"), endTime];
84
+ }
85
+ }
86
+ };
@@ -1,216 +1,30 @@
1
- <template>
2
- <div>
3
- <div style="display: flex; align-items: center; gap: 10px">
4
- <el-button @click="stKlineConfigRef?.open">打开K线自定义配置</el-button>
5
- <el-select
6
- v-model="sellBuy"
7
- style="width: 100px"
8
- >
9
- <el-option
10
- v-for="item in [
11
- { label: '买卖', value: 0 },
12
- { label: '开平', value: 1 },
13
- ]"
14
- :key="item.value"
15
- :value="item.value"
16
- :label="item.label"
17
- />
18
- </el-select>
19
- <el-select
20
- v-model="cycle"
21
- style="width: 100px"
22
- >
23
- <el-option
24
- v-for="item in cycleOptions"
25
- :key="item.value"
26
- :value="item.value"
27
- :label="item.label"
28
- />
29
- </el-select>
30
- </div>
31
- <div class="main">
32
- <template v-if="!loading">
33
- <st-klinePlus
34
- :varietyCode="varietyCode"
35
- :varietyStock="varietyStock"
36
- :indicatorStore="indicatorStore"
37
- :userKlineConfig="userKlineConfig"
38
- :cycle="cycle"
39
- :sellBuy="sellBuy"
40
- :rightType="rightType"
41
- :klineType="klineType"
42
- :initTimeRange="initTimeRange"
43
- :mainIndicator="mainIndicator"
44
- :tradeLog="tradeLog"
45
- :netPositionData="netPositionData"
46
- :positionTime="positionTime"
47
- />
48
- </template>
49
- </div>
50
- <st-klineConfig
51
- ref="stKlineConfigRef"
52
- :indicatorStore="indicatorStore"
53
- @callBack="(formJson) => handleUserKlineConfig('update', formJson)"
54
- />
55
- </div>
56
- </template>
57
-
58
1
  <script setup>
59
- import dayjs from "dayjs";
60
- import tradeLogMock from "./tradeLogMock";
61
- import { onMounted, ref, reactive, provide, inject, nextTick } from "vue";
62
-
63
- const { request } = inject("stConfig"); // 组件库全局配置
64
-
65
- const stKlineConfigRef = ref(null);
66
- const loading = ref(true);
67
- const userKlineConfig = reactive({});
68
- provide("userKlineConfig", userKlineConfig);
69
-
70
- const cycleOptions = [
71
- { label: "1m", value: "1" },
72
- { label: "60m", value: "5" },
73
- { label: "1d", value: "6" },
74
- { label: "1mon", value: "8" },
75
- ];
76
-
77
- const varietyName = ref("国债指数");
78
- const varietyCode = ref("Z000012");
79
- const varietyStock = ref(1); // 0: 期货, 1: 股票, 2: 期权
80
- const tradeLog = ref(tradeLogMock);
81
- const netPositionData = ref([]);
82
- const pageType = ref(1);
83
- const cycle = ref("5");
84
- const sellBuy = ref(1);
85
- const rightType = ref(1);
86
- const klineType = ref(0);
87
- const mainIndicator = ref("MA");
88
- const initTimeRange = ref([]);
89
- const positionTime = ref(null);
90
-
91
- const indicatorStore = {
92
- mainIndicatorList: [
93
- { label: "DKX_EMA", value: "DKX_EMA" },
94
- { label: "MA", value: "MA" },
95
- ],
96
- getIndicatorParams: () => {
97
- return ["MA5", "MA10", "MA20", "MA60", "MA120", "MA240", "MA360", "MA720"];
98
- },
99
- };
100
-
101
- // 前端估算K线根数的周期分布
102
- const dayBarsNumByCycle = {
103
- 1: 240, // 每天240根(4小时×60分钟)
104
- 2: 48, // 每天48根(4小时×12根)
105
- 3: 16, // 每天16根(4小时×4根)
106
- 4: 8, // 每天8根(4小时×2根)
107
- 5: 4, // 每天4根(4小时×1根)
108
- 6: 1, // 每天1根
109
- 7: 0.2, // 每周1根(按5个交易日算)
110
- 8: 0.033, // 每月1根(按21个交易日算)
111
- };
112
- // 前端估算大致根数的K线时间
113
- const estimateKlineTime = (time, direction, num, cycle) => {
114
- const dayBarsNum = dayBarsNumByCycle[cycle] || 1;
115
- // 计算需要的大概天数
116
- const daysNeeded = num / dayBarsNum;
2
+ import { ref } from "vue";
3
+ import KlineDialog from "./KlineDialog/index.vue"
117
4
 
118
- let resultTime;
119
- if (direction === "before") {
120
- resultTime = dayjs(time).subtract(daysNeeded, "day");
121
- } else {
122
- resultTime = dayjs(time).add(daysNeeded, "day");
123
- }
124
-
125
- return resultTime.format("YYYY-MM-DD HH:mm:ss");
126
- };
127
- /**
128
- * @description: 根据开始时间, 结束时间, 返回拓展K线根数+校验间隔后的时间范围
129
- * @params
130
- * {
131
- * startTime 开始时间;
132
- * endTime: 结束时间;
133
- * cycle: 周期Id;
134
- *
135
- * type: 类型, 默认reset;
136
- * num: 推算根数, 默认200;
137
- * maxSpan: 一屏上限根数, 默认3000; 这里是因为前端估算忽略了交易日等因素, 所以在计算差值时, 根数的上限可以比常规的一屏上限数量大一些
138
- * }
139
- * @return [startTime, endTime]
140
- */
141
- const getTimeRange = (rest) => {
142
- const params = Object.assign({}, rest, { type: "reset", num: 200, maxSpan: 3000 });
143
- switch (params.type) {
144
- case "week": {
145
- return [dayjs().startOf("week").add(1, "day").format("YYYY-MM-DD HH:mm:ss"), dayjs().endOf("week").add(1, "day").format("YYYY-MM-DD HH:mm:ss")];
146
- }
147
- case "month": {
148
- return [dayjs().startOf("month").format("YYYY-MM-DD HH:mm:ss"), dayjs().endOf("month").format("YYYY-MM-DD HH:mm:ss")];
149
- }
150
- case "reset": {
151
- // 1. 推算根数后的时间范围
152
- const startTime = estimateKlineTime(params.startTime, "before", params.num, params.cycle);
153
- const endTime = estimateKlineTime(params.endTime, "after", params.num, params.cycle);
154
- // 2. 进行N天间隔校验
155
- const N = Math.ceil(params.maxSpan / dayBarsNumByCycle[params.cycle]);
156
- const d1 = dayjs(startTime);
157
- const d2 = dayjs(endTime);
158
- const diff = d2.diff(d1, "day");
159
- return [diff <= N ? startTime : dayjs(endTime).subtract(N, "day").format("YYYY-MM-DD HH:mm:ss"), endTime];
160
- }
161
- }
162
- };
163
- // 用户自定义K线配置(获取, 更新)
164
- const handleUserKlineConfig = async (action, formJson) => {
165
- switch (action) {
166
- case "get": {
167
- const { body } = await request.post("/common/qt/getUserConfig", { appId: 1 });
168
- Object.assign(userKlineConfig, stKlineConfigRef.value?.getDefaultUserKlineConfig(), body ? JSON.parse(body) : {});
169
- break;
170
- }
171
- case "update": {
172
- loading.value = true;
173
- // 更新配置数据
174
- Object.assign(userKlineConfig, JSON.parse(formJson));
175
- // 默认值 [自定义配置]
176
- pageType.value = userKlineConfig.pageType;
177
- cycle.value = userKlineConfig.singelCycle;
178
- sellBuy.value = userKlineConfig.sellBuy;
179
- mainIndicator.value = userKlineConfig.mainIndicator;
180
- nextTick(() => (loading.value = false));
181
- }
182
- }
183
- };
184
-
185
- onMounted(async () => {
186
- loading.value = true;
187
-
188
- await handleUserKlineConfig("get");
5
+ const KlineDialogRef = ref(null);
189
6
 
7
+ // 查看K线弹窗组件
8
+ const openKlineDialog = () => {
190
9
  const params = {
191
- type: "rest",
192
- cycle: cycle.value,
193
- startTime: tradeLog.value[0]?.openTime,
194
- endTime: positionTime.value ? positionTime.value : tradeLog.value.at(-1)?.closeTime,
10
+ analyseId: "6186",
11
+ varietyInfo: {
12
+ index: 0,
13
+ varietyName: "荃银高科",
14
+ varietyCode: "300087",
15
+ ifBasket: 0,
16
+ tradeLog: [],
17
+ },
18
+ varietyList: [],
195
19
  };
196
- initTimeRange.value = getTimeRange(params);
197
-
198
- // 默认值 [自定义配置]
199
- pageType.value = userKlineConfig.pageType;
200
- cycle.value = userKlineConfig.singelCycle;
201
- sellBuy.value = userKlineConfig.sellBuy;
202
- mainIndicator.value = userKlineConfig.mainIndicator;
203
-
204
- setTimeout(() => {
205
- loading.value = false;
206
- }, 200);
207
- });
20
+ KlineDialogRef.value.open(params);
21
+ };
208
22
  </script>
209
23
 
210
- <style lang="scss" scoped>
211
- .main {
212
- width: 1400px;
213
- height: 800px;
214
- background-color: black;
215
- }
216
- </style>
24
+ <template>
25
+ <div>
26
+ <el-button @click="openKlineDialog">打开K线窗口</el-button>
27
+ <!-- K线弹窗 -->
28
+ <KlineDialog ref="KlineDialogRef" />
29
+ </div>
30
+ </template>
@@ -1,6 +0,0 @@
1
- import { s as o } from "./base-a5af3db3.js";
2
- const e = (i) => o ? window.requestAnimationFrame(i) : setTimeout(i, 16), r = (i) => o ? window.cancelAnimationFrame(i) : clearTimeout(i);
3
- export {
4
- r as c,
5
- e as r
6
- };