Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
E
evm-store
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
wanli
evm-store
Commits
ddda8b89
Commit
ddda8b89
authored
Mar 15, 2021
by
wanli
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
883c66c3
Changes
20
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
703 additions
and
430 deletions
+703
-430
.gitignore
.gitignore
+1
-1
backend/app-store.db
backend/app-store.db
+0
-0
backend/app/signal_manager.py
backend/app/signal_manager.py
+7
-0
backend/controller/__init__.py
backend/controller/__init__.py
+8
-0
backend/controller/menu_manager.py
backend/controller/menu_manager.py
+22
-23
backend/controller/user_manager.py
backend/controller/user_manager.py
+22
-2
backend/model/menu.py
backend/model/menu.py
+32
-0
backend/model/user.py
backend/model/user.py
+5
-1
backend/schema/user.py
backend/schema/user.py
+11
-12
frontend/src/assets/images/logo.png
frontend/src/assets/images/logo.png
+0
-0
frontend/src/layout/index.vue
frontend/src/layout/index.vue
+1
-1
frontend/src/permission.js
frontend/src/permission.js
+3
-2
frontend/src/router/index.js
frontend/src/router/index.js
+119
-108
frontend/src/settings.js
frontend/src/settings.js
+0
-2
frontend/src/views/app-store/build.vue
frontend/src/views/app-store/build.vue
+13
-21
frontend/src/views/app-store/download.vue
frontend/src/views/app-store/download.vue
+1
-0
frontend/src/views/app-store/framework.vue
frontend/src/views/app-store/framework.vue
+1
-0
frontend/src/views/login/index.vue
frontend/src/views/login/index.vue
+5
-5
frontend/src/views/profile/index.vue
frontend/src/views/profile/index.vue
+0
-15
frontend/src/views/system/users.vue
frontend/src/views/system/users.vue
+452
-237
No files found.
.gitignore
View file @
ddda8b89
...
@@ -37,7 +37,7 @@ frontend/dist
...
@@ -37,7 +37,7 @@ frontend/dist
backend/logs/*.log
backend/logs/*.log
backend/logs/*.log.*
backend/logs/*.log.*
backend/nohup.out
backend/nohup.out
backend/
scheduler
.db
backend/
app-store
.db
backend/*.db-journal
backend/*.db-journal
backend/backup/*
backend/backup/*
backend/upload/
backend/upload/
...
...
backend/app-store.db
View file @
ddda8b89
No preview for this file type
backend/app/signal_manager.py
View file @
ddda8b89
...
@@ -67,6 +67,13 @@ class SignalManager(object):
...
@@ -67,6 +67,13 @@ class SignalManager(object):
actionGetDownloadList
=
PySignal
()
actionGetDownloadList
=
PySignal
()
actionUpdateDownload
=
PySignal
()
actionUpdateDownload
=
PySignal
()
# 系统菜单
actionAddMenu
=
PySignal
()
actionDeleteMenu
=
PySignal
()
actionGetMenu
=
PySignal
()
actionGetMenuList
=
PySignal
()
actionUpdateMenu
=
PySignal
()
def
__init__
(
self
):
def
__init__
(
self
):
super
(
SignalManager
,
self
)
.
__init__
()
super
(
SignalManager
,
self
)
.
__init__
()
...
...
backend/controller/__init__.py
View file @
ddda8b89
...
@@ -9,6 +9,7 @@ from .login_manager import loginManager
...
@@ -9,6 +9,7 @@ from .login_manager import loginManager
from
.annex_manager
import
annexManager
from
.annex_manager
import
annexManager
from
.upload_manager
import
uploadManager
from
.upload_manager
import
uploadManager
from
.apps_manager
import
appsManager
from
.apps_manager
import
appsManager
from
.menu_manager
import
menuManager
from
.download_manager
import
downloadManager
from
.download_manager
import
downloadManager
from
.framework_manager
import
frameworkManager
from
.framework_manager
import
frameworkManager
from
.build_logs_manager
import
buildLogsManager
from
.build_logs_manager
import
buildLogsManager
...
@@ -66,4 +67,11 @@ def initConnect():
...
@@ -66,4 +67,11 @@ def initConnect():
signalManager
.
actionGetDownloadList
.
connect
(
downloadManager
.
getList
)
signalManager
.
actionGetDownloadList
.
connect
(
downloadManager
.
getList
)
signalManager
.
actionUpdateDownload
.
connect
(
downloadManager
.
update
)
signalManager
.
actionUpdateDownload
.
connect
(
downloadManager
.
update
)
# 系统菜单
signalManager
.
actionAddMenu
.
connect
(
menuManager
.
add
)
signalManager
.
actionDeleteMenu
.
connect
(
menuManager
.
delete
)
signalManager
.
actionGetMenu
.
connect
(
menuManager
.
get
)
signalManager
.
actionGetMenuList
.
connect
(
menuManager
.
getList
)
signalManager
.
actionUpdateMenu
.
connect
(
menuManager
.
update
)
initConnect
()
initConnect
()
\ No newline at end of file
backend/controller/
summary
_manager.py
→
backend/controller/
menu
_manager.py
View file @
ddda8b89
...
@@ -11,26 +11,25 @@ from datetime import datetime
...
@@ -11,26 +11,25 @@ from datetime import datetime
from
pony.orm
import
*
from
pony.orm
import
*
from
flask
import
request
from
flask
import
request
from
model
import
fullStackDB
from
model
import
fullStackDB
from
model.
summary
import
Summary
from
model.
menu
import
Menu
from
model.user
import
User
from
model.user
import
User
from
utils
import
sql_filter
from
utils
import
sql_filter
logger
=
logging
.
getLogger
(
"
Summary
Manager"
)
logger
=
logging
.
getLogger
(
"
Menu
Manager"
)
class
Summary
Manager
(
object
):
class
Menu
Manager
(
object
):
def
__init__
(
self
):
def
__init__
(
self
):
super
(
Summary
Manager
,
self
)
.
__init__
()
super
(
Menu
Manager
,
self
)
.
__init__
()
def
add
(
self
,
data
):
def
add
(
self
,
data
):
# 判断角色名是否存在
result
=
Summary
.
get
(
name
=
data
.
get
(
"name"
))
if
result
:
return
False
,
"summary name has been exists."
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
if
not
editor
:
if
not
editor
:
return
False
,
"current user is not exists"
return
False
,
"current user is not exists"
result
=
Menu
.
get
(
path
=
data
.
get
(
"path"
))
if
result
:
return
False
,
"menu path has been exists."
data
.
update
({
data
.
update
({
'create_by'
:
editor
,
'create_by'
:
editor
,
'create_at'
:
datetime
.
now
(),
'create_at'
:
datetime
.
now
(),
...
@@ -38,22 +37,22 @@ class SummaryManager(object):
...
@@ -38,22 +37,22 @@ class SummaryManager(object):
'update_at'
:
datetime
.
now
(),
'update_at'
:
datetime
.
now
(),
})
})
result
=
fullStackDB
.
add
(
Summary
,
**
data
)
result
=
fullStackDB
.
add
(
Menu
,
**
data
)
return
result
,
"add
summary
{}."
.
format
(
"success"
if
result
else
"fail"
)
return
result
,
"add
menu
{}."
.
format
(
"success"
if
result
else
"fail"
)
def
delete
(
self
,
uuid
):
def
delete
(
self
,
uuid
):
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
editor
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
))
if
not
editor
:
if
not
editor
:
return
False
,
"current user is not exists"
return
False
,
"current user is not exists"
result
=
fullStackDB
.
update
(
Summary
,
{
'uuid'
:
uuid
},
is_delete
=
True
,
delete_at
=
datetime
.
now
(),
delete_by
=
editor
)
result
=
fullStackDB
.
update
(
Menu
,
{
'uuid'
:
uuid
},
is_delete
=
True
,
delete_at
=
datetime
.
now
(),
delete_by
=
editor
)
return
result
,
"delete
summary
{}."
.
format
(
"success"
if
result
else
"fail"
)
return
result
,
"delete
menu
{}."
.
format
(
"success"
if
result
else
"fail"
)
def
get
(
self
,
data
):
def
get
(
self
,
data
):
result
=
Summary
.
get
(
**
data
)
result
=
Menu
.
get
(
**
data
)
if
result
:
if
result
:
result
=
result
.
to_dict
(
only
=
[
"uuid"
,
"name"
,
"create_at"
,
"update_at"
])
result
=
result
.
to_dict
(
only
=
[
"uuid"
,
"name"
,
"create_at"
,
"update_at"
])
return
result
,
"get
summary
{}."
.
format
(
"success"
if
result
else
"no data"
)
return
result
,
"get
menu
{}."
.
format
(
"success"
if
result
else
"no data"
)
def
getList
(
self
,
data
):
def
getList
(
self
,
data
):
if
not
data
or
len
(
data
)
<=
0
:
if
not
data
or
len
(
data
)
<=
0
:
...
@@ -71,17 +70,17 @@ class SummaryManager(object):
...
@@ -71,17 +70,17 @@ class SummaryManager(object):
temp
.
setdefault
(
"is_delete"
,
False
)
temp
.
setdefault
(
"is_delete"
,
False
)
if
"scope_type"
in
data
and
data
.
get
(
"scope_type"
)
==
"list"
:
if
"scope_type"
in
data
and
data
.
get
(
"scope_type"
)
==
"list"
:
result
=
Summary
.
select
()
.
where
(
**
temp
)
.
order_by
(
desc
(
Summary
.
create_at
))
result
=
Menu
.
select
()
.
where
(
**
temp
)
.
order_by
(
desc
(
Menu
.
create_at
))
temp
=
[]
temp
=
[]
fields
=
[
"uuid"
,
"name"
]
fields
=
[
"uuid"
,
"name"
]
if
"props"
in
data
and
isinstance
(
data
.
get
(
"props"
),
list
):
if
"props"
in
data
and
isinstance
(
data
.
get
(
"props"
),
list
):
fields
=
data
.
get
(
"props"
)
fields
=
data
.
get
(
"props"
)
for
item
in
result
:
for
item
in
result
:
temp
.
append
(
item
.
to_dict
(
only
=
fields
))
temp
.
append
(
item
.
to_dict
(
only
=
fields
))
return
temp
,
len
(
temp
),
"get
summary
{}."
.
format
(
"success"
if
temp
else
"fail"
)
return
temp
,
len
(
temp
),
"get
menu
{}."
.
format
(
"success"
if
temp
else
"fail"
)
result
=
fullStackDB
.
pagination
(
Summary
,
Summary
.
create_at
,
pagenum
=
data
.
get
(
"pagenum"
,
1
),
pagesize
=
data
.
get
(
"pagesize"
,
10
),
**
temp
)
result
=
fullStackDB
.
pagination
(
Menu
,
Menu
.
create_at
,
pagenum
=
data
.
get
(
"pagenum"
,
1
),
pagesize
=
data
.
get
(
"pagesize"
,
10
),
**
temp
)
count
=
fullStackDB
.
count
(
Summary
,
**
temp
)
count
=
fullStackDB
.
count
(
Menu
,
**
temp
)
if
result
and
len
(
result
):
if
result
and
len
(
result
):
temp
=
[]
temp
=
[]
...
@@ -94,7 +93,7 @@ class SummaryManager(object):
...
@@ -94,7 +93,7 @@ class SummaryManager(object):
temp
.
append
(
t
)
temp
.
append
(
t
)
result
=
temp
result
=
temp
return
result
,
count
,
"get
summary
{}."
.
format
(
"success"
if
result
else
"no data"
)
return
result
,
count
,
"get
menu
{}."
.
format
(
"success"
if
result
else
"no data"
)
def
update
(
self
,
uuid
,
data
):
def
update
(
self
,
uuid
,
data
):
# 当参数为空时,直接返回错误
# 当参数为空时,直接返回错误
...
@@ -106,7 +105,7 @@ class SummaryManager(object):
...
@@ -106,7 +105,7 @@ class SummaryManager(object):
if
not
editor
:
if
not
editor
:
return
False
,
"current user is not exists"
return
False
,
"current user is not exists"
result
=
fullStackDB
.
update
(
Summary
,
{
'uuid'
:
uuid
},
update_at
=
datetime
.
now
(),
update_by
=
editor
,
**
data
)
result
=
fullStackDB
.
update
(
Menu
,
{
'uuid'
:
uuid
},
update_at
=
datetime
.
now
(),
update_by
=
editor
,
**
data
)
return
result
,
"update
summary
{}."
.
format
(
"success"
if
result
else
"fail"
)
return
result
,
"update
menu
{}."
.
format
(
"success"
if
result
else
"fail"
)
summaryManager
=
Summary
Manager
()
menuManager
=
Menu
Manager
()
backend/controller/user_manager.py
View file @
ddda8b89
...
@@ -94,7 +94,7 @@ class UserManager(object):
...
@@ -94,7 +94,7 @@ class UserManager(object):
user
=
User
.
get
(
uuid
=
uuid
)
user
=
User
.
get
(
uuid
=
uuid
)
if
user
:
if
user
:
user
.
set
(
update_at
=
datetime
.
now
(),
update_by
=
editor
.
id
,
**
data
)
user
.
set
(
update_at
=
datetime
.
now
(),
update_by
=
editor
.
id
,
**
data
)
result
=
user
.
to_dict
(
only
=
[
"account"
,
"gender"
,
"birthday"
,
"
hometown"
,
"
phone"
,
"email"
,])
result
=
user
.
to_dict
(
only
=
[
"account"
,
"gender"
,
"birthday"
,
"phone"
,
"email"
,])
if
result
.
get
(
"birthday"
):
if
result
.
get
(
"birthday"
):
result
.
update
({
"birthday"
:
result
.
get
(
"birthday"
)
.
strftime
(
"
%
Y-
%
m-
%
d"
)
})
result
.
update
({
"birthday"
:
result
.
get
(
"birthday"
)
.
strftime
(
"
%
Y-
%
m-
%
d"
)
})
return
result
,
"update user success"
return
result
,
"update user success"
...
@@ -105,9 +105,29 @@ class UserManager(object):
...
@@ -105,9 +105,29 @@ class UserManager(object):
'''
'''
查询单用户
查询单用户
'''
'''
result
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
),
is_delete
=
False
)
result
=
User
.
get
(
id
=
request
.
current_user
.
get
(
"id"
),
is_delete
=
False
)
if
result
:
if
result
:
temp
=
result
.
to_dict
(
with_collections
=
True
,
related_objects
=
True
,
only
=
[
"uuid"
,
"username"
,
"account"
,
"phone"
,
"email"
,
"gender"
,
"create_at"
,
"update_at"
])
# 根据用户账号类型,返回不同的菜单
menus
=
[
{
'id'
:
1
,
'path'
:
'/'
,
'name'
:
None
,
'redirect'
:
'/home'
,
'component'
:
'Layout'
,
'title'
:
None
,
'icon'
:
None
,
'parent_id'
:
0
},
{
'id'
:
2
,
'path'
:
'home'
,
'name'
:
'AppIndex'
,
'redirect'
:
None
,
'component'
:
'Home'
,
'title'
:
'应用管理'
,
'icon'
:
'gongzuotai'
,
'parent_id'
:
1
},
{
'id'
:
3
,
'path'
:
'/'
,
'name'
:
None
,
'redirect'
:
'/build'
,
'component'
:
'Layout'
,
'title'
:
None
,
'icon'
:
None
,
'parent_id'
:
0
},
{
'id'
:
4
,
'path'
:
'build'
,
'name'
:
'AppBuild'
,
'redirect'
:
None
,
'component'
:
'Build'
,
'title'
:
'打包日志'
,
'icon'
:
'gongzuotai'
,
'parent_id'
:
3
},
{
'id'
:
5
,
'path'
:
'/'
,
'name'
:
None
,
'redirect'
:
'/profile'
,
'component'
:
'Layout'
,
'title'
:
None
,
'icon'
:
None
,
'parent_id'
:
0
},
{
'id'
:
6
,
'path'
:
'profile'
,
'name'
:
'Profile'
,
'redirect'
:
None
,
'component'
:
'Profile'
,
'title'
:
'个人中心'
,
'icon'
:
'shangcheng'
,
'parent_id'
:
5
},
]
if
result
.
role
==
"ADMIN"
:
menus
=
menus
+
[
{
'id'
:
7
,
'path'
:
'/'
,
'name'
:
None
,
'redirect'
:
'/download'
,
'component'
:
'Layout'
,
'title'
:
None
,
'icon'
:
None
,
'parent_id'
:
0
},
{
'id'
:
8
,
'path'
:
'download'
,
'name'
:
'Download'
,
'redirect'
:
None
,
'component'
:
'Download'
,
'title'
:
'下载记录'
,
'icon'
:
'gongzuotai'
,
'parent_id'
:
7
},
{
'id'
:
9
,
'path'
:
'/'
,
'name'
:
None
,
'redirect'
:
'/framework'
,
'component'
:
'Layout'
,
'title'
:
None
,
'icon'
:
None
,
'parent_id'
:
0
},
{
'id'
:
10
,
'path'
:
'framework'
,
'name'
:
'Framework'
,
'redirect'
:
None
,
'component'
:
'Framework'
,
'title'
:
'系统页面'
,
'icon'
:
'gongzuotai'
,
'parent_id'
:
9
},
{
'id'
:
11
,
'path'
:
'/'
,
'name'
:
None
,
'redirect'
:
'/users'
,
'component'
:
'Layout'
,
'title'
:
None
,
'icon'
:
None
,
'parent_id'
:
0
},
{
'id'
:
12
,
'path'
:
'users'
,
'name'
:
'User'
,
'redirect'
:
None
,
'component'
:
'User'
,
'title'
:
'用户管理'
,
'icon'
:
'user'
,
'parent_id'
:
11
},
]
temp
=
result
.
to_dict
(
with_collections
=
True
,
related_objects
=
True
,
only
=
[
"uuid"
,
"username"
,
"account"
,
"role"
,
"phone"
,
"email"
,
"gender"
,
"create_at"
,
"update_at"
])
temp
.
update
({
temp
.
update
({
"create_at"
:
result
.
create_at
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
if
result
.
create_at
else
None
,
"create_at"
:
result
.
create_at
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
if
result
.
create_at
else
None
,
"update_at"
:
result
.
update_at
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
if
result
.
update_at
else
None
,
"update_at"
:
result
.
update_at
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
if
result
.
update_at
else
None
,
...
...
backend/model/
summary
.py
→
backend/model/
menu
.py
View file @
ddda8b89
...
@@ -9,28 +9,24 @@ from . import fullStackDB
...
@@ -9,28 +9,24 @@ from . import fullStackDB
db
=
fullStackDB
.
db
db
=
fullStackDB
.
db
class
Summary
(
db
.
Entity
):
class
Menu
(
db
.
Entity
):
_table_
=
"{}"
.
format
(
config
[
'TABLE_PREFIX'
])
+
"
summary
"
_table_
=
"{}"
.
format
(
config
[
'TABLE_PREFIX'
])
+
"
menu
"
id
=
PrimaryKey
(
int
,
auto
=
True
)
id
=
PrimaryKey
(
int
,
auto
=
True
)
uuid
=
Required
(
uuid
.
UUID
,
unique
=
True
,
default
=
uuid
.
uuid1
,
index
=
True
)
uuid
=
Required
(
uuid
.
UUID
,
unique
=
True
,
default
=
uuid
.
uuid1
,
index
=
True
)
name
=
Required
(
str
,
max_len
=
200
)
# 总结标题
name
=
Optional
(
str
)
year_supervise_churn_rate
=
Required
(
float
)
# 年度监督流失率
title
=
Required
(
str
)
year_recert_churn_rate
=
Required
(
float
)
# 年度再认证流失率
path
=
Required
(
str
)
year_satis_churn_rate
=
Required
(
float
)
# 年度顾客满意率
icon
=
Optional
(
str
)
year_dispatch_site_days
=
Required
(
int
)
# 年度调派技术现场总人天数
hidden
=
Optional
(
bool
,
default
=
False
)
year_receiv_collection_rate
=
Required
(
float
)
# 年度应收款回款率
component
=
Required
(
str
)
year_bad_project
=
Required
(
int
)
# 年度列入坏账并终止项目数
redirect
=
Optional
(
str
)
year_bad_debt_amount
=
Required
(
float
)
# 年度坏账金额
parent_id
=
Optional
(
str
,
default
=
""
)
indus_project_rate
=
Required
(
float
)
# 行业项目比率
indus_project_count
=
Required
(
int
)
# 行业项目数量
channel_project_rate
=
Required
(
float
)
# 渠道开发项目比率
channel_project_count
=
Required
(
int
)
# 渠道开发项目数量
create_at
=
Required
(
datetime
,
default
=
datetime
.
now
)
create_at
=
Required
(
datetime
,
default
=
datetime
.
now
)
create_by
=
Required
(
"User"
,
reverse
=
'
summary_creator'
)
# Summary
与User一对一关系
create_by
=
Required
(
"User"
,
reverse
=
'
menu_creator'
)
# Menu
与User一对一关系
update_at
=
Required
(
datetime
,
default
=
datetime
.
now
)
update_at
=
Required
(
datetime
,
default
=
datetime
.
now
)
update_by
=
Required
(
"User"
,
reverse
=
'
summary_updater'
)
# Summary
与User一对一关系
update_by
=
Required
(
"User"
,
reverse
=
'
menu_updater'
)
# Menu
与User一对一关系
delete_at
=
Optional
(
datetime
)
delete_at
=
Optional
(
datetime
)
delete_by
=
Optional
(
"User"
,
reverse
=
'
summary_deleter'
)
# Summary
与User一对一关系
delete_by
=
Optional
(
"User"
,
reverse
=
'
menu_deleter'
)
# Menu
与User一对一关系
is_delete
=
Required
(
bool
,
default
=
False
)
is_delete
=
Required
(
bool
,
default
=
False
)
sort
=
Optional
(
int
,
size
=
32
,
default
=
0
)
sort
=
Optional
(
int
,
size
=
32
,
default
=
0
)
remarks
=
Optional
(
str
,
max_len
=
255
,
default
=
""
,
nullable
=
True
)
remarks
=
Optional
(
str
,
max_len
=
255
,
default
=
""
,
nullable
=
True
)
\ No newline at end of file
backend/model/user.py
View file @
ddda8b89
...
@@ -13,6 +13,7 @@ class User(db.Entity):
...
@@ -13,6 +13,7 @@ class User(db.Entity):
_table_
=
"{}"
.
format
(
config
[
'TABLE_PREFIX'
])
+
"user"
_table_
=
"{}"
.
format
(
config
[
'TABLE_PREFIX'
])
+
"user"
id
=
PrimaryKey
(
int
,
auto
=
True
)
id
=
PrimaryKey
(
int
,
auto
=
True
)
uuid
=
Required
(
uuid
.
UUID
,
unique
=
True
,
default
=
uuid
.
uuid1
,
index
=
True
)
uuid
=
Required
(
uuid
.
UUID
,
unique
=
True
,
default
=
uuid
.
uuid1
,
index
=
True
)
role
=
Required
(
str
,
default
=
"User"
)
# 角色
account
=
Required
(
str
,
unique
=
True
)
# 账号
account
=
Required
(
str
,
unique
=
True
)
# 账号
username
=
Required
(
str
,
max_len
=
100
)
# 用户名
username
=
Required
(
str
,
max_len
=
100
)
# 用户名
password
=
Required
(
str
,
max_len
=
64
)
password
=
Required
(
str
,
max_len
=
64
)
...
@@ -43,4 +44,7 @@ class User(db.Entity):
...
@@ -43,4 +44,7 @@ class User(db.Entity):
build_logs_deleter
=
Set
(
'BuildLogs'
,
reverse
=
'delete_by'
)
build_logs_deleter
=
Set
(
'BuildLogs'
,
reverse
=
'delete_by'
)
framework_creator
=
Set
(
'Framework'
,
reverse
=
'create_by'
)
framework_creator
=
Set
(
'Framework'
,
reverse
=
'create_by'
)
framework_updater
=
Set
(
'Framework'
,
reverse
=
'update_by'
)
framework_updater
=
Set
(
'Framework'
,
reverse
=
'update_by'
)
framework_deleter
=
Set
(
'Framework'
,
reverse
=
'delete_by'
)
framework_deleter
=
Set
(
'Framework'
,
reverse
=
'delete_by'
)
\ No newline at end of file
menu_creator
=
Set
(
'Menu'
,
reverse
=
'create_by'
)
menu_updater
=
Set
(
'Menu'
,
reverse
=
'update_by'
)
menu_deleter
=
Set
(
'Menu'
,
reverse
=
'delete_by'
)
backend/schema/user.py
View file @
ddda8b89
...
@@ -13,13 +13,14 @@ from marshmallow import fields, validate, RAISE, INCLUDE, EXCLUDE
...
@@ -13,13 +13,14 @@ from marshmallow import fields, validate, RAISE, INCLUDE, EXCLUDE
'''
'''
class
AddSchema
(
BaseSchema
):
class
AddSchema
(
BaseSchema
):
account
=
fields
.
String
(
required
=
True
,
validate
=
validate
.
Length
(
min
=
2
,
max
=
20
)
)
account
=
fields
.
String
(
required
=
True
)
username
=
fields
.
String
(
required
=
False
,
validate
=
validate
.
Length
(
min
=
2
,
max
=
20
)
)
username
=
fields
.
String
(
required
=
False
)
password
=
fields
.
String
(
required
=
True
,
validate
=
validate
.
Length
(
min
=
6
,
max
=
18
)
)
password
=
fields
.
String
(
required
=
True
)
email
=
fields
.
Email
(
required
=
False
,
default
=
""
)
email
=
fields
.
Email
(
required
=
False
,
default
=
""
)
phone
=
fields
.
String
(
required
=
False
,
default
=
""
)
phone
=
fields
.
String
(
required
=
False
,
default
=
""
)
gender
=
fields
.
Int
(
required
=
False
,
default
=
1
)
gender
=
fields
.
Int
(
required
=
False
,
default
=
1
)
birthday
=
fields
.
Date
(
required
=
False
,
default
=
None
)
birthday
=
fields
.
Date
(
required
=
False
,
default
=
None
)
role
=
fields
.
String
(
required
=
False
)
remarks
=
fields
.
String
(
required
=
False
)
remarks
=
fields
.
String
(
required
=
False
)
class
Meta
:
class
Meta
:
...
@@ -31,12 +32,13 @@ class DeleteSchema(BaseSchema):
...
@@ -31,12 +32,13 @@ class DeleteSchema(BaseSchema):
class
UpdateSchema
(
BaseSchema
):
class
UpdateSchema
(
BaseSchema
):
uuid
=
fields
.
UUID
(
required
=
False
)
uuid
=
fields
.
UUID
(
required
=
False
)
account
=
fields
.
String
(
required
=
False
,
validate
=
validate
.
Length
(
min
=
2
,
max
=
20
)
)
account
=
fields
.
String
(
required
=
False
)
username
=
fields
.
String
(
required
=
False
,
validate
=
validate
.
Length
(
min
=
2
,
max
=
20
)
)
username
=
fields
.
String
(
required
=
False
)
email
=
fields
.
Email
(
required
=
False
)
email
=
fields
.
Email
(
required
=
False
)
phone
=
fields
.
String
(
required
=
False
)
phone
=
fields
.
String
(
required
=
False
)
gender
=
fields
.
Int
(
required
=
False
)
gender
=
fields
.
Int
(
required
=
False
)
birthday
=
fields
.
Date
(
missing
=
False
)
birthday
=
fields
.
Date
(
required
=
False
)
role
=
fields
.
String
(
required
=
False
)
remarks
=
fields
.
String
(
required
=
False
)
remarks
=
fields
.
String
(
required
=
False
)
class
Meta
:
class
Meta
:
...
@@ -53,16 +55,13 @@ class QuerySchema(BaseSchema):
...
@@ -53,16 +55,13 @@ class QuerySchema(BaseSchema):
class
ResponseSchema
(
BaseSchema
):
class
ResponseSchema
(
BaseSchema
):
uuid
=
fields
.
UUID
(
required
=
True
)
uuid
=
fields
.
UUID
(
required
=
True
)
account
=
fields
.
String
(
required
=
True
,
validate
=
validate
.
Length
(
min
=
2
,
max
=
20
)
)
account
=
fields
.
String
(
required
=
True
)
username
=
fields
.
String
(
required
=
True
,
validate
=
validate
.
Length
(
min
=
2
,
max
=
20
)
)
username
=
fields
.
String
(
required
=
True
)
password
=
fields
.
String
(
required
=
True
,
validate
=
validate
.
Length
(
min
=
6
,
max
=
18
)
)
password
=
fields
.
String
(
required
=
True
)
email
=
fields
.
Email
(
required
=
False
)
email
=
fields
.
Email
(
required
=
False
)
phone
=
fields
.
String
(
required
=
True
)
phone
=
fields
.
String
(
required
=
True
)
gender
=
fields
.
Int
(
required
=
True
)
gender
=
fields
.
Int
(
required
=
True
)
birthday
=
fields
.
Date
(
required
=
False
)
birthday
=
fields
.
Date
(
required
=
False
)
hometown
=
fields
.
String
(
required
=
False
)
entry_time
=
fields
.
DateTime
(
required
=
True
)
expire_date
=
fields
.
DateTime
(
required
=
True
)
remarks
=
fields
.
String
(
required
=
True
)
remarks
=
fields
.
String
(
required
=
True
)
class
Meta
:
class
Meta
:
...
...
frontend/src/assets/images/logo.png
View replaced file @
883c66c3
View file @
ddda8b89
22.1 KB
|
W:
|
H:
23.8 KB
|
W:
|
H:
2-up
Swipe
Onion skin
frontend/src/layout/index.vue
View file @
ddda8b89
...
@@ -433,7 +433,7 @@
...
@@ -433,7 +433,7 @@
<div
class=
"dropdown"
v-show=
"userShow"
style=
"right: 20px;"
>
<div
class=
"dropdown"
v-show=
"userShow"
style=
"right: 20px;"
>
<ul>
<ul>
<li
@
click=
"redirectTo('/
system/
profile')"
>
<li
@
click=
"redirectTo('/profile')"
>
<i
aria-label=
"图标: user"
class=
"webicon"
>
<i
aria-label=
"图标: user"
class=
"webicon"
>
<svg
viewBox=
"64 64 896 896"
data-icon=
"user"
width=
"1em"
height=
"1em"
fill=
"currentColor"
aria-hidden=
"true"
focusable=
"false"
><path
d=
"M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
></path></svg>
<svg
viewBox=
"64 64 896 896"
data-icon=
"user"
width=
"1em"
height=
"1em"
fill=
"currentColor"
aria-hidden=
"true"
focusable=
"false"
><path
d=
"M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z"
></path></svg>
</i>
个人中心
</i>
个人中心
...
...
frontend/src/permission.js
View file @
ddda8b89
...
@@ -3,7 +3,8 @@ import store from "@/store"; // get token from cookie
...
@@ -3,7 +3,8 @@ import store from "@/store"; // get token from cookie
import
NProgress
from
"
nprogress
"
;
// progress bar
import
NProgress
from
"
nprogress
"
;
// progress bar
import
"
nprogress/nprogress.css
"
;
// progress bar style
import
"
nprogress/nprogress.css
"
;
// progress bar style
import
{
getPageTitle
}
from
"
@/utils/index
"
;
import
{
getPageTitle
}
from
"
@/utils/index
"
;
import
{
default
as
def
}
from
"
./settings
"
;
const
whiteList
=
[
"
/login
"
,
"
/register
"
];
NProgress
.
configure
({
showSpinner
:
false
});
// NProgress Configuration
NProgress
.
configure
({
showSpinner
:
false
});
// NProgress Configuration
...
@@ -27,7 +28,7 @@ router.beforeEach(async (to, from, next) => {
...
@@ -27,7 +28,7 @@ router.beforeEach(async (to, from, next) => {
}
}
}
else
{
}
else
{
/* has no token*/
/* has no token*/
if
(
def
.
whiteList
.
indexOf
(
to
.
path
)
!==
-
1
)
{
if
(
whiteList
.
indexOf
(
to
.
path
)
!==
-
1
)
{
// in the free login whitelist, go directly
// in the free login whitelist, go directly
next
();
next
();
}
else
{
}
else
{
...
...
frontend/src/router/index.js
View file @
ddda8b89
import
Vue
from
"
vue
"
;
import
Vue
from
"
vue
"
;
import
Router
from
"
vue-router
"
;
import
Router
from
"
vue-router
"
;
import
setting
from
"
@/settings.js
"
;
const
pageInfos
=
setting
.
pageInfos
;
Vue
.
use
(
Router
);
Vue
.
use
(
Router
);
/* Layout */
/* Layout */
import
Layout
from
"
@/layout
"
;
import
Layout
from
"
@/layout
"
;
import
View
from
"
@/layout/view
"
;
/**
/**
* Note: sub-menu only appear when route children.length >= 1
* Note: sub-menu only appear when route children.length >= 1
...
@@ -29,64 +25,6 @@ import View from "@/layout/view";
...
@@ -29,64 +25,6 @@ import View from "@/layout/view";
}
}
*/
*/
const
newRules
=
[];
const
recursion
=
(
obj
,
parent
)
=>
{
return
obj
.
children
.
map
((
ele
)
=>
{
let
res
=
{};
if
(
ele
.
children
&&
ele
.
children
.
length
>
0
)
{
res
.
path
=
ele
.
path
;
res
.
component
=
View
;
res
.
redirect
=
`/
${
obj
.
path
}
/
${
ele
.
path
}
/
${
ele
.
children
[
0
].
path
}
`
;
res
.
children
=
recursion
(
ele
,
`/
${
obj
.
path
}
`
);
}
else
{
let
t
=
{
path
:
`
${
parent
?
parent
:
""
}
/
${
obj
.
path
}
/
${
ele
.
path
}
`
,
component
:
()
=>
import
(
`@/views/
${
ele
.
vue
}
`
),
meta
:
{
title
:
ele
.
title
,
icon
:
ele
.
icon
,
keepAlive
:
ele
.
keepAlive
||
false
,
},
hidden
:
ele
.
hidden
||
false
,
};
if
(
ele
.
name
)
res
.
name
=
ele
.
name
;
if
(
ele
.
redirect
)
res
.
redirect
=
ele
.
redirect
;
res
=
Object
.
assign
(
res
,
t
);
}
return
res
;
});
};
pageInfos
.
forEach
((
item
)
=>
{
let
routeObj
=
{
path
:
`/
${
item
.
path
}
`
,
component
:
Layout
,
hidden
:
item
.
hidden
||
false
,
};
if
(
item
.
redirect
)
routeObj
.
redirect
=
item
.
redirect
;
if
(
item
.
children
&&
item
.
children
.
length
>
0
)
{
routeObj
.
redirect
=
`/
${
item
.
path
}
/
${
item
.
children
[
0
].
path
}
`
;
routeObj
.
children
=
recursion
(
item
);
}
else
{
routeObj
.
children
=
[
{
path
:
`/
${
item
.
path
}
`
,
name
:
item
.
name
,
component
:
()
=>
import
(
`@/views/
${
item
.
vue
}
`
),
meta
:
{
title
:
item
.
title
,
icon
:
item
.
icon
,
keepAlive
:
item
.
keepAlive
||
false
,
},
},
];
}
newRules
.
push
(
routeObj
);
});
/**
/**
* constantRoutes
* constantRoutes
...
@@ -94,60 +32,133 @@ pageInfos.forEach((item) => {
...
@@ -94,60 +32,133 @@ pageInfos.forEach((item) => {
* all roles can be accessed
* all roles can be accessed
*/
*/
export
const
constantRoutes
=
[
export
const
constantRoutes
=
[
{
{
path
:
"
/login
"
,
path
:
"
/login
"
,
component
:
()
=>
import
(
"
@/views/login/index
"
),
component
:
()
=>
import
(
"
@/views/login/index
"
),
hidden
:
true
,
hidden
:
true
,
},
},
{
{
path
:
"
/register
"
,
path
:
"
/register
"
,
component
:
()
=>
import
(
"
@/views/login/register
"
),
component
:
()
=>
import
(
"
@/views/login/register
"
),
hidden
:
true
,
hidden
:
true
,
},
},
{
{
path
:
'
/
'
,
path
:
'
/
'
,
redirect
:
'
/404
'
,
redirect
:
'
/home
'
,
component
:
Layout
,
component
:
Layout
,
children
:
[{
children
:
[{
path
:
'
404
'
,
path
:
'
home
'
,
name
:
'
Page404
'
,
name
:
'
AppIndex
'
,
component
:
()
=>
import
(
'
@/views/error-pages/404
'
),
component
:
()
=>
import
(
'
@/views/app-store/index.vue
'
),
meta
:
{
title
:
'
404
'
,
icon
:
'
home
'
}
meta
:
{
title
:
'
应用管理
'
,
icon
:
'
home
'
}
}]
}]
},
},
{
{
path
:
'
/
'
,
path
:
'
/
'
,
redirect
:
'
/403
'
,
redirect
:
'
/build
'
,
component
:
Layout
,
component
:
Layout
,
children
:
[{
children
:
[{
path
:
'
403
'
,
path
:
'
build
'
,
name
:
'
Page403
'
,
name
:
'
AppBuild
'
,
component
:
()
=>
import
(
'
@/views/error-pages/403
'
),
component
:
()
=>
import
(
'
@/views/app-store/build.vue
'
),
meta
:
{
title
:
'
403
'
,
icon
:
'
home
'
}
meta
:
{
title
:
'
打包日志
'
,
icon
:
'
home
'
}
}]
}]
},
},
...
newRules
,
{
path
:
'
/
'
,
{
path
:
"
/
"
,
redirect
:
"
/home
"
,
hidden
:
true
},
redirect
:
'
/download
'
,
component
:
Layout
,
// 404 page must be placed at the end !!!
children
:
[{
{
path
:
"
*
"
,
redirect
:
"
/404
"
,
hidden
:
true
},
path
:
'
download
'
,
name
:
'
AppDownload
'
,
component
:
()
=>
import
(
'
@/views/app-store/download.vue
'
),
meta
:
{
title
:
'
下载记录
'
,
icon
:
'
gongzuotai
'
}
}]
},
{
path
:
'
/
'
,
redirect
:
'
/framework
'
,
component
:
Layout
,
children
:
[{
path
:
'
framework
'
,
name
:
'
Framework
'
,
component
:
()
=>
import
(
'
@/views/app-store/framework.vue
'
),
meta
:
{
title
:
'
系统页面
'
,
icon
:
'
gongzuotai
'
}
}]
},
{
path
:
'
/
'
,
redirect
:
'
/profile
'
,
component
:
Layout
,
children
:
[{
path
:
'
profile
'
,
name
:
'
Profile
'
,
component
:
()
=>
import
(
'
@/views/profile/index.vue
'
),
meta
:
{
title
:
'
个人中心
'
,
icon
:
'
shangcheng
'
}
}]
},
{
path
:
'
/
'
,
redirect
:
'
/user
'
,
component
:
Layout
,
children
:
[{
path
:
'
user
'
,
name
:
'
UserIndex
'
,
component
:
()
=>
import
(
'
@/views/system/users.vue
'
),
meta
:
{
title
:
'
用户管理
'
,
icon
:
'
shangcheng
'
}
}]
},
{
path
:
'
/
'
,
redirect
:
'
/404
'
,
component
:
Layout
,
children
:
[{
path
:
'
404
'
,
name
:
'
Page404
'
,
component
:
()
=>
import
(
'
@/views/error-pages/404
'
),
meta
:
{
title
:
'
404
'
,
icon
:
'
home
'
}
}]
},
{
path
:
'
/
'
,
redirect
:
'
/403
'
,
component
:
Layout
,
children
:
[{
path
:
'
403
'
,
name
:
'
Page403
'
,
component
:
()
=>
import
(
'
@/views/error-pages/403
'
),
meta
:
{
title
:
'
403
'
,
icon
:
'
home
'
}
}]
}
];
];
// 404 page must be placed at the end !!!
export
const
notFound
=
{
path
:
'
*
'
,
redirect
:
'
/404
'
,
hidden
:
true
}
export
const
routerMap
=
{
Layout
:
()
=>
import
(
'
@/layout
'
),
Home
:
()
=>
import
(
'
@/views/app-store/index
'
),
Build
:
()
=>
import
(
'
@/views/app-store/build
'
),
Profile
:
()
=>
import
(
'
@/views/profile/index
'
),
Download
:
()
=>
import
(
'
@/views/app-store/download
'
),
Framework
:
()
=>
import
(
'
@/views/app-store/framework
'
),
User
:
()
=>
import
(
'
@/views/system/users
'
),
}
const
createRouter
=
()
=>
const
createRouter
=
()
=>
new
Router
({
new
Router
({
// mode: 'history', // require service support, 后台部署在/static 目录
// mode: 'history', // require service support, 后台部署在/static 目录
// base: "/static", // 应用的基础路径: 默认为'/',修改为'/static'
// base: "/static", // 应用的基础路径: 默认为'/',修改为'/static'
scrollBehavior
:
()
=>
({
y
:
0
}),
scrollBehavior
:
()
=>
({
y
:
0
}),
routes
:
constantRoutes
,
routes
:
constantRoutes
,
});
});
const
router
=
createRouter
();
const
router
=
createRouter
();
// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export
function
resetRouter
()
{
export
function
resetRouter
()
{
const
newRouter
=
createRouter
();
const
newRouter
=
createRouter
();
router
.
matcher
=
newRouter
.
matcher
;
// reset router
router
.
matcher
=
newRouter
.
matcher
;
// reset router
}
}
export
default
router
;
export
default
router
;
frontend/src/settings.js
View file @
ddda8b89
...
@@ -71,6 +71,4 @@ export default {
...
@@ -71,6 +71,4 @@ export default {
path
:
"
user
"
,
path
:
"
user
"
,
},
},
],
],
whiteList
:
[
"
/login
"
,
"
/register
"
],
};
};
frontend/src/views/app-store/build.vue
View file @
ddda8b89
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
>
查询
</el-button
>
查询
</el-button
></el-form-item
></el-form-item
>
>
<el-form-item><el-button
@
click=
"onReset"
>
重置
</el-button></el-form-item>
<el-form-item><el-button
@
click=
"onReset
('form')
"
>
重置
</el-button></el-form-item>
</el-form>
</el-form>
<el-table
<el-table
v-loading=
"isLoading"
v-loading=
"isLoading"
...
@@ -31,25 +31,29 @@
...
@@ -31,25 +31,29 @@
<el-table-column
<el-table-column
prop=
"app.app_name"
prop=
"app.app_name"
label=
"应用名称"
label=
"应用名称"
width=
"180"
min-
width=
"180"
></el-table-column>
></el-table-column>
<el-table-column
<el-table-column
prop=
"build_text"
prop=
"app.app_url"
label=
"打包信息"
label=
"应用路径"
min-width=
"250"
min-width=
"180"
:show-overflow-tooltip=
"true"
></el-table-column>
<el-table-column
prop=
"app.app_version"
label=
"应用版本"
min-width=
"180"
></el-table-column>
></el-table-column>
<el-table-column
<el-table-column
prop=
"create_at"
prop=
"create_at"
label=
"创建时间"
label=
"创建时间"
width=
"150"
min-
width=
"150"
></el-table-column>
></el-table-column>
<el-table-column
<el-table-column
prop=
"create_by.username"
prop=
"create_by.username"
label=
"创建者"
label=
"创建者"
width=
"150"
min-
width=
"150"
></el-table-column>
></el-table-column>
<el-table-column
label=
"操作"
align=
"center"
width=
"
2
40"
fixed=
"right"
>
<el-table-column
label=
"操作"
align=
"center"
width=
"
1
40"
fixed=
"right"
>
<template
slot-scope=
"scope"
>
<template
slot-scope=
"scope"
>
<el-button
<el-button
size=
"mini"
size=
"mini"
...
@@ -57,18 +61,6 @@
...
@@ -57,18 +61,6 @@
@
click=
"handleDownload(scope.$index, scope.row)"
@
click=
"handleDownload(scope.$index, scope.row)"
>
下载
</el-button
>
下载
</el-button
>
>
<el-button
size=
"mini"
type=
"success"
@
click=
"handleEdit(scope.$index, scope.row)"
>
编辑
</el-button
>
<el-button
size=
"mini"
type=
"danger"
@
click=
"handleDelete(scope.$index, scope.row)"
>
删除
</el-button
>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
...
...
frontend/src/views/app-store/download.vue
View file @
ddda8b89
...
@@ -95,6 +95,7 @@ export default {
...
@@ -95,6 +95,7 @@ export default {
},
},
mounted
()
{},
mounted
()
{},
created
()
{
created
()
{
if
(
this
.
$store
.
getters
.
role
!==
"
ADMIN
"
)
this
.
$router
.
push
({
path
:
"
/403
"
})
this
.
fetchData
(
mapTrim
(
this
.
form
))
this
.
fetchData
(
mapTrim
(
this
.
form
))
}
}
}
}
...
...
frontend/src/views/app-store/framework.vue
View file @
ddda8b89
...
@@ -220,6 +220,7 @@ export default {
...
@@ -220,6 +220,7 @@ export default {
},
},
mounted
()
{},
mounted
()
{},
created
()
{
created
()
{
if
(
this
.
$store
.
getters
.
role
!==
"
ADMIN
"
)
this
.
$router
.
push
({
path
:
"
/403
"
})
this
.
fetchData
()
this
.
fetchData
()
this
.
fetchSelectData
()
this
.
fetchSelectData
()
}
}
...
...
frontend/src/views/login/index.vue
View file @
ddda8b89
...
@@ -51,8 +51,8 @@
...
@@ -51,8 +51,8 @@
</div>
</div>
</
template
>
</
template
>
<
script
>
<
script
>
import
{
doLogin
,
getUser
}
from
"
@/api/index
"
;
import
{
doLogin
,
getUser
}
from
"
@/api/index
"
import
{
strTrim
}
from
"
@/utils/index
"
;
import
{
strTrim
}
from
"
@/utils/index
"
let
loading
=
null
let
loading
=
null
...
@@ -73,9 +73,9 @@ export default {
...
@@ -73,9 +73,9 @@ export default {
getUserPermission
()
{
getUserPermission
()
{
getUser
()
getUser
()
.
then
((
res
)
=>
{
.
then
((
res
)
=>
{
this
.
$store
.
dispatch
(
"
user/setRole
"
,
res
.
data
.
role
);
this
.
$store
.
dispatch
(
"
user/setRole
"
,
res
.
data
.
role
);
sessionStorage
.
setItem
(
"
user
"
,
JSON
.
stringify
(
res
.
data
));
sessionStorage
.
setItem
(
"
user
"
,
JSON
.
stringify
(
res
.
data
));
this
.
$router
.
push
({
path
:
"
/home
"
});
this
.
$router
.
push
({
path
:
"
/home
"
});
})
})
.
catch
((
err
)
=>
{
.
catch
((
err
)
=>
{
this
.
$message
.
error
(
err
.
message
);
this
.
$message
.
error
(
err
.
message
);
...
...
frontend/src/views/profile/index.vue
View file @
ddda8b89
...
@@ -87,21 +87,6 @@
...
@@ -87,21 +87,6 @@
<el-input
v-model.trim=
"user.email"
/>
<el-input
v-model.trim=
"user.email"
/>
</el-col>
</el-col>
</el-form-item>
</el-form-item>
<el-form-item
label=
"籍贯"
prop=
"hometown"
>
<el-col
:md=
"8"
:xs=
"24"
>
<el-input
v-model.trim=
"user.hometown"
/>
</el-col>
</el-form-item>
<el-form-item
label=
"部门"
>
<el-col
:md=
"8"
:xs=
"24"
>
<el-input
v-model.trim=
"user.hometown"
disabled
/>
</el-col>
</el-form-item>
<el-form-item
label=
"角色"
>
<el-col
:md=
"8"
:xs=
"24"
>
<el-input
v-model.trim=
"user.hometown"
disabled
/>
</el-col>
</el-form-item>
<el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"submitForm('post')"
<el-button
type=
"primary"
@
click=
"submitForm('post')"
>
更新资料
</el-button
>
更新资料
</el-button
...
...
frontend/src/views/system/users.vue
View file @
ddda8b89
This diff is collapsed.
Click to expand it.
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