Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
E
exhibition_backstage
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
龙菲
exhibition_backstage
Commits
f7525e71
提交
f7525e71
authored
10月 09, 2022
作者:
龙菲
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加个人资料修改和密码修改
上级
a65f970c
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
260 行增加
和
2 行删除
+260
-2
user.js
src/api/user.js
+20
-0
Navbar.vue
src/layout/components/Navbar.vue
+240
-2
没有找到文件。
src/api/user.js
浏览文件 @
f7525e71
...
@@ -88,6 +88,26 @@ export function upadateUser(data) {
...
@@ -88,6 +88,26 @@ export function upadateUser(data) {
})
})
}
}
// 修改用户信息
export
function
editUserInfo
(
data
)
{
return
request
({
url
:
'/sys/user/info'
,
method
:
'put'
,
data
})
}
// 修改密码
export
function
editUserPwd
(
data
)
{
return
request
({
url
:
'/sys/user/pwd'
,
method
:
'put'
,
data
})
}
// 删除用户
// 删除用户
export
function
deleteUser
(
data
)
{
export
function
deleteUser
(
data
)
{
return
request
({
return
request
({
...
...
src/layout/components/Navbar.vue
浏览文件 @
f7525e71
...
@@ -13,18 +13,97 @@
...
@@ -13,18 +13,97 @@
<div
class=
"avatar-wrapper"
>
<div
class=
"avatar-wrapper"
>
<img
v-if=
"avatar"
:src=
"avatar"
class=
"user-avatar"
/>
<img
v-if=
"avatar"
:src=
"avatar"
class=
"user-avatar"
/>
<img
v-else
src=
"@/assets/imgs/avatar.png"
class=
"user-avatar"
/>
<img
v-else
src=
"@/assets/imgs/avatar.png"
class=
"user-avatar"
/>
<!--
<span
>
欢迎你
<span
v-if=
"userInfo.nickName || userInfo.username"
>
{{
","
+
userInfo
.
nickName
||
userInfo
.
username
}}
</span></span
>
-->
<i
class=
"el-icon-caret-bottom"
/>
<i
class=
"el-icon-caret-bottom"
/>
</div>
</div>
<el-dropdown-menu
slot=
"dropdown"
class=
"user-dropdown"
>
<el-dropdown-menu
slot=
"dropdown"
class=
"user-dropdown"
>
<router-link
to=
"/"
>
<router-link
to=
"/"
>
<el-dropdown-item>
主页
</el-dropdown-item>
<el-dropdown-item>
主页
</el-dropdown-item>
</router-link>
</router-link>
<el-dropdown-item
divided
@
click
.
native=
"handleShowUserInfo"
>
<span
style=
"display: block"
>
个人资料
</span>
</el-dropdown-item>
<el-dropdown-item
divided
@
click
.
native=
"handleShowPwd"
>
<span
style=
"display: block"
>
修改密码
</span>
</el-dropdown-item>
<el-dropdown-item
divided
@
click
.
native=
"logout"
>
<el-dropdown-item
divided
@
click
.
native=
"logout"
>
<span
style=
"display: block"
>
退出
</span>
<span
style=
"display: block"
>
退出
</span>
</el-dropdown-item>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown-menu>
</el-dropdown>
</el-dropdown>
</div>
</div>
<el-drawer
:title=
"isUserInfo ? '个人资料' : '修改密码'"
:visible
.
sync=
"showDrawer"
direction=
"rtl"
:before-close=
"handleClose"
append-to-body
v-loading=
"loading"
>
<!--
<span>
{{
isUserInfo
?
"个人资料"
:
"修改密码"
}}
</span>
-->
<el-form
ref=
"userInfoForm"
v-if=
"isUserInfo"
:label-width=
"labelWidth"
:rules=
"userInfoRules"
:model=
"userInfoForm"
>
<el-form-item
label=
"用户名"
prop=
"username"
>
<span
v-if=
"!isEditingUserInfo"
>
{{
userInfo
.
username
}}
</span>
<el-input
v-else
v-model=
"userInfoForm.username"
></el-input>
</el-form-item>
<el-form-item
label=
"昵称"
prop=
"nickName"
>
<span
v-if=
"!isEditingUserInfo"
>
{{
userInfo
.
nickName
}}
</span>
<el-input
v-else
v-model=
"userInfoForm.nickName"
></el-input>
</el-form-item>
<el-form-item
label=
"手机号"
prop=
"phone"
>
<span
v-if=
"!isEditingUserInfo"
>
{{
userInfo
.
phone
}}
</span>
<el-input
v-else
v-model=
"userInfoForm.phone"
></el-input>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click
.
native=
"handleSubmitUserInfo"
>
{{
isEditingUserInfo
?
"保存"
:
"修改个人信息"
}}
</el-button>
<el-button
type=
"primary"
@
click
.
native=
"handleCancelChangeUserInfo"
v-if=
"isEditingUserInfo"
>
取消
</el-button
>
</el-form-item>
</el-form>
<el-form
ref=
"pwdForm"
:model=
"pwdForm"
:label-width=
"labelWidth"
:rules=
"pwdRules"
v-else
>
<el-form-item
label=
"旧密码"
prop=
"oldPwd"
>
<el-input
v-model=
"pwdForm.oldPwd"
type=
"password"
></el-input>
</el-form-item>
<el-form-item
label=
"新密码"
prop=
"newPwd"
>
<el-input
v-model=
"pwdForm.newPwd"
type=
"password"
></el-input>
</el-form-item>
<el-form-item
label=
"确认密码"
prop=
"checkPass"
>
<el-input
v-model=
"pwdForm.checkPass"
type=
"password"
></el-input>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click
.
native=
"handleSubmitPwd"
>
保存
</el-button
>
<el-button
type=
"primary"
@
click
.
native=
"handleCancelChangePwd"
>
取消
</el-button
>
</el-form-item>
</el-form>
</el-drawer>
</div>
</div>
</
template
>
</
template
>
...
@@ -32,14 +111,91 @@
...
@@ -32,14 +111,91 @@
import
{
mapGetters
}
from
"vuex"
;
import
{
mapGetters
}
from
"vuex"
;
import
Breadcrumb
from
"@/components/Breadcrumb"
;
import
Breadcrumb
from
"@/components/Breadcrumb"
;
import
Hamburger
from
"@/components/Hamburger"
;
import
Hamburger
from
"@/components/Hamburger"
;
import
{
editUserInfo
,
editUserPwd
}
from
"@/api/user"
;
import
{
setUserInfo
}
from
"@/utils/auth"
;
export
default
{
export
default
{
components
:
{
components
:
{
Breadcrumb
,
Breadcrumb
,
Hamburger
,
Hamburger
,
},
},
computed
:
{
computed
:
{
...
mapGetters
([
"sidebar"
,
"avatar"
]),
...
mapGetters
([
"sidebar"
,
"avatar"
,
"userInfo"
]),
},
data
()
{
var
validatePass
=
(
rule
,
value
,
callback
)
=>
{
if
(
value
===
""
)
{
callback
(
new
Error
(
"请输入新密码"
));
}
else
{
var
pattern
=
/^
(?![
a-zA-Z
]
+$
)(?![
A-Z0-9
]
+$
)(?![
A-Z
\\
W_!@#$%^&*`~()-+=
]
+$
)(?![
a-z0-9
]
+$
)(?![
a-z
\\
W_!@#$%^&*`~()-+=
]
+$
)(?![
0-9
\\
W_!@#$%^&*`~()-+=
]
+$
)[
a-zA-Z0-9
\\
W_!@#$%^&*`~()-+=
]{8,30}
$/
;
if
(
!
pattern
.
test
(
value
))
{
callback
(
new
Error
(
"密码长度至少8位,至少含数字,大写字母,小写字母,特殊符其中三种"
)
);
}
if
(
this
.
pwdForm
.
checkPass
!==
""
)
{
this
.
$refs
.
pwdForm
.
validateField
(
"checkPass"
);
}
callback
();
}
};
var
validatePass2
=
(
rule
,
value
,
callback
)
=>
{
if
(
value
===
""
)
{
callback
(
new
Error
(
"请再次输入密码"
));
}
else
if
(
value
!==
this
.
pwdForm
.
newPwd
)
{
callback
(
new
Error
(
"两次输入密码不一致!"
));
}
else
{
callback
();
}
};
return
{
showDrawer
:
false
,
isUserInfo
:
true
,
isEditingUserInfo
:
false
,
userInfoForm
:
{},
loading
:
false
,
labelWidth
:
"100px"
,
userInfoRules
:
{
username
:
[
{
required
:
true
,
message
:
"请填写用户名"
,
trigger
:
"blur"
,
},
],
nickName
:
[
{
required
:
true
,
message
:
"请填写昵称"
,
trigger
:
"blur"
,
},
],
phone
:
[
{
required
:
true
,
message
:
"请填写手机号"
,
trigger
:
"blur"
,
},
],
},
pwdForm
:
{
oldPwd
:
""
,
newPwd
:
""
,
checkPass
:
""
,
},
pwdRules
:
{
oldPwd
:
[
{
trigger
:
"blur"
,
required
:
true
,
message
:
"请输入当前密码"
},
],
newPwd
:
[{
validator
:
validatePass
,
trigger
:
"blur"
,
required
:
true
}],
checkPass
:
[
{
validator
:
validatePass2
,
trigger
:
"blur"
,
required
:
true
},
],
},
};
},
},
methods
:
{
methods
:
{
toggleSideBar
()
{
toggleSideBar
()
{
...
@@ -49,6 +205,85 @@ export default {
...
@@ -49,6 +205,85 @@ export default {
let
res
=
await
this
.
$store
.
dispatch
(
"user/logout"
);
let
res
=
await
this
.
$store
.
dispatch
(
"user/logout"
);
this
.
$router
.
push
(
`/login?redirect=
${
this
.
$route
.
fullPath
}
`
);
this
.
$router
.
push
(
`/login?redirect=
${
this
.
$route
.
fullPath
}
`
);
},
},
handleShowUserInfo
()
{
this
.
showDrawer
=
true
;
this
.
isUserInfo
=
true
;
},
handleShowPwd
()
{
this
.
showDrawer
=
true
;
this
.
isUserInfo
=
false
;
},
handleSubmitUserInfo
()
{
if
(
this
.
isEditingUserInfo
)
{
this
.
$refs
.
userInfoForm
.
validate
(
async
(
valid
)
=>
{
if
(
valid
)
{
this
.
loading
=
true
;
let
res
=
await
editUserInfo
(
this
.
userInfoForm
);
if
(
res
.
code
==
"0"
)
{
this
.
$message
.
success
(
"修改成功!"
);
this
.
$store
.
commit
(
"user/SET_USERINFO"
,
this
.
userInfoForm
);
setUserInfo
(
this
.
userInfoForm
);
}
this
.
loading
=
false
;
this
.
isEditingUserInfo
=
false
;
}
});
}
else
{
this
.
isEditingUserInfo
=
true
;
this
.
userInfoForm
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
userInfo
));
}
},
handleSubmitPwd
()
{
this
.
$refs
.
pwdForm
.
validate
(
async
(
valid
)
=>
{
if
(
valid
)
{
const
{
newPwd
,
oldPwd
}
=
this
.
pwdForm
;
const
params
=
{
newPwd
,
oldPwd
,
};
let
res
=
await
editUserPwd
(
params
);
if
(
res
.
code
==
"0"
)
{
this
.
$message
.
success
(
"修改成功,请重新登录!"
);
this
.
logout
();
}
}
});
},
handleCancelChangeUserInfo
()
{
this
.
isEditingUserInfo
=
false
;
this
.
$refs
.
userInfoForm
.
resetFields
();
},
handleCancelChangePwd
()
{
this
.
showDrawer
=
false
;
this
.
reset
();
},
reset
()
{
this
.
showDrawer
=
false
;
this
.
isUserInfo
=
true
;
this
.
isEditingUserInfo
=
false
;
if
(
this
.
$refs
.
userInfoForm
)
{
this
.
$refs
.
userInfoForm
.
resetFields
();
}
if
(
this
.
$refs
.
pwdForm
)
{
this
.
$refs
.
pwdForm
.
resetFields
();
}
if
(
this
.
loading
)
{
this
.
loading
=
false
;
}
},
handleClose
(
done
)
{
done
();
this
.
reset
();
},
},
},
};
};
</
script
>
</
script
>
...
@@ -130,4 +365,7 @@ export default {
...
@@ -130,4 +365,7 @@ export default {
}
}
}
}
}
}
::v-deep
.el-drawer__body
{
padding
:
10px
60px
0
20px
;
}
</
style
>
</
style
>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论