Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
dwsproject
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dws
dwsproject
Commits
9d0fe1d7
Commit
9d0fe1d7
authored
Jun 26, 2025
by
nningxx
Browse files
Options
Browse Files
Download
Plain Diff
tht合并到master
parents
a7dce4c0
3d3bbfe2
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
289 additions
and
259 deletions
+289
-259
tht_project/controllers/big_screen.py
+45
-2
tht_project/static/html/big_screen/view/cook_process.html
+1
-1
tht_project/static/html/big_screen/view/expected_process.html
+148
-156
tht_project/static/src/view/equipment_status.html
+95
-100
No files found.
tht_project/controllers/big_screen.py
View file @
9d0fe1d7
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
from
odoo
import
http
,
fields
from
odoo
import
http
,
fields
,
SUPERUSER_ID
from
odoo.http
import
request
from
odoo.http
import
request
from
odoo.addons.roke_mes_three_colour_light.controller.main
import
RokeMesThreeColourLight
from
odoo.addons.roke_mes_three_colour_light.controller.main
import
RokeMesThreeColourLight
import
os
import
os
import
math
import
math
from
datetime
import
datetime
,
time
from
datetime
import
datetime
,
time
,
timedelta
from
jinja2
import
Environment
,
FileSystemLoader
from
jinja2
import
Environment
,
FileSystemLoader
import
logging
import
logging
import
requests
import
requests
...
@@ -164,3 +164,46 @@ class ResMesBigScreen(http.Controller):
...
@@ -164,3 +164,46 @@ class ResMesBigScreen(http.Controller):
def
get_lishibaozhuang_data
(
self
):
def
get_lishibaozhuang_data
(
self
):
body
=
http
.
request
.
jsonrequest
body
=
http
.
request
.
jsonrequest
return
self
.
common_dws_interface
(
body
,
'/get_real_time_device_data'
,
cate
=
"制袋包装机"
)
return
self
.
common_dws_interface
(
body
,
'/get_real_time_device_data'
,
cate
=
"制袋包装机"
)
@http.route
(
'/roke/tht/get_abnormal_alarm_list'
,
type
=
'json'
,
auth
=
"none"
,
methods
=
[
'POST'
,
'OPTIONS'
],
csrf
=
False
,
cors
=
'*'
)
def
get_abnormal_alarm_list
(
self
):
"""
获取异常表单列表
:return:
"""
jsonrequest
=
http
.
request
.
jsonrequest
domain
=
[]
abnormal_alarm_id
=
jsonrequest
.
get
(
'abnormal_alarm_id'
,
False
)
#表单id
if
abnormal_alarm_id
:
domain
.
append
((
'id'
,
'='
,
abnormal_alarm_id
))
abnormal_id
=
jsonrequest
.
get
(
'abnormal_id'
,
False
)
#异常类型id
if
abnormal_id
:
domain
.
append
((
'abnormal_id'
,
'='
,
abnormal_id
))
page_size
=
int
(
http
.
request
.
jsonrequest
.
get
(
'page_size'
,
20
))
page_no
=
int
(
http
.
request
.
jsonrequest
.
get
(
'page_no'
,
1
))
abnormal_alarm_ids
=
http
.
request
.
env
(
user
=
SUPERUSER_ID
)[
'roke.abnormal.alarm'
]
.
search
(
domain
,
limit
=
page_size
,
offset
=
(
page_no
-
1
)
*
page_size
,
order
=
"originating_time desc"
)
abnormal_alarm_list
=
[]
for
item
in
abnormal_alarm_ids
:
note
=
''
if
item
.
abnormal_id
.
name
==
'设备异常'
:
note
=
f
"{item.equipment_id.name or ''}发生了故障"
elif
item
.
abnormal_id
.
name
==
'缺料断料'
:
note
=
f
"{item.sponsor.name or item.create_uid.name or ''} 发起了缺料申请"
abnormal_alarm_list
.
append
({
"id"
:
item
.
id
,
# 异常表单id
"abnormal_name"
:
item
.
abnormal_id
.
name
,
# 异常类型
"originating_time"
:
(
item
.
originating_time
+
timedelta
(
hours
=
8
))
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
if
item
.
originating_time
else
''
,
#发起时间
"note"
:
note
,
#报警表述
})
total
=
http
.
request
.
env
(
user
=
SUPERUSER_ID
)[
'roke.abnormal.alarm'
]
.
search_count
(
domain
)
return
{
"state"
:
"success"
,
"msgs"
:
"获取成功"
,
"total"
:
total
,
"abnormal_alarm_list"
:
abnormal_alarm_list
}
tht_project/static/html/big_screen/view/cook_process.html
View file @
9d0fe1d7
...
@@ -369,7 +369,7 @@
...
@@ -369,7 +369,7 @@
config
=
{},
config
=
{},
errorMessage
=
"操作失败,请稍后重试"
,
errorMessage
=
"操作失败,请稍后重试"
,
contentType
=
"application/json"
,
contentType
=
"application/json"
,
baseurl
=
"
https://tht.dws.rokecloud.com
"
baseurl
=
""
)
{
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
if
(
!
url
)
reject
(
null
)
if
(
!
url
)
reject
(
null
)
...
...
tht_project/static/html/big_screen/view/expected_process.html
View file @
9d0fe1d7
...
@@ -2,10 +2,10 @@
...
@@ -2,10 +2,10 @@
<html
lang=
"zh-CN"
>
<html
lang=
"zh-CN"
>
<head>
<head>
<meta
charset=
"UTF-8"
/>
<meta
charset=
"UTF-8"
/>
<title>
预料工序
</title>
<title>
预料工序
</title>
<meta
content=
"width=device-width,initial-scale=1.0, maximum-scale=1.0,user-scalable=0"
name=
"viewport"
/>
<meta
content=
"width=device-width,initial-scale=1.0, maximum-scale=1.0,user-scalable=0"
name=
"viewport"
/>
<link
rel=
"stylesheet"
href=
"/tht_project/static/html/big_screen/element-ui/index.css"
/>
<link
rel=
"stylesheet"
href=
"/tht_project/static/html/big_screen/element-ui/index.css"
/>
<script
src=
"/tht_project/static/html/big_screen/js/echarts.min.js"
></script>
<script
src=
"/tht_project/static/html/big_screen/js/echarts.min.js"
></script>
<script
src=
"/tht_project/static/html/big_screen/js/moment.min.js"
></script>
<script
src=
"/tht_project/static/html/big_screen/js/moment.min.js"
></script>
<script
src=
"/tht_project/static/html/big_screen/js/vue.js"
></script>
<script
src=
"/tht_project/static/html/big_screen/js/vue.js"
></script>
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
</head>
</head>
<body
id=
"bodyId"
style=
"display: none"
>
<body
id=
"bodyId"
style=
"display: none"
>
<div
id=
"app"
v-loading
.
body
.
fullscreen
.
lock=
"loading"
ref=
"fullScreenElement"
>
<div
id=
"app"
v-loading
.
body
.
fullscreen
.
lock=
"loading"
ref=
"fullScreenElement"
>
<div
class=
"pageHeaderBox"
>
<div
class=
"pageHeaderBox"
>
<div
class=
"weatherInfo"
>
<div
class=
"weatherInfo"
>
<span
class=
"location"
>
预料工序
</span>
<span
class=
"location"
>
预料工序
</span>
...
@@ -202,7 +202,7 @@
...
@@ -202,7 +202,7 @@
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</body>
<script>
<script>
...
@@ -347,7 +347,7 @@
...
@@ -347,7 +347,7 @@
method
:
"POST"
,
method
:
"POST"
,
url
:
this
.
baseURL
+
url
,
url
:
this
.
baseURL
+
url
,
data
:
config
,
data
:
config
,
headers
:
{
"Content-Type"
:
contentType
},
headers
:
{
"Content-Type"
:
contentType
},
}).
then
((
result
)
=>
{
}).
then
((
result
)
=>
{
if
(
if
(
result
?.
data
?.
result
?.
code
==
0
||
result
?.
data
?.
result
?.
code
==
0
||
...
@@ -374,7 +374,7 @@
...
@@ -374,7 +374,7 @@
config
=
{},
config
=
{},
errorMessage
=
"操作失败,请稍后重试"
,
errorMessage
=
"操作失败,请稍后重试"
,
contentType
=
"application/json"
,
contentType
=
"application/json"
,
baseurl
=
"
https://tht.dws.rokecloud.com
"
baseurl
=
""
)
{
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
if
(
!
url
)
reject
(
null
)
if
(
!
url
)
reject
(
null
)
...
@@ -382,7 +382,7 @@
...
@@ -382,7 +382,7 @@
method
:
"POST"
,
method
:
"POST"
,
url
:
baseurl
+
url
,
url
:
baseurl
+
url
,
data
:
config
,
data
:
config
,
headers
:
{
"Content-Type"
:
contentType
},
headers
:
{
"Content-Type"
:
contentType
},
}).
then
((
result
)
=>
{
}).
then
((
result
)
=>
{
if
(
if
(
result
?.
data
?.
result
?.
success
||
result
?.
data
?.
result
?.
success
||
...
@@ -420,7 +420,7 @@
...
@@ -420,7 +420,7 @@
method
:
"POST"
,
method
:
"POST"
,
url
:
this
.
dwsBaseUrl
+
url
,
url
:
this
.
dwsBaseUrl
+
url
,
data
:
config
,
data
:
config
,
headers
:
{
"Content-Type"
:
contentType
},
headers
:
{
"Content-Type"
:
contentType
},
}).
then
((
result
)
=>
{
}).
then
((
result
)
=>
{
if
(
result
?.
data
?.
success
)
{
if
(
result
?.
data
?.
success
)
{
resolve
(
result
.
data
)
resolve
(
result
.
data
)
...
@@ -558,7 +558,7 @@
...
@@ -558,7 +558,7 @@
},
},
tooltip
:
{
tooltip
:
{
trigger
:
'axis'
,
trigger
:
'axis'
,
axisPointer
:
{
type
:
'shadow'
},
axisPointer
:
{
type
:
'shadow'
},
formatter
:
(
params
)
=>
{
formatter
:
(
params
)
=>
{
console
.
log
(
params
)
console
.
log
(
params
)
let
tooltipHtml
=
`<div style="font-weight:bold;margin-bottom:5px">
${
params
[
0
].
name
}
</div>`
let
tooltipHtml
=
`<div style="font-weight:bold;margin-bottom:5px">
${
params
[
0
].
name
}
</div>`
...
@@ -588,24 +588,24 @@
...
@@ -588,24 +588,24 @@
xAxis
:
{
xAxis
:
{
type
:
'category'
,
type
:
'category'
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
},
},
series
:
[{
series
:
[{
type
:
'bar'
,
type
:
'bar'
,
barWidth
:
'40%'
,
barWidth
:
'40%'
,
barGap
:
'0%'
,
barGap
:
'0%'
,
data
:
seriesData
,
data
:
seriesData
,
itemStyle
:
{
color
:
'#5087ec'
},
itemStyle
:
{
color
:
'#5087ec'
},
label
:
{
label
:
{
show
:
true
,
show
:
true
,
position
:
'top'
,
position
:
'top'
,
...
@@ -663,18 +663,18 @@
...
@@ -663,18 +663,18 @@
type
:
'category'
,
type
:
'category'
,
boundaryGap
:
false
,
boundaryGap
:
false
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisTick
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}'
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}'
}
},
},
series
:
[{
series
:
[{
type
:
'line'
,
type
:
'line'
,
...
@@ -728,19 +728,19 @@
...
@@ -728,19 +728,19 @@
data
:
[{
data
:
[{
value
:
data
?.
green
||
0
,
value
:
data
?.
green
||
0
,
name
:
'运行'
,
name
:
'运行'
,
itemStyle
:
{
color
:
'#91cc75'
},
itemStyle
:
{
color
:
'#91cc75'
},
},
{
},
{
value
:
data
?.
yellow
||
0
,
value
:
data
?.
yellow
||
0
,
name
:
'等待'
,
name
:
'等待'
,
itemStyle
:
{
color
:
'#ffd700'
},
itemStyle
:
{
color
:
'#ffd700'
},
},
{
},
{
value
:
data
?.
red
||
0
,
value
:
data
?.
red
||
0
,
name
:
'故障'
,
name
:
'故障'
,
itemStyle
:
{
color
:
'#ee6666'
},
itemStyle
:
{
color
:
'#ee6666'
},
},
{
},
{
value
:
data
?.
gray
||
0
,
value
:
data
?.
gray
||
0
,
name
:
'关机'
,
name
:
'关机'
,
itemStyle
:
{
color
:
'#787878'
},
itemStyle
:
{
color
:
'#787878'
},
}]
}]
}]
}]
})
})
...
@@ -788,24 +788,24 @@
...
@@ -788,24 +788,24 @@
xAxis
:
{
xAxis
:
{
type
:
'category'
,
type
:
'category'
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}%'
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}%'
}
},
},
series
:
[{
series
:
[{
type
:
'bar'
,
type
:
'bar'
,
barWidth
:
'40%'
,
barWidth
:
'40%'
,
barGap
:
'0%'
,
barGap
:
'0%'
,
data
:
seriesData
,
data
:
seriesData
,
itemStyle
:
{
color
:
'#5087ec'
},
itemStyle
:
{
color
:
'#5087ec'
},
label
:
{
label
:
{
show
:
true
,
show
:
true
,
position
:
'top'
,
position
:
'top'
,
...
@@ -847,24 +847,24 @@
...
@@ -847,24 +847,24 @@
xAxis
:
{
xAxis
:
{
type
:
'category'
,
type
:
'category'
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}℃'
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}℃'
}
},
},
series
:
[{
series
:
[{
type
:
'bar'
,
type
:
'bar'
,
barWidth
:
'40%'
,
barWidth
:
'40%'
,
barGap
:
'0%'
,
barGap
:
'0%'
,
data
:
seriesData
,
data
:
seriesData
,
itemStyle
:
{
color
:
'#5087ec'
},
itemStyle
:
{
color
:
'#5087ec'
},
label
:
{
label
:
{
show
:
true
,
show
:
true
,
position
:
'top'
,
position
:
'top'
,
...
@@ -897,22 +897,22 @@
...
@@ -897,22 +897,22 @@
startAngle
:
200
,
startAngle
:
200
,
endAngle
:
-
20
,
endAngle
:
-
20
,
splitNumber
:
5
,
splitNumber
:
5
,
itemStyle
:
{
color
:
'#3a8fff'
},
itemStyle
:
{
color
:
'#3a8fff'
},
progress
:
{
show
:
true
,
width
:
5
},
progress
:
{
show
:
true
,
width
:
5
},
pointer
:
{
show
:
false
},
pointer
:
{
show
:
false
},
axisLine
:
{
lineStyle
:
{
width
:
5
}
},
axisLine
:
{
lineStyle
:
{
width
:
5
}
},
axisTick
:
{
axisTick
:
{
distance
:
-
15
,
distance
:
-
15
,
length
:
5
,
length
:
5
,
splitNumber
:
5
,
splitNumber
:
5
,
lineStyle
:
{
width
:
1
,
color
:
'#999'
}
lineStyle
:
{
width
:
1
,
color
:
'#999'
}
},
},
splitLine
:
{
splitLine
:
{
distance
:
-
15
,
distance
:
-
15
,
length
:
8
,
length
:
8
,
lineStyle
:
{
width
:
1
,
color
:
'#999'
}
lineStyle
:
{
width
:
1
,
color
:
'#999'
}
},
},
axisLabel
:
{
distance
:
-
15
,
color
:
'#999'
,
fontSize
:
10
,
},
axisLabel
:
{
distance
:
-
15
,
color
:
'#999'
,
fontSize
:
10
,
},
detail
:
{
detail
:
{
valueAnimation
:
true
,
valueAnimation
:
true
,
offsetCenter
:
[
0
,
0
],
offsetCenter
:
[
0
,
0
],
...
@@ -939,22 +939,22 @@
...
@@ -939,22 +939,22 @@
seriesData
.
push
(
data
)
seriesData
.
push
(
data
)
}
}
chart
.
setOption
({
chart
.
setOption
({
grid
:
{
left
:
'5%'
,
right
:
'5%'
,
top
:
'8%'
,
bottom
:
'5%'
},
grid
:
{
left
:
'5%'
,
right
:
'5%'
,
top
:
'8%'
,
bottom
:
'5%'
},
graphic
:
[{
graphic
:
[{
type
:
'text'
,
type
:
'text'
,
left
:
'12%'
,
left
:
'12%'
,
top
:
'80%'
,
top
:
'80%'
,
style
:
{
text
:
'当前库内温度'
,
fill
:
'#fff'
,
fontSize
:
10
}
style
:
{
text
:
'当前库内温度'
,
fill
:
'#fff'
,
fontSize
:
10
}
},
{
},
{
type
:
'text'
,
type
:
'text'
,
left
:
'45.5%'
,
left
:
'45.5%'
,
top
:
'80%'
,
top
:
'80%'
,
style
:
{
text
:
'中心温度'
,
fill
:
'#fff'
,
fontSize
:
10
}
style
:
{
text
:
'中心温度'
,
fill
:
'#fff'
,
fontSize
:
10
}
},
{
},
{
type
:
'text'
,
type
:
'text'
,
left
:
'75.5%'
,
left
:
'75.5%'
,
top
:
'80%'
,
top
:
'80%'
,
style
:
{
text
:
'库内湿度'
,
fill
:
'#fff'
,
fontSize
:
10
}
style
:
{
text
:
'库内湿度'
,
fill
:
'#fff'
,
fontSize
:
10
}
}],
}],
series
:
seriesData
series
:
seriesData
})
})
...
@@ -991,24 +991,24 @@
...
@@ -991,24 +991,24 @@
type
:
'category'
,
type
:
'category'
,
boundaryGap
:
false
,
boundaryGap
:
false
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisTick
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}'
+
unit
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}'
+
unit
}
},
},
series
:
[{
series
:
[{
type
:
'line'
,
type
:
'line'
,
data
:
seriesData
,
data
:
seriesData
,
smooth
:
true
,
smooth
:
true
,
lineStyle
:
{
type
:
'dashed'
},
lineStyle
:
{
type
:
'dashed'
},
label
:
{
label
:
{
show
:
true
,
show
:
true
,
position
:
'top'
,
position
:
'top'
,
...
@@ -1018,8 +1018,8 @@
...
@@ -1018,8 +1018,8 @@
},
},
areaStyle
:
{
areaStyle
:
{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
0
,
1
,
[
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
0
,
1
,
[
{
offset
:
0
,
color
:
'rgba(58, 143, 255, 0.8)'
},
{
offset
:
0
,
color
:
'rgba(58, 143, 255, 0.8)'
},
{
offset
:
1
,
color
:
'rgba(58, 143, 255, 0.1)'
}
{
offset
:
1
,
color
:
'rgba(58, 143, 255, 0.1)'
}
])
])
},
},
}]
}]
...
@@ -1033,22 +1033,22 @@
...
@@ -1033,22 +1033,22 @@
startAngle
:
200
,
startAngle
:
200
,
endAngle
:
-
20
,
endAngle
:
-
20
,
splitNumber
:
5
,
splitNumber
:
5
,
itemStyle
:
{
color
:
'#3a8fff'
},
itemStyle
:
{
color
:
'#3a8fff'
},
progress
:
{
show
:
false
,
width
:
5
},
progress
:
{
show
:
false
,
width
:
5
},
pointer
:
{
itemStyle
:
{
color
:
'#fe827a'
,},
length
:
"60%"
,
width
:
3
},
pointer
:
{
itemStyle
:
{
color
:
'#fe827a'
,
},
length
:
"60%"
,
width
:
3
},
axisLine
:
{
axisLine
:
{
roundCap
:
true
,
roundCap
:
true
,
lineStyle
:
{
lineStyle
:
{
width
:
5
,
width
:
5
,
color
:
[[
1
,
{
color
:
[[
1
,
{
type
:
'linear'
,
x
:
0
,
y
:
0
,
x2
:
1
,
y2
:
0
,
type
:
'linear'
,
x
:
0
,
y
:
0
,
x2
:
1
,
y2
:
0
,
colorStops
:
[{
offset
:
0
,
color
:
'#91cc75'
},
{
offset
:
1
,
color
:
'#ff4b4b'
}]
colorStops
:
[{
offset
:
0
,
color
:
'#91cc75'
},
{
offset
:
1
,
color
:
'#ff4b4b'
}]
}]]
}]]
}
}
},
},
axisTick
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
splitLine
:
{
show
:
false
},
splitLine
:
{
show
:
false
},
axisLabel
:
{
show
:
false
},
axisLabel
:
{
show
:
false
},
detail
:
{
detail
:
{
valueAnimation
:
true
,
valueAnimation
:
true
,
width
:
'40%'
,
width
:
'40%'
,
...
@@ -1058,8 +1058,8 @@
...
@@ -1058,8 +1058,8 @@
fontWeight
:
'bold'
,
fontWeight
:
'bold'
,
offsetCenter
:
[
0
,
'40%'
]
offsetCenter
:
[
0
,
'40%'
]
},
},
data
:
[{
value
:
50
,
name
:
"加速时间"
}],
data
:
[{
value
:
50
,
name
:
"加速时间"
}],
title
:
{
color
:
"#FFF"
,
fontSize
:
10
,
valueAnimation
:
false
,
offsetCenter
:
[
'0'
,
'70%'
]
}
title
:
{
color
:
"#FFF"
,
fontSize
:
10
,
valueAnimation
:
false
,
offsetCenter
:
[
'0'
,
'70%'
]
}
}]
}]
})
})
},
},
...
@@ -1104,24 +1104,24 @@
...
@@ -1104,24 +1104,24 @@
xAxis
:
{
xAxis
:
{
type
:
'category'
,
type
:
'category'
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
runFrequencyMax
,
max
:
runFrequencyMax
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}Hz'
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}Hz'
}
},
},
series
:
[{
series
:
[{
type
:
'bar'
,
type
:
'bar'
,
barWidth
:
'40%'
,
barWidth
:
'40%'
,
barGap
:
'0%'
,
barGap
:
'0%'
,
data
:
runFrequencyData
,
data
:
runFrequencyData
,
itemStyle
:
{
color
:
'#5087ec'
},
itemStyle
:
{
color
:
'#5087ec'
},
label
:
{
label
:
{
show
:
true
,
show
:
true
,
position
:
'top'
,
position
:
'top'
,
...
@@ -1152,8 +1152,8 @@
...
@@ -1152,8 +1152,8 @@
xAxis
:
{
xAxis
:
{
type
:
'category'
,
type
:
'category'
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
...
@@ -1161,16 +1161,16 @@
...
@@ -1161,16 +1161,16 @@
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
cuttingSpeedMax
,
max
:
cuttingSpeedMax
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}ppm'
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}ppm'
}
},
},
series
:
[{
series
:
[{
type
:
'bar'
,
type
:
'bar'
,
barWidth
:
'40%'
,
barWidth
:
'40%'
,
barGap
:
'0%'
,
barGap
:
'0%'
,
data
:
cuttingSpeedData
,
data
:
cuttingSpeedData
,
itemStyle
:
{
color
:
'#5087ec'
},
itemStyle
:
{
color
:
'#5087ec'
},
label
:
{
label
:
{
show
:
true
,
show
:
true
,
position
:
'top'
,
position
:
'top'
,
...
@@ -1214,31 +1214,31 @@
...
@@ -1214,31 +1214,31 @@
top
:
'0%'
,
top
:
'0%'
,
itemWidth
:
10
,
itemWidth
:
10
,
itemHeight
:
10
,
itemHeight
:
10
,
textStyle
:
{
color
:
"#fff"
,
fontSize
:
10
}
textStyle
:
{
color
:
"#fff"
,
fontSize
:
10
}
},
},
xAxis
:
{
xAxis
:
{
type
:
'category'
,
type
:
'category'
,
boundaryGap
:
false
,
boundaryGap
:
false
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisTick
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}'
+
unit
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}'
+
unit
}
},
},
series
:
[{
series
:
[{
name
:
'设备A'
,
name
:
'设备A'
,
type
:
'line'
,
type
:
'line'
,
data
:
deviceA
,
data
:
deviceA
,
smooth
:
true
,
smooth
:
true
,
lineStyle
:
{
type
:
'dashed'
},
lineStyle
:
{
type
:
'dashed'
},
label
:
{
label
:
{
show
:
true
,
show
:
true
,
position
:
'top'
,
position
:
'top'
,
...
@@ -1248,8 +1248,8 @@
...
@@ -1248,8 +1248,8 @@
},
},
areaStyle
:
{
areaStyle
:
{
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
0
,
1
,
[
color
:
new
echarts
.
graphic
.
LinearGradient
(
0
,
0
,
0
,
1
,
[
{
offset
:
0
,
color
:
'rgba(58, 143, 255, 0.8)'
},
{
offset
:
0
,
color
:
'rgba(58, 143, 255, 0.8)'
},
{
offset
:
1
,
color
:
'rgba(58, 143, 255, 0.1)'
}
{
offset
:
1
,
color
:
'rgba(58, 143, 255, 0.1)'
}
])
])
},
},
},
{
},
{
...
@@ -1257,7 +1257,7 @@
...
@@ -1257,7 +1257,7 @@
type
:
'line'
,
type
:
'line'
,
data
:
deviceB
,
data
:
deviceB
,
smooth
:
true
,
smooth
:
true
,
lineStyle
:
{
type
:
'dashed'
},
lineStyle
:
{
type
:
'dashed'
},
label
:
{
label
:
{
show
:
true
,
show
:
true
,
position
:
'top'
,
position
:
'top'
,
...
@@ -1305,18 +1305,18 @@
...
@@ -1305,18 +1305,18 @@
type
:
'category'
,
type
:
'category'
,
boundaryGap
:
false
,
boundaryGap
:
false
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisTick
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
axisLabel
:
{
color
:
'#ccc'
,
fontSize
:
10
,
formatter
:
'{value}'
+
unit
}
axisLabel
:
{
color
:
'#ccc'
,
fontSize
:
10
,
formatter
:
'{value}'
+
unit
}
},
},
series
:
[{
series
:
[{
type
:
'line'
,
type
:
'line'
,
...
@@ -1374,24 +1374,24 @@
...
@@ -1374,24 +1374,24 @@
xAxis
:
{
xAxis
:
{
type
:
'category'
,
type
:
'category'
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}ppm'
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}ppm'
}
},
},
series
:
[{
series
:
[{
type
:
'bar'
,
type
:
'bar'
,
barWidth
:
'40%'
,
barWidth
:
'40%'
,
barGap
:
'0%'
,
barGap
:
'0%'
,
data
:
seriesData
,
data
:
seriesData
,
itemStyle
:
{
color
:
'#5087ec'
},
itemStyle
:
{
color
:
'#5087ec'
},
label
:
{
label
:
{
show
:
true
,
show
:
true
,
position
:
'top'
,
position
:
'top'
,
...
@@ -1426,18 +1426,18 @@
...
@@ -1426,18 +1426,18 @@
type
:
'category'
,
type
:
'category'
,
boundaryGap
:
false
,
boundaryGap
:
false
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisTick
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
axisLabel
:
{
color
:
'#ccc'
,
fontSize
:
10
,
formatter
:
'{value}'
+
'min'
}
axisLabel
:
{
color
:
'#ccc'
,
fontSize
:
10
,
formatter
:
'{value}'
+
'min'
}
},
},
series
:
[{
series
:
[{
type
:
'line'
,
type
:
'line'
,
...
@@ -1476,18 +1476,18 @@
...
@@ -1476,18 +1476,18 @@
type
:
'category'
,
type
:
'category'
,
boundaryGap
:
false
,
boundaryGap
:
false
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisTick
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
axisLabel
:
{
color
:
'#ccc'
,
fontSize
:
10
,
formatter
:
'{value}'
+
'min'
}
axisLabel
:
{
color
:
'#ccc'
,
fontSize
:
10
,
formatter
:
'{value}'
+
'min'
}
},
},
series
:
[{
series
:
[{
type
:
'line'
,
type
:
'line'
,
...
@@ -1526,18 +1526,18 @@
...
@@ -1526,18 +1526,18 @@
type
:
'category'
,
type
:
'category'
,
boundaryGap
:
false
,
boundaryGap
:
false
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisTick
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
axisLabel
:
{
color
:
'#ccc'
,
fontSize
:
10
,
formatter
:
'{value}'
+
'kpa'
}
axisLabel
:
{
color
:
'#ccc'
,
fontSize
:
10
,
formatter
:
'{value}'
+
'kpa'
}
},
},
series
:
[{
series
:
[{
type
:
'line'
,
type
:
'line'
,
...
@@ -1593,24 +1593,24 @@
...
@@ -1593,24 +1593,24 @@
xAxis
:
{
xAxis
:
{
type
:
'category'
,
type
:
'category'
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}ppm'
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
formatter
:
'{value}ppm'
}
},
},
series
:
[{
series
:
[{
type
:
'bar'
,
type
:
'bar'
,
barWidth
:
'40%'
,
barWidth
:
'40%'
,
barGap
:
'0%'
,
barGap
:
'0%'
,
data
:
seriesData
,
data
:
seriesData
,
itemStyle
:
{
color
:
'#5087ec'
},
itemStyle
:
{
color
:
'#5087ec'
},
label
:
{
label
:
{
show
:
true
,
show
:
true
,
position
:
'top'
,
position
:
'top'
,
...
@@ -1645,18 +1645,18 @@
...
@@ -1645,18 +1645,18 @@
type
:
'category'
,
type
:
'category'
,
boundaryGap
:
false
,
boundaryGap
:
false
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisTick
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
axisLabel
:
{
color
:
'#ccc'
,
fontSize
:
10
,
formatter
:
'{value}'
+
'min'
}
axisLabel
:
{
color
:
'#ccc'
,
fontSize
:
10
,
formatter
:
'{value}'
+
'min'
}
},
},
series
:
[{
series
:
[{
type
:
'line'
,
type
:
'line'
,
...
@@ -1695,18 +1695,18 @@
...
@@ -1695,18 +1695,18 @@
type
:
'category'
,
type
:
'category'
,
boundaryGap
:
false
,
boundaryGap
:
false
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisTick
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
,
interval
:
0
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
4
,
splitNumber
:
4
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
,
type
:
'dashed'
}
},
axisLabel
:
{
color
:
'#ccc'
,
fontSize
:
10
,
formatter
:
'{value}'
+
'min'
}
axisLabel
:
{
color
:
'#ccc'
,
fontSize
:
10
,
formatter
:
'{value}'
+
'min'
}
},
},
series
:
[{
series
:
[{
type
:
'line'
,
type
:
'line'
,
...
@@ -1757,13 +1757,13 @@
...
@@ -1757,13 +1757,13 @@
legend
:
{
legend
:
{
top
:
'-2%'
,
top
:
'-2%'
,
right
:
'5%'
,
right
:
'5%'
,
textStyle
:
{
color
:
'#fff'
,
fontSize
:
10
},
textStyle
:
{
color
:
'#fff'
,
fontSize
:
10
},
itemWidth
:
20
,
itemWidth
:
20
,
itemHeight
:
10
,
itemHeight
:
10
,
},
},
tooltip
:
{
tooltip
:
{
trigger
:
'axis'
,
trigger
:
'axis'
,
axisPointer
:
{
type
:
'shadow'
},
axisPointer
:
{
type
:
'shadow'
},
formatter
:
(
params
)
=>
{
formatter
:
(
params
)
=>
{
let
tooltipHtml
=
`<div style="font-weight:bold;margin-bottom:5px">
${
params
[
0
].
name
}
</div>`
let
tooltipHtml
=
`<div style="font-weight:bold;margin-bottom:5px">
${
params
[
0
].
name
}
</div>`
...
@@ -1802,17 +1802,17 @@
...
@@ -1802,17 +1802,17 @@
xAxis
:
{
xAxis
:
{
type
:
'category'
,
type
:
'category'
,
data
:
xAxisData
,
data
:
xAxisData
,
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
},
},
yAxis
:
{
yAxis
:
{
type
:
'value'
,
type
:
'value'
,
splitNumber
:
5
,
splitNumber
:
5
,
min
:
0
,
min
:
0
,
max
:
max
,
max
:
max
,
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
'#0a73ff'
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
splitLine
:
{
lineStyle
:
{
color
:
'#0a73ff'
,
width
:
0.5
,
opacity
:
0.3
}
},
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
axisLabel
:
{
color
:
'#fff'
,
fontSize
:
10
}
},
},
series
:
[{
series
:
[{
name
:
'投产数量'
,
name
:
'投产数量'
,
...
@@ -1820,7 +1820,7 @@
...
@@ -1820,7 +1820,7 @@
barWidth
:
'40%'
,
barWidth
:
'40%'
,
barGap
:
'0%'
,
barGap
:
'0%'
,
data
:
operationData
,
data
:
operationData
,
itemStyle
:
{
color
:
'#5087ec'
},
itemStyle
:
{
color
:
'#5087ec'
},
label
:
{
label
:
{
show
:
true
,
show
:
true
,
position
:
'top'
,
position
:
'top'
,
...
@@ -1834,7 +1834,7 @@
...
@@ -1834,7 +1834,7 @@
barWidth
:
'40%'
,
barWidth
:
'40%'
,
barGap
:
'0%'
,
barGap
:
'0%'
,
data
:
quantityData
,
data
:
quantityData
,
itemStyle
:
{
color
:
'#68bbc4'
},
itemStyle
:
{
color
:
'#68bbc4'
},
label
:
{
label
:
{
show
:
true
,
show
:
true
,
position
:
'top'
,
position
:
'top'
,
...
@@ -1985,14 +1985,6 @@
...
@@ -1985,14 +1985,6 @@
border-right
:
2px
solid
#cbdbf8
;
border-right
:
2px
solid
#cbdbf8
;
background
:
transparent
;
background
:
transparent
;
border-radius
:
10px
;
border-radius
:
10px
;
<<<<<<<
HEAD
animation
:
rainbow-glow
5s
linear
infinite
;
box-shadow
:
-10px
0
10px
-10px
#ff0000
,
10px
0
10px
-10px
#ff0000
,
inset
-10px
0
10px
-10px
#ff0000
,
inset
10px
0
10px
-10px
#ff0000
;
background-color
:
transparent
;
.badgeIcon
{
.badgeIcon
{
position
:
absolute
;
position
:
absolute
;
...
@@ -2105,7 +2097,7 @@
...
@@ -2105,7 +2097,7 @@
width
:
100%
;
width
:
100%
;
background-color
:
transparent
;
background-color
:
transparent
;
.el-table__body
tr
:
hover
>
td
.
el-table__cell
{
.el-table__body
tr
:
hover
>
td
.
el-table__cell
{
background-color
:
rgba
(
10
,
115
,
255
,
0.3
);
background-color
:
rgba
(
10
,
115
,
255
,
0.3
);
}
}
}
}
...
...
tht_project/static/src/view/equipment_status.html
View file @
9d0fe1d7
...
@@ -31,10 +31,7 @@
...
@@ -31,10 +31,7 @@
</div>
</div>
<div
class=
"workshop-filter"
style=
"text-align: center; margin: 10px 0"
>
<div
class=
"workshop-filter"
style=
"text-align: center; margin: 10px 0"
>
<el-radio-group
<el-radio-group
v-model=
"selectedWorkshop"
@
change=
"onWorkshopChange"
size=
"medium"
>
v-model=
"selectedWorkshop"
@
change=
"onWorkshopChange"
size=
"medium"
>
<el-radio
label=
""
>
<el-radio
label=
""
>
<span
style=
"font-size: 18px;"
>
全部
<span></el-radio>
<span
style=
"font-size: 18px;"
>
全部
<span></el-radio>
<el-radio
label=
"预料车间"
>
<el-radio
label=
"预料车间"
>
...
@@ -43,13 +40,14 @@
...
@@ -43,13 +40,14 @@
<el-radio
label=
"蒸煮车间"
>
<el-radio
label=
"蒸煮车间"
>
<span
style=
"font-size: 18px"
>
成型车间
<span>
<span
style=
"font-size: 18px"
>
成型车间
<span>
</el-radio>
</el-radio>
<el-radio
label=
"包装车间"
>
<el-radio
label=
"包装车间"
>
<span
style=
"font-size: 18px"
>
包装车间
<span>
<span
style=
"font-size: 18px"
>
包装车间
<span>
</el-radio>
</el-radio>
</el-radio-group>
</el-radio-group>
</div>
</div>
<!-- 设备状态卡片区域 - 新设计 -->
<!-- 设备状态卡片区域 - 新设计 -->
<div
class=
"scrollBoxClass"
>
<div
class=
"device-cards-container"
>
<div
class=
"device-cards-container"
>
<div
v-for=
"(device, index) in deviceList"
:key=
"index"
class=
"device-card new-design"
<div
v-for=
"(device, index) in deviceList"
:key=
"index"
class=
"device-card new-design"
:class=
"getCardClass(device.status)"
>
:class=
"getCardClass(device.status)"
>
...
@@ -122,6 +120,7 @@
...
@@ -122,6 +120,7 @@
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 底部状态图 -->
<!-- 底部状态图 -->
<div
class=
"status-chart glass-effect"
v-if=
"false"
>
<div
class=
"status-chart glass-effect"
v-if=
"false"
>
...
@@ -201,20 +200,20 @@
...
@@ -201,20 +200,20 @@
<script>
<script>
// 发送消息给父页面(关闭odoo的菜单弹窗)
// 发送消息给父页面(关闭odoo的菜单弹窗)
document
.
addEventListener
(
"click"
,
()
=>
{
document
.
addEventListener
(
"click"
,
function
()
{
window
.
parent
.
postMessage
(
"hidePopover"
,
"*"
);
window
.
parent
.
postMessage
(
"hidePopover"
,
"*"
);
});
});
let
vue
=
new
Vue
({
let
vue
=
new
Vue
({
el
:
"#app"
,
el
:
"#app"
,
delimiters
:
[
"[["
,
"]]"
],
// 替换原本vue的[[ key ]]取值方式(与odoo使用的jinja2冲突问题)
delimiters
:
[
"[["
,
"]]"
],
// 替换原本vue的[[ key ]]取值方式(与odoo使用的jinja2冲突问题)
data
()
{
data
:
function
()
{
return
{
return
{
isFullscreen
:
false
,
// 全屏状态
isFullscreen
:
false
,
// 全屏状态
currentTime
:
null
,
// 当前时间
currentTime
:
null
,
// 当前时间
timer
:
null
,
// 定时器
timer
:
null
,
// 定时器
windowHeight
:
window
.
innerHeight
,
// 窗口高度
windowHeight
:
window
.
innerHeight
,
// 窗口高度
// dwsURL: "https://workstation.rokeris
.com", // 基地址
dwsURL
:
"https://tht.dws.rokecloud
.com"
,
// 基地址
dwsURL
:
""
,
// 基地址
//
dwsURL: "", // 基地址
baseURL
:
"https://dws-platform.xbg.rokeris.com/dev-api"
,
// 基地址
baseURL
:
"https://dws-platform.xbg.rokeris.com/dev-api"
,
// 基地址
loading
:
false
,
// 全局加载效果
loading
:
false
,
// 全局加载效果
deviceList
:
[],
// 设备列表
deviceList
:
[],
// 设备列表
...
@@ -230,7 +229,7 @@
...
@@ -230,7 +229,7 @@
selectedWorkshop
:
""
,
// 新增字段:当前选中的车间
selectedWorkshop
:
""
,
// 新增字段:当前选中的车间
};
};
},
},
created
()
{
created
:
function
()
{
if
(
this
.
getUrlSearch
(
"factory_code"
))
{
if
(
this
.
getUrlSearch
(
"factory_code"
))
{
this
.
factoryCode
=
this
.
getUrlSearch
(
"factory_code"
);
//截取url后面的参数
this
.
factoryCode
=
this
.
getUrlSearch
(
"factory_code"
);
//截取url后面的参数
}
}
...
@@ -238,13 +237,13 @@
...
@@ -238,13 +237,13 @@
},
},
computed
:
{
computed
:
{
// 选中设备的信息
// 选中设备的信息
selDeviceInfo
()
{
selDeviceInfo
:
function
()
{
return
this
.
deviceList
.
find
(
(
item
)
=>
item
.
id
==
this
.
selectedDevice
);
return
this
.
deviceList
.
find
(
function
(
item
)
{
return
item
.
id
==
this
.
selectedDevice
;
}.
bind
(
this
)
);
},
},
},
},
async
mounted
()
{
async
mounted
()
{
window
.
addEventListener
(
"resize"
,
this
.
handleResize
);
window
.
addEventListener
(
"resize"
,
this
.
handleResize
);
this
.
$nextTick
(
()
=>
{
this
.
$nextTick
(
function
()
{
document
.
getElementById
(
"bodyId"
).
style
.
display
=
"block"
;
document
.
getElementById
(
"bodyId"
).
style
.
display
=
"block"
;
});
});
...
@@ -258,26 +257,26 @@
...
@@ -258,26 +257,26 @@
this
.
dateList
=
this
.
getLastAssignDays
();
this
.
dateList
=
this
.
getLastAssignDays
();
// 设置定时刷新(每分钟刷新一次,静默模式)
// 设置定时刷新(每分钟刷新一次,静默模式)
this
.
refreshInterval
=
setInterval
(
()
=>
{
this
.
refreshInterval
=
setInterval
(
function
()
{
this
.
initData
(
true
);
// 传入true表示静默刷新,不显示加载提示
this
.
initData
(
true
);
// 传入true表示静默刷新,不显示加载提示
},
60000
);
}
.
bind
(
this
)
,
60000
);
// 设置设备信息的title属性
// 设置设备信息的title属性
this
.
$nextTick
(
()
=>
{
this
.
$nextTick
(
function
()
{
document
.
querySelectorAll
(
".device-info"
).
forEach
(
(
el
)
=>
{
document
.
querySelectorAll
(
".device-info"
).
forEach
(
function
(
el
)
{
el
.
title
=
el
.
dataset
.
fullTitle
;
el
.
title
=
el
.
dataset
.
fullTitle
;
});
});
});
});
},
},
updated
()
{
updated
:
function
()
{
// 在数据更新后也设置title属性
// 在数据更新后也设置title属性
this
.
$nextTick
(
()
=>
{
this
.
$nextTick
(
function
()
{
document
.
querySelectorAll
(
".device-info"
).
forEach
(
(
el
)
=>
{
document
.
querySelectorAll
(
".device-info"
).
forEach
(
function
(
el
)
{
el
.
title
=
el
.
dataset
.
fullTitle
;
el
.
title
=
el
.
dataset
.
fullTitle
;
});
});
});
});
},
},
beforeDestroy
()
{
beforeDestroy
:
function
()
{
// 清除定时器
// 清除定时器
if
(
this
.
refreshInterval
)
{
if
(
this
.
refreshInterval
)
{
clearInterval
(
this
.
refreshInterval
);
clearInterval
(
this
.
refreshInterval
);
...
@@ -290,7 +289,7 @@
...
@@ -290,7 +289,7 @@
},
},
methods
:
{
methods
:
{
// 全屏icon点击事件
// 全屏icon点击事件
toggleFullscreen
()
{
toggleFullscreen
:
function
()
{
if
(
!
this
.
isFullscreen
)
{
if
(
!
this
.
isFullscreen
)
{
this
.
enterFullScreen
()
this
.
enterFullScreen
()
}
else
{
}
else
{
...
@@ -298,7 +297,7 @@
...
@@ -298,7 +297,7 @@
}
}
},
},
// 全屏方法
// 全屏方法
enterFullScreen
()
{
enterFullScreen
:
function
()
{
// 获取需要全屏的元素
// 获取需要全屏的元素
const
elem
=
this
.
$refs
.
fullScreenElement
const
elem
=
this
.
$refs
.
fullScreenElement
if
(
elem
.
requestFullscreen
)
{
if
(
elem
.
requestFullscreen
)
{
...
@@ -315,7 +314,7 @@
...
@@ -315,7 +314,7 @@
}
}
this
.
isFullscreen
=
true
this
.
isFullscreen
=
true
},
},
exitFullScreen
()
{
exitFullScreen
:
function
()
{
if
(
document
.
exitFullscreen
)
{
if
(
document
.
exitFullscreen
)
{
document
.
exitFullscreen
()
document
.
exitFullscreen
()
}
else
if
(
document
.
mozCancelFullScreen
)
{
}
else
if
(
document
.
mozCancelFullScreen
)
{
...
@@ -330,12 +329,12 @@
...
@@ -330,12 +329,12 @@
}
}
this
.
isFullscreen
=
false
this
.
isFullscreen
=
false
},
},
onWorkshopChange
()
{
onWorkshopChange
:
function
()
{
this
.
initData
();
// 触发重新加载数据
this
.
initData
();
// 触发重新加载数据
},
},
// 初始化当前时间
// 初始化当前时间
initCurrentTimeFn
()
{
initCurrentTimeFn
:
function
()
{
this
.
timer
=
setInterval
(
()
=>
{
this
.
timer
=
setInterval
(
function
()
{
const
now
=
new
Date
();
const
now
=
new
Date
();
const
year
=
now
.
getFullYear
();
const
year
=
now
.
getFullYear
();
const
month
=
String
(
now
.
getMonth
()
+
1
).
padStart
(
2
,
'0'
);
const
month
=
String
(
now
.
getMonth
()
+
1
).
padStart
(
2
,
'0'
);
...
@@ -344,10 +343,10 @@
...
@@ -344,10 +343,10 @@
const
minutes
=
String
(
now
.
getMinutes
()).
padStart
(
2
,
'0'
);
const
minutes
=
String
(
now
.
getMinutes
()).
padStart
(
2
,
'0'
);
const
seconds
=
String
(
now
.
getSeconds
()).
padStart
(
2
,
'0'
);
const
seconds
=
String
(
now
.
getSeconds
()).
padStart
(
2
,
'0'
);
this
.
currentTime
=
`
${
year
}
-
${
month
}
-
${
day
}
${
hours
}
:
${
minutes
}
:
${
seconds
}
`
this
.
currentTime
=
`
${
year
}
-
${
month
}
-
${
day
}
${
hours
}
:
${
minutes
}
:
${
seconds
}
`
},
1000
)
}
.
bind
(
this
)
,
1000
)
},
},
// 通过网址跳转过来的页面,截取后面的参数
// 通过网址跳转过来的页面,截取后面的参数
getUrlSearch
(
name
)
{
getUrlSearch
:
function
(
name
)
{
// 未传参,返回空
// 未传参,返回空
if
(
!
name
)
return
""
;
if
(
!
name
)
return
""
;
// 查询参数:先通过search取值,如果取不到就通过hash来取
// 查询参数:先通过search取值,如果取不到就通过hash来取
...
@@ -522,33 +521,33 @@
...
@@ -522,33 +521,33 @@
},
},
// 处理设备状态数据
// 处理设备状态数据
processDeviceStateData
(
deviceStateData
)
{
processDeviceStateData
:
function
(
deviceStateData
)
{
if
(
!
deviceStateData
||
!
Array
.
isArray
(
deviceStateData
))
{
if
(
!
deviceStateData
||
!
Array
.
isArray
(
deviceStateData
))
{
return
;
return
;
}
}
const
codeToSeqMap
=
{};
var
codeToSeqMap
=
{};
this
.
allEquipmentData
.
forEach
(
equip
=>
{
this
.
allEquipmentData
.
forEach
(
function
(
equip
)
{
codeToSeqMap
[
equip
.
code
]
=
equip
.
sequence
;
codeToSeqMap
[
equip
.
code
]
=
equip
.
sequence
;
});
});
// 获取当前车间下的设备 code 列表
// 获取当前车间下的设备 code 列表
const
validCodes
=
this
.
allEquipmentData
var
validCodes
=
this
.
allEquipmentData
.
filter
(
e
=>
!
this
.
selectedWorkshop
||
e
.
plant_name
===
this
.
selectedWorkshop
)
.
filter
(
function
(
e
)
{
return
!
this
.
selectedWorkshop
||
e
.
plant_name
===
this
.
selectedWorkshop
;
}.
bind
(
this
))
.
map
(
e
=>
e
.
code
);
.
map
(
function
(
e
)
{
return
e
.
code
;
});
// 过滤掉不属于当前车间的设备
// 过滤掉不属于当前车间的设备
const
filteredDevices
=
deviceStateData
.
filter
(
d
=>
var
filteredDevices
=
deviceStateData
.
filter
(
function
(
d
)
{
!
this
.
selectedWorkshop
||
validCodes
.
includes
(
d
.
code
)
return
!
this
.
selectedWorkshop
||
validCodes
.
includes
(
d
.
code
);
).
map
(
device
=>
({
}.
bind
(
this
)).
map
(
function
(
device
)
{
...
device
,
var
newDevice
=
Object
.
assign
({},
device
);
seq
:
codeToSeqMap
[
device
.
code
]
||
Number
.
MAX_SAFE_INTEGER
// 如果找不到 seq,默认排最后
newDevice
.
seq
=
codeToSeqMap
[
device
.
code
]
||
Number
.
MAX_SAFE_INTEGER
;
// 如果找不到 seq,默认排最后
}));
return
newDevice
;
});
// 将API返回的数据转换为页面所需的格式
// 将API返回的数据转换为页面所需的格式
this
.
deviceList
=
filteredDevices
.
map
(
(
device
)
=>
{
this
.
deviceList
=
filteredDevices
.
map
(
function
(
device
)
{
// 根据API返回的状态确定前端显示的状态
// 根据API返回的状态确定前端显示的状态
let
status
=
"off"
;
var
status
=
"off"
;
if
(
device
.
state
===
"green"
)
{
if
(
device
.
state
===
"green"
)
{
status
=
"running"
;
status
=
"running"
;
}
else
if
(
device
.
state
===
"yellow"
)
{
}
else
if
(
device
.
state
===
"yellow"
)
{
...
@@ -559,33 +558,30 @@
...
@@ -559,33 +558,30 @@
status
=
"off"
;
status
=
"off"
;
}
}
// 计算持续时间的显示格式
// 计算持续时间的显示格式
let
durationText
=
"0"
var
durationText
=
"0"
if
(
device
.
duration_hours
!==
undefined
)
{
if
(
device
.
duration_hours
!==
undefined
)
{
durationText
=
this
.
formatTime
(
Number
(
device
.
duration_hours
*
3600
))
durationText
=
this
.
formatTime
(
Number
(
device
.
duration_hours
*
3600
))
}
}
let
run_seconds
=
"0"
var
run_seconds
=
"0"
if
(
device
.
run_seconds
!==
undefined
)
run_seconds
=
this
.
formatTime
(
Number
(
device
.
run_seconds
))
if
(
device
.
run_seconds
!==
undefined
)
run_seconds
=
this
.
formatTime
(
Number
(
device
.
run_seconds
))
let
green_seconds
=
"0"
var
green_seconds
=
"0"
if
(
device
.
green_seconds
!==
undefined
)
green_seconds
=
this
.
formatTime
(
Number
(
device
.
green_seconds
))
if
(
device
.
green_seconds
!==
undefined
)
green_seconds
=
this
.
formatTime
(
Number
(
device
.
green_seconds
))
let
yellow_seconds
=
"0"
var
yellow_seconds
=
"0"
if
(
device
.
yellow_seconds
!==
undefined
)
yellow_seconds
=
this
.
formatTime
(
Number
(
device
.
yellow_seconds
))
if
(
device
.
yellow_seconds
!==
undefined
)
yellow_seconds
=
this
.
formatTime
(
Number
(
device
.
yellow_seconds
))
let
red_seconds
=
"0"
var
red_seconds
=
"0"
if
(
device
.
red_seconds
!==
undefined
)
yellow_seconds
=
this
.
formatTime
(
Number
(
device
.
yellow
_seconds
))
if
(
device
.
red_seconds
!==
undefined
)
red_seconds
=
this
.
formatTime
(
Number
(
device
.
red
_seconds
))
// 计算利用率百分比,确保有效值
// 计算利用率百分比,确保有效值
const
percentage
=
device
.
utilization_rate
!==
undefined
?
Math
.
round
(
device
var
percentage
=
device
.
utilization_rate
!==
undefined
?
Math
.
round
(
device
.
utilization_rate
)
:
0
.
utilization_rate
)
:
0
// 从所有设备列表中获取准确的设备名称
// 从所有设备列表中获取准确的设备名称
let
deviceName
=
device
.
name
||
device
.
code
// 默认使用API返回的名称或编码
var
deviceName
=
device
.
name
||
device
.
code
// 默认使用API返回的名称或编码
// 在所有设备列表中查找匹配的设备
// 在所有设备列表中查找匹配的设备
if
(
this
.
allEquipmentData
&&
this
.
allEquipmentData
.
length
>
0
)
{
if
(
this
.
allEquipmentData
&&
this
.
allEquipmentData
.
length
>
0
)
{
const
matchedDevice
=
this
.
allEquipmentData
.
find
(
var
matchedDevice
=
this
.
allEquipmentData
.
find
(
function
(
equip
)
{
return
equip
.
code
===
device
.
code
;
});
(
equip
)
=>
equip
.
code
===
device
.
code
)
// 如果找到匹配的设备,使用其名称
// 如果找到匹配的设备,使用其名称
if
(
matchedDevice
&&
matchedDevice
.
name
)
{
if
(
matchedDevice
&&
matchedDevice
.
name
)
{
deviceName
=
device
.
name
?
matchedDevice
.
name
:
device
.
code
deviceName
=
device
.
name
?
matchedDevice
.
name
:
device
.
code
...
@@ -605,28 +601,28 @@
...
@@ -605,28 +601,28 @@
yellow_seconds
:
yellow_seconds
,
yellow_seconds
:
yellow_seconds
,
red_seconds
:
red_seconds
red_seconds
:
red_seconds
}
}
}
).
sort
((
a
,
b
)
=>
(
codeToSeqMap
[
a
.
code
]
||
Number
.
MAX_SAFE_INTEGER
)
}
.
bind
(
this
)).
sort
(
function
(
a
,
b
)
{
-
(
codeToSeqMap
[
b
.
code
]
||
Number
.
MAX_SAFE_INTEGER
)
);
return
(
codeToSeqMap
[
a
.
code
]
||
Number
.
MAX_SAFE_INTEGER
)
-
(
codeToSeqMap
[
b
.
code
]
||
Number
.
MAX_SAFE_INTEGER
);
this
.
deviceList
=
this
.
deviceList
.
filter
((
device
)
=>
device
)
});
},
},
formatTime
(
seconds
)
{
formatTime
:
function
(
seconds
)
{
if
(
seconds
<
60
)
{
if
(
seconds
<
60
)
{
return
`0min`
;
// 不足 1 分钟显示 0min
return
`0min`
;
// 不足 1 分钟显示 0min
}
else
if
(
seconds
<
3600
)
{
}
else
if
(
seconds
<
3600
)
{
const
minutes
=
Math
.
floor
(
seconds
/
60
);
// 转换为分钟
var
minutes
=
Math
.
floor
(
seconds
/
60
);
// 转换为分钟
return
`
${
minutes
}
min`
;
// 显示分钟
return
`
${
minutes
}
min`
;
// 显示分钟
}
else
if
(
seconds
<
86400
)
{
// 小于 1 天
}
else
if
(
seconds
<
86400
)
{
// 小于 1 天
const
hours
=
Math
.
floor
(
seconds
/
3600
);
// 转换为小时
var
hours
=
Math
.
floor
(
seconds
/
3600
);
// 转换为小时
return
`
${
hours
}
h`
;
// 只返回小时
return
`
${
hours
}
h`
;
// 只返回小时
}
else
{
}
else
{
const
days
=
Math
.
floor
(
seconds
/
86400
);
// 转换为天数
var
days
=
Math
.
floor
(
seconds
/
86400
);
// 转换为天数
return
`
${
days
}
d`
;
// 只返回天
return
`
${
days
}
d`
;
// 只返回天
}
}
},
},
// 初始化模拟数据 (保留原有的模拟数据方法,作为备用)
// 初始化模拟数据 (保留原有的模拟数据方法,作为备用)
initMockData
()
{
initMockData
:
function
()
{
// 模拟设备数据 - 添加不同状态和明显不同百分比的测试数据
// 模拟设备数据 - 添加不同状态和明显不同百分比的测试数据
this
.
deviceList
=
[
this
.
deviceList
=
[
// {
// {
...
@@ -668,7 +664,7 @@
...
@@ -668,7 +664,7 @@
},
},
// 获取卡片的CSS类名
// 获取卡片的CSS类名
getCardClass
(
status
)
{
getCardClass
:
function
(
status
)
{
switch
(
status
)
{
switch
(
status
)
{
case
"running"
:
case
"running"
:
return
"card-running"
;
return
"card-running"
;
...
@@ -683,7 +679,7 @@
...
@@ -683,7 +679,7 @@
},
},
// 获取边框的CSS类名
// 获取边框的CSS类名
getBorderClass
(
status
)
{
getBorderClass
:
function
(
status
)
{
switch
(
status
)
{
switch
(
status
)
{
case
"running"
:
case
"running"
:
return
"border-running"
;
return
"border-running"
;
...
@@ -698,7 +694,7 @@
...
@@ -698,7 +694,7 @@
},
},
// 获取设备状态对应的CSS类名
// 获取设备状态对应的CSS类名
getStatusClass
(
status
)
{
getStatusClass
:
function
(
status
)
{
switch
(
status
)
{
switch
(
status
)
{
case
"running"
:
case
"running"
:
return
"status-running"
;
return
"status-running"
;
...
@@ -713,7 +709,7 @@
...
@@ -713,7 +709,7 @@
},
},
// 获取波浪效果的类名
// 获取波浪效果的类名
getWaveClass
(
status
)
{
getWaveClass
:
function
(
status
)
{
switch
(
status
)
{
switch
(
status
)
{
case
"running"
:
case
"running"
:
return
"wave-running"
;
return
"wave-running"
;
...
@@ -728,23 +724,16 @@
...
@@ -728,23 +724,16 @@
},
},
// 获取波浪高度
// 获取波浪高度
getWaveHeight
(
status
,
percentage
)
{
getWaveHeight
:
function
(
status
,
percentage
)
{
// 将百分比限制在10%-100%之间,确保即使是低百分比也有一定的水位可见
// 将百分比限制在10%-100%之间,确保即使是低百分比也有一定的水位可见
let
height
=
percentage
;
var
height
=
percentage
;
// 如果是故障或停机状态,固定显示50%
// if (status === "error" || status === "off") {
// height = 50;
// }
// 确保最小高度为10%,最大为100%
// 确保最小高度为10%,最大为100%
height
=
Math
.
min
(
Math
.
max
(
height
,
10
),
100
);
height
=
Math
.
min
(
Math
.
max
(
height
,
10
),
100
);
return
height
;
return
height
;
},
},
// 获取设备状态对应的文本
// 获取设备状态对应的文本
getStatusText
(
status
)
{
getStatusText
:
function
(
status
)
{
switch
(
status
)
{
switch
(
status
)
{
case
"running"
:
case
"running"
:
return
"运行中"
;
return
"运行中"
;
...
@@ -759,10 +748,11 @@
...
@@ -759,10 +748,11 @@
},
},
// 处理小数位数方法
// 处理小数位数方法
toFixedHandle
(
value
,
num
=
4
)
{
toFixedHandle
:
function
(
value
,
num
)
{
if
(
num
===
undefined
)
num
=
4
;
if
(
value
)
{
if
(
value
)
{
let
strValue
=
String
(
value
);
var
strValue
=
String
(
value
);
if
(
strValue
.
split
(
"."
).
length
>
1
||
strValue
.
split
(
"."
)[
1
]?.
length
>
num
)
{
if
(
strValue
.
split
(
"."
).
length
>
1
||
(
strValue
.
split
(
"."
)[
1
]
&&
strValue
.
split
(
"."
)[
1
].
length
>
num
)
)
{
strValue
=
Number
(
strValue
).
toFixed
(
num
);
strValue
=
Number
(
strValue
).
toFixed
(
num
);
}
}
return
Number
(
strValue
);
return
Number
(
strValue
);
...
@@ -772,26 +762,26 @@
...
@@ -772,26 +762,26 @@
},
},
// 计算高度百分比
// 计算高度百分比
calculateHeight
(
hours
)
{
calculateHeight
:
function
(
hours
)
{
// 24小时对应整个高度(100%)
// 24小时对应整个高度(100%)
// 每4小时对应一个刻度区间,总共6个区间
// 每4小时对应一个刻度区间,总共6个区间
// 计算每小时占的百分比:100% / 24 ≈ 4.167%
// 计算每小时占的百分比:100% / 24 ≈ 4.167%
const
heightPerHour
=
100
/
24
;
var
heightPerHour
=
100
/
24
;
const
percentage
=
hours
*
heightPerHour
;
var
percentage
=
hours
*
heightPerHour
;
// 确保高度在0-100%之间
// 确保高度在0-100%之间
return
Math
.
min
(
Math
.
max
(
percentage
,
0
),
100
);
return
Math
.
min
(
Math
.
max
(
percentage
,
0
),
100
);
},
},
// 获取最后指定天数的日期
// 获取最后指定天数的日期
getLastAssignDays
(
num
=
10
)
{
getLastAssignDays
:
function
(
num
)
{
const
dates
=
[];
if
(
num
===
undefined
)
num
=
10
;
for
(
let
i
=
num
-
1
;
i
>=
0
;
i
--
)
{
var
dates
=
[];
const
date
=
new
Date
();
for
(
var
i
=
num
-
1
;
i
>=
0
;
i
--
)
{
var
date
=
new
Date
();
date
.
setDate
(
date
.
getDate
()
-
i
);
date
.
setDate
(
date
.
getDate
()
-
i
);
const
year
=
date
.
getFullYear
();
var
year
=
date
.
getFullYear
();
const
month
=
String
(
date
.
getMonth
()
+
1
).
padStart
(
2
,
"0"
);
var
month
=
String
(
date
.
getMonth
()
+
1
).
padStart
(
2
,
"0"
);
const
day
=
String
(
date
.
getDate
()).
padStart
(
2
,
"0"
);
var
day
=
String
(
date
.
getDate
()).
padStart
(
2
,
"0"
);
dates
.
push
(
`
${
year
}
-
${
month
}
-
${
day
}
`
);
dates
.
push
(
`
${
year
}
-
${
month
}
-
${
day
}
`
);
}
}
this
.
start_time
=
dates
[
0
];
// 第一天
this
.
start_time
=
dates
[
0
];
// 第一天
...
@@ -800,25 +790,25 @@
...
@@ -800,25 +790,25 @@
},
},
// 处理窗口大小变化
// 处理窗口大小变化
handleResize
()
{
handleResize
:
function
()
{
// 窗口大小变化时的处理逻辑
// 窗口大小变化时的处理逻辑
},
},
// 文本截断方法
// 文本截断方法
truncateText
(
text
,
maxLength
)
{
truncateText
:
function
(
text
,
maxLength
)
{
if
(
!
text
)
return
""
;
if
(
!
text
)
return
""
;
if
(
text
.
length
<=
maxLength
)
return
text
;
if
(
text
.
length
<=
maxLength
)
return
text
;
return
text
.
substring
(
0
,
maxLength
)
+
"..."
;
return
text
.
substring
(
0
,
maxLength
)
+
"..."
;
},
},
// 显示完整标题
// 显示完整标题
showFullTitle
(
event
,
device
)
{
showFullTitle
:
function
(
event
,
device
)
{
const
fullTitle
=
device
.
name
+
" | "
+
device
.
code
;
var
fullTitle
=
device
.
name
+
" | "
+
device
.
code
;
event
.
target
.
setAttribute
(
"title"
,
fullTitle
);
event
.
target
.
setAttribute
(
"title"
,
fullTitle
);
},
},
// 获取ERR文字的CSS类名
// 获取ERR文字的CSS类名
getErrClass
(
status
)
{
getErrClass
:
function
(
status
)
{
if
(
status
===
"error"
)
{
if
(
status
===
"error"
)
{
return
"err-error"
;
return
"err-error"
;
}
}
...
@@ -826,7 +816,7 @@
...
@@ -826,7 +816,7 @@
},
},
// 获取OFF文字的CSS类名
// 获取OFF文字的CSS类名
getOffClass
(
status
)
{
getOffClass
:
function
(
status
)
{
if
(
status
===
"off"
)
{
if
(
status
===
"off"
)
{
return
"off-status"
;
return
"off-status"
;
}
}
...
@@ -912,6 +902,12 @@
...
@@ -912,6 +902,12 @@
gap
:
10px
;
gap
:
10px
;
}
}
.scrollBoxClass
{
height
:
1px
;
flex
:
auto
;
overflow-y
:
auto
;
}
/* 设备卡片容器 */
/* 设备卡片容器 */
.device-cards-container
{
.device-cards-container
{
display
:
grid
;
display
:
grid
;
...
@@ -1300,6 +1296,7 @@
...
@@ -1300,6 +1296,7 @@
font-size
:
10px
;
font-size
:
10px
;
color
:
#fff
;
color
:
#fff
;
margin-top
:
5px
;
margin-top
:
5px
;
}
.flxe_label_sty
{
.flxe_label_sty
{
margin-right
:
2px
;
margin-right
:
2px
;
...
@@ -1314,7 +1311,6 @@
...
@@ -1314,7 +1311,6 @@
border-radius
:
2px
;
border-radius
:
2px
;
margin-left
:
10px
;
margin-left
:
10px
;
}
}
}
</style>
</style>
</html>
</html>
\ 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