Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qsh-wc
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
honghuiliu
qsh-wc
Commits
b8cbf386
Commit
b8cbf386
authored
Sep 23, 2022
by
sven
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
0acbb4e6
336787b0
Changes
24
Show whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
1182 additions
and
115 deletions
+1182
-115
package-lock.json
pc/package-lock.json
+84
-81
package.json
pc/package.json
+1
-0
EZUIKitJs.vue
pc/src/components/EZUIKitJs.vue
+135
-0
site-detail.vue
pc/src/views/site-detail.vue
+7
-3
enter.go
server/api/v1/admin/enter.go
+1
-0
qsh_monitor_data.go
server/api/v1/admin/qsh_monitor_data.go
+142
-0
data.go
server/api/v1/web/data.go
+44
-0
gorm.go
server/initialize/gorm.go
+1
-0
router.go
server/initialize/router.go
+1
-0
main.go
server/main.go
+3
-3
qsh_monitor_data.go
server/model/admin/qsh_monitor_data.go
+21
-0
qsh_toilet.go
server/model/admin/qsh_toilet.go
+14
-15
qsh_monitor_data.go
server/model/admin/request/qsh_monitor_data.go
+11
-0
dataRequest.go
server/request/dataRequest.go
+16
-0
enter.go
server/router/admin/enter.go
+2
-1
qsh_monitor_data.go
server/router/admin/qsh_monitor_data.go
+27
-0
web.go
server/router/web.go
+5
-0
enter.go
server/service/admin/enter.go
+2
-3
qsh_monitor_data.go
server/service/admin/qsh_monitor_data.go
+69
-0
dataService.go
server/service/web/dataService.go
+66
-0
qshMonitorData.js
web/src/api/qshMonitorData.js
+97
-0
qshMonitorData.vue
web/src/view/qshMonitorData/qshMonitorData.vue
+311
-0
qshMonitorDataForm.vue
web/src/view/qshMonitorData/qshMonitorDataForm.vue
+103
-0
qshToilet.vue
web/src/view/qshToilet/qshToilet.vue
+19
-9
No files found.
pc/package-lock.json
View file @
b8cbf386
...
@@ -1775,6 +1775,63 @@
...
@@ -1775,6 +1775,63 @@
"integrity"
:
"sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
,
"integrity"
:
"sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
,
"dev"
:
true
"dev"
:
true
},
},
"ansi-styles"
:
{
"version"
:
"4.3.0"
,
"resolved"
:
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
,
"integrity"
:
"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"color-convert"
:
"^2.0.1"
}
},
"chalk"
:
{
"version"
:
"4.1.2"
,
"resolved"
:
"https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
,
"integrity"
:
"sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"ansi-styles"
:
"^4.1.0"
,
"supports-color"
:
"^7.1.0"
}
},
"color-convert"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
,
"integrity"
:
"sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"color-name"
:
"~1.1.4"
}
},
"color-name"
:
{
"version"
:
"1.1.4"
,
"resolved"
:
"https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
,
"integrity"
:
"sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
,
"dev"
:
true
,
"optional"
:
true
},
"has-flag"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
,
"integrity"
:
"sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
,
"dev"
:
true
,
"optional"
:
true
},
"loader-utils"
:
{
"version"
:
"2.0.2"
,
"resolved"
:
"https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz"
,
"integrity"
:
"sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"big.js"
:
"^5.2.2"
,
"emojis-list"
:
"^3.0.0"
,
"json5"
:
"^2.1.2"
}
},
"ssri"
:
{
"ssri"
:
{
"version"
:
"8.0.1"
,
"version"
:
"8.0.1"
,
"resolved"
:
"https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz"
,
...
@@ -1783,6 +1840,28 @@
...
@@ -1783,6 +1840,28 @@
"requires"
:
{
"requires"
:
{
"minipass"
:
"^3.1.1"
"minipass"
:
"^3.1.1"
}
}
},
"supports-color"
:
{
"version"
:
"7.2.0"
,
"resolved"
:
"https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
,
"integrity"
:
"sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"has-flag"
:
"^4.0.0"
}
},
"vue-loader-v16"
:
{
"version"
:
"npm:vue-loader@16.8.3"
,
"resolved"
:
"https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz"
,
"integrity"
:
"sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"chalk"
:
"^4.1.0"
,
"hash-sum"
:
"^2.0.0"
,
"loader-utils"
:
"^2.0.0"
}
}
}
}
}
},
},
...
@@ -5121,6 +5200,11 @@
...
@@ -5121,6 +5200,11 @@
"integrity"
:
"sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
,
"integrity"
:
"sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
,
"dev"
:
true
"dev"
:
true
},
},
"ezuikit-js"
:
{
"version"
:
"0.6.3"
,
"resolved"
:
"https://registry.npmjs.org/ezuikit-js/-/ezuikit-js-0.6.3.tgz"
,
"integrity"
:
"sha512-nFaQXHALzGgXop4aZ23g96EmKT+IRfvibx4I4jLIcNAjXWI+PZk3g/365end7trMY646+5BeP0kn9CXzHH9s1g=="
},
"fast-deep-equal"
:
{
"fast-deep-equal"
:
{
"version"
:
"3.1.3"
,
"version"
:
"3.1.3"
,
"resolved"
:
"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
,
"resolved"
:
"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
,
...
@@ -10709,87 +10793,6 @@
...
@@ -10709,87 +10793,6 @@
}
}
}
}
},
},
"vue-loader-v16"
:
{
"version"
:
"npm:vue-loader@16.8.3"
,
"resolved"
:
"https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz"
,
"integrity"
:
"sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"chalk"
:
"^4.1.0"
,
"hash-sum"
:
"^2.0.0"
,
"loader-utils"
:
"^2.0.0"
},
"dependencies"
:
{
"ansi-styles"
:
{
"version"
:
"4.3.0"
,
"resolved"
:
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
,
"integrity"
:
"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"color-convert"
:
"^2.0.1"
}
},
"chalk"
:
{
"version"
:
"4.1.2"
,
"resolved"
:
"https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
,
"integrity"
:
"sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"ansi-styles"
:
"^4.1.0"
,
"supports-color"
:
"^7.1.0"
}
},
"color-convert"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
,
"integrity"
:
"sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"color-name"
:
"~1.1.4"
}
},
"color-name"
:
{
"version"
:
"1.1.4"
,
"resolved"
:
"https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
,
"integrity"
:
"sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
,
"dev"
:
true
,
"optional"
:
true
},
"has-flag"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
,
"integrity"
:
"sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
,
"dev"
:
true
,
"optional"
:
true
},
"loader-utils"
:
{
"version"
:
"2.0.2"
,
"resolved"
:
"https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz"
,
"integrity"
:
"sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"big.js"
:
"^5.2.2"
,
"emojis-list"
:
"^3.0.0"
,
"json5"
:
"^2.1.2"
}
},
"supports-color"
:
{
"version"
:
"7.2.0"
,
"resolved"
:
"https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
,
"integrity"
:
"sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
,
"dev"
:
true
,
"optional"
:
true
,
"requires"
:
{
"has-flag"
:
"^4.0.0"
}
}
}
},
"vue-router"
:
{
"vue-router"
:
{
"version"
:
"4.0.12"
,
"version"
:
"4.0.12"
,
"resolved"
:
"https://registry.npmjs.org/vue-router/-/vue-router-4.0.12.tgz"
,
"resolved"
:
"https://registry.npmjs.org/vue-router/-/vue-router-4.0.12.tgz"
,
...
...
pc/package.json
View file @
b8cbf386
...
@@ -11,6 +11,7 @@
...
@@ -11,6 +11,7 @@
"core-js"
:
"^3.6.5"
,
"core-js"
:
"^3.6.5"
,
"dayjs"
:
"^1.10.7"
,
"dayjs"
:
"^1.10.7"
,
"element-plus"
:
"^2.0.1"
,
"element-plus"
:
"^2.0.1"
,
"ezuikit-js"
:
"^0.6.3"
,
"pinia"
:
"^2.0.14"
,
"pinia"
:
"^2.0.14"
,
"vue"
:
"^3.0.0"
,
"vue"
:
"^3.0.0"
,
"vue-router"
:
"^4.0.0-0"
,
"vue-router"
:
"^4.0.0-0"
,
...
...
pc/src/components/EZUIKitJs.vue
0 → 100644
View file @
b8cbf386
<
template
>
<div
class=
"hello-ezuikit-js"
>
<div
id=
"video-container"
style=
"flex: 1;"
></div>
<div
style=
"flex-shrink: 0;padding:5px 0;text-align: right"
>
<el-button
type=
"primary"
@
click=
"stop"
>
暂停
</el-button>
<el-button
type=
"primary"
@
click=
"play"
>
播放
</el-button>
<!--
<el-button
@
click=
"openSound"
>
openSound
</el-button>
-->
<!--
<el-button
@
click=
"closeSound"
>
closeSound
</el-button>
-->
<!--
<el-button
@
click=
"startSave"
>
startSave
</el-button>
-->
<!--
<el-button
@
click=
"stopSave"
>
stopSave
</el-button>
-->
<!--
<el-button
@
click=
"capturePicture"
>
capturePicture
</el-button>
-->
<!--
<el-button
@
click=
"fullScreen"
>
fullScreen
</el-button>
-->
<!--
<el-button
@
click=
"getOSDTime"
>
getOSDTime
</el-button>
-->
<!--
<el-button
@
click=
"ezopenStartTalk"
>
开始对讲
</el-button>
-->
<!--
<el-button
@
click=
"ezopenStopTalk"
>
结束对讲
</el-button>
-->
<!--
<el-button
@
click=
"destroy"
>
销毁
</el-button>
-->
</div>
</div>
</
template
>
<
script
>
import
EZUIKit
from
"ezuikit-js"
;
let
player
=
null
;
export
default
{
name
:
"esu"
,
props
:
{
url
:
String
,
accessToken
:
String
,
},
data
(){
return
{
next_time
:
Date
.
now
()
}
},
mounted
(){
this
.
init
();
window
.
addEventListener
(
'onresize'
,
this
.
resize
);
},
methods
:
{
play
()
{
const
playPromise
=
player
.
play
();
playPromise
.
then
((
data
)
=>
{
console
.
log
(
"promise 获取 数据"
,
data
)
})
},
stop
()
{
const
stopPromise
=
player
.
stop
();
stopPromise
.
then
((
data
)
=>
{
console
.
log
(
"promise 获取 数据"
,
data
)
})
},
getOSDTime
()
{
const
getOSDTimePromise
=
player
.
getOSDTime
();
getOSDTimePromise
.
then
((
data
)
=>
{
console
.
log
(
"promise 获取 数据"
,
data
)
})
},
capturePicture
()
{
const
capturePicturePromise
=
player
.
capturePicture
(
`
${
new
Date
().
getTime
()}
`
);
capturePicturePromise
.
then
((
data
)
=>
{
console
.
log
(
"promise 获取 数据"
,
data
)
})
},
openSound
()
{
const
openSoundPromise
=
player
.
openSound
();
openSoundPromise
.
then
((
data
)
=>
{
console
.
log
(
"promise 获取 数据"
,
data
)
})
},
closeSound
()
{
const
openSoundPromise
=
player
.
closeSound
();
openSoundPromise
.
then
((
data
)
=>
{
console
.
log
(
"promise 获取 数据"
,
data
)
})
},
startSave
()
{
const
startSavePromise
=
player
.
startSave
(
`
${
new
Date
().
getTime
()}
`
);
startSavePromise
.
then
((
data
)
=>
{
console
.
log
(
"promise 获取 数据"
,
data
)
})
},
stopSave
()
{
const
stopSavePromise
=
player
.
stopSave
();
stopSavePromise
.
then
((
data
)
=>
{
console
.
log
(
"promise 获取 数据"
,
data
)
})
},
ezopenStartTalk
()
{
player
.
startTalk
();
},
ezopenStopTalk
()
{
player
.
stopTalk
();
},
fullScreen
()
{
player
.
fullScreen
();
},
destroy
()
{
const
destroyPromise
=
player
.
destroy
();
destroyPromise
.
then
((
data
)
=>
{
console
.
log
(
"promise 获取 数据"
,
data
)
})
},
resize
(){
if
(
Date
.
now
()
-
this
.
next_time
>
600
){
this
.
next_time
=
Date
.
now
();
}
},
init
(){
player
=
new
EZUIKit
.
EZUIKitPlayer
({
id
:
'video-container'
,
// 视频容器ID
accessToken
:
this
.
accessToken
,
url
:
this
.
url
,
// simple - 极简版; pcLive-pc直播;pcRec-pc回放;mobileLive-移动端直播;mobileRec-移动端回放;security - 安防版;voice-语音版;
// template: 'simple',
// plugin: ['talk'], // 加载插件,talk-对讲
// width: 600,
// height: 400,
});
this
.
$nextTick
(()
=>
{
player
.
play
();
});
}
}
};
</
script
>
<
style
lang=
"less"
scoped
>
.hello-ezuikit-js{
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
}
</
style
>
pc/src/views/site-detail.vue
View file @
b8cbf386
...
@@ -135,7 +135,7 @@
...
@@ -135,7 +135,7 @@
</div>
</div>
</div>
</div>
<div
class=
"body-one monitor"
v-else-if=
"tab=='monitor'"
>
<div
class=
"body-one monitor"
v-else-if=
"tab=='monitor'"
>
<esu
:url=
"detail.url"
:accessToken=
"detail.accessToken"
></esu>
</div>
</div>
<div
class=
"body-one process"
v-else-if=
"tab=='process'"
>
<div
class=
"body-one process"
v-else-if=
"tab=='process'"
>
<div
class=
"process-box"
>
<div
class=
"process-box"
>
...
@@ -278,12 +278,15 @@
...
@@ -278,12 +278,15 @@
setup
(
props
,
{
emit
})
{
setup
(
props
,
{
emit
})
{
const
state
=
reactive
({
const
state
=
reactive
({
show
:
false
,
show
:
false
,
url
:
'ezopen://open.ys7.com/E77565052/1.hd.live'
,
order_id
:
''
,
order_id
:
''
,
detail
:
{
detail
:
{
poster
:[],
poster
:[],
index
:
0
,
index
:
0
,
yewei
:
0.7
,
yewei
:
0.7
,
type
:
1
type
:
1
,
accessToken
:
'at.bvx2ea007tfqqdvkcb9iuhk70q6gjodm-7smdnjfh9j-1wdmw5f-mal3go2vz'
,
url
:
'ezopen://open.ys7.com/E77565052/1.live'
,
},
},
showBanner
:
false
,
showBanner
:
false
,
tabs
:
[
tabs
:
[
...
@@ -613,7 +616,8 @@
...
@@ -613,7 +616,8 @@
}
}
},
},
components
:
{
components
:
{
orderDetail
:
defineAsyncComponent
(()
=>
import
(
"@/views/order-detail.vue"
))
orderDetail
:
defineAsyncComponent
(()
=>
import
(
"@/views/order-detail.vue"
)),
esu
:
defineAsyncComponent
(()
=>
import
(
"@/components/EZUIKitJs.vue"
)),
}
}
}
}
</
script
>
</
script
>
...
...
server/api/v1/admin/enter.go
View file @
b8cbf386
...
@@ -5,5 +5,6 @@ type ApiGroup struct {
...
@@ -5,5 +5,6 @@ type ApiGroup struct {
QshToiletApi
QshToiletApi
QshPartolApi
QshPartolApi
QshMonitorDataApi
// Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT.
// Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT.
}
}
server/api/v1/admin/qsh_monitor_data.go
0 → 100755
View file @
b8cbf386
package
admin
import
(
"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/model/admin"
adminReq
"github.com/flipped-aurora/gin-vue-admin/server/model/admin/request"
"github.com/flipped-aurora/gin-vue-admin/server/model/common/request"
"github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
"github.com/flipped-aurora/gin-vue-admin/server/service"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
type
QshMonitorDataApi
struct
{
}
var
qshMonitorDataService
=
service
.
ServiceGroupApp
.
AdminServiceGroup
.
QshMonitorDataService
// CreateQshMonitorData 创建QshMonitorData
// @Tags QshMonitorData
// @Summary 创建QshMonitorData
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body admin.QshMonitorData true "创建QshMonitorData"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
// @Router /qshMonitorData/createQshMonitorData [post]
func
(
qshMonitorDataApi
*
QshMonitorDataApi
)
CreateQshMonitorData
(
c
*
gin
.
Context
)
{
var
qshMonitorData
admin
.
QshMonitorData
_
=
c
.
ShouldBindJSON
(
&
qshMonitorData
)
if
err
:=
qshMonitorDataService
.
CreateQshMonitorData
(
qshMonitorData
);
err
!=
nil
{
global
.
GVA_LOG
.
Error
(
"创建失败!"
,
zap
.
Error
(
err
))
response
.
FailWithMessage
(
"创建失败"
,
c
)
}
else
{
response
.
OkWithMessage
(
"创建成功"
,
c
)
}
}
// DeleteQshMonitorData 删除QshMonitorData
// @Tags QshMonitorData
// @Summary 删除QshMonitorData
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body admin.QshMonitorData true "删除QshMonitorData"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
// @Router /qshMonitorData/deleteQshMonitorData [delete]
func
(
qshMonitorDataApi
*
QshMonitorDataApi
)
DeleteQshMonitorData
(
c
*
gin
.
Context
)
{
var
qshMonitorData
admin
.
QshMonitorData
_
=
c
.
ShouldBindJSON
(
&
qshMonitorData
)
if
err
:=
qshMonitorDataService
.
DeleteQshMonitorData
(
qshMonitorData
);
err
!=
nil
{
global
.
GVA_LOG
.
Error
(
"删除失败!"
,
zap
.
Error
(
err
))
response
.
FailWithMessage
(
"删除失败"
,
c
)
}
else
{
response
.
OkWithMessage
(
"删除成功"
,
c
)
}
}
// DeleteQshMonitorDataByIds 批量删除QshMonitorData
// @Tags QshMonitorData
// @Summary 批量删除QshMonitorData
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body request.IdsReq true "批量删除QshMonitorData"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"批量删除成功"}"
// @Router /qshMonitorData/deleteQshMonitorDataByIds [delete]
func
(
qshMonitorDataApi
*
QshMonitorDataApi
)
DeleteQshMonitorDataByIds
(
c
*
gin
.
Context
)
{
var
IDS
request
.
IdsReq
_
=
c
.
ShouldBindJSON
(
&
IDS
)
if
err
:=
qshMonitorDataService
.
DeleteQshMonitorDataByIds
(
IDS
);
err
!=
nil
{
global
.
GVA_LOG
.
Error
(
"批量删除失败!"
,
zap
.
Error
(
err
))
response
.
FailWithMessage
(
"批量删除失败"
,
c
)
}
else
{
response
.
OkWithMessage
(
"批量删除成功"
,
c
)
}
}
// UpdateQshMonitorData 更新QshMonitorData
// @Tags QshMonitorData
// @Summary 更新QshMonitorData
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body admin.QshMonitorData true "更新QshMonitorData"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
// @Router /qshMonitorData/updateQshMonitorData [put]
func
(
qshMonitorDataApi
*
QshMonitorDataApi
)
UpdateQshMonitorData
(
c
*
gin
.
Context
)
{
var
qshMonitorData
admin
.
QshMonitorData
_
=
c
.
ShouldBindJSON
(
&
qshMonitorData
)
if
err
:=
qshMonitorDataService
.
UpdateQshMonitorData
(
qshMonitorData
);
err
!=
nil
{
global
.
GVA_LOG
.
Error
(
"更新失败!"
,
zap
.
Error
(
err
))
response
.
FailWithMessage
(
"更新失败"
,
c
)
}
else
{
response
.
OkWithMessage
(
"更新成功"
,
c
)
}
}
// FindQshMonitorData 用id查询QshMonitorData
// @Tags QshMonitorData
// @Summary 用id查询QshMonitorData
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data query admin.QshMonitorData true "用id查询QshMonitorData"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
// @Router /qshMonitorData/findQshMonitorData [get]
func
(
qshMonitorDataApi
*
QshMonitorDataApi
)
FindQshMonitorData
(
c
*
gin
.
Context
)
{
var
qshMonitorData
admin
.
QshMonitorData
_
=
c
.
ShouldBindQuery
(
&
qshMonitorData
)
if
reqshMonitorData
,
err
:=
qshMonitorDataService
.
GetQshMonitorData
(
qshMonitorData
.
ID
);
err
!=
nil
{
global
.
GVA_LOG
.
Error
(
"查询失败!"
,
zap
.
Error
(
err
))
response
.
FailWithMessage
(
"查询失败"
,
c
)
}
else
{
response
.
OkWithData
(
gin
.
H
{
"reqshMonitorData"
:
reqshMonitorData
},
c
)
}
}
// GetQshMonitorDataList 分页获取QshMonitorData列表
// @Tags QshMonitorData
// @Summary 分页获取QshMonitorData列表
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data query adminReq.QshMonitorDataSearch true "分页获取QshMonitorData列表"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
// @Router /qshMonitorData/getQshMonitorDataList [get]
func
(
qshMonitorDataApi
*
QshMonitorDataApi
)
GetQshMonitorDataList
(
c
*
gin
.
Context
)
{
var
pageInfo
adminReq
.
QshMonitorDataSearch
_
=
c
.
ShouldBindQuery
(
&
pageInfo
)
if
list
,
total
,
err
:=
qshMonitorDataService
.
GetQshMonitorDataInfoList
(
pageInfo
);
err
!=
nil
{
global
.
GVA_LOG
.
Error
(
"获取失败!"
,
zap
.
Error
(
err
))
response
.
FailWithMessage
(
"获取失败"
,
c
)
}
else
{
response
.
OkWithDetailed
(
response
.
PageResult
{
List
:
list
,
Total
:
total
,
Page
:
pageInfo
.
Page
,
PageSize
:
pageInfo
.
PageSize
,
},
"获取成功"
,
c
)
}
}
server/api/v1/web/data.go
0 → 100644
View file @
b8cbf386
package
web
import
(
"gitee.com/zjlsliupei/ghelp"
"github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
"github.com/flipped-aurora/gin-vue-admin/server/request"
"github.com/flipped-aurora/gin-vue-admin/server/service/web"
"github.com/gin-gonic/gin"
)
var
DataService
=
new
(
web
.
DataService
)
func
DataIn
(
c
*
gin
.
Context
)
{
}
//GetYewei 获取液位数据
func
GetYewei
(
c
*
gin
.
Context
)
{
var
arg
request
.
GetYewei
_
=
c
.
ShouldBindJSON
(
&
arg
)
data
,
err
:=
DataService
.
GetYewei
(
arg
)
if
err
!=
nil
{
response
.
FailWithMessage
(
err
.
Error
(),
c
)
return
}
response
.
OkWithData
(
data
,
c
)
}
//GetHistoryDataList 获取历史数据列表
func
GetHistoryDataList
(
c
*
gin
.
Context
)
{
var
arg
request
.
GetHistoryDataList
_
=
c
.
ShouldBindJSON
(
&
arg
)
list
,
total
,
err
:=
DataService
.
GetHistoryDataList
(
arg
)
if
err
!=
nil
{
response
.
FailWithMessage
(
err
.
Error
(),
c
)
return
}
response
.
OkWithData
(
ghelp
.
MAP
{
"list"
:
list
,
"total"
:
total
,
},
c
)
}
server/initialize/gorm.go
View file @
b8cbf386
...
@@ -55,6 +55,7 @@ func RegisterTables(db *gorm.DB) {
...
@@ -55,6 +55,7 @@ func RegisterTables(db *gorm.DB) {
admin
.
QshToilet
{},
admin
.
QshToilet
{},
admin
.
QshPatrol
{},
admin
.
QshPatrol
{},
admin
.
QshMonitorData
{},
// Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT.
// Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT.
)
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
server/initialize/router.go
View file @
b8cbf386
...
@@ -74,6 +74,7 @@ func Routers() *gin.Engine {
...
@@ -74,6 +74,7 @@ func Routers() *gin.Engine {
adminRouter
.
InitQshToiletRouter
(
PrivateGroup
)
adminRouter
.
InitQshToiletRouter
(
PrivateGroup
)
adminRouter
.
InitQshPartolRouter
(
PrivateGroup
)
adminRouter
.
InitQshPartolRouter
(
PrivateGroup
)
adminRouter
.
InitQshMonitorDataRouter
(
PrivateGroup
)
// Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT.
// Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT.
}
}
...
...
server/main.go
View file @
b8cbf386
package
main
package
main
import
(
import
(
"fmt"
"github.com/flipped-aurora/gin-vue-admin/server/core"
"github.com/flipped-aurora/gin-vue-admin/server/core"
"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/initialize"
"github.com/flipped-aurora/gin-vue-admin/server/initialize"
"github.com/flipped-aurora/gin-vue-admin/server/server"
"github.com/flipped-aurora/gin-vue-admin/server/server"
"github.com/flipped-aurora/gin-vue-admin/server/service/web"
"go.uber.org/zap"
"go.uber.org/zap"
)
)
...
@@ -38,9 +38,9 @@ func main() {
...
@@ -38,9 +38,9 @@ func main() {
// dtu服务器
// dtu服务器
if
global
.
GVA_VP
.
GetBool
(
"dtuServer.enable"
)
{
if
global
.
GVA_VP
.
GetBool
(
"dtuServer.enable"
)
{
server
.
OnDtuMessage
(
func
(
data
server
.
YeWeiData
)
error
{
server
.
OnDtuMessage
(
func
(
data
server
.
YeWeiData
)
error
{
fmt
.
Println
(
data
)
service
:=
new
(
web
.
DataService
)
// {9.300 860059054444117}
// {9.300 860059054444117}
return
nil
return
service
.
DataInYeWei
(
data
)
})
})
go
server
.
InitDtuServer
(
global
.
GVA_VP
.
GetString
(
"dtuServer.addr"
))
go
server
.
InitDtuServer
(
global
.
GVA_VP
.
GetString
(
"dtuServer.addr"
))
}
}
...
...
server/model/admin/qsh_monitor_data.go
0 → 100755
View file @
b8cbf386
// 自动生成模板QshMonitorData
package
admin
import
(
"github.com/flipped-aurora/gin-vue-admin/server/global"
)
// QshMonitorData 结构体
type
QshMonitorData
struct
{
global
.
GVA_MODEL
RawDeviceId
string
`json:"rawDeviceId" form:"rawDeviceId" gorm:"column:raw_device_id;comment:原始设备id;size:50;"`
ToiletId
int
`json:"toiletId" form:"toiletId" gorm:"column:toilet_id;comment:公厕id;size:10;"`
TypeName
string
`json:"typeName" form:"typeName" gorm:"column:type_name;comment:数据类型;size:50;"`
Unit
string
`json:"unit" form:"unit" gorm:"column:unit;comment:数据值单位;size:50;"`
Value
string
`json:"value" form:"value" gorm:"column:value;comment:数据值;size:50;"`
}
// TableName QshMonitorData 表名
func
(
QshMonitorData
)
TableName
()
string
{
return
"qsh_monitor_data"
}
server/model/admin/qsh_toilet.go
View file @
b8cbf386
...
@@ -3,7 +3,6 @@ package admin
...
@@ -3,7 +3,6 @@ package admin
import
(
import
(
"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/global"
)
)
// QshToilet 结构体
// QshToilet 结构体
...
@@ -15,15 +14,15 @@ type QshToilet struct {
...
@@ -15,15 +14,15 @@ type QshToilet struct {
Lng
string
`json:"lng" form:"lng" gorm:"column:lng;comment:经度;size:255;"`
Lng
string
`json:"lng" form:"lng" gorm:"column:lng;comment:经度;size:255;"`
Manager
string
`json:"manager" form:"manager" gorm:"column:manager;comment:管理人员;size:200;"`
Manager
string
`json:"manager" form:"manager" gorm:"column:manager;comment:管理人员;size:200;"`
ManagerPhone
string
`json:"managerPhone" form:"managerPhone" gorm:"column:manager_phone;comment:管理员联系电话;size:100;"`
ManagerPhone
string
`json:"managerPhone" form:"managerPhone" gorm:"column:manager_phone;comment:管理员联系电话;size:100;"`
Monitor
string
`json:"monitor" form:"monitor" gorm:"column:monitor;comment:监控信息;size:255;"`
MonitorId
string
`json:"monitor_id" form:"monitor_id" gorm:"column:monitor_id;comment:监控信息;size:255;"`
MonitorAc
string
`json:"monitor_ac" form:"monitor_ac" gorm:"column:monitor_ac;comment:监控设备账号;size:255;"`
YeweiDevice
string
`json:"yewei_device" form:"yewei_device" gorm:"column:yewei_device;comment:液位设备id;"`
Name
string
`json:"name" form:"name" gorm:"column:name;comment:点位名称;size:198;"`
Name
string
`json:"name" form:"name" gorm:"column:name;comment:点位名称;size:198;"`
ShowImage
string
`json:"showImage" form:"showImage" gorm:"column:show_image;comment:展示图片;size:300;"`
ShowImage
string
`json:"showImage" form:"showImage" gorm:"column:show_image;comment:展示图片;size:300;"`
Type
*
int
`json:"type" form:"type" gorm:"column:type;comment:公厕类型 1=>有动力 2=>无动力;"`
Type
*
int
`json:"type" form:"type" gorm:"column:type;comment:公厕类型 1=>有动力 2=>无动力;"`
}
}
// TableName QshToilet 表名
// TableName QshToilet 表名
func
(
QshToilet
)
TableName
()
string
{
func
(
QshToilet
)
TableName
()
string
{
return
"qsh_toilet"
return
"qsh_toilet"
}
}
server/model/admin/request/qsh_monitor_data.go
0 → 100755
View file @
b8cbf386
package
request
import
(
"github.com/flipped-aurora/gin-vue-admin/server/model/admin"
"github.com/flipped-aurora/gin-vue-admin/server/model/common/request"
)
type
QshMonitorDataSearch
struct
{
admin
.
QshMonitorData
request
.
PageInfo
}
server/request/dataRequest.go
0 → 100644
View file @
b8cbf386
package
request
import
"github.com/flipped-aurora/gin-vue-admin/server/utils"
type
GetYewei
struct
{
ToiletID
int
`json:"toilet_id"`
YeweiDeviceID
string
`json:"yewei_device_id"`
}
type
GetHistoryDataList
struct
{
utils
.
PageInfo
TypeName
string
`json:"type_name"`
StartTime
string
`json:"start_time"`
EndTime
string
`json:"end_time"`
ToiletID
int
`json:"toilet_id"`
}
server/router/admin/enter.go
View file @
b8cbf386
...
@@ -5,5 +5,6 @@ type RouterGroup struct {
...
@@ -5,5 +5,6 @@ type RouterGroup struct {
QshToiletRouter
QshToiletRouter
QshPartolRouter
QshPartolRouter
QshMonitorDataRouter
// Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT.
// Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT.
}
}
server/router/admin/qsh_monitor_data.go
0 → 100755
View file @
b8cbf386
package
admin
import
(
"github.com/flipped-aurora/gin-vue-admin/server/api/v1"
"github.com/flipped-aurora/gin-vue-admin/server/middleware"
"github.com/gin-gonic/gin"
)
type
QshMonitorDataRouter
struct
{
}
// InitQshMonitorDataRouter 初始化 QshMonitorData 路由信息
func
(
s
*
QshMonitorDataRouter
)
InitQshMonitorDataRouter
(
Router
*
gin
.
RouterGroup
)
{
qshMonitorDataRouter
:=
Router
.
Group
(
"qshMonitorData"
)
.
Use
(
middleware
.
OperationRecord
())
qshMonitorDataRouterWithoutRecord
:=
Router
.
Group
(
"qshMonitorData"
)
var
qshMonitorDataApi
=
v1
.
ApiGroupApp
.
AdminApiGroup
.
QshMonitorDataApi
{
qshMonitorDataRouter
.
POST
(
"createQshMonitorData"
,
qshMonitorDataApi
.
CreateQshMonitorData
)
// 新建QshMonitorData
qshMonitorDataRouter
.
DELETE
(
"deleteQshMonitorData"
,
qshMonitorDataApi
.
DeleteQshMonitorData
)
// 删除QshMonitorData
qshMonitorDataRouter
.
DELETE
(
"deleteQshMonitorDataByIds"
,
qshMonitorDataApi
.
DeleteQshMonitorDataByIds
)
// 批量删除QshMonitorData
qshMonitorDataRouter
.
PUT
(
"updateQshMonitorData"
,
qshMonitorDataApi
.
UpdateQshMonitorData
)
// 更新QshMonitorData
}
{
qshMonitorDataRouterWithoutRecord
.
GET
(
"findQshMonitorData"
,
qshMonitorDataApi
.
FindQshMonitorData
)
// 根据ID获取QshMonitorData
qshMonitorDataRouterWithoutRecord
.
GET
(
"getQshMonitorDataList"
,
qshMonitorDataApi
.
GetQshMonitorDataList
)
// 获取QshMonitorData列表
}
}
server/router/web.go
View file @
b8cbf386
...
@@ -27,4 +27,9 @@ func InitWebRouter(router *gin.Engine) {
...
@@ -27,4 +27,9 @@ func InitWebRouter(router *gin.Engine) {
{
{
oss
.
POST
(
"getOssConfig"
,
web
.
GetOssConfig
)
oss
.
POST
(
"getOssConfig"
,
web
.
GetOssConfig
)
}
}
data
:=
webRouter
.
Group
(
"data"
)
{
data
.
POST
(
"getHistoryDataList"
,
web
.
GetHistoryDataList
)
data
.
POST
(
"getYewei"
,
web
.
GetYewei
)
}
}
}
server/service/admin/enter.go
View file @
b8cbf386
package
admin
package
admin
type
ServiceGroup
struct
{
type
ServiceGroup
struct
{
// Code generated by github.com/flipped-aurora/gin-vue-admin/server Begin; DO NOT EDIT.
// Code generated by github.com/flipped-aurora/gin-vue-admin/server Begin; DO NOT EDIT.
QshToiletService
QshToiletService
QshPartolService
QshPartolService
QshMonitorDataService
// Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT.
// Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT.
}
}
server/service/admin/qsh_monitor_data.go
0 → 100755
View file @
b8cbf386
package
admin
import
(
"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/model/admin"
adminReq
"github.com/flipped-aurora/gin-vue-admin/server/model/admin/request"
"github.com/flipped-aurora/gin-vue-admin/server/model/common/request"
)
type
QshMonitorDataService
struct
{
}
// CreateQshMonitorData 创建QshMonitorData记录
// Author [piexlmax](https://github.com/piexlmax)
func
(
qshMonitorDataService
*
QshMonitorDataService
)
CreateQshMonitorData
(
qshMonitorData
admin
.
QshMonitorData
)
(
err
error
)
{
err
=
global
.
GVA_DB
.
Create
(
&
qshMonitorData
)
.
Error
return
err
}
// DeleteQshMonitorData 删除QshMonitorData记录
// Author [piexlmax](https://github.com/piexlmax)
func
(
qshMonitorDataService
*
QshMonitorDataService
)
DeleteQshMonitorData
(
qshMonitorData
admin
.
QshMonitorData
)
(
err
error
)
{
err
=
global
.
GVA_DB
.
Delete
(
&
qshMonitorData
)
.
Error
return
err
}
// DeleteQshMonitorDataByIds 批量删除QshMonitorData记录
// Author [piexlmax](https://github.com/piexlmax)
func
(
qshMonitorDataService
*
QshMonitorDataService
)
DeleteQshMonitorDataByIds
(
ids
request
.
IdsReq
)
(
err
error
)
{
err
=
global
.
GVA_DB
.
Delete
(
&
[]
admin
.
QshMonitorData
{},
"id in ?"
,
ids
.
Ids
)
.
Error
return
err
}
// UpdateQshMonitorData 更新QshMonitorData记录
// Author [piexlmax](https://github.com/piexlmax)
func
(
qshMonitorDataService
*
QshMonitorDataService
)
UpdateQshMonitorData
(
qshMonitorData
admin
.
QshMonitorData
)
(
err
error
)
{
err
=
global
.
GVA_DB
.
Save
(
&
qshMonitorData
)
.
Error
return
err
}
// GetQshMonitorData 根据id获取QshMonitorData记录
// Author [piexlmax](https://github.com/piexlmax)
func
(
qshMonitorDataService
*
QshMonitorDataService
)
GetQshMonitorData
(
id
uint
)
(
qshMonitorData
admin
.
QshMonitorData
,
err
error
)
{
err
=
global
.
GVA_DB
.
Where
(
"id = ?"
,
id
)
.
First
(
&
qshMonitorData
)
.
Error
return
}
// GetQshMonitorDataInfoList 分页获取QshMonitorData记录
// Author [piexlmax](https://github.com/piexlmax)
func
(
qshMonitorDataService
*
QshMonitorDataService
)
GetQshMonitorDataInfoList
(
info
adminReq
.
QshMonitorDataSearch
)
(
list
interface
{},
total
int64
,
err
error
)
{
limit
:=
info
.
PageSize
offset
:=
info
.
PageSize
*
(
info
.
Page
-
1
)
// 创建db
db
:=
global
.
GVA_DB
.
Model
(
&
admin
.
QshMonitorData
{})
var
qshMonitorDatas
[]
admin
.
QshMonitorData
// 如果有条件搜索 下方会自动创建搜索语句
if
info
.
RawDeviceId
!=
""
{
db
=
db
.
Where
(
"raw_device_id = ?"
,
info
.
RawDeviceId
)
}
if
info
.
TypeName
!=
""
{
db
=
db
.
Where
(
"type_name LIKE ?"
,
"%"
+
info
.
TypeName
+
"%"
)
}
err
=
db
.
Count
(
&
total
)
.
Error
if
err
!=
nil
{
return
}
err
=
db
.
Limit
(
limit
)
.
Offset
(
offset
)
.
Find
(
&
qshMonitorDatas
)
.
Error
return
qshMonitorDatas
,
total
,
err
}
server/service/web/dataService.go
0 → 100644
View file @
b8cbf386
package
web
import
(
"errors"
"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/model/admin"
"github.com/flipped-aurora/gin-vue-admin/server/request"
"github.com/flipped-aurora/gin-vue-admin/server/server"
)
type
DataService
struct
{
}
//DataInYeWei 接受液位数据
func
(
s
*
DataService
)
DataInYeWei
(
arg
server
.
YeWeiData
)
error
{
//先查询设备绑定厕所
var
toiletInfo
admin
.
QshToilet
err
:=
global
.
GVA_DB
.
Model
(
admin
.
QshToilet
{})
.
Where
(
"yewei_device = ?"
,
arg
.
DeviceId
)
.
First
(
&
toiletInfo
)
.
Error
if
err
!=
nil
{
return
errors
.
New
(
"设备ID未绑定公厕信息!"
)
}
return
global
.
GVA_DB
.
Create
(
&
admin
.
QshMonitorData
{
ToiletId
:
int
(
toiletInfo
.
ID
),
RawDeviceId
:
arg
.
DeviceId
,
TypeName
:
"液位"
,
Value
:
arg
.
YeWei
,
Unit
:
"m"
,
})
.
Error
}
//GetYewei 获取液位
func
(
s
*
DataService
)
GetYewei
(
arg
request
.
GetYewei
)
(
admin
.
QshMonitorData
,
error
)
{
var
data
admin
.
QshMonitorData
err
:=
global
.
GVA_DB
.
Model
(
admin
.
QshMonitorData
{})
.
Where
(
"toilet_id = ?"
,
arg
.
ToiletID
)
.
Where
(
"type_name = ?"
,
"液位"
)
.
Last
(
&
data
)
.
Error
if
err
!=
nil
{
return
data
,
err
}
return
data
,
nil
}
//GetHistoryDataList 获取历史数据
func
(
s
*
DataService
)
GetHistoryDataList
(
arg
request
.
GetHistoryDataList
)
([]
admin
.
QshMonitorData
,
int64
,
error
)
{
var
count
int64
var
data
[]
admin
.
QshMonitorData
limit
:=
arg
.
PageSize
offset
:=
(
arg
.
Page
-
1
)
*
arg
.
PageSize
db
:=
global
.
GVA_DB
.
Model
(
admin
.
QshMonitorData
{})
if
arg
.
ToiletID
!=
0
{
db
.
Where
(
"toilet_id = ?"
,
arg
.
ToiletID
)
}
if
arg
.
TypeName
!=
""
{
db
.
Where
(
"type_name = ?"
,
arg
.
TypeName
)
}
if
arg
.
StartTime
!=
""
{
db
.
Where
(
"created_at >= ?"
,
arg
.
StartTime
)
}
if
arg
.
EndTime
!=
""
{
db
.
Where
(
"created_at <= ?"
,
arg
.
EndTime
)
}
db
.
Count
(
&
count
)
err
:=
db
.
Limit
(
limit
)
.
Offset
(
offset
)
.
Find
(
&
data
)
.
Error
if
err
!=
nil
{
return
data
,
count
,
err
}
return
data
,
count
,
nil
}
web/src/api/qshMonitorData.js
0 → 100755
View file @
b8cbf386
import
service
from
'@/utils/request'
// @Tags QshMonitorData
// @Summary 创建QshMonitorData
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body model.QshMonitorData true "创建QshMonitorData"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
// @Router /qshMonitorData/createQshMonitorData [post]
export
const
createQshMonitorData
=
(
data
)
=>
{
return
service
({
url
:
'/qshMonitorData/createQshMonitorData'
,
method
:
'post'
,
data
})
}
// @Tags QshMonitorData
// @Summary 删除QshMonitorData
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body model.QshMonitorData true "删除QshMonitorData"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
// @Router /qshMonitorData/deleteQshMonitorData [delete]
export
const
deleteQshMonitorData
=
(
data
)
=>
{
return
service
({
url
:
'/qshMonitorData/deleteQshMonitorData'
,
method
:
'delete'
,
data
})
}
// @Tags QshMonitorData
// @Summary 删除QshMonitorData
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body request.IdsReq true "批量删除QshMonitorData"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
// @Router /qshMonitorData/deleteQshMonitorData [delete]
export
const
deleteQshMonitorDataByIds
=
(
data
)
=>
{
return
service
({
url
:
'/qshMonitorData/deleteQshMonitorDataByIds'
,
method
:
'delete'
,
data
})
}
// @Tags QshMonitorData
// @Summary 更新QshMonitorData
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body model.QshMonitorData true "更新QshMonitorData"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
// @Router /qshMonitorData/updateQshMonitorData [put]
export
const
updateQshMonitorData
=
(
data
)
=>
{
return
service
({
url
:
'/qshMonitorData/updateQshMonitorData'
,
method
:
'put'
,
data
})
}
// @Tags QshMonitorData
// @Summary 用id查询QshMonitorData
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data query model.QshMonitorData true "用id查询QshMonitorData"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
// @Router /qshMonitorData/findQshMonitorData [get]
export
const
findQshMonitorData
=
(
params
)
=>
{
return
service
({
url
:
'/qshMonitorData/findQshMonitorData'
,
method
:
'get'
,
params
})
}
// @Tags QshMonitorData
// @Summary 分页获取QshMonitorData列表
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data query request.PageInfo true "分页获取QshMonitorData列表"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
// @Router /qshMonitorData/getQshMonitorDataList [get]
export
const
getQshMonitorDataList
=
(
params
)
=>
{
return
service
({
url
:
'/qshMonitorData/getQshMonitorDataList'
,
method
:
'get'
,
params
})
}
web/src/view/qshMonitorData/qshMonitorData.vue
0 → 100755
View file @
b8cbf386
<
template
>
<div>
<div
class=
"gva-search-box"
>
<el-form
:inline=
"true"
:model=
"searchInfo"
class=
"demo-form-inline"
>
<el-form-item
label=
"原始设备ID"
>
<el-input
v-model=
"searchInfo.rawDeviceId"
placeholder=
"搜索条件"
/>
</el-form-item>
<el-form-item
label=
"数据类型"
>
<el-input
v-model=
"searchInfo.typeName"
placeholder=
"搜索条件"
/>
</el-form-item>
<el-form-item>
<el-button
size=
"small"
type=
"primary"
icon=
"search"
@
click=
"onSubmit"
>
查询
</el-button>
<el-button
size=
"small"
icon=
"refresh"
@
click=
"onReset"
>
重置
</el-button>
</el-form-item>
</el-form>
</div>
<div
class=
"gva-table-box"
>
<div
class=
"gva-btn-list"
>
<!--
<el-button
size=
"small"
type=
"primary"
icon=
"plus"
@
click=
"openDialog"
>
新增
</el-button>
-->
<el-popover
v-model:visible=
"deleteVisible"
placement=
"top"
width=
"160"
>
<p>
确定要删除吗?
</p>
<div
style=
"text-align: right; margin-top: 8px;"
>
<el-button
size=
"small"
type=
"primary"
link
@
click=
"deleteVisible = false"
>
取消
</el-button>
<el-button
size=
"small"
type=
"primary"
@
click=
"onDelete"
>
确定
</el-button>
</div>
<template
#
reference
>
<el-button
icon=
"delete"
size=
"small"
style=
"margin-left: 10px;"
:disabled=
"!multipleSelection.length"
@
click=
"deleteVisible = true"
>
删除
</el-button>
</
template
>
</el-popover>
</div>
<el-table
ref=
"multipleTable"
style=
"flex: 1;"
height=
"100%"
tooltip-effect=
"dark"
:data=
"tableData"
row-key=
"ID"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
align=
"left"
label=
"原始设备ID"
prop=
"rawDeviceId"
min-width=
"120"
/>
<el-table-column
align=
"left"
label=
"公厕ID"
prop=
"toiletId"
min-width=
"120"
/>
<el-table-column
align=
"left"
label=
"数据类型"
prop=
"typeName"
min-width=
"120"
/>
<el-table-column
align=
"left"
label=
"数据值单位"
prop=
"unit"
min-width=
"120"
/>
<el-table-column
align=
"left"
label=
"数据值"
prop=
"value"
min-width=
"120"
/>
<el-table-column
align=
"left"
label=
"创建时间"
min-width=
"180"
>
<
template
#
default=
"scope"
>
{{
formatDate
(
scope
.
row
.
CreatedAt
)
}}
</
template
>
</el-table-column>
<el-table-column
align=
"left"
label=
"操作"
min-width=
"120"
fixed=
"right"
>
<
template
#
default=
"scope"
>
<el-button
type=
"primary"
link
icon=
"edit"
size=
"small"
class=
"table-button"
@
click=
"updateQshMonitorDataFunc(scope.row)"
>
查看
</el-button>
<el-button
type=
"primary"
link
icon=
"delete"
size=
"small"
@
click=
"deleteRow(scope.row)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
<div
class=
"gva-pagination"
>
<el-pagination
layout=
"total, sizes, prev, pager, next, jumper"
:current-page=
"page"
:page-size=
"pageSize"
:page-sizes=
"[10, 30, 50, 100]"
:total=
"total"
@
current-change=
"handleCurrentChange"
@
size-change=
"handleSizeChange"
/>
</div>
</div>
<el-dialog
v-model=
"dialogFormVisible"
:before-close=
"closeDialog"
title=
"历史数据"
>
<el-form
:model=
"formData"
label-position=
"right"
label-width=
"120px"
>
<el-form-item
label=
"原始设备ID:"
>
<el-input
v-model=
"formData.rawDeviceId"
clearable
placeholder=
"请输入"
/>
</el-form-item>
<el-form-item
label=
"公厕ID:"
>
<el-input
v-model=
"formData.toiletId"
clearable
placeholder=
"请输入"
/>
</el-form-item>
<el-form-item
label=
"数据类型:"
>
<el-input
v-model=
"formData.typeName"
clearable
placeholder=
"请输入"
/>
</el-form-item>
<el-form-item
label=
"数据值单位:"
>
<el-input
v-model=
"formData.unit"
clearable
placeholder=
"请输入"
/>
</el-form-item>
<el-form-item
label=
"数据值:"
>
<el-input
v-model=
"formData.value"
clearable
placeholder=
"请输入"
/>
</el-form-item>
</el-form>
<
template
#
footer
>
<div
class=
"dialog-footer"
>
<el-button
size=
"small"
@
click=
"closeDialog"
>
取 消
</el-button>
<!--
<el-button
size=
"small"
type=
"primary"
@
click=
"enterDialog"
>
确 定
</el-button>
-->
</div>
</
template
>
</el-dialog>
</div>
</template>
<
script
>
export
default
{
name
:
'QshMonitorData'
}
</
script
>
<
script
setup
>
import
{
createQshMonitorData
,
deleteQshMonitorData
,
deleteQshMonitorDataByIds
,
updateQshMonitorData
,
findQshMonitorData
,
getQshMonitorDataList
}
from
'@/api/qshMonitorData'
// 全量引入格式化工具 请按需保留
import
{
getDictFunc
,
formatDate
,
formatBoolean
,
filterDict
}
from
'@/utils/format'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
ref
}
from
'vue'
// 自动化生成的字典(可能为空)以及字段
const
formData
=
ref
({
rawDeviceId
:
''
,
toiletId
:
''
,
typeName
:
''
,
unit
:
''
,
value
:
''
,
})
// =========== 表格控制部分 ===========
const
page
=
ref
(
1
)
const
total
=
ref
(
0
)
const
pageSize
=
ref
(
10
)
const
tableData
=
ref
([])
const
searchInfo
=
ref
({})
// 重置
const
onReset
=
()
=>
{
searchInfo
.
value
=
{}
}
// 搜索
const
onSubmit
=
()
=>
{
page
.
value
=
1
pageSize
.
value
=
10
getTableData
()
}
// 分页
const
handleSizeChange
=
(
val
)
=>
{
pageSize
.
value
=
val
getTableData
()
}
// 修改页面容量
const
handleCurrentChange
=
(
val
)
=>
{
page
.
value
=
val
getTableData
()
}
// 查询
const
getTableData
=
async
()
=>
{
const
table
=
await
getQshMonitorDataList
({
page
:
page
.
value
,
pageSize
:
pageSize
.
value
,
...
searchInfo
.
value
})
if
(
table
.
code
===
0
)
{
tableData
.
value
=
table
.
data
.
list
total
.
value
=
table
.
data
.
total
page
.
value
=
table
.
data
.
page
pageSize
.
value
=
table
.
data
.
pageSize
}
}
getTableData
()
// ============== 表格控制部分结束 ===============
// 获取需要的字典 可能为空 按需保留
const
setOptions
=
async
()
=>
{
}
// 获取需要的字典 可能为空 按需保留
setOptions
()
// 多选数据
const
multipleSelection
=
ref
([])
// 多选
const
handleSelectionChange
=
(
val
)
=>
{
multipleSelection
.
value
=
val
}
// 删除行
const
deleteRow
=
(
row
)
=>
{
ElMessageBox
.
confirm
(
'确定要删除吗?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
deleteQshMonitorDataFunc
(
row
)
})
}
// 批量删除控制标记
const
deleteVisible
=
ref
(
false
)
// 多选删除
const
onDelete
=
async
()
=>
{
const
ids
=
[]
if
(
multipleSelection
.
value
.
length
===
0
)
{
ElMessage
({
type
:
'warning'
,
message
:
'请选择要删除的数据'
})
return
}
multipleSelection
.
value
&&
multipleSelection
.
value
.
map
(
item
=>
{
ids
.
push
(
item
.
ID
)
})
const
res
=
await
deleteQshMonitorDataByIds
({
ids
})
if
(
res
.
code
===
0
)
{
ElMessage
({
type
:
'success'
,
message
:
'删除成功'
})
if
(
tableData
.
value
.
length
===
ids
.
length
&&
page
.
value
>
1
)
{
page
.
value
--
}
deleteVisible
.
value
=
false
getTableData
()
}
}
// 行为控制标记(弹窗内部需要增还是改)
const
type
=
ref
(
''
)
// 更新行
const
updateQshMonitorDataFunc
=
async
(
row
)
=>
{
const
res
=
await
findQshMonitorData
({
ID
:
row
.
ID
})
type
.
value
=
'update'
if
(
res
.
code
===
0
)
{
formData
.
value
=
res
.
data
.
reqshMonitorData
dialogFormVisible
.
value
=
true
}
}
// 删除行
const
deleteQshMonitorDataFunc
=
async
(
row
)
=>
{
const
res
=
await
deleteQshMonitorData
({
ID
:
row
.
ID
})
if
(
res
.
code
===
0
)
{
ElMessage
({
type
:
'success'
,
message
:
'删除成功'
})
if
(
tableData
.
value
.
length
===
1
&&
page
.
value
>
1
)
{
page
.
value
--
}
getTableData
()
}
}
// 弹窗控制标记
const
dialogFormVisible
=
ref
(
false
)
// 打开弹窗
const
openDialog
=
()
=>
{
type
.
value
=
'create'
dialogFormVisible
.
value
=
true
}
// 关闭弹窗
const
closeDialog
=
()
=>
{
dialogFormVisible
.
value
=
false
formData
.
value
=
{
rawDeviceId
:
''
,
toiletId
:
''
,
typeName
:
''
,
unit
:
''
,
value
:
''
,
}
}
// 弹窗确定
const
enterDialog
=
async
()
=>
{
let
res
switch
(
type
.
value
)
{
case
'create'
:
res
=
await
createQshMonitorData
(
formData
.
value
)
break
case
'update'
:
res
=
await
updateQshMonitorData
(
formData
.
value
)
break
default
:
res
=
await
createQshMonitorData
(
formData
.
value
)
break
}
if
(
res
.
code
===
0
)
{
ElMessage
({
type
:
'success'
,
message
:
'创建/更改成功'
})
closeDialog
()
getTableData
()
}
}
</
script
>
<
style
>
</
style
>
web/src/view/qshMonitorData/qshMonitorDataForm.vue
0 → 100755
View file @
b8cbf386
<
template
>
<div>
<div
class=
"gva-form-box"
>
<el-form
:model=
"formData"
label-position=
"right"
label-width=
"80px"
>
<el-form-item
label=
"原始设备id:"
>
<el-input
v-model=
"formData.rawDeviceId"
clearable
placeholder=
"请输入"
/>
</el-form-item>
<el-form-item
label=
"公厕id:"
>
<el-input
v-model
.
number=
"formData.toiletId"
clearable
placeholder=
"请输入"
/>
</el-form-item>
<el-form-item
label=
"数据类型:"
>
<el-input
v-model=
"formData.typeName"
clearable
placeholder=
"请输入"
/>
</el-form-item>
<el-form-item
label=
"数据值单位:"
>
<el-input
v-model=
"formData.unit"
clearable
placeholder=
"请输入"
/>
</el-form-item>
<el-form-item
label=
"数据值:"
>
<el-input
v-model=
"formData.value"
clearable
placeholder=
"请输入"
/>
</el-form-item>
<el-form-item>
<el-button
size=
"mini"
type=
"primary"
@
click=
"save"
>
保存
</el-button>
<el-button
size=
"mini"
type=
"primary"
@
click=
"back"
>
返回
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</
template
>
<
script
>
export
default
{
name
:
'QshMonitorData'
}
</
script
>
<
script
setup
>
import
{
createQshMonitorData
,
updateQshMonitorData
,
findQshMonitorData
}
from
'@/api/qshMonitorData'
// 自动获取字典
import
{
getDictFunc
}
from
'@/utils/format'
import
{
useRoute
,
useRouter
}
from
"vue-router"
import
{
ElMessage
}
from
'element-plus'
import
{
ref
}
from
'vue'
const
route
=
useRoute
()
const
router
=
useRouter
()
const
type
=
ref
(
''
)
const
formData
=
ref
({
rawDeviceId
:
''
,
toiletId
:
0
,
typeName
:
''
,
unit
:
''
,
value
:
''
,
})
// 初始化方法
const
init
=
async
()
=>
{
// 建议通过url传参获取目标数据ID 调用 find方法进行查询数据操作 从而决定本页面是create还是update 以下为id作为url参数示例
if
(
route
.
query
.
id
)
{
const
res
=
await
findQshMonitorData
({
ID
:
route
.
query
.
id
})
if
(
res
.
code
===
0
)
{
formData
.
value
=
res
.
data
.
reqshMonitorData
type
.
value
=
'update'
}
}
else
{
type
.
value
=
'create'
}
}
init
()
// 保存按钮
const
save
=
async
()
=>
{
let
res
switch
(
type
.
value
)
{
case
'create'
:
res
=
await
createQshMonitorData
(
formData
.
value
)
break
case
'update'
:
res
=
await
updateQshMonitorData
(
formData
.
value
)
break
default
:
res
=
await
createQshMonitorData
(
formData
.
value
)
break
}
if
(
res
.
code
===
0
)
{
ElMessage
({
type
:
'success'
,
message
:
'创建/更改成功'
})
}
}
// 返回按钮
const
back
=
()
=>
{
router
.
go
(
-
1
)
}
</
script
>
<
style
>
</
style
>
web/src/view/qshToilet/qshToilet.vue
View file @
b8cbf386
...
@@ -45,14 +45,14 @@
...
@@ -45,14 +45,14 @@
>
>
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
align=
"left"
label=
"点位名称"
prop=
"name"
min-width=
"180"
/>
<el-table-column
align=
"left"
label=
"点位名称"
prop=
"name"
min-width=
"180"
/>
<el-table-column
align=
"left"
label=
"公厕地址"
prop=
"address"
min-width=
"
18
0"
/>
<el-table-column
align=
"left"
label=
"公厕地址"
prop=
"address"
min-width=
"
20
0"
/>
<el-table-column
align=
"left"
label=
"公厕类型"
prop=
"type"
min-width=
"120"
>
<el-table-column
align=
"left"
label=
"公厕类型"
prop=
"type"
min-width=
"120"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
{{
filterDict
(
scope
.
row
.
type
,
typeOptions
)
}}
{{
filterDict
(
scope
.
row
.
type
,
typeOptions
)
}}
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
align=
"left"
label=
"纬度"
prop=
"lat"
min-width=
"1
2
0"
/>
<el-table-column
align=
"left"
label=
"纬度"
prop=
"lat"
min-width=
"1
8
0"
/>
<el-table-column
align=
"left"
label=
"经度"
prop=
"lng"
min-width=
"1
2
0"
/>
<el-table-column
align=
"left"
label=
"经度"
prop=
"lng"
min-width=
"1
8
0"
/>
<el-table-column
align=
"left"
label=
"管理人员"
prop=
"manager"
min-width=
"120"
/>
<el-table-column
align=
"left"
label=
"管理人员"
prop=
"manager"
min-width=
"120"
/>
<el-table-column
align=
"left"
label=
"管理员联系电话"
prop=
"managerPhone"
min-width=
"140"
/>
<el-table-column
align=
"left"
label=
"管理员联系电话"
prop=
"managerPhone"
min-width=
"140"
/>
<el-table-column
align=
"left"
label=
"创建时间"
min-width=
"180"
>
<el-table-column
align=
"left"
label=
"创建时间"
min-width=
"180"
>
...
@@ -80,7 +80,7 @@
...
@@ -80,7 +80,7 @@
/>
/>
</div>
</div>
</div>
</div>
<el-dialog
v-model=
"dialogFormVisible"
:before-close=
"closeDialog"
title=
"
弹窗操作
"
>
<el-dialog
v-model=
"dialogFormVisible"
:before-close=
"closeDialog"
title=
"
公厕详情
"
>
<el-form
:model=
"formData"
label-position=
"right"
label-width=
"120px"
>
<el-form
:model=
"formData"
label-position=
"right"
label-width=
"120px"
>
<el-form-item
label=
"点位名称:"
>
<el-form-item
label=
"点位名称:"
>
<el-input
v-model=
"formData.name"
clearable
placeholder=
"请输入"
/>
<el-input
v-model=
"formData.name"
clearable
placeholder=
"请输入"
/>
...
@@ -92,7 +92,7 @@
...
@@ -92,7 +92,7 @@
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"公厕地址:"
>
<el-form-item
label=
"公厕地址:"
>
<el-input
v-model=
"formData.address"
clearable
placeholder=
"请输入"
/>
<el-input
v-model=
"formData.address"
type=
"textarea"
resize=
"none"
clearable
placeholder=
"请输入"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"展示图片:"
>
<el-form-item
label=
"展示图片:"
>
<new-upload
v-if=
"dialogFormVisible"
:list=
"[formData.showImage]"
@
upload=
"(file)=>formData.showImage = file[0]"
></new-upload>
<new-upload
v-if=
"dialogFormVisible"
:list=
"[formData.showImage]"
@
upload=
"(file)=>formData.showImage = file[0]"
></new-upload>
...
@@ -112,8 +112,14 @@
...
@@ -112,8 +112,14 @@
<el-form-item
label=
"管理员联系电话:"
>
<el-form-item
label=
"管理员联系电话:"
>
<el-input
v-model=
"formData.managerPhone"
clearable
placeholder=
"请输入"
/>
<el-input
v-model=
"formData.managerPhone"
clearable
placeholder=
"请输入"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"监控信息:"
>
<el-form-item
label=
"监控账号:"
>
<el-input
v-model=
"formData.monitor"
clearable
placeholder=
"请输入"
/>
<el-input
v-model=
"formData.monitor_ac"
clearable
placeholder=
"请输入"
/>
</el-form-item>
<el-form-item
label=
"监控ID:"
>
<el-input
v-model=
"formData.monitor_id"
clearable
placeholder=
"请输入"
/>
</el-form-item>
<el-form-item
label=
"设备ID:"
>
<el-input
v-model=
"formData.yewei_device"
clearable
placeholder=
"请输入"
/>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<
template
#
footer
>
<
template
#
footer
>
...
@@ -156,7 +162,9 @@
...
@@ -156,7 +162,9 @@
lng
:
''
,
lng
:
''
,
manager
:
''
,
manager
:
''
,
managerPhone
:
''
,
managerPhone
:
''
,
monitor
:
''
,
monitor_ac
:
''
,
//监控账号
monitor_id
:
''
,
//监控ID
yewei_device
:
''
,
//设备ID
name
:
''
,
name
:
''
,
showImage
:
''
,
showImage
:
''
,
type
:
undefined
,
type
:
undefined
,
...
@@ -315,7 +323,9 @@
...
@@ -315,7 +323,9 @@
lng
:
''
,
lng
:
''
,
manager
:
''
,
manager
:
''
,
managerPhone
:
''
,
managerPhone
:
''
,
monitor
:
''
,
monitor_ac
:
''
,
//监控账号
monitor_id
:
''
,
//监控ID
yewei_device
:
''
,
//设备ID
name
:
''
,
name
:
''
,
showImage
:
''
,
showImage
:
''
,
type
:
undefined
,
type
:
undefined
,
...
...
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