Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
W
web-monitor
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
web-monitor
Commits
e613cdee
Commit
e613cdee
authored
Jan 14, 2025
by
dupengyu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
统计 轮询 用户 角色 权限 菜单 等页面
parent
5fb2b96a
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
3923 additions
and
212 deletions
+3923
-212
job.js
src/api/job.js
+73
-5
udp.js
src/api/udp.js
+17
-2
permission.js
src/permission.js
+1
-1
request.js
src/utils/request.js
+7
-1
api.js
src/views/alarm/api.js
+12
-3
index.vue
src/views/alarm/cableTime/index.vue
+23
-6
index.vue
src/views/alarm/statistics/index.vue
+8
-1
printToPdf.js
src/views/alarm/statistics/printToPdf.js
+0
-1
index.vue
src/views/jobgroup/jobinfo/index.vue
+389
-13
index.vue
src/views/jobgroup/joblog/index.vue
+39
-15
index.vue
src/views/jobgroup/jobmanage/index.vue
+210
-9
autoAdd.vue
src/views/setting/add/comp/autoAdd.vue
+223
-53
monitorEquip.vue
src/views/setting/add/comp/monitorEquip.vue
+0
-1
index.vue
src/views/setting/add/index.vue
+2
-2
index.vue
src/views/setting/auto/index.vue
+5
-28
index.vue
src/views/setting/parameter/index.vue
+40
-60
monitorTable.vue
src/views/setting/statistics/comp/monitorTable.vue
+24
-2
index.vue
src/views/setting/statistics/index.vue
+8
-8
index.vue
src/views/system/menu/index.vue
+452
-0
authUser.vue
src/views/system/role/authUser.vue
+199
-0
index.vue
src/views/system/role/index.vue
+605
-0
selectUser.vue
src/views/system/role/selectUser.vue
+138
-0
authRole.vue
src/views/system/user/authRole.vue
+117
-0
index.vue
src/views/system/user/index.vue
+899
-0
index.vue
src/views/system/user/profile/index.vue
+91
-0
resetPwd.vue
src/views/system/user/profile/resetPwd.vue
+68
-0
userAvatar.vue
src/views/system/user/profile/userAvatar.vue
+184
-0
userInfo.vue
src/views/system/user/profile/userInfo.vue
+88
-0
vue.config.js
vue.config.js
+1
-1
No files found.
src/api/job.js
View file @
e613cdee
import
request
from
'@/utils/request'
import
request
from
'@/utils/request'
// 运行报表
/* 运行报表 */
export
function
chartInfo
(
params
)
{
export
function
chartInfo
(
params
)
{
return
request
({
return
request
({
url
:
'/device/chartInfo'
,
url
:
'/device/chartInfo'
,
...
@@ -7,7 +9,7 @@ export function chartInfo(params) {
...
@@ -7,7 +9,7 @@ export function chartInfo(params) {
params
params
})
})
}
}
/
/ 任务管理
/
* 任务管理 */
export
function
jobinfoList
(
data
)
{
export
function
jobinfoList
(
data
)
{
return
request
({
return
request
({
url
:
'/device/jobinfo/pageList'
,
url
:
'/device/jobinfo/pageList'
,
...
@@ -15,7 +17,50 @@ export function jobinfoList(data) {
...
@@ -15,7 +17,50 @@ export function jobinfoList(data) {
data
data
})
})
}
}
// 调度日志
// 执行一次
export
function
triggerJobinfo
(
data
)
{
return
request
({
url
:
'/device/jobinfo/trigger'
,
method
:
'post'
,
data
})
}
// 查询节点
export
function
loadByIdJobinfo
(
data
)
{
return
request
({
url
:
'/device/jobgroup/loadById'
,
method
:
'post'
,
data
})
}
// 下次执行时间
export
function
nextTriggerTime
(
data
)
{
return
request
({
url
:
'/device/jobinfo/nextTriggerTime'
,
method
:
'post'
,
data
})
}
// 启动
export
function
start
(
data
)
{
return
request
({
url
:
'/device/jobinfo/start'
,
method
:
'post'
,
data
})
}
// 停止
export
function
stop
(
data
)
{
return
request
({
url
:
'/device/jobinfo/stop'
,
method
:
'post'
,
data
})
}
/* 调度日志 */
export
function
joblogList
(
data
)
{
export
function
joblogList
(
data
)
{
return
request
({
return
request
({
url
:
'/device/joblog/pageList'
,
url
:
'/device/joblog/pageList'
,
...
@@ -24,7 +69,7 @@ export function joblogList(data) {
...
@@ -24,7 +69,7 @@ export function joblogList(data) {
})
})
}
}
/
/ 执行器管理
/
* 执行器管理 */
export
function
jobgroupList
(
data
)
{
export
function
jobgroupList
(
data
)
{
return
request
({
return
request
({
url
:
'/device/jobgroup/pageList'
,
url
:
'/device/jobgroup/pageList'
,
...
@@ -32,4 +77,27 @@ export function jobgroupList(data) {
...
@@ -32,4 +77,27 @@ export function jobgroupList(data) {
data
data
})
})
}
}
// 新增执行器
export
function
addJobgroup
(
data
)
{
return
request
({
url
:
'/device/jobgroup/save'
,
method
:
'post'
,
data
})
}
// 编辑执行器
export
function
updateJobgroup
(
data
)
{
return
request
({
url
:
'/device/jobgroup/update'
,
method
:
'post'
,
data
})
}
// 删除执行器
export
function
removeJobgroup
(
data
)
{
return
request
({
url
:
'/device/jobgroup/remove'
,
method
:
'post'
,
data
})
}
\ No newline at end of file
src/api/udp.js
View file @
e613cdee
import
request
from
'@/utils/request'
import
request
from
'@/utils/request'
// 时间同步
export
function
timeSync
(
params
)
{
export
function
timeSync
(
params
)
{
return
request
({
return
request
({
url
:
'/device/udp/timeSync'
,
url
:
'/device/udp/timeSync'
,
...
@@ -7,4 +7,19 @@ export function timeSync(params) {
...
@@ -7,4 +7,19 @@ export function timeSync(params) {
params
params
})
})
}
}
// 设备查询参数
export
function
selectParam
(
params
)
{
return
request
({
url
:
'/device/udp/selectParam'
,
method
:
'post'
,
params
})
}
// 设备设置参数
export
function
setParam
(
params
)
{
return
request
({
url
:
'/device/udp/setParam'
,
method
:
'post'
,
params
})
}
\ No newline at end of file
src/permission.js
View file @
e613cdee
...
@@ -10,7 +10,7 @@ NProgress.configure({ showSpinner: false }) // NProgress Configuration
...
@@ -10,7 +10,7 @@ NProgress.configure({ showSpinner: false }) // NProgress Configuration
const
whiteList
=
[
'/login'
]
const
whiteList
=
[
'/login'
]
router
.
beforeEach
(
async
(
to
,
from
,
next
)
=>
{
router
.
beforeEach
(
async
(
to
,
from
,
next
)
=>
{
NProgress
.
start
()
NProgress
.
start
()
document
.
title
=
getPageTitle
(
to
.
meta
.
title
)
document
.
title
=
getPageTitle
(
to
.
meta
.
title
)
...
...
src/utils/request.js
View file @
e613cdee
...
@@ -54,7 +54,13 @@ service.interceptors.request.use(
...
@@ -54,7 +54,13 @@ service.interceptors.request.use(
let
errorShowing
=
false
let
errorShowing
=
false
service
.
interceptors
.
response
.
use
(
service
.
interceptors
.
response
.
use
(
response
=>
{
response
=>
{
const
res
=
response
.
data
.
data
?
response
.
data
.
data
:
response
.
data
let
res
=
response
.
data
.
data
?
response
.
data
.
data
:
response
.
data
if
(
response
.
data
.
recordsTotal
)
{
res
=
{
recordsTotal
:
response
.
data
.
recordsTotal
,
data
:
res
}
}
let
config
=
response
.
config
let
config
=
response
.
config
endLoading
(
config
.
el
)
endLoading
(
config
.
el
)
let
resFinal
=
res
.
rsp
||
res
||
{}
let
resFinal
=
res
.
rsp
||
res
||
{}
...
...
src/views/alarm/api.js
View file @
e613cdee
...
@@ -12,9 +12,17 @@ const path = {
...
@@ -12,9 +12,17 @@ const path = {
alarmConfirmStatusStatistics
:
'api/sysMonitorAlarmStatistics/alarmConfirmStatusStatistics'
,
alarmConfirmStatusStatistics
:
'api/sysMonitorAlarmStatistics/alarmConfirmStatusStatistics'
,
alarmLevelStatistics
:
'/api/sysMonitorAlarmStatistics/alarmLevelStatistics'
,
alarmLevelStatistics
:
'/api/sysMonitorAlarmStatistics/alarmLevelStatistics'
,
alarmLevelCountStatistics
:
'/api/sysMonitorAlarmStatistics/alarmLevelCountStatistics'
,
alarmLevelCountStatistics
:
'/api/sysMonitorAlarmStatistics/alarmLevelCountStatistics'
,
selectPage
:
'/api/sysMonitorAlarmStatistics/selectPage'
selectPage
:
'/api/sysMonitorAlarmStatistics/selectPage'
,
export
:
'/api/sysMonitorAlarmStatistics/export'
,
}
}
const
blobConf
=
{
responseType
:
'blob'
}
function
requestBlob
(
url
,
params
,
config
=
{})
{
return
request
.
post
(
url
,
params
,
{
...
config
,
...
blobConf
})
}
export
function
cableTimeList
()
{
export
function
cableTimeList
()
{
return
request
.
post
(
path
.
cableTimeList
,
...
arguments
);
return
request
.
post
(
path
.
cableTimeList
,
...
arguments
);
}
}
...
@@ -49,5 +57,6 @@ export function alarmLevelCountStatistics() {
...
@@ -49,5 +57,6 @@ export function alarmLevelCountStatistics() {
export
function
selectPage
()
{
export
function
selectPage
()
{
return
request
.
post
(
path
.
selectPage
,
...
arguments
);
return
request
.
post
(
path
.
selectPage
,
...
arguments
);
}
}
export
function
exportExcel
()
{
return
requestBlob
(
path
.
export
,
...
arguments
)
}
\ No newline at end of file
src/views/alarm/cableTime/index.vue
View file @
e613cdee
...
@@ -35,7 +35,7 @@
...
@@ -35,7 +35,7 @@
align=
"center"
align=
"center"
/>
/>
<el-table-column
<el-table-column
prop=
"alarm
Name
"
prop=
"alarm
Target
"
label=
"告警对象"
label=
"告警对象"
width=
"180"
width=
"180"
align=
"center"
align=
"center"
...
@@ -45,7 +45,11 @@
...
@@ -45,7 +45,11 @@
label=
"告警类型"
label=
"告警类型"
width=
"150"
width=
"150"
align=
"center"
align=
"center"
/>
>
<template
slot-scope=
"scope"
>
<div>
{{
alarmType
[
scope
.
row
.
alarmType
]
}}
</div>
</
template
>
</el-table-column>
<el-table-column
<el-table-column
prop=
"alarmLevelName"
prop=
"alarmLevelName"
label=
"告警级别"
label=
"告警级别"
...
@@ -67,11 +71,23 @@
...
@@ -67,11 +71,23 @@
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
prop=
"
siteName
"
prop=
"
alarmLevel
"
label=
"告警触发值"
label=
"告警触发值"
width=
"150"
width=
"150"
align=
"center"
align=
"center"
/>
>
<
template
slot-scope=
"scope"
>
<div>
{{
scope
.
row
.
alarmLevel
==
0
?
"1.5"
:
scope
.
row
.
alarmLevel
==
1
?
"1.8"
:
"2.0"
}}
</div>
</
template
>
</el-table-column>
<el-table-column
<el-table-column
prop=
"lateUploadTime"
prop=
"lateUploadTime"
label=
"告警发生时间"
label=
"告警发生时间"
...
@@ -207,11 +223,12 @@ import search from "./components/search.vue";
...
@@ -207,11 +223,12 @@ import search from "./components/search.vue";
import
download
from
"@/utils/download"
;
import
download
from
"@/utils/download"
;
import
{
successAlert
,
warningAlert
}
from
"@/utils/alert"
;
import
{
successAlert
,
warningAlert
}
from
"@/utils/alert"
;
import
{
levelStyle
}
from
"@/const/index"
;
import
{
levelStyle
}
from
"@/const/index"
;
import
{
alarmLeval
,
alarmType
}
from
"@/const"
;
export
default
{
export
default
{
components
:
{
search
},
components
:
{
search
},
data
()
{
data
()
{
return
{
return
{
alarmType
,
confirmStatus
:
0
,
confirmStatus
:
0
,
dialogInfo
:
[],
dialogInfo
:
[],
centerDialogVisible
:
false
,
centerDialogVisible
:
false
,
...
@@ -261,7 +278,7 @@ export default {
...
@@ -261,7 +278,7 @@ export default {
});
});
},
},
async
handleEliminate
(
id
)
{
async
handleEliminate
(
id
)
{
let
res
=
await
eliminate
({
id
:
id
});
let
res
=
await
eliminate
({
id
:
id
});
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
successAlert
(
"取消告警成功"
);
successAlert
(
"取消告警成功"
);
this
.
getTableData
();
this
.
getTableData
();
...
...
src/views/alarm/statistics/index.vue
View file @
e613cdee
...
@@ -18,7 +18,7 @@
...
@@ -18,7 +18,7 @@
class=
"ml10"
class=
"ml10"
type=
"primary"
type=
"primary"
icon=
"el-icon-refresh-right"
icon=
"el-icon-refresh-right"
@
click=
"
getInit
"
@
click=
"
handleExportExcel
"
>
导出
</el-button
>
导出
</el-button
>
>
<el-button
<el-button
...
@@ -211,7 +211,9 @@ import {
...
@@ -211,7 +211,9 @@ import {
alarmLevelStatistics
,
alarmLevelStatistics
,
alarmLevelCountStatistics
,
alarmLevelCountStatistics
,
selectPage
,
selectPage
,
exportExcel
,
}
from
"../api"
;
}
from
"../api"
;
import
download
from
"@/utils/download"
;
export
default
{
export
default
{
data
()
{
data
()
{
return
{
return
{
...
@@ -240,6 +242,11 @@ export default {
...
@@ -240,6 +242,11 @@ export default {
this
.
handleInIt
();
this
.
handleInIt
();
},
},
methods
:
{
methods
:
{
handleExportExcel
()
{
exportExcel
({}).
then
((
res
)
=>
{
download
(
res
,
"vnd.ms-excel"
,
`告警信息统计.xls`
);
});
},
handleInIt
()
{
handleInIt
()
{
this
.
handlealArmConfirmStatusStatistics
();
this
.
handlealArmConfirmStatusStatistics
();
this
.
handlealArmLevelStatistics
();
this
.
handlealArmLevelStatistics
();
...
...
src/views/alarm/statistics/printToPdf.js
View file @
e613cdee
...
@@ -21,7 +21,6 @@ function performPrint(targetId) {
...
@@ -21,7 +21,6 @@ function performPrint(targetId) {
// 将不希望展示的元素隐藏掉
// 将不希望展示的元素隐藏掉
// 克隆目标元素及其子元素
// 克隆目标元素及其子元素
const
clonedElement
=
targetElement
.
cloneNode
(
true
);
const
clonedElement
=
targetElement
.
cloneNode
(
true
);
// clonedElement.style.width = '200mm'
// 在打印之前隐藏所有元素
// 在打印之前隐藏所有元素
function
hideAllElements
()
{
function
hideAllElements
()
{
...
...
src/views/jobgroup/jobinfo/index.vue
View file @
e613cdee
This diff is collapsed.
Click to expand it.
src/views/jobgroup/joblog/index.vue
View file @
e613cdee
...
@@ -8,26 +8,44 @@
...
@@ -8,26 +8,44 @@
style=
"width: 100%"
style=
"width: 100%"
:header-cell-style=
"
{ background: '#EAF1FE', color: '#666666' }"
:header-cell-style=
"
{ background: '#EAF1FE', color: '#666666' }"
>
>
<el-table-column
label=
"任务ID"
align=
"center"
/>
<el-table-column
prop=
"jobId"
label=
"任务ID"
align=
"center"
/>
<el-table-column
prop=
"siteName"
label=
"调度时间"
align=
"center"
/>
<el-table-column
prop=
"triggerTime"
label=
"调度时间"
align=
"center"
/>
<el-table-column
prop=
"alarmName"
label=
"调度结果"
align=
"center"
/>
<el-table-column
prop=
"triggerCode"
label=
"调度结果"
align=
"center"
>
<el-table-column
prop=
"alarmType"
label=
"调度备注"
align=
"center"
/>
<el-table-column
prop=
"alarmType"
label=
"执行时间"
align=
"center"
/>
<el-table-column
prop=
"alarmType"
label=
"执行结果"
align=
"center"
/>
<el-table-column
prop=
"alarmLevelName"
label=
"执行备注"
align=
"center"
/>
<el-table-column
label=
"操作"
align=
"center"
width=
"100"
>
<template
slot-scope=
"scope"
>
<template
slot-scope=
"scope"
>
<el-button
type=
"text"
@
click=
"eliminate(scope.row)"
<el-tag
>
操作
</el-button
:type=
"scope.row.triggerCode === 200 ? 'success' : 'danger'"
>
{{
scope
.
row
.
triggerCode
===
200
?
"成功"
:
"失败"
}}
</el-tag
>
>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"triggerMsg"
label=
"调度备注"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
@
click=
"handleView(scope.row.triggerMsg)"
>
查看
</el-button
>
<!--
<div
v-html=
"scope.row.triggerMsg"
></div>
-->
</
template
>
</el-table-column>
<el-table-column
prop=
"handleTime"
label=
"执行时间"
align=
"center"
/>
<el-table-column
prop=
"handleCode"
label=
"执行结果"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-tag
:type=
"scope.row.handleCode === 200 ? 'success' : 'danger'"
>
{{
scope
.
row
.
handleCode
===
200
?
"成功"
:
"失败"
}}
</el-tag
>
</
template
>
</el-table-column>
<el-table-column
prop=
"handleMsg"
label=
"执行备注"
align=
"center"
/>
</el-table>
</el-table>
</div>
</div>
<el-dialog
title=
"告警详情"
:visible
.
sync=
"centerDialogVisible"
width=
"600px"
center
>
<div
v-html=
"dialogInfo"
></div>
</el-dialog>
</div>
</div>
</template>
</template>
...
@@ -37,12 +55,18 @@ export default {
...
@@ -37,12 +55,18 @@ export default {
data
()
{
data
()
{
return
{
return
{
tableData
:
[],
tableData
:
[],
dialogInfo
:
""
,
centerDialogVisible
:
false
,
};
};
},
},
mounted
()
{
mounted
()
{
this
.
handleJoblogList
();
this
.
handleJoblogList
();
},
},
methods
:
{
methods
:
{
handleView
(
e
)
{
this
.
dialogInfo
=
e
;
this
.
centerDialogVisible
=
true
;
},
async
handleJoblogList
()
{
async
handleJoblogList
()
{
let
data
=
{
let
data
=
{
jobGroup
:
0
,
jobGroup
:
0
,
...
@@ -55,7 +79,7 @@ export default {
...
@@ -55,7 +79,7 @@ export default {
const
queryParams
=
new
URLSearchParams
(
data
).
toString
();
const
queryParams
=
new
URLSearchParams
(
data
).
toString
();
const
res
=
await
joblogList
(
queryParams
);
const
res
=
await
joblogList
(
queryParams
);
console
.
log
(
res
);
console
.
log
(
res
);
this
.
tableData
=
res
;
this
.
tableData
=
res
.
data
;
},
},
},
},
};
};
...
...
src/views/jobgroup/jobmanage/index.vue
View file @
e613cdee
<
template
>
<
template
>
<div>
<div>
<div>
执行器管理
</div>
<div
class=
"nav-title"
>
执行器管理
</div>
<div
class=
"search"
></div>
<div
class=
"search"
>
<el-form
class=
"search-form"
:model=
"form"
ref=
"form"
:inline=
"true"
size=
"mini"
>
<el-form-item
label=
"APPName:"
>
<el-input
v-model=
"form.appname"
placeholder=
"请输入APPName"
></el-input>
</el-form-item>
<el-form-item
label=
"名称:"
>
<el-input
v-model=
"form.title"
placeholder=
"请输入名称"
></el-input>
</el-form-item>
<el-form-item>
<el-button
type=
"success"
@
click=
"toSearch"
>
查询
</el-button>
<el-button
type=
"primary"
@
click=
"handleEdit()"
>
新增
</el-button>
</el-form-item>
</el-form>
</div>
<div>
<div>
<el-table
<el-table
:data=
"tableData"
:data=
"tableData"
...
@@ -10,44 +32,223 @@
...
@@ -10,44 +32,223 @@
>
>
<el-table-column
label=
"AppName"
prop=
"appname"
align=
"center"
/>
<el-table-column
label=
"AppName"
prop=
"appname"
align=
"center"
/>
<el-table-column
prop=
"title"
label=
"名称"
align=
"center"
/>
<el-table-column
prop=
"title"
label=
"名称"
align=
"center"
/>
<el-table-column
prop=
"addressType"
label=
"注册方式"
align=
"center"
/>
<el-table-column
prop=
"addressType"
label=
"注册方式"
align=
"center"
>
<template
slot-scope=
"scope"
>
{{
scope
.
row
.
addressType
===
0
?
"自动录入"
:
"手动录入"
}}
</
template
>
</el-table-column>
<el-table-column
<el-table-column
prop=
"registryList"
prop=
"registryList"
label=
"OnLine 机器地址"
label=
"OnLine 机器地址"
align=
"center"
align=
"center"
/>
/>
<el-table-column
label=
"操作"
align=
"center"
width=
"1
0
0"
>
<el-table-column
label=
"操作"
align=
"center"
width=
"1
5
0"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
@
click=
"eliminate(scope.row)"
<el-button
type=
"text"
@
click=
"handleEdit(scope.row)"
>
操作
</el-button
>
编辑
</el-button
>
<el-button
type=
"text"
style=
"color: red"
@
click=
"handleDle(scope.row)"
>
删除
</el-button
>
>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
<Pagination
:limit=
"params.size"
:page=
"params.current"
:total=
"total"
class=
"pagination"
@
pagination=
"handlePageChange"
/>
</div>
</div>
<el-dialog
:title=
"manageFrom && manageFrom.id ? '编辑执行器' : '新增执行器'"
:visible
.
sync=
"centerDialogVisible"
width=
"600px"
@
close=
"handleClose"
center
>
<el-form
:model=
"manageFrom"
ref=
"form"
size=
"mini"
>
<el-form-item
label=
"APPName:"
>
<el-input
v-model=
"manageFrom.appname"
placeholder=
"请输入APPName"
></el-input>
</el-form-item>
<el-form-item
label=
"名称:"
>
<el-input
v-model=
"manageFrom.title"
placeholder=
"请输入名称"
></el-input>
</el-form-item>
<el-form-item
label=
"注册方式:"
>
<el-radio-group
v-model=
"manageFrom.addressType"
>
<el-radio-button
label=
"1"
>
手动录入
</el-radio-button>
<el-radio-button
label=
"0"
>
自动录入
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"机器地址:"
>
<el-input
:disabled=
"manageFrom.addressType == 0"
type=
"textarea"
:autosize=
"{ minRows: 2, maxRows: 4 }"
placeholder=
"请输入执行器地址列表,多地址逗号分隔"
v-model=
"manageFrom.addressList"
>
</el-input>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"handleAddJobgroup"
>
确定
</el-button>
<el-button
@
click=
"handleClose()"
>
取消
</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</div>
</template>
</template>
<
script
>
<
script
>
import
{
jobgroupList
}
from
"@/api/job.js"
;
import
{
jobgroupList
,
addJobgroup
,
updateJobgroup
,
removeJobgroup
,
}
from
"@/api/job.js"
;
import
{
successAlert
,
warningAlert
}
from
"@/utils/alert"
;
export
default
{
export
default
{
data
()
{
data
()
{
return
{
return
{
form
:
{
title
:
""
,
appname
:
""
,
},
tableData
:
[],
tableData
:
[],
params
:
{
current
:
1
,
size
:
10
,
},
total
:
0
,
centerDialogVisible
:
false
,
manageFrom
:
{
appname
:
""
,
title
:
""
,
addressList
:
""
,
addressType
:
"1"
,
},
};
};
},
},
mounted
()
{
mounted
()
{
this
.
handleJobGroupList
();
this
.
handleJobGroupList
();
},
},
methods
:
{
methods
:
{
async
handleRemoveJobgroup
(
row
)
{
const
queryParams
=
new
URLSearchParams
({
id
:
row
.
id
}).
toString
();
let
res
=
await
removeJobgroup
(
queryParams
);
if
(
res
.
code
==
200
)
{
this
.
handleJobGroupList
();
successAlert
(
"删除成功"
);
}
},
handleClose
()
{
this
.
manageFrom
=
{
appname
:
""
,
title
:
""
,
addressList
:
""
,
addressType
:
"1"
,
};
this
.
centerDialogVisible
=
false
;
},
handleEdit
(
e
)
{
if
(
e
&&
e
.
id
)
{
this
.
manageFrom
=
e
;
}
this
.
centerDialogVisible
=
true
;
},
async
handleAddJobgroup
()
{
let
res
;
delete
this
.
manageFrom
.
updateTime
;
delete
this
.
manageFrom
.
registryList
;
const
queryParams
=
new
URLSearchParams
(
this
.
manageFrom
).
toString
();
if
(
!
this
.
manageFrom
.
id
)
{
res
=
await
addJobgroup
(
queryParams
);
}
else
{
res
=
await
updateJobgroup
(
queryParams
);
}
if
(
res
.
code
==
200
)
{
successAlert
(
"操作成功"
);
this
.
handleClose
();
this
.
handleJobGroupList
();
}
console
.
log
(
res
);
},
handlePageChange
(
pageData
)
{
this
.
params
.
size
=
pageData
.
size
;
this
.
params
.
current
=
pageData
.
page
;
this
.
handleJobGroupList
();
},
handleDle
(
row
)
{
this
.
$confirm
(
"继续操作将永久删除, 是否继续?"
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
.
then
(()
=>
{
this
.
handleRemoveJobgroup
(
row
);
})
.
catch
(()
=>
{});
},
toSearch
()
{
this
.
handleJobGroupList
();
},
async
handleJobGroupList
()
{
async
handleJobGroupList
()
{
const
res
=
await
jobgroupList
();
let
data
=
{
start
:
(
this
.
params
.
current
-
1
)
*
this
.
params
.
size
,
length
:
this
.
params
.
size
,
title
:
this
.
form
.
title
,
appname
:
this
.
form
.
appname
,
};
const
queryParams
=
new
URLSearchParams
(
data
).
toString
();
const
res
=
await
jobgroupList
(
queryParams
);
console
.
log
(
res
);
console
.
log
(
res
);
this
.
tableData
=
res
;
this
.
tableData
=
res
.
data
;
this
.
total
=
res
.
recordsTotal
;
},
},
},
},
};
};
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
.nav-title
{
color
:
#02a7f0
;
font-size
:
20px
;
position
:
relative
;
padding-left
:
16px
;
font-weight
:
bold
;
line-height
:
28px
;
}
.
nav-title
:
:
before
{
content
:
""
;
position
:
absolute
;
left
:
0px
;
top
:
1px
;
width
:
5px
;
height
:
100%
;
background-color
:
#02a7f0
;
border-radius
:
4px
;
}
.search
{
margin
:
16px
0
;
.search-form
{
padding
:
10px
;
background-color
:
#eaf1fe
;
margin-bottom
:
20px
;
border-radius
:
8px
;
.el-form-item--mini.el-form-item
,
.el-form-item--small.el-form-item
{
margin-bottom
:
0
;
}
}
}
</
style
>
</
style
>
\ No newline at end of file
src/views/setting/add/comp/autoAdd.vue
View file @
e613cdee
<
template
>
<
template
>
<div>
<div>
<el-table
<el-form
ref=
"multipleTable"
ref=
"monitorForm"
class=
"statistics-table"
:model=
"monitorForm"
:data=
"tableData"
:rules=
"rules"
tooltip-effect=
"dark"
label-width=
"200px"
style=
"width: 100%; height: auto"
class=
"form"
:row-class-name=
"tableRowClassName"
:row-style=
"
{ height: '50px' }"
:header-cell-style="{
background: '#eaf1fe',
color: '#000',
fontWeight: 700,
height: '50px',
}"
>
>
<el-table-column
type=
"index"
label=
"序号"
width=
"55"
align=
"center"
/>
<el-form-item
label=
"检测设备:"
prop=
"wayId"
>
<el-input
v-model=
"rowData.equipName"
disabled
placeholder=
"检测设备"
/>
</el-form-item>
<el-form-item
label=
"测量周期"
prop=
"measurementCycle"
>
<el-input
v-model=
"monitorForm.measurementCycle"
placeholder=
"请输入测量周期"
/>
</el-form-item>
<el-form-item
label=
"漏缆一般告警门限"
prop=
"leakyCableGeneralAlarmThreshold"
>
<el-input
v-model=
"monitorForm.leakyCableGeneralAlarmThreshold"
placeholder=
"请输入漏缆一般告警门限"
/>
</el-form-item>
<el-form-item
label=
"漏缆重要告警门限"
prop=
"leakyCableImportantAlarmThreshold"
>
<el-input
v-model=
"monitorForm.leakyCableImportantAlarmThreshold"
placeholder=
"请输入漏缆重要告警门限"
/>
</el-form-item>
<el-form-item
label=
"漏缆紧急告警门限"
prop=
"leakyCableEmergencyAlarmThreshold"
>
<el-input
v-model=
"monitorForm.leakyCableEmergencyAlarmThreshold"
placeholder=
"请输入漏缆紧急告警门限"
/>
</el-form-item>
<el-form-item
label=
"选择设备"
prop=
"devicePortType"
>
<el-select
v-model=
"monitorForm.device"
placeholder=
"请选择设备"
>
<el-option
v-for=
"item in options"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"设备端口类型"
prop=
"devicePortType"
>
<el-select
v-model=
"monitorForm.devicePortType"
placeholder=
"请选择"
>
<el-option
v-for=
"item in typeList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"设备1上行方向起始位置"
prop=
"uplinkLeakyCable1StartPosition"
v-if=
"
(monitorForm.devicePortType == '1' ||
monitorForm.devicePortType == '2') &&
monitorForm.device === '1'
"
>
<el-input
v-model=
"monitorForm.uplinkLeakyCable1StartPosition"
placeholder=
"请输入设备身份编号"
/>
</el-form-item>
<el-form-item
label=
"设备1上行方向终止位置"
prop=
"uplinkLeakyCable1EndPosition"
v-if=
"
(monitorForm.devicePortType == '1' ||
monitorForm.devicePortType == '2') &&
monitorForm.device === '1'
"
>
<el-input
v-model=
"monitorForm.uplinkLeakyCable1EndPosition"
placeholder=
"请输入设备身份编号"
/>
</el-form-item>
<el-form-item
label=
"设备1下行方向起始位置"
prop=
"downlinkLeakyCable1StartPosition"
v-if=
"
(monitorForm.devicePortType == '1' ||
monitorForm.devicePortType == '3') &&
monitorForm.device === '1'
"
>
<el-input
v-model=
"monitorForm.downlinkLeakyCable1StartPosition"
placeholder=
"请输入设备身份编号"
/>
</el-form-item>
<el-table-column
prop=
"equipCode"
label=
"设备编号"
align=
"center"
/>
<el-form-item
<el-table-column
label=
"设备1下行方向终止位置"
prop=
"equipName"
prop=
"downlinkLeakyCable1EndPosition"
label=
"设备名称"
v-if=
"
show-overflow-tooltip
(monitorForm.devicePortType == '1' ||
align=
"center"
monitorForm.devicePortType == '3') &&
monitorForm.device === '1'
"
>
<el-input
v-model=
"monitorForm.downlinkLeakyCable1EndPosition"
placeholder=
"请输入设备身份编号"
/>
/>
<el-table-column
prop=
"ip"
label=
"设备IP"
align=
"center"
/>
</el-form-item>
<el-table-column
prop=
"railWayName"
label=
"设备型号"
align=
"center"
/>
<el-form-item
<el-table-column
prop=
"siteName"
label=
"设备位置"
align=
"center"
/>
label=
"设备2上行方向起始位置"
<el-table-column
prop=
"uplinkLeakyCable2StartPosition"
prop=
"action"
v-if=
"
label=
"操作"
(monitorForm.devicePortType == '1' ||
show-overflow-tooltip
monitorForm.devicePortType == '2') &&
align=
"center"
monitorForm.device === '2'
"
>
>
<template
slot-scope=
"
{ row }">
<el-input
<el-link
type=
"primary"
:underline=
"false"
@
click=
"handleView(row)"
v-model=
"monitorForm.uplinkLeakyCable2StartPosition"
>
添加
</el-link
placeholder=
"请输入设备身份编号"
/>
</el-form-item>
<el-form-item
label=
"设备2上行方向终止位置"
prop=
"uplinkLeakyCable2EndPosition"
v-if=
"
(monitorForm.devicePortType == '1' ||
monitorForm.devicePortType == '2') &&
monitorForm.device === '2'
"
>
>
</
template
>
<el-input
</el-table-column>
v-model=
"monitorForm.uplinkLeakyCable2EndPosition"
</el-table>
placeholder=
"请输入设备身份编号"
/>
</el-form-item>
<el-form-item
label=
"设备2下行方向起始位置"
prop=
"downlinkLeakyCable2StartPosition"
v-if=
"
(monitorForm.devicePortType == '1' ||
monitorForm.devicePortType == '3') &&
monitorForm.device === '2'
"
>
<el-input
v-model=
"monitorForm.downlinkLeakyCable2StartPosition"
placeholder=
"请输入设备身份编号"
/>
</el-form-item>
<el-form-item
label=
"设备2下行方向终止位置"
prop=
"downlinkLeakyCable2EndPosition"
v-if=
"
(monitorForm.devicePortType == '1' ||
monitorForm.devicePortType == '3') &&
monitorForm.device === '2'
"
>
<el-input
v-model=
"monitorForm.downlinkLeakyCable2EndPosition"
placeholder=
"请输入设备身份编号"
/>
</el-form-item>
<el-form-item
label=
"设备输出功率"
prop=
"deviceOutputPower"
>
<el-input
v-model=
"monitorForm.deviceOutputPower"
placeholder=
"请输入设备身份编号"
/>
</el-form-item>
<el-form-item
label=
"设备的起始频率"
prop=
"deviceStartFrequency"
>
<el-input
v-model=
"monitorForm.deviceStartFrequency"
placeholder=
"请输入设备身份编号"
/>
</el-form-item>
<el-form-item
label=
"设备的终止频率"
prop=
"deviceEndFrequency"
>
<el-input
v-model=
"monitorForm.deviceEndFrequency"
placeholder=
"请输入设备的终止频率"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"handleSub"
>
确定
</el-button>
<el-button
@
click=
"handleClose()"
>
取消
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</
template
>
</
template
>
...
@@ -47,27 +207,37 @@
...
@@ -47,27 +207,37 @@
export
default
{
export
default
{
data
()
{
data
()
{
return
{
return
{
tableData
:
[
monitorForm
:
{
{
device
:
"1"
,
equipCode
:
"123456"
,
devicePortType
:
"1"
,
equipName
:
"123456"
,
ip
:
"123456"
,
railWayName
:
"123456"
,
siteName
:
"123456"
,
},
{
equipCode
:
"123456"
,
equipName
:
"123456"
,
ip
:
"123456"
,
railWayName
:
"123456"
,
},
},
options
:
[
{
value
:
"1"
,
label
:
"设备1"
},
{
value
:
"2"
,
label
:
"设备2"
},
],
typeList
:
[
{
value
:
"1"
,
label
:
"上下行"
},
{
value
:
"2"
,
label
:
"上行"
},
{
value
:
"3"
,
label
:
"下行"
},
],
],
rules
:{
}
};
};
},
},
props
:
{
rowData
:
{
type
:
Object
,
default
:
()
=>
{},
},
},
methods
:
{
methods
:
{
tableRowClassName
({
row
,
rowIndex
})
{
handleSub
()
{
return
rowIndex
%
2
===
0
?
""
:
"single-row"
;
this
.
$emit
(
"update"
,
this
.
monitorForm
)
;
},
},
handleClose
(){
this
.
$emit
(
"update"
,
false
);
}
},
},
};
};
</
script
>
</
script
>
...
...
src/views/setting/add/comp/monitorEquip.vue
View file @
e613cdee
...
@@ -240,7 +240,6 @@ export default {
...
@@ -240,7 +240,6 @@ export default {
this
.
$refs
.
monitorForm
.
validate
((
valid
)
=>
{
this
.
$refs
.
monitorForm
.
validate
((
valid
)
=>
{
if
(
valid
)
{
if
(
valid
)
{
this
.
monitorForm
.
parentId
=
this
.
monitorForm
.
fsuId
;
this
.
monitorForm
.
parentId
=
this
.
monitorForm
.
fsuId
;
monitorEquipsave
(
this
.
monitorForm
).
then
((
res
)
=>
{
monitorEquipsave
(
this
.
monitorForm
).
then
((
res
)
=>
{
if
(
res
.
code
==
200
)
{
if
(
res
.
code
==
200
)
{
successAlert
(
"添加成功"
);
successAlert
(
"添加成功"
);
...
...
src/views/setting/add/index.vue
View file @
e613cdee
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
<monitorEquip
/>
<monitorEquip
/>
</div>
</div>
</el-tab-pane>
</el-tab-pane>
<el-tab-pane
label=
"漏缆"
name=
"4"
>
<
!--
<
el-tab-pane
label=
"漏缆"
name=
"4"
>
<div
v-if=
"activeName === '4'"
class=
"content"
>
<div
v-if=
"activeName === '4'"
class=
"content"
>
<div
class=
"content-title"
>
添加漏缆
</div>
<div
class=
"content-title"
>
添加漏缆
</div>
<leakyCable
/>
<leakyCable
/>
...
@@ -37,7 +37,7 @@
...
@@ -37,7 +37,7 @@
<div
class=
"content-title"
>
添加天馈线
</div>
<div
class=
"content-title"
>
添加天馈线
</div>
<antennaFeeder
/>
<antennaFeeder
/>
</div>
</div>
</el-tab-pane>
</el-tab-pane>
-->
</el-tabs>
</el-tabs>
</div>
</div>
</div>
</div>
...
...
src/views/setting/auto/index.vue
View file @
e613cdee
...
@@ -6,34 +6,11 @@
...
@@ -6,34 +6,11 @@
style=
"width: 100%"
style=
"width: 100%"
:header-cell-style=
"
{ background: '#EAF1FE', color: '#666666' }"
:header-cell-style=
"
{ background: '#EAF1FE', color: '#666666' }"
>
>
<el-table-column
type=
"index"
label=
"序号"
width=
"100"
align=
"center"
/>
<el-table-column
type=
"index"
label=
"序号"
align=
"center"
/>
<el-table-column
<el-table-column
prop=
"equipCode"
label=
"设备编号"
align=
"center"
/>
prop=
"equipCode"
<el-table-column
prop=
"addResult"
label=
"操作回执"
align=
"center"
/>
label=
"设备编号"
<el-table-column
prop=
"addLog"
label=
"操作日志"
align=
"center"
/>
align=
"center"
<el-table-column
prop=
"addTime"
label=
"添加时间"
align=
"center"
/>
/>
<el-table-column
prop=
"addResult"
label=
"操作回执"
align=
"center"
/>
<el-table-column
prop=
"addLog"
label=
"操作日志"
align=
"center"
/>
<el-table-column
prop=
"addTime"
label=
"添加时间"
align=
"center"
/>
<el-table-column
label=
"操作"
align=
"center"
width=
"100"
>
<template
slot-scope=
"scope"
>
<el-button
type=
"text"
@
click=
"confirmAlarm(scope.row)"
>
详情
</el-button
>
</
template
>
</el-table-column>
</el-table>
</el-table>
<Pagination
<Pagination
:limit=
"params.size"
:limit=
"params.size"
...
...
src/views/setting/parameter/index.vue
View file @
e613cdee
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
class=
"ml10"
class=
"ml10"
type=
"primary"
type=
"primary"
icon=
"el-icon-refresh-right"
icon=
"el-icon-refresh-right"
@
click=
"
get
Init"
@
click=
"
handle
Init"
>
刷新
</el-button
>
刷新
</el-button
>
>
<el-button
<el-button
...
@@ -20,12 +20,11 @@
...
@@ -20,12 +20,11 @@
class=
"search-form"
class=
"search-form"
ref=
"form"
ref=
"form"
:model=
"form"
:model=
"form"
label-width=
"110px"
:inline=
"true"
:inline=
"true"
size=
"mini"
size=
"mini"
>
>
<el-form-item
label=
"类型"
>
<el-form-item
label=
"类型"
>
<el-select
v-model=
"type"
placeholder=
"请选择类型"
clearable
>
<el-select
v-model=
"type"
placeholder=
"请选择类型"
>
<el-option
<el-option
v-for=
"item in typeList"
v-for=
"item in typeList"
:key=
"item"
:key=
"item"
...
@@ -42,8 +41,9 @@
...
@@ -42,8 +41,9 @@
range-separator=
"至"
range-separator=
"至"
start-placeholder=
"开始日期"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
end-placeholder=
"结束日期"
value-format=
"yyyy-MM-dd
hh:mm:ss
"
value-format=
"yyyy-MM-dd"
>
>
<!-- hh:mm:ss -->
</el-date-picker>
</el-date-picker>
</el-form-item>
</el-form-item>
<el-form-item>
<el-form-item>
...
@@ -63,80 +63,38 @@
...
@@ -63,80 +63,38 @@
>
>
<el-table-column
type=
"index"
label=
"序号"
width=
"100"
align=
"center"
/>
<el-table-column
type=
"index"
label=
"序号"
width=
"100"
align=
"center"
/>
<el-table-column
<el-table-column
prop=
"siteName"
prop=
"upWave"
label=
"监测点位置名称"
label=
"上行漏缆故障点驻波比"
width=
"180"
align=
"center"
/>
<el-table-column
prop=
"alarmTarget"
label=
"漏缆链路编号"
width=
"180"
align=
"center"
/>
<el-table-column
prop=
"siteName"
label=
"驻波比(VSWR)"
width=
"150"
align=
"center"
/>
<el-table-column
prop=
"回波损耗"
label=
"告警级别"
width=
"150"
align=
"center"
/>
<el-table-column
prop=
"alarmInfo"
label=
"超出阈值的次数"
align=
"center"
>
<template
slot-scope=
"scope"
>
<div
v-for=
"(item, index) in scope.row.alarmInfo"
:key=
"index"
:class=
"levelStyle[item.level]"
>
<span>
距离:
{{
item
.
distance
}}
</span
>
<span>
驻波比:
{{
item
.
value
}}
</span>
</div>
<div>
漏缆百米损耗:
{{
scope
.
row
.
lossValue
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"siteName"
label=
"天馈接口编号"
width=
"150"
align=
"center"
align=
"center"
/>
/>
<el-table-column
<el-table-column
prop=
"
siteNam
e"
prop=
"
downWav
e"
label=
"
天馈驻波比(VSWR)
"
label=
"
下行漏缆故障点驻波比
"
align=
"center"
align=
"center"
width=
"200"
/>
/>
<el-table-column
<el-table-column
prop=
"
statusTimeChang
e"
prop=
"
upDistanc
e"
label=
"
回波损耗
"
label=
"
上行漏缆故障点距离
"
align=
"center"
align=
"center"
width=
"200"
/>
/>
<el-table-column
<el-table-column
prop=
"confirmPerson"
prop=
"downDistance"
label=
"超出阈值的次数"
label=
"下行漏缆故障点距离"
width=
"100"
align=
"center"
align=
"center"
/>
/>
<el-table-column
<el-table-column
prop=
"reportTime"
prop=
"reportTime"
label=
"
采集
时间"
label=
"
上报
时间"
width=
"180"
width=
"180"
align=
"center"
align=
"center"
/>
/>
<el-table-column
label=
"操作"
align=
"center"
width=
"100"
>
<
!--
<
el-table-column
label=
"操作"
align=
"center"
width=
"100"
>
<template
slot-scope=
"scope"
>
<template
slot-scope=
"scope"
>
<el-button
type=
"text"
@
click=
"handleView(scope.row)"
<el-button
type=
"text"
@
click=
"handleView(scope.row)"
>
详情
</el-button
>
详情
</el-button
>
>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
-->
</el-table>
</el-table>
<Pagination
<Pagination
:limit=
"params.size"
:limit=
"params.size"
...
@@ -226,19 +184,24 @@ export default {
...
@@ -226,19 +184,24 @@ export default {
const
hours
=
String
(
date
.
getHours
()).
padStart
(
2
,
"0"
);
const
hours
=
String
(
date
.
getHours
()).
padStart
(
2
,
"0"
);
const
minutes
=
String
(
date
.
getMinutes
()).
padStart
(
2
,
"0"
);
const
minutes
=
String
(
date
.
getMinutes
()).
padStart
(
2
,
"0"
);
const
seconds
=
String
(
date
.
getSeconds
()).
padStart
(
2
,
"0"
);
const
seconds
=
String
(
date
.
getSeconds
()).
padStart
(
2
,
"0"
);
return
`
${
year
}
-
${
month
}
-
${
day
}
${
hours
}
:
${
minutes
}
:
${
seconds
}
`
;
// ${hours}:${minutes}:${seconds}
return
`
${
year
}
-
${
month
}
-
${
day
}
`
;
},
},
async
handleWaveStatistics
()
{
async
handleWaveStatistics
()
{
let
data
=
{
let
data
=
{
startDate
:
""
,
startDate
:
""
,
endDate
:
""
,
endDate
:
""
,
};
};
if
(
!
this
.
dateRange
.
length
)
{
if
(
this
.
dateRange
&&
this
.
dateRange
.
length
<=
0
)
{
data
.
startDate
=
this
.
formatDate
(
data
.
startDate
=
this
.
formatDate
(
new
Date
(
new
Date
().
getTime
()
-
3600
*
1000
*
24
*
7
)
new
Date
(
new
Date
().
getTime
()
-
3600
*
1000
*
24
*
7
)
);
);
data
.
endDate
=
this
.
formatDate
(
new
Date
());
data
.
endDate
=
this
.
formatDate
(
new
Date
());
}
else
{
data
.
startDate
=
this
.
dateRange
[
0
];
data
.
endDate
=
this
.
dateRange
[
1
];
}
}
console
.
log
(
data
);
let
res
=
await
waveStatistics
(
data
);
let
res
=
await
waveStatistics
(
data
);
let
xData
=
res
.
map
((
item
)
=>
{
let
xData
=
res
.
map
((
item
)
=>
{
return
item
.
alarmDate
;
return
item
.
alarmDate
;
...
@@ -262,11 +225,14 @@ export default {
...
@@ -262,11 +225,14 @@ export default {
startDate
:
""
,
startDate
:
""
,
endDate
:
""
,
endDate
:
""
,
};
};
if
(
!
this
.
dateRange
.
length
)
{
if
(
this
.
dateRange
&&
this
.
dateRange
.
length
<=
0
)
{
data
.
startDate
=
this
.
formatDate
(
data
.
startDate
=
this
.
formatDate
(
new
Date
(
new
Date
().
getTime
()
-
3600
*
1000
*
24
*
7
)
new
Date
(
new
Date
().
getTime
()
-
3600
*
1000
*
24
*
7
)
);
);
data
.
endDate
=
this
.
formatDate
(
new
Date
());
data
.
endDate
=
this
.
formatDate
(
new
Date
());
}
else
{
data
.
startDate
=
this
.
dateRange
[
0
];
data
.
endDate
=
this
.
dateRange
[
1
];
}
}
let
res
=
await
distanceStatistics
(
data
);
let
res
=
await
distanceStatistics
(
data
);
let
xData
=
res
.
map
((
item
)
=>
{
let
xData
=
res
.
map
((
item
)
=>
{
...
@@ -287,6 +253,20 @@ export default {
...
@@ -287,6 +253,20 @@ export default {
});
});
},
},
async
handleSamplingList
()
{
async
handleSamplingList
()
{
let
data
=
{
startDate
:
""
,
endDate
:
""
,
...
this
.
params
,
};
if
(
this
.
dateRange
&&
this
.
dateRange
.
length
<=
0
)
{
data
.
startDate
=
this
.
formatDate
(
new
Date
(
new
Date
().
getTime
()
-
3600
*
1000
*
24
*
7
)
);
data
.
endDate
=
this
.
formatDate
(
new
Date
());
}
else
{
data
.
startDate
=
this
.
dateRange
[
0
];
data
.
endDate
=
this
.
dateRange
[
1
];
}
let
res
=
await
samplingList
(
this
.
params
);
let
res
=
await
samplingList
(
this
.
params
);
this
.
tableData
=
res
.
records
;
this
.
tableData
=
res
.
records
;
this
.
total
=
res
.
total
;
this
.
total
=
res
.
total
;
...
...
src/views/setting/statistics/comp/monitorTable.vue
View file @
e613cdee
...
@@ -181,13 +181,14 @@
...
@@ -181,13 +181,14 @@
width=
"40%"
width=
"40%"
:close-on-click-modal=
"false"
:close-on-click-modal=
"false"
>
>
<autoAdd
/>
<autoAdd
:rowData=
"rowData"
@
update=
"handleUpdate"
/>
</el-dialog>
</el-dialog>
</div>
</div>
</template>
</template>
<
script
>
<
script
>
import
monitor
from
"../../add/comp/monitorEquip.vue"
;
import
monitor
from
"../../add/comp/monitorEquip.vue"
;
import
autoAdd
from
"../../add/comp/autoAdd.vue"
;
import
autoAdd
from
"../../add/comp/autoAdd.vue"
;
import
{
selectParam
,
setParam
}
from
"@/api/udp"
;
import
{
import
{
monitorEquiplist
,
monitorEquiplist
,
monitorEquipbatchDelete
,
monitorEquipbatchDelete
,
...
@@ -221,6 +222,7 @@ export default {
...
@@ -221,6 +222,7 @@ export default {
curInfo
:
{},
curInfo
:
{},
open
:
false
,
open
:
false
,
openSetting
:
false
,
openSetting
:
false
,
rowData
:
{},
};
};
},
},
created
()
{
created
()
{
...
@@ -237,7 +239,27 @@ export default {
...
@@ -237,7 +239,27 @@ export default {
this
.
getAllWay
();
this
.
getAllWay
();
},
},
methods
:
{
methods
:
{
handleSetting
()
{
async
handleUpdate
(
e
)
{
if
(
e
==
false
)
{
this
.
openSetting
=
false
;
return
;
}
console
.
log
(
e
);
let
data
=
{};
return
;
let
res
=
await
setParam
().
then
((
res
)
=>
{
if
(
res
.
code
==
200
)
{
successAlert
(
"保存成功"
);
this
.
openSetting
=
false
;
}
});
},
async
handleSelectParam
(
row
)
{
let
res
=
selectParam
({
equipId
:
row
.
id
});
},
handleSetting
(
row
)
{
this
.
rowData
=
row
;
this
.
handleSelectParam
(
row
);
this
.
openSetting
=
true
;
this
.
openSetting
=
true
;
},
},
handleAutomatic
()
{
handleAutomatic
()
{
...
...
src/views/setting/statistics/index.vue
View file @
e613cdee
...
@@ -61,14 +61,14 @@ export default {
...
@@ -61,14 +61,14 @@ export default {
label
:
"监测设备"
,
label
:
"监测设备"
,
key
:
"3"
,
key
:
"3"
,
},
},
{
//
{
label
:
"漏缆"
,
//
label: "漏缆",
key
:
"4"
,
//
key: "4",
},
//
},
{
//
{
label
:
"天馈线"
,
//
label: "天馈线",
key
:
"5"
,
//
key: "5",
}
//
}
],
],
tableData2
:
[],
tableData2
:
[],
tableData
:
[],
tableData
:
[],
...
...
src/views/system/menu/index.vue
0 → 100644
View file @
e613cdee
This diff is collapsed.
Click to expand it.
src/views/system/role/authUser.vue
0 → 100644
View file @
e613cdee
<
template
>
<div
class=
"app-container"
>
<el-form
:model=
"queryParams"
ref=
"queryForm"
size=
"small"
:inline=
"true"
v-show=
"showSearch"
>
<el-form-item
label=
"用户名称"
prop=
"userName"
>
<el-input
v-model=
"queryParams.userName"
placeholder=
"请输入用户名称"
clearable
style=
"width: 240px"
@
keyup
.
enter
.
native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"手机号码"
prop=
"phonenumber"
>
<el-input
v-model=
"queryParams.phonenumber"
placeholder=
"请输入手机号码"
clearable
style=
"width: 240px"
@
keyup
.
enter
.
native=
"handleQuery"
/>
</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-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=
"openSelectUser"
v-hasPermi=
"['system:role:add']"
>
添加用户
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"danger"
plain
icon=
"el-icon-circle-close"
size=
"mini"
:disabled=
"multiple"
@
click=
"cancelAuthUserAll"
v-hasPermi=
"['system:role:remove']"
>
批量取消授权
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"warning"
plain
icon=
"el-icon-close"
size=
"mini"
@
click=
"handleClose"
>
关闭
</el-button>
</el-col>
<right-toolbar
:showSearch
.
sync=
"showSearch"
@
queryTable=
"getList"
></right-toolbar>
</el-row>
<el-table
v-loading=
"loading"
:data=
"userList"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
align=
"center"
/>
<el-table-column
label=
"用户名称"
prop=
"userName"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"用户昵称"
prop=
"nickName"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"邮箱"
prop=
"email"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"手机"
prop=
"phonenumber"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"状态"
align=
"center"
prop=
"status"
>
<template
slot-scope=
"scope"
>
<dict-tag
:options=
"dict.type.sys_normal_disable"
:value=
"scope.row.status"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
width=
"180"
>
<
template
slot-scope=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
createTime
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-circle-close"
@
click=
"cancelAuthUser(scope.row)"
v-hasPermi=
"['system:role:remove']"
>
取消授权
</el-button>
</
template
>
</el-table-column>
</el-table>
<pagination
v-show=
"total>0"
:total=
"total"
:page
.
sync=
"queryParams.pageNum"
:limit
.
sync=
"queryParams.pageSize"
@
pagination=
"getList"
/>
<select-user
ref=
"select"
:roleId=
"queryParams.roleId"
@
ok=
"handleQuery"
/>
</div>
</template>
<
script
>
import
{
allocatedUserList
,
authUserCancel
,
authUserCancelAll
}
from
"@/api/system/role"
;
import
selectUser
from
"./selectUser"
;
export
default
{
name
:
"AuthUser"
,
dicts
:
[
'sys_normal_disable'
],
components
:
{
selectUser
},
data
()
{
return
{
// 遮罩层
loading
:
true
,
// 选中用户组
userIds
:
[],
// 非多个禁用
multiple
:
true
,
// 显示搜索条件
showSearch
:
true
,
// 总条数
total
:
0
,
// 用户表格数据
userList
:
[],
// 查询参数
queryParams
:
{
pageNum
:
1
,
pageSize
:
10
,
roleId
:
undefined
,
userName
:
undefined
,
phonenumber
:
undefined
}
};
},
created
()
{
const
roleId
=
this
.
$route
.
params
&&
this
.
$route
.
params
.
roleId
;
if
(
roleId
)
{
this
.
queryParams
.
roleId
=
roleId
;
this
.
getList
();
}
},
methods
:
{
/** 查询授权用户列表 */
getList
()
{
this
.
loading
=
true
;
allocatedUserList
(
this
.
queryParams
).
then
(
response
=>
{
this
.
userList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
}
);
},
// 返回按钮
handleClose
()
{
const
obj
=
{
path
:
"/system/role"
};
this
.
$tab
.
closeOpenPage
(
obj
);
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
();
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"queryForm"
);
this
.
handleQuery
();
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
userIds
=
selection
.
map
(
item
=>
item
.
userId
)
this
.
multiple
=
!
selection
.
length
},
/** 打开授权用户表弹窗 */
openSelectUser
()
{
this
.
$refs
.
select
.
show
();
},
/** 取消授权按钮操作 */
cancelAuthUser
(
row
)
{
const
roleId
=
this
.
queryParams
.
roleId
;
this
.
$modal
.
confirm
(
'确认要取消该用户"'
+
row
.
userName
+
'"角色吗?'
).
then
(
function
()
{
return
authUserCancel
({
userId
:
row
.
userId
,
roleId
:
roleId
});
}).
then
(()
=>
{
this
.
getList
();
this
.
$modal
.
msgSuccess
(
"取消授权成功"
);
}).
catch
(()
=>
{});
},
/** 批量取消授权按钮操作 */
cancelAuthUserAll
(
row
)
{
const
roleId
=
this
.
queryParams
.
roleId
;
const
userIds
=
this
.
userIds
.
join
(
","
);
this
.
$modal
.
confirm
(
'是否取消选中用户授权数据项?'
).
then
(
function
()
{
return
authUserCancelAll
({
roleId
:
roleId
,
userIds
:
userIds
});
}).
then
(()
=>
{
this
.
getList
();
this
.
$modal
.
msgSuccess
(
"取消授权成功"
);
}).
catch
(()
=>
{});
}
}
};
</
script
>
\ No newline at end of file
src/views/system/role/index.vue
0 → 100644
View file @
e613cdee
This diff is collapsed.
Click to expand it.
src/views/system/role/selectUser.vue
0 → 100644
View file @
e613cdee
<
template
>
<!-- 授权用户 -->
<el-dialog
title=
"选择用户"
:visible
.
sync=
"visible"
width=
"800px"
top=
"5vh"
append-to-body
>
<el-form
:model=
"queryParams"
ref=
"queryForm"
size=
"small"
:inline=
"true"
>
<el-form-item
label=
"用户名称"
prop=
"userName"
>
<el-input
v-model=
"queryParams.userName"
placeholder=
"请输入用户名称"
clearable
@
keyup
.
enter
.
native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"手机号码"
prop=
"phonenumber"
>
<el-input
v-model=
"queryParams.phonenumber"
placeholder=
"请输入手机号码"
clearable
@
keyup
.
enter
.
native=
"handleQuery"
/>
</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-form-item>
</el-form>
<el-row>
<el-table
@
row-click=
"clickRow"
ref=
"table"
:data=
"userList"
@
selection-change=
"handleSelectionChange"
height=
"260px"
>
<el-table-column
type=
"selection"
width=
"55"
></el-table-column>
<el-table-column
label=
"用户名称"
prop=
"userName"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"用户昵称"
prop=
"nickName"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"邮箱"
prop=
"email"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"手机"
prop=
"phonenumber"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"状态"
align=
"center"
prop=
"status"
>
<template
slot-scope=
"scope"
>
<dict-tag
:options=
"dict.type.sys_normal_disable"
:value=
"scope.row.status"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
width=
"180"
>
<
template
slot-scope=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
createTime
)
}}
</span>
</
template
>
</el-table-column>
</el-table>
<pagination
v-show=
"total>0"
:total=
"total"
:page
.
sync=
"queryParams.pageNum"
:limit
.
sync=
"queryParams.pageSize"
@
pagination=
"getList"
/>
</el-row>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"handleSelectUser"
>
确 定
</el-button>
<el-button
@
click=
"visible = false"
>
取 消
</el-button>
</div>
</el-dialog>
</template>
<
script
>
import
{
unallocatedUserList
,
authUserSelectAll
}
from
"@/api/system/role"
;
export
default
{
dicts
:
[
'sys_normal_disable'
],
props
:
{
// 角色编号
roleId
:
{
type
:
[
Number
,
String
]
}
},
data
()
{
return
{
// 遮罩层
visible
:
false
,
// 选中数组值
userIds
:
[],
// 总条数
total
:
0
,
// 未授权用户数据
userList
:
[],
// 查询参数
queryParams
:
{
pageNum
:
1
,
pageSize
:
10
,
roleId
:
undefined
,
userName
:
undefined
,
phonenumber
:
undefined
}
};
},
methods
:
{
// 显示弹框
show
()
{
this
.
queryParams
.
roleId
=
this
.
roleId
;
this
.
getList
();
this
.
visible
=
true
;
},
clickRow
(
row
)
{
this
.
$refs
.
table
.
toggleRowSelection
(
row
);
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
userIds
=
selection
.
map
(
item
=>
item
.
userId
);
},
// 查询表数据
getList
()
{
unallocatedUserList
(
this
.
queryParams
).
then
(
res
=>
{
this
.
userList
=
res
.
rows
;
this
.
total
=
res
.
total
;
});
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
();
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"queryForm"
);
this
.
handleQuery
();
},
/** 选择授权用户操作 */
handleSelectUser
()
{
const
roleId
=
this
.
queryParams
.
roleId
;
const
userIds
=
this
.
userIds
.
join
(
","
);
if
(
userIds
==
""
)
{
this
.
$modal
.
msgError
(
"请选择要分配的用户"
);
return
;
}
authUserSelectAll
({
roleId
:
roleId
,
userIds
:
userIds
}).
then
(
res
=>
{
this
.
$modal
.
msgSuccess
(
res
.
msg
);
if
(
res
.
code
===
200
)
{
this
.
visible
=
false
;
this
.
$emit
(
"ok"
);
}
});
}
}
};
</
script
>
src/views/system/user/authRole.vue
0 → 100644
View file @
e613cdee
<
template
>
<div
class=
"app-container"
>
<h4
class=
"form-header h4"
>
基本信息
</h4>
<el-form
ref=
"form"
:model=
"form"
label-width=
"80px"
>
<el-row>
<el-col
:span=
"8"
:offset=
"2"
>
<el-form-item
label=
"用户昵称"
prop=
"nickName"
>
<el-input
v-model=
"form.nickName"
disabled
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
:offset=
"2"
>
<el-form-item
label=
"登录账号"
prop=
"userName"
>
<el-input
v-model=
"form.userName"
disabled
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<h4
class=
"form-header h4"
>
角色信息
</h4>
<el-table
v-loading=
"loading"
:row-key=
"getRowKey"
@
row-click=
"clickRow"
ref=
"table"
@
selection-change=
"handleSelectionChange"
:data=
"roles.slice((pageNum-1)*pageSize,pageNum*pageSize)"
>
<el-table-column
label=
"序号"
type=
"index"
align=
"center"
>
<template
slot-scope=
"scope"
>
<span>
{{
(
pageNum
-
1
)
*
pageSize
+
scope
.
$index
+
1
}}
</span>
</
template
>
</el-table-column>
<el-table-column
type=
"selection"
:reserve-selection=
"true"
width=
"55"
></el-table-column>
<el-table-column
label=
"角色编号"
align=
"center"
prop=
"roleId"
/>
<el-table-column
label=
"角色名称"
align=
"center"
prop=
"roleName"
/>
<el-table-column
label=
"权限字符"
align=
"center"
prop=
"roleKey"
/>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
width=
"180"
>
<
template
slot-scope=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
createTime
)
}}
</span>
</
template
>
</el-table-column>
</el-table>
<pagination
v-show=
"total>0"
:total=
"total"
:page
.
sync=
"pageNum"
:limit
.
sync=
"pageSize"
/>
<el-form
label-width=
"100px"
>
<el-form-item
style=
"text-align: center;margin-left:-120px;margin-top:30px;"
>
<el-button
type=
"primary"
@
click=
"submitForm()"
>
提交
</el-button>
<el-button
@
click=
"close()"
>
返回
</el-button>
</el-form-item>
</el-form>
</div>
</template>
<
script
>
import
{
getAuthRole
,
updateAuthRole
}
from
"@/api/system/user"
;
export
default
{
name
:
"AuthRole"
,
data
()
{
return
{
// 遮罩层
loading
:
true
,
// 分页信息
total
:
0
,
pageNum
:
1
,
pageSize
:
10
,
// 选中角色编号
roleIds
:[],
// 角色信息
roles
:
[],
// 用户信息
form
:
{}
};
},
created
()
{
const
userId
=
this
.
$route
.
params
&&
this
.
$route
.
params
.
userId
;
if
(
userId
)
{
this
.
loading
=
true
;
getAuthRole
(
userId
).
then
((
response
)
=>
{
this
.
form
=
response
.
user
;
this
.
roles
=
response
.
roles
;
this
.
total
=
this
.
roles
.
length
;
this
.
$nextTick
(()
=>
{
this
.
roles
.
forEach
((
row
)
=>
{
if
(
row
.
flag
)
{
this
.
$refs
.
table
.
toggleRowSelection
(
row
);
}
});
});
this
.
loading
=
false
;
});
}
},
methods
:
{
/** 单击选中行数据 */
clickRow
(
row
)
{
this
.
$refs
.
table
.
toggleRowSelection
(
row
);
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
roleIds
=
selection
.
map
((
item
)
=>
item
.
roleId
);
},
// 保存选中的数据编号
getRowKey
(
row
)
{
return
row
.
roleId
;
},
/** 提交按钮 */
submitForm
()
{
const
userId
=
this
.
form
.
userId
;
const
roleIds
=
this
.
roleIds
.
join
(
","
);
updateAuthRole
({
userId
:
userId
,
roleIds
:
roleIds
}).
then
((
response
)
=>
{
this
.
$modal
.
msgSuccess
(
"授权成功"
);
this
.
close
();
});
},
/** 关闭按钮 */
close
()
{
const
obj
=
{
path
:
"/system/user"
};
this
.
$tab
.
closeOpenPage
(
obj
);
},
},
};
</
script
>
\ No newline at end of file
src/views/system/user/index.vue
0 → 100644
View file @
e613cdee
This diff is collapsed.
Click to expand it.
src/views/system/user/profile/index.vue
0 → 100644
View file @
e613cdee
<
template
>
<div
class=
"app-container"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"6"
:xs=
"24"
>
<el-card
class=
"box-card"
>
<div
slot=
"header"
class=
"clearfix"
>
<span>
个人信息
</span>
</div>
<div>
<div
class=
"text-center"
>
<userAvatar
/>
</div>
<ul
class=
"list-group list-group-striped"
>
<li
class=
"list-group-item"
>
<svg-icon
icon-class=
"user"
/>
用户名称
<div
class=
"pull-right"
>
{{
user
.
userName
}}
</div>
</li>
<li
class=
"list-group-item"
>
<svg-icon
icon-class=
"phone"
/>
手机号码
<div
class=
"pull-right"
>
{{
user
.
phonenumber
}}
</div>
</li>
<li
class=
"list-group-item"
>
<svg-icon
icon-class=
"email"
/>
用户邮箱
<div
class=
"pull-right"
>
{{
user
.
email
}}
</div>
</li>
<li
class=
"list-group-item"
>
<svg-icon
icon-class=
"tree"
/>
所属部门
<div
class=
"pull-right"
v-if=
"user.dept"
>
{{
user
.
dept
.
deptName
}}
/
{{
postGroup
}}
</div>
</li>
<li
class=
"list-group-item"
>
<svg-icon
icon-class=
"peoples"
/>
所属角色
<div
class=
"pull-right"
>
{{
roleGroup
}}
</div>
</li>
<li
class=
"list-group-item"
>
<svg-icon
icon-class=
"date"
/>
创建日期
<div
class=
"pull-right"
>
{{
user
.
createTime
}}
</div>
</li>
</ul>
</div>
</el-card>
</el-col>
<el-col
:span=
"18"
:xs=
"24"
>
<el-card>
<div
slot=
"header"
class=
"clearfix"
>
<span>
基本资料
</span>
</div>
<el-tabs
v-model=
"activeTab"
>
<el-tab-pane
label=
"基本资料"
name=
"userinfo"
>
<userInfo
:user=
"user"
/>
</el-tab-pane>
<el-tab-pane
label=
"修改密码"
name=
"resetPwd"
>
<resetPwd
/>
</el-tab-pane>
</el-tabs>
</el-card>
</el-col>
</el-row>
</div>
</
template
>
<
script
>
import
userAvatar
from
"./userAvatar"
;
import
userInfo
from
"./userInfo"
;
import
resetPwd
from
"./resetPwd"
;
import
{
getUserProfile
}
from
"@/api/system/user"
;
export
default
{
name
:
"Profile"
,
components
:
{
userAvatar
,
userInfo
,
resetPwd
},
data
()
{
return
{
user
:
{},
roleGroup
:
{},
postGroup
:
{},
activeTab
:
"userinfo"
};
},
created
()
{
this
.
getUser
();
},
methods
:
{
getUser
()
{
getUserProfile
().
then
(
response
=>
{
this
.
user
=
response
.
data
;
this
.
roleGroup
=
response
.
roleGroup
;
this
.
postGroup
=
response
.
postGroup
;
});
}
}
};
</
script
>
src/views/system/user/profile/resetPwd.vue
0 → 100644
View file @
e613cdee
<
template
>
<el-form
ref=
"form"
:model=
"user"
:rules=
"rules"
label-width=
"80px"
>
<el-form-item
label=
"旧密码"
prop=
"oldPassword"
>
<el-input
v-model=
"user.oldPassword"
placeholder=
"请输入旧密码"
type=
"password"
show-password
/>
</el-form-item>
<el-form-item
label=
"新密码"
prop=
"newPassword"
>
<el-input
v-model=
"user.newPassword"
placeholder=
"请输入新密码"
type=
"password"
show-password
/>
</el-form-item>
<el-form-item
label=
"确认密码"
prop=
"confirmPassword"
>
<el-input
v-model=
"user.confirmPassword"
placeholder=
"请确认新密码"
type=
"password"
show-password
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
size=
"mini"
@
click=
"submit"
>
保存
</el-button>
<el-button
type=
"danger"
size=
"mini"
@
click=
"close"
>
关闭
</el-button>
</el-form-item>
</el-form>
</
template
>
<
script
>
import
{
updateUserPwd
}
from
"@/api/system/user"
;
export
default
{
data
()
{
const
equalToPassword
=
(
rule
,
value
,
callback
)
=>
{
if
(
this
.
user
.
newPassword
!==
value
)
{
callback
(
new
Error
(
"两次输入的密码不一致"
));
}
else
{
callback
();
}
};
return
{
user
:
{
oldPassword
:
undefined
,
newPassword
:
undefined
,
confirmPassword
:
undefined
},
// 表单校验
rules
:
{
oldPassword
:
[
{
required
:
true
,
message
:
"旧密码不能为空"
,
trigger
:
"blur"
}
],
newPassword
:
[
{
required
:
true
,
message
:
"新密码不能为空"
,
trigger
:
"blur"
},
{
min
:
6
,
max
:
20
,
message
:
"长度在 6 到 20 个字符"
,
trigger
:
"blur"
}
],
confirmPassword
:
[
{
required
:
true
,
message
:
"确认密码不能为空"
,
trigger
:
"blur"
},
{
required
:
true
,
validator
:
equalToPassword
,
trigger
:
"blur"
}
]
}
};
},
methods
:
{
submit
()
{
this
.
$refs
[
"form"
].
validate
(
valid
=>
{
if
(
valid
)
{
updateUserPwd
(
this
.
user
.
oldPassword
,
this
.
user
.
newPassword
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"修改成功"
);
});
}
});
},
close
()
{
this
.
$tab
.
closePage
();
}
}
};
</
script
>
src/views/system/user/profile/userAvatar.vue
0 → 100644
View file @
e613cdee
<
template
>
<div>
<div
class=
"user-info-head"
@
click=
"editCropper()"
><img
v-bind:src=
"options.img"
title=
"点击上传头像"
class=
"img-circle img-lg"
/></div>
<el-dialog
:title=
"title"
:visible
.
sync=
"open"
width=
"800px"
append-to-body
@
opened=
"modalOpened"
@
close=
"closeDialog"
>
<el-row>
<el-col
:xs=
"24"
:md=
"12"
:style=
"
{height: '350px'}">
<vue-cropper
ref=
"cropper"
:img=
"options.img"
:info=
"true"
:autoCrop=
"options.autoCrop"
:autoCropWidth=
"options.autoCropWidth"
:autoCropHeight=
"options.autoCropHeight"
:fixedBox=
"options.fixedBox"
:outputType=
"options.outputType"
@
realTime=
"realTime"
v-if=
"visible"
/>
</el-col>
<el-col
:xs=
"24"
:md=
"12"
:style=
"
{height: '350px'}">
<div
class=
"avatar-upload-preview"
>
<img
:src=
"previews.url"
:style=
"previews.img"
/>
</div>
</el-col>
</el-row>
<br
/>
<el-row>
<el-col
:lg=
"2"
:sm=
"3"
:xs=
"3"
>
<el-upload
action=
"#"
:http-request=
"requestUpload"
:show-file-list=
"false"
:before-upload=
"beforeUpload"
>
<el-button
size=
"small"
>
选择
<i
class=
"el-icon-upload el-icon--right"
></i>
</el-button>
</el-upload>
</el-col>
<el-col
:lg=
"
{span: 1, offset: 2}" :sm="2" :xs="2">
<el-button
icon=
"el-icon-plus"
size=
"small"
@
click=
"changeScale(1)"
></el-button>
</el-col>
<el-col
:lg=
"
{span: 1, offset: 1}" :sm="2" :xs="2">
<el-button
icon=
"el-icon-minus"
size=
"small"
@
click=
"changeScale(-1)"
></el-button>
</el-col>
<el-col
:lg=
"
{span: 1, offset: 1}" :sm="2" :xs="2">
<el-button
icon=
"el-icon-refresh-left"
size=
"small"
@
click=
"rotateLeft()"
></el-button>
</el-col>
<el-col
:lg=
"
{span: 1, offset: 1}" :sm="2" :xs="2">
<el-button
icon=
"el-icon-refresh-right"
size=
"small"
@
click=
"rotateRight()"
></el-button>
</el-col>
<el-col
:lg=
"
{span: 2, offset: 6}" :sm="2" :xs="2">
<el-button
type=
"primary"
size=
"small"
@
click=
"uploadImg()"
>
提 交
</el-button>
</el-col>
</el-row>
</el-dialog>
</div>
</
template
>
<
script
>
import
store
from
"@/store"
;
import
{
VueCropper
}
from
"vue-cropper"
;
import
{
uploadAvatar
}
from
"@/api/system/user"
;
import
{
debounce
}
from
'@/utils'
export
default
{
components
:
{
VueCropper
},
data
()
{
return
{
// 是否显示弹出层
open
:
false
,
// 是否显示cropper
visible
:
false
,
// 弹出层标题
title
:
"修改头像"
,
options
:
{
img
:
store
.
getters
.
avatar
,
//裁剪图片的地址
autoCrop
:
true
,
// 是否默认生成截图框
autoCropWidth
:
200
,
// 默认生成截图框宽度
autoCropHeight
:
200
,
// 默认生成截图框高度
fixedBox
:
true
,
// 固定截图框大小 不允许改变
outputType
:
"png"
,
// 默认生成截图为PNG格式
filename
:
'avatar'
// 文件名称
},
previews
:
{},
resizeHandler
:
null
};
},
methods
:
{
// 编辑头像
editCropper
()
{
this
.
open
=
true
;
},
// 打开弹出层结束时的回调
modalOpened
()
{
this
.
visible
=
true
;
if
(
!
this
.
resizeHandler
)
{
this
.
resizeHandler
=
debounce
(()
=>
{
this
.
refresh
()
},
100
)
}
window
.
addEventListener
(
"resize"
,
this
.
resizeHandler
)
},
// 刷新组件
refresh
()
{
this
.
$refs
.
cropper
.
refresh
();
},
// 覆盖默认的上传行为
requestUpload
()
{
},
// 向左旋转
rotateLeft
()
{
this
.
$refs
.
cropper
.
rotateLeft
();
},
// 向右旋转
rotateRight
()
{
this
.
$refs
.
cropper
.
rotateRight
();
},
// 图片缩放
changeScale
(
num
)
{
num
=
num
||
1
;
this
.
$refs
.
cropper
.
changeScale
(
num
);
},
// 上传预处理
beforeUpload
(
file
)
{
if
(
file
.
type
.
indexOf
(
"image/"
)
==
-
1
)
{
this
.
$modal
.
msgError
(
"文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。"
);
}
else
{
const
reader
=
new
FileReader
();
reader
.
readAsDataURL
(
file
);
reader
.
onload
=
()
=>
{
this
.
options
.
img
=
reader
.
result
;
this
.
options
.
filename
=
file
.
name
;
};
}
},
// 上传图片
uploadImg
()
{
this
.
$refs
.
cropper
.
getCropBlob
(
data
=>
{
let
formData
=
new
FormData
();
formData
.
append
(
"avatarfile"
,
data
,
this
.
options
.
filename
);
uploadAvatar
(
formData
).
then
(
response
=>
{
this
.
open
=
false
;
this
.
options
.
img
=
process
.
env
.
VUE_APP_BASE_API
+
response
.
imgUrl
;
store
.
commit
(
'SET_AVATAR'
,
this
.
options
.
img
);
this
.
$modal
.
msgSuccess
(
"修改成功"
);
this
.
visible
=
false
;
});
});
},
// 实时预览
realTime
(
data
)
{
this
.
previews
=
data
;
},
// 关闭窗口
closeDialog
()
{
this
.
options
.
img
=
store
.
getters
.
avatar
this
.
visible
=
false
;
window
.
removeEventListener
(
"resize"
,
this
.
resizeHandler
)
}
}
};
</
script
>
<
style
scoped
lang=
"scss"
>
.user-info-head
{
position
:
relative
;
display
:
inline-block
;
height
:
120px
;
}
.user-info-head
:hover:after
{
content
:
'+'
;
position
:
absolute
;
left
:
0
;
right
:
0
;
top
:
0
;
bottom
:
0
;
color
:
#eee
;
background
:
rgba
(
0
,
0
,
0
,
0
.5
);
font-size
:
24px
;
font-style
:
normal
;
-webkit-font-smoothing
:
antialiased
;
-moz-osx-font-smoothing
:
grayscale
;
cursor
:
pointer
;
line-height
:
110px
;
border-radius
:
50%
;
}
</
style
>
src/views/system/user/profile/userInfo.vue
0 → 100644
View file @
e613cdee
<
template
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"80px"
>
<el-form-item
label=
"用户昵称"
prop=
"nickName"
>
<el-input
v-model=
"form.nickName"
maxlength=
"30"
/>
</el-form-item>
<el-form-item
label=
"手机号码"
prop=
"phonenumber"
>
<el-input
v-model=
"form.phonenumber"
maxlength=
"11"
/>
</el-form-item>
<el-form-item
label=
"邮箱"
prop=
"email"
>
<el-input
v-model=
"form.email"
maxlength=
"50"
/>
</el-form-item>
<el-form-item
label=
"性别"
>
<el-radio-group
v-model=
"form.sex"
>
<el-radio
label=
"0"
>
男
</el-radio>
<el-radio
label=
"1"
>
女
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
size=
"mini"
@
click=
"submit"
>
保存
</el-button>
<el-button
type=
"danger"
size=
"mini"
@
click=
"close"
>
关闭
</el-button>
</el-form-item>
</el-form>
</
template
>
<
script
>
import
{
updateUserProfile
}
from
"@/api/system/user"
;
export
default
{
props
:
{
user
:
{
type
:
Object
}
},
data
()
{
return
{
form
:
{},
// 表单校验
rules
:
{
nickName
:
[
{
required
:
true
,
message
:
"用户昵称不能为空"
,
trigger
:
"blur"
}
],
email
:
[
{
required
:
true
,
message
:
"邮箱地址不能为空"
,
trigger
:
"blur"
},
{
type
:
"email"
,
message
:
"请输入正确的邮箱地址"
,
trigger
:
[
"blur"
,
"change"
]
}
],
phonenumber
:
[
{
required
:
true
,
message
:
"手机号码不能为空"
,
trigger
:
"blur"
},
{
pattern
:
/^1
[
3|4|5|6|7|8|9
][
0-9
]\d{8}
$/
,
message
:
"请输入正确的手机号码"
,
trigger
:
"blur"
}
]
}
};
},
watch
:
{
user
:
{
handler
(
user
)
{
if
(
user
)
{
this
.
form
=
{
nickName
:
user
.
nickName
,
phonenumber
:
user
.
phonenumber
,
email
:
user
.
email
,
sex
:
user
.
sex
};
}
},
immediate
:
true
}
},
methods
:
{
submit
()
{
this
.
$refs
[
"form"
].
validate
(
valid
=>
{
if
(
valid
)
{
updateUserProfile
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"修改成功"
);
this
.
user
.
phonenumber
=
this
.
form
.
phonenumber
;
this
.
user
.
email
=
this
.
form
.
email
;
});
}
});
},
close
()
{
this
.
$tab
.
closePage
();
}
}
};
</
script
>
vue.config.js
View file @
e613cdee
...
@@ -9,7 +9,7 @@ function resolve(dir) {
...
@@ -9,7 +9,7 @@ function resolve(dir) {
const
name
=
defaultSettings
.
title
||
'漏缆故障定位监测系统'
// page title
const
name
=
defaultSettings
.
title
||
'漏缆故障定位监测系统'
// page title
const
port
=
process
.
env
.
port
||
process
.
env
.
npm_config_port
||
8886
// dev port
const
port
=
process
.
env
.
port
||
process
.
env
.
npm_config_port
||
8886
// dev port
const
href
=
'http://101.126.159.207'
const
href
=
'http://101.126.159.207'
// const href = 'http://192.168.0.1
21
'
// const href = 'http://192.168.0.1
18
'
const
rewriteDefaultConfig
=
{
const
rewriteDefaultConfig
=
{
changeOrigin
:
true
,
changeOrigin
:
true
,
...
...
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