Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dlink
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhaowei
dlink
Commits
b5c8b97f
Commit
b5c8b97f
authored
Nov 28, 2021
by
wenmo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
用户管理
parent
2861e551
Changes
31
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
939 additions
and
297 deletions
+939
-297
README.md
README.md
+2
-0
pom.xml
dlink-admin/pom.xml
+9
-0
SaTokenConfigure.java
...n/src/main/java/com/dlink/configure/SaTokenConfigure.java
+24
-0
AdminController.java
...n/src/main/java/com/dlink/controller/AdminController.java
+19
-11
UserController.java
...in/src/main/java/com/dlink/controller/UserController.java
+93
-0
ISuperService.java
...min/src/main/java/com/dlink/db/service/ISuperService.java
+7
-0
SuperServiceImpl.java
...main/java/com/dlink/db/service/impl/SuperServiceImpl.java
+33
-0
ProTableUtil.java
...k-admin/src/main/java/com/dlink/db/util/ProTableUtil.java
+6
-2
LoginUTO.java
dlink-admin/src/main/java/com/dlink/dto/LoginUTO.java
+18
-0
UserMapper.java
dlink-admin/src/main/java/com/dlink/mapper/UserMapper.java
+15
-0
User.java
dlink-admin/src/main/java/com/dlink/model/User.java
+31
-0
UserService.java
dlink-admin/src/main/java/com/dlink/service/UserService.java
+24
-0
UserServiceImpl.java
...src/main/java/com/dlink/service/impl/UserServiceImpl.java
+96
-0
application.yml
dlink-admin/src/main/resources/application.yml
+16
-7
UserMapper.xml
dlink-admin/src/main/resources/mapper/UserMapper.xml
+32
-0
AdminTest.java
dlink-admin/src/test/java/com/dlink/admin/AdminTest.java
+20
-0
dlink.sql
dlink-doc/sql/dlink.sql
+21
-0
dlink_history.sql
dlink-doc/sql/dlink_history.sql
+19
-0
app.tsx
dlink-web/src/app.tsx
+8
-48
_mock.ts
dlink-web/src/pages/Dbase/User/_mock.ts
+0
-169
CreateForm.tsx
dlink-web/src/pages/Dbase/User/components/CreateForm.tsx
+0
-25
index.less
dlink-web/src/pages/Dbase/User/index.less
+0
-0
service.ts
dlink-web/src/pages/Dbase/User/service.ts
+0
-31
index.tsx
dlink-web/src/pages/Settings/index.tsx
+16
-4
Welcome.tsx
dlink-web/src/pages/Welcome.tsx
+3
-0
index.tsx
dlink-web/src/pages/user/Login/index.tsx
+6
-0
UserForm.tsx
dlink-web/src/pages/user/components/UserForm.tsx
+113
-0
data.d.ts
dlink-web/src/pages/user/data.d.ts
+13
-0
index.tsx
dlink-web/src/pages/user/index.tsx
+287
-0
typings.d.ts
dlink-web/src/services/ant-design-pro/typings.d.ts
+2
-0
pom.xml
pom.xml
+6
-0
No files found.
README.md
View file @
b5c8b97f
...
@@ -29,6 +29,7 @@ DataLink 开源项目及社区正在建设,希望本项目可以帮助你更
...
@@ -29,6 +29,7 @@ DataLink 开源项目及社区正在建设,希望本项目可以帮助你更
| | 数据源管理 | 已实现 |
| | 数据源管理 | 已实现 |
| | 文档管理 | 已实现 |
| | 文档管理 | 已实现 |
| | 系统配置 | 已实现 |
| | 系统配置 | 已实现 |
| | 用户管理 | 已实现 |
| FlinkSQL 语法增强 | SQL 片段语法 | 已实现 |
| FlinkSQL 语法增强 | SQL 片段语法 | 已实现 |
| | AGGTABLE 语法 | 已实现 |
| | AGGTABLE 语法 | 已实现 |
| | 语句集 | 已实现 |
| | 语句集 | 已实现 |
...
@@ -41,6 +42,7 @@ DataLink 开源项目及社区正在建设,希望本项目可以帮助你更
...
@@ -41,6 +42,7 @@ DataLink 开源项目及社区正在建设,希望本项目可以帮助你更
| | 关键字高亮 | 已实现 |
| | 关键字高亮 | 已实现 |
| | 结构折叠与缩略图 | 已实现 |
| | 结构折叠与缩略图 | 已实现 |
| | 支持选中提交 | 已实现 |
| | 支持选中提交 | 已实现 |
| | 布局拖拽 | 已实现 |
| | SELECT、SHOW等语法数据预览 | 已实现 |
| | SELECT、SHOW等语法数据预览 | 已实现 |
| | JobGraph 图预览 | 已实现 |
| | JobGraph 图预览 | 已实现 |
| Flink 任务运维 | standalone SQL提交 | 已实现 |
| Flink 任务运维 | standalone SQL提交 | 已实现 |
...
...
dlink-admin/pom.xml
View file @
b5c8b97f
...
@@ -101,6 +101,15 @@
...
@@ -101,6 +101,15 @@
<groupId>org.flywaydb</groupId>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<artifactId>flyway-core</artifactId>
</dependency>-->
</dependency>-->
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
cn.dev33
</groupId>
<artifactId>
sa-token-spring-boot-starter
</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>
com.dlink
</groupId>
<groupId>
com.dlink
</groupId>
<artifactId>
dlink-core
</artifactId>
<artifactId>
dlink-core
</artifactId>
...
...
dlink-admin/src/main/java/com/dlink/configure/SaTokenConfigure.java
0 → 100644
View file @
b5c8b97f
package
com
.
dlink
.
configure
;
import
cn.dev33.satoken.interceptor.SaRouteInterceptor
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurer
;
/**
* SaTokenConfigure
*
* @author wenmo
* @since 2021/11/28 19:35
*/
@Configuration
public
class
SaTokenConfigure
implements
WebMvcConfigurer
{
// 注册拦截器
@Override
public
void
addInterceptors
(
InterceptorRegistry
registry
)
{
// 注册Sa-Token的路由拦截器
registry
.
addInterceptor
(
new
SaRouteInterceptor
())
.
addPathPatterns
(
"/**"
)
.
excludePathPatterns
(
"/api/login"
);
}
}
dlink-admin/src/main/java/com/dlink/controller/AdminController.java
View file @
b5c8b97f
package
com
.
dlink
.
controller
;
package
com
.
dlink
.
controller
;
import
cn.dev33.satoken.stp.StpUtil
;
import
com.dlink.assertion.Asserts
;
import
com.dlink.common.result.Result
;
import
com.dlink.common.result.Result
;
import
com.dlink.dto.LoginUTO
;
import
com.dlink.model.Task
;
import
com.dlink.model.Task
;
import
com.dlink.model.User
;
import
com.dlink.model.User
;
import
com.dlink.service.UserService
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
...
@@ -18,27 +23,26 @@ import org.springframework.web.bind.annotation.*;
...
@@ -18,27 +23,26 @@ import org.springframework.web.bind.annotation.*;
@RequestMapping
(
"/api"
)
@RequestMapping
(
"/api"
)
public
class
AdminController
{
public
class
AdminController
{
@Value
(
"${dlink.login.username}"
)
@Autowired
private
String
username
;
private
UserService
userService
;
@Value
(
"${dlink.login.password}"
)
private
String
password
;
/**
/**
* 登录
* 登录
*/
*/
@PostMapping
(
"/login"
)
@PostMapping
(
"/login"
)
public
Result
login
(
@RequestBody
User
user
)
throws
Exception
{
public
Result
login
(
@RequestBody
LoginUTO
loginUTO
)
{
if
(
username
.
equals
(
user
.
getUsername
())&&
password
.
equals
(
user
.
getPassword
()))
{
if
(
Asserts
.
isNull
(
loginUTO
.
isAutoLogin
())){
return
Result
.
succeed
(
username
,
"登录成功"
);
loginUTO
.
setAutoLogin
(
false
);
}
else
{
return
Result
.
failed
(
"验证失败"
);
}
}
return
userService
.
loginUser
(
loginUTO
.
getUsername
(),
loginUTO
.
getPassword
(),
loginUTO
.
isAutoLogin
());
}
}
/**
/**
* 退出
* 退出
*/
*/
@DeleteMapping
(
"/outLogin"
)
@DeleteMapping
(
"/outLogin"
)
public
Result
outLogin
()
throws
Exception
{
public
Result
outLogin
()
{
StpUtil
.
logout
();
return
Result
.
succeed
(
"退出成功"
);
return
Result
.
succeed
(
"退出成功"
);
}
}
...
@@ -47,6 +51,10 @@ public class AdminController {
...
@@ -47,6 +51,10 @@ public class AdminController {
*/
*/
@GetMapping
(
"/current"
)
@GetMapping
(
"/current"
)
public
Result
current
()
throws
Exception
{
public
Result
current
()
throws
Exception
{
return
Result
.
succeed
(
username
,
"获取成功"
);
try
{
return
Result
.
succeed
(
StpUtil
.
getSession
().
get
(
"user"
),
"获取成功"
);
}
catch
(
Exception
e
){
return
Result
.
failed
(
"获取失败"
);
}
}
}
}
}
dlink-admin/src/main/java/com/dlink/controller/UserController.java
0 → 100644
View file @
b5c8b97f
package
com
.
dlink
.
controller
;
import
com.dlink.assertion.Asserts
;
import
com.dlink.common.result.ProTableResult
;
import
com.dlink.common.result.Result
;
import
com.dlink.gateway.result.TestResult
;
import
com.dlink.model.ClusterConfiguration
;
import
com.dlink.model.User
;
import
com.dlink.service.UserService
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* UserController
*
* @author wenmo
* @since 2021/11/28 13:43
*/
@Slf4j
@RestController
@RequestMapping
(
"/api/user"
)
public
class
UserController
{
@Autowired
private
UserService
userService
;
/**
* 新增或者更新
*/
@PutMapping
public
Result
saveOrUpdate
(
@RequestBody
User
user
)
{
if
(
Asserts
.
isNull
(
user
.
getId
()))
{
return
userService
.
registerUser
(
user
);
}
else
{
userService
.
modifyUser
(
user
);
return
Result
.
succeed
(
"修改成功"
);
}
}
/**
* 动态查询列表
*/
@PostMapping
public
ProTableResult
<
User
>
listClusterConfigs
(
@RequestBody
JsonNode
para
)
{
return
userService
.
selectForProTable
(
para
,
true
);
}
/**
* 批量删除
*/
@DeleteMapping
public
Result
deleteMul
(
@RequestBody
JsonNode
para
)
{
if
(
para
.
size
()
>
0
)
{
List
<
Integer
>
error
=
new
ArrayList
<>();
for
(
final
JsonNode
item
:
para
)
{
Integer
id
=
item
.
asInt
();
if
(
checkAdmin
(
id
)){
error
.
add
(
id
);
continue
;
}
if
(!
userService
.
removeUser
(
id
))
{
error
.
add
(
id
);
}
}
if
(
error
.
size
()
==
0
)
{
return
Result
.
succeed
(
"删除成功"
);
}
else
{
return
Result
.
succeed
(
"删除部分成功,但"
+
error
.
toString
()
+
"删除失败,共"
+
error
.
size
()
+
"次失败。"
);
}
}
else
{
return
Result
.
failed
(
"请选择要删除的记录"
);
}
}
private
static
boolean
checkAdmin
(
Integer
id
)
{
return
id
==
0
;
}
/**
* 获取指定ID的信息
*/
@PostMapping
(
"/getOneById"
)
public
Result
getOneById
(
@RequestBody
User
user
)
{
user
=
userService
.
getById
(
user
.
getId
());
return
Result
.
succeed
(
user
,
"获取成功"
);
}
}
dlink-admin/src/main/java/com/dlink/db/service/ISuperService.java
View file @
b5c8b97f
...
@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
...
@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
import
com.dlink.common.result.ProTableResult
;
import
com.dlink.common.result.ProTableResult
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
/**
/**
* ISuperService
* ISuperService
...
@@ -15,4 +18,8 @@ public interface ISuperService<T> extends IService<T> {
...
@@ -15,4 +18,8 @@ public interface ISuperService<T> extends IService<T> {
ProTableResult
<
T
>
selectForProTable
(
JsonNode
para
);
ProTableResult
<
T
>
selectForProTable
(
JsonNode
para
);
ProTableResult
<
T
>
selectForProTable
(
JsonNode
para
,
boolean
isDelete
);
ProTableResult
<
T
>
selectForProTable
(
JsonNode
para
,
Map
<
String
,
Object
>
paraMap
);
}
}
dlink-admin/src/main/java/com/dlink/db/service/impl/SuperServiceImpl.java
View file @
b5c8b97f
...
@@ -3,6 +3,7 @@ package com.dlink.db.service.impl;
...
@@ -3,6 +3,7 @@ package com.dlink.db.service.impl;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.dlink.assertion.Asserts
;
import
com.dlink.common.result.ProTableResult
;
import
com.dlink.common.result.ProTableResult
;
import
com.dlink.db.mapper.SuperMapper
;
import
com.dlink.db.mapper.SuperMapper
;
import
com.dlink.db.service.ISuperService
;
import
com.dlink.db.service.ISuperService
;
...
@@ -10,6 +11,7 @@ import com.dlink.db.util.ProTableUtil;
...
@@ -10,6 +11,7 @@ import com.dlink.db.util.ProTableUtil;
import
com.fasterxml.jackson.databind.JsonNode
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -33,5 +35,36 @@ public class SuperServiceImpl<M extends SuperMapper<T>, T> extends ServiceImpl<M
...
@@ -33,5 +35,36 @@ public class SuperServiceImpl<M extends SuperMapper<T>, T> extends ServiceImpl<M
List
<
T
>
list
=
baseMapper
.
selectForProTable
(
page
,
queryWrapper
,
param
);
List
<
T
>
list
=
baseMapper
.
selectForProTable
(
page
,
queryWrapper
,
param
);
return
ProTableResult
.<
T
>
builder
().
success
(
true
).
data
(
list
).
total
(
page
.
getTotal
()).
current
(
current
).
pageSize
(
pageSize
).
build
();
return
ProTableResult
.<
T
>
builder
().
success
(
true
).
data
(
list
).
total
(
page
.
getTotal
()).
current
(
current
).
pageSize
(
pageSize
).
build
();
}
}
@Override
public
ProTableResult
<
T
>
selectForProTable
(
JsonNode
para
,
boolean
isDelete
)
{
Integer
current
=
para
.
has
(
"current"
)
?
para
.
get
(
"current"
).
asInt
()
:
1
;
Integer
pageSize
=
para
.
has
(
"pageSize"
)
?
para
.
get
(
"pageSize"
).
asInt
()
:
10
;
QueryWrapper
<
T
>
queryWrapper
=
new
QueryWrapper
<>();
ProTableUtil
.
autoQueryDefalut
(
para
,
queryWrapper
,
isDelete
);
ObjectMapper
mapper
=
new
ObjectMapper
();
Map
<
String
,
Object
>
param
=
mapper
.
convertValue
(
para
,
Map
.
class
);
Page
<
T
>
page
=
new
Page
<>(
current
,
pageSize
);
List
<
T
>
list
=
baseMapper
.
selectForProTable
(
page
,
queryWrapper
,
param
);
return
ProTableResult
.<
T
>
builder
().
success
(
true
).
data
(
list
).
total
(
page
.
getTotal
()).
current
(
current
).
pageSize
(
pageSize
).
build
();
}
@Override
public
ProTableResult
<
T
>
selectForProTable
(
JsonNode
para
,
Map
<
String
,
Object
>
paraMap
)
{
Integer
current
=
para
.
has
(
"current"
)
?
para
.
get
(
"current"
).
asInt
()
:
1
;
Integer
pageSize
=
para
.
has
(
"pageSize"
)
?
para
.
get
(
"pageSize"
).
asInt
()
:
10
;
QueryWrapper
<
T
>
queryWrapper
=
new
QueryWrapper
<>();
ProTableUtil
.
autoQueryDefalut
(
para
,
queryWrapper
);
ObjectMapper
mapper
=
new
ObjectMapper
();
Map
<
String
,
Object
>
param
=
mapper
.
convertValue
(
para
,
Map
.
class
);
if
(
Asserts
.
isNotNull
(
paraMap
)){
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
paraMap
.
entrySet
())
{
param
.
put
(
entry
.
getKey
(),
entry
.
getValue
());
}
}
Page
<
T
>
page
=
new
Page
<>(
current
,
pageSize
);
List
<
T
>
list
=
baseMapper
.
selectForProTable
(
page
,
queryWrapper
,
param
);
return
ProTableResult
.<
T
>
builder
().
success
(
true
).
data
(
list
).
total
(
page
.
getTotal
()).
current
(
current
).
pageSize
(
pageSize
).
build
();
}
}
}
dlink-admin/src/main/java/com/dlink/db/util/ProTableUtil.java
View file @
b5c8b97f
...
@@ -44,9 +44,9 @@ public class ProTableUtil {
...
@@ -44,9 +44,9 @@ public class ProTableUtil {
private
static
void
buildDelete
(
QueryWrapper
<?>
wrapper
,
boolean
camelToUnderscore
,
boolean
isDelete
){
private
static
void
buildDelete
(
QueryWrapper
<?>
wrapper
,
boolean
camelToUnderscore
,
boolean
isDelete
){
if
(
isDelete
)
{
if
(
isDelete
)
{
if
(
camelToUnderscore
)
{
if
(
camelToUnderscore
)
{
wrapper
.
eq
(
CaseFormat
.
LOWER_CAMEL
.
to
(
CaseFormat
.
LOWER_UNDERSCORE
,
"is
D
elete"
),
0
);
wrapper
.
eq
(
CaseFormat
.
LOWER_CAMEL
.
to
(
CaseFormat
.
LOWER_UNDERSCORE
,
"is
_d
elete"
),
0
);
}
else
{
}
else
{
wrapper
.
eq
(
"is
D
elete"
,
0
);
wrapper
.
eq
(
"is
_d
elete"
,
0
);
}
}
}
}
}
}
...
@@ -175,6 +175,10 @@ public class ProTableUtil {
...
@@ -175,6 +175,10 @@ public class ProTableUtil {
autoQuery
(
para
,
wrapper
,
true
,
false
);
autoQuery
(
para
,
wrapper
,
true
,
false
);
}
}
public
static
void
autoQueryDefalut
(
JsonNode
para
,
QueryWrapper
<?>
wrapper
,
boolean
isDelete
)
{
autoQuery
(
para
,
wrapper
,
true
,
isDelete
);
}
/**
/**
* @return void
* @return void
* @Author wenmo
* @Author wenmo
...
...
dlink-admin/src/main/java/com/dlink/dto/LoginUTO.java
0 → 100644
View file @
b5c8b97f
package
com
.
dlink
.
dto
;
import
lombok.Getter
;
import
lombok.Setter
;
/**
* LoginUTO
*
* @author wenmo
* @since 2021/11/28 17:02
*/
@Getter
@Setter
public
class
LoginUTO
{
private
String
username
;
private
String
password
;
private
boolean
autoLogin
;
}
dlink-admin/src/main/java/com/dlink/mapper/UserMapper.java
0 → 100644
View file @
b5c8b97f
package
com
.
dlink
.
mapper
;
import
com.dlink.db.mapper.SuperMapper
;
import
com.dlink.model.User
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* UserMapper
*
* @author wenmo
* @since 2021/11/28 13:36
*/
@Mapper
public
interface
UserMapper
extends
SuperMapper
<
User
>
{
}
dlink-admin/src/main/java/com/dlink/model/User.java
View file @
b5c8b97f
package
com
.
dlink
.
model
;
package
com
.
dlink
.
model
;
import
com.baomidou.mybatisplus.annotation.*
;
import
com.dlink.assertion.Asserts
;
import
com.dlink.db.annotation.Save
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.EqualsAndHashCode
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
/**
/**
* User
* User
...
@@ -13,11 +18,37 @@ import java.io.Serializable;
...
@@ -13,11 +18,37 @@ import java.io.Serializable;
**/
**/
@Data
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@EqualsAndHashCode
(
callSuper
=
false
)
@TableName
(
"dlink_user"
)
public
class
User
implements
Serializable
{
public
class
User
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
1077801296270024204L
;
private
static
final
long
serialVersionUID
=
-
1077801296270024204L
;
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Integer
id
;
@NotNull
(
message
=
"用户名不能为空"
,
groups
=
{
Save
.
class
})
private
String
username
;
private
String
username
;
private
String
password
;
private
String
password
;
private
String
nickname
;
private
String
worknum
;
private
byte
[]
avatar
;
private
String
mobile
;
private
boolean
enabled
;
private
boolean
isDelete
;
@TableField
(
fill
=
FieldFill
.
INSERT
)
private
LocalDateTime
createTime
;
@TableField
(
fill
=
FieldFill
.
INSERT_UPDATE
)
private
LocalDateTime
updateTime
;
@TableField
(
exist
=
false
)
private
boolean
isAdmin
;
}
}
dlink-admin/src/main/java/com/dlink/service/UserService.java
0 → 100644
View file @
b5c8b97f
package
com
.
dlink
.
service
;
import
com.dlink.common.result.Result
;
import
com.dlink.db.service.ISuperService
;
import
com.dlink.model.User
;
/**
* UserService
*
* @author wenmo
* @since 2021/11/28 13:39
*/
public
interface
UserService
extends
ISuperService
<
User
>
{
Result
registerUser
(
User
user
);
boolean
modifyUser
(
User
user
);
boolean
removeUser
(
Integer
id
);
Result
loginUser
(
String
username
,
String
password
,
boolean
isRemember
);
User
getUserByUsername
(
String
username
);
}
dlink-admin/src/main/java/com/dlink/service/impl/UserServiceImpl.java
0 → 100644
View file @
b5c8b97f
package
com
.
dlink
.
service
.
impl
;
import
cn.dev33.satoken.secure.SaSecureUtil
;
import
cn.dev33.satoken.stp.StpUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.dlink.assertion.Asserts
;
import
com.dlink.common.result.Result
;
import
com.dlink.db.service.impl.SuperServiceImpl
;
import
com.dlink.exception.BusException
;
import
com.dlink.mapper.UserMapper
;
import
com.dlink.model.User
;
import
com.dlink.service.UserService
;
import
org.springframework.stereotype.Service
;
/**
* UserServiceImpl
*
* @author wenmo
* @since 2021/11/28 13:39
*/
@Service
public
class
UserServiceImpl
extends
SuperServiceImpl
<
UserMapper
,
User
>
implements
UserService
{
private
static
final
String
DEFAULT_PASSWORD
=
"123456"
;
@Override
public
Result
registerUser
(
User
user
)
{
User
userByUsername
=
getUserByUsername
(
user
.
getUsername
());
if
(
Asserts
.
isNotNull
(
userByUsername
)){
return
Result
.
failed
(
"该账号已存在"
);
}
if
(
Asserts
.
isNullString
(
user
.
getPassword
())){
user
.
setPassword
(
DEFAULT_PASSWORD
);
}
user
.
setPassword
(
SaSecureUtil
.
md5
(
user
.
getPassword
()));
user
.
setEnabled
(
true
);
user
.
setDelete
(
false
);
if
(
save
(
user
)){
return
Result
.
succeed
(
"注册成功"
);
}
else
{
return
Result
.
failed
(
"该账号已存在"
);
}
}
@Override
public
boolean
modifyUser
(
User
user
)
{
if
(
Asserts
.
isNull
(
user
.
getId
())){
return
false
;
}
if
(
Asserts
.
isNotNull
(
user
.
getPassword
())){
user
.
setPassword
(
SaSecureUtil
.
md5
(
user
.
getPassword
()));
}
return
updateById
(
user
);
}
@Override
public
boolean
removeUser
(
Integer
id
)
{
User
user
=
new
User
();
user
.
setId
(
id
);
user
.
setDelete
(
true
);
return
updateById
(
user
);
}
@Override
public
Result
loginUser
(
String
username
,
String
password
,
boolean
isRemember
)
{
User
user
=
getUserByUsername
(
username
);
if
(
Asserts
.
isNull
(
user
)){
return
Result
.
failed
(
"账号或密码错误"
);
}
String
userPassword
=
user
.
getPassword
();
if
(
Asserts
.
isNullString
(
password
)){
return
Result
.
failed
(
"密码不能为空"
);
}
if
(
Asserts
.
isEquals
(
SaSecureUtil
.
md5
(
password
),
userPassword
)){
if
(
user
.
isDelete
()){
return
Result
.
failed
(
"账号不存在"
);
}
if
(!
user
.
isEnabled
()){
return
Result
.
failed
(
"账号已被禁用"
);
}
StpUtil
.
login
(
user
.
getId
(),
isRemember
);
StpUtil
.
getSession
().
set
(
"user"
,
user
);
return
Result
.
succeed
(
user
,
"登录成功"
);
}
else
{
return
Result
.
failed
(
"账号或密码错误"
);
}
}
@Override
public
User
getUserByUsername
(
String
username
)
{
User
user
=
getOne
(
new
QueryWrapper
<
User
>().
eq
(
"username"
,
username
).
eq
(
"is_delete"
,
0
));
if
(
Asserts
.
isNotNull
(
user
)){
user
.
setAdmin
(
Asserts
.
isEqualsIgnoreCase
(
username
,
"admin"
));
}
return
user
;
}
}
dlink-admin/src/main/resources/application.yml
View file @
b5c8b97f
...
@@ -27,10 +27,19 @@ mybatis-plus:
...
@@ -27,10 +27,19 @@ mybatis-plus:
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
log-impl
:
org.apache.ibatis.logging.nologging.NoLoggingImpl
log-impl
:
org.apache.ibatis.logging.nologging.NoLoggingImpl
# Sa-Token 配置
##### Flink 集群配置
sa-token
:
dlink
:
# token名称 (同时也是cookie名称)
##### 登录用户配置
token-name
:
satoken
login
:
# token有效期,单位s 默认10小时, -1代表永不过期
username
:
admin
timeout
:
36000
password
:
admin
# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
\ No newline at end of file
activity-timeout
:
-1
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent
:
false
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share
:
true
# token风格
token-style
:
uuid
# 是否输出操作日志
is-log
:
false
\ No newline at end of file
dlink-admin/src/main/resources/mapper/UserMapper.xml
0 → 100644
View file @
b5c8b97f
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.dlink.mapper.UserMapper"
>
<select
id=
"selectForProTable"
resultType=
"com.dlink.model.User"
>
select
a.*
from
dlink_user a
<where>
1=1
<if
test=
'param.username!=null and param.username!=""'
>
and a.username like "%${param.username}%"
</if>
<if
test=
'param.nickname!=null and param.nickname!=""'
>
and a.nickname like "%${param.nickname}%"
</if>
<if
test=
'param.createTime!=null and param.createTime!=""'
>
and a.create_time
<![CDATA[>=]]>
str_to_date( #{param.createTime},'%Y-%m-%d %H:%i:%s')
</if>
<if
test=
'param.updateTime!=null and param.updateTime!=""'
>
and a.update_time
<![CDATA[>=]]>
str_to_date( #{param.updateTime},'%Y-%m-%d %H:%i:%s')
</if>
<if
test=
'ew.sqlSegment!=null and ew.sqlSegment!="" and !ew.sqlSegment.startsWith(" ORDER BY")'
>
and
</if>
<if
test=
'ew.sqlSegment!=null and ew.sqlSegment!=""'
>
${ew.sqlSegment}
</if>
</where>
</select>
</mapper>
dlink-admin/src/test/java/com/dlink/admin/AdminTest.java
0 → 100644
View file @
b5c8b97f
package
com
.
dlink
.
admin
;
import
cn.dev33.satoken.secure.SaSecureUtil
;
import
org.junit.Test
;
/**
* SqlParserTest
*
* @author wenmo
* @since 2021/6/14 17:03
*/
public
class
AdminTest
{
@Test
public
void
adminTest
(){
String
admin
=
SaSecureUtil
.
md5
(
"admin"
);
System
.
out
.
println
(
admin
);
}
}
dlink-doc/sql/dlink.sql
View file @
b5c8b97f
...
@@ -250,4 +250,25 @@ CREATE TABLE `dlink_task_statement` (
...
@@ -250,4 +250,25 @@ CREATE TABLE `dlink_task_statement` (
PRIMARY
KEY
(
`id`
)
USING
BTREE
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
COMMENT
=
'语句'
ROW_FORMAT
=
Dynamic
;
)
ENGINE
=
InnoDB
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
COMMENT
=
'语句'
ROW_FORMAT
=
Dynamic
;
-- ----------------------------
-- Table structure for dlink_user
-- ----------------------------
DROP
TABLE
IF
EXISTS
`dlink_user`
;
CREATE
TABLE
`dlink_user`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
COMMENT
'ID'
,
`username`
varchar
(
50
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NOT
NULL
COMMENT
'登录名'
,
`password`
varchar
(
50
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'密码'
,
`nickname`
varchar
(
50
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'昵称'
,
`worknum`
varchar
(
50
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'工号'
,
`avatar`
blob
NULL
COMMENT
'头像'
,
`mobile`
varchar
(
20
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'手机号'
,
`enabled`
tinyint
(
1
)
NOT
NULL
DEFAULT
1
COMMENT
'是否启用'
,
`is_delete`
tinyint
(
1
)
NOT
NULL
DEFAULT
0
COMMENT
'是否被删除'
,
`create_time`
datetime
(
0
)
NULL
DEFAULT
NULL
COMMENT
'创建时间'
,
`update_time`
datetime
(
0
)
NULL
DEFAULT
NULL
COMMENT
'更新时间'
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Dynamic
;
INSERT
INTO
`dlink_user`
(
`id`
,
`username`
,
`password`
,
`nickname`
,
`worknum`
,
`avatar`
,
`mobile`
,
`enabled`
,
`is_delete`
,
`create_time`
,
`update_time`
)
VALUES
(
1
,
'admin'
,
'21232f297a57a5a743894a0e4a801fc3'
,
'Admin'
,
NULL
,
NULL
,
NULL
,
1
,
0
,
'2021-11-28 17:19:27'
,
'2021-11-28 17:19:31'
);
SET
FOREIGN_KEY_CHECKS
=
1
;
SET
FOREIGN_KEY_CHECKS
=
1
;
dlink-doc/sql/dlink_history.sql
View file @
b5c8b97f
...
@@ -446,4 +446,23 @@ ALTER TABLE `dlink_task`
...
@@ -446,4 +446,23 @@ ALTER TABLE `dlink_task`
ALTER
TABLE
`dlink_task`
ALTER
TABLE
`dlink_task`
ADD
COLUMN
`jar_id`
int
(
11
)
NULL
COMMENT
'JarID'
AFTER
`cluster_configuration_id`
;
ADD
COLUMN
`jar_id`
int
(
11
)
NULL
COMMENT
'JarID'
AFTER
`cluster_configuration_id`
;
-- ----------------------------
-- 0.4.0-SNAPSHOT 2021-11-28
-- ----------------------------
CREATE
TABLE
`dlink_user`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
COMMENT
'ID'
,
`username`
varchar
(
50
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NOT
NULL
COMMENT
'登录名'
,
`password`
varchar
(
50
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'密码'
,
`nickname`
varchar
(
50
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'昵称'
,
`worknum`
varchar
(
50
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'工号'
,
`avatar`
blob
NULL
COMMENT
'头像'
,
`mobile`
varchar
(
20
)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
COMMENT
'手机号'
,
`enabled`
tinyint
(
1
)
NOT
NULL
DEFAULT
1
COMMENT
'是否启用'
,
`is_delete`
tinyint
(
1
)
NOT
NULL
DEFAULT
0
COMMENT
'是否被删除'
,
`create_time`
datetime
(
0
)
NULL
DEFAULT
NULL
COMMENT
'创建时间'
,
`update_time`
datetime
(
0
)
NULL
DEFAULT
NULL
COMMENT
'更新时间'
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
CHARACTER
SET
=
utf8
COLLATE
=
utf8_general_ci
ROW_FORMAT
=
Dynamic
;
INSERT
INTO
`dlink_user`
(
`id`
,
`username`
,
`password`
,
`nickname`
,
`worknum`
,
`avatar`
,
`mobile`
,
`enabled`
,
`is_delete`
,
`create_time`
,
`update_time`
)
VALUES
(
1
,
'admin'
,
'21232f297a57a5a743894a0e4a801fc3'
,
'Admin'
,
NULL
,
NULL
,
NULL
,
1
,
0
,
'2021-11-28 17:19:27'
,
'2021-11-28 17:19:31'
);
SET
FOREIGN_KEY_CHECKS
=
1
;
SET
FOREIGN_KEY_CHECKS
=
1
;
dlink-web/src/app.tsx
View file @
b5c8b97f
...
@@ -29,55 +29,15 @@ export async function getInitialState(): Promise<{
...
@@ -29,55 +29,15 @@ export async function getInitialState(): Promise<{
try
{
try
{
const
result
=
await
queryCurrentUser
();
const
result
=
await
queryCurrentUser
();
const
currentUser
:
API
.
CurrentUser
=
{
const
currentUser
:
API
.
CurrentUser
=
{
name
:
'超级管理员'
,
name
:
result
.
datas
.
nickname
,
avatar
:
'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png'
,
avatar
:
result
.
datas
.
avatar
?
result
.
datas
.
avatar
:
'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png'
,
userid
:
'1'
,
userid
:
result
.
datas
.
username
,
email
:
'antdesign@alipay.com'
,
notifyCount
:
0
,
signature
:
'海纳百川,有容乃大'
,
unreadCount
:
0
,
title
:
'交互专家啊'
,
access
:
result
.
datas
.
admin
?
'admin'
:
''
,
group
:
'蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED'
,
tags
:
[
{
key
:
'0'
,
label
:
'很有想法的'
,
},
{
key
:
'1'
,
label
:
'专注设计'
,
},
{
key
:
'2'
,
label
:
'辣~'
,
},
{
key
:
'3'
,
label
:
'大长腿'
,
},
{
key
:
'4'
,
label
:
'川妹子'
,
},
{
key
:
'5'
,
label
:
'海纳百川'
,
},
],
notifyCount
:
12
,
unreadCount
:
11
,
country
:
'China'
,
access
:
'admin'
,
geographic
:
{
province
:
{
label
:
'浙江省'
,
key
:
'330000'
,
},
city
:
{
label
:
'杭州市'
,
key
:
'330100'
,
},
},
address
:
'西湖区工专路 77 号'
,
phone
:
result
.
datas
.
mobile
,
phone
:
result
.
datas
.
mobile
,
isAdmin
:
result
.
datas
.
admin
,
worknum
:
result
.
datas
.
worknum
,
};
};
return
currentUser
;
return
currentUser
;
}
catch
(
error
)
{
}
catch
(
error
)
{
...
...
dlink-web/src/pages/Dbase/User/_mock.ts
deleted
100644 → 0
View file @
2861e551
// eslint-disable-next-line import/no-extraneous-dependencies
import
type
{
Request
,
Response
}
from
'express'
;
import
{
parse
}
from
'url'
;
import
type
{
TableListItem
,
TableListParams
}
from
'./data.d'
;
// mock tableListDataSource
const
genList
=
(
current
:
number
,
pageSize
:
number
)
=>
{
const
tableListDataSource
:
TableListItem
[]
=
[];
for
(
let
i
=
0
;
i
<
pageSize
;
i
+=
1
)
{
const
index
=
(
current
-
1
)
*
10
+
i
;
tableListDataSource
.
push
({
key
:
index
,
disabled
:
i
%
6
===
0
,
href
:
'https://ant.design'
,
avatar
:
[
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png'
,
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png'
,
][
i
%
2
],
name
:
`TradeCode
${
index
}
`
,
owner
:
'曲丽丽'
,
desc
:
'这是一段描述'
,
callNo
:
Math
.
floor
(
Math
.
random
()
*
1000
),
status
:
(
Math
.
floor
(
Math
.
random
()
*
10
)
%
4
).
toString
(),
updatedAt
:
new
Date
(),
createdAt
:
new
Date
(),
progress
:
Math
.
ceil
(
Math
.
random
()
*
100
),
});
}
tableListDataSource
.
reverse
();
return
tableListDataSource
;
};
let
tableListDataSource
=
genList
(
1
,
100
);
function
getRule
(
req
:
Request
,
res
:
Response
,
u
:
string
)
{
let
realUrl
=
u
;
if
(
!
realUrl
||
Object
.
prototype
.
toString
.
call
(
realUrl
)
!==
'[object String]'
)
{
realUrl
=
req
.
url
;
}
const
{
current
=
1
,
pageSize
=
10
}
=
req
.
query
;
const
params
=
(
parse
(
realUrl
,
true
).
query
as
unknown
)
as
TableListParams
;
let
dataSource
=
[...
tableListDataSource
].
slice
(
((
current
as
number
)
-
1
)
*
(
pageSize
as
number
),
(
current
as
number
)
*
(
pageSize
as
number
),
);
const
sorter
=
JSON
.
parse
(
params
.
sorter
as
any
);
if
(
sorter
)
{
dataSource
=
dataSource
.
sort
((
prev
,
next
)
=>
{
let
sortNumber
=
0
;
Object
.
keys
(
sorter
).
forEach
((
key
)
=>
{
if
(
sorter
[
key
]
===
'descend'
)
{
if
(
prev
[
key
]
-
next
[
key
]
>
0
)
{
sortNumber
+=
-
1
;
}
else
{
sortNumber
+=
1
;
}
return
;
}
if
(
prev
[
key
]
-
next
[
key
]
>
0
)
{
sortNumber
+=
1
;
}
else
{
sortNumber
+=
-
1
;
}
});
return
sortNumber
;
});
}
if
(
params
.
filter
)
{
const
filter
=
JSON
.
parse
(
params
.
filter
as
any
)
as
Record
<
string
,
string
[]
>
;
if
(
Object
.
keys
(
filter
).
length
>
0
)
{
dataSource
=
dataSource
.
filter
((
item
)
=>
{
return
Object
.
keys
(
filter
).
some
((
key
)
=>
{
if
(
!
filter
[
key
])
{
return
true
;
}
if
(
filter
[
key
].
includes
(
`
${
item
[
key
]}
`
))
{
return
true
;
}
return
false
;
});
});
}
}
if
(
params
.
name
)
{
dataSource
=
dataSource
.
filter
((
data
)
=>
data
.
name
.
includes
(
params
.
name
||
''
));
}
const
result
=
{
data
:
dataSource
,
total
:
tableListDataSource
.
length
,
success
:
true
,
pageSize
,
current
:
parseInt
(
`
${
params
.
currentPage
}
`
,
10
)
||
1
,
};
return
res
.
json
(
result
);
}
function
postRule
(
req
:
Request
,
res
:
Response
,
u
:
string
,
b
:
Request
)
{
let
realUrl
=
u
;
if
(
!
realUrl
||
Object
.
prototype
.
toString
.
call
(
realUrl
)
!==
'[object String]'
)
{
realUrl
=
req
.
url
;
}
const
body
=
(
b
&&
b
.
body
)
||
req
.
body
;
const
{
method
,
name
,
desc
,
key
}
=
body
;
switch
(
method
)
{
/* eslint no-case-declarations:0 */
case
'delete'
:
tableListDataSource
=
tableListDataSource
.
filter
((
item
)
=>
key
.
indexOf
(
item
.
key
)
===
-
1
);
break
;
case
'post'
:
(()
=>
{
const
i
=
Math
.
ceil
(
Math
.
random
()
*
10000
);
const
newRule
=
{
key
:
tableListDataSource
.
length
,
href
:
'https://ant.design'
,
avatar
:
[
'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png'
,
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png'
,
][
i
%
2
],
name
,
owner
:
'曲丽丽'
,
desc
,
callNo
:
Math
.
floor
(
Math
.
random
()
*
1000
),
status
:
(
Math
.
floor
(
Math
.
random
()
*
10
)
%
2
).
toString
(),
updatedAt
:
new
Date
(),
createdAt
:
new
Date
(),
progress
:
Math
.
ceil
(
Math
.
random
()
*
100
),
};
tableListDataSource
.
unshift
(
newRule
);
return
res
.
json
(
newRule
);
})();
return
;
case
'update'
:
(()
=>
{
let
newRule
=
{};
tableListDataSource
=
tableListDataSource
.
map
((
item
)
=>
{
if
(
item
.
key
===
key
)
{
newRule
=
{
...
item
,
desc
,
name
};
return
{
...
item
,
desc
,
name
};
}
return
item
;
});
return
res
.
json
(
newRule
);
})();
return
;
default
:
break
;
}
const
result
=
{
list
:
tableListDataSource
,
pagination
:
{
total
:
tableListDataSource
.
length
,
},
};
res
.
json
(
result
);
}
export
default
{
'GET /api/rule'
:
getRule
,
'POST /api/rule'
:
postRule
,
};
dlink-web/src/pages/Dbase/User/components/CreateForm.tsx
deleted
100644 → 0
View file @
2861e551
import
React
from
'react'
;
import
{
Modal
}
from
'antd'
;
type
CreateFormProps
=
{
modalVisible
:
boolean
;
onCancel
:
()
=>
void
;
};
const
CreateForm
:
React
.
FC
<
CreateFormProps
>
=
(
props
)
=>
{
const
{
modalVisible
,
onCancel
}
=
props
;
return
(
<
Modal
destroyOnClose
title=
"添加用户"
visible=
{
modalVisible
}
onCancel=
{
()
=>
onCancel
()
}
footer=
{
null
}
>
{
props
.
children
}
</
Modal
>
);
};
export
default
CreateForm
;
dlink-web/src/pages/Dbase/User/index.less
deleted
100644 → 0
View file @
2861e551
dlink-web/src/pages/Dbase/User/service.ts
deleted
100644 → 0
View file @
2861e551
import
request
from
'umi-request'
;
import
type
{
TableListParams
}
from
'./data.d'
;
import
{
UserTableListItem
}
from
"@/pages/Dbase/User/data"
;
export
async
function
queryUser
(
params
?:
TableListParams
)
{
return
request
(
'/api-user/users'
,
{
method
:
'POST'
,
data
:
{
...
params
,
},
});
}
export
async
function
removeUser
(
params
:
number
[])
{
return
request
(
'/api-user/users'
,
{
method
:
'DELETE'
,
data
:
{
...
params
,
},
});
}
export
async
function
addOrUpdateUser
(
params
:
UserTableListItem
)
{
return
request
(
'/api-user/users'
,
{
method
:
'PUT'
,
data
:
{
...
params
,
},
});
}
dlink-web/src/pages/Settings/index.tsx
View file @
b5c8b97f
import
React
,
{
useState
,
useRef
,
useLayoutEffect
}
from
'react'
;
import
React
,
{
useState
,
useEffect
,
useRef
,
useLayoutEffect
}
from
'react'
;
import
{
GridContent
}
from
'@ant-design/pro-layout'
;
import
{
GridContent
}
from
'@ant-design/pro-layout'
;
import
{
Menu
}
from
'antd'
;
import
{
Menu
}
from
'antd'
;
import
FlinkConfigView
from
'./components/flinkConfig'
;
import
FlinkConfigView
from
'./components/flinkConfig'
;
import
styles
from
'./style.less'
;
import
styles
from
'./style.less'
;
import
{
loadSettings
}
from
"@/pages/Settings/function"
;
import
{
loadSettings
}
from
"@/pages/Settings/function"
;
import
{
SettingsStateType
}
from
"@/pages/Settings/model"
;
import
{
SettingsStateType
}
from
"@/pages/Settings/model"
;
import
{
connect
}
from
"umi"
;
import
{
connect
,
useModel
}
from
"umi"
;
import
UserTableList
from
'../user'
;
const
{
Item
}
=
Menu
;
const
{
Item
}
=
Menu
;
type
SettingsStateKeys
=
'flinkConfig'
|
'sysConfig'
;
type
SettingsStateKeys
=
'
userManager'
|
'
flinkConfig'
|
'sysConfig'
;
type
SettingsState
=
{
type
SettingsState
=
{
mode
:
'inline'
|
'horizontal'
;
mode
:
'inline'
|
'horizontal'
;
selectKey
:
SettingsStateKeys
;
selectKey
:
SettingsStateKeys
;
...
@@ -21,9 +22,17 @@ type SettingsProps = {
...
@@ -21,9 +22,17 @@ type SettingsProps = {
const
Settings
:
React
.
FC
<
SettingsProps
>
=
(
props
)
=>
{
const
Settings
:
React
.
FC
<
SettingsProps
>
=
(
props
)
=>
{
const
menuMap
:
Record
<
string
,
React
.
ReactNode
>
=
{
const
{
initialState
,
setInitialState
}
=
useModel
(
'@@initialState'
);
const
menuMapAdmin
:
Record
<
string
,
React
.
ReactNode
>
=
{
userManager
:
'用户管理'
,
flinkConfig
:
'Flink 设置'
,
flinkConfig
:
'Flink 设置'
,
};
};
const
menuMapUser
:
Record
<
string
,
React
.
ReactNode
>
=
{
flinkConfig
:
'Flink 设置'
,
};
const
menuMap
:
Record
<
string
,
React
.
ReactNode
>
=
(
initialState
?.
currentUser
?.
isAdmin
)?
menuMapAdmin
:
menuMapUser
;
const
{
dispatch
}
=
props
;
const
{
dispatch
}
=
props
;
const
[
initConfig
,
setInitConfig
]
=
useState
<
SettingsState
>
({
const
[
initConfig
,
setInitConfig
]
=
useState
<
SettingsState
>
({
mode
:
'inline'
,
mode
:
'inline'
,
...
@@ -59,12 +68,15 @@ const Settings: React.FC<SettingsProps> = (props) => {
...
@@ -59,12 +68,15 @@ const Settings: React.FC<SettingsProps> = (props) => {
},
[
dom
.
current
]);
},
[
dom
.
current
]);
const
getMenu
=
()
=>
{
const
getMenu
=
()
=>
{
console
.
log
(
menuMap
);
return
Object
.
keys
(
menuMap
).
map
((
item
)
=>
<
Item
key=
{
item
}
>
{
menuMap
[
item
]
}
</
Item
>);
return
Object
.
keys
(
menuMap
).
map
((
item
)
=>
<
Item
key=
{
item
}
>
{
menuMap
[
item
]
}
</
Item
>);
};
};
const
renderChildren
=
()
=>
{
const
renderChildren
=
()
=>
{
const
{
selectKey
}
=
initConfig
;
const
{
selectKey
}
=
initConfig
;
switch
(
selectKey
)
{
switch
(
selectKey
)
{
case
'userManager'
:
return
<
UserTableList
/>;
case
'flinkConfig'
:
case
'flinkConfig'
:
return
<
FlinkConfigView
/>;
return
<
FlinkConfigView
/>;
default
:
default
:
...
...
dlink-web/src/pages/Welcome.tsx
View file @
b5c8b97f
...
@@ -420,6 +420,9 @@ export default (): React.ReactNode => {
...
@@ -420,6 +420,9 @@ export default (): React.ReactNode => {
<
li
>
<
li
>
<
Link
>
新增全模块实时的布局拖动与滚动条联动
</
Link
>
<
Link
>
新增全模块实时的布局拖动与滚动条联动
</
Link
>
</
li
>
</
li
>
<
li
>
<
Link
>
新增用户管理模块
</
Link
>
</
li
>
</
ul
>
</
ul
>
</
Paragraph
>
</
Paragraph
>
</
Timeline
.
Item
>
</
Timeline
.
Item
>
...
...
dlink-web/src/pages/user/Login/index.tsx
View file @
b5c8b97f
...
@@ -75,6 +75,12 @@ const Login: React.FC = () => {
...
@@ -75,6 +75,12 @@ const Login: React.FC = () => {
await
fetchUserInfo
();
await
fetchUserInfo
();
goto
();
goto
();
return
;
return
;
}
else
{
const
defaultloginFailureMessage
=
intl
.
formatMessage
({
id
:
msg
.
msg
,
defaultMessage
:
msg
.
msg
,
});
message
.
error
(
defaultloginFailureMessage
);
}
}
// 如果失败去设置用户错误信息
// 如果失败去设置用户错误信息
setUserLoginState
(
msg
.
datas
);
setUserLoginState
(
msg
.
datas
);
...
...
dlink-web/src/pages/
Dbase/User/components/Update
Form.tsx
→
dlink-web/src/pages/
user/components/User
Form.tsx
View file @
b5c8b97f
import
React
,
{
useEffect
,
useState
}
from
'react'
;
import
React
,
{
useState
}
from
'react'
;
import
{
Form
,
Button
,
Input
,
Modal
}
from
'antd'
;
import
{
Form
,
Button
,
Input
,
Modal
,
Switch
}
from
'antd'
;
import
{
UserTableListItem
}
from
"@/pages/user/data"
;
import
type
{
TableListItem
}
from
'../data.d'
;
export
type
UserFormProps
=
{
import
Switch
from
"antd/es/switch"
;
onCancel
:
(
flag
?:
boolean
)
=>
void
;
onSubmit
:
(
values
:
Partial
<
UserTableListItem
>
)
=>
void
;
export
type
UpdateFormProps
=
{
modalVisible
:
boolean
;
onCancel
:
(
flag
?:
boolean
,
formVals
?:
Partial
<
TableListItem
>
)
=>
void
;
values
:
Partial
<
UserTableListItem
>
;
onSubmit
:
(
values
:
Partial
<
TableListItem
>
)
=>
void
;
updateModalVisible
:
boolean
;
values
:
Partial
<
TableListItem
>
;
};
};
const
FormItem
=
Form
.
Item
;
const
formLayout
=
{
const
formLayout
=
{
labelCol
:
{
span
:
7
},
labelCol
:
{
span
:
7
},
wrapperCol
:
{
span
:
13
},
wrapperCol
:
{
span
:
13
},
};
};
const
UpdateForm
:
React
.
FC
<
UpdateFormProps
>
=
(
props
)
=>
{
const
UserForm
:
React
.
FC
<
UserFormProps
>
=
(
props
)
=>
{
const
[
formVals
,
setFormVals
]
=
useState
<
Partial
<
TableListItem
>>
({
const
[
form
]
=
Form
.
useForm
();
const
[
formVals
,
setFormVals
]
=
useState
<
Partial
<
UserTableListItem
>>
({
id
:
props
.
values
.
id
,
id
:
props
.
values
.
id
,
enabled
:
props
.
values
.
enabled
,
username
:
props
.
values
.
username
,
username
:
props
.
values
.
username
,
nickname
:
props
.
values
.
nickname
,
nickname
:
props
.
values
.
nickname
,
password
:
props
.
values
.
password
,
worknum
:
props
.
values
.
worknum
,
mobile
:
props
.
values
.
mobile
,
avatar
:
props
.
values
.
avatar
,
enabled
:
props
.
values
.
enabled
,
});
});
const
[
form
]
=
Form
.
useForm
();
const
{
const
{
onSubmit
:
handleUpdate
,
onSubmit
:
handleSubmit
,
onCancel
:
handleUpdateModalVisible
,
onCancel
:
handleModalVisible
,
updateModalVisible
,
modalVisible
,
values
,
}
=
props
;
}
=
props
;
const
submitForm
=
async
()
=>
{
const
submitForm
=
async
()
=>
{
const
fieldsValue
=
await
form
.
validateFields
();
const
fieldsValue
=
await
form
.
validateFields
();
setFormVals
({
...
formVals
,
...
fieldsValue
});
setFormVals
({
...
formVals
,
...
fieldsValue
});
handle
Update
({
...
formVals
,
...
fieldsValue
});
handle
Submit
({
...
formVals
,
...
fieldsValue
});
};
};
const
renderContent
=
(
formVals
)
=>
{
const
renderContent
=
(
formVals
)
=>
{
return
(
return
(
<>
<>
<
FormItem
<
Form
.
Item
name=
"username"
name=
"username"
label=
"登录名"
label=
"用户名"
rules=
{
[{
required
:
true
,
message
:
'请输入登录名!'
}]
}
rules=
{
[{
required
:
true
,
message
:
'请输入用户名!'
}]
}
>
>
<
Input
placeholder=
"请输入唯一用户名"
/>
<
Input
placeholder=
"请输入"
/>
</
Form
.
Item
>
</
FormItem
>
<
Form
.
Item
<
FormItem
name=
"nickname"
name=
"nickname"
label=
"昵称"
label=
"昵称"
rules=
{
[{
required
:
true
,
message
:
'请输入昵称!'
}]
}
>
>
<
Input
placeholder=
"请输入"
/>
<
Input
placeholder=
"请输入昵称"
/>
</
FormItem
>
</
Form
.
Item
>
<
FormItem
<
Form
.
Item
name=
"enabled"
name=
"worknum"
label=
"状态"
label=
"工号"
>
<
Input
placeholder=
"请输入工号"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"mobile"
label=
"手机号"
>
>
<
Input
placeholder=
"请输入手机号"
/>
</
Form
.
Item
>
<
Form
.
Item
name=
"enabled"
label=
"是否启用"
>
<
Switch
checkedChildren=
"启用"
unCheckedChildren=
"禁用"
<
Switch
checkedChildren=
"启用"
unCheckedChildren=
"禁用"
defaultChecked=
{
formVals
.
enabled
}
/>
defaultChecked=
{
formVals
.
enabled
}
/>
</
FormItem
>
</
Form
.
Item
>
</>
</>
);
);
};
};
...
@@ -71,7 +81,7 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
...
@@ -71,7 +81,7 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
const
renderFooter
=
()
=>
{
const
renderFooter
=
()
=>
{
return
(
return
(
<>
<>
<
Button
onClick=
{
()
=>
handle
UpdateModalVisible
(
false
,
values
)
}
>
取消
</
Button
>
<
Button
onClick=
{
()
=>
handle
ModalVisible
(
false
)
}
>
取消
</
Button
>
<
Button
type=
"primary"
onClick=
{
()
=>
submitForm
()
}
>
<
Button
type=
"primary"
onClick=
{
()
=>
submitForm
()
}
>
完成
完成
</
Button
>
</
Button
>
...
@@ -81,22 +91,18 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
...
@@ -81,22 +91,18 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
return
(
return
(
<
Modal
<
Modal
width=
{
64
0
}
width=
{
120
0
}
bodyStyle=
{
{
padding
:
'32px 40px 48px'
}
}
bodyStyle=
{
{
padding
:
'32px 40px 48px'
}
}
destroyOnClose
destroyOnClose
title=
"编辑用户"
title=
{
formVals
.
id
?
"维护用户"
:
"创建用户"
}
visible=
{
updateM
odalVisible
}
visible=
{
m
odalVisible
}
footer=
{
renderFooter
()
}
footer=
{
renderFooter
()
}
onCancel=
{
()
=>
handle
Update
ModalVisible
()
}
onCancel=
{
()
=>
handleModalVisible
()
}
>
>
<
Form
<
Form
{
...
formLayout
}
{
...
formLayout
}
form=
{
form
}
form=
{
form
}
initialValues=
{
{
initialValues=
{
formVals
}
username
:
formVals
.
username
,
nickname
:
formVals
.
nickname
,
enabled
:
formVals
.
enabled
,
}
}
>
>
{
renderContent
(
formVals
)
}
{
renderContent
(
formVals
)
}
</
Form
>
</
Form
>
...
@@ -104,4 +110,4 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
...
@@ -104,4 +110,4 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
);
);
};
};
export
default
U
pdate
Form
;
export
default
U
ser
Form
;
dlink-web/src/pages/
Dbase/U
ser/data.d.ts
→
dlink-web/src/pages/
u
ser/data.d.ts
View file @
b5c8b97f
...
@@ -8,27 +8,6 @@ export type UserTableListItem = {
...
@@ -8,27 +8,6 @@ export type UserTableListItem = {
nickname
?:
string
;
nickname
?:
string
;
password
?:
string
;
password
?:
string
;
avatar
?:
string
;
avatar
?:
string
;
sex
?:
boolean
;
worknum
?:
string
;
};
mobile
?:
string
;
export
type
TableListPagination
=
{
total
:
number
;
pageSize
:
number
;
current
:
number
;
};
export
type
TableListData
=
{
list
:
TableListItem
[];
pagination
:
Partial
<
TableListPagination
>
;
};
export
type
TableListParams
=
{
status
?:
string
;
name
?:
string
;
desc
?:
string
;
key
?:
number
;
pageSize
?:
number
;
currentPage
?:
number
;
filter
?:
Record
<
string
,
any
[]
>
;
sorter
?:
Record
<
string
,
any
>
;
};
};
dlink-web/src/pages/
Dbase/U
ser/index.tsx
→
dlink-web/src/pages/
u
ser/index.tsx
View file @
b5c8b97f
This diff is collapsed.
Click to expand it.
dlink-web/src/services/ant-design-pro/typings.d.ts
View file @
b5c8b97f
...
@@ -27,6 +27,8 @@ declare namespace API {
...
@@ -27,6 +27,8 @@ declare namespace API {
};
};
address
?:
string
;
address
?:
string
;
phone
?:
string
;
phone
?:
string
;
isAdmin
?:
boolean
;
worknum
?:
string
;
};
};
/*type LoginResult = {
/*type LoginResult = {
...
...
pom.xml
View file @
b5c8b97f
...
@@ -47,6 +47,7 @@
...
@@ -47,6 +47,7 @@
<hibernate-validator.version>
6.2.0.Final
</hibernate-validator.version>
<hibernate-validator.version>
6.2.0.Final
</hibernate-validator.version>
<versions-maven-plugin.version>
2.7
</versions-maven-plugin.version>
<versions-maven-plugin.version>
2.7
</versions-maven-plugin.version>
<!--<flyway.version>6.4.4</flyway.version>-->
<!--<flyway.version>6.4.4</flyway.version>-->
<sa-token.version>
1.28.0
</sa-token.version>
<maven-jar-plugin.version>
3.2.0
</maven-jar-plugin.version>
<maven-jar-plugin.version>
3.2.0
</maven-jar-plugin.version>
<maven-assembly-plugin.version>
3.2.0
</maven-assembly-plugin.version>
<maven-assembly-plugin.version>
3.2.0
</maven-assembly-plugin.version>
<maven.resource.version>
3.2.0
</maven.resource.version>
<maven.resource.version>
3.2.0
</maven.resource.version>
...
@@ -152,6 +153,11 @@
...
@@ -152,6 +153,11 @@
<artifactId>flyway-core</artifactId>
<artifactId>flyway-core</artifactId>
<version>${flyway.version}</version>
<version>${flyway.version}</version>
</dependency>-->
</dependency>-->
<dependency>
<groupId>
cn.dev33
</groupId>
<artifactId>
sa-token-spring-boot-starter
</artifactId>
<version>
${sa-token.version}
</version>
</dependency>
<dependency>
<dependency>
<groupId>
com.dlink
</groupId>
<groupId>
com.dlink
</groupId>
<artifactId>
dlink-core
</artifactId>
<artifactId>
dlink-core
</artifactId>
...
...
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