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
@@ -1,110 +0,0 @@
1
- <!-- 右键菜单组件 -->
2
- <template>
3
- <div
4
- ref="contextmenuRef"
5
- class="contextmenu"
6
- @contextmenu="openContextMenuContent"
7
- @mouseleave="closeContextMenuContent"
8
- >
9
- <slot />
10
- <div
11
- ref="contextmenuContentRef"
12
- v-if="contextmenuContentStyle.display !== 'none'"
13
- class="contextmenu-popover"
14
- :style="contextmenuContentStyle"
15
- >
16
- <slot name="popover" />
17
- </div>
18
- </div>
19
- </template>
20
-
21
- <script setup lang="ts">
22
- import { ref, nextTick } from 'vue'
23
-
24
- // 接收传入的自定义事件函数
25
- const emits = defineEmits(['closeContextMenuCallBack'])
26
-
27
- // 组件Ref
28
- const contextmenuRef = ref()
29
-
30
- // 悬浮菜单Ref
31
- const contextmenuContentRef = ref()
32
- // 悬浮菜单样式
33
- const contextmenuContentStyle = ref({
34
- display: 'none',
35
- top: '0px',
36
- left: '0px',
37
- })
38
-
39
- /**
40
- * @description: 关闭悬浮菜单
41
- * @todo: 支持触发传入的回调函数
42
- */
43
- const closeContextMenuContent = () => {
44
- contextmenuContentStyle.value.display = 'none'
45
- emits('closeContextMenuCallBack')
46
- document.removeEventListener('click', closeContextMenuContent)
47
- }
48
-
49
- /**
50
- * @description: 右键点击
51
- * @todo: 打开悬浮菜单
52
- */
53
- const openContextMenuContent = (el: MouseEvent) => {
54
- // 1.阻止默认事件 + 冒泡
55
- el.preventDefault()
56
- el.stopPropagation()
57
- /**
58
- * @todo: 解决在悬浮菜单已经打开时,右键菜单项,重复触发本函数导致菜单位置异常问题
59
- */
60
- if (contextmenuContentStyle.value.display === 'block') {
61
- // 判断鼠标位置是否在悬浮菜单内,如果是,则return,否则继续执行在新的位置打开
62
- const { offsetX, offsetY } = el // 鼠标
63
- const { offsetWidth, offsetHeight } = contextmenuContentRef.value
64
- if (offsetX <= offsetWidth && offsetY <= offsetHeight) {
65
- return
66
- }
67
- }
68
- contextmenuRef.value.click()
69
- // 2.初始化展示悬浮菜单位置
70
- contextmenuContentStyle.value = {
71
- display: 'block',
72
- top: `${el.offsetY}px`,
73
- left: `${el.offsetX}px`,
74
- }
75
- // 3.计算悬浮菜单是否超出范围
76
- nextTick(() => {
77
- const { bottom, height, right, width } = contextmenuContentRef.value.getBoundingClientRect()
78
- if (bottom > window.innerHeight) {
79
- // 高度超出
80
- contextmenuContentStyle.value = {
81
- display: 'block',
82
- top: `${el.offsetY - height}px`,
83
- left: `${el.offsetX}px`,
84
- }
85
- } else if (right > window.innerWidth) {
86
- // 宽度超出
87
- contextmenuContentStyle.value = {
88
- display: 'block',
89
- top: `${el.offsetY}px`,
90
- left: `${el.offsetX - width}px`,
91
- }
92
- }
93
- })
94
- // 4.监听点击事件 -> 调用关闭悬浮菜单事件
95
- document.addEventListener('click', closeContextMenuContent)
96
- }
97
- </script>
98
-
99
- <style lang="scss" scoped>
100
- .contextmenu {
101
- position: relative;
102
- width: 100%;
103
- height: 100%;
104
- &-popover {
105
- position: absolute;
106
- z-index: 10;
107
- display: none;
108
- }
109
- }
110
- </style>
@@ -1,40 +0,0 @@
1
- <template>
2
- <div class="st-kline-tips">
3
- <div class="st-kline-tips-row">
4
- <div
5
- v-for="item in data"
6
- class="st-kline-tips-row-item"
7
- :style="{ color: item.color }"
8
- >
9
- {{ item.label }} {{ item.value }}
10
- </div>
11
- </div>
12
- </div>
13
- </template>
14
-
15
- <script setup lang="ts">
16
- interface dataType {
17
- label: string
18
- value: any
19
- color: string
20
- }
21
- const props = defineProps({
22
- // 提示数据
23
- data: {
24
- type: Array as () => dataType[],
25
- default: () => [],
26
- },
27
- })
28
- </script>
29
-
30
- <style lang="scss" scoped>
31
- .st-kline-tips {
32
- font-size: 12px;
33
- &-row {
34
- &-item {
35
- display: inline-block;
36
- margin-right: 10px;
37
- }
38
- }
39
- }
40
- </style>
@@ -1,155 +0,0 @@
1
- <template>
2
- <div class="klineSlide" ref="slideChartRef"></div>
3
- </template>
4
-
5
- <script setup>
6
- import { ref, watch, onMounted, onUnmounted } from 'vue'
7
- import * as echarts from 'echarts'
8
-
9
- let slideChart
10
- let resizeRo // dom元素监听事件
11
- let slideDataZoomTimer = null // 滑动图数据缩放定时器
12
-
13
- const emit = defineEmits(['change'])
14
- const props = defineProps({
15
- data: { type: Array, default: () => [] }, // 时间数据
16
- })
17
-
18
- const slideChartRef = ref() // 拖动轴
19
-
20
- watch(
21
- () => props.data,
22
- () => {
23
- draw()
24
- },
25
- { deep: true },
26
- )
27
-
28
- onMounted(() => {
29
- slideChart = echarts.init(slideChartRef.value)
30
- addEventListener()
31
- draw()
32
- // 绑定resize事件
33
- let isFirst = true
34
- resizeRo = new ResizeObserver(() => {
35
- if (isFirst) {
36
- isFirst = null
37
- return
38
- }
39
- slideChart.resize()
40
- })
41
- resizeRo.observe(slideChartRef.value)
42
- })
43
-
44
- onUnmounted(() => {
45
- slideChart.off("datazoom");
46
- slideChart.dispose()
47
- resizeRo.disconnect()
48
- resizeRo = null
49
- })
50
-
51
- // 绑定事件
52
- const addEventListener = () => {
53
- slideChart.on('datazoom', params => {
54
- if(!params.dataZoomId) return
55
- clearTimeout(slideDataZoomTimer)
56
- slideDataZoomTimer = setTimeout(() => {
57
- const { data } = props
58
- const { start, end } = params
59
- const startIndex = Math.floor(start * data.length / 100)
60
- const endIndex = end === 100 ? data.length - 1 : Math.floor(end * data.length / 100)
61
- change(startIndex, endIndex)
62
- clearTimeout(slideDataZoomTimer)
63
- }, 100)
64
- })
65
- }
66
-
67
- // 拖动回调
68
- const change = (startIndex, endIndex) => {
69
- const data = props.data
70
- if (data.length === 0) return
71
- const startTime = data[startIndex][0].split(' ')[0]
72
- const endTime = data[endIndex][0].split(' ')[0]
73
- emit('change', {
74
- startTime: `${startTime} 00:00:00`,
75
- endTime: `${endTime} 24:00:00`,
76
- })
77
- }
78
-
79
- const draw = () => {
80
- const { data } = props
81
- if(data.length === 0) return
82
- const xAxisData = data.map(item => item[0].split(' ')[0])
83
- const lineData = data.map(item => item[1])
84
- slideChart.setOption({
85
- grid: {
86
- height: 0,
87
- left: '80px',
88
- right: '80px',
89
- },
90
- xAxis: {
91
- type: 'category',
92
- data: xAxisData,
93
- show: false,
94
- },
95
- yAxis: {
96
- type: 'value'
97
- },
98
- series: [
99
- {
100
- data: lineData,
101
- type: 'line'
102
- }
103
- ]
104
- }, true)
105
- }
106
-
107
- defineExpose({
108
- resetSlide: (startTime, endTime, maxValueSpan) => {
109
- let slideStartIndex = -1
110
- let slideEndIndex = -1
111
- props.data.forEach((item, index) => {
112
- if (slideStartIndex === -1 && item[0] === startTime) {
113
- slideStartIndex = index
114
- } else if (slideStartIndex === -1 && new Date(item[0]) > new Date(startTime)) {
115
- slideStartIndex = index - 1
116
- }
117
- if (slideEndIndex === -1 && item[0] === endTime) {
118
- slideEndIndex = index
119
- } else if (slideEndIndex === -1 && new Date(item[0]) > new Date(endTime)) {
120
- slideEndIndex = index
121
- }
122
- })
123
- slideEndIndex = slideEndIndex === -1 ? props.data.length - 1 : slideEndIndex
124
- slideChart.setOption({
125
- dataZoom: [
126
- {
127
- show: true,
128
- startValue: slideStartIndex,
129
- endValue: slideEndIndex,
130
- maxValueSpan,
131
- textStyle: {
132
- color: '#ccc',
133
- }
134
- },
135
- {
136
- type: 'inside',
137
- startValue: slideStartIndex,
138
- endValue: slideEndIndex,
139
- maxValueSpan,
140
- }
141
- ],
142
- })
143
- }, // 重置
144
- resize: () => {
145
- slideChart?.resize()
146
- }
147
- })
148
- </script>
149
-
150
- <style lang="scss" scoped>
151
- .klineSlide {
152
- width: 100%;
153
- height: 50px;
154
- }
155
- </style>
@@ -1,297 +0,0 @@
1
- <template>
2
- <div class="klineSub">
3
- <div class="klineSub-tips">
4
- <div
5
- class="klineSub-tips-select"
6
- v-if="subIndicatorTips.length"
7
- >
8
- <el-select
9
- v-model="subIndicator"
10
- size="small"
11
- popper-class="element-dark"
12
- class="element-dark subIndicator"
13
- >
14
- <el-option
15
- v-for="item in subIndicatorList"
16
- :key="item.value"
17
- :label="item.label"
18
- :value="item.value"
19
- />
20
- </el-select>
21
- </div>
22
- <Tips :data="subIndicatorTips" />
23
- </div>
24
- <div
25
- class="klineSub-chart"
26
- ref="subChartRef"
27
- ></div>
28
- </div>
29
- </template>
30
-
31
- <script setup>
32
- import { ref, onMounted, onUnmounted, nextTick, computed } from "vue";
33
- import * as echarts from "echarts";
34
- import Tips from "../Tips/index.vue";
35
- import { stMath } from "st-func";
36
- const { round } = stMath;
37
-
38
- let subChart;
39
- let resizeRo; // dom元素监听事件
40
-
41
- const emit = defineEmits(["update:modelValue"]);
42
- const props = defineProps({
43
- data: { type: Object, require: true },
44
- activeIndex: { type: [Number, String], require: true },
45
- modelValue: { type: String, required: true }, // 副图指标
46
- subIndicatorList: { type: Array, required: true }, // 副图指标列表
47
- });
48
-
49
- const subChartRef = ref(); // 拖动轴
50
- const subIndicator = computed({
51
- get() {
52
- return props.modelValue;
53
- },
54
- set(val) {
55
- emit("update:modelValue", val);
56
- },
57
- });
58
-
59
- const subIndicatorTips = computed(() => {
60
- const { data, activeIndex } = props;
61
- return data?.subIndicator?.map((item) => ({ label: item.key, color: item.color, value: item.data[activeIndex] || "-" })) || [];
62
- });
63
- onMounted(() => {
64
- subChart = echarts.init(subChartRef.value);
65
- // 绑定resize事件
66
- let isFirst = true;
67
- resizeRo = new ResizeObserver(() => {
68
- if (isFirst) {
69
- isFirst = null;
70
- return;
71
- }
72
- subChart.resize();
73
- });
74
- resizeRo.observe(subChartRef.value);
75
- });
76
-
77
- onUnmounted(() => {
78
- subChart.dispose();
79
- resizeRo.disconnect();
80
- resizeRo = null;
81
- });
82
-
83
- // 获取副图颜色
84
- const getSubBarStyle = (data, index) => {
85
- const itemData = data[index];
86
- const preItemData = index === 0 ? data[index] : data[index - 1];
87
- if (itemData[0] === itemData[1]) {
88
- return itemData[0] >= preItemData[1]
89
- ? {
90
- color: "transparent",
91
- borderColor: "#FF0000",
92
- }
93
- : {
94
- color: "#00FFFF",
95
- };
96
- } else {
97
- return itemData[1] > itemData[0]
98
- ? {
99
- color: "transparent",
100
- borderColor: "#FF0000",
101
- }
102
- : {
103
- color: "#00FFFF",
104
- };
105
- }
106
- };
107
-
108
- defineExpose({
109
- connect: (chart) => {
110
- echarts.connect([chart, subChart]);
111
- }, // 联动
112
- draw: (drawConfig, config) => {
113
- nextTick(() => {
114
- const { startValue, endValue, maxValueSpan } = drawConfig;
115
- const { leftYAxisRange, rightYAxisRange } = props.data.subIndicator[0];
116
- const series = props.data.subIndicator.map((item) => {
117
- if (item.series === "bar") {
118
- return {
119
- name: "subMain",
120
- xAxisIndex: 0,
121
- yAxisIndex: 1,
122
- type: "bar",
123
- silent: true,
124
- symbol: "none",
125
- data: item.data.map((val, index) => {
126
- if (item.seriesColor === "kline") {
127
- return {
128
- value: val,
129
- itemStyle: getSubBarStyle(props.data.data, index),
130
- };
131
- } else if (item.seriesColor === "value") {
132
- return {
133
- value: val,
134
- itemStyle: {
135
- color: val >= 0 ? "#FF0000" : "#00FFFF",
136
- },
137
- };
138
- } else {
139
- return {
140
- value: val,
141
- itemStyle: {
142
- color: item.seriesColor,
143
- },
144
- };
145
- }
146
- }),
147
- };
148
- } else if (item.series === "line") {
149
- return {
150
- xAxisIndex: 0,
151
- yAxisIndex: item.yAxis === "right" ? 2 : 1,
152
- name: item.key,
153
- type: "line",
154
- silent: true,
155
- symbol: "none",
156
- data: item.data,
157
- lineStyle: {
158
- width: 1,
159
- },
160
- itemStyle: {
161
- color: item.color,
162
- },
163
- };
164
- }
165
- });
166
-
167
- subChart.setOption(
168
- {
169
- animation: false,
170
- grid: {
171
- left: `${config.gridLeft}px`,
172
- top: "10px",
173
- right: `${config.gridRight}px`,
174
- bottom: "20px",
175
- },
176
- dataZoom: [
177
- {
178
- type: "inside",
179
- startValue,
180
- endValue,
181
- maxValueSpan,
182
- },
183
- ],
184
- tooltip: {
185
- trigger: "axis",
186
- appendToBody: true,
187
- confine: true,
188
- axisPointer: {
189
- type: "cross",
190
- label: {
191
- rich: {},
192
- formatter: (data) => {
193
- const { axisDimension, value } = data;
194
- if (axisDimension === "x") {
195
- return value;
196
- } else if (data.axisIndex === 1) {
197
- return String(round(value));
198
- }
199
- },
200
- },
201
- },
202
- formatter: () => "",
203
- },
204
- xAxis: {
205
- type: "category",
206
- data: props.data.time,
207
- axisLine: {
208
- show: true,
209
- },
210
- splitLine: {
211
- show: false,
212
- },
213
- axisLabel: {
214
- show: true,
215
- formatter: (data) => data,
216
- },
217
- },
218
- yAxis: [
219
- {
220
- position: "right",
221
- },
222
- {
223
- position: "left",
224
- min: leftYAxisRange === "cover" ? (value) => value.min : null,
225
- max: leftYAxisRange === "cover" ? (value) => value.max : null,
226
- splitNumber: 1,
227
- axisLine: {
228
- show: true,
229
- },
230
- splitLine: {
231
- show: true,
232
- lineStyle: {
233
- type: "dotted",
234
- color: "#333",
235
- },
236
- },
237
- },
238
- {
239
- position: "right",
240
- min: rightYAxisRange === "cover" ? (value) => value.min : null,
241
- max: rightYAxisRange === "cover" ? (value) => value.max : null,
242
- splitNumber: 1,
243
- axisLine: {
244
- show: false,
245
- },
246
- splitLine: {
247
- show: false,
248
- },
249
- axisLabel: {
250
- show: false,
251
- },
252
- },
253
- ],
254
- series,
255
- },
256
- true
257
- );
258
- });
259
- }, // 重置
260
- });
261
- </script>
262
-
263
- <style lang="scss" scoped>
264
- .klineSub {
265
- width: 100%;
266
- height: 100%;
267
- &-tips {
268
- height: 16px;
269
- padding-left: 6px;
270
- display: flex;
271
- align-items: start;
272
- &-select {
273
- margin-right: 6px;
274
- line-height: 12px;
275
- :deep(.el-select__selection) {
276
- display: none;
277
- }
278
- :deep(.el-select__wrapper) {
279
- padding: 0;
280
- width: 12px;
281
- height: 12px;
282
- min-height: 12px;
283
- border-radius: 50%;
284
- background-color: #ccc;
285
- }
286
- :deep(.el-select__icon) {
287
- color: black;
288
- font-size: 12px;
289
- }
290
- }
291
- }
292
- &-chart {
293
- width: 100%;
294
- height: calc(100% - 26px);
295
- }
296
- }
297
- </style>
@@ -1,66 +0,0 @@
1
- <template>
2
- <div class="kline-tips">
3
- <Tips :data="mainTips" />
4
- <Tips :data="mainIndicatorTips" />
5
- </div>
6
- </template>
7
-
8
- <script setup>
9
- import { computed } from "vue";
10
- import Tips from "../Tips/index.vue";
11
- import { stMath } from "st-func";
12
- const { round, formatValue } = stMath;
13
-
14
- const props = defineProps({
15
- // 提示数据
16
- data: {
17
- type: Object,
18
- require: true,
19
- },
20
- activeIndex: {
21
- type: [Number, String],
22
- require: true,
23
- },
24
- });
25
-
26
- const mainTips = computed(() => {
27
- const { data, activeIndex } = props;
28
- if (data.data && data.data[activeIndex]) {
29
- const itemData = data.data[activeIndex];
30
- const result = [
31
- { label: "开", value: round(itemData[0]) },
32
- { label: "高", value: round(itemData[3]) },
33
- { label: "低", value: round(itemData[2]) },
34
- { label: "收", value: round(itemData[1]) },
35
- ];
36
- // 特殊: 交易总额
37
- itemData[4] !== null && result.push({ label: "额", value: formatValue(itemData[4]) });
38
- // 特殊: 涨跌幅 公式:收盘价 - 昨收 / (昨收绝对值)
39
- let diffColor;
40
- if (itemData[6] > 0) {
41
- diffColor = "red";
42
- } else if (itemData[6] < 0) {
43
- diffColor = "green";
44
- }
45
- result.push({ label: "涨跌", value: `${round(itemData[6])}%`, color: diffColor });
46
- return result;
47
- }
48
- return [];
49
- });
50
-
51
- const mainIndicatorTips = computed(() => {
52
- const { data, activeIndex } = props;
53
- return (
54
- data?.mainIndicator?.map((item) => {
55
- return { label: item.key, value: round(item.data[activeIndex]), color: item.color };
56
- }) || []
57
- );
58
- });
59
- </script>
60
-
61
- <style lang="scss" scoped>
62
- .kline-tips {
63
- padding-left: 3px;
64
- width: 100%;
65
- }
66
- </style>