Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
JINRUN-DP
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xinzhedeai
JINRUN-DP
Commits
2ed8e773
Commit
2ed8e773
authored
Dec 12, 2025
by
xinzhedeai
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
今日报警信息 表格样式调整
parent
e3a941ec
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
284 additions
and
127 deletions
+284
-127
table-header-bg.png
src/assets/jinrun/table-header-bg.png
+0
-0
RightTodayAlarm.vue
src/components/MineMonitor/RightTodayAlarm.vue
+284
-127
No files found.
src/assets/jinrun/table-header-bg.png
0 → 100644
View file @
2ed8e773
10.8 KB
src/components/MineMonitor/RightTodayAlarm.vue
View file @
2ed8e773
...
@@ -13,50 +13,95 @@
...
@@ -13,50 +13,95 @@
</div>
</div>
</div>
</div>
<!-- SOS报警表格 -->
<!-- SOS报警列表 -->
<div
v-show=
"activeTab === 0"
class=
"table-container"
>
<div
v-show=
"activeTab === 0"
class=
"list-container"
>
<n-data-table
<div
class=
"scroll-wrapper"
ref=
"sosScrollWrapper"
>
:columns=
"sosColumns"
<dl
class=
"alarm-list"
>
:data=
"sosData"
<dt
class=
"list-header"
>
:bordered=
"false"
<span>
人员姓名
</span>
size=
"small"
<span>
定位卡号
</span>
/>
<span>
报警时间
</span>
</dt>
<template
v-for=
"(item, index) in sosData"
:key=
"index"
>
<dd
class=
"list-item"
>
<span>
{{
item
.
name
}}
</span>
<span>
{{
item
.
cardNumber
}}
</span>
<span>
{{
item
.
alarmTime
}}
</span>
</dd>
</
template
>
<dd
v-if=
"sosData.length === 0"
class=
"no-data"
>
暂无SOS报警数据
</dd>
</dl>
</div>
</div>
</div>
<!-- 车辆报警表格 -->
<!-- 车辆报警列表 -->
<div
v-show=
"activeTab === 1"
class=
"table-container"
>
<div
v-show=
"activeTab === 1"
class=
"list-container"
>
<n-data-table
<div
class=
"scroll-wrapper"
ref=
"vehicleScrollWrapper"
>
:columns=
"vehicleColumns"
<dl
class=
"alarm-list"
>
:data=
"vehicleData"
<dt
class=
"list-header"
>
:bordered=
"false"
<span>
车辆/司机名称
</span>
size=
"small"
<span>
车牌号
</span>
/>
<span>
报警类型
</span>
<span>
报警时间
</span>
</dt>
<
template
v-for=
"(item, index) in vehicleData"
:key=
"index"
>
<dd
class=
"list-item"
>
<span>
{{
item
.
vehicleOrDriver
}}
</span>
<span>
{{
item
.
plateNumber
}}
</span>
<span>
{{
item
.
alarmType
}}
</span>
<span>
{{
item
.
alarmTime
}}
</span>
</dd>
</
template
>
</dl>
</div>
</div>
</div>
<!-- 越界开采表格 -->
<!-- 越界开采列表 -->
<div
v-show=
"activeTab === 2"
class=
"table-container"
>
<div
v-show=
"activeTab === 2"
class=
"list-container"
>
<n-data-table
<div
class=
"scroll-wrapper"
ref=
"boundaryScrollWrapper"
>
:columns=
"boundaryColumns"
<dl
class=
"alarm-list"
>
:data=
"boundaryData"
<dt
class=
"list-header"
>
:bordered=
"false"
<span>
人员/车辆名称
</span>
size=
"small"
<span>
定位卡号/车牌号
</span>
/>
<span>
越界时间
</span>
</dt>
<
template
v-for=
"(item, index) in boundaryData"
:key=
"index"
>
<dd
class=
"list-item"
>
<span>
{{
item
.
personOrVehicle
}}
</span>
<span>
{{
item
.
cardOrPlate
}}
</span>
<span>
{{
item
.
boundaryTime
}}
</span>
</dd>
</
template
>
</dl>
</div>
</div>
</div>
<!-- 在线监测表格 -->
<!-- 在线监测列表 -->
<div
v-show=
"activeTab === 3"
class=
"table-container"
>
<div
v-show=
"activeTab === 3"
class=
"list-container"
>
<n-data-table
<div
class=
"scroll-wrapper"
ref=
"monitorScrollWrapper"
>
:columns=
"monitorColumns"
<dl
class=
"alarm-list"
>
:data=
"monitorData"
<dt
class=
"list-header"
>
:bordered=
"false"
<span>
设备名称
</span>
size=
"small"
<span>
监测值
</span>
/>
<span>
报警级别
</span>
<span>
报警时间
</span>
</dt>
<
template
v-for=
"(item, index) in monitorData"
:key=
"index"
>
<dd
class=
"list-item"
>
<span>
{{
item
.
deviceName
}}
</span>
<span>
{{
item
.
monitorValue
}}
</span>
<span>
{{
item
.
alarmLevel
}}
</span>
<span>
{{
item
.
alarmTime
}}
</span>
</dd>
</
template
>
</dl>
</div>
</div>
</div>
</div>
</div>
</template>
</template>
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
ref
}
from
'
vue
'
import
{
ref
,
onMounted
,
onBeforeUnmount
}
from
'
vue
'
// 定义tabs
// 定义tabs
const
tabs
=
ref
([
const
tabs
=
ref
([
...
@@ -69,39 +114,26 @@ const tabs = ref([
...
@@ -69,39 +114,26 @@ const tabs = ref([
// 激活的tab索引
// 激活的tab索引
const
activeTab
=
ref
(
0
)
const
activeTab
=
ref
(
0
)
// SOS报警表格列
// 滚动相关的引用
const
sosColumns
=
ref
([
const
sosScrollWrapper
=
ref
(
null
)
{
title
:
'
人员姓名
'
,
key
:
'
name
'
},
const
vehicleScrollWrapper
=
ref
(
null
)
{
title
:
'
定位卡号
'
,
key
:
'
cardNumber
'
},
const
boundaryScrollWrapper
=
ref
(
null
)
{
title
:
'
报警时间
'
,
key
:
'
alarmTime
'
}
const
monitorScrollWrapper
=
ref
(
null
)
])
//
SOS报警表格数据
//
滚动定时器
const
sosData
=
ref
([])
let
scrollTimer
=
null
// 车辆报警表格列
// SOS报警数据
const
vehicleColumns
=
ref
([
const
sosData
=
ref
([])
{
title
:
'
车辆/司机名称
'
,
key
:
'
vehicleOrDriver
'
},
{
title
:
'
车牌号
'
,
key
:
'
plateNumber
'
},
{
title
:
'
报警类型
'
,
key
:
'
alarmType
'
},
{
title
:
'
报警时间
'
,
key
:
'
alarmTime
'
}
])
// 车辆报警
表格
数据
// 车辆报警数据
const
vehicleData
=
ref
([
const
vehicleData
=
ref
([
{
vehicleOrDriver
:
'
货车01
'
,
plateNumber
:
'
鲁C12345
'
,
alarmType
:
'
超速
'
,
alarmTime
:
'
2025-01-10 14:21:31
'
},
{
vehicleOrDriver
:
'
货车01
'
,
plateNumber
:
'
鲁C12345
'
,
alarmType
:
'
超速
'
,
alarmTime
:
'
2025-01-10 14:21:31
'
},
{
vehicleOrDriver
:
'
货车02
'
,
plateNumber
:
'
鲁C12346
'
,
alarmType
:
'
偏离路线
'
,
alarmTime
:
'
2025-01-10 13:15:22
'
},
{
vehicleOrDriver
:
'
货车02
'
,
plateNumber
:
'
鲁C12346
'
,
alarmType
:
'
偏离路线
'
,
alarmTime
:
'
2025-01-10 13:15:22
'
},
{
vehicleOrDriver
:
'
张三
'
,
plateNumber
:
'
鲁C12347
'
,
alarmType
:
'
疲劳驾驶
'
,
alarmTime
:
'
2025-01-10 12:05:47
'
}
{
vehicleOrDriver
:
'
张三
'
,
plateNumber
:
'
鲁C12347
'
,
alarmType
:
'
疲劳驾驶
'
,
alarmTime
:
'
2025-01-10 12:05:47
'
}
])
])
// 越界开采表格列
// 越界开采数据
const
boundaryColumns
=
ref
([
{
title
:
'
人员/车辆名称
'
,
key
:
'
personOrVehicle
'
},
{
title
:
'
定位卡号/车牌号
'
,
key
:
'
cardOrPlate
'
},
{
title
:
'
越界时间
'
,
key
:
'
boundaryTime
'
}
])
// 越界开采表格数据
const
boundaryData
=
ref
([
const
boundaryData
=
ref
([
{
personOrVehicle
:
'
李四
'
,
cardOrPlate
:
'
K00123
'
,
boundaryTime
:
'
2025-01-10 14:21:31
'
},
{
personOrVehicle
:
'
李四
'
,
cardOrPlate
:
'
K00123
'
,
boundaryTime
:
'
2025-01-10 14:21:31
'
},
{
personOrVehicle
:
'
挖掘机01
'
,
cardOrPlate
:
'
鲁C56789
'
,
boundaryTime
:
'
2025-01-10 13:45:12
'
},
{
personOrVehicle
:
'
挖掘机01
'
,
cardOrPlate
:
'
鲁C56789
'
,
boundaryTime
:
'
2025-01-10 13:45:12
'
},
...
@@ -109,21 +141,87 @@ const boundaryData = ref([
...
@@ -109,21 +141,87 @@ const boundaryData = ref([
{
personOrVehicle
:
'
卡车02
'
,
cardOrPlate
:
'
鲁C98765
'
,
boundaryTime
:
'
2025-01-10 11:20:33
'
}
{
personOrVehicle
:
'
卡车02
'
,
cardOrPlate
:
'
鲁C98765
'
,
boundaryTime
:
'
2025-01-10 11:20:33
'
}
])
])
// 在线监测表格列
// 在线监测数据
const
monitorColumns
=
ref
([
{
title
:
'
设备名称
'
,
key
:
'
deviceName
'
},
{
title
:
'
监测值
'
,
key
:
'
monitorValue
'
},
{
title
:
'
报警级别
'
,
key
:
'
alarmLevel
'
},
{
title
:
'
报警时间
'
,
key
:
'
alarmTime
'
}
])
// 在线监测表格数据
const
monitorData
=
ref
([
const
monitorData
=
ref
([
{
deviceName
:
'
边坡表面位移01
'
,
monitorValue
:
'
0.0047mm
'
,
alarmLevel
:
'
橙色预警
'
,
alarmTime
:
'
2025-01-10 14:21:31
'
},
{
deviceName
:
'
边坡表面位移01
'
,
monitorValue
:
'
0.0047mm
'
,
alarmLevel
:
'
橙色预警
'
,
alarmTime
:
'
2025-01-10 14:21:31
'
},
{
deviceName
:
'
降雨量
'
,
monitorValue
:
'
50.2mm
'
,
alarmLevel
:
'
蓝色预警
'
,
alarmTime
:
'
2025-01-10 13:15:22
'
},
{
deviceName
:
'
降雨量
'
,
monitorValue
:
'
50.2mm
'
,
alarmLevel
:
'
蓝色预警
'
,
alarmTime
:
'
2025-01-10 13:15:22
'
},
{
deviceName
:
'
温度传感器01
'
,
monitorValue
:
'
38.5℃
'
,
alarmLevel
:
'
黄色预警
'
,
alarmTime
:
'
2025-01-10 12:05:47
'
},
{
deviceName
:
'
温度传感器01
'
,
monitorValue
:
'
38.5℃
'
,
alarmLevel
:
'
黄色预警
'
,
alarmTime
:
'
2025-01-10 12:05:47
'
},
{
deviceName
:
'
湿度传感器02
'
,
monitorValue
:
'
85%RH
'
,
alarmLevel
:
'
蓝色预警
'
,
alarmTime
:
'
2025-01-10 11:30:15
'
}
{
deviceName
:
'
湿度传感器02
'
,
monitorValue
:
'
85%RH
'
,
alarmLevel
:
'
蓝色预警
'
,
alarmTime
:
'
2025-01-10 11:30:15
'
}
])
])
// 初始化滚动
const
initScroll
=
()
=>
{
// 清除之前的定时器
if
(
scrollTimer
)
{
clearInterval
(
scrollTimer
)
scrollTimer
=
null
}
// 获取当前激活的滚动容器
let
wrapper
=
null
switch
(
activeTab
.
value
)
{
case
0
:
wrapper
=
sosScrollWrapper
.
value
break
case
1
:
wrapper
=
vehicleScrollWrapper
.
value
break
case
2
:
wrapper
=
boundaryScrollWrapper
.
value
break
case
3
:
wrapper
=
monitorScrollWrapper
.
value
break
}
// 如果没有数据或容器不存在,则不启动滚动
if
(
!
wrapper
||
wrapper
.
scrollHeight
<=
wrapper
.
clientHeight
)
{
return
}
// 设置初始滚动方向为向下
let
direction
=
1
const
step
=
1
// 启动自动滚动
scrollTimer
=
setInterval
(()
=>
{
// 计算新的滚动位置
const
newScrollTop
=
wrapper
.
scrollTop
+
(
step
*
direction
)
// 判断是否到达顶部或底部
if
(
newScrollTop
<=
0
)
{
// 到达顶部,改变方向向下
direction
=
1
wrapper
.
scrollTop
=
1
}
else
if
(
newScrollTop
>=
wrapper
.
scrollHeight
-
wrapper
.
clientHeight
)
{
// 到达底部,改变方向向上
direction
=
-
1
wrapper
.
scrollTop
=
wrapper
.
scrollHeight
-
wrapper
.
clientHeight
-
1
}
else
{
// 正常滚动
wrapper
.
scrollTop
=
newScrollTop
}
},
50
)
}
// 当tab切换时重新初始化滚动
const
handleTabChange
=
(
index
)
=>
{
activeTab
.
value
=
index
// 延迟执行以确保DOM更新完成
setTimeout
(
initScroll
,
100
)
}
// 组件挂载时初始化滚动
onMounted
(()
=>
{
initScroll
()
})
// 组件卸载前清除定时器
onBeforeUnmount
(()
=>
{
if
(
scrollTimer
)
{
clearInterval
(
scrollTimer
)
}
})
</
script
>
</
script
>
<
style
scoped
lang=
"scss"
>
<
style
scoped
lang=
"scss"
>
...
@@ -134,7 +232,10 @@ const monitorData = ref([
...
@@ -134,7 +232,10 @@ const monitorData = ref([
position
:
relative
;
position
:
relative
;
padding
:
0
.15rem
;
padding
:
0
.15rem
;
background-size
:
contain
;
background-size
:
contain
;
// padding-top: 0.45rem;
width
:
100%
;
margin-top
:
0
.3rem
;
background-image
:
url("@/assets/jinrun/module-bg.png")
;
background-repeat
:
no-repeat
;
.card-title
{
.card-title
{
position
:
absolute
;
position
:
absolute
;
...
@@ -145,42 +246,26 @@ const monitorData = ref([
...
@@ -145,42 +246,26 @@ const monitorData = ref([
color
:
#ffffff
;
color
:
#ffffff
;
text-shadow
:
0rem
0rem
0rem
rgba
(
5
,
38
,
68
,
0
.5
);
text-shadow
:
0rem
0rem
0rem
rgba
(
5
,
38
,
68
,
0
.5
);
}
}
width
:
100%
;
margin-top
:
0
.3rem
;
background-image
:
url("@/assets/jinrun/module-bg.png")
;
background-repeat
:
no-repeat
;
.chart-wrapper
{
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
width
:
100%
;
height
:
100%
;
}
.chart-container
{
width
:
100%
;
height
:
100%
;
}
}
}
.alarm-tabs
{
.alarm-tabs
{
width
:
4
.4rem
;
width
:
4
.4rem
;
display
:
flex
;
display
:
flex
;
gap
:
0
.05rem
;
gap
:
0
.05rem
;
margin-top
:
.18rem
;
margin-top
:
0
.18rem
;
margin-bottom
:
0
.15rem
;
margin-bottom
:
0
.15rem
;
flex-wrap
:
wrap
;
flex-wrap
:
wrap
;
color
:
#fff
;
color
:
#fff
;
}
}
.tab-item
{
.tab-item
{
padding
:
0
.05rem
0
.1rem
;
padding
:
0
.05rem
0
.1rem
;
background
:
transparent
;
// 背景色透明
background
:
transparent
;
cursor
:
pointer
;
cursor
:
pointer
;
position
:
relative
;
position
:
relative
;
font-weight
:
400
;
font-weight
:
400
;
font-size
:
0
.16rem
;
font-size
:
0
.16rem
;
color
:
#88DBBD
;
color
:
#88DBBD
;
&
.active
{
&
.active
{
color
:
var
(
--
n-text-color-primary
);
color
:
var
(
--
n-text-color-primary
);
...
@@ -196,22 +281,94 @@ color: #88DBBD;
...
@@ -196,22 +281,94 @@ color: #88DBBD;
background-color
:
#36a2eb
;
background-color
:
#36a2eb
;
}
}
}
}
}
.list-container
{
height
:
2
.2rem
;
overflow
:
hidden
;
}
.scroll-wrapper
{
height
:
100%
;
overflow-y
:
auto
;
scrollbar-width
:
none
;
/* Firefox */
-ms-overflow-style
:
none
;
/* IE 10+ */
&
:
:-
webkit-scrollbar
{
display
:
none
;
/* Chrome Safari */
}
}
}
.table-container
{
.alarm-list
{
:deep
(
.n-data-table
)
{
margin
:
0
;
background-color
:
transparent
;
padding
:
0
;
}
.n-data-table-th
,
.list-header
{
.n-data-table-td
{
display
:
flex
;
background-color
:
transparent
!
important
;
justify-content
:
space-between
;
color
:
var
(
--
n-text-color-primary
);
padding
:
0
.1rem
;
border
:
none
;
// background: rgba(10, 25, 71, 0.8);
background-image
:
url("@/assets/jinrun/table-header-bg.png")
;
// border-radius: 0.05rem;
margin-bottom
:
0
.05rem
;
position
:
sticky
;
top
:
0
;
z-index
:
10
;
span
{
font-weight
:
500
;
font-size
:
0
.14rem
;
color
:
#fff
;
flex
:
1
;
text-align
:
center
;
&
:first-child
{
text-align
:
left
;
}
}
.n-data-table-tr
:hover
.n-data-table-t
d
{
&
:last-chil
d
{
background-color
:
rgba
(
50
,
50
,
50
,
0
.3
)
!
importan
t
;
text-align
:
righ
t
;
}
}
}
}
}
.list-item
{
display
:
flex
;
justify-content
:
space-between
;
padding
:
0
.1rem
;
margin-bottom
:
0
.05rem
;
// background: rgba(10, 25, 71, 0.6);
background-color
:
#2a496d
78
;
// border-radius: 0.05rem;
// border-left: 0.03rem solid #36a2eb;
span
{
font-size
:
0
.14rem
;
color
:
#fff
;
flex
:
1
;
text-align
:
center
;
white-space
:
nowrap
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
&
:first-child
{
text-align
:
left
;
}
&
:last-child
{
text-align
:
right
;
}
}
}
}
.no-data
{
text-align
:
center
;
color
:
var
(
--
n-text-color-secondary
);
padding
:
0
.2rem
;
background
:
rgba
(
10
,
25
,
71
,
0
.3
);
border-radius
:
0
.05rem
;
margin
:
0
.1rem
;
}
</
style
>
</
style
>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment