Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
new-api
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
9f23e16a
authored
Apr 24, 2024
by
Calcium-Ion
Committed by
GitHub
Apr 24, 2024
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #213 from iszcz/pr
用户管理页-新增分组查询
parents
d0500cf1
e00a4684
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
72 additions
and
13 deletions
+72
-13
controller/user.go
+2
-1
model/user.go
+17
-8
web/src/components/UsersTable.js
+53
-4
No files found.
controller/user.go
View file @
9f23e16a
...
@@ -216,7 +216,8 @@ func GetAllUsers(c *gin.Context) {
...
@@ -216,7 +216,8 @@ func GetAllUsers(c *gin.Context) {
func
SearchUsers
(
c
*
gin
.
Context
)
{
func
SearchUsers
(
c
*
gin
.
Context
)
{
keyword
:=
c
.
Query
(
"keyword"
)
keyword
:=
c
.
Query
(
"keyword"
)
users
,
err
:=
model
.
SearchUsers
(
keyword
)
group
:=
c
.
Query
(
"group"
)
users
,
err
:=
model
.
SearchUsers
(
keyword
,
group
)
if
err
!=
nil
{
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"success"
:
false
,
...
...
model/user.go
View file @
9f23e16a
...
@@ -73,25 +73,34 @@ func GetAllUsers(startIdx int, num int) (users []*User, err error) {
...
@@ -73,25 +73,34 @@ func GetAllUsers(startIdx int, num int) (users []*User, err error) {
return
users
,
err
return
users
,
err
}
}
func
SearchUsers
(
keyword
string
)
([]
*
User
,
error
)
{
func
SearchUsers
(
keyword
string
,
group
string
)
([]
*
User
,
error
)
{
var
users
[]
*
User
var
users
[]
*
User
var
err
error
var
err
error
// 尝试将关键字转换为整数ID
// 尝试将关键字转换为整数ID
keywordInt
,
err
:=
strconv
.
Atoi
(
keyword
)
keywordInt
,
err
:=
strconv
.
Atoi
(
keyword
)
if
err
==
nil
{
if
err
==
nil
{
// 如果转换成功,按照ID搜索用户
// 如果转换成功,按照ID和可选的组别搜索用户
err
=
DB
.
Unscoped
()
.
Omit
(
"password"
)
.
Where
(
"id = ?"
,
keywordInt
)
.
Find
(
&
users
)
.
Error
query
:=
DB
.
Unscoped
()
.
Omit
(
"password"
)
.
Where
(
"`id` = ?"
,
keywordInt
)
if
group
!=
""
{
query
=
query
.
Where
(
"`group` = ?"
,
group
)
// 使用反引号包围group
}
err
=
query
.
Find
(
&
users
)
.
Error
if
err
!=
nil
||
len
(
users
)
>
0
{
if
err
!=
nil
||
len
(
users
)
>
0
{
// 如果依据ID找到用户或者发生错误,返回结果或错误
return
users
,
err
return
users
,
err
}
}
}
}
// 如果ID转换失败或者没有找到用户,依据其他字段进行模糊搜索
err
=
nil
err
=
DB
.
Unscoped
()
.
Omit
(
"password"
)
.
Where
(
"username LIKE ? OR email LIKE ? OR display_name LIKE ?"
,
keyword
+
"%"
,
keyword
+
"%"
,
keyword
+
"%"
)
.
query
:=
DB
.
Unscoped
()
.
Omit
(
"password"
)
Find
(
&
users
)
.
Error
likeCondition
:=
"`username` LIKE ? OR `email` LIKE ? OR `display_name` LIKE ?"
if
group
!=
""
{
query
=
query
.
Where
(
"("
+
likeCondition
+
") AND `group` = ?"
,
"%"
+
keyword
+
"%"
,
"%"
+
keyword
+
"%"
,
"%"
+
keyword
+
"%"
,
group
)
}
else
{
query
=
query
.
Where
(
likeCondition
,
"%"
+
keyword
+
"%"
,
"%"
+
keyword
+
"%"
,
"%"
+
keyword
+
"%"
)
}
err
=
query
.
Find
(
&
users
)
.
Error
return
users
,
err
return
users
,
err
}
}
...
...
web/src/components/UsersTable.js
View file @
9f23e16a
...
@@ -235,6 +235,8 @@ const UsersTable = () => {
...
@@ -235,6 +235,8 @@ const UsersTable = () => {
const
[
activePage
,
setActivePage
]
=
useState
(
1
);
const
[
activePage
,
setActivePage
]
=
useState
(
1
);
const
[
searchKeyword
,
setSearchKeyword
]
=
useState
(
''
);
const
[
searchKeyword
,
setSearchKeyword
]
=
useState
(
''
);
const
[
searching
,
setSearching
]
=
useState
(
false
);
const
[
searching
,
setSearching
]
=
useState
(
false
);
const
[
searchGroup
,
setSearchGroup
]
=
useState
(
''
);
const
[
groupOptions
,
setGroupOptions
]
=
useState
([]);
const
[
userCount
,
setUserCount
]
=
useState
(
ITEMS_PER_PAGE
);
const
[
userCount
,
setUserCount
]
=
useState
(
ITEMS_PER_PAGE
);
const
[
showAddUser
,
setShowAddUser
]
=
useState
(
false
);
const
[
showAddUser
,
setShowAddUser
]
=
useState
(
false
);
const
[
showEditUser
,
setShowEditUser
]
=
useState
(
false
);
const
[
showEditUser
,
setShowEditUser
]
=
useState
(
false
);
...
@@ -298,6 +300,7 @@ const UsersTable = () => {
...
@@ -298,6 +300,7 @@ const UsersTable = () => {
.
catch
((
reason
)
=>
{
.
catch
((
reason
)
=>
{
showError
(
reason
);
showError
(
reason
);
});
});
fetchGroups
().
then
();
},
[]);
},
[]);
const
manageUser
=
async
(
username
,
action
,
record
)
=>
{
const
manageUser
=
async
(
username
,
action
,
record
)
=>
{
...
@@ -340,15 +343,15 @@ const UsersTable = () => {
...
@@ -340,15 +343,15 @@ const UsersTable = () => {
}
}
};
};
const
searchUsers
=
async
()
=>
{
const
searchUsers
=
async
(
searchKeyword
,
searchGroup
)
=>
{
if
(
searchKeyword
===
''
)
{
if
(
searchKeyword
===
''
&&
searchGroup
===
''
)
{
// if keyword is blank, load files instead.
// if keyword is blank, load files instead.
await
loadUsers
(
0
);
await
loadUsers
(
0
);
setActivePage
(
1
);
setActivePage
(
1
);
return
;
return
;
}
}
setSearching
(
true
);
setSearching
(
true
);
const
res
=
await
API
.
get
(
`/api/user/search?keyword=
${
searchKeyword
}
`
);
const
res
=
await
API
.
get
(
`/api/user/search?keyword=
${
searchKeyword
}
&group=
${
searchGroup
}
`
);
const
{
success
,
message
,
data
}
=
res
.
data
;
const
{
success
,
message
,
data
}
=
res
.
data
;
if
(
success
)
{
if
(
success
)
{
setUsers
(
data
);
setUsers
(
data
);
...
@@ -409,6 +412,25 @@ const UsersTable = () => {
...
@@ -409,6 +412,25 @@ const UsersTable = () => {
}
}
};
};
const
fetchGroups
=
async
()
=>
{
try
{
let
res
=
await
API
.
get
(
`/api/group/`
);
// add 'all' option
// res.data.data.unshift('all');
if
(
res
===
undefined
)
{
return
;
}
setGroupOptions
(
res
.
data
.
data
.
map
((
group
)
=>
({
label
:
group
,
value
:
group
,
})),
);
}
catch
(
error
)
{
showError
(
error
.
message
);
}
};
return
(
return
(
<>
<>
<
AddUser
<
AddUser
...
@@ -422,7 +444,14 @@ const UsersTable = () => {
...
@@ -422,7 +444,14 @@ const UsersTable = () => {
handleClose
=
{
closeEditUser
}
handleClose
=
{
closeEditUser
}
editingUser
=
{
editingUser
}
editingUser
=
{
editingUser
}
><
/EditUser
>
><
/EditUser
>
<
Form
onSubmit
=
{
searchUsers
}
>
<
Form
onSubmit
=
{()
=>
{
searchUsers
(
searchKeyword
,
searchGroup
);
}}
labelPosition
=
'left'
>
<
div
style
=
{{
display
:
'flex'
}}
>
<
Space
>
<
Form
.
Input
<
Form
.
Input
label
=
'搜索关键字'
label
=
'搜索关键字'
icon
=
'search'
icon
=
'search'
...
@@ -433,6 +462,26 @@ const UsersTable = () => {
...
@@ -433,6 +462,26 @@ const UsersTable = () => {
loading
=
{
searching
}
loading
=
{
searching
}
onChange
=
{(
value
)
=>
handleKeywordChange
(
value
)}
onChange
=
{(
value
)
=>
handleKeywordChange
(
value
)}
/
>
/
>
<
Form
.
Select
field
=
'group'
label
=
'分组'
optionList
=
{
groupOptions
}
onChange
=
{(
value
)
=>
{
setSearchGroup
(
value
);
searchUsers
(
searchKeyword
,
value
);
}}
/
>
<
Button
label
=
'查询'
type
=
'primary'
htmlType
=
'submit'
className
=
'btn-margin-right'
style
=
{{
marginRight
:
8
}}
>
查询
<
/Button
>
<
/Space
>
<
/div
>
<
/Form
>
<
/Form
>
<
Table
<
Table
...
...
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