Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mqttsnet
thinglinks
提交
90654adc
thinglinks
项目概览
mqttsnet
/
thinglinks
通知
1
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
thinglinks
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
90654adc
编写于
5月 09, 2022
作者:
xiaonannet
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'release/1.0.0' into main
上级
710303f0
6cb635ac
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
668 addition
and
462 deletion
+668
-462
node_modules/.package-lock.json
node_modules/.package-lock.json
+6
-0
package-lock.json
package-lock.json
+6
-0
package.json
package.json
+1
-0
thinglinks-modules/thinglinks-modules-link/src/main/java/com/mqttsnet/thinglinks/link/service/device/impl/DeviceServiceImpl.java
...hinglinks/link/service/device/impl/DeviceServiceImpl.java
+1
-1
thinglinks-ui/public/index.html
thinglinks-ui/public/index.html
+402
-22
thinglinks-ui/src/App.vue
thinglinks-ui/src/App.vue
+6
-0
thinglinks-ui/src/views/link/device/index.vue
thinglinks-ui/src/views/link/device/index.vue
+246
-439
未找到文件。
node_modules/.package-lock.json
0 → 100644
浏览文件 @
90654adc
{
"name"
:
"thinglinks"
,
"lockfileVersion"
:
2
,
"requires"
:
true
,
"packages"
:
{}
}
package-lock.json
0 → 100644
浏览文件 @
90654adc
{
"name"
:
"thinglinks"
,
"lockfileVersion"
:
2
,
"requires"
:
true
,
"packages"
:
{}
}
package.json
0 → 100644
浏览文件 @
90654adc
{}
thinglinks-modules/thinglinks-modules-link/src/main/java/com/mqttsnet/thinglinks/link/service/device/impl/DeviceServiceImpl.java
浏览文件 @
90654adc
...
...
@@ -293,7 +293,7 @@ public class DeviceServiceImpl implements DeviceService {
//更新数据库设备状态
Device
device
=
new
Device
();
device
.
setId
(
oneByClientId
.
getId
());
device
.
setConnectStatus
(
DeviceConnectStatus
.
INIT
.
getValue
());
device
.
setConnectStatus
(
DeviceConnectStatus
.
OFFLINE
.
getValue
());
device
.
setUpdateTime
(
DateUtils
.
getNowDate
());
deviceMapper
.
updateByPrimaryKeySelective
(
device
);
}
...
...
thinglinks-ui/public/index.html
浏览文件 @
90654adc
<!DOCTYPE html>
<html>
<head>
<meta
charset=
"utf-8"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge,chrome=1"
>
<meta
name=
"renderer"
content=
"webkit"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
>
<link
rel=
"icon"
href=
"<%= BASE_URL %>favicon.ico"
>
<title><
%=
webpackConfig.name
%
></title>
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
<style
lang=
"scss"
>
<head>
<meta
charset=
"utf-8"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge,chrome=1"
>
<meta
name=
"renderer"
content=
"webkit"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
>
<link
rel=
"icon"
href=
"<%= BASE_URL %>favicon.ico"
>
<title>
<
%=
webpackConfig.name
%
>
</title>
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
<!-- <style lang="scss">
html,
body,
#app {
...
...
@@ -193,16 +196,393 @@
color: #FFF;
opacity: 0.5;
}
</style>
</head>
<body>
<div
id=
"app"
>
<div
id=
"loader-wrapper"
>
<div
id=
"loader"
></div>
<div
class=
"loader-section section-left"
></div>
<div
class=
"loader-section section-right"
></div>
<div
class=
"load_title"
>
正在加载ThingLinks系统资源,请耐心等待
</div>
</div>
</div>
</body>
</html>
</style> -->
</head>
<style
lang=
"scss"
scoped
>
@import
url(https://fonts.googleapis.com/css?family=Archivo+Narrow)
;
.cube-folding
{
width
:
50px
;
height
:
50px
;
display
:
inline-block
;
-webkit-transform
:
rotate
(
45deg
);
-moz-transform
:
rotate
(
45deg
);
transform
:
rotate
(
45deg
);
font-size
:
0
;
}
.cube-folding
span
{
position
:
relative
;
width
:
25px
;
height
:
25px
;
-webkit-transform
:
scale
(
1.1
);
-moz-transform
:
scale
(
1.1
);
transform
:
scale
(
1.1
);
display
:
inline-block
;
}
.cube-folding
span
::before
{
content
:
""
;
background-color
:
white
;
position
:
absolute
;
left
:
0
;
top
:
0
;
display
:
block
;
width
:
25px
;
height
:
25px
;
-moz-transform-origin
:
100%
100%
;
-ms-transform-origin
:
100%
100%
;
-webkit-transform-origin
:
100%
100%
;
transform-origin
:
100%
100%
;
-webkit-animation
:
folding
2.5s
infinite
linear
both
;
-moz-animation
:
folding
2.5s
infinite
linear
both
;
animation
:
folding
2.5s
infinite
linear
both
;
}
.cube-folding
.leaf2
{
-webkit-transform
:
rotateZ
(
90deg
)
scale
(
1.1
);
-moz-transform
:
rotateZ
(
90deg
)
scale
(
1.1
);
transform
:
rotateZ
(
90deg
)
scale
(
1.1
);
}
.cube-folding
.leaf2
::before
{
-webkit-animation-delay
:
0.3s
;
animation-delay
:
0.3s
;
background-color
:
#f2f2f2
;
}
.cube-folding
.leaf3
{
-webkit-transform
:
rotateZ
(
270deg
)
scale
(
1.1
);
-moz-transform
:
rotateZ
(
270deg
)
scale
(
1.1
);
transform
:
rotateZ
(
270deg
)
scale
(
1.1
);
}
.cube-folding
.leaf3
::before
{
-webkit-animation-delay
:
0.9s
;
animation-delay
:
0.9s
;
background-color
:
#f2f2f2
;
}
.cube-folding
.leaf4
{
-webkit-transform
:
rotateZ
(
180deg
)
scale
(
1.1
);
-moz-transform
:
rotateZ
(
180deg
)
scale
(
1.1
);
transform
:
rotateZ
(
180deg
)
scale
(
1.1
);
}
.cube-folding
.leaf4
::before
{
-webkit-animation-delay
:
0.6s
;
animation-delay
:
0.6s
;
background-color
:
#e6e6e6
;
}
@-webkit-keyframes
folding
{
0
%,
10
%
{
-webkit-transform
:
perspective
(
140px
)
rotateX
(
-180deg
);
-moz-transform
:
perspective
(
140px
)
rotateX
(
-180deg
);
transform
:
perspective
(
140px
)
rotateX
(
-180deg
);
-webkit-opacity
:
0
;
-moz-opacity
:
0
;
opacity
:
0
;
}
25
%,
75
%
{
-webkit-transform
:
perspective
(
140px
)
rotateX
(
0deg
);
-moz-transform
:
perspective
(
140px
)
rotateX
(
0deg
);
transform
:
perspective
(
140px
)
rotateX
(
0deg
);
-webkit-opacity
:
1
;
-moz-opacity
:
1
;
opacity
:
1
;
}
90
%,
100
%
{
-webkit-transform
:
perspective
(
140px
)
rotateY
(
180deg
);
-moz-transform
:
perspective
(
140px
)
rotateY
(
180deg
);
transform
:
perspective
(
140px
)
rotateY
(
180deg
);
-webkit-opacity
:
0
;
-moz-opacity
:
0
;
opacity
:
0
;
}
}
@-moz-keyframes
folding
{
0
%,
10
%
{
-webkit-transform
:
perspective
(
140px
)
rotateX
(
-180deg
);
-moz-transform
:
perspective
(
140px
)
rotateX
(
-180deg
);
transform
:
perspective
(
140px
)
rotateX
(
-180deg
);
-webkit-opacity
:
0
;
-moz-opacity
:
0
;
opacity
:
0
;
}
25
%,
75
%
{
-webkit-transform
:
perspective
(
140px
)
rotateX
(
0deg
);
-moz-transform
:
perspective
(
140px
)
rotateX
(
0deg
);
transform
:
perspective
(
140px
)
rotateX
(
0deg
);
-webkit-opacity
:
1
;
-moz-opacity
:
1
;
opacity
:
1
;
}
90
%,
100
%
{
-webkit-transform
:
perspective
(
140px
)
rotateY
(
180deg
);
-moz-transform
:
perspective
(
140px
)
rotateY
(
180deg
);
transform
:
perspective
(
140px
)
rotateY
(
180deg
);
-webkit-opacity
:
0
;
-moz-opacity
:
0
;
opacity
:
0
;
}
}
@-ms-keyframes
folding
{
0
%,
10
%
{
-webkit-transform
:
perspective
(
140px
)
rotateX
(
-180deg
);
-moz-transform
:
perspective
(
140px
)
rotateX
(
-180deg
);
transform
:
perspective
(
140px
)
rotateX
(
-180deg
);
-webkit-opacity
:
0
;
-moz-opacity
:
0
;
opacity
:
0
;
}
25
%,
75
%
{
-webkit-transform
:
perspective
(
140px
)
rotateX
(
0deg
);
-moz-transform
:
perspective
(
140px
)
rotateX
(
0deg
);
transform
:
perspective
(
140px
)
rotateX
(
0deg
);
-webkit-opacity
:
1
;
-moz-opacity
:
1
;
opacity
:
1
;
}
90
%,
100
%
{
-webkit-transform
:
perspective
(
140px
)
rotateY
(
180deg
);
-moz-transform
:
perspective
(
140px
)
rotateY
(
180deg
);
transform
:
perspective
(
140px
)
rotateY
(
180deg
);
-webkit-opacity
:
0
;
-moz-opacity
:
0
;
opacity
:
0
;
}
}
@keyframes
folding
{
0
%,
10
%
{
-webkit-transform
:
perspective
(
140px
)
rotateX
(
-180deg
);
-moz-transform
:
perspective
(
140px
)
rotateX
(
-180deg
);
transform
:
perspective
(
140px
)
rotateX
(
-180deg
);
-webkit-opacity
:
0
;
-moz-opacity
:
0
;
opacity
:
0
;
}
25
%,
75
%
{
-webkit-transform
:
perspective
(
140px
)
rotateX
(
0deg
);
-moz-transform
:
perspective
(
140px
)
rotateX
(
0deg
);
transform
:
perspective
(
140px
)
rotateX
(
0deg
);
-webkit-opacity
:
1
;
-moz-opacity
:
1
;
opacity
:
1
;
}
90
%,
100
%
{
-webkit-transform
:
perspective
(
140px
)
rotateY
(
180deg
);
-moz-transform
:
perspective
(
140px
)
rotateY
(
180deg
);
transform
:
perspective
(
140px
)
rotateY
(
180deg
);
-webkit-opacity
:
0
;
-moz-opacity
:
0
;
opacity
:
0
;
}
}
.cube-wrapper
{
position
:
fixed
;
left
:
50%
;
top
:
50%
;
margin-top
:
-50px
;
margin-left
:
-50px
;
width
:
100px
;
height
:
100px
;
text-align
:
center
;
}
.cube-wrapper
:after
{
content
:
""
;
position
:
absolute
;
left
:
0
;
right
:
0
;
bottom
:
-20px
;
margin
:
auto
;
width
:
90px
;
height
:
6px
;
z-index
:
1
;
background-color
:
rgba
(
0
,
0
,
0
,
0.1
);
-webkit-filter
:
blur
(
2px
);
filter
:
blur
(
2px
);
-webkit-border-radius
:
100%
;
-moz-border-radius
:
100%
;
border-radius
:
100%
;
-webkit-animation
:
shadow
0.5s
ease
infinite
alternate
;
-moz-animation
:
shadow
0.5s
ease
infinite
alternate
;
animation
:
shadow
0.5s
ease
infinite
alternate
;
}
.cube-wrapper
.loading
{
font-size
:
12px
;
letter-spacing
:
0.1em
;
display
:
block
;
color
:
white
;
position
:
relative
;
top
:
25px
;
z-index
:
2
;
-webkit-animation
:
text
0.5s
ease
infinite
alternate
;
-moz-animation
:
text
0.5s
ease
infinite
alternate
;
animation
:
text
0.5s
ease
infinite
alternate
;
}
@-webkit-keyframes
text
{
100
%
{
top
:
35px
;
}
}
@-moz-keyframes
text
{
100
%
{
top
:
35px
;
}
}
@-ms-keyframes
text
{
100
%
{
top
:
35px
;
}
}
@keyframes
text
{
100
%
{
top
:
35px
;
}
}
@-webkit-keyframes
shadow
{
100
%
{
bottom
:
-18px
;
width
:
100px
;
}
}
@-moz-keyframes
shadow
{
100
%
{
bottom
:
-18px
;
width
:
100px
;
}
}
@-ms-keyframes
shadow
{
100
%
{
bottom
:
-18px
;
width
:
100px
;
}
}
@keyframes
shadow
{
100
%
{
bottom
:
-18px
;
width
:
100px
;
}
}
html
,
body
{
min-height
:
100%
;
}
body
{
/* fallback for old browsers */
/* Chrome 10-25, Safari 5.1-6 */
background
:
linear-gradient
(
to
left
,
#00c6ff
,
#0072ff
);
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
font-family
:
arial
;
}
h1
{
font-size
:
26px
;
display
:
block
;
text-align
:
center
;
color
:
#fff
;
padding
:
50px
20px
;
font-weight
:
300
;
font-family
:
"Archivo Narrow"
,
sans-serif
;
}
.made-with-love
{
position
:
fixed
;
left
:
0
;
width
:
100%
;
bottom
:
10px
;
text-align
:
center
;
font-size
:
10px
;
z-index
:
9999
;
font-family
:
arial
;
color
:
#fff
;
}
.made-with-love
i
{
font-style
:
normal
;
color
:
#f50057
;
font-size
:
14px
;
position
:
relative
;
top
:
2px
;
}
.made-with-love
a
{
color
:
#fff
;
text-decoration
:
none
;
}
.made-with-love
a
:hover
{
text-decoration
:
underline
;
}
/*# sourceMappingURL=index.css.map */
</style>
<body>
<div
id=
"app"
>
<!-- <div id="loader-wrapper">
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
<div class="load_title">正在加载ThingLinks系统资源,请耐心等待</div>
</div> -->
<h1>
ThingLinks Iot Integrated Platform
</h1>
<div
class=
"cube-wrapper"
>
<div
class=
"cube-folding"
>
<span
class=
"leaf1"
></span>
<span
class=
"leaf2"
></span>
<span
class=
"leaf3"
></span>
<span
class=
"leaf4"
></span>
</div>
<span
class=
"loading"
data-name=
"Loading"
>
Loading
</span>
</div>
<!-- follow me template -->
<div
class=
"made-with-love"
>
<a
target=
"_blank"
href=
"http://thinglinks.mqttsnet.com"
>
@ThingLinks
</a>
</div>
</div>
</body>
</html>
\ No newline at end of file
thinglinks-ui/src/App.vue
浏览文件 @
90654adc
...
...
@@ -17,3 +17,9 @@ export default {
}
}
</
script
>
<
style
>
body
{
background
:
white
;
margin
:
0
;
}
</
style
>
\ No newline at end of file
thinglinks-ui/src/views/link/device/index.vue
浏览文件 @
90654adc
<
template
>
<div
class=
"app-container"
>
<el-form
:model=
"queryParams"
ref=
"queryForm"
:inline=
"true"
v-show=
"showSearch"
label-width=
"100px"
>
<div
class=
"equipment_status"
>
<div
class=
"status_num"
>
<!--
<img
src=
"assets/icons/status.svg"
alt=
""
>
-->
<i
class=
"el-icon-help"
></i>
<p>
:
<span
style=
"color:#71e2a3"
>
{{
onlineCount
}}
</span>
/
<span
style=
"color:#ff9292"
>
{{
offlineCount
}}
</span>
/
<span
style=
"color:#ffba00"
>
{{
initCount
}}
</span>
/
<span>
{{
total
}}
</span>
</p>
</div>
<div
class=
"status"
>
<p>
设备状态:
</p>
<span
style=
"color:#71e2a3"
>
在线/
</span>
<span
style=
"color:#ff9292"
>
离线/
</span>
<span
style=
"color:#ffba00"
>
未连接/
</span>
<span>
全部
</span>
</div>
<div
class=
"Mqtt"
>
<p
v-for=
"dict in dict.type.link_device_connector"
:key=
"dict.value"
>
MQTT连接地址:
<i
style=
"cursor: pointer;"
title=
"复制"
class=
"el-icon-copy-document"
@
click=
"copy(dict.label)"
></i>
<span>
{{
dict
.
label
}}
</span>
</p>
</div>
<div
class=
"zhengshu"
>
<p>
SSL证书:
<a
href=
"#"
style=
"color:#357DF5"
>
下载SSL证书
</a>
</p>
<p>
<span>
二次开发:
</span>
<a
href=
"#"
style=
"color:#357DF5;margin-right:20px"
>
下载Demo
</a>
<a
href=
"#"
style=
"color:#357DF5"
>
开发文档
</a>
</p>
</div>
</div>
<el-form
:model=
"queryParams"
ref=
"queryForm"
:inline=
"true"
v-show=
"showSearch"
label-width=
"100px"
>
<el-form-item
label=
"客户端标识"
prop=
"clientId"
>
<el-input
v-model=
"queryParams.clientId"
placeholder=
"请输入客户端标识"
clearable
size=
"small"
@
keyup.enter.native=
"handleQuery"
/>
<el-input
v-model=
"queryParams.clientId"
placeholder=
"请输入客户端标识"
clearable
size=
"small"
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"设备标识"
prop=
"deviceIdentification"
>
<el-input
v-model=
"queryParams.deviceIdentification"
placeholder=
"请输入设备标识"
clearable
size=
"small"
@
keyup.enter.native=
"handleQuery"
/>
<el-input
v-model=
"queryParams.deviceIdentification"
placeholder=
"请输入设备标识"
clearable
size=
"small"
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"设备名称"
prop=
"deviceName"
>
<el-input
v-model=
"queryParams.deviceName"
placeholder=
"请输入设备名称"
clearable
size=
"small"
@
keyup.enter.native=
"handleQuery"
/>
<el-input
v-model=
"queryParams.deviceName"
placeholder=
"请输入设备名称"
clearable
size=
"small"
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
v-if=
"advancedSearch"
label=
"连接实例"
prop=
"connector"
>
<el-select
v-model=
"queryParams.connector"
placeholder=
"请选择连接实例"
clearable
size=
"small"
>
<el-option
v-for=
"dict in dict.type.link_device_connector"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
<el-select
v-model=
"queryParams.connector"
placeholder=
"请选择连接实例"
clearable
size=
"small"
>
<el-option
v-for=
"dict in dict.type.link_device_connector"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
v-if=
"advancedSearch"
label=
"设备状态"
prop=
"deviceStatus"
>
<el-select
v-model=
"queryParams.deviceStatus"
placeholder=
"请选择设备状态"
clearable
size=
"small"
>
<el-option
v-for=
"dict in dict.type.link_device_status"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
<el-select
v-model=
"queryParams.deviceStatus"
placeholder=
"请选择设备状态"
clearable
size=
"small"
>
<el-option
v-for=
"dict in dict.type.link_device_status"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
v-if=
"advancedSearch"
label=
"连接状态"
prop=
"connectStatus"
>
<el-select
v-model=
"queryParams.connectStatus"
placeholder=
"请选择连接状态"
clearable
size=
"small"
>
<el-option
v-for=
"dict in dict.type.link_device_connect_status"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
<el-select
v-model=
"queryParams.connectStatus"
placeholder=
"请选择连接状态"
clearable
size=
"small"
>
<el-option
v-for=
"dict in dict.type.link_device_connect_status"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
v-if=
"advancedSearch"
label=
"是否遗言"
prop=
"isWill"
>
<el-select
v-model=
"queryParams.isWill"
placeholder=
"请选择是否遗言"
clearable
size=
"small"
>
<el-option
v-for=
"dict in dict.type.link_device_is_will"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
<el-select
v-model=
"queryParams.isWill"
placeholder=
"请选择是否遗言"
clearable
size=
"small"
>
<el-option
v-for=
"dict in dict.type.link_device_is_will"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
v-if=
"advancedSearch"
label=
"设备标签"
prop=
"deviceTags"
>
<el-input
v-model=
"queryParams.deviceTags"
placeholder=
"请输入设备标签"
clearable
size=
"small"
@
keyup.enter.native=
"handleQuery"
/>
<el-input
v-model=
"queryParams.deviceTags"
placeholder=
"请输入设备标签"
clearable
size=
"small"
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
v-if=
"advancedSearch"
label=
"产品标识"
prop=
"productIdentification"
>
<el-input
v-model=
"queryParams.productIdentification"
placeholder=
"请输入产品标识"
clearable
size=
"small"
@
keyup.enter.native=
"handleQuery"
/>
<el-form-item
v-if=
"advancedSearch"
label=
"产品标识"
prop=
"productIdentification"
>
<el-input
v-model=
"queryParams.productIdentification"
placeholder=
"请输入产品标识"
clearable
size=
"small"
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
v-if=
"advancedSearch"
label=
"产品协议类型"
prop=
"protocolType"
>
<el-select
v-model=
"queryParams.protocolType"
placeholder=
"请选择产品协议类型"
clearable
size=
"small"
>
<el-option
v-for=
"dict in dict.type.link_device_protocol_type"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
<el-form-item
v-if=
"advancedSearch"
label=
"产品协议类型"
prop=
"protocolType"
>
<el-select
v-model=
"queryParams.protocolType"
placeholder=
"请选择产品协议类型"
clearable
size=
"small"
>
<el-option
v-for=
"dict in dict.type.link_device_protocol_type"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
v-if=
"advancedSearch"
label=
"设备类型"
prop=
"deviceType"
>
<el-select
v-model=
"queryParams.deviceType"
placeholder=
"请选择设备类型"
clearable
size=
"small"
>
<el-option
v-for=
"dict in dict.type.link_device_device_type"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
<el-select
v-model=
"queryParams.deviceType"
placeholder=
"请选择设备类型"
clearable
size=
"small"
>
<el-option
v-for=
"dict in dict.type.link_device_device_type"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"el-icon-search"
size=
"mini"
@
click=
"handleQuery"
>
搜索
</el-button
>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button
>
<el-button
:icon=
"icon"
size=
"mini"
@
click=
"advancedSearch_toggle($event)"
>
高级搜索
</el-button
>
<el-button
type=
"primary"
icon=
"el-icon-search"
size=
"mini"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
<el-button
:icon=
"icon"
size=
"mini"
@
click=
"advancedSearch_toggle($event)"
>
高级搜索
</el-button>
</el-form-item>
</el-form>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-button
type=
"primary"
plain
icon=
"el-icon-plus"
size=
"mini"
@
click=
"handleAdd"
v-hasPermi=
"['link:device:add']"
>
新增
</el-button
>
<el-button
type=
"primary"
plain
icon=
"el-icon-plus"
size=
"mini"
@
click=
"handleAdd"
v-hasPermi=
"['link:device:add']"
>
新增
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"success"
plain
icon=
"el-icon-edit"
size=
"mini"
:disabled=
"single"
@
click=
"handleUpdate"
v-hasPermi=
"['link:device:edit']"
>
修改
</el-button
>
<el-button
type=
"success"
plain
icon=
"el-icon-edit"
size=
"mini"
:disabled=
"single"
@
click=
"handleUpdate"
v-hasPermi=
"['link:device:edit']"
>
修改
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"danger"
plain
icon=
"el-icon-delete"
size=
"mini"
:disabled=
"multiple"
@
click=
"handleDelete"
v-hasPermi=
"['link:device:remove']"
>
删除
</el-button
>
<el-button
type=
"danger"
plain
icon=
"el-icon-delete"
size=
"mini"
:disabled=
"multiple"
@
click=
"handleDelete"
v-hasPermi=
"['link:device:remove']"
>
删除
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"danger"
plain
icon=
"el-icon-loading"
size=
"mini"
:disabled=
"multiple"
@
click=
"handleDisconnect"
v-hasPermi=
"['link:device:disconnect']"
>
断开连接
</el-button
>
<el-button
type=
"danger"
plain
icon=
"el-icon-loading"
size=
"mini"
:disabled=
"multiple"
@
click=
"handleDisconnect"
v-hasPermi=
"['link:device:disconnect']"
>
断开连接
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"warning"
plain
icon=
"el-icon-download"
size=
"mini"
@
click=
"handleExport"
v-hasPermi=
"['link:device:export']"
>
导出
</el-button
>
<el-button
type=
"warning"
plain
icon=
"el-icon-download"
size=
"mini"
@
click=
"handleExport"
v-hasPermi=
"['link:device:export']"
>
导出
</el-button>
</el-col>
<right-toolbar
:showSearch.sync=
"showSearch"
@
queryTable=
"getList"
></right-toolbar>
<right-toolbar
:showSearch.sync=
"showSearch"
@
queryTable=
"getList"
></right-toolbar>
</el-row>
<el-table
v-loading=
"loading"
:data=
"deviceList"
@
selection-change=
"handleSelectionChange"
>
<el-table
v-loading=
"loading"
:data=
"deviceList"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
align=
"center"
/>
<el-table-column
label=
"id"
align=
"center"
prop=
"id"
/>
<el-table-column
label=
"客户端标识"
align=
"center"
prop=
"clientId"
width=
"180"
/>
<el-table-column
label=
"用户名"
align=
"center"
prop=
"userName"
width=
"180"
/>
<el-table-column
label=
"密码"
align=
"center"
prop=
"password"
width=
"180"
/>
<el-table-column
label=
"客户端标识"
align=
"center"
prop=
"clientId"
width=
"180"
/>
<el-table-column
label=
"用户名"
align=
"center"
prop=
"userName"
width=
"180"
/>
<el-table-column
label=
"密码"
align=
"center"
prop=
"password"
width=
"180"
>
<template
slot-scope=
"scope"
>
<div
disable=
"disable"
style=
"width:100%;display:flex; justify-content: center;align-items:center"
>
<i
style=
"cursor: pointer;"
title=
"复制"
class=
"el-icon-copy-document"
@
click=
"copy(deviceList[scope.$index].password)"
></i>
<el-input
class=
"inputDeep"
v-model=
"deviceList[scope.$index].password"
show-password
></el-input>
</div>
</
template
>
</el-table-column>
<el-table-column
label=
"认证方式"
align=
"center"
prop=
"authMode"
>
<
template
slot-scope=
"scope"
>
<dict-tag
:options=
"dict.type.link_device_auth_mode"
:value=
"scope.row.authMode"
/>
<dict-tag
:options=
"dict.type.link_device_auth_mode"
:value=
"scope.row.authMode"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"设备标识"
align=
"center"
prop=
"deviceIdentification"
width=
"180"
/>
<el-table-column
label=
"设备名称"
align=
"center"
prop=
"deviceName"
width=
"180"
/>
<el-table-column
label=
"连接实例"
align=
"center"
prop=
"connector"
width=
"180"
>
<el-table-column
label=
"设备标识"
align=
"center"
prop=
"deviceIdentification"
width=
"180"
/>
<el-table-column
label=
"设备名称"
align=
"center"
prop=
"deviceName"
width=
"180"
/>
<el-table-column
label=
"连接实例"
align=
"center"
prop=
"connector"
width=
"180"
>
<
template
slot-scope=
"scope"
>
<dict-tag
:options=
"dict.type.link_device_connector"
:value=
"scope.row.connector"
/>
<dict-tag
:options=
"dict.type.link_device_connector"
:value=
"scope.row.connector"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"设备描述"
align=
"center"
prop=
"deviceDescription"
width=
"180"
/>
<el-table-column
label=
"设备状态"
align=
"center"
prop=
"deviceStatus"
>
<el-table-column
label=
"设备标签"
align=
"center"
prop=
"deviceTags"
width=
"180"
/>
<el-table-column
label=
"产品标识"
align=
"center"
prop=
"productIdentification"
width=
"180"
/>
<el-table-column
label=
"产品协议类型"
align=
"center"
prop=
"protocolType"
width=
"100"
>
<
template
slot-scope=
"scope"
>
<dict-tag
:options=
"dict.type.link_device_status"
:value=
"scope.row.deviceStatus"
/>
<dict-tag
:options=
"dict.type.link_device_protocol_type"
:value=
"scope.row.protocolType"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"
连接状态"
align=
"center"
prop=
"connectStatus
"
>
<el-table-column
label=
"
设备类型"
align=
"center"
prop=
"deviceType
"
>
<
template
slot-scope=
"scope"
>
<dict-tag
:options=
"dict.type.link_device_connect_status"
:value=
"scope.row.connectStatus"
/>
<dict-tag
:options=
"dict.type.link_device_device_type"
:value=
"scope.row.deviceType"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"
是否遗言"
align=
"center"
prop=
"isWill
"
>
<el-table-column
label=
"
设备状态"
align=
"center"
prop=
"deviceStatus
"
>
<
template
slot-scope=
"scope"
>
<dict-tag
:options=
"dict.type.link_device_is_will"
:value=
"scope.row.isWill"
/>
<dict-tag
:options=
"dict.type.link_device_status"
:value=
"scope.row.deviceStatus"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"设备标签"
align=
"center"
prop=
"deviceTags"
/>
<el-table-column
label=
"产品标识"
align=
"center"
prop=
"productIdentification"
/>
<el-table-column
label=
"产品协议类型"
align=
"center"
prop=
"protocolType"
width=
"100"
>
<el-table-column
label=
"连接状态"
align=
"center"
prop=
"connectStatus"
>
<
template
slot-scope=
"scope"
>
<dict-tag
:options=
"dict.type.link_device_protocol_type"
:value=
"scope.row.protocolType"
/>
<dict-tag
:options=
"dict.type.link_device_connect_status"
:value=
"scope.row.connectStatus"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"
设备类型"
align=
"center"
prop=
"deviceType
"
>
<el-table-column
label=
"
是否遗言"
align=
"center"
prop=
"isWill
"
>
<
template
slot-scope=
"scope"
>
<dict-tag
:options=
"dict.type.link_device_device_type"
:value=
"scope.row.deviceType"
/>
<dict-tag
:options=
"dict.type.link_device_is_will"
:value=
"scope.row.isWill"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"设备描述"
align=
"center"
prop=
"deviceDescription"
width=
"180"
/>
<el-table-column
label=
"创建者"
align=
"center"
prop=
"createBy"
/>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
width=
"180"
>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
width=
"180"
>
<
template
slot-scope=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
createTime
,
"
{y
}
-{m
}
-{d
}
{h
}
:{i
}
:{s
}
"
)
parseTime
(
scope
.
row
.
createTime
,
"
{y
}
-{m
}
-{d
}
{h
}
:{i
}
:{s
}
"
)
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
label
=
"
更新者
"
align
=
"
center
"
prop
=
"
updateBy
"
/>
<
el
-
table
-
column
label
=
"
更新时间
"
align
=
"
center
"
prop
=
"
updateTime
"
width
=
"
180
"
>
<
el
-
table
-
column
label
=
"
更新时间
"
align
=
"
center
"
prop
=
"
updateTime
"
width
=
"
180
"
>
<
template
slot
-
scope
=
"
scope
"
>
<
span
>
{{
parseTime
(
scope
.
row
.
updateTime
,
"
{y
}
-{m
}
-{d
}
{h
}
:{i
}
:{s
}
"
)
parseTime
(
scope
.
row
.
updateTime
,
"
{y
}
-{m
}
-{d
}
{h
}
:{i
}
:{s
}
"
)
}}
<
/span
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
label
=
"
备注
"
align
=
"
center
"
prop
=
"
remark
"
/>
<
el
-
table
-
column
fixed
=
"
right
"
label
=
"
操作
"
width
=
"
150
"
>
<
template
slot
-
scope
=
"
scope
"
>
<
el
-
tooltip
class
=
"
item
"
effect
=
"
light
"
content
=
"
修改
"
placement
=
"
top
"
>
<
el
-
button
circle
size
=
"
mini
"
type
=
"
primary
"
icon
=
"
el-icon-edit
"
@
click
=
"
handleUpdate(scope.row)
"
v
-
hasPermi
=
"
['link:device:edit']
"
><
/el-button
>
<
el
-
tooltip
class
=
"
item
"
effect
=
"
light
"
content
=
"
修改
"
placement
=
"
top
"
>
<
el
-
button
circle
size
=
"
mini
"
type
=
"
primary
"
icon
=
"
el-icon-edit
"
@
click
=
"
handleUpdate(scope.row)
"
v
-
hasPermi
=
"
['link:device:edit']
"
><
/el-button
>
<
/el-tooltip
>
<
el
-
tooltip
class
=
"
item
"
effect
=
"
light
"
content
=
"
删除
"
placement
=
"
top
"
>
<
el
-
button
circle
size
=
"
mini
"
type
=
"
primary
"
icon
=
"
el-icon-delete
"
@
click
=
"
handleDelete(scope.row)
"
v
-
hasPermi
=
"
['link:device:remove']
"
><
/el-button
>
<
el
-
tooltip
class
=
"
item
"
effect
=
"
light
"
content
=
"
删除
"
placement
=
"
top
"
>
<
el
-
button
circle
size
=
"
mini
"
type
=
"
primary
"
icon
=
"
el-icon-delete
"
@
click
=
"
handleDelete(scope.row)
"
v
-
hasPermi
=
"
['link:device:remove']
"
><
/el-button
>
<
/el-tooltip
>
<
el
-
tooltip
class
=
"
item
"
effect
=
"
light
"
content
=
"
子设备信息
"
placement
=
"
top
"
>
<
el
-
button
circle
size
=
"
mini
"
type
=
"
primary
"
icon
=
"
el-icon-s-operation
"
@
click
=
"
handleUpdate(scope.row)
"
v
-
hasPermi
=
"
['link:device:deviceInfo']
"
><
/el-button
>
<
el
-
tooltip
class
=
"
item
"
effect
=
"
light
"
content
=
"
子设备信息
"
placement
=
"
top
"
>
<
el
-
button
circle
size
=
"
mini
"
type
=
"
primary
"
icon
=
"
el-icon-s-operation
"
@
click
=
"
handleUpdate(scope.row)
"
v
-
hasPermi
=
"
['link:device:deviceInfo']
"
><
/el-button
>
<
/el-tooltip
>
<
/template
>
<
/el-table-column
>
<
/el-table
>
<
pagination
v
-
show
=
"
total > 0
"
:
total
=
"
total
"
:
page
.
sync
=
"
queryParams.pageNum
"
:
limit
.
sync
=
"
queryParams.pageSize
"
@
pagination
=
"
getList
"
/>
<
pagination
v
-
show
=
"
total > 0
"
:
total
=
"
total
"
:
page
.
sync
=
"
queryParams.pageNum
"
:
limit
.
sync
=
"
queryParams.pageSize
"
@
pagination
=
"
getList
"
/>
<!--
添加或修改设备档案对话框
-->
<
el
-
dialog
:
title
=
"
title
"
:
visible
.
sync
=
"
open
"
width
=
"
40%
"
append
-
to
-
body
>
...
...
@@ -442,10 +225,7 @@
<
el
-
row
>
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
客户端标识
"
prop
=
"
clientId
"
>
<
el
-
input
v
-
model
=
"
form.clientId
"
placeholder
=
"
请输入客户端标识
"
/>
<
el
-
input
v
-
model
=
"
form.clientId
"
placeholder
=
"
请输入客户端标识
"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"
11
"
>
...
...
@@ -458,18 +238,14 @@
<
el
-
row
>
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
密码
"
prop
=
"
password
"
>
<
el
-
input
v
-
model
=
"
form.password
"
placeholder
=
"
请输入密码
"
/>
<
el
-
input
v
-
model
=
"
form.password
"
type
=
"
password
"
placeholder
=
"
请输入密码
"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
认证方式
"
prop
=
"
authMode
"
>
<
el
-
select
v
-
model
=
"
form.authMode
"
placeholder
=
"
请选择认证方式
"
>
<
el
-
option
v
-
for
=
"
dict in dict.type.link_device_auth_mode
"
:
key
=
"
dict.value
"
:
label
=
"
dict.label
"
:
value
=
"
dict.value
"
><
/el-option
>
<
el
-
option
v
-
for
=
"
dict in dict.type.link_device_auth_mode
"
:
key
=
"
dict.value
"
:
label
=
"
dict.label
"
:
value
=
"
dict.value
"
><
/el-option
>
<
/el-select
>
<
/el-form-item
>
<
/el-col
>
...
...
@@ -478,18 +254,12 @@
<
el
-
row
>
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
设备名称
"
prop
=
"
deviceIdentification
"
>
<
el
-
input
v
-
model
=
"
form.deviceName
"
placeholder
=
"
请输入设备名称
"
/>
<
el
-
input
v
-
model
=
"
form.deviceName
"
placeholder
=
"
请输入设备名称
"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
设备标识
"
prop
=
"
deviceIdentification
"
>
<
el
-
input
v
-
model
=
"
form.deviceIdentification
"
placeholder
=
"
请输入设备标识
"
/>
<
el
-
input
v
-
model
=
"
form.deviceIdentification
"
placeholder
=
"
请输入设备标识
"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
...
...
@@ -498,35 +268,23 @@
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
集成应用
"
prop
=
"
appId
"
>
<
el
-
select
v
-
model
=
"
form.appId
"
placeholder
=
"
请选择集成应用
"
>
<
el
-
option
v
-
for
=
"
dict in dict.type.link_application_type
"
:
key
=
"
dict.value
"
:
label
=
"
dict.label
"
:
value
=
"
dict.value
"
><
/el-option
>
<
el
-
option
v
-
for
=
"
dict in dict.type.link_application_type
"
:
key
=
"
dict.value
"
:
label
=
"
dict.label
"
:
value
=
"
dict.value
"
><
/el-option
>
<
/el-select
>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
连接实例
"
prop
=
"
connector
"
>
<
el
-
select
v
-
model
=
"
form.connector
"
placeholder
=
"
请选择连接实例
"
>
<
el
-
option
v
-
for
=
"
dict in dict.type.link_device_connector
"
:
key
=
"
dict.value
"
:
label
=
"
dict.label
"
:
value
=
"
dict.value
"
><
/el-option
>
<
el
-
option
v
-
for
=
"
dict in dict.type.link_device_connector
"
:
key
=
"
dict.value
"
:
label
=
"
dict.label
"
:
value
=
"
dict.value
"
><
/el-option
>
<
/el-select
>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"
22
"
>
<
mapView
@
locationChange
=
"
locationChange
"
@
locationFail
=
"
locationFail
"
ref
=
"
mapView
"
><
/mapView
>
<
mapView
@
locationChange
=
"
locationChange
"
@
locationFail
=
"
locationFail
"
ref
=
"
mapView
"
><
/mapView
>
<
/el-col
>
<
/el-row
>
...
...
@@ -546,87 +304,63 @@
<
el
-
row
>
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
设备描述
"
prop
=
"
deviceDescription
"
>
<
el
-
input
v
-
model
=
"
form.deviceDescription
"
placeholder
=
"
请输入设备描述
"
/>
<
el
-
input
v
-
model
=
"
form.deviceDescription
"
placeholder
=
"
请输入设备描述
"
/>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
设备状态
"
prop
=
"
deviceStatus
"
>
<
el
-
select
v
-
model
=
"
form.deviceStatus
"
placeholder
=
"
请选择设备状态
"
>
<
el
-
option
v
-
for
=
"
dict in dict.type.link_device_status
"
:
key
=
"
dict.value
"
:
label
=
"
dict.label
"
:
value
=
"
dict.value
"
><
/el-option
>
<
el
-
select
v
-
model
=
"
form.deviceStatus
"
placeholder
=
"
请选择设备状态
"
>
<
el
-
option
v
-
for
=
"
dict in dict.type.link_device_status
"
:
key
=
"
dict.value
"
:
label
=
"
dict.label
"
:
value
=
"
dict.value
"
><
/el-option
>
<
/el-select
>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
产品标识
"
prop
=
"
productIdentification
"
>
<
el
-
input
v
-
model
=
"
form.productIdentification
"
placeholder
=
"
请输入产品标识
"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
产品协议类型
"
prop
=
"
protocolType
"
>
<
el
-
select
v
-
model
=
"
form.protocolType
"
placeholder
=
"
请选择产品协议类型
"
>
<
el
-
option
v
-
for
=
"
dict in dict.type.link_device_protocol_type
"
:
key
=
"
dict.value
"
:
label
=
"
dict.label
"
:
value
=
"
dict.value
"
><
/el-option
>
<
el
-
select
v
-
model
=
"
form.protocolType
"
placeholder
=
"
请选择产品协议类型
"
>
<
el
-
option
v
-
for
=
"
dict in dict.type.link_device_protocol_type
"
:
key
=
"
dict.value
"
:
label
=
"
dict.label
"
:
value
=
"
dict.value
"
><
/el-option
>
<
/el-select
>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
设备类型
"
prop
=
"
deviceType
"
>
<
el
-
select
v
-
model
=
"
form.deviceType
"
placeholder
=
"
请选择设备类型
"
>
<
el
-
option
v
-
for
=
"
dict in dict.type.link_device_device_type
"
:
key
=
"
dict.value
"
:
label
=
"
dict.label
"
:
value
=
"
dict.value
"
><
/el-option
>
<
el
-
option
v
-
for
=
"
dict in dict.type.link_device_device_type
"
:
key
=
"
dict.value
"
:
label
=
"
dict.label
"
:
value
=
"
dict.value
"
><
/el-option
>
<
/el-select
>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"
22
"
>
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
所属产品
"
>
<
el
-
select
v
-
model
=
"
form.productIdentification
"
placeholder
=
"
请选择所属产品
"
>
<
el
-
option
v
-
for
=
"
item in productOptions
"
:
key
=
"
item.productIdentification
"
:
label
=
"
item.productName
"
:
value
=
"
item.productIdentification
"
:
disabled
=
"
item.status === 0
"
><
/el-option
>
<
/el-select
>
<
/el-form-item
>
<
/el-col
>
<
el
-
col
:
span
=
"
11
"
>
<
el
-
form
-
item
label
=
"
设备标签
"
prop
=
"
deviceTags
"
>
<
el
-
input
v
-
model
=
"
form.deviceTags
"
placeholder
=
"
请输入设备标签
"
/>
<
el
-
input
v
-
model
=
"
form.deviceTags
"
placeholder
=
"
请输入设备标签
"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
<
el
-
row
>
<
el
-
col
:
span
=
"
22
"
>
<
el
-
form
-
item
label
=
"
备注
"
prop
=
"
remark
"
>
<
el
-
input
v
-
model
=
"
form.remark
"
type
=
"
textarea
"
placeholder
=
"
请输入内容
"
/>
<
el
-
input
v
-
model
=
"
form.remark
"
type
=
"
textarea
"
placeholder
=
"
请输入内容
"
/>
<
/el-form-item
>
<
/el-col
>
<
/el-row
>
...
...
@@ -648,9 +382,7 @@ import {
updateDevice
,
disconnectDevice
,
}
from
"
@/api/link/device
"
;
import
mapView
from
"
./mapView
"
;
export
default
{
components
:
{
mapView
,
...
...
@@ -668,6 +400,10 @@ export default {
],
data
()
{
return
{
//密码显示隐藏
passWord
:
"
******
"
,
flag
:
true
,
index_x
:
[],
// 高级搜索切换
advancedSearch
:
false
,
// 高级搜索icon
...
...
@@ -755,12 +491,28 @@ export default {
{
required
:
true
,
message
:
"
设备类型不能为空
"
,
trigger
:
"
change
"
}
,
],
}
,
onlineCount
:
0
,
//在线设备
offlineCount
:
0
,
//离线设备
initCount
:
0
,
//未连接设备
}
;
}
,
created
()
{
this
.
getList
();
}
,
methods
:
{
// 复制
copy
(
shareLink
)
{
var
input
=
document
.
createElement
(
"
input
"
);
input
.
value
=
shareLink
;
document
.
body
.
appendChild
(
input
);
input
.
select
()
document
.
execCommand
(
"
Copy
"
);
document
.
body
.
removeChild
(
input
);
this
.
$message
({
message
:
'
复制成功
'
,
type
:
'
success
'
}
);
}
,
// 高级搜索切换显示隐藏
advancedSearch_toggle
()
{
this
.
advancedSearch
=
!
this
.
advancedSearch
;
...
...
@@ -786,7 +538,11 @@ export default {
getList
()
{
this
.
loading
=
true
;
listDevice
(
this
.
queryParams
).
then
((
response
)
=>
{
console
.
log
(
response
);
this
.
deviceList
=
response
.
data
.
device
.
rows
;
this
.
onlineCount
=
response
.
data
.
onlineCount
this
.
offlineCount
=
response
.
data
.
offlineCount
this
.
initCount
=
response
.
data
.
initCount
this
.
total
=
response
.
data
.
device
.
total
;
this
.
loading
=
false
;
}
);
...
...
@@ -845,8 +601,11 @@ export default {
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
();
this
.
open
=
true
;
this
.
title
=
"
添加设备档案
"
;
getDevice
().
then
(
response
=>
{
this
.
productOptions
=
response
.
products
;
this
.
open
=
true
;
this
.
title
=
"
添加设备档案
"
;
}
);
}
,
/** 修改按钮操作 */
handleUpdate
(
row
)
{
...
...
@@ -854,6 +613,7 @@ export default {
const
id
=
row
.
id
||
this
.
ids
;
getDevice
(
id
).
then
((
response
)
=>
{
this
.
form
=
response
.
data
;
this
.
productOptions
=
response
.
products
;
this
.
open
=
true
;
this
.
title
=
"
修改设备档案
"
;
}
);
...
...
@@ -890,7 +650,7 @@ export default {
this
.
getList
();
this
.
$modal
.
msgSuccess
(
"
删除成功
"
);
}
)
.
catch
(()
=>
{
}
);
.
catch
(()
=>
{
}
);
}
,
/** 断开连接按钮操作 */
handleDisconnect
(
row
)
{
...
...
@@ -904,7 +664,7 @@ export default {
this
.
getList
();
this
.
$modal
.
msgSuccess
(
"
操作成功
"
);
}
)
.
catch
(()
=>
{
}
);
.
catch
(()
=>
{
}
);
}
,
/** 导出按钮操作 */
handleExport
()
{
...
...
@@ -919,3 +679,50 @@ export default {
}
,
}
;
<
/script
>
<
style
lang
=
"
scss
"
scoped
>
.
equipment_status
{
width
:
100
%
;
margin
:
0
0
10
px
10
px
;
padding
:
20
px
30
px
;
background
:
#
F8F8F9
;
border
-
radius
:
10
px
;
display
:
flex
;
align
-
items
:
center
;
justify
-
content
:
space
-
around
;
font
-
size
:
14
px
;
font
-
weight
:
700
;
color
:
#
515
a6e
;
}
.
equipment_status
.
status_num
{
width
:
12
%
;
display
:
flex
;
font
-
size
:
18
px
;
align
-
items
:
center
;
i
{
font
-
size
:
25
px
;
width
:
40
px
;
height
:
40
px
;
border
:
1
px
#
ccc
dashed
;
text
-
align
:
center
;
line
-
height
:
38
px
;
border
-
radius
:
50
%
;
}
img
{
width
:
20
%
;
}
}
.
equipment_status
.
status
{
width
:
20
%
;
display
:
flex
;
align
-
items
:
center
;
}
.
inputDeep
{
border
:
0
!
important
;
}
<
/style
>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录