Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
template_vue
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
杨硕
template_vue
Commits
76128e0e
Commit
76128e0e
authored
Jul 20, 2023
by
杨硕
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化中间页面权限问题
parent
c0e36fad
Changes
25
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
981 additions
and
503 deletions
+981
-503
index.html
public/index.html
+15
-15
liulanqi_logo.png
public/liulanqi_logo.png
+0
-0
errorLog.js
src/api/monitor/errorLog.js
+3
-2
loginInfo.js
src/api/monitor/loginInfo.js
+13
-13
type.js
src/api/system/dict/type.js
+1
-1
denglu_logo@2x.png
src/assets/image/denglu_logo@2x.png
+0
-0
index.vue
src/components/coolbutton/index.vue
+27
-12
Logo.vue
src/layout/components/Sidebar/Logo.vue
+3
-3
SidebarItem.vue
src/layout/components/Sidebar/SidebarItem.vue
+2
-2
index.vue
src/layout/components/Sidebar/index.vue
+1
-1
header.vue
src/layout/components/header.vue
+38
-30
permission.js
src/store/modules/permission.js
+8
-3
user.js
src/store/modules/user.js
+3
-2
index.vue
src/views/equipment/index.vue
+15
-0
home.vue
src/views/home.vue
+18
-10
login.vue
src/views/login/login.vue
+20
-20
index.vue
src/views/monitor/errorLog/index.vue
+199
-63
index.vue
src/views/monitor/loginInfo/index.vue
+168
-51
index.vue
src/views/monitor/operLog/index.vue
+198
-64
reSetPsw.vue
src/views/reSetPsw.vue
+25
-25
index.vue
src/views/system/dept/index.vue
+20
-9
data.vue
src/views/system/dict/data.vue
+15
-20
index.vue
src/views/system/dict/index.vue
+38
-29
index.vue
src/views/system/role/index.vue
+62
-42
index.vue
src/views/system/user/index.vue
+89
-86
No files found.
public/index.html
View file @
76128e0e
<!DOCTYPE html>
<html>
<head>
<meta
charset=
"utf-8"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge,chrome=1"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
>
<link
rel=
"icon"
href=
"<%= BASE_URL %>home
_logo.png"
>
<link
rel=
"stylesheet"
href=
"//at.alicdn.com/t/font_2011217_f70ptj9y4oc.css"
>
<title><
%=
webpackConfig
.
name
%
></title>
</head>
<body>
<noscript>
<strong>
We're sorry but
<
%=
webpackConfig
.
name
%
>
doesn't work properly without JavaScript enabled. Please enable it to continue.
</strong>
</noscript>
<div
id=
"app"
></div>
<!-- built files will be auto injected -->
</body>
<head>
<meta
charset=
"utf-8"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge,chrome=1"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
>
<link
rel=
"icon"
href=
"<%= BASE_URL %>liulanqi
_logo.png"
>
<link
rel=
"stylesheet"
href=
"//at.alicdn.com/t/font_2011217_f70ptj9y4oc.css"
>
<title><
%=
webpackConfig
.
name
%
></title>
</head>
<body>
<noscript>
<strong>
We're sorry but
<
%=
webpackConfig
.
name
%
>
doesn't work properly without JavaScript enabled. Please enable it to continue.
</strong>
</noscript>
<div
id=
"app"
></div>
<!-- built files will be auto injected -->
</body>
</html>
public/liulanqi_logo.png
0 → 100644
View file @
76128e0e
1.73 KB
src/api/monitor/errorLog.js
View file @
76128e0e
...
...
@@ -24,10 +24,11 @@ export function delErrLog(data) {
}
// 清空异常日志
export
function
cleanErrLog
()
{
export
function
cleanErrLog
(
query
)
{
return
request
({
url
:
'/monitor/errorLog/clean'
,
method
:
'delete'
method
:
'delete'
,
params
:
query
})
}
...
...
src/api/monitor/loginInfo.js
View file @
76128e0e
import
request
from
'@/utils/request'
import
Qs
from
'qs'
// 查询
登录
日志列表
// 查询
操作
日志列表
export
function
list
(
query
)
{
return
request
({
url
:
'/monitor/
loginInfo/querySysLogin
ListByPagination'
,
url
:
'/monitor/
operLog/queryOperLog
ListByPagination'
,
method
:
'get'
,
params
:
query
})
}
// 删除
登录
日志
export
function
del
Logininfo
(
data
)
{
// 删除
操作
日志
export
function
del
OperLog
(
data
)
{
// data = Qs.stringify(data)
return
request
({
url
:
'/monitor/
loginInfo
/delete'
,
url
:
'/monitor/
operLog
/delete'
,
method
:
'post'
,
data
,
headers
:
{
...
...
@@ -23,21 +23,21 @@ export function delLogininfo(data) {
})
}
// 清空
登录
日志
export
function
clean
Logininfo
(
)
{
// 清空
操作
日志
export
function
clean
OperLog
(
query
)
{
return
request
({
url
:
'/monitor/loginInfo/clean'
,
method
:
'delete'
url
:
'/monitor/operLog/clean'
,
method
:
'delete'
,
params
:
query
})
}
// 导出
登录
日志
export
function
export
Logininfo
(
query
)
{
// 导出
操作
日志
export
function
export
OperLog
(
query
)
{
return
request
({
url
:
'/monitor/
loginInfo
/export'
,
url
:
'/monitor/
operLog
/export'
,
method
:
'get'
,
params
:
query
,
responseType
:
'blob'
})
}
src/api/system/dict/type.js
View file @
76128e0e
...
...
@@ -103,7 +103,7 @@ export function exportType(query) {
// 获取字典选择框列表
export
function
selectDictType
(
dictType
)
{
return
request
({
url
:
'/system/dict/
type/optionselect
'
+
dictType
,
url
:
'/system/dict/
data/type/
'
+
dictType
,
method
:
'get'
})
}
src/assets/image/denglu_logo@2x.png
0 → 100644
View file @
76128e0e
4.06 KB
src/components/coolbutton/index.vue
View file @
76128e0e
<
template
>
<el-button
v-if=
"isShow"
:size=
"size"
:type=
"type"
:icon=
"icon"
:disabled=
"disabled"
@
click=
"defaultClick"
>
{{
name
}}
</el-button>
<el-button
v-else
v-hasPermi=
"hasper"
:size=
"size"
:type=
"type"
...
...
@@ -10,8 +19,8 @@
</
template
>
<
script
>
import
{
getInfo
}
from
'@/api/login'
//
import { getInfo } from '@/api/login'
import
store
from
'../../store/index'
export
default
{
name
:
'CoolButton'
,
props
:
{
// 调用该组件时需要传递过来的属性
...
...
@@ -51,16 +60,22 @@ export default {
},
getInfoMessage
()
{
const
data
=
this
.
haspermi
getInfo
().
then
(
res
=>
{
if
(
res
.
data
.
permissions
[
0
]
===
'*:*:*'
)
{
this
.
isShow
=
true
this
.
hasper
=
[]
}
else
{
this
.
hasper
=
data
}
// TODO: clear this log
console
.
log
(
`this.hasper`
,
this
.
hasper
)
})
// getInfo().then(res => {
// if (res.data.permissions[0] === '*:*:*') {
// this.isShow = true
// this.hasper = []
// } else {
// this.isShow = false
// this.hasper = data
// }
// })
if
(
store
.
getters
.
permissions
[
0
]
===
'*:*:*'
)
{
this
.
isShow
=
true
this
.
hasper
=
[]
}
else
{
this
.
isShow
=
false
this
.
hasper
=
data
}
}
}
}
...
...
src/layout/components/Sidebar/Logo.vue
View file @
76128e0e
<
template
>
<div
class=
"sidebar-logo-container"
:class=
"
{'collapse':collapse}">
<transition
name=
"sidebarLogoFade"
>
<router-link
v-if=
"collapse"
key=
"collapse"
class=
"sidebar-logo-link"
to=
"/"
>
<router-link
v-if=
"collapse"
key=
"collapse"
class=
"sidebar-logo-link"
to=
"/
home
"
>
<img
v-if=
"logo"
:src=
"logo"
class=
"sidebar-logo"
>
<h1
v-else
class=
"sidebar-title"
>
{{
title
}}
</h1>
</router-link>
<router-link
v-else
key=
"expand"
class=
"sidebar-logo-link"
to=
"/"
>
<router-link
v-else
key=
"expand"
class=
"sidebar-logo-link"
to=
"/
home
"
>
<img
v-if=
"logo"
:src=
"logo"
class=
"sidebar-logo"
>
<h1
class=
"sidebar-title"
>
{{
title
}}
</h1>
</router-link>
...
...
@@ -25,7 +25,7 @@ export default {
data
()
{
return
{
title
:
'信息化管理系统'
,
logo
:
require
(
'@/assets/image/
logo
.png'
)
logo
:
require
(
'@/assets/image/
denglu_logo@2x
.png'
)
}
}
}
...
...
src/layout/components/Sidebar/SidebarItem.vue
View file @
76128e0e
...
...
@@ -13,8 +13,8 @@
<item
v-if=
"item.meta"
:icon=
"item.meta && item.meta.icon"
:title=
"item.meta.title"
/>
</
template
>
<sidebar-item
v-for=
"
child
in item.children"
:key=
"child.path"
v-for=
"
(child,index)
in item.children"
:key=
"child.path
+index
"
:is-nest=
"true"
:item=
"child"
:base-path=
"resolvePath(child.path)"
...
...
src/layout/components/Sidebar/index.vue
View file @
76128e0e
...
...
@@ -12,7 +12,7 @@
:collapse-transition=
"false"
mode=
"vertical"
>
<sidebar-item
v-for=
"
route in permission_routes"
:key=
"route.path
"
:item=
"route"
:base-path=
"route.path"
/>
<sidebar-item
v-for=
"
(route,index) in permission_routes"
:key=
"route.path+index
"
:item=
"route"
:base-path=
"route.path"
/>
</el-menu>
</el-scrollbar>
</div>
...
...
src/layout/components/header.vue
View file @
76128e0e
...
...
@@ -6,25 +6,25 @@
class=
"hamburger-container"
@
toggleClick=
"toggleSideBar"
/>
<!--
<el-dropdown-->
<!-- class="change-sys"-->
<!-- @command="handleCommand"-->
<!-- >-->
<!--<!–
<span
class=
"el-dropdown-link"
>
–>
-->
<!--<!– 业务中台
<i
class=
"el-icon-arrow-down el-icon--right"
/>
–>
-->
<!--<!–
</span>
–>
-->
<!--
<el-dropdown-menu-->
<!-- slot="dropdown"-->
<!-- >-->
<!--
<el-dropdown-item-->
<!-- v-for="(item) in appList"-->
<!-- :key="item.businessId"-->
<!-- :command="specialTag !== '1' ? item.pcUrl : ''"-->
<!-- >-->
<!--
{{
item
.
system
}}
-->
<!--
</el-dropdown-item>
-->
<!--
</el-dropdown-menu>
-->
<!--
</el-dropdown>
-->
<!--
<el-dropdown-->
<!-- class="change-sys"-->
<!-- @command="handleCommand"-->
<!-- >-->
<!--<!–
<span
class=
"el-dropdown-link"
>
–>
-->
<!--<!– 业务中台
<i
class=
"el-icon-arrow-down el-icon--right"
/>
–>
-->
<!--<!–
</span>
–>
-->
<!--
<el-dropdown-menu-->
<!-- slot="dropdown"-->
<!-- >-->
<!--
<el-dropdown-item-->
<!-- v-for="(item) in appList"-->
<!-- :key="item.businessId"-->
<!-- :command="specialTag !== '1' ? item.pcUrl : ''"-->
<!-- >-->
<!--
{{
item
.
system
}}
-->
<!--
</el-dropdown-item>
-->
<!--
</el-dropdown-menu>
-->
<!--
</el-dropdown>
-->
</div>
<div
class=
"right-menu"
>
<!--
<i
class=
"el-icon-info"
/>
-->
...
...
@@ -36,12 +36,13 @@
<!--
<el-badge
:value=
"200"
:max=
"99"
class=
"item"
>
-->
<!--
<i
class=
"el-icon-message-solid"
/>
-->
<!--
</el-badge>
-->
<span
class=
"username-text"
>
[您好,
{{
userName
}}
]
</span>
<el-dropdown
class=
"avatar-container"
trigger=
"click"
>
<div
class=
"avatar-wrapper"
>
<!--
<img
:src=
"avatar"
class=
"user-avatar"
>
-->
<div
class=
"username-text"
>
[您好,
{{
userName
}}
]
</div>
<!--
<img
:src=
"avatar"
class=
"user-avatar"
>
-->
<i
class=
"el-icon-caret-bottom"
/>
</div>
<el-dropdown-menu
slot=
"dropdown"
class=
"user-dropdown"
>
...
...
@@ -64,6 +65,9 @@ import { mapGetters } from 'vuex'
import
{
queryInAdhibitions
}
from
'@/api/internal.js'
import
Hamburger
from
'@/components/Hamburger'
export
default
{
components
:
{
Hamburger
},
data
()
{
return
{
appList
:
[],
...
...
@@ -71,9 +75,6 @@ export default {
specialTag
:
this
.
$store
.
state
.
user
.
specialTag
}
},
components
:
{
Hamburger
},
computed
:
{
...
mapGetters
([
'sidebar'
,
...
...
@@ -166,7 +167,14 @@ export default {
.breadcrumb-container
{
float
:
left
;
}
.username-text
{
font-size
:
16px
;
//margin-right: 12px;
}
.username-text
:hover
{
cursor
:
pointer
;
//margin-right: 12px;
}
.right-menu
{
float
:
right
;
height
:
100%
;
...
...
@@ -180,9 +188,6 @@ export default {
margin-right
:
50px
;
font-size
:
18px
;
}
.username-text
{
margin-right
:
12px
;
}
.right-menu-item
{
display
:
inline-block
;
padding
:
0
8px
;
...
...
@@ -202,6 +207,9 @@ export default {
.avatar-container
{
margin-right
:
30px
;
.avatar-wrapper
:hover
{
cursor
:
pointer
;
}
.avatar-wrapper
{
position
:
relative
;
height
:
40px
;
...
...
src/store/modules/permission.js
View file @
76128e0e
...
...
@@ -20,14 +20,19 @@ const permission = {
return
new
Promise
(
resolve
=>
{
// TODO: clear this log
console
.
log
(
`menuName`
,
menuName
)
const
menuList
=
menuName
.
menuName
.
split
(
','
)
// TODO: clear this log
console
.
log
(
`menuList`
,
menuList
)
// 向后端请求路由数据
getInfo
().
then
(
res
=>
{
const
newRoute
=
[]
// 根据点击的菜单名匹配对应的菜单
res
.
data
.
menus
.
forEach
(
item
=>
{
if
(
item
.
meta
.
title
===
menuName
.
menuName
)
{
newRoute
.
push
(
item
)
}
menuList
.
forEach
(
menuItem
=>
{
if
(
item
.
meta
.
title
===
menuItem
)
{
newRoute
.
push
(
item
)
}
})
})
const
accessedRoutes
=
filterAsyncRouter
(
newRoute
)
if
(
accessedRoutes
[
0
])
{
...
...
src/store/modules/user.js
View file @
76128e0e
...
...
@@ -13,7 +13,7 @@ const user = {
roles
:
[],
permissions
:
[],
specialTag
:
''
,
menuName
:
''
menuName
:
[]
},
...
...
@@ -87,7 +87,8 @@ const user = {
// TODO: clear this log
console
.
log
(
`menuName-getInfo`
,
menuName
)
commit
(
'SET_MENUNAME'
,
menuName
)
// 存入菜单名
Cookies
.
set
(
'menuname'
,
menuName
)
const
b
=
menuName
.
join
(
','
)
Cookies
.
set
(
'menuname'
,
b
)
resolve
(
menuName
)
})
},
...
...
src/views/equipment/index.vue
0 → 100644
View file @
76128e0e
<
template
>
<div>
设备管理
</div>
</
template
>
<
script
>
export
default
{
name
:
'Index'
}
</
script
>
<
style
scoped
>
</
style
>
src/views/home.vue
View file @
76128e0e
<
template
>
<div
class=
"home"
>
<div
class=
"home-const"
@
click=
"gotoIndex(
'系统管理'
)"
>
<div
class=
"home-const"
@
click=
"gotoIndex(
systemManage
)"
>
<div>
<img
src=
"../assets/image/img5@2x.png"
style=
"width: 100%;height: 392px"
>
</div>
...
...
@@ -9,7 +9,7 @@
<span
class=
"card-title"
>
系统管理
</span>
</div>
</div>
<div
class=
"home-const"
@
click=
"gotoIndex(
'日志管理'
)"
>
<div
class=
"home-const"
@
click=
"gotoIndex(
logManage
)"
>
<div>
<img
src=
"../assets/image/img6@2x.png"
style=
"width: 100%;height: 392px"
>
</div>
...
...
@@ -18,22 +18,22 @@
<span
class=
"card-title"
>
日志管理
</span>
</div>
</div>
<div
class=
"home-const"
@
click=
"gotoIndex(
'消息管理'
)"
>
<div
class=
"home-const"
@
click=
"gotoIndex(
productionManage
)"
>
<div>
<img
src=
"../assets/image/img7@2x.png"
style=
"width: 100%;height: 392px"
>
</div>
<div
class=
"card-bottom"
>
<img
src=
"../assets/image/icon7@2x.png"
style=
"width: 40px;height: 40px;margin: 0 14px 0 20px"
>
<span
class=
"card-title"
>
消息
管理
</span>
<span
class=
"card-title"
>
生产
管理
</span>
</div>
</div>
<div
class=
"home-const"
@
click=
"gotoIndex(
'运维管理'
)"
>
<div
class=
"home-const"
@
click=
"gotoIndex(
equipmentManage
)"
>
<div>
<img
src=
"../assets/image/img8@2x.png"
style=
"width: 100%;height: 392px"
>
</div>
<div
class=
"card-bottom"
>
<img
src=
"../assets/image/icon8@2x.png"
style=
"width: 40px;height: 40px;margin: 0 14px 0 20px"
>
<span
class=
"card-title"
>
运维
管理
</span>
<span
class=
"card-title"
>
设备
管理
</span>
</div>
</div>
</div>
...
...
@@ -46,7 +46,10 @@ export default {
name
:
'Home'
,
data
()
{
return
{
systemManage
:
[
'系统管理'
],
logManage
:
[
'日志管理'
],
productionManage
:
[
'生产管理'
],
equipmentManage
:
[
'设备管理'
,
'工序管理'
]
}
},
created
()
{
...
...
@@ -57,16 +60,21 @@ export default {
this
.
$store
.
dispatch
(
'removeRole'
)
},
gotoIndex
(
menuName
)
{
// TODO: clear this log
console
.
log
(
`menuName`
,
menuName
)
getInfo
().
then
(
res
=>
{
if
(
res
.
data
.
permissions
)
{
// 判断用户是否有点击菜单的权限
var
index
=
0
res
.
data
.
menus
.
forEach
(
item
=>
{
if
(
item
.
meta
.
title
===
menuName
)
{
index
=
index
+
1
}
menuName
.
forEach
(
menuItem
=>
{
if
(
item
.
meta
.
title
===
menuItem
)
{
index
=
index
+
1
}
})
})
if
(
index
>
0
)
{
// this.$message.success('用户有权限')
// 存入点击的菜单名,便于后边路由跳转
this
.
$store
.
dispatch
(
'GetInfoMessage'
,
menuName
).
then
(()
=>
{
this
.
$router
.
push
(
'/welcome'
)
...
...
src/views/login/login.vue
View file @
76128e0e
...
...
@@ -20,20 +20,20 @@
<svg-icon
slot=
"prefix"
icon-class=
"password"
class=
"el-input__icon input-icon"
/>
</el-input>
</el-form-item>
<el-form-item
prop=
"code"
>
<el-input
v-model=
"loginForm.code"
auto-complete=
"off"
placeholder=
"验证码"
style=
"width: 63%"
@
keyup
.
enter
.
native=
"handleLogin"
>
<svg-icon
slot=
"prefix"
icon-class=
"validCode"
class=
"el-input__icon input-icon"
/
>
</el-input
>
<!--
<div
class=
"login-code"
>
<img
:src=
"codeUrl"
@
click=
"getCode"
>
</div>
-->
</el-form-item
>
<!--
<el-form-item
prop=
"code"
>
--
>
<!--
<el-input-->
<!-- v-model="loginForm.code"-->
<!-- auto-complete="off"-->
<!-- placeholder="验证码"-->
<!-- style="width: 63%"-->
<!-- @keyup.enter.native="handleLogin"-->
<!-- >--
>
<!--
<svg-icon
slot=
"prefix"
icon-class=
"validCode"
class=
"el-input__icon input-icon"
/>
--
>
<!--
</el-input>
--
>
<!-- <!–
<div
class=
"login-code"
>
--
>
<!--
<img
:src=
"codeUrl"
@
click=
"getCode"
>
--
>
<!--
</div>
–>
-->
<!--
</el-form-item>
--
>
<el-form-item
style=
"width:80%;margin-bottom: 20px"
>
<el-button
class=
"blue-btn"
...
...
@@ -50,12 +50,12 @@
class=
"buttons-content"
>
<el-checkbox
v-model=
"loginForm.rememberMe"
class=
"rem-code"
>
记住密码
</el-checkbox>
<el-link
:underline=
"false"
@
click=
"goDetail('/forgetPwd')"
>
<router-link
to=
"/forgetPwd"
>
忘记密码
</router-link
>
</el-link
>
<!--
<el-link-->
<!-- :underline="false"-->
<!-- @click="goDetail('/forgetPwd')"-->
<!-- >--
>
<!--
<router-link
to=
"/forgetPwd"
>
忘记密码
</router-link>
--
>
<!--
</el-link>
--
>
</div>
</div>
</el-form>
...
...
src/views/monitor/errorLog/index.vue
View file @
76128e0e
...
...
@@ -66,7 +66,7 @@
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
size=
"small"
@
click=
"handleQuery"
>
查询
</el-button>
<el-button
type=
"primary"
size=
"small"
icon=
"el-icon-search"
@
click=
"handleQuery"
>
查询
</el-button>
</el-form-item>
<el-form-item
style=
"float: right"
>
<!--
<el-button-->
...
...
@@ -76,21 +76,21 @@
<!-- :disabled="ids.length === 0"-->
<!-- @click="handleDelete"-->
<!-- >删除
</el-button>
-->
<
coolbutton
:type=
"deletetypePrimary"
:name=
"deleteName"
:size=
"deleteSize"
:disabled=
"ids.length === 0"
:haspermi=
"deleteHaspermi"
@
btn-click=
"handleDelete"
/
>
<
!--
<el-button-->
<!-- v-hasPermi="['zt:errlog:clear']"-->
<!-- type="danger"-->
<!-- size="small"-->
<!-- @click="handleClean"-->
<!-- >清空
</el-button>
--
>
<
coolbutton
:type=
"cleantypePrimary"
:name=
"cleanName"
:size=
"cleanSize"
:haspermi=
"cleanHaspermi"
@
btn-click=
"handleClean"
/
>
<
!--
<el-button-->
<!-- v-hasPermi="['zt:errlog:export']"-->
<!-- type="success"-->
<!-- size="small"-->
<!-- @click="handleExport"-->
<!-- >导出
</el-button>
--
>
<
coolbutton
:type=
"exporttypePrimary"
:name=
"exportName"
:size=
"exportSize"
:haspermi=
"exportHaspermi"
@
btn-click=
"handleExport"
/
>
<
!--
<coolbutton
:type=
"deletetypePrimary"
:name=
"deleteName"
:size=
"deleteSize"
:disabled=
"ids.length === 0"
:haspermi=
"deleteHaspermi"
@
btn-click=
"handleDelete"
/>
--
>
<
el-button
type=
"danger"
size=
"small"
icon=
"el-icon-delete"
@
click=
"handleClean"
>
清空
</el-button
>
<
!--
<coolbutton
:type=
"cleantypePrimary"
:name=
"cleanName"
:size=
"cleanSize"
:haspermi=
"cleanHaspermi"
@
btn-click=
"handleClean"
/>
--
>
<
el-button
type=
"success"
size=
"small"
icon=
"el-icon-download"
@
click=
"handleExport"
>
导出
</el-button
>
<
!--
<coolbutton
:type=
"exporttypePrimary"
:name=
"exportName"
:size=
"exportSize"
:haspermi=
"exportHaspermi"
@
btn-click=
"handleExport"
/>
--
>
<!--
<el-button
size=
"small"
@
click=
"resetQuery"
>
重置
</el-button>
-->
</el-form-item>
</el-form>
...
...
@@ -98,12 +98,12 @@
<div
style=
"padding: 10px"
>
<div
class=
"mb12 font-small-bold"
>
异常日志列表
</div>
<el-table
v-loading=
"loading"
border
:data=
"list"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"
selection
"
width=
"55"
align=
"center"
/>
<
el-table-column
:show-overflow-tooltip=
"true"
label=
"日志编号"
width=
"100"
align=
"center"
prop=
"businessId"
>
<template
slot-scope=
"scope"
>
{{
scope
.
row
.
businessId
||
'-'
}}
</
template
>
<
/el-table-column
>
<el-table-column
type=
"
index"
label=
"序号
"
width=
"55"
align=
"center"
/>
<
!--
<el-table-column
:show-overflow-tooltip=
"true"
label=
"日志编号"
width=
"100"
align=
"center"
prop=
"businessId"
>
--
>
<!--
<template
slot-scope=
"scope"
>
--
>
<!--
{{
scope
.
row
.
businessId
||
'-'
}}
-->
<!--
</
template
>
--
>
<
!-- </el-table-column>--
>
<el-table-column
:show-overflow-tooltip=
"true"
label=
"系统模块"
align=
"center"
prop=
"systemMode"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
systemMode
||
'-'
}}
...
...
@@ -148,13 +148,17 @@
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<!--
<el-button-->
<!-- v-hasPermi="['zt:operLog:detail']"-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- @click="handleView(scope.row,scope.index)"-->
<!-- >查看
</el-button>
-->
<coolbutton
:type=
"typeText"
:name=
"viewName"
:size=
"miniSize"
:haspermi=
"viewHaspermi"
@
btn-click=
"handleView(scope.row,scope.index)"
/>
<el-button
size=
"mini"
type=
"text"
@
click=
"handleView(scope.row,scope.index)"
>
查看
</el-button>
<el-button
type=
"text"
size=
"mini"
@
click=
"handleDelete(scope.row.businessId)"
>
删除
</el-button>
<!--
<coolbutton
:type=
"typeText"
:name=
"viewName"
:size=
"miniSize"
:haspermi=
"viewHaspermi"
@
btn-click=
"handleView(scope.row,scope.index)"
/>
-->
</
template
>
</el-table-column>
</el-table>
...
...
@@ -208,18 +212,73 @@
<!-- <el-button @click="open = false">关 闭</el-button>-->
<!-- </div>-->
</el-dialog>
<!-- 清空弹窗-->
<el-dialog
title=
"选择清空月份"
:visible
.
sync=
"clearVisible"
width=
"30%"
:before-close=
"handleClose"
>
<el-form
ref=
"clear"
:model=
"clearFrom"
:rules=
"clearRule"
>
<el-form-item
label=
"月份"
prop=
"month"
>
<el-date-picker
v-model=
"clearFrom.month"
type=
"monthrange"
range-separator=
"至"
start-placeholder=
"开始月份"
end-placeholder=
"结束月份"
value-format=
"yyyy_MM"
:picker-options=
"endDatePicker"
@
change=
"timechange"
/>
</el-form-item>
<el-form-item
style=
"float: right;margin-top: 20px"
>
<el-button
@
click=
"clearVisible = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"clear"
>
确 定
</el-button>
</el-form-item>
</el-form>
</el-dialog>
<!-- 导出弹窗-->
<el-dialog
title=
"选择导出月份"
:visible
.
sync=
"exportVisible"
width=
"30%"
:before-close=
"handleClose"
>
<el-form
ref=
"export"
:model=
"exportFrom"
:rules=
"exportRule"
>
<el-form-item
label=
"月份"
prop=
"month"
>
<el-date-picker
v-model=
"exportFrom.month"
type=
"monthrange"
range-separator=
"至"
start-placeholder=
"开始月份"
end-placeholder=
"结束月份"
value-format=
"yyyy_MM"
:picker-options=
"endDatePicker"
@
change=
"timechange"
/>
</el-form-item>
<el-form-item
style=
"float: right;margin-top: 20px"
>
<el-button
@
click=
"exportVisible = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"exportSubmit"
>
确 定
</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<
script
>
import
{
list
,
delErrLog
,
cleanErrLog
,
exportErrLog
}
from
'@/api/monitor/errorLog'
import
Coolbutton
from
'@/components/coolbutton'
import
{
cleanOperLog
,
exportOperLog
}
from
'@/api/monitor/operLog'
export
default
{
name
:
'Operlog'
,
components
:
{
Coolbutton
},
data
()
{
return
{
endDatePicker
:
this
.
handelFixDate
(),
// 自定义按钮
deletetypePrimary
:
'danger'
,
deleteName
:
'删除'
,
...
...
@@ -238,6 +297,20 @@ export default {
exportSize
:
'small'
,
exportHaspermi
:
[
'zt:errlog:export'
],
typeText
:
'text'
,
clearVisible
:
false
,
exportVisible
:
false
,
exportFrom
:
{},
exportRule
:
{
month
:
[
{
required
:
true
,
message
:
'请选择月份'
,
trigger
:
'change'
}
]
},
clearFrom
:
{},
clearRule
:
{
month
:
[
{
required
:
true
,
message
:
'请选择月份'
,
trigger
:
'change'
}
]
},
// 遮罩层
loading
:
true
,
// 选中数组
...
...
@@ -294,6 +367,16 @@ export default {
// })
},
methods
:
{
// 清空和导出弹出框的日期选择器禁用当前月份之后的月份
handelFixDate
()
{
return
{
disabledDate
(
time
)
{
// 如果想蕴含本月本月 - 8.64e7 * t 就不须要了,
// 如果想之前的不能抉择把 > 换成
<
return
time
.
getTime
()
>
Date
.
now
()
}
}
},
/** 查询登录日志 */
getList
()
{
this
.
loading
=
true
...
...
@@ -318,6 +401,57 @@ export default {
}
)
},
handleClose
()
{
this
.
clearVisible
=
false
this
.
exportVisible
=
false
},
timechange
(
e
)
{
},
clear
()
{
this
.
$refs
[
'clear'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
const
that
=
this
const
query
=
{
beginTime
:
that
.
clearFrom
.
month
[
0
],
endTime
:
that
.
clearFrom
.
month
[
1
]
}
cleanErrLog
(
query
).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
that
.
getList
()
that
.
$message
.
success
(
'清空成功'
)
this
.
clearVisible
=
false
}
else
{
that
.
$message
.
error
(
res
.
message
)
}
})
}
})
},
exportSubmit
()
{
this
.
$refs
[
'export'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
const
that
=
this
const
query
=
{
beginTime
:
that
.
exportFrom
.
month
[
0
],
endTime
:
that
.
exportFrom
.
month
[
1
]
}
return
exportErrLog
(
query
).
then
(
response
=>
{
const
blob
=
new
Blob
([
response
])
const
downloadElement
=
document
.
createElement
(
'a'
)
const
href
=
window
.
URL
.
createObjectURL
(
blob
)
// 创建下载的链接
downloadElement
.
href
=
href
downloadElement
.
download
=
'操作日志'
+
'.xls'
// 下载后文件名
document
.
body
.
appendChild
(
downloadElement
)
downloadElement
.
click
()
// 点击下载
document
.
body
.
removeChild
(
downloadElement
)
// 下载完成移除元素
window
.
URL
.
revokeObjectURL
(
href
)
// 释放掉blob对象
this
.
exportVisible
=
false
// this.download(response.msg)
})
}
})
},
// 操作日志状态字典翻译
statusFormat
(
row
,
column
)
{
return
this
.
selectDictLabel
(
this
.
statusOptions
,
row
.
status
)
...
...
@@ -347,15 +481,13 @@ export default {
this
.
form
=
row
},
/** 删除按钮操作 */
handleDelete
()
{
this
.
$confirm
(
'
所选择数据被删除后不可再恢复,是否继续
?'
,
'提示'
,
{
handleDelete
(
data
)
{
this
.
$confirm
(
'
是否确认操作
?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
const
id
=
this
.
ids
.
join
(
','
)
// TODO: clear this log
console
.
log
(
`this.ids`
,
id
)
const
id
=
data
const
query
=
{
deleteIds
:
id
}
...
...
@@ -369,19 +501,23 @@ export default {
},
/** 清空按钮操作 */
handleClean
()
{
this
.
$confirm
(
'所选择数据被清空后不可再恢复,是否继续?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(
function
()
{
return
cleanErrLog
()
}).
then
(()
=>
{
this
.
getList
()
this
.
$message
.
success
(
'清空成功'
)
}).
catch
(
function
()
{})
this
.
clearFrom
=
{}
this
.
clearVisible
=
true
// this.$confirm('所选择数据被清空后不可再恢复,是否继续?', '提示', {
// confirmButtonText: '确定',
// cancelButtonText: '取消',
// type: 'warning'
// }).then(function() {
// return cleanErrLog()
// }).then(() => {
// this.getList()
// this.$message.success('清空成功')
// }).catch(function() {})
},
/** 导出按钮操作 */
handleExport
()
{
this
.
exportFrom
=
{}
this
.
exportVisible
=
true
// const queryParams = Object.assign({}, this.queryParams)
// // queryParams.operTime = queryParams.operTime ? this.$parseDate(new Date(queryParams.operTime), 'YYYYMM') : ''
// delete queryParams.page
...
...
@@ -390,25 +526,25 @@ export default {
// exportErrLog(queryParams).then(response => {
// this.download(response.msg)
// }).catch(function() {})
const
queryParams
=
this
.
queryParams
this
.
$confirm
(
'是否确认导出所有日志异常数据项?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(
function
()
{
return
exportErrLog
(
queryParams
).
then
(
response
=>
{
const
blob
=
new
Blob
([
response
])
const
downloadElement
=
document
.
createElement
(
'a'
)
const
href
=
window
.
URL
.
createObjectURL
(
blob
)
// 创建下载的链接
downloadElement
.
href
=
href
downloadElement
.
download
=
'异常日志'
+
'.xls'
// 下载后文件名
document
.
body
.
appendChild
(
downloadElement
)
downloadElement
.
click
()
// 点击下载
document
.
body
.
removeChild
(
downloadElement
)
// 下载完成移除元素
window
.
URL
.
revokeObjectURL
(
href
)
// 释放掉blob对象
// this.download(response.msg)
})
})
//
const queryParams = this.queryParams
//
this.$confirm('是否确认导出所有日志异常数据项?', '提示', {
//
confirmButtonText: '确定',
//
cancelButtonText: '取消',
//
type: 'warning'
//
}).then(function() {
//
return exportErrLog(queryParams).then(response => {
//
const blob = new Blob([response])
//
const downloadElement = document.createElement('a')
//
const href = window.URL.createObjectURL(blob)// 创建下载的链接
//
downloadElement.href = href
//
downloadElement.download = '异常日志' + '.xls' // 下载后文件名
//
document.body.appendChild(downloadElement)
//
downloadElement.click()// 点击下载
//
document.body.removeChild(downloadElement)// 下载完成移除元素
//
window.URL.revokeObjectURL(href)// 释放掉blob对象
//
// this.download(response.msg)
//
})
//
})
}
}
}
...
...
src/views/monitor/loginInfo/index.vue
View file @
76128e0e
...
...
@@ -49,7 +49,7 @@
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
size=
"small"
@
click=
"handleQuery"
>
查询
</el-button>
<el-button
type=
"primary"
size=
"small"
icon=
"el-icon-search"
@
click=
"handleQuery"
>
查询
</el-button>
</el-form-item>
<div
style=
"float: right"
>
<el-form-item>
...
...
@@ -60,21 +60,23 @@
<!-- :disabled="multiple"-->
<!-- @click="handleDelete"-->
<!-- >删除
</el-button>
-->
<
coolbutton
:type=
"deletetypePrimary"
:name=
"deleteName"
:size=
"deleteSize"
:disabled=
"multiple"
@
btn-click=
"handleDelete"
/
>
<
!--
<coolbutton
:type=
"deletetypePrimary"
:name=
"deleteName"
:size=
"deleteSize"
:disabled=
"multiple"
@
btn-click=
"handleDelete"
/>
--
>
<!-- v-hasPermi="['zt:loginlog:clear']"-->
<!--
<el-button-->
<!-- type="danger"-->
<!-- size="small"-->
<!-- @click="handleClean"-->
<!-- >清空
</el-button>
-->
<coolbutton
:type=
"cleantypePrimary"
:name=
"cleanName"
:size=
"cleanSize"
@
btn-click=
"handleClean"
/>
<el-button
type=
"danger"
size=
"small"
:icon=
"delIcon"
@
click=
"handleClean"
>
清空
</el-button>
<!--
<coolbutton
:type=
"cleantypePrimary"
:name=
"cleanName"
:haspermi=
"clearHaspermi"
:icon=
"delIcon"
:size=
"cleanSize"
@
btn-click=
"handleClean"
/>
-->
<!-- v-hasPermi="['zt:loginlog:export']"-->
<!--
<el-button-->
<!-- type="success"-->
<!-- size="small"-->
<!-- @click="handleExport"-->
<!-- >导出
</el-button>
-->
<coolbutton
:type=
"exporttypePrimary"
:name=
"exportName"
:size=
"exportSize"
@
btn-click=
"handleExport"
/>
<el-button
type=
"success"
size=
"small"
icon=
"el-icon-download"
@
click=
"handleExport"
>
导出
</el-button>
<!--
<coolbutton
:type=
"exporttypePrimary"
:name=
"exportName"
:icon=
"exportIcon"
:size=
"exportSize"
@
btn-click=
"handleExport"
/>
-->
<!--
<el-button
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
-->
</el-form-item>
</div>
...
...
@@ -118,8 +120,8 @@
<!-- <!– </template>–>-->
<!-- <!– </el-table-column>–>-->
<!-- <el-table-column label="登录状态" align="center" prop="status" :formatter="statusFormat" />-->
<el-table-column
type=
"
selection"
width=
"55
"
align=
"center"
/>
<
el-table-column
label=
"访问编号"
align=
"center"
prop=
"businessId"
/
>
<el-table-column
type=
"
index"
width=
"55"
label=
"序号
"
align=
"center"
/>
<
!-- <el-table-column label="访问编号" align="center" prop="businessId" />--
>
<el-table-column
label=
"用户名称"
align=
"center"
prop=
"username"
/>
<el-table-column
label=
"登录地址"
align=
"center"
prop=
"ipaddr"
width=
"130"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"登录地点"
align=
"center"
prop=
"loginLocation"
:show-overflow-tooltip=
"true"
/>
...
...
@@ -142,6 +144,16 @@
<span>
{{
parseTime
(
scope
.
row
.
loginTime
)
|
transformDateByFormat
(
'YYYY-MM-DD HH:mm:ss'
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
>
<
template
slot-scope=
"scope"
>
<!--
<coolbutton
:type=
"textPrimary"
:name=
"deleteName"
:size=
"deleteSize"
@
btn-click=
"handleDelete(scope.row.businessId)"
/>
-->
<el-button
type=
"text"
size=
"small"
@
click=
"handleDelete(scope.row.businessId)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
</div>
<pagination
...
...
@@ -151,6 +163,58 @@
:limit
.
sync=
"queryParams.rows"
@
pagination=
"getList"
/>
<!-- 清空弹窗-->
<el-dialog
title=
"选择清空月份"
:visible
.
sync=
"clearVisible"
width=
"30%"
:before-close=
"handleClose"
>
<el-form
ref=
"clear"
:model=
"clearFrom"
:rules=
"clearRule"
>
<el-form-item
label=
"月份"
prop=
"month"
>
<el-date-picker
v-model=
"clearFrom.month"
type=
"monthrange"
range-separator=
"至"
start-placeholder=
"开始月份"
end-placeholder=
"结束月份"
value-format=
"yyyy_MM"
:picker-options=
"endDatePicker"
@
change=
"timechange"
/>
</el-form-item>
<el-form-item
style=
"float: right;margin-top: 20px"
>
<el-button
@
click=
"clearVisible = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"clear"
>
确 定
</el-button>
</el-form-item>
</el-form>
</el-dialog>
<!-- 导出弹窗-->
<el-dialog
title=
"选择导出月份"
:visible
.
sync=
"exportVisible"
width=
"30%"
:before-close=
"handleClose"
>
<el-form
ref=
"export"
:model=
"exportFrom"
:rules=
"exportRule"
>
<el-form-item
label=
"月份"
prop=
"month"
>
<el-date-picker
v-model=
"exportFrom.month"
type=
"monthrange"
range-separator=
"至"
start-placeholder=
"开始月份"
end-placeholder=
"结束月份"
value-format=
"yyyy_MM"
:picker-options=
"endDatePicker"
@
change=
"timechange"
/>
</el-form-item>
<el-form-item
style=
"float: right;margin-top: 20px"
>
<el-button
@
click=
"exportVisible = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"exportSubmit"
>
确 定
</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
...
...
@@ -164,10 +228,12 @@ export default {
components
:
{
Template
,
Coolbutton
},
data
()
{
return
{
endDatePicker
:
this
.
handelFixDate
(),
// 自定义按钮
deletetypePrimary
:
'danger'
,
textPrimary
:
'text'
,
deleteName
:
'删除'
,
deleteSize
:
'
small
'
,
deleteSize
:
'
mini
'
,
deleteDisabled
:
'multiple'
,
cleantypePrimary
:
'danger'
,
cleanName
:
'清空'
,
...
...
@@ -175,6 +241,16 @@ export default {
exporttypePrimary
:
'success'
,
exportName
:
'导出'
,
exportSize
:
'small'
,
delIcon
:
'el-icon-delete'
,
exportIcon
:
'el-icon-download'
,
clearVisible
:
false
,
exportVisible
:
false
,
exportFrom
:
{},
exportRule
:
{
month
:
[
{
required
:
true
,
message
:
'请选择月份'
,
trigger
:
'change'
}
]
},
// 遮罩层
loading
:
true
,
// 选中数组
...
...
@@ -185,6 +261,12 @@ export default {
showSearch
:
true
,
// 总条数
total
:
0
,
clearFrom
:
{},
clearRule
:
{
month
:
[
{
required
:
true
,
message
:
'请选择月份'
,
trigger
:
'change'
}
]
},
// 表格数据
list
:
[],
// 状态数据字典
...
...
@@ -225,6 +307,16 @@ export default {
})
},
methods
:
{
// 清空和导出弹出框的日期选择器禁用当前月份之后的月份
handelFixDate
()
{
return
{
disabledDate
(
time
)
{
// 如果想蕴含本月本月 - 8.64e7 * t 就不须要了,
// 如果想之前的不能抉择把 > 换成
<
return
time
.
getTime
()
>
Date
.
now
()
}
}
},
/** 查询登录日志列表 */
getList
()
{
this
.
loading
=
true
...
...
@@ -235,6 +327,13 @@ export default {
this
.
total
=
response
.
total
this
.
loading
=
false
})
},
handleClose
()
{
this
.
clearVisible
=
false
this
.
exportVisible
=
false
},
timechange
(
e
)
{
},
// 登录状态字典翻译
statusFormat
(
row
,
column
)
{
...
...
@@ -257,15 +356,14 @@ export default {
this
.
multiple
=
!
selection
.
length
},
/** 删除按钮操作 */
handleDelete
()
{
this
.
$confirm
(
'
所选择数据被删除后不可再恢复,是否继续
?'
,
'提示'
,
{
handleDelete
(
data
)
{
this
.
$confirm
(
'
是否确认操作
?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
const
id
=
this
.
ids
.
join
(
','
)
// TODO: clear this log
console
.
log
(
`this.ids`
,
id
)
// const id = this.ids.join(',')
const
id
=
data
const
query
=
{
deleteIds
:
id
}
...
...
@@ -277,21 +375,59 @@ export default {
this
.
multiple
=
true
}).
catch
(
function
()
{})
},
clear
()
{
this
.
$refs
[
'clear'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
const
that
=
this
const
query
=
{
beginTime
:
that
.
clearFrom
.
month
[
0
],
endTime
:
that
.
clearFrom
.
month
[
1
]
}
cleanLogininfo
(
query
).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
that
.
getList
()
that
.
$message
.
success
(
'清空成功'
)
this
.
clearVisible
=
false
}
else
{
that
.
$message
.
error
(
res
.
message
)
}
})
}
})
},
/** 清空按钮操作 */
handleClean
()
{
this
.
$confirm
(
'所选择数据被清空后不可再恢复,是否继续?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(
function
()
{
return
cleanLogininfo
()
}).
then
(()
=>
{
this
.
getList
()
this
.
$message
.
success
(
'清空成功'
)
}).
catch
(
function
()
{})
this
.
clearVisible
=
true
this
.
clearFrom
=
{}
},
exportSubmit
()
{
this
.
$refs
[
'export'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
const
that
=
this
const
query
=
{
beginTime
:
that
.
exportFrom
.
month
[
0
],
endTime
:
that
.
exportFrom
.
month
[
1
]
}
return
exportLogininfo
(
query
).
then
(
response
=>
{
const
blob
=
new
Blob
([
response
])
const
downloadElement
=
document
.
createElement
(
'a'
)
const
href
=
window
.
URL
.
createObjectURL
(
blob
)
// 创建下载的链接
downloadElement
.
href
=
href
downloadElement
.
download
=
'登录日志'
+
'.xls'
// 下载后文件名
document
.
body
.
appendChild
(
downloadElement
)
downloadElement
.
click
()
// 点击下载
document
.
body
.
removeChild
(
downloadElement
)
// 下载完成移除元素
window
.
URL
.
revokeObjectURL
(
href
)
// 释放掉blob对象
this
.
exportVisible
=
false
// this.download(response.msg)
})
}
})
},
/** 导出按钮操作 */
handleExport
()
{
this
.
exportVisible
=
true
this
.
exportFrom
=
{}
// const queryParams = Object.assign({}, this.queryParams)
// // queryParams.loginTime = queryParams.loginTime ? this.$parseDate(new Date(queryParams.loginTime), 'YYYY-MM-DD HH:mm:ss') : ''
// delete queryParams.page
...
...
@@ -300,25 +436,6 @@ export default {
// exportLogininfo(queryParams).then(response => {
// this.download(response.msg)
// }).catch(function() {})
const
queryParams
=
this
.
queryParams
this
.
$confirm
(
'是否确认导出所有操作日志数据项?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(
function
()
{
return
exportLogininfo
(
queryParams
).
then
(
response
=>
{
const
blob
=
new
Blob
([
response
])
const
downloadElement
=
document
.
createElement
(
'a'
)
const
href
=
window
.
URL
.
createObjectURL
(
blob
)
// 创建下载的链接
downloadElement
.
href
=
href
downloadElement
.
download
=
'登录日志'
+
'.xls'
// 下载后文件名
document
.
body
.
appendChild
(
downloadElement
)
downloadElement
.
click
()
// 点击下载
document
.
body
.
removeChild
(
downloadElement
)
// 下载完成移除元素
window
.
URL
.
revokeObjectURL
(
href
)
// 释放掉blob对象
// this.download(response.msg)
})
})
}
}
}
...
...
src/views/monitor/operLog/index.vue
View file @
76128e0e
...
...
@@ -66,7 +66,7 @@
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
size=
"small"
@
click=
"handleQuery"
>
查询
</el-button>
<el-button
type=
"primary"
size=
"small"
icon=
"el-icon-search"
@
click=
"handleQuery"
>
查询
</el-button>
</el-form-item>
<el-form-item
style=
"float: right"
>
<!--
<el-button-->
...
...
@@ -76,21 +76,21 @@
<!-- :disabled="ids.length === 0"-->
<!-- @click="handleDelete"-->
<!-- >删除
</el-button>
-->
<
coolbutton
:type=
"deletetypePrimary"
:name=
"deleteName"
:size=
"deleteSize"
:disabled=
"ids.length === 0"
:haspermi=
"deleteHaspermi"
@
btn-click=
"handleDelete"
/
>
<
!--
<el-button-->
<!-- v-hasPermi="['zt:operLog:clear']"-->
<!-- type="danger"-->
<!-- size="small"-->
<!-- @click="handleClean"-->
<!-- >清空
</el-button>
--
>
<
coolbutton
:type=
"cleantypePrimary"
:name=
"cleanName"
:size=
"cleanSize"
:haspermi=
"cleanHaspermi"
@
btn-click=
"handleClean"
/
>
<
!--
<el-button-->
<!-- v-hasPermi="['zt:operLog:export']"-->
<!-- type="success"-->
<!-- size="small"-->
<!-- @click="handleExport"-->
<!-- >导出
</el-button>
--
>
<
coolbutton
:type=
"exporttypePrimary"
:name=
"exportName"
:size=
"exportSize"
:haspermi=
"exportHaspermi"
@
btn-click=
"handleExport"
/
>
<
!--
<coolbutton
:type=
"deletetypePrimary"
:name=
"deleteName"
:size=
"deleteSize"
:disabled=
"ids.length === 0"
:haspermi=
"deleteHaspermi"
@
btn-click=
"handleDelete"
/>
--
>
<
el-button
type=
"danger"
size=
"small"
icon=
"el-icon-delete"
@
click=
"handleClean"
>
清空
</el-button
>
<
!--
<coolbutton
:type=
"cleantypePrimary"
:name=
"cleanName"
:size=
"cleanSize"
:haspermi=
"cleanHaspermi"
@
btn-click=
"handleClean"
/>
--
>
<
el-button
type=
"success"
size=
"small"
icon=
"el-icon-download"
@
click=
"handleExport"
>
导出
</el-button
>
<
!--
<coolbutton
:type=
"exporttypePrimary"
:name=
"exportName"
:size=
"exportSize"
:haspermi=
"exportHaspermi"
@
btn-click=
"handleExport"
/>
--
>
<!--
<el-button
size=
"small"
@
click=
"resetQuery"
>
重置
</el-button>
-->
</el-form-item>
</el-form>
...
...
@@ -98,12 +98,12 @@
<div
style=
"padding:10px"
>
<div
class=
"mb12 font-small-bold"
>
操作日志列表
</div>
<el-table
v-loading=
"loading"
border
:data=
"list"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"
selection
"
width=
"55"
align=
"center"
/>
<
el-table-column
:show-overflow-tooltip=
"true"
label=
"日志编号"
width=
"100"
align=
"center"
prop=
"operId"
>
<template
slot-scope=
"scope"
>
{{
scope
.
row
.
businessId
||
'-'
}}
</
template
>
<
/el-table-column
>
<el-table-column
type=
"
index
"
width=
"55"
align=
"center"
/>
<
!--
<el-table-column
:show-overflow-tooltip=
"true"
label=
"日志编号"
width=
"100"
align=
"center"
prop=
"operId"
>
--
>
<!--
<template
slot-scope=
"scope"
>
--
>
<!--
{{
scope
.
row
.
businessId
||
'-'
}}
-->
<!--
</
template
>
--
>
<
!-- </el-table-column>--
>
<el-table-column
:show-overflow-tooltip=
"true"
label=
"系统模块"
align=
"center"
prop=
"systemMode"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
systemMode
||
'-'
}}
...
...
@@ -148,13 +148,17 @@
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<!--
<el-button-->
<!-- v-hasPermi="['zt:operLog:detail']"-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- @click="handleView(scope.row,scope.index)"-->
<!-- >查看
</el-button>
-->
<coolbutton
:type=
"typeText"
:name=
"viewName"
:size=
"miniSize"
:haspermi=
"viewHaspermi"
@
btn-click=
"handleView(scope.row,scope.index)"
/>
<el-button
size=
"mini"
type=
"text"
@
click=
"handleView(scope.row,scope.index)"
>
查看
</el-button>
<el-button
type=
"text"
size=
"mini"
@
click=
"handleDelete(scope.row.businessId)"
>
删除
</el-button>
<!--
<coolbutton
:type=
"typeText"
:name=
"viewName"
:size=
"miniSize"
:haspermi=
"viewHaspermi"
@
btn-click=
"handleView(scope.row,scope.index)"
/>
-->
</
template
>
</el-table-column>
</el-table>
...
...
@@ -182,7 +186,7 @@
<el-form-item
label=
"操作信息:"
>
{{ form.optionName || '-' }}
</el-form-item>
<el-form-item
label=
"请求地址:"
>
{{ form.operUrl || '-' }}
</el-form-item>
<el-form-item
label=
"请求方式:"
>
{{ form.requestMethod || '-' }}
</el-form-item>
<el-form-item
label=
"操作时间:"
>
{{ parseTime(form.operTime) ?
parseTime(form.operTime) : '-' }}
</el-form-item>
<el-form-item
label=
"操作时间:"
>
{{ parseTime(form.operTime) ? parseTime(form.operTime) : '-' }}
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"操作方法:"
>
{{ form.method || '-' }}
</el-form-item>
...
...
@@ -208,18 +212,72 @@
<!-- <el-button @click="open = false">关 闭</el-button>-->
<!-- </div>-->
</el-dialog>
<!-- 清空弹窗-->
<el-dialog
title=
"选择清空月份"
:visible
.
sync=
"clearVisible"
width=
"30%"
:before-close=
"handleClose"
>
<el-form
ref=
"clear"
:model=
"clearFrom"
:rules=
"clearRule"
>
<el-form-item
label=
"月份"
prop=
"month"
>
<el-date-picker
v-model=
"clearFrom.month"
type=
"monthrange"
range-separator=
"至"
start-placeholder=
"开始月份"
end-placeholder=
"结束月份"
value-format=
"yyyy_MM"
:picker-options=
"endDatePicker"
@
change=
"timechange"
/>
</el-form-item>
<el-form-item
style=
"float: right;margin-top: 20px"
>
<el-button
@
click=
"clearVisible = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"clear"
>
确 定
</el-button>
</el-form-item>
</el-form>
</el-dialog>
<!-- 导出弹窗-->
<el-dialog
title=
"选择导出月份"
:visible
.
sync=
"exportVisible"
width=
"30%"
:before-close=
"handleClose"
>
<el-form
ref=
"export"
:model=
"exportFrom"
:rules=
"exportRule"
>
<el-form-item
label=
"月份"
prop=
"month"
>
<el-date-picker
v-model=
"exportFrom.month"
type=
"monthrange"
range-separator=
"至"
start-placeholder=
"开始月份"
end-placeholder=
"结束月份"
value-format=
"yyyy_MM"
:picker-options=
"endDatePicker"
@
change=
"timechange"
/>
</el-form-item>
<el-form-item
style=
"float: right;margin-top: 20px"
>
<el-button
@
click=
"exportVisible = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"exportSubmit"
>
确 定
</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<
script
>
import
{
list
,
delOperLog
,
cleanOperLog
,
exportOperLog
}
from
'@/api/monitor/operLog'
import
Coolbutton
from
'@/components/coolbutton'
import
{
cleanLogininfo
,
exportLogininfo
}
from
'@/api/monitor/loginInfo'
export
default
{
name
:
'Operlog'
,
components
:
{
Coolbutton
},
data
()
{
return
{
endDatePicker
:
this
.
handelFixDate
(),
// 自定义按钮
deletetypePrimary
:
'danger'
,
deleteName
:
'删除'
,
...
...
@@ -238,6 +296,20 @@ export default {
exportName
:
'导出'
,
exportSize
:
'small'
,
exportHaspermi
:
[
'zt:operLog:export'
],
clearVisible
:
false
,
exportVisible
:
false
,
exportFrom
:
{},
exportRule
:
{
month
:
[
{
required
:
true
,
message
:
'请选择月份'
,
trigger
:
'change'
}
]
},
clearFrom
:
{},
clearRule
:
{
month
:
[
{
required
:
true
,
message
:
'请选择月份'
,
trigger
:
'change'
}
]
},
// 遮罩层
loading
:
true
,
// 选中数组
...
...
@@ -295,6 +367,16 @@ export default {
// })
},
methods
:
{
// 清空和导出弹出框的日期选择器禁用当前月份之后的月份
handelFixDate
()
{
return
{
disabledDate
(
time
)
{
// 如果想蕴含本月本月 - 8.64e7 * t 就不须要了,
// 如果想之前的不能抉择把 > 换成
<
return
time
.
getTime
()
>
Date
.
now
()
}
}
},
/** 查询操作日志 */
getList
()
{
this
.
loading
=
true
...
...
@@ -319,6 +401,56 @@ export default {
}
)
},
handleClose
()
{
this
.
clearVisible
=
false
this
.
exportVisible
=
false
},
timechange
(
e
)
{
},
clear
()
{
this
.
$refs
[
'clear'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
const
that
=
this
const
query
=
{
beginTime
:
that
.
clearFrom
.
month
[
0
],
endTime
:
that
.
clearFrom
.
month
[
1
]
}
cleanOperLog
(
query
).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
that
.
getList
()
that
.
$message
.
success
(
'清空成功'
)
this
.
clearVisible
=
false
}
else
{
that
.
$message
.
error
(
res
.
message
)
}
})
}
})
},
exportSubmit
()
{
this
.
$refs
[
'export'
].
validate
((
valid
)
=>
{
if
(
valid
)
{
const
that
=
this
const
query
=
{
beginTime
:
that
.
exportFrom
.
month
[
0
],
endTime
:
that
.
exportFrom
.
month
[
1
]
}
return
exportOperLog
(
query
).
then
(
response
=>
{
const
blob
=
new
Blob
([
response
])
const
downloadElement
=
document
.
createElement
(
'a'
)
const
href
=
window
.
URL
.
createObjectURL
(
blob
)
// 创建下载的链接
downloadElement
.
href
=
href
downloadElement
.
download
=
'操作日志'
+
'.xls'
// 下载后文件名
document
.
body
.
appendChild
(
downloadElement
)
downloadElement
.
click
()
// 点击下载
document
.
body
.
removeChild
(
downloadElement
)
// 下载完成移除元素
window
.
URL
.
revokeObjectURL
(
href
)
// 释放掉blob对象
this
.
exportVisible
=
false
// this.download(response.msg)
})
}
})
},
// 操作日志状态字典翻译
statusFormat
(
row
,
column
)
{
return
this
.
selectDictLabel
(
this
.
statusOptions
,
row
.
status
)
...
...
@@ -348,15 +480,13 @@ export default {
this
.
form
=
row
},
/** 删除按钮操作 */
handleDelete
()
{
this
.
$confirm
(
'
所选择数据被删除后不可再恢复,是否继续
?'
,
'提示'
,
{
handleDelete
(
data
)
{
this
.
$confirm
(
'
是否确认操作
?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
const
id
=
this
.
ids
.
join
(
','
)
// TODO: clear this log
console
.
log
(
`this.ids`
,
id
)
const
id
=
data
const
query
=
{
deleteIds
:
id
}
...
...
@@ -371,19 +501,23 @@ export default {
},
/** 清空按钮操作 */
handleClean
()
{
this
.
$confirm
(
'所选择数据被清空后不可再恢复,是否继续?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
cleanOperLog
().
then
(()
=>
{
this
.
getList
()
this
.
$message
.
success
(
'清空成功'
)
}).
catch
(
function
()
{})
}).
catch
()
this
.
clearFrom
=
{}
this
.
clearVisible
=
true
// this.$confirm('所选择数据被清空后不可再恢复,是否继续?', '提示', {
// confirmButtonText: '确定',
// cancelButtonText: '取消',
// type: 'warning'
// }).then(() => {
// cleanOperLog().then(() => {
// this.getList()
// this.$message.success('清空成功')
// }).catch(function() {})
// }).catch()
},
/** 导出按钮操作 */
handleExport
()
{
this
.
exportFrom
=
{}
this
.
exportVisible
=
true
// const queryParams = Object.assign({}, this.queryParams)
// // queryParams.operTime = queryParams.operTime ? this.$parseDate(new Date(queryParams.operTime), 'YYYY-MM-DD HH:mm:ss') : ''
// delete queryParams.pu
...
...
@@ -392,25 +526,25 @@ export default {
// exportOperLog(queryParams).then(response => {
// this.download(response.msg)
// }).catch(function() {})
const
queryParams
=
this
.
queryParams
this
.
$confirm
(
'是否确认导出所有操作日志数据项?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(
function
()
{
return
exportOperLog
(
queryParams
).
then
(
response
=>
{
const
blob
=
new
Blob
([
response
])
const
downloadElement
=
document
.
createElement
(
'a'
)
const
href
=
window
.
URL
.
createObjectURL
(
blob
)
// 创建下载的链接
downloadElement
.
href
=
href
downloadElement
.
download
=
'操作日志'
+
'.xls'
// 下载后文件名
document
.
body
.
appendChild
(
downloadElement
)
downloadElement
.
click
()
// 点击下载
document
.
body
.
removeChild
(
downloadElement
)
// 下载完成移除元素
window
.
URL
.
revokeObjectURL
(
href
)
// 释放掉blob对象
// this.download(response.msg)
})
})
//
const queryParams = this.queryParams
//
this.$confirm('是否确认导出所有操作日志数据项?', '提示', {
//
confirmButtonText: '确定',
//
cancelButtonText: '取消',
//
type: 'warning'
//
}).then(function() {
//
return exportOperLog(queryParams).then(response => {
//
const blob = new Blob([response])
//
const downloadElement = document.createElement('a')
//
const href = window.URL.createObjectURL(blob)// 创建下载的链接
//
downloadElement.href = href
//
downloadElement.download = '操作日志' + '.xls' // 下载后文件名
//
document.body.appendChild(downloadElement)
//
downloadElement.click()// 点击下载
//
document.body.removeChild(downloadElement)// 下载完成移除元素
//
window.URL.revokeObjectURL(href)// 释放掉blob对象
//
// this.download(response.msg)
//
})
//
})
}
}
}
...
...
src/views/reSetPsw.vue
View file @
76128e0e
...
...
@@ -31,15 +31,15 @@
<el-form-item
prop=
"checkPass"
label=
"确认密码"
placeholder=
"请再次输入新密码"
>
<el-input
v-model=
"pwdList.checkPass"
placeholder=
"请再次输入新密码"
type=
"password"
/>
</el-form-item>
<el-form-item>
<el-button
class=
"blue-btn"
type=
"primary"
@
click=
"onSubmit"
>
修改密码
</el-button>
<el-button
class=
"blue-btn"
type=
"primary"
@
click=
"onSubmit"
>
确定
</el-button>
</el-form-item>
</el-form>
</section>
...
...
@@ -121,30 +121,30 @@ export default {
}
</
script
>
<
style
lang=
"scss"
scoped
>
.forget-pwd-content
{
display
:
flex
;
flex-direction
:
column
;
align-items
:
center
;
min-height
:
calc
(
100vh
-
110px
);
.title
{
font-size
:
24px
;
font-weight
:
bold
;
margin-top
:
40px
;
.forget-pwd-content
{
display
:
flex
;
flex-direction
:
column
;
align-items
:
center
;
min-height
:
calc
(
100vh
-
110px
);
.title
{
font-size
:
24px
;
font-weight
:
bold
;
margin-top
:
40px
;
}
.el-form
{
margin-top
:
40px
;
width
:
40%
;
.el-form-item__label
{
color
:
#333333
;
font-weight
:
normal
;
}
.el-form
{
margin-top
:
40px
;
width
:
40%
;
.el-form-item__label
{
color
:
#333333
;
font-weight
:
normal
;
}
.el-input__inner
{
border-radius
:
4px
;
}
.blue-btn
{
height
:
32px
;
border-radius
:
4px
;
}
.el-input__inner
{
border-radius
:
4px
;
}
.blue-btn
{
height
:
32px
;
border-radius
:
4px
;
}
}
}
</
style
>
src/views/system/dept/index.vue
View file @
76128e0e
...
...
@@ -73,6 +73,8 @@
/>
</
template
>
</el-table-column>
<el-table-column
:show-overflow-tooltip=
"true"
prop=
"leader"
label=
"负责人"
width=
"200"
/>
<el-table-column
:show-overflow-tooltip=
"true"
prop=
"phone"
label=
"联系电话"
width=
"200"
/>
<el-table-column
:show-overflow-tooltip=
"true"
label=
"创建时间"
align=
"center"
prop=
"createDate"
width=
"200"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
createDate
|
transformDateByFormat
(
'YYYY-MM-DD HH:mm'
)
}}
</span>
...
...
@@ -133,7 +135,7 @@
<!-- type="text"-->
<!-- @click="handleDelete(scope.row)"-->
<!-- >删除
</el-button>
-->
<coolbutton
:type=
"typeParent"
:name=
"nameParent"
:size=
"size"
:
icon=
"delicon"
:
haspermi=
"delHaspermi"
@
btn-click=
"handleDelete(scope.row)"
/>
<coolbutton
:type=
"typeParent"
:name=
"nameParent"
:size=
"size"
:haspermi=
"delHaspermi"
@
btn-click=
"handleDelete(scope.row)"
/>
</
template
>
</el-table-column>
</el-table>
...
...
@@ -246,7 +248,16 @@ export default {
// 是否显示弹出层
open
:
false
,
// 状态数据字典
statusOptions
:
[],
statusOptions
:
[
{
dictLabel
:
'启用'
,
dictValue
:
'1'
},
{
dictLabel
:
'停用'
,
dictValue
:
'0'
}
],
// 查询参数
queryParams
:
{
deptName
:
undefined
,
...
...
@@ -299,9 +310,9 @@ export default {
this
.
queryParams
=
{
...
param
}
}
this
.
getList
()
this
.
getDicts
(
'sys_normal_disable'
.
toUpperCase
()).
then
(
response
=>
{
this
.
statusOptions
=
response
.
data
})
//
this.getDicts('sys_normal_disable'.toUpperCase()).then(response => {
//
this.statusOptions = response.data
//
})
},
methods
:
{
/** 查询部门列表 */
...
...
@@ -341,9 +352,9 @@ export default {
}
},
// 字典状态字典翻译
statusFormat
(
row
,
column
)
{
return
this
.
selectDictLabel
(
this
.
statusOptions
,
row
.
flag
)
},
//
statusFormat(row, column) {
//
return this.selectDictLabel(this.statusOptions, row.flag)
//
},
// 取消按钮
cancel
()
{
this
.
open
=
false
...
...
@@ -359,7 +370,7 @@ export default {
leader
:
undefined
,
phone
:
undefined
,
email
:
undefined
,
flag
:
'
0
'
flag
:
'
1
'
}
this
.
resetForm
(
'form'
)
},
...
...
src/views/system/dict/data.vue
View file @
76128e0e
...
...
@@ -35,9 +35,7 @@
<el-button
type=
"primary"
size=
"small"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
size=
"small"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-form-item
style=
"float: right"
>
<!--
<el-button-->
<!-- v-hasPermi="['sys:dict:add']"-->
<!-- type="primary"-->
...
...
@@ -47,8 +45,7 @@
<!-- >新增-->
<!--
</el-button>
-->
<coolbutton
:type=
"typePrimary"
:name=
"addName"
:icon=
"addIcon"
:size=
"size"
:haspermi=
"addHaspermi"
@
btn-click=
"handleAdd"
/>
</el-col>
<el-col
:span=
"1.5"
>
<!--
<el-button-->
<!-- v-hasPermi="['sys:dict:update']"-->
<!-- type="success"-->
...
...
@@ -58,9 +55,7 @@
<!-- @click="handleUpdate"-->
<!-- >修改-->
<!--
</el-button>
-->
<!--
<coolbutton
:type=
"typeSuccess"
:name=
"updataName"
:icon=
"updateIcon"
:size=
"size"
:haspermi=
"updateHaspermi"
@
btn-click=
"handleUpdate"
/>
-->
</el-col>
<el-col
:span=
"1.5"
>
<!--
<el-button-->
<!-- v-hasPermi="['sys:dict:delete']"-->
<!-- type="danger"-->
...
...
@@ -70,31 +65,31 @@
<!-- @click="handleDelete"-->
<!-- >删除-->
<!--
</el-button>
-->
<!--
<coolbutton
:type=
"typeDanger"
:name=
"nameParent"
:icon=
"delicon"
:size=
"size"
:haspermi=
"delHaspermi"
@
btn-click=
"handleDelete"
/>
-->
</el-col>
<el-col
:span=
"1.5"
>
<!--
<coolbutton
:type=
"typeDanger"
:name=
"nameParent"
:icon=
"delicon"
:size=
"size"
:haspermi=
"delHaspermi"
@
btn-click=
"handleDelete"
/>
-->
<el-button
v-has-permi=
"['sys:dict:export']"
type=
"success"
icon=
"el-icon-download"
size=
"mini"
@
click=
"handleExport"
>
导出
</el-button>
</el-col>
<right-toolbar
:show-search
.
sync=
"showSearch"
@
queryTable=
"getList"
/>
</el-row>
<right-toolbar
:show-search
.
sync=
"showSearch"
@
queryTable=
"getList"
/>
</el-form-item>
</el-form>
<div
class=
"placeholder"
/>
<div
style=
"padding:10px"
>
<div
class=
"mb12 font-small-bold"
>
字典参数列表
</div>
<el-table
v-loading=
"loading"
:data=
"dataList"
border
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"
selection
"
width=
"55"
align=
"center"
/>
<el-table-column
type=
"
index"
label=
"序号
"
width=
"55"
align=
"center"
/>
<!--
<el-table-column
:show-overflow-tooltip=
"true"
label=
"参数编码"
prop=
"dictCode"
>
-->
<!--
<template
slot-scope=
"scope"
>
-->
<!--
{{
scope
.
row
.
dictCode
||
'-'
}}
-->
<!--
</
template
>
-->
<!-- </el-table-column>-->
<
el-table-column
label=
"字典编码"
align=
"center"
prop=
"businessId"
/
>
<
!-- <el-table-column label="字典编码" align="center" prop="businessId" />--
>
<el-table-column
:show-overflow-tooltip=
"true"
label=
"字典标签"
prop=
"dictLabel"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
dictLabel
||
'-'
}}
...
...
@@ -140,14 +135,14 @@
<!-- style="color: #49cec9"-->
<!-- @click="handleUpdate(scope.row)"-->
<!-- >修改
</el-button>
-->
<coolbutton
style=
"color: #49cec9"
:type=
"typeParent"
:name=
"updataName"
:size=
"size"
:haspermi=
"
edit
Haspermi"
@
btn-click=
"handleUpdate(scope.row)"
/>
<coolbutton
style=
"color: #49cec9"
:type=
"typeParent"
:name=
"updataName"
:size=
"size"
:haspermi=
"
update
Haspermi"
@
btn-click=
"handleUpdate(scope.row)"
/>
<!--
<el-button-->
<!-- v-hasPermi="['sys:dictConfig:remove']"-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- @click="handleDelete(scope.row)"-->
<!-- >删除
</el-button>
-->
<coolbutton
:type=
"typeParent"
:
icon=
"delicon"
:name=
"nameParent"
:size=
"size"
:haspermi=
"remove
Haspermi"
@
btn-click=
"handleDelete(scope.row)"
/>
<coolbutton
:type=
"typeParent"
:
name=
"nameParent"
:size=
"size"
:haspermi=
"del
Haspermi"
@
btn-click=
"handleDelete(scope.row)"
/>
<!--
<el-switch-->
<!-- v-model="scope.row.status"-->
<!-- v-hasPermi="['sys:dictConfig:toggle']"-->
...
...
@@ -213,7 +208,7 @@ import Coolbutton from '@/components/coolbutton'
export
default
{
name
:
'Data'
,
components
:
{
Coolbutton
},
components
:
{
Coolbutton
},
data
()
{
const
verifyIDProp
=
(
rule
,
value
,
callback
)
=>
{
if
(
value
===
''
||
value
===
undefined
||
value
===
null
)
{
...
...
src/views/system/dict/index.vue
View file @
76128e0e
...
...
@@ -100,15 +100,15 @@
<!-- >导出
</el-button>
-->
<coolbutton
:type=
"typeSuccess"
:name=
"exportName"
:icon=
"exportIcon"
:size=
"size"
:haspermi=
"exportHaspermi"
@
btn-click=
"handleExport"
/>
</el-col>
<
right-toolbar
:show-search
.
sync=
"showSearch"
@
queryTable=
"getList"
/
>
<
!--
<right-toolbar
:show-search
.
sync=
"showSearch"
@
queryTable=
"getList"
/>
--
>
</el-row>
</el-form>
<div
class=
"placeholder"
/>
<div
style=
"min-height: 445px;padding:10px"
>
<h5
style=
"margin: 0 0 12px 0;font-size: 14px"
>
字典管理列表
</h5>
<el-table
v-loading=
"loading"
border
:data=
"typeList"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"
selection
"
width=
"55"
align=
"center"
/>
<
el-table-column
label=
"字典编号"
align=
"center"
prop=
"businessId"
/
>
<el-table-column
type=
"
index"
label=
"序号
"
width=
"55"
align=
"center"
/>
<
!--
<el-table-column
label=
"字典编号"
align=
"center"
prop=
"businessId"
/>
--
>
<el-table-column
label=
"字典名称"
prop=
"dictName"
:show-overflow-tooltip=
"true"
>
<template
slot-scope=
"scope"
>
{{
scope
.
row
.
dictName
||
'-'
}}
...
...
@@ -157,14 +157,14 @@
<!-- style="color: #49cec9"-->
<!-- @click="handleUpdate(scope.row)"-->
<!-- >修改
</el-button>
-->
<coolbutton
:type=
"typeParent"
style=
"color: #49cec9"
:name=
"updataName"
:size=
"size"
:haspermi=
"
edit
Haspermi"
@
btn-click=
"handleUpdate(scope.row)"
/>
<coolbutton
:type=
"typeParent"
style=
"color: #49cec9"
:name=
"updataName"
:size=
"size"
:haspermi=
"
update
Haspermi"
@
btn-click=
"handleUpdate(scope.row)"
/>
<!--
<el-button-->
<!-- v-hasPermi="['sys:dict:remove']"-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- @click="handleDelete(scope.row)"-->
<!-- >删除
</el-button>
-->
<coolbutton
:type=
"typeParent"
:
icon=
"delicon"
:name=
"nameParent"
:size=
"size"
:haspermi=
"remove
Haspermi"
@
btn-click=
"handleDelete(scope.row)"
/>
<coolbutton
:type=
"typeParent"
:
name=
"nameParent"
:size=
"size"
:haspermi=
"del
Haspermi"
@
btn-click=
"handleDelete(scope.row)"
/>
</
template
>
</el-table-column>
</el-table>
...
...
@@ -205,21 +205,20 @@
/>
</el-select>
</el-form-item>
<!-- <el-form-item v-show="form.parentId">-->
<!-- <el-select v-model="form.dataId" style="width: 100%" clearable placeholder="请选择父字典类型" @visible-change="clearSelected">-->
<!-- <el-option-->
<!-- v-for="item in optionsDict"-->
<!-- :key="item.dictCode"-->
<!-- :label="item.dictLabel"-->
<!-- :disabled="item.status == 1"-->
<!-- :value="item.dictCode"-->
<!-- >-->
<!-- <span style="float: left">{{ item.dictLabel }}</span>-->
<!-- <span v-if="item.status === '1'" style="float: right; color: #8492a6; font-size: 12px;padding-left: 10px">{{ '已停用' }}</span>-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item
v-show=
"form.parentId"
>
<el-select
v-model=
"form.dataId"
style=
"width: 100%"
clearable
placeholder=
"请选择父字典数据"
@
visible-change=
"clearSelected"
>
<el-option
v-for=
"item in optionsDict"
:key=
"item.dictValue"
:label=
"item.dictLabel"
:disabled=
"item.status == 1"
:value=
"item.dictValue"
>
<span
style=
"float: left"
>
{{ item.dictLabel }}
</span>
<span
v-if=
"item.status === '1'"
style=
"float: right; color: #8492a6; font-size: 12px;padding-left: 10px"
>
{{ '已停用' }}
</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remarks"
>
<el-input
v-model
.
trim=
"form.remarks"
maxlength=
"200"
type=
"textarea"
placeholder=
"请输入内容"
/>
</el-form-item>
...
...
@@ -250,7 +249,7 @@ import Template from '@/views/instance/Template'
import
Coolbutton
from
'@/components/coolbutton'
export
default
{
name
:
'Dict'
,
components
:
{
Template
,
Coolbutton
},
components
:
{
Template
,
Coolbutton
},
data
()
{
const
verifyTypeProp
=
(
rule
,
value
,
callback
)
=>
{
if
(
value
===
''
||
value
===
undefined
||
value
===
null
)
{
...
...
@@ -424,7 +423,7 @@ export default {
selectDictType
(
this
.
options
.
find
(
item
=>
{
return
item
.
businessId
===
val
}).
dictType
).
then
(
response
=>
{
this
.
optionsDict
=
response
.
data
})
this
.
form
.
dataId
=
''
//
this.form.dataId = ''
},
clearSelected
(
flag
)
{
// flag = true 为下拉框选项展开时的标识
...
...
@@ -440,7 +439,7 @@ export default {
},
handleStatusChange
(
row
)
{
const
text
=
row
.
flag
===
'1'
?
'启用'
:
'停用'
this
.
$confirm
(
'确认
要"'
+
text
+
'""'
+
row
.
dictName
+
'"吗
?'
,
'提示'
,
{
this
.
$confirm
(
'确认
确认操作
?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
...
...
@@ -506,6 +505,11 @@ export default {
const
dictId
=
row
.
businessId
||
this
.
ids
getType
(
dictId
).
then
(
response
=>
{
this
.
form
=
response
.
data
this
.
$nextTick
(()
=>
{
this
.
form
.
dataId
=
response
.
data
.
dataId
.
toString
()
this
.
$forceUpdate
()
})
this
.
getOptions
(
this
.
form
.
parentId
)
this
.
open
=
true
this
.
title
=
'修改字典类型'
})
...
...
@@ -548,21 +552,26 @@ export default {
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
dictIds
=
row
.
businessId
||
this
.
ids
this
.
$confirm
(
'是否确认删除字典编号为"'
+
dictIds
+
'"的数据项?'
,
'警告'
,
{
const
that
=
this
this
.
$confirm
(
'是否确认操作?'
,
'警告'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(
function
()
{
return
delType
(
dictIds
)
}).
then
(()
=>
{
this
.
getList
()
this
.
msgSuccess
(
'删除成功'
)
delType
(
dictIds
).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
that
.
getList
()
that
.
msgSuccess
(
'删除成功'
)
}
else
{
that
.
$message
.
error
(
res
.
message
)
}
})
})
},
/** 导出按钮操作 */
handleExport
()
{
const
queryParams
=
this
.
queryParams
this
.
$confirm
(
'是否确认
导出所有类型数据项
?'
,
'警告'
,
{
this
.
$confirm
(
'是否确认
操作
?'
,
'警告'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
...
...
src/views/system/role/index.vue
View file @
76128e0e
...
...
@@ -39,7 +39,7 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
size=
"small"
@
click=
"handleQuery"
>
查询
</el-button>
<el-button
type=
"primary"
size=
"small"
icon=
"el-icon-search"
@
click=
"handleQuery"
>
查询
</el-button>
</el-form-item>
<div
style=
"float: right"
>
<el-form-item>
...
...
@@ -67,12 +67,7 @@
<div
class=
"mb12 font-small-bold"
>
角色管理列表
</div>
<el-table
v-loading=
"loading"
border
:data=
"roleList"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"index"
label=
"序号"
width=
"50"
/>
<el-table-column
label=
"角色编号"
prop=
"businessId"
>
<template
slot-scope=
"scope"
>
{{
scope
.
row
.
businessId
||
'-'
}}
</
template
>
</el-table-column>
<el-table-column
label=
"角色名称"
prop=
"roleName"
:show-overflow-tooltip=
"true"
>
<el-table-column
label=
"名称"
prop=
"roleName"
:show-overflow-tooltip=
"true"
>
<template
slot-scope=
"scope"
>
{{
scope
.
row
.
roleName
||
'-'
}}
</
template
>
...
...
@@ -122,7 +117,6 @@
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-delete"
@
click=
"handleDelete(scope.row)"
>
删除
</el-button>
</
template
>
...
...
@@ -138,39 +132,39 @@
/>
<!-- 添加或修改角色配置对话框 -->
<el-dialog
title=
"角色信息
"
:visible
.
sync=
"open"
width=
"500px"
append-to-body
>
<el-dialog
:title=
"title
"
:visible
.
sync=
"open"
width=
"500px"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
size=
"small"
label-width=
"80px"
>
<el-form-item
label=
"
角色
名称"
prop=
"roleName"
>
<el-form-item
label=
"名称"
prop=
"roleName"
>
<el-input
v-model
.
trim=
"form.roleName"
show-word-limit
:maxlength=
"30"
placeholder=
"请输入角色名称"
/>
</el-form-item>
<el-form-item
label=
"权限字符"
prop=
"roleKey"
>
<el-input
v-model
.
trim=
"form.roleKey"
show-word-limit
:maxlength=
"30"
placeholder=
"请输入权限字符"
/>
</el-form-item>
<el-form-item
label=
"
角色
排序"
prop=
"roleSort"
>
<el-form-item
label=
"排序"
prop=
"roleSort"
>
<el-input-number
v-model=
"form.roleSort"
style=
"width: 100%"
controls-position=
"right"
:min=
"0"
/>
</el-form-item>
<el-form-item
label=
"角色状态"
>
<el-radio-group
v-model=
"form.flag"
>
<el-radio
v-for=
"dict in statusOptions"
:key=
"dict.dictValue"
:label=
"dict.dictValue"
>
{{ dict.dictLabel }}
</el-radio>
</el-radio-group>
<el-form-item
label=
"状态"
>
<!-- <el-radio-group v-model="form.flag">-->
<!-- <el-radio :label="1">启用</el-radio>-->
<!-- <el-radio :label="0">停用</el-radio>-->
<!-- </el-radio-group>-->
<el-radio
v-model=
"form.flag"
label=
"1"
>
启用
</el-radio>
<el-radio
v-model=
"form.flag"
label=
"0"
>
停用
</el-radio>
</el-form-item>
<el-form-item
label=
"菜单权限"
>
<
el-checkbox
v-model=
"menuExpand"
@
change=
"handleCheckedTreeExpand($event, 'menu')"
>
展开/折叠
</el-checkbox
>
<
el-checkbox
v-model=
"menuNodeAll"
@
change=
"handleCheckedTreeNodeAll($event, 'menu')"
>
全选/全不选
</el-checkbox
>
<
el-checkbox
v-model=
"form.menuCheckStrictly"
@
change=
"handleCheckedTreeConnect($event, 'menu')"
>
父子联动
</el-checkbox
>
<
!-- <el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox>--
>
<
!-- <el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox>--
>
<
!-- <el-checkbox v-model="form.menuCheckStrictly" @change="handleCheckedTreeConnect($event, 'menu')">父子联动</el-checkbox>--
>
<el-tree
ref=
"menu"
class=
"tree-border"
:data=
"menuOptions"
show-checkbox
node-key=
"id"
:check-strictly=
"!form.menuCheckStrictly"
check-strictly
empty-text=
"加载中,请稍后"
:props=
"defaultProps"
@
check-change=
"handleMenuCheckChange"
/>
</el-form-item>
<el-form-item
label=
"备注"
>
...
...
@@ -235,10 +229,10 @@
/>
</el-select>
</el-form-item>
<el-form-item
v-show=
"form.dataScope == 2"
label=
"数据权限"
>
<
el-checkbox
v-model=
"deptExpand"
@
change=
"handleCheckedTreeExpand($event, 'dept')"
>
展开/折叠
</el-checkbox
>
<
el-checkbox
v-model=
"deptNodeAll"
@
change=
"handleCheckedTreeNodeAll($event, 'dept')"
>
全选/全不选
</el-checkbox
>
<
el-checkbox
v-model=
"form.deptCheckStrictly"
@
change=
"handleCheckedTreeConnect($event, 'dept')"
>
父子联动
</el-checkbox
>
<el-form-item
v-show=
"form.dataScope ==
=
2"
label=
"数据权限"
>
<
!-- <el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox>--
>
<
!-- <el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox>--
>
<
!-- <el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox>--
>
<el-tree
ref=
"dept"
class=
"tree-border"
...
...
@@ -365,7 +359,9 @@ export default {
flag
:
undefined
},
// 表单参数
form
:
{},
form
:
{
},
defaultProps
:
{
children
:
'children'
,
label
:
'label'
...
...
@@ -437,6 +433,29 @@ export default {
this
.
deptOptions
=
response
.
data
})
},
// 树状图节点点击选中事件
handleMenuCheckChange
(
data
,
check
,
subCheck
)
{
// data为选中节点信息,check选中状态
if
(
data
.
children
!==
undefined
&&
data
.
children
!==
null
)
{
// 是否包含子节点
this
.
checkNode
(
data
.
children
,
check
)
// 调用checkNode方法
}
// // 获取所有被选中的节点信息
// const nodes = this.$refs.menu.getCheckedNodes(false, false)
// // 将获取到的信息赋值(根据自己的需求)
// this.custGroupDesc = nodes.map(item => item.CN_NAME)
// this.searchForm.custGroup = nodes.map(item => item.code)
},
// 选中所有下级节点
checkNode
(
data
,
check
)
{
// 遍历所有下级节点信息
data
.
forEach
(
item
=>
{
// 通过节点信息设置选中状态
this
.
$refs
.
menu
.
setChecked
(
item
,
check
,
false
)
// 是否包含下级节点,包含下级节点则选中所有下级节点
if
(
item
.
children
!==
undefined
)
{
this
.
checkNode
(
item
.
children
,
check
)
}
})
},
// 所有菜单节点数据
getMenuAllCheckedKeys
()
{
// 目前被选中的菜单节点
...
...
@@ -474,7 +493,7 @@ export default {
// 角色状态修改
handleStatusChange
(
row
)
{
const
text
=
row
.
flag
===
'1'
?
'启用'
:
'停用'
this
.
$confirm
(
'
确认要"'
+
text
+
'""'
+
row
.
roleName
+
'"角色吗
?'
,
'警告'
,
{
this
.
$confirm
(
'
是否确认操作
?'
,
'警告'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
...
...
@@ -514,12 +533,12 @@ export default {
roleName
:
undefined
,
roleKey
:
undefined
,
roleSort
:
0
,
flag
:
undefined
,
flag
:
'1'
,
menuIds
:
[],
menuName
:
undefined
,
deptIds
:
[],
menuCheckStrictly
:
tru
e
,
deptCheckStrictly
:
tru
e
,
menuCheckStrictly
:
fals
e
,
deptCheckStrictly
:
fals
e
,
remark
:
undefined
}
this
.
resetForm
(
'form'
)
...
...
@@ -541,14 +560,14 @@ export default {
this
.
single
=
selection
.
length
!==
1
this
.
multiple
=
!
selection
.
length
},
// 树权限(父子联动)
handleCheckedTreeConnect
(
value
,
type
)
{
if
(
type
===
'menu'
)
{
this
.
form
.
menuCheckStrictly
=
!!
value
}
else
if
(
type
===
'dept'
)
{
this
.
form
.
deptCheckStrictly
=
!!
value
}
},
//
//
树权限(父子联动)
//
handleCheckedTreeConnect(value, type) {
//
if (type === 'menu') {
//
this.form.menuCheckStrictly = !!value
//
} else if (type === 'dept') {
//
this.form.deptCheckStrictly = !!value
//
}
//
},
// 树权限(全选/全不选)
handleCheckedTreeNodeAll
(
value
,
type
)
{
if
(
type
===
'menu'
)
{
...
...
@@ -625,6 +644,7 @@ export default {
submitForm
:
function
()
{
this
.
$refs
[
'form'
].
validate
(
valid
=>
{
if
(
valid
)
{
this
.
form
.
menuCheckStrictly
=
false
if
(
this
.
form
.
businessId
!==
undefined
)
{
this
.
form
.
menuIds
=
this
.
getMenuAllCheckedKeys
()
updateRole
(
this
.
form
).
then
(
response
=>
{
...
...
@@ -657,7 +677,7 @@ export default {
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
roleIds
=
row
.
businessId
||
this
.
ids
this
.
$confirm
(
'
所选择数据被删除后不可再恢复,是否继续
?'
,
'提示'
,
{
this
.
$confirm
(
'
是否确认操作
?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
...
...
@@ -675,7 +695,7 @@ export default {
/** 导出按钮操作 */
handleExport
()
{
const
queryParams
=
this
.
queryParams
this
.
$confirm
(
'是否确认
导出所有用户信息
?'
,
'警告'
,
{
this
.
$confirm
(
'是否确认
操作
?'
,
'警告'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
...
...
src/views/system/user/index.vue
View file @
76128e0e
...
...
@@ -81,7 +81,7 @@
</div>
<el-row
:gutter=
"20"
>
<!--部门数据-->
<el-col
:span=
"4"
:xs=
"24"
style=
"background: #f4f4f4;height: 100%"
>
<el-col
:span=
"4"
:xs=
"24"
style=
"background: #f4f4f4;height: 100%"
@
click
.
native=
"clickBlank"
>
<div
class=
"head-container"
style=
"padding: 10px 6px;background: #FFFFFF"
>
<el-input
v-model=
"deptName"
...
...
@@ -119,19 +119,12 @@
:data=
"userList"
>
<el-table-column
type=
"index"
label=
"序号"
width=
"50"
/>
<el-table-column
label=
"用户编号"
>
<template
v-slot:default=
"scope"
>
{{
scope
.
row
.
businessId
||
'-'
}}
</
template
>
</el-table-column>
<el-table-column
label=
"登录名"
prop=
"username"
:show-overflow-tooltip=
"true"
>
<template
slot-scope=
"scope"
>
{{
scope
.
row
.
username
||
'-'
}}
</
template
>
</el-table-column>
<el-table-column
label=
"
用户名称
"
prop=
"userType"
:show-overflow-tooltip=
"true"
>
<el-table-column
label=
"
姓名
"
prop=
"userType"
:show-overflow-tooltip=
"true"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
name
||
'-'
}}
</
template
>
...
...
@@ -187,7 +180,7 @@
<!-- icon="el-icon-delete"-->
<!-- @click="handleDelete(scope.row)"-->
<!-- >删除
</el-button>
-->
<coolbutton
v-if=
"scope.row.businessId !== 1"
:type=
"typeParent"
:name=
"nameParent"
:size=
"size"
:
icon=
"delicon"
:
haspermi=
"haspermi"
@
btn-click=
"handleDelete(scope.row)"
/>
<coolbutton
v-if=
"scope.row.businessId !== 1"
:type=
"typeParent"
:name=
"nameParent"
:size=
"size"
:haspermi=
"haspermi"
@
btn-click=
"handleDelete(scope.row)"
/>
</
template
>
</el-table-column>
</el-table>
...
...
@@ -205,12 +198,31 @@
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"80px"
>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"用户昵称"
prop=
"nickName"
>
<el-form-item
v-if=
"form.businessId == undefined"
label=
"登录名"
prop=
"username"
>
<el-input
v-model=
"form.username"
placeholder=
"请输入登录名"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
v-if=
"form.businessId == undefined"
label=
"密码"
prop=
"password"
>
<el-input
v-model=
"form.password"
placeholder=
"请输入密码"
type=
"password"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"姓名"
prop=
"name"
>
<el-input
v-model
.
trim=
"form.name"
placeholder=
"请输入用户名称"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"昵称"
prop=
"nickName"
>
<el-input
v-model=
"form.nickName"
placeholder=
"请输入用户昵称"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"
用户
性别"
>
<el-form-item
label=
"性别"
>
<el-select
v-model=
"form.sex"
placeholder=
"请选择"
>
<el-option
v-for=
"dict in sexOptions"
...
...
@@ -221,8 +233,6 @@
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"手机号码"
prop=
"phone"
>
<el-input
...
...
@@ -233,33 +243,16 @@
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"邮箱"
prop=
"email"
>
<el-input
v-model
.
trim=
"form.email"
placeholder=
"请输入邮箱"
maxlength=
"25"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
v-if=
"form.businessId == undefined"
label=
"登录名"
prop=
"username"
>
<el-input
v-model=
"form.username"
placeholder=
"请输入登录名"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
v-if=
"form.businessId == undefined"
label=
"用户密码"
prop=
"password"
>
<el-input
v-model=
"form.password"
placeholder=
"请输入用户密码"
type=
"password"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"
用户名称"
prop=
"name
"
>
<el-input
v-model
.
trim=
"form.
name"
placeholder=
"请输入用户名称
"
/>
<el-form-item
label=
"
身份证号"
prop=
"idNumber
"
>
<el-input
v-model
.
trim=
"form.
idNumber"
placeholder=
"请输入身份证号"
maxlength=
"18
"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"
身份证号"
prop=
"idNumber
"
>
<el-input
v-model
.
trim=
"form.
idNumber"
placeholder=
"请输入身份证号"
maxlength=
"18
"
/>
<el-form-item
label=
"
邮箱"
prop=
"email
"
>
<el-input
v-model
.
trim=
"form.
email"
placeholder=
"请输入邮箱"
maxlength=
"25
"
/>
</el-form-item>
</el-col>
</el-row>
...
...
@@ -267,11 +260,8 @@
<el-col
:span=
"12"
>
<el-form-item
v-if=
"form.businessId == undefined"
label=
"状态"
>
<el-radio-group
v-model=
"form.flag"
>
<el-radio
v-for=
"dict in statusOptions"
:key=
"dict.dictValue"
:label=
"dict.dictValue"
>
{{ dict.dictLabel }}
</el-radio>
<el-radio
:label=
"1"
>
启用
</el-radio>
<el-radio
:label=
"0"
>
停用
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
...
...
@@ -424,27 +414,27 @@ export default {
}
callback
()
}
var
phone
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'请输入手机号'
))
}
else
{
callback
()
}
}
var
idNumber
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'请输入身份证号'
))
}
else
{
callback
()
}
}
var
name
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'请输入用户类型
'
))
}
else
{
callback
()
}
}
//
var phone = (rule, value, callback) => {
//
if (!value) {
//
return callback(new Error('请输入手机号'))
//
} else {
//
callback()
//
}
//
}
//
var idNumber = (rule, value, callback) => {
//
if (!value) {
//
return callback(new Error('请输入身份证号'))
//
} else {
//
callback()
//
}
//
}
//
var name = (rule, value, callback) => {
//
if (!value) {
// return callback(new Error('请输入用户姓名
'))
//
} else {
//
callback()
//
}
//
}
return
{
pwdTypeMap
:
{
text
:
true
,
...
...
@@ -532,7 +522,8 @@ export default {
phone
:
''
,
email
:
''
,
idNumber
:
''
,
name
:
''
name
:
''
,
flag
:
1
},
defaultProps
:
{
children
:
'children'
,
...
...
@@ -593,8 +584,7 @@ export default {
}
],
name
:
[
{
require
:
true
,
message
:
'用户姓名不能为空'
,
trigger
:
'blur'
},
{
validator
:
name
,
trigger
:
'blur'
}
{
required
:
true
,
message
:
'用户姓名不能为空'
,
trigger
:
'blur'
}
],
email
:
[
{
required
:
false
,
message
:
'请输入邮箱地址'
,
trigger
:
'blur'
},
...
...
@@ -615,13 +605,13 @@ export default {
pattern
:
/^1
[
3|4|5|6|7|8|9
][
0-9
]\d{8}
$/
,
message
:
'请输入正确的手机号码'
,
trigger
:
'blur'
}
,
{
validator
:
phone
,
trigger
:
'blur'
}
}
//
{ validator: phone, trigger: 'blur' }
],
idNumber
:
[
{
require
:
tru
e
,
message
:
'请输入身份证号'
,
trigger
:
'blur'
},
{
min
:
18
,
max
:
18
,
message
:
'长度18字符'
,
trigger
:
'blur'
}
,
{
validator
:
idNumber
,
trigger
:
'blur'
}
{
require
:
fals
e
,
message
:
'请输入身份证号'
,
trigger
:
'blur'
},
{
min
:
18
,
max
:
18
,
message
:
'长度18字符'
,
trigger
:
'blur'
}
//
{ validator: idNumber, trigger: 'blur' }
]
},
userInfoLoading
:
false
,
...
...
@@ -664,7 +654,7 @@ export default {
this
.
$refs
.
form
.
validateField
(
'id'
)
},
a
()
{
console
.
log
(
'调用按钮组件'
)
//
console.log('调用按钮组件')
},
/** 查询用户列表 */
getList
()
{
...
...
@@ -678,7 +668,7 @@ export default {
},
roleChange
(
e
)
{
// TODO: clear this log
console
.
log
(
`e`
,
e
)
//
console.log(`e`, e)
this
.
$forceUpdate
()
},
/** 查询部门下拉树结构 */
...
...
@@ -715,14 +705,29 @@ export default {
},
// 节点单击事件
handleNodeClick
(
data
)
{
if
(
this
.
currentNode
===
data
.
id
)
{
this
.
currentNode
=
undefined
this
.
queryParams
.
deptId
=
''
this
.
currentNodeKey
=
!
this
.
currentNodeKey
}
else
{
this
.
currentNode
=
data
.
id
this
.
queryParams
.
deptId
=
data
.
id
}
// TODO: clear this log
// console.log(`this.currentNode`, this.currentNode)
// TODO: clear this log
// console.log(`data`, data)
// if (this.currentNode === data.id) {
// this.currentNode = undefined
// this.queryParams.deptId = ''
// this.currentNodeKey = !this.currentNodeKey
// } else {
// this.currentNode = data.id
// this.queryParams.deptId = data.id
// }
// if (data.id === -1) {
// this.queryParams.deptId = undefined
// } else {
// this.queryParams.deptId = data.id
// }
this
.
queryParams
.
deptId
=
data
.
id
this
.
getList
()
},
// 点击部门空白处
clickBlank
()
{
this
.
queryParams
.
deptId
=
undefined
this
.
getList
()
},
handleClick
(
data
)
{
...
...
@@ -731,7 +736,7 @@ export default {
// 用户状态修改
handleStatusChange
(
row
)
{
const
text
=
row
.
flag
===
'1'
?
'启用'
:
'停用'
this
.
$confirm
(
'
确认要"'
+
text
+
'""'
+
row
.
username
+
'"用户吗
?'
,
'警告'
,
{
this
.
$confirm
(
'
是否确认操作
?'
,
'警告'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
...
...
@@ -764,7 +769,7 @@ export default {
idNumber
:
undefined
,
email
:
undefined
,
sex
:
undefined
,
flag
:
undefined
,
flag
:
1
,
remark
:
undefined
,
postIds
:
[],
roleIds
:
[]
...
...
@@ -810,15 +815,13 @@ export default {
this
.
open
=
true
this
.
form
=
response
.
data
const
data
=
response
.
data
.
roleIds
.
split
(
','
)
// TODO: clear this log
console
.
log
(
`data`
,
data
)
this
.
form
.
roleList
=
[]
data
.
forEach
(
item
=>
{
const
id
=
Number
(
item
)
this
.
form
.
roleList
.
push
(
id
)
})
// this.form.postId = response.data.deptId
this
.
title
=
'修改'
this
.
title
=
'修改
用户
'
})
this
.
getChildrenDept
(
userId
)
},
...
...
@@ -885,7 +888,7 @@ export default {
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
userId
=
row
.
businessId
||
this
.
ids
this
.
$confirm
(
'
所选择数据被删除后不可再恢复,是否继续
?'
,
'提示'
,
{
this
.
$confirm
(
'
是否确认操作
?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
...
...
@@ -902,7 +905,7 @@ export default {
/** 导出按钮操作 */
handleExport
()
{
const
queryParams
=
this
.
queryParams
this
.
$confirm
(
'是否确认
导出所有用户信息
?'
,
'警告'
,
{
this
.
$confirm
(
'是否确认
操作
?'
,
'警告'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
...
...
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