@ -30,7 +30,9 @@
< table class = "hmt" >
< table class = "hmt" >
< thead >
< thead >
< tr >
< tr >
< th style = "width: 80px; text-align: left; padding: 4px 10px; font-size: 10px" > 2 级行业 < / th >
< th style = "width: 80px; text-align: left; padding: 4px 10px; font-size: 10px" >
2 级行业
< / th >
< th v-for ="d in dates" :key ="d" > {{ d }} < / th >
< th v-for ="d in dates" :key ="d" > {{ d }} < / th >
< / tr >
< / tr >
< / thead >
< / thead >
@ -76,8 +78,15 @@
< / thead >
< / thead >
< tbody >
< tbody >
< tr v-for ="row in heatmapData" :key="row.industry" >
< tr v-for ="row in heatmapData" :key="row.industry" >
< td > < b > { { row . industry } } < / b > < / td >
< td >
< td v-for ="(rank, idx) in row.ranks" :key="idx" style="text-align: center" :class="rankColorClass(rank, row.ranks)" >
< b > { { row . industry } } < / b >
< / td >
< td
v - for = "(rank, idx) in row.ranks"
: key = "idx"
style = "text-align: center"
: class = "rankColorClass(rank, row.ranks)"
>
{ { rank } }
{ { rank } }
< / td >
< / td >
< td :class ="trendClass(row)" >
< td :class ="trendClass(row)" >
@ -101,12 +110,30 @@
< / div >
< / div >
< div class = "mbd" >
< div class = "mbd" >
< div class = "detailrow" >
< div class = "detailrow" >
< div class = "stat-card" > < div class = "sl" > 当前动量 < / div > < div class = "sv" > 12.34 < / div > < / div >
< div class = "stat-card" >
< div class = "stat-card" > < div class = "sl" > 近5日趋势 < / div > < div class = "sv" > 持续上升 < / div > < / div >
< div class = "sl" > 当前动量 < / div >
< div class = "stat-card" > < div class = "sl" > 涨停家数 < / div > < div class = "sv" > 3 < / div > < / div >
< div class = "sv" > 12.34 < / div >
< div class = "stat-card" > < div class = "sl" > 创新高 < / div > < div class = "sv" > 7 < / div > < / div >
< / div >
< div class = "stat-card" > < div class = "sl" > 连续天数 < / div > < div class = "sv" > 5 天 < / div > < / div >
< div class = "stat-card" >
< div class = "stat-card" > < div class = "sl" > 平均排名 < / div > < div class = "sv" > 2.4 < / div > < / div >
< div class = "sl" > 近5日趋势 < / div >
< div class = "sv" > 持续上升 < / div >
< / div >
< div class = "stat-card" >
< div class = "sl" > 涨停家数 < / div >
< div class = "sv" > 3 < / div >
< / div >
< div class = "stat-card" >
< div class = "sl" > 创新高 < / div >
< div class = "sv" > 7 < / div >
< / div >
< div class = "stat-card" >
< div class = "sl" > 连续天数 < / div >
< div class = "sv" > 5 天 < / div >
< / div >
< div class = "stat-card" >
< div class = "sl" > 平均排名 < / div >
< div class = "sv" > 2.4 < / div >
< / div >
< / div >
< / div >
< div id = "heatmap-kline" class = "kline-container" > < / div >
< div id = "heatmap-kline" class = "kline-container" > < / div >
< / div >
< / div >
@ -129,7 +156,18 @@ const selectedDate = ref('2025-04-22')
const viewMode = ref < 'hm' | 'tb' > ( 'hm' )
const viewMode = ref < 'hm' | 'tb' > ( 'hm' )
/ / D a t e s
/ / D a t e s
const dates = [ '04-22' , '04-21' , '04-18' , '04-17' , '04-16' , '04-15' , '04-14' , '04-11' , '04-10' , '04-09' ]
const dates = [
'04-22' ,
'04-21' ,
'04-18' ,
'04-17' ,
'04-16' ,
'04-15' ,
'04-14' ,
'04-11' ,
'04-10' ,
'04-09' ,
]
/ / H e a t m a p d a t a
/ / H e a t m a p d a t a
interface HeatmapRow {
interface HeatmapRow {
@ -141,25 +179,90 @@ interface HeatmapRow {
const heatmapData = ref < HeatmapRow [ ] > ( [
const heatmapData = ref < HeatmapRow [ ] > ( [
{ industry : '零售' , ranks : [ 1 , 1 , 1 , 3 , 8 , 10 , 2 , 5 , 8 , 8 ] , trend : - 7 , trendText : '下降 7位' } ,
{ industry : '零售' , ranks : [ 1 , 1 , 1 , 3 , 8 , 10 , 2 , 5 , 8 , 8 ] , trend : - 7 , trendText : '下降 7位' } ,
{ industry : '化学制药' , ranks : [ 2 , 4 , 5 , 5 , 6 , 2 , 3 , 3 , 7 , 11 ] , trend : - 9 , trendText : '下降 9位' } ,
{
industry : '化学制药' ,
ranks : [ 2 , 4 , 5 , 5 , 6 , 2 , 3 , 3 , 7 , 11 ] ,
trend : - 9 ,
trendText : '下降 9位' ,
} ,
{ industry : '食品' , ranks : [ 3 , 2 , 2 , 1 , 2 , 5 , 5 , 2 , 2 , 2 ] , trend : 1 , trendText : '上升 1位' } ,
{ industry : '食品' , ranks : [ 3 , 2 , 2 , 1 , 2 , 5 , 5 , 2 , 2 , 2 ] , trend : 1 , trendText : '上升 1位' } ,
{ industry : '畜牧业' , ranks : [ 4 , 3 , 9 , 4 , 4 , 1 , 4 , 7 , 5 , 3 ] , trend : 1 , trendText : '上升 1位' } ,
{ industry : '畜牧业' , ranks : [ 4 , 3 , 9 , 4 , 4 , 1 , 4 , 7 , 5 , 3 ] , trend : 1 , trendText : '上升 1位' } ,
{ industry : '贵金属' , ranks : [ 5 , 6 , 4 , 2 , 3 , 6 , 10 , 1 , 6 , 6 ] , trend : - 1 , trendText : '下降 1位' } ,
{ industry : '贵金属' , ranks : [ 5 , 6 , 4 , 2 , 3 , 6 , 10 , 1 , 6 , 6 ] , trend : - 1 , trendText : '下降 1位' } ,
{ industry : '生物医药' , ranks : [ 6 , 5 , 6 , 7 , 5 , 4 , 1 , 4 , 3 , 5 ] , trend : 1 , trendText : '上升 1位' } ,
{ industry : '生物医药' , ranks : [ 6 , 5 , 6 , 7 , 5 , 4 , 1 , 4 , 3 , 5 ] , trend : 1 , trendText : '上升 1位' } ,
{ industry : '物流' , ranks : [ 7 , 11 , 15 , 12 , 18 , 14 , 12 , 10 , 12 , 15 ] , trend : - 8 , trendText : '下降 8位' } ,
{
industry : '物流' ,
ranks : [ 7 , 11 , 15 , 12 , 18 , 14 , 12 , 10 , 12 , 15 ] ,
trend : - 8 ,
trendText : '下降 8位' ,
} ,
{ industry : '半导体' , ranks : [ 8 , 7 , 7 , 6 , 7 , 3 , 6 , 8 , 4 , 4 ] , trend : 4 , trendText : '上升 4位' } ,
{ industry : '半导体' , ranks : [ 8 , 7 , 7 , 6 , 7 , 3 , 6 , 8 , 4 , 4 ] , trend : 4 , trendText : '上升 4位' } ,
{ industry : '化学制品' , ranks : [ 9 , 8 , 3 , 8 , 10 , 8 , 3 , 6 , 9 , 9 ] , trend : 0 , trendText : '下降 0位' } ,
{ industry : '化学制品' , ranks : [ 9 , 8 , 3 , 8 , 10 , 8 , 3 , 6 , 9 , 9 ] , trend : 0 , trendText : '下降 0位' } ,
{ industry : '商业物业' , ranks : [ 10 , 9 , 8 , 10 , 9 , 7 , 7 , 15 , 11 , 12 ] , trend : - 2 , trendText : '下降 2位' } ,
{
{ industry : '软件开发' , ranks : [ 15 , 12 , 10 , 9 , 11 , 9 , 8 , 9 , 10 , 10 ] , trend : 5 , trendText : '上升 5位' } ,
industry : '商业物业' ,
{ industry : '新能源' , ranks : [ 20 , 18 , 14 , 11 , 12 , 11 , 9 , 11 , 14 , 13 ] , trend : 7 , trendText : '上升 7位' } ,
ranks : [ 10 , 9 , 8 , 10 , 9 , 7 , 7 , 15 , 11 , 12 ] ,
{ industry : '传媒' , ranks : [ 25 , 22 , 18 , 15 , 14 , 12 , 11 , 12 , 15 , 14 ] , trend : 11 , trendText : '上升 11位' } ,
trend : - 2 ,
{ industry : '银行' , ranks : [ 12 , 14 , 12 , 14 , 15 , 13 , 14 , 13 , 13 , 11 ] , trend : 1 , trendText : '上升 1位' } ,
trendText : '下降 2位' ,
{ industry : '房地产' , ranks : [ 18 , 20 , 22 , 18 , 16 , 18 , 15 , 14 , 18 , 16 ] , trend : 2 , trendText : '上升 2位' } ,
} ,
{ industry : '汽车' , ranks : [ 14 , 15 , 16 , 16 , 13 , 15 , 13 , 18 , 16 , 18 ] , trend : - 4 , trendText : '下降 4位' } ,
{
{ industry : '电子器件' , ranks : [ 16 , 16 , 11 , 13 , 20 , 16 , 16 , 16 , 20 , 17 ] , trend : - 1 , trendText : '下降 1位' } ,
industry : '软件开发' ,
{ industry : '饮料' , ranks : [ 11 , 10 , 13 , 20 , 22 , 20 , 18 , 17 , 17 , 19 ] , trend : - 8 , trendText : '下降 8位' } ,
ranks : [ 15 , 12 , 10 , 9 , 11 , 9 , 8 , 9 , 10 , 10 ] ,
{ industry : '建筑装饰' , ranks : [ 22 , 19 , 20 , 22 , 25 , 22 , 20 , 19 , 22 , 20 ] , trend : 2 , trendText : '上升 2位' } ,
trend : 5 ,
{ industry : '通信' , ranks : [ 30 , 28 , 25 , 25 , 28 , 25 , 22 , 20 , 25 , 22 ] , trend : 8 , trendText : '上升 8位' } ,
trendText : '上升 5位' ,
} ,
{
industry : '新能源' ,
ranks : [ 20 , 18 , 14 , 11 , 12 , 11 , 9 , 11 , 14 , 13 ] ,
trend : 7 ,
trendText : '上升 7位' ,
} ,
{
industry : '传媒' ,
ranks : [ 25 , 22 , 18 , 15 , 14 , 12 , 11 , 12 , 15 , 14 ] ,
trend : 11 ,
trendText : '上升 11位' ,
} ,
{
industry : '银行' ,
ranks : [ 12 , 14 , 12 , 14 , 15 , 13 , 14 , 13 , 13 , 11 ] ,
trend : 1 ,
trendText : '上升 1位' ,
} ,
{
industry : '房地产' ,
ranks : [ 18 , 20 , 22 , 18 , 16 , 18 , 15 , 14 , 18 , 16 ] ,
trend : 2 ,
trendText : '上升 2位' ,
} ,
{
industry : '汽车' ,
ranks : [ 14 , 15 , 16 , 16 , 13 , 15 , 13 , 18 , 16 , 18 ] ,
trend : - 4 ,
trendText : '下降 4位' ,
} ,
{
industry : '电子器件' ,
ranks : [ 16 , 16 , 11 , 13 , 20 , 16 , 16 , 16 , 20 , 17 ] ,
trend : - 1 ,
trendText : '下降 1位' ,
} ,
{
industry : '饮料' ,
ranks : [ 11 , 10 , 13 , 20 , 22 , 20 , 18 , 17 , 17 , 19 ] ,
trend : - 8 ,
trendText : '下降 8位' ,
} ,
{
industry : '建筑装饰' ,
ranks : [ 22 , 19 , 20 , 22 , 25 , 22 , 20 , 19 , 22 , 20 ] ,
trend : 2 ,
trendText : '上升 2位' ,
} ,
{
industry : '通信' ,
ranks : [ 30 , 28 , 25 , 25 , 28 , 25 , 22 , 20 , 25 , 22 ] ,
trend : 8 ,
trendText : '上升 8位' ,
} ,
] )
] )
/ / M o d a l
/ / M o d a l
@ -202,7 +305,24 @@ function initDetailChart() {
title : { text : 'K线示意' , textStyle : { color : '#e6edf3' , fontSize : 11 } } ,
title : { text : 'K线示意' , textStyle : { color : '#e6edf3' , fontSize : 11 } } ,
grid : { left : 50 , right : 20 , top : 30 , bottom : 20 } ,
grid : { left : 50 , right : 20 , top : 30 , bottom : 20 } ,
xAxis : {
xAxis : {
data : [ '04-01' , '04-02' , '04-03' , '04-04' , '04-05' , '04-08' , '04-09' , '04-10' , '04-11' , '04-14' , '04-15' , '04-16' , '04-17' , '04-18' , '04-21' , '04-22' ] ,
data : [
'04-01' ,
'04-02' ,
'04-03' ,
'04-04' ,
'04-05' ,
'04-08' ,
'04-09' ,
'04-10' ,
'04-11' ,
'04-14' ,
'04-15' ,
'04-16' ,
'04-17' ,
'04-18' ,
'04-21' ,
'04-22' ,
] ,
axisLine : { lineStyle : { color : '#30363d' } } ,
axisLine : { lineStyle : { color : '#30363d' } } ,
axisLabel : { color : '#8b949e' } ,
axisLabel : { color : '#8b949e' } ,
} ,
} ,
@ -210,17 +330,29 @@ function initDetailChart() {
splitLine : { lineStyle : { color : '#21262d' } } ,
splitLine : { lineStyle : { color : '#21262d' } } ,
axisLabel : { color : '#8b949e' } ,
axisLabel : { color : '#8b949e' } ,
} ,
} ,
series : [ {
series : [
type : 'candlestick' ,
{
data : [
type : 'candlestick' ,
[ 10 , 11 , 9.5 , 10.5 ] , [ 10.5 , 11.5 , 10 , 11 ] , [ 11 , 12 , 10.5 , 11.5 ] ,
data : [
[ 11.5 , 12.5 , 11 , 12 ] , [ 12 , 13 , 11.5 , 12.5 ] , [ 12.5 , 13.5 , 12 , 13 ] ,
[ 10 , 11 , 9.5 , 10.5 ] ,
[ 13 , 14 , 12.5 , 13.5 ] , [ 13.5 , 14.5 , 13 , 14 ] , [ 14 , 15 , 13.5 , 14.5 ] ,
[ 10.5 , 11.5 , 10 , 11 ] ,
[ 14.5 , 15.5 , 14 , 15 ] , [ 15 , 16 , 14.5 , 15.5 ] , [ 15.5 , 16.5 , 15 , 16 ] ,
[ 11 , 12 , 10.5 , 11.5 ] ,
[ 16 , 17 , 15.5 , 16.5 ] , [ 16.5 , 17.5 , 16 , 17 ] , [ 17 , 18 , 16.5 , 17.5 ] ,
[ 11.5 , 12.5 , 11 , 12 ] ,
[ 17.5 , 18.5 , 17 , 18 ] ,
[ 12 , 13 , 11.5 , 12.5 ] ,
] ,
[ 12.5 , 13.5 , 12 , 13 ] ,
} ] ,
[ 13 , 14 , 12.5 , 13.5 ] ,
[ 13.5 , 14.5 , 13 , 14 ] ,
[ 14 , 15 , 13.5 , 14.5 ] ,
[ 14.5 , 15.5 , 14 , 15 ] ,
[ 15 , 16 , 14.5 , 15.5 ] ,
[ 15.5 , 16.5 , 15 , 16 ] ,
[ 16 , 17 , 15.5 , 16.5 ] ,
[ 16.5 , 17.5 , 16 , 17 ] ,
[ 17 , 18 , 16.5 , 17.5 ] ,
[ 17.5 , 18.5 , 17 , 18 ] ,
] ,
} ,
] ,
} )
} )
}
}
< / script >
< / script >
@ -316,7 +448,9 @@ function initDetailChart() {
padding : 4 px 2 px ;
padding : 4 px 2 px ;
min - width : 44 px ;
min - width : 44 px ;
cursor : pointer ;
cursor : pointer ;
transition : transform 0.1 s , box - shadow 0.1 s ;
transition :
transform 0.1 s ,
box - shadow 0.1 s ;
& : hover {
& : hover {
transform : scale ( 1.06 ) ;
transform : scale ( 1.06 ) ;
@ -330,17 +464,50 @@ function initDetailChart() {
}
}
}
}
. h1 { background : linear - gradient ( 135 deg , # ff4444 , # cc0000 ) ; color : # fff ; }
. h1 {
. h2 { background : linear - gradient ( 135 deg , # ff6b6b , # e04040 ) ; color : # fff ; }
background : linear - gradient ( 135 deg , # ff4444 , # cc0000 ) ;
. h3 { background : linear - gradient ( 135 deg , # ff9a76 , # d94f4f ) ; color : # fff ; }
color : # fff ;
. h4 { background : linear - gradient ( 135 deg , # ffa502 , # c77f00 ) ; color : # fff ; }
}
. h5 { background : linear - gradient ( 135 deg , # e3b341 , # b8911a ) ; color : # 333 ; }
. h2 {
. h6 { background : linear - gradient ( 135 deg , # e6d34a , # c4b538 ) ; color : # 333 ; }
background : linear - gradient ( 135 deg , # ff6b6b , # e04040 ) ;
. h7 { background : linear - gradient ( 135 deg , # 8 bda5e , # 5 fb32e ) ; color : # fff ; }
color : # fff ;
. h8 { background : linear - gradient ( 135 deg , # 4 dd08b , # 28 a360 ) ; color : # fff ; }
}
. h9 { background : linear - gradient ( 135 deg , # 36 b37e , # 1 e8c5e ) ; color : # fff ; }
. h3 {
. h10 { background : linear - gradient ( 135 deg , # 2 d9cdb , # 1 a7ab5 ) ; color : # fff ; }
background : linear - gradient ( 135 deg , # ff9a76 , # d94f4f ) ;
. hd { background : var ( -- bg2 ) ; color : var ( -- t2 ) ; }
color : # fff ;
}
. h4 {
background : linear - gradient ( 135 deg , # ffa502 , # c77f00 ) ;
color : # fff ;
}
. h5 {
background : linear - gradient ( 135 deg , # e3b341 , # b8911a ) ;
color : # 333 ;
}
. h6 {
background : linear - gradient ( 135 deg , # e6d34a , # c4b538 ) ;
color : # 333 ;
}
. h7 {
background : linear - gradient ( 135 deg , # 8 bda5e , # 5 fb32e ) ;
color : # fff ;
}
. h8 {
background : linear - gradient ( 135 deg , # 4 dd08b , # 28 a360 ) ;
color : # fff ;
}
. h9 {
background : linear - gradient ( 135 deg , # 36 b37e , # 1 e8c5e ) ;
color : # fff ;
}
. h10 {
background : linear - gradient ( 135 deg , # 2 d9cdb , # 1 a7ab5 ) ;
color : # fff ;
}
. hd {
background : var ( -- bg2 ) ;
color : var ( -- t2 ) ;
}
. hnc {
. hnc {
background : var ( -- bg2 ) ;
background : var ( -- bg2 ) ;
@ -375,25 +542,56 @@ function initDetailChart() {
height : 12 px ;
height : 12 px ;
border - radius : 2 px ;
border - radius : 2 px ;
& . h1 { background : linear - gradient ( 135 deg , # ff4444 , # cc0000 ) ; }
& . h1 {
& . h2 { background : linear - gradient ( 135 deg , # ff6b6b , # e04040 ) ; }
background : linear - gradient ( 135 deg , # ff4444 , # cc0000 ) ;
& . h3 { background : linear - gradient ( 135 deg , # ff9a76 , # d94f4f ) ; }
}
& . h4 { background : linear - gradient ( 135 deg , # ffa502 , # c77f00 ) ; }
& . h2 {
& . h5 { background : linear - gradient ( 135 deg , # e3b341 , # b8911a ) ; }
background : linear - gradient ( 135 deg , # ff6b6b , # e04040 ) ;
& . h6 { background : linear - gradient ( 135 deg , # e6d34a , # c4b538 ) ; }
}
& . h7 { background : linear - gradient ( 135 deg , # 8 bda5e , # 5 fb32e ) ; }
& . h3 {
& . h8 { background : linear - gradient ( 135 deg , # 4 dd08b , # 28 a360 ) ; }
background : linear - gradient ( 135 deg , # ff9a76 , # d94f4f ) ;
& . h9 { background : linear - gradient ( 135 deg , # 36 b37e , # 1 e8c5e ) ; }
}
& . h10 { background : linear - gradient ( 135 deg , # 2 d9cdb , # 1 a7ab5 ) ; }
& . h4 {
& . hd { background : var ( -- bg2 ) ; border : 1 px solid var ( -- bd ) ; }
background : linear - gradient ( 135 deg , # ffa502 , # c77f00 ) ;
}
& . h5 {
background : linear - gradient ( 135 deg , # e3b341 , # b8911a ) ;
}
& . h6 {
background : linear - gradient ( 135 deg , # e6d34a , # c4b538 ) ;
}
& . h7 {
background : linear - gradient ( 135 deg , # 8 bda5e , # 5 fb32e ) ;
}
& . h8 {
background : linear - gradient ( 135 deg , # 4 dd08b , # 28 a360 ) ;
}
& . h9 {
background : linear - gradient ( 135 deg , # 36 b37e , # 1 e8c5e ) ;
}
& . h10 {
background : linear - gradient ( 135 deg , # 2 d9cdb , # 1 a7ab5 ) ;
}
& . hd {
background : var ( -- bg2 ) ;
border : 1 px solid var ( -- bd ) ;
}
}
}
}
}
. vr { color : var ( -- red ) ; }
. vr {
. vg { color : var ( -- grn ) ; }
color : var ( -- red ) ;
}
. vg {
color : var ( -- grn ) ;
}
. arrow - up { color : var ( -- red ) ; }
. arrow - up {
. arrow - down { color : var ( -- grn ) ; }
color : var ( -- red ) ;
}
. arrow - down {
color : var ( -- grn ) ;
}
. enhanced - tbl {
. enhanced - tbl {
width : 100 % ;
width : 100 % ;
@ -457,7 +655,10 @@ function initDetailChart() {
align - items : center ;
align - items : center ;
justify - content : space - between ;
justify - content : space - between ;
h3 { font - size : 13 px ; color : var ( -- t1 ) ; }
h3 {
font - size : 13 px ;
color : var ( -- t1 ) ;
}
}
}
. mcl {
. mcl {
@ -473,7 +674,10 @@ function initDetailChart() {
align - items : center ;
align - items : center ;
justify - content : center ;
justify - content : center ;
& : hover { background : var ( -- red ) ; color : # fff ; }
& : hover {
background : var ( -- red ) ;
color : # fff ;
}
}
}
. mbd {
. mbd {
@ -496,8 +700,16 @@ function initDetailChart() {
border - radius : 5 px ;
border - radius : 5 px ;
padding : 8 px 12 px ;
padding : 8 px 12 px ;
. sl { font - size : 9 px ; color : var ( -- tm ) ; margin - bottom : 2 px ; }
. sl {
. sv { font - size : 22 px ; font - weight : 700 ; color : var ( -- t1 ) ; }
font - size : 9 px ;
color : var ( -- tm ) ;
margin - bottom : 2 px ;
}
. sv {
font - size : 22 px ;
font - weight : 700 ;
color : var ( -- t1 ) ;
}
}
}
. kline - container {
. kline - container {