Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
L
Lic
Project
Project
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
Graph
比较
统计图
议题
0
议题
0
列表
看板
标记
Milestones
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
刘旭
Lic
Commits
7fb823c8
提交
7fb823c8
authored
11月 22, 2022
作者:
刘旭
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
添加修改密码功能
上级
6a06a5af
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
262 行增加
和
185 行删除
+262
-185
lic-build-docker.py
lic-build-docker.py
+3
-3
userAPI.ts
src/services/api/user/userAPI.ts
+20
-11
userManage.vue
src/views/system/userManage.vue
+238
-170
vite.config.ts
vite.config.ts
+1
-1
没有找到文件。
nzwz
-build-docker.py
→
lic
-build-docker.py
浏览文件 @
7fb823c8
...
...
@@ -2,13 +2,13 @@ import os, sys
import
zipfile
import
shutil
cmd
=
"git clone http://192.168.
2.95
:8090/xuxu/Lic
\t\n
"
cmd
=
"git clone http://192.168.
0.27
:8090/xuxu/Lic
\t\n
"
cmd
+=
"cd Lic
\t\n
"
cmd
+=
"yarn install
\t\n
"
cmd
+=
"yarn run build
\t\n
"
cmd
+=
"docker build -t lic-system .
\t\n
"
cmd
+=
"docker tag lic-system 192.168.
2.141
:5000/lic-system
\t\n
"
cmd
+=
"docker push 192.168.
2.141
:5000/lic-system
\t\n
"
cmd
+=
"docker tag lic-system 192.168.
0.26
:5000/lic-system
\t\n
"
cmd
+=
"docker push 192.168.
0.26
:5000/lic-system
\t\n
"
cmd
+=
"cd ..
\t\n
"
cmd
+=
"rm -r -f Lic
\t\n
"
...
...
src/services/api/user/userAPI.ts
浏览文件 @
7fb823c8
import
httpRequest
from
"@/services/common"
;
import
{
userUrlConfig
,
authUrlConfig
}
from
'@/services/config'
;
import
{
store
}
from
'@/store/index'
import
{
userUrlConfig
,
authUrlConfig
}
from
'@/services/config'
;
import
{
LoginParm
,
LoginResult
,
UserInfo
}
from
"@/services/types/user/userModel"
;
import
{
request
}
from
"../config"
;
export
async
function
getImagApi
()
{
//获取验证码接口
...
...
@@ -15,22 +15,22 @@ export async function loginApi(params: LoginParm) {
//获取用户信息
export
const
getInfoApi
=
async
()
=>
{
return
await
httpRequest
.
post
<
UserInfo
>
(
userUrlConfig
.
getUserInfo
,{})
return
await
httpRequest
.
post
<
UserInfo
>
(
userUrlConfig
.
getUserInfo
,
{})
}
//添加用户
export
const
addUser
=
async
(
params
:
any
)
=>
{
return
await
httpRequest
.
post
(
userUrlConfig
[
'addUser'
],
params
)
export
const
addUser
=
async
(
params
:
any
)
=>
{
return
await
httpRequest
.
post
(
userUrlConfig
[
'addUser'
],
params
)
}
//编辑用户
export
const
editUser
=
async
(
params
:
any
)
=>
{
return
await
httpRequest
.
put
(
userUrlConfig
[
'editUser'
],
params
)
export
const
editUser
=
async
(
params
:
any
)
=>
{
return
await
httpRequest
.
put
(
userUrlConfig
[
'editUser'
],
params
)
}
//删除用户
export
const
deleteUser
=
async
(
params
:
any
)
=>
{
return
await
httpRequest
.
delete
(
userUrlConfig
[
'deleteUser'
],
params
)
export
const
deleteUser
=
async
(
params
:
any
)
=>
{
return
await
httpRequest
.
delete
(
userUrlConfig
[
'deleteUser'
],
params
)
}
//查询用户(区别与上面的获取用户信息)
...
...
@@ -44,6 +44,15 @@ export const getAllRole = async () => {
}
//查询当前用户的角色
export
const
findRoleByUser
=
async
(
params
:
any
)
=>
{
return
await
httpRequest
.
get
(
authUrlConfig
[
'findRoleByUser'
],
params
)
export
const
findRoleByUser
=
async
(
params
:
any
)
=>
{
return
await
httpRequest
.
get
(
authUrlConfig
[
'findRoleByUser'
],
params
)
}
// 修改用户信息
export
const
editPassWord
=
(
data
:
any
)
=>
{
return
request
({
url
:
'/userAccount/reset_password'
,
method
:
'post'
,
data
})
}
src/views/system/userManage.vue
浏览文件 @
7fb823c8
<
template
>
<div
class=
"router"
>
<el-form
:inline=
"true"
>
<el-form-item
label=
"账号"
>
<el-input
placeholder=
"账号模糊查询"
></el-input>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
>
查询
</el-button>
</el-form-item>
</el-form>
<el-form
:inline=
"true"
>
<el-form-item>
<el-button
type=
"primary"
@
click=
"handleAdd"
>
添加用户
</el-button>
</el-form-item>
</el-form>
<el-table
:data=
"tableData"
border
>
<el-table-column
type=
"selection"
></el-table-column>
<el-table-column
v-for=
"i in tableColumn"
:label=
"i.label"
:prop=
"i.prop"
>
<template
#
default=
"scope"
v-if=
"i.prop == 'avatar'"
>
<el-avatar
:src=
"scope.row.avatar"
></el-avatar>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
>
<
template
#
default=
"scope"
>
<el-button
type=
"text"
@
click=
"handleEdit(scope)"
>
编辑
</el-button>
<el-divider
direction=
"vertical"
/>
<el-popconfirm
title=
"确认删除?"
@
confirm=
"handleDelete(scope)"
>
<template
#
reference
>
<el-button
type=
"text"
>
删除
</el-button>
</
template
>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-drawer
v-model=
"showDrawer"
:title=
"drawerTitle"
>
<el-form
class=
"form"
ref=
"form"
:rules=
"rules"
:model=
"formData"
size=
"large"
label-position=
"right"
label-width=
"80px"
>
<el-form-item
v-for=
"item in formColumn"
:prop=
"item.prop"
:label=
"item.label"
>
<el-input
v-if=
"item.type == 'input'"
v-model=
"formData[item.prop]"
:placeholder=
"item.placeholder"
></el-input>
<el-upload
v-if=
"item.type == 'avatar'"
>
<img
class=
"avatar"
:src=
"formData[item.prop]"
/>
</el-upload>
<el-date-picker
v-if=
"item.type == 'date'"
v-model=
"formData[item.prop]"
format=
"YYYY-MM-DD"
value-format=
"YYYY-MM-DD"
></el-date-picker>
<el-select
v-if=
"item.type == 'select'"
v-model=
"formData[item.prop]"
multiple
style=
"width: 300px"
>
<el-option
v-for=
"i in roles"
:key=
"i.id"
:label=
"i.roleName"
:value=
"i.id"
></el-option>
</el-select>
<div
class=
"user-containter"
>
<el-form
:inline=
"true"
>
<el-form-item
label=
"账号"
>
<el-input
placeholder=
"账号模糊查询"
></el-input>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
>
查询
</el-button>
</el-form-item>
</el-form>
<el-form
:inline=
"true"
>
<el-form-item>
<el-button
@
click=
"showDrawer = false"
>
关闭
</el-button>
<el-button
type=
"primary"
@
click=
"handleSubmit"
>
{{drawerTitle}}
</el-button>
<el-button
type=
"primary"
@
click=
"handleAdd"
>
添加用户
</el-button>
</el-form-item>
</el-form>
</el-drawer>
</div>
<el-table
:data=
"tableData"
border
>
<el-table-column
type=
"selection"
></el-table-column>
<el-table-column
v-for=
"i in tableColumn"
:label=
"i.label"
:prop=
"i.prop"
:width=
"i.width"
align=
"center"
>
<template
#
default=
"scope"
v-if=
"i.prop == 'avatar'"
>
<el-avatar
:src=
"scope.row.avatar"
></el-avatar>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"200px"
align=
"center"
fixed=
"right"
>
<
template
#
default=
"scope"
>
<el-button
type=
"text"
@
click=
"handleEditPwd(scope.row)"
>
修改密码
</el-button>
<el-divider
direction=
"vertical"
/>
<el-button
type=
"text"
@
click=
"handleEdit(scope)"
>
编辑
</el-button>
<el-divider
direction=
"vertical"
/>
<el-popconfirm
title=
"确认删除?"
@
confirm=
"handleDelete(scope)"
>
<template
#
reference
>
<el-button
type=
"text"
>
删除
</el-button>
</
template
>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-drawer
v-model=
"showDrawer"
:title=
"drawerTitle"
>
<el-form
class=
"form"
ref=
"form"
:rules=
"rules"
:model=
"formData"
size=
"large"
label-position=
"right"
label-width=
"80px"
>
<el-form-item
v-for=
"item in formColumn"
:prop=
"item.prop"
:label=
"item.label"
>
<el-input
v-if=
"item.type == 'input'"
v-model=
"formData[item.prop]"
:placeholder=
"item.placeholder"
>
</el-input>
<el-upload
v-if=
"item.type == 'avatar'"
>
<img
class=
"avatar"
:src=
"formData[item.prop]"
/>
</el-upload>
<el-date-picker
v-if=
"item.type == 'date'"
v-model=
"formData[item.prop]"
format=
"YYYY-MM-DD"
value-format=
"YYYY-MM-DD"
></el-date-picker>
<el-select
v-if=
"item.type == 'select'"
v-model=
"formData[item.prop]"
multiple
style=
"width: 300px"
>
<el-option
v-for=
"i in roles"
:key=
"i.id"
:label=
"i.roleName"
:value=
"i.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
@
click=
"showDrawer = false"
>
关闭
</el-button>
<el-button
type=
"primary"
@
click=
"handleSubmit"
>
{{ drawerTitle }}
</el-button>
</el-form-item>
</el-form>
</el-drawer>
<el-dialog
v-model=
"showDialog"
title=
"修改密码"
width=
"30%"
>
<el-form
:model=
"editPwdData"
ref=
"editPwdRef"
:rules=
"rules"
label-width=
"80px"
>
<el-form-item
label=
"用户账号"
>
<el-input
v-model=
"editPwdData.account"
:disabled=
"true"
/>
</el-form-item>
<el-form-item
label=
"密码"
prop=
"password"
>
<el-input
v-model=
"editPwdData.password"
type=
"password"
show-password
clearable
placeholder=
"请输入密码"
/>
</el-form-item>
</el-form>
<
template
#
footer
>
<el-button
@
click=
"showDialog = false"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"handlePwdAdd"
>
确认
</el-button>
</
template
>
</el-dialog>
</div>
</template>
<
script
setup
lang=
"ts"
>
import
{
reactive
,
ref
}
from
'vue'
import
{
addUser
,
getUserInfo
,
editUser
,
deleteUser
,
getAllRole
,
findRoleByUser
}
from
'@/services/api/user/userAPI'
import
{
reactive
,
ref
}
from
'vue'
import
{
addUser
,
getUserInfo
,
editUser
,
deleteUser
,
getAllRole
,
findRoleByUser
,
editPassWord
}
from
'@/services/api/user/userAPI'
import
{
valid
}
from
'mockjs'
;
const
showDialog
=
ref
(
false
)
const
editPwdRef
=
ref
()
const
editPwdData
=
ref
({
password
:
''
,
account
:
''
})
const
tableColumn
=
reactive
([
{
label
:
'用户账号'
,
prop
:
'fauthAccount'
label
:
'用户账号'
,
prop
:
'fauthAccount'
,
width
:
''
},
{
label
:
'用户名'
,
prop
:
'name'
label
:
'用户名'
,
prop
:
'name'
,
width
:
''
},
{
label
:
'工号'
,
prop
:
'fworkNo'
label
:
'工号'
,
prop
:
'fworkNo'
,
width
:
''
},
{
label
:
'工作地点'
,
prop
:
'fworkAddr'
label
:
'工作地点'
,
prop
:
'fworkAddr'
,
width
:
''
},
{
label
:
'状态'
,
prop
:
'fstate'
label
:
'状态'
,
prop
:
'fstate'
,
width
:
''
},
{
label
:
'职位'
,
prop
:
'fposition'
label
:
'职位'
,
prop
:
'fposition'
,
width
:
''
},
{
label
:
'入职日期'
,
prop
:
'finductionDate'
label
:
'入职日期'
,
prop
:
'finductionDate'
,
width
:
'155px'
},
{
label
:
'英文名'
,
prop
:
'fenglishName'
label
:
'英文名'
,
prop
:
'fenglishName'
,
width
:
''
},
{
label
:
'部门'
,
prop
:
'fdept'
label
:
'部门'
,
prop
:
'fdept'
,
width
:
''
},
{
label
:
'头像'
,
prop
:
'avatar'
label
:
'头像'
,
prop
:
'avatar'
,
width
:
''
},
{
label
:
'创建人'
,
prop
:
'fcreator'
label
:
'创建人'
,
prop
:
'fcreator'
,
width
:
''
},
{
label
:
'创建日期'
,
prop
:
'fdate'
label
:
'创建日期'
,
prop
:
'fdate'
,
width
:
'155px'
}
])
let
tableData
=
ref
([])
const
form
=
ref
()
let
formColumn
=
reactive
([
{
label
:
'用户账号'
,
prop
:
'fauthAccount'
,
type
:
'input'
,
placeholder
:
'请输入用户账号'
label
:
'用户账号'
,
prop
:
'fauthAccount'
,
type
:
'input'
,
placeholder
:
'请输入用户账号'
},
{
label
:
'用户名'
,
prop
:
'name'
,
type
:
'input'
,
placeholder
:
'请输入用户名'
label
:
'用户名'
,
prop
:
'name'
,
type
:
'input'
,
placeholder
:
'请输入用户名'
},
{
label
:
'用户介绍'
,
prop
:
'introduction'
,
type
:
'input'
,
placeholder
:
'请输入用户介绍'
label
:
'用户介绍'
,
prop
:
'introduction'
,
type
:
'input'
,
placeholder
:
'请输入用户介绍'
},
{
label
:
'工号'
,
prop
:
'fworkNo'
,
type
:
'input'
,
placeholder
:
'请输入工号'
label
:
'工号'
,
prop
:
'fworkNo'
,
type
:
'input'
,
placeholder
:
'请输入工号'
},
{
label
:
'工作地点'
,
prop
:
'fworkAddr'
,
type
:
'input'
,
placeholder
:
'请输入工作地点'
label
:
'工作地点'
,
prop
:
'fworkAddr'
,
type
:
'input'
,
placeholder
:
'请输入工作地点'
},
{
label
:
'状态'
,
prop
:
'fstate'
,
type
:
'input'
,
placeholder
:
'请输入状态'
label
:
'状态'
,
prop
:
'fstate'
,
type
:
'input'
,
placeholder
:
'请输入状态'
},
{
label
:
'角色分配'
,
prop
:
'roles'
,
type
:
'select'
,
placeholder
:
'分配角色'
label
:
'角色分配'
,
prop
:
'roles'
,
type
:
'select'
,
placeholder
:
'分配角色'
},
{
label
:
'职位'
,
prop
:
'fposition'
,
type
:
'input'
,
placeholder
:
'请输入职位'
label
:
'职位'
,
prop
:
'fposition'
,
type
:
'input'
,
placeholder
:
'请输入职位'
},
{
label
:
'手机'
,
prop
:
'fphone'
,
type
:
'input'
,
placeholder
:
'请输入手机'
label
:
'手机'
,
prop
:
'fphone'
,
type
:
'input'
,
placeholder
:
'请输入手机'
},
{
label
:
'邮箱'
,
prop
:
'fmail'
,
type
:
'input'
,
placeholder
:
'请输入邮箱'
label
:
'邮箱'
,
prop
:
'fmail'
,
type
:
'input'
,
placeholder
:
'请输入邮箱'
},
{
label
:
'入职日期'
,
prop
:
'finductionDate'
,
type
:
'date'
,
placeholder
:
'请输入入职日期'
label
:
'入职日期'
,
prop
:
'finductionDate'
,
type
:
'date'
,
placeholder
:
'请输入入职日期'
},
{
label
:
'英文名'
,
prop
:
'fenglishName'
,
type
:
'input'
,
placeholder
:
'请输入英文名'
label
:
'英文名'
,
prop
:
'fenglishName'
,
type
:
'input'
,
placeholder
:
'请输入英文名'
},
{
label
:
'部门'
,
prop
:
'fdept'
,
type
:
'input'
,
placeholder
:
'请输入部门'
label
:
'部门'
,
prop
:
'fdept'
,
type
:
'input'
,
placeholder
:
'请输入部门'
},
{
label
:
'头像'
,
prop
:
'avatar'
,
type
:
'avatar'
label
:
'头像'
,
prop
:
'avatar'
,
type
:
'avatar'
}
])
const
rules
=
reactive
({
fauthAccount
:[
{
required
:
true
,
message
:
'请输入用户账号'
,
trigger
:
'blur'
}
fauthAccount
:
[
{
required
:
true
,
message
:
'请输入用户账号'
,
trigger
:
'blur'
}
],
name
:[
{
required
:
true
,
message
:
'请输入用户名'
,
trigger
:
'blur'
}
name
:
[
{
required
:
true
,
message
:
'请输入用户名'
,
trigger
:
'blur'
}
],
password
:[
{
required
:
true
,
message
:
'请输入登录密码'
,
trigger
:
'blur'
}
password
:
[
{
required
:
true
,
message
:
'请输入登录密码'
,
trigger
:
'blur'
}
]
})
let
formData
=
ref
<
any
>
({})
...
...
@@ -211,40 +253,59 @@ let showDrawer = ref(false)
let
roles
=
ref
<
any
>
([])
function
init
(){
function
init
()
{
getUserInfo
().
then
((
res
)
=>
{
if
(
res
.
code
==
200
)
{
if
(
res
.
code
==
200
)
{
tableData
.
value
=
res
.
data
.
records
}
})
getAllRole
().
then
((
res
)
=>
{
if
(
res
.
code
==
200
)
{
if
(
res
.
code
==
200
)
{
roles
.
value
=
res
.
data
}
})
}
function
handleEdit
(
scope
:
any
){
function
handleEditPwd
(
row
:
any
)
{
editPwdData
.
value
.
password
=
''
editPwdData
.
value
.
account
=
row
.
fauthAccount
showDialog
.
value
=
true
}
function
handlePwdAdd
()
{
editPwdRef
.
value
?.
validate
((
valid
:
boolean
)
=>
{
if
(
valid
)
{
editPassWord
(
editPwdData
.
value
).
then
((
res
:
any
)
=>
{
if
(
res
.
code
===
200
)
{
showDialog
.
value
=
false
}
})
}
})
}
function
handleEdit
(
scope
:
any
)
{
formData
.
value
=
{}
let
params
=
{
userId
:
scope
.
row
.
userId
userId
:
scope
.
row
.
userId
}
findRoleByUser
(
params
).
then
((
res
)
=>
{
if
(
res
.
code
==
200
)
{
if
(
res
.
code
==
200
)
{
formData
.
value
.
roles
=
res
.
data
}
})
for
(
let
i
in
scope
.
row
)
{
for
(
let
i
in
scope
.
row
)
{
formData
.
value
[
i
]
=
scope
.
row
[
i
]
}
for
(
let
j
in
formColumn
)
{
if
(
formColumn
[
j
].
prop
==
'password'
)
{
formColumn
.
splice
(
Number
(
j
),
1
)
for
(
let
j
in
formColumn
)
{
if
(
formColumn
[
j
].
prop
==
'password'
)
{
formColumn
.
splice
(
Number
(
j
),
1
)
break
}
}
for
(
let
k
in
formData
.
value
)
{
if
(
k
==
'password'
)
{
for
(
let
k
in
formData
.
value
)
{
if
(
k
==
'password'
)
{
delete
formData
[
k
]
break
}
...
...
@@ -253,24 +314,24 @@ function handleEdit(scope:any){
showDrawer
.
value
=
true
}
function
handleAdd
(){
function
handleAdd
()
{
formData
.
value
=
{}
formColumn
.
splice
(
1
,
0
,
{
label
:
'登录密码'
,
prop
:
'password'
,
type
:
'input'
,
placeholder
:
'请输入登录密码'
formColumn
.
splice
(
1
,
0
,
{
label
:
'登录密码'
,
prop
:
'password'
,
type
:
'input'
,
placeholder
:
'请输入登录密码'
})
drawerTitle
.
value
=
'添加'
showDrawer
.
value
=
true
}
function
handleSubmit
(){
if
(
drawerTitle
.
value
==
'添加'
)
{
form
.
value
.
validate
((
valid
:
boolean
)
=>
{
if
(
valid
)
{
function
handleSubmit
()
{
if
(
drawerTitle
.
value
==
'添加'
)
{
form
.
value
.
validate
((
valid
:
boolean
)
=>
{
if
(
valid
)
{
addUser
(
formData
.
value
).
then
((
res
)
=>
{
if
(
res
.
code
==
200
)
{
if
(
res
.
code
==
200
)
{
init
()
showDrawer
.
value
=
false
}
...
...
@@ -278,11 +339,11 @@ function handleSubmit(){
}
})
}
if
(
drawerTitle
.
value
==
'编辑'
)
{
form
.
value
.
validate
((
valid
:
boolean
)
=>
{
if
(
valid
)
{
if
(
drawerTitle
.
value
==
'编辑'
)
{
form
.
value
.
validate
((
valid
:
boolean
)
=>
{
if
(
valid
)
{
editUser
(
formData
.
value
).
then
((
res
)
=>
{
if
(
res
.
code
==
200
)
{
if
(
res
.
code
==
200
)
{
init
()
showDrawer
.
value
=
false
}
...
...
@@ -292,12 +353,12 @@ function handleSubmit(){
}
}
function
handleDelete
(
scope
:
any
)
{
function
handleDelete
(
scope
:
any
)
{
let
params
=
{
userId
:
scope
.
row
.
userId
userId
:
scope
.
row
.
userId
}
deleteUser
(
params
).
then
((
res
)
=>
{
if
(
res
.
code
==
200
)
{
if
(
res
.
code
==
200
)
{
init
()
}
})
...
...
@@ -307,19 +368,25 @@ init()
</
script
>
<
style
scoped
>
.form
{
.user-containter
{
padding
:
20px
;
}
.form
{
overflow-x
:
hidden
;
overflow-y
:
auto
;
height
:
calc
(
100vh
-
120px
);
}
.avatar
{
.avatar
{
width
:
120px
;
height
:
120px
;
display
:
block
;
}
.el-dropdown-link
{
cursor
:
pointer
;
color
:
var
(
--el-color-primary
);
align-items
:
center
;
cursor
:
pointer
;
color
:
var
(
--el-color-primary
);
align-items
:
center
;
}
</
style
>
\ No newline at end of file
vite.config.ts
浏览文件 @
7fb823c8
...
...
@@ -85,7 +85,7 @@ export default ({ command, mode }) => {
// '/foo': '',
// 选项写法
"/lic"
:
{
target
:
'http://192.168.
2.56
:8090/'
target
:
'http://192.168.
0.37
:8090/'
// rewrite: (path) => path.replace(/^\/api/, '')
},
// 正则表达式写法
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论