Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
DC-TOM
Project
Project
Details
Activity
Releases
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
刘照晖
DC-TOM
Commits
d109cbdd
Commit
d109cbdd
authored
May 27, 2025
by
liuzhaoh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
设备管理联调
parent
c80f0375
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
416 additions
and
128 deletions
+416
-128
index.html
index.html
+44
-11
notice.png
src/assets/icons/notice.png
+0
-0
index.vue
src/components/CommonTable/index.vue
+5
-1
healthyProgress.vue
src/views/dustMonitoring/components/healthyProgress.vue
+83
-0
warn.vue
src/views/dustMonitoring/components/warn.vue
+17
-3
index.vue
src/views/dustMonitoring/index.vue
+77
-40
paramsSetings.vue
src/views/equipmentManagement/components/paramsSetings.vue
+136
-66
index.vue
src/views/equipmentManagement/index.vue
+54
-7
No files found.
index.html
View file @
d109cbdd
<!doctype html>
<html
lang=
"en"
>
<head>
<meta
charset=
"UTF-8"
/>
<link
rel=
"icon"
type=
"image/svg+xml"
href=
"/vite.svg"
/>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
/>
<title>
DCTOM
</title>
</head>
<body>
<div
id=
"app"
></div>
<script
type=
"module"
src=
"/src/main.js"
></script>
</body>
</html>
<head>
<meta
charset=
"UTF-8"
/>
<link
rel=
"icon"
type=
"image/svg+xml"
href=
"/vite.svg"
/>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
/>
<script
src=
"https://cdn.tailwindcss.com"
></script>
<link
href=
"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css"
rel=
"stylesheet"
>
<title>
DCTOM
</title>
<style
type=
"text/tailwindcss"
>
@layer
utilities
{
.content-auto
{
content-visibility
:
auto
;
}
.diagonal-pattern
{
background-image
:
repeating-linear-gradient
(
45deg
,
rgba
(
6
,
241
,
14
,
0.829
),
rgba
(
6
,
241
,
14
,
0.829
)
10px
,
rgba
(
6
,
241
,
14
,
0.829
)
15px
,
rgba
(
255
,
255
,
255
,
0.1
)
20px
);
background-size
:
28px
28px
;
}
.diagonal-pattern-animation
{
animation
:
slide
1s
linear
infinite
;
}
@keyframes
slide
{
0
%
{
background-position
:
0
0
;
}
100
%
{
background-position
:
28px
0
;
}
}
}
</style>
</head>
<body>
<div
id=
"app"
></div>
<script
type=
"module"
src=
"/src/main.js"
></script>
</body>
</html>
\ No newline at end of file
src/assets/icons/notice.png
0 → 100644
View file @
d109cbdd
2.32 KB
src/components/CommonTable/index.vue
View file @
d109cbdd
...
...
@@ -8,7 +8,7 @@
:height=
"tableHeight"
>
<template
v-for=
"column in columns"
:key=
"column.prop"
>
<el-table-column
v-bind=
"column"
>
<el-table-column
v-bind=
"column"
:align=
"align"
>
<template
#
default=
"scope"
>
<slot
:name=
"column.prop"
...
...
@@ -90,6 +90,10 @@ const props = defineProps({
type
:
Number
,
default
:
300
,
},
align
:
{
type
:
String
,
default
:
"left"
,
}
});
const
emit
=
defineEmits
([
...
...
src/views/dustMonitoring/components/healthyProgress.vue
0 → 100644
View file @
d109cbdd
<
template
>
<!-- 方形进度条 -->
<div
class=
"healthy-progress"
>
<div
class=
"h-8 bg-slate-800/60 test rounded overflow-hidden border border-slate-700 healthy-progress-bar"
>
<div
id=
"square-progress-bar"
class=
"healthy-progress-bar h-full transition-all duration-500 ease-out bg-gradient-to-r from-secondary to-green-400 diagonal-pattern diagonal-pattern-animation"
></div>
<div
class=
"justify-between items-center mb-2 healthy-text-position"
>
<span
class=
"font-semibold"
>
健康度
</span>
<span
id=
"square-progress-value"
class=
"text-lg font-bold"
>
45%
</span>
</div>
</div>
<!--
<div
class=
"justify-between items-center mb-2 "
>
<span
class=
"font-semibold"
>
健康度
</span>
<span
id=
"square-progress-value"
class=
"text-lg font-bold"
>
45%
</span>
</div>
-->
</div>
</
template
>
<
script
setup
>
import
{
onMounted
}
from
"vue"
;
const
props
=
defineProps
({
progress
:
{
type
:
Number
,
default
:
100
,
},
});
tailwind
.
config
=
{
theme
:
{
extend
:
{
colors
:
{
primary
:
"#3B82F6"
,
secondary
:
"#10B981"
,
accent
:
"#8B5CF6"
,
dark
:
"#1E293B"
,
light
:
"#F8FAFC"
,
},
fontFamily
:
{
inter
:
[
"Inter"
,
"sans-serif"
],
},
},
},
};
const
init
=
()
=>
{
const
squareProgressBar
=
document
.
getElementById
(
"square-progress-bar"
);
const
squareProgressValue
=
document
.
getElementById
(
"square-progress-value"
);
// updateProgressBars();
squareProgressBar
.
style
.
width
=
`
${
props
.
progress
}
%`
;
squareProgressValue
.
textContent
=
`
${
Math
.
max
(
0
,
props
.
progress
)}
%`
;
};
const
updateProgressBars
=
()
=>
{
// 方形进度条
squareProgressBar
.
style
.
width
=
`
${
100
-
20
}
%`
;
squareProgressValue
.
textContent
=
`
${
Math
.
max
(
0
,
props
.
progress
)}
%`
;
};
onMounted
(()
=>
{
init
();
});
</
script
>
<
style
scoped
>
.test
{
background-color
:
#fff
;
border-color
:
rgba
(
6
,
241
,
14
,
0.829
);
}
.healthy-text-position
{
position
:
absolute
;
z-index
:
99
;
top
:
50%
;
left
:
0
;
transform
:
translateY
(
-50%
);
padding-left
:
10px
;
}
.healthy-progress
{
height
:
calc
(
100%
);
}
.healthy-progress-bar
{
height
:
calc
(
100%
);
position
:
relative
;
}
</
style
>
\ No newline at end of file
src/views/dustMonitoring/components/warn.vue
View file @
d109cbdd
<
template
>
<div
class=
"title layout1"
>
<span>
告警:
</span>
<span
class=
"warn-title"
>
告警:
</span>
<span
class=
"jump-icon"
>
>>
</span>
</div>
<div
class=
"content"
>
<div
class=
"item"
v-for=
"item in listInfo"
:key=
"item.id"
>
{{
item
.
info
}}
<img
src=
"@/assets/icons/notice.png"
alt=
""
>
{{
item
.
info
}}
</div>
</div>
</
template
>
...
...
@@ -20,6 +20,10 @@ const props = defineProps({
<
style
scoped
lang=
"scss"
>
.title
{
height
:
20px
;
.warn-title
{
font-weight
:
bold
;
color
:
rgb
(
217
,
10
,
10
);
}
.jump-icon
{
font-weight
:
bold
;
color
:
#018796
;
...
...
@@ -31,14 +35,24 @@ const props = defineProps({
height
:
calc
(
15vh
-
30px
);
padding
:
10px
0px
10px
30px
;
box-sizing
:
border-box
;
overflow
:
hidden
;
overflow-y
:
auto
;
.item
{
width
:
100%
;
display
:
flex
;
align-items
:
center
;
margin-bottom
:
10px
;
padding
:
4px
0px
4px
2px
;
box-shadow
:
rgba
(
53
,
58
,
62
,
0
.08
)
0px
1px
10px
0px
,
rgba
(
53
,
58
,
62
,
0
.08
)
0px
2px
4px
0px
;
img
{
width
:
20px
;
height
:
auto
;
}
}
}
.
content
:
:-
webkit-scrollbar
{
width
:
2
px
;
width
:
0
px
;
background-color
:
rgba
(
13
,
15
,
18
,
0
.1
);
}
...
...
src/views/dustMonitoring/index.vue
View file @
d109cbdd
...
...
@@ -36,7 +36,7 @@
</div>
<div
class=
"layout1"
>
<div
class=
"left-box"
>
<div
class=
"part1"
>
<div
class=
"part1
layout3
"
>
<div
class=
"chart-box"
v-for=
"(item, index) in chartData"
:key=
"item"
>
<div
:id=
"'chart' + index"
class=
"chart-item"
></div>
</div>
...
...
@@ -46,12 +46,16 @@
</div>
</div>
<div
class=
"right-box"
>
<div
class=
"part1"
></div>
<div
class=
"part1"
>
<div
class=
"battery"
>
<healthyCom></healthyCom>
</div>
</div>
<div
class=
"part2"
>
<div
class=
"dust-title"
>
2号窑尾除尘器
</div>
<div
class=
"dust-info"
>
<div
class=
"info-item"
v-for=
"item in dustInfo"
:key=
"item.label"
>
<span
class=
"lab
le
"
>
{{
item
.
label
}}
</span>
<span
class=
"lab
el
"
>
{{
item
.
label
}}
</span>
<span
class=
"value"
>
{{
item
.
value
}}
(
<span
class=
"unit"
>
{{
item
.
unit
}}
</span
>
)
...
...
@@ -64,35 +68,35 @@
<div
class=
"indicator-item"
id=
"indicatorTwo"
></div>
</div>
<div
class=
"position-info"
>
<div
class=
"left"
>
<div
class=
"left"
v-if=
"detailObj.compartHealthList.length > 0"
>
<div
class=
"part"
>
<div
class=
"point warn"
v-for=
"item in
6
"
:key=
"item"
></div>
<div
class=
"point warn"
v-for=
"item in
detailObj.compartHealthList[0]
"
:key=
"item"
></div>
</div>
<div
class=
"part"
>
<div
class=
"point warn"
v-for=
"item in
6
"
:key=
"item"
></div>
<div
class=
"point warn"
v-for=
"item in
detailObj.compartHealthList[1]
"
:key=
"item"
></div>
</div>
</div>
<div
class=
"right"
>
<
!--
<
div
class=
"right"
>
<div
class=
"part"
>
<div
class=
"point warn"
v-for=
"item in 6"
:key=
"item"
></div>
</div>
<div
class=
"part"
>
<div
class=
"point warn"
v-for=
"item in 6"
:key=
"item"
></div>
</div>
</div>
</div>
-->
</div>
<div
class=
"other-info"
>
<div>
<
span>
反吹仓室:
</span
>
<
span>
{{
detailObj
.
bachflushCompart
}}
</span
>
<div
class=
"other-info-item"
>
<
p
class=
"label"
>
反吹仓室:
</p
>
<
p>
{{
detailObj
.
bachflushCompart
}}
</p
>
</div>
<div>
<
span>
泄露仓室:
</span
>
<
span>
{{
detailObj
.
leakageCompart
}}
</span
>
<div
class=
"other-info-item"
>
<
p
class=
"label"
>
泄露仓室:
</p
>
<
p>
{{
detailObj
.
leakageCompart
}}
</p
>
</div>
<div>
<
span>
故障仓室:
</span
>
<
span>
{{
detailObj
.
faultCompart
}}
</span
>
<div
class=
"other-info-item"
>
<
p
class=
"label"
>
故障仓室:
</p
>
<
p>
{{
detailObj
.
faultCompart
}}
</p
>
</div>
</div>
</div>
...
...
@@ -110,6 +114,7 @@ import { getDataFun } from "@/request/method.js";
import
{
useUsersStore
}
from
"@/pinia/user.js"
;
import
moment
from
"moment"
;
import
warnCom
from
"./components/warn.vue"
;
import
healthyCom
from
"./components/healthyProgress.vue"
;
import
{
getLineOption2
}
from
"@/utils/chart"
;
const
userStore
=
useUsersStore
();
const
form
=
reactive
({
...
...
@@ -350,6 +355,7 @@ const detailObj = reactive({
bachflushCompart
:
""
,
leakageCompart
:
""
,
faultCompart
:
""
,
compartHealthList
:
[]
});
// 获取除尘器详情
const
getDustDetail
=
()
=>
{
...
...
@@ -382,6 +388,7 @@ const getDustDetail = () => {
(
res
.
data
&&
res
.
data
.
bachflushCompart
)
||
""
;
detailObj
.
leakageCompart
=
(
res
.
data
&&
res
.
data
.
leakageCompart
)
||
""
;
detailObj
.
faultCompart
=
(
res
.
data
&&
res
.
data
.
bachflushCompart
)
||
""
;
detailObj
.
compartHealthList
=
(
res
.
data
&&
res
.
data
.
compartHealthList
)
||
[];
})
.
catch
(()
=>
{
dustInfo
.
forEach
((
item
)
=>
{
...
...
@@ -402,17 +409,17 @@ const testList = reactive([
id
:
3
,
info
:
"测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1"
,
},
{
id
:
4
,
info
:
"测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1"
,
},
{
id
:
5
,
info
:
"测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1"
,
},
//
{
//
id: 4,
//
info: "测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1",
//
},
//
{
//
id: 5,
//
info: "测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1测试1",
//
},
]);
const
closedLoopInfoList
=
re
active
([]);
const
warnInfoList
=
re
active
([]);
const
closedLoopInfoList
=
re
f
([]);
const
warnInfoList
=
re
f
([]);
// 获取告警信息
const
getAlarmInfo
=
()
=>
{
if
(
!
form
.
dusterNo
)
{
...
...
@@ -427,13 +434,13 @@ const getAlarmInfo = () => {
};
getDataFun
(
url
,
params
)
.
then
((
res
)
=>
{
closedLoopInfoList
=
closedLoopInfoList
.
value
=
(
res
&&
res
.
data
&&
res
.
data
.
closedLoopInfoList
)
||
[];
warnInfoList
=
(
res
&&
res
.
data
&&
res
.
data
.
warnInfoList
)
||
[];
warnInfoList
.
value
=
(
res
&&
res
.
data
&&
res
.
data
.
warnInfoList
)
||
[];
})
.
catch
(()
=>
{
closedLoopInfoList
=
[];
warnInfoList
=
[];
closedLoopInfoList
.
value
=
[];
warnInfoList
.
value
=
[];
});
};
onMounted
(()
=>
{
...
...
@@ -463,15 +470,14 @@ watch(
);
</
script
>
<
style
lang=
"scss"
scoped
>
$borderColor
:
#bbbdc3
;
$borderColor
:
#bbbdc3
91
;
.dust-box
{
width
:
100%
;
height
:
calc
(
100%
-
14px
);
box-sizing
:
border-box
;
// border-radius: 6px;
// box-shadow: 0px 3px 6px 0px rgba(13, 15, 18, 0.1);
padding
:
1rem
;
overflow
:
hidden
;
overflow-y
:
auto
;
}
.top-box
{
padding-top
:
18px
;
...
...
@@ -489,7 +495,7 @@ $borderColor: #bbbdc3;
box-shadow
:
0px
3px
6px
0px
rgba
(
13
,
15
,
18
,
0
.1
);
width
:
100%
;
height
:
100%
;
height
:
6
7
vh
;
height
:
6
3
vh
;
background
:
#fff
;
.chart-box
{
width
:
100%
;
...
...
@@ -506,16 +512,22 @@ $borderColor: #bbbdc3;
.part1
{
width
:
100%
;
height
:
10
vh
;
height
:
6
vh
;
border-radius
:
6px
;
border
:
1px
solid
rgba
(
13
,
15
,
18
,
0
.1
);
box-shadow
:
0px
3px
6px
0px
rgba
(
13
,
15
,
18
,
0
.1
);
background
:
#fff
;
padding
:
10px
;
box-sizing
:
border-box
;
.battery
{
width
:
100%
;
height
:
calc
(
100%
);
}
}
.part2
{
margin-top
:
2
0px
;
margin-top
:
1
0px
;
width
:
100%
;
height
:
calc
(
57vh
-
2
0px
);
height
:
calc
(
57vh
-
1
0px
);
border-radius
:
6px
;
border
:
1px
solid
rgba
(
13
,
15
,
18
,
0
.1
);
box-shadow
:
0px
3px
6px
0px
rgba
(
13
,
15
,
18
,
0
.1
);
...
...
@@ -551,10 +563,13 @@ $borderColor: #bbbdc3;
background
:
white
;
border-radius
:
6px
;
height
:
35px
;
font-size
:
20
px
;
font-size
:
14
px
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
.label
{
color
:
#4e5058
;
}
}
.indicator-box
{
display
:
flex
;
...
...
@@ -573,7 +588,7 @@ $borderColor: #bbbdc3;
.left
,
.right
{
padding
:
5px
;
width
:
48
%
;
width
:
100
%
;
flex-wrap
:
wrap
;
// box-shadow: 0 9px 20px 0 rgba(164, 162, 171, 0.842);
box-shadow
:
color
(
srgb
0
.360784
0
.788235
0
.654902
/
0
.5
)
0px
0px
20px
...
...
@@ -607,6 +622,22 @@ $borderColor: #bbbdc3;
.other-info
{
padding
:
20px
;
border-top
:
1px
solid
$borderColor
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
gap
:
10px
;
&
-item
{
padding
:
10px
;
min-height
:
70px
;
background
:
#e7eef5
;
border-radius
:
6px
;
flex
:
1
;
}
.label
{
color
:
#4e5058
;
}
.value
{
}
}
}
.
part2
:
:-
webkit-scrollbar
{
...
...
@@ -632,4 +663,10 @@ $borderColor: #bbbdc3;
justify-content
:
space-between
;
flex-direction
:
column
;
}
.layout3
{
display
:
flex
;
align-items
:
center
;
justify-content
:
space-around
;
flex-direction
:
column
;
}
</
style
>
src/views/equipmentManagement/components/paramsSetings.vue
View file @
d109cbdd
<
template
>
<div
class=
"container"
v-if=
"dialogVisible"
>
<div
class=
"close-box"
@
click=
"cancelFun"
>
<el-icon
size=
"25"
><Close
/></el-icon>
</div>
<h1
class=
"title"
>
sensor设置信息
</h1>
<div
class=
"grid-container"
>
...
...
@@ -11,10 +14,14 @@
v-if=
"item.type === 'input'"
v-model=
"item.value"
></el-input>
<el-select
v-model=
"item.value"
v-if=
"item.type === 'select'"
></el-select>
<el-select
v-model=
"item.value"
v-if=
"item.type === 'select'"
>
<el-option
v-for=
"option in item.options"
:key=
"option.code"
:label=
"option.name"
:value=
"option.code"
></el-option>
</el-select>
</div>
</div>
...
...
@@ -37,34 +44,45 @@
<!-- 复选框区域 -->
<div
class=
"checkbox-group"
>
<label
class=
"custom-checkbox"
>
<input
type=
"checkbox"
/>
在线反吹
<input
type=
"checkbox"
v-model=
"infoObj.onlineBackblow"
/>
在线反吹
</label>
<label
class=
"custom-checkbox"
>
<input
type=
"checkbox"
v-model=
"infoObj.fastBlow"
/>
快/慢
</label>
<label
class=
"custom-checkbox"
>
<input
type=
"checkbox"
checked
/>
快/慢
<input
type=
"checkbox"
v-model=
"infoObj.d01Alarm"
/>
DO1报警
</label>
<label
class=
"custom-checkbox"
>
<input
type=
"checkbox"
checked
/>
DO1报警
<input
type=
"checkbox"
v-model=
"infoObj.d13Alarm"
/>
DI3有效
</label>
<label
class=
"custom-checkbox"
>
<input
type=
"checkbox"
/>
DI3有效
</label>
</div>
<!-- 仓室顺序 -->
<h4>
仓室顺序
</h4>
<textarea
class=
"text-area"
name=
""
id=
""
>
1,2,3,4,5,6,7,8,9,10,11,12
</textarea
>
<h4
style=
"margin-bottom: 10px"
>
仓室顺序
</h4>
<el-input
type=
"textarea"
:rows=
"4"
v-model=
"infoObj.compartSort"
></el-input>
<!-- 复选框区域 -->
<div
class=
"checkbox-group mgr10"
>
<label
class=
"custom-checkbox"
>
<input
type=
"checkbox"
checked
/>
DI接入Y/N
<input
type=
"checkbox"
v-model=
"infoObj.diInput"
/>
DI接入Y/N
</label>
<label
class=
"custom-checkbox"
>
<input
type=
"checkbox"
checked
/>
显示预警
<input
type=
"checkbox"
v-model=
"infoObj.showEarlyWarn"
/>
显示预警
</label>
<div
class=
"setting-row"
>
<span
class=
"device-label"
>
关联设备
</span>
<el-select
v-model=
"value"
placeholder=
"请选择"
></el-select>
<el-select
v-model=
"infoObj.relateDevicesNum"
placeholder=
"请选择"
>
<el-option
v-for=
"(item, index) in 21"
:key=
"item"
:value=
"index"
:label=
"index"
></el-option>
</el-select>
</div>
</div>
...
...
@@ -94,133 +112,155 @@
<div
class=
"mask"
v-if=
"dialogVisible"
@
click=
"cancelFun"
></div>
</
template
>
<
script
setup
>
import
{
ref
,
reactive
,
computed
,
defineEmits
}
from
"vue"
;
import
{
ref
,
reactive
,
computed
,
defineEmits
,
onMounted
,
watch
}
from
"vue"
;
import
{
getDataFun
}
from
"@/request/method.js"
;
const
props
=
defineProps
({
dialogVisible
:
{
type
:
Boolean
,
default
:
false
,
},
infoObjProps
:
{
type
:
Object
,
default
:
()
=>
{},
},
});
watch
(
()
=>
props
.
infoObjProps
,
(
newVal
)
=>
{
Object
.
assign
(
infoObj
,
newVal
);
},
{
deep
:
true
,
inmediate
:
true
}
);
const
emit
=
defineEmits
([
"close"
]);
const
infoObj
=
reactive
({
props1
:
""
,
// 点位名称
props2
:
""
,
// 仓室数量
props3
:
""
,
// 地址
props4
:
""
,
// 脉冲阀故障阈值
props5
:
""
,
// 斜率
props6
:
""
,
// 脉冲阀数量
props7
:
""
,
// 截距
props8
:
""
,
// 反吹间隔时间
props9
:
""
,
// 延时时间
props10
:
""
,
// 群聚值
props11
:
""
,
// 积分时间
props12
:
""
,
// 通信口
props13
:
""
,
// 泄露阈值
props14
:
""
,
// 故障阈值
props15
:
""
,
// 谷值判定%
props16
:
""
,
// 阀数量
props17
:
""
,
// 提升阀故障
props18
:
""
,
// 在线反吹
props19
:
""
,
// 块/慢
props20
:
""
,
// DO1报警
props21
:
""
,
// DI3有效
props22
:
""
,
// 仓室顺位
props23
:
""
,
// DI接入Y/N
props24
:
""
,
// 显示预警
props25
:
""
,
// 关联设备
props26
:
""
,
// 脉冲阀设备Y/N通信IP
props27
:
""
,
// 室内卖出轮流喷吹
deviceName
:
""
,
// 点位名称
compartNum
:
""
,
// 仓室数量
address
:
""
,
// 地址
pulseValveFaultThreshold
:
""
,
// 脉冲阀故障阈值
slope
:
""
,
// 斜率
pulseValveNum
:
""
,
// 脉冲阀数量
intercept
:
""
,
// 截距
backblowInterval
:
""
,
// 反吹间隔时间
baselineThreshold
:
""
,
// 基线阈值,
delayTime
:
""
,
// 延时时间
clusterValue
:
""
,
// 群聚值
integrationTime
:
""
,
// 积分时间
communicationPort
:
""
,
// 通信口
leakThreshold
:
""
,
// 泄露阈值
faultThreshold
:
""
,
// 故障阈值
valleyDection
:
""
,
// 谷值判定%
valveNum
:
""
,
// 阀数量
liftValveFailure
:
""
,
// 提升阀故障
onlineBackblow
:
false
,
// 在线反吹
fastBlow
:
true
,
// 块/慢
d01Alarm
:
true
,
// DO1报警
d13Alarm
:
false
,
// DI3有效
compartSort
:
"123"
,
// 仓室顺位
diInput
:
true
,
// DI接入Y/N
showEarlyWarn
:
true
,
// 显示预警
relateDevicesNum
:
""
,
// 关联设备
liftValveCommunicationIp
:
""
,
// 脉冲阀设备Y/N通信IP
indoorPulseBlow
:
""
,
// 室内卖出轮流喷吹
liftValveDelayTime
:
""
,
// 提升阀延迟时间
});
const
communicationPortOptions
=
ref
([])
const
infoEnum
=
reactive
([
{
label
:
"点位名称"
,
value
:
infoObj
.
props1
,
value
:
infoObj
.
deviceName
,
type
:
"input"
,
},
{
label
:
"仓室数量"
,
value
:
infoObj
.
props2
,
value
:
infoObj
.
compartNum
,
type
:
"input"
,
},
{
label
:
"地址"
,
value
:
infoObj
.
props3
,
value
:
infoObj
.
address
,
type
:
"input"
,
},
{
label
:
"脉冲阀故障阈值"
,
value
:
infoObj
.
props4
,
value
:
infoObj
.
pulseValveFaultThreshold
,
type
:
"input"
,
},
{
label
:
"斜率"
,
value
:
infoObj
.
slope
,
type
:
"input"
,
},
{
label
:
"脉冲数量"
,
value
:
infoObj
.
pulseValveNum
,
type
:
"input"
,
},
{
label
:
"截距"
,
value
:
infoObj
.
props5
,
value
:
infoObj
.
intercept
,
type
:
"input"
,
},
{
label
:
"反吹间隔时间"
,
value
:
infoObj
.
props6
,
value
:
infoObj
.
backblowInterval
,
type
:
"input"
,
},
{
label
:
"基线阈值"
,
value
:
infoObj
.
props7
,
value
:
infoObj
.
baselineThreshold
,
type
:
"input"
,
},
{
label
:
"延时时间"
,
value
:
infoObj
.
props8
,
value
:
infoObj
.
delayTime
,
type
:
"input"
,
},
{
label
:
"群聚值"
,
value
:
infoObj
.
props9
,
value
:
infoObj
.
clusterValue
,
type
:
"input"
,
},
{
label
:
"积分时间"
,
value
:
infoObj
.
props10
,
value
:
infoObj
.
integrationTime
,
type
:
"input"
,
},
{
label
:
"通信口"
,
value
:
infoObj
.
props11
,
value
:
infoObj
.
communicationPort
,
type
:
"select"
,
options
:
[]
},
{
label
:
"泄露阈值"
,
value
:
infoObj
.
props12
,
type
:
"input"
,
},
{
label
:
"泄露阈值"
,
value
:
infoObj
.
props12
,
value
:
infoObj
.
leakThreshold
,
type
:
"input"
,
},
{
label
:
"故障阈值"
,
value
:
infoObj
.
props13
,
value
:
infoObj
.
faultThreshold
,
type
:
"input"
,
},
{
label
:
"谷值判定(%)"
,
value
:
infoObj
.
props14
,
value
:
infoObj
.
valleyDection
,
type
:
"input"
,
},
{
label
:
"阀数量"
,
value
:
infoObj
.
props15
,
value
:
infoObj
.
valveNum
,
type
:
"input"
,
},
{
label
:
"提升阀故障"
,
value
:
infoObj
.
props16
,
value
:
infoObj
.
liftValveFailure
,
type
:
"input"
,
},
{
label
:
"提升阀延迟时间"
,
value
:
infoObj
.
props17
,
value
:
infoObj
.
liftValveDelayTime
,
type
:
"input"
,
},
]);
...
...
@@ -248,6 +288,24 @@ const confirmFun = () => {
const
cancelFun
=
()
=>
{
emit
(
"close"
,
false
);
};
// 获取通信口
const
getCommunicationPort
=
()
=>
{
const
url
=
"/queryCommunicationPort"
;
getDataFun
(
url
,
{}).
then
((
res
)
=>
{
communicationPortOptions
.
value
=
res
&&
res
.
data
||
[]
for
(
let
i
=
0
;
i
<
infoEnum
.
length
;
i
++
)
{
if
(
infoEnum
[
i
].
label
===
'通信口'
)
{
infoEnum
[
i
].
options
=
communicationPortOptions
.
value
break
}
}
}).
catch
(
err
=>
{
communicationPortOptions
.
value
=
[]
});
};
onMounted
(()
=>
{
getCommunicationPort
();
});
</
script
>
<
style
scoped
lang=
"scss"
>
*
{
...
...
@@ -350,7 +408,7 @@ body {
.device-label
{
color
:
#1e293b
;
font-weight
:
500
;
width
:
1
0
0px
;
width
:
1
2
0px
;
text-align
:
center
;
}
...
...
@@ -464,14 +522,26 @@ input[type="checkbox"] {
background: #3b82f6;
color: white;
}
.btn-confirm:hover {
background: #0e53c2;
}
.btn-cancel {
background: #e2e8f0;
color: #64748b;
}
.btn-cancel:hover {
background: #b2c3da;
}
.highlight {
color: #ef4444;
font-weight: 700;
}
.close-box {
position: absolute;
right: 20px;
cursor: pointer;
}
</
style
>
\ No newline at end of file
src/views/equipmentManagement/index.vue
View file @
d109cbdd
...
...
@@ -96,6 +96,7 @@
:default-page-size=
"10"
@
pagination-change=
"handlePaginationChange"
:total=
"total"
align=
"center"
:pagination-texts=
"
{
total: '共',
sizeChange: '条/页',
...
...
@@ -109,7 +110,7 @@
</
template
>
<
template
#
operation=
"{ row }"
>
<el-button
type=
"
primary"
link
@
click=
"setParams
(row)"
>
<el-button
type=
"
text"
@
click=
"getParamsConfig
(row)"
>
参数设置
</el-button>
</
template
>
...
...
@@ -184,7 +185,7 @@ const tableColumns = ref([
{
prop
:
"signalName"
,
label
:
"信号名称"
,
width
:
"
2
5%"
,
width
:
"
1
5%"
,
},
{
prop
:
"signalNo"
,
...
...
@@ -320,7 +321,9 @@ const onExportFile = () => {
});
};
// 模板下载
const
onDownloadTemplate
=
()
=>
{};
const
onDownloadTemplate
=
()
=>
{
window
.
open
(
'http://visimg.bmetech.com/stone/img/1748314002767/设备数据.xlsx'
)
};
// 页面参数改变
const
handlePaginationChange
=
(
pagination
)
=>
{
currentPage
.
value
=
pagination
.
currentPage
;
...
...
@@ -330,10 +333,6 @@ const handlePaginationChange = (pagination) => {
// 当超出限制时,执行的钩子函数
const
handleExceed
=
(
files
)
=>
{
console
.
log
(
"上传超出限制"
);
// upload.value!.clearFiles()
// const file = files[0] as UploadRawFile
// file.uid = genFileId()
// upload.value!.handleStart(file)
};
// 上传失败
const
handleError
=
()
=>
{
...
...
@@ -349,6 +348,7 @@ const handleSuccess = () => {
type
:
"success"
,
duration
:
5
*
1000
,
});
getDeviceContent
();
};
const
handleProgress
=
(
evt
,
uploadFile
)
=>
{};
const
beforeUpload
=
(
file
)
=>
{
...
...
@@ -368,6 +368,53 @@ const beforeUpload = (file) => {
return
true
;
}
};
// 获取参数
const
getParamsConfig
=
(
val
)
=>
{
const
url
=
"/getSensorConfig"
;
const
params
=
{
deviceNo
:
val
.
deviceNo
,
};
getDataFun
(
url
,
params
).
then
((
res
)
=>
{
console
.
log
(
res
);
res
.
data
=
{
id
:
7
,
customerId
:
26
,
deviceNo
:
"cgq_001"
,
deviceName
:
"布袋传感器001"
,
compartNum
:
12
,
address
:
"地址"
,
pulseValveFaultThreshold
:
"脉冲阀故障阈值"
,
slope
:
"斜率"
,
pulseValveNum
:
"脉冲阀数量"
,
intercept
:
"截距"
,
backblowInterval
:
"反吹间隔时间"
,
baselineThreshold
:
"基线阈值"
,
delayTime
:
"延时时间"
,
clusterValue
:
"群聚值"
,
integrationTime
:
"积分时间"
,
communicationPort
:
"通信口"
,
leakThreshold
:
"泄露阈值"
,
onlineBackblow
:
true
,
fastBlow
:
true
,
faultThreshold
:
"故障阈值"
,
d01Alarm
:
true
,
d13Alarm
:
true
,
valleyDection
:
"谷值判定"
,
valveNum
:
"阀数量"
,
liftValveFailure
:
"提升阀故障"
,
compartSort
:
"仓室顺序"
,
liftValveDelayTime
:
"提升阀延迟时间"
,
diInput
:
true
,
showEarlyWarn
:
true
,
relateDevicesNum
:
"关联设备"
,
liftValveCommunicationIp
:
"脉冲的设备通信ip"
,
indoorPulseBlow
:
true
,
};
dialogVisible
.
value
=
true
;
}).
catch
(
err
=>
{
ElMessage
.
error
(
'获取参数设置失败'
);
});
};
onMounted
(()
=>
{
getDeviceType
();
getProcessOptions
();
...
...
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