Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
front-backend
Overview
Overview
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
framework
front-backend
Commits
204710f2
Commit
204710f2
authored
Mar 06, 2020
by
Moxun1639
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
以$options.cruds()方式实例化crud,避免多组件实例共享crud
parent
e619f77d
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
107 additions
and
69 deletions
+107
-69
src/components/Crud/crud.js
+21
-8
src/views/generator/index.vue
+4
-3
src/views/mnt/app/index.vue
+5
-3
src/views/mnt/database/index.vue
+5
-3
src/views/mnt/deploy/index.vue
+6
-3
src/views/mnt/deployHistory/index.vue
+5
-3
src/views/mnt/server/index.vue
+5
-3
src/views/monitor/log/errorLog.vue
+4
-3
src/views/monitor/log/index.vue
+4
-3
src/views/monitor/online/index.vue
+4
-3
src/views/monitor/server/index.vue
+4
-3
src/views/system/dept/index.vue
+4
-3
src/views/system/job/index.vue
+8
-8
src/views/system/menu/index.vue
+4
-2
src/views/system/role/index.vue
+4
-3
src/views/system/timing/index.vue
+4
-3
src/views/system/user/index.vue
+4
-3
src/views/tools/picture/index.vue
+4
-3
src/views/tools/storage/local/index.vue
+4
-3
src/views/tools/storage/qiniu/index.vue
+4
-3
No files found.
src/components/Crud/crud.js
View file @
204710f2
...
...
@@ -593,15 +593,24 @@ function lookupCrud(vm, tag) {
* crud主页
*/
function
presenter
(
crud
)
{
if
(
crud
)
{
console
.
warn
(
'[CRUD warn]: '
+
'please use $options.cruds() { return CRUD(...) or [CRUD(...), ...] }'
)
}
return
{
beforeCreate
()
{
this
.
$crud
=
this
.
$crud
||
{}
if
(
this
.
$crud
[
crud
.
tag
])
{
console
.
error
(
'[CRUD error]: '
+
'crud with tag ['
+
crud
.
tag
+
' is already exist'
)
let
cruds
=
this
.
$options
.
cruds
instanceof
Function
?
this
.
$options
.
cruds
()
:
crud
if
(
!
(
cruds
instanceof
Array
))
{
cruds
=
[
cruds
]
}
cruds
.
forEach
(
ele
=>
{
if
(
this
.
$crud
[
ele
.
tag
])
{
console
.
error
(
'[CRUD error]: '
+
'crud with tag ['
+
ele
.
tag
+
' is already exist'
)
}
this
.
$crud
[
crud
.
tag
]
=
crud
this
.
crud
=
crud
crud
.
registerVM
(
'presenter'
,
this
,
0
)
this
.
$crud
[
ele
.
tag
]
=
ele
ele
.
registerVM
(
'presenter'
,
this
,
0
)
})
this
.
crud
=
this
.
$crud
[
'defalut'
]
||
cruds
.
length
>
0
?
cruds
[
0
]
:
null
},
data
()
{
return
{
...
...
@@ -612,12 +621,16 @@ function presenter(crud) {
parseTime
},
created
()
{
if
(
crud
.
queryOnPresenterCreated
)
{
crud
.
toQuery
()
for
(
const
k
in
this
.
$crud
)
{
if
(
this
.
$crud
[
k
].
queryOnPresenterCreated
)
{
this
.
$crud
[
k
].
toQuery
()
}
}
},
destroyed
()
{
crud
.
unregisterVM
(
this
)
for
(
const
k
in
this
.
$crud
)
{
this
.
$crud
[
k
].
unregisterVM
(
this
)
}
},
mounted
()
{
const
columns
=
[]
...
...
src/views/generator/index.vue
View file @
204710f2
...
...
@@ -63,12 +63,13 @@ import rrOperation from '@crud/RR.operation'
import
crudOperation
from
'@crud/CRUD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
url
:
'api/generator/tables'
})
export
default
{
name
:
'GeneratorIndex'
,
components
:
{
pagination
,
crudOperation
,
rrOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
()],
cruds
()
{
return
CRUD
({
url
:
'api/generator/tables'
})
},
mixins
:
[
presenter
(),
header
()],
data
()
{
return
{
syncLoading
:
false
...
...
src/views/mnt/app/index.vue
View file @
204710f2
...
...
@@ -95,13 +95,15 @@ import rrOperation from '@crud/RR.operation'
import
crudOperation
from
'@crud/CRUD.operation'
import
udOperation
from
'@crud/UD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'应用'
,
url
:
'api/app'
,
crudMethod
:
{
...
crudApp
}})
const
defaultForm
=
{
id
:
null
,
name
:
null
,
port
:
8080
,
uploadPath
:
'/opt/upload'
,
deployPath
:
'/opt/app'
,
backupPath
:
'/opt/backup'
,
startScript
:
null
,
deployScript
:
null
}
export
default
{
name
:
'App'
,
components
:
{
pagination
,
crudOperation
,
rrOperation
,
udOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
form
(
defaultForm
),
crud
()],
cruds
()
{
return
CRUD
({
title
:
'应用'
,
url
:
'api/app'
,
crudMethod
:
{
...
crudApp
}})
},
mixins
:
[
presenter
(),
header
(),
form
(
defaultForm
),
crud
()],
data
()
{
return
{
currentRow
:
null
,
...
...
src/views/mnt/database/index.vue
View file @
204710f2
...
...
@@ -89,13 +89,15 @@ import rrOperation from '@crud/RR.operation'
import
crudOperation
from
'@crud/CRUD.operation'
import
udOperation
from
'@crud/UD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'数据库'
,
url
:
'api/database'
,
crudMethod
:
{
...
crudDatabase
}})
const
defaultForm
=
{
id
:
null
,
name
:
null
,
jdbcUrl
:
'jdbc:mysql://'
,
userName
:
null
,
pwd
:
null
}
export
default
{
name
:
'DataBase'
,
components
:
{
eForm
,
pagination
,
crudOperation
,
rrOperation
,
udOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
form
(
defaultForm
),
crud
()],
cruds
()
{
return
CRUD
({
title
:
'数据库'
,
url
:
'api/database'
,
crudMethod
:
{
...
crudDatabase
}})
},
mixins
:
[
presenter
(),
header
(),
form
(
defaultForm
),
crud
()],
data
()
{
return
{
currentRow
:
{},
...
...
src/views/mnt/deploy/index.vue
View file @
204710f2
...
...
@@ -128,12 +128,15 @@ import rrOperation from '@crud/RR.operation'
import
crudOperation
from
'@crud/CRUD.operation'
import
udOperation
from
'@crud/UD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'部署'
,
url
:
'api/deploy'
,
crudMethod
:
{
...
crudDeploy
}})
const
defaultForm
=
{
id
:
null
,
app
:
{
id
:
null
},
deploys
:
[]
}
export
default
{
name
:
'Deploy'
,
components
:
{
dForm
,
fForm
,
pagination
,
crudOperation
,
rrOperation
,
udOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
form
(
defaultForm
),
crud
()],
cruds
()
{
return
CRUD
({
title
:
'部署'
,
url
:
'api/deploy'
,
crudMethod
:
{
...
crudDeploy
}})
},
mixins
:
[
presenter
(),
header
(),
form
(
defaultForm
),
crud
()],
data
()
{
return
{
currentRow
:
{},
selectIndex
:
''
,
appName
:
''
,
urlHistory
:
''
,
...
...
src/views/mnt/deployHistory/index.vue
View file @
204710f2
...
...
@@ -61,12 +61,14 @@ import CRUD, { presenter, header } from '@crud/crud'
import
rrOperation
from
'@crud/RR.operation'
import
crudOperation
from
'@crud/CRUD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'部署历史'
,
url
:
'api/deployHistory'
,
crudMethod
:
{
del
}})
export
default
{
name
:
'DeployHistory'
,
components
:
{
pagination
,
crudOperation
,
rrOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
()],
cruds
()
{
return
CRUD
({
title
:
'部署历史'
,
url
:
'api/deployHistory'
,
crudMethod
:
{
del
}})
},
mixins
:
[
presenter
(),
header
()],
data
()
{
return
{
delLoading
:
false
,
...
...
src/views/mnt/server/index.vue
View file @
204710f2
...
...
@@ -81,13 +81,15 @@ import rrOperation from '@crud/RR.operation'
import
crudOperation
from
'@crud/CRUD.operation'
import
udOperation
from
'@crud/UD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'服务器'
,
url
:
'api/serverDeploy'
,
crudMethod
:
{
...
crudServer
}})
const
defaultForm
=
{
id
:
null
,
name
:
null
,
ip
:
null
,
port
:
22
,
account
:
'root'
,
password
:
null
}
export
default
{
name
:
'Server'
,
components
:
{
pagination
,
crudOperation
,
rrOperation
,
udOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
form
(
defaultForm
),
crud
()],
cruds
()
{
return
CRUD
({
title
:
'服务器'
,
url
:
'api/serverDeploy'
,
crudMethod
:
{
...
crudServer
}})
},
mixins
:
[
presenter
(),
header
(),
form
(
defaultForm
),
crud
()],
data
()
{
return
{
accountList
:
[],
...
...
src/views/monitor/log/errorLog.vue
View file @
204710f2
...
...
@@ -61,12 +61,13 @@ import CRUD, { presenter } from '@crud/crud'
import
crudOperation
from
'@crud/CRUD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'异常日志'
,
url
:
'api/logs/error'
})
export
default
{
name
:
'ErrorLog'
,
components
:
{
Search
,
crudOperation
,
pagination
},
mixins
:
[
presenter
(
defaultCrud
)],
cruds
()
{
return
CRUD
({
title
:
'异常日志'
,
url
:
'api/logs/error'
})
},
mixins
:
[
presenter
()],
data
()
{
return
{
errorInfo
:
''
,
dialog
:
false
...
...
src/views/monitor/log/index.vue
View file @
204710f2
...
...
@@ -60,12 +60,13 @@ import CRUD, { presenter } from '@crud/crud'
import
crudOperation
from
'@crud/CRUD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'日志'
,
url
:
'api/logs'
})
export
default
{
name
:
'Log'
,
components
:
{
Search
,
crudOperation
,
pagination
},
mixins
:
[
presenter
(
defaultCrud
)],
cruds
()
{
return
CRUD
({
title
:
'日志'
,
url
:
'api/logs'
})
},
mixins
:
[
presenter
()],
created
()
{
this
.
crud
.
optShow
=
{
add
:
false
,
...
...
src/views/monitor/online/index.vue
View file @
204710f2
...
...
@@ -64,12 +64,13 @@ import rrOperation from '@crud/RR.operation'
import
crudOperation
from
'@crud/CRUD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
url
:
'auth/online'
,
title
:
'在线用户'
})
export
default
{
name
:
'OnlineUser'
,
components
:
{
pagination
,
crudOperation
,
rrOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
crud
()],
cruds
()
{
return
CRUD
({
url
:
'auth/online'
,
title
:
'在线用户'
})
},
mixins
:
[
presenter
(),
header
(),
crud
()],
data
()
{
return
{
delLoading
:
false
,
...
...
src/views/monitor/server/index.vue
View file @
204710f2
...
...
@@ -107,13 +107,14 @@ import crudOperation from '@crud/CRUD.operation'
import
udOperation
from
'@crud/UD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'监控'
,
url
:
'api/server'
,
sort
:
'sort,asc'
,
crudMethod
:
{
...
crudServer
}})
const
defaultForm
=
{
id
:
null
,
address
:
'localhost'
,
name
:
null
,
ip
:
null
,
port
:
8777
,
state
:
null
,
cpuRate
:
null
,
cpuCore
:
null
,
memTotal
:
null
,
memUsed
:
null
,
diskTotal
:
null
,
diskUsed
:
null
,
swapTotal
:
null
,
swapUsed
:
null
,
sort
:
999
}
export
default
{
name
:
'ServerMonitor'
,
components
:
{
pagination
,
crudOperation
,
rrOperation
,
udOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
form
(
defaultForm
),
crud
()],
cruds
()
{
return
CRUD
({
title
:
'监控'
,
url
:
'api/server'
,
sort
:
'sort,asc'
,
crudMethod
:
{
...
crudServer
}})
},
mixins
:
[
presenter
(),
header
(),
form
(
defaultForm
),
crud
()],
data
()
{
return
{
permission
:
{
...
...
src/views/system/dept/index.vue
View file @
204710f2
...
...
@@ -84,13 +84,14 @@ import rrOperation from '@crud/RR.operation'
import
crudOperation
from
'@crud/CRUD.operation'
import
udOperation
from
'@crud/UD.operation'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'部门'
,
url
:
'api/dept'
,
crudMethod
:
{
...
crudDept
}})
const
defaultForm
=
{
id
:
null
,
name
:
null
,
pid
:
1
,
enabled
:
'true'
}
export
default
{
name
:
'Dept'
,
components
:
{
Treeselect
,
crudOperation
,
rrOperation
,
udOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
form
(
defaultForm
),
crud
()],
cruds
()
{
return
CRUD
({
title
:
'部门'
,
url
:
'api/dept'
,
crudMethod
:
{
...
crudDept
}})
},
mixins
:
[
presenter
(),
header
(),
form
(
defaultForm
),
crud
()],
// 设置数据字典
dicts
:
[
'dept_status'
],
data
()
{
...
...
src/views/system/job/index.vue
View file @
204710f2
...
...
@@ -66,18 +66,18 @@ import crudOperation from '@crud/CRUD.operation'
import
pagination
from
'@crud/Pagination'
import
udOperation
from
'@crud/UD.operation'
// crud交由presenter持有
const
crud
=
CRUD
({
export
default
{
name
:
'Job'
,
components
:
{
eHeader
,
eForm
,
crudOperation
,
pagination
,
udOperation
},
cruds
()
{
return
CRUD
({
title
:
'岗位'
,
url
:
'api/job'
,
sort
:
[
'sort,asc'
,
'id,desc'
],
crudMethod
:
{
...
crudJob
}
})
export
default
{
name
:
'Job'
,
components
:
{
eHeader
,
eForm
,
crudOperation
,
pagination
,
udOperation
},
mixins
:
[
presenter
(
crud
)],
})
},
mixins
:
[
presenter
()],
// 数据字典
dicts
:
[
'job_status'
],
data
()
{
...
...
src/views/system/menu/index.vue
View file @
204710f2
...
...
@@ -156,12 +156,14 @@ import crudOperation from '@crud/CRUD.operation'
import
udOperation
from
'@crud/UD.operation'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'菜单'
,
url
:
'api/menus'
,
crudMethod
:
{
...
crudMenu
}})
const
defaultForm
=
{
id
:
null
,
name
:
null
,
sort
:
999
,
path
:
null
,
component
:
null
,
componentName
:
null
,
iframe
:
false
,
roles
:
[],
pid
:
0
,
icon
:
null
,
cache
:
false
,
hidden
:
false
,
type
:
0
,
permission
:
null
}
export
default
{
name
:
'Menu'
,
components
:
{
Treeselect
,
IconSelect
,
crudOperation
,
rrOperation
,
udOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
form
(
defaultForm
),
crud
()],
cruds
()
{
return
CRUD
({
title
:
'菜单'
,
url
:
'api/menus'
,
crudMethod
:
{
...
crudMenu
}})
},
mixins
:
[
presenter
(),
header
(),
form
(
defaultForm
),
crud
()],
data
()
{
return
{
menus
:
[],
...
...
src/views/system/role/index.vue
View file @
204710f2
...
...
@@ -133,13 +133,14 @@ import pagination from '@crud/Pagination'
import
Treeselect
from
'@riophae/vue-treeselect'
import
'@riophae/vue-treeselect/dist/vue-treeselect.css'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'角色'
,
url
:
'api/roles'
,
sort
:
'level,asc'
,
crudMethod
:
{
...
crudRoles
}})
const
defaultForm
=
{
id
:
null
,
name
:
null
,
depts
:
[],
remark
:
null
,
dataScope
:
'全部'
,
level
:
3
,
permission
:
null
}
export
default
{
name
:
'Role'
,
components
:
{
Treeselect
,
pagination
,
crudOperation
,
rrOperation
,
udOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
form
(
defaultForm
),
crud
()],
cruds
()
{
return
CRUD
({
title
:
'角色'
,
url
:
'api/roles'
,
sort
:
'level,asc'
,
crudMethod
:
{
...
crudRoles
}})
},
mixins
:
[
presenter
(),
header
(),
form
(
defaultForm
),
crud
()],
data
()
{
return
{
defaultProps
:
{
children
:
'children'
,
label
:
'label'
},
...
...
src/views/system/timing/index.vue
View file @
204710f2
...
...
@@ -117,13 +117,14 @@ import rrOperation from '@crud/RR.operation'
import
crudOperation
from
'@crud/CRUD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'定时任务'
,
url
:
'api/jobs'
,
crudMethod
:
{
...
crudJob
}})
const
defaultForm
=
{
id
:
null
,
jobName
:
null
,
beanName
:
null
,
methodName
:
null
,
params
:
null
,
cronExpression
:
null
,
isPause
:
false
,
remark
:
null
}
export
default
{
name
:
'Timing'
,
components
:
{
Log
,
pagination
,
crudOperation
,
rrOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
form
(
defaultForm
),
crud
()],
cruds
()
{
return
CRUD
({
title
:
'定时任务'
,
url
:
'api/jobs'
,
crudMethod
:
{
...
crudJob
}})
},
mixins
:
[
presenter
(),
header
(),
form
(
defaultForm
),
crud
()],
data
()
{
return
{
delLoading
:
false
,
...
...
src/views/system/user/index.vue
View file @
204710f2
...
...
@@ -209,13 +209,14 @@ import { mapGetters } from 'vuex'
import
'@riophae/vue-treeselect/dist/vue-treeselect.css'
let
userRoles
=
[]
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'用户'
,
url
:
'api/users'
,
crudMethod
:
{
...
crudUser
}})
const
defaultForm
=
{
id
:
null
,
username
:
null
,
nickName
:
null
,
sex
:
'男'
,
email
:
null
,
enabled
:
'false'
,
roles
:
[],
job
:
{
id
:
null
},
dept
:
{
id
:
null
},
phone
:
null
}
export
default
{
name
:
'User'
,
components
:
{
Treeselect
,
crudOperation
,
rrOperation
,
udOperation
,
pagination
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
form
(
defaultForm
),
crud
()],
cruds
()
{
return
CRUD
({
title
:
'用户'
,
url
:
'api/users'
,
crudMethod
:
{
...
crudUser
}})
},
mixins
:
[
presenter
(),
header
(),
form
(
defaultForm
),
crud
()],
// 数据字典
dicts
:
[
'user_status'
],
data
()
{
...
...
src/views/tools/picture/index.vue
View file @
204710f2
...
...
@@ -102,12 +102,13 @@ import rrOperation from '@crud/RR.operation'
import
crudOperation
from
'@crud/CRUD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'图片'
,
url
:
'api/pictures'
,
crudMethod
:
{
...
crudPic
}})
export
default
{
name
:
'Pictures'
,
components
:
{
pagination
,
crudOperation
,
rrOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
crud
()],
cruds
()
{
return
CRUD
({
title
:
'图片'
,
url
:
'api/pictures'
,
crudMethod
:
{
...
crudPic
}})
},
mixins
:
[
presenter
(),
header
(),
crud
()],
data
()
{
return
{
dialog
:
false
,
...
...
src/views/tools/storage/local/index.vue
View file @
204710f2
...
...
@@ -124,12 +124,13 @@ import rrOperation from '@crud/RR.operation'
import
crudOperation
from
'@crud/CRUD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'文件'
,
url
:
'api/localStorage'
,
crudMethod
:
{
...
crudFile
}})
const
defaultForm
=
{
id
:
null
,
name
:
''
}
export
default
{
components
:
{
pagination
,
crudOperation
,
rrOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
form
(
defaultForm
),
crud
()],
cruds
()
{
return
CRUD
({
title
:
'文件'
,
url
:
'api/localStorage'
,
crudMethod
:
{
...
crudFile
}})
},
mixins
:
[
presenter
(),
header
(),
form
(
defaultForm
),
crud
()],
data
()
{
return
{
delAllLoading
:
false
,
...
...
src/views/tools/storage/qiniu/index.vue
View file @
204710f2
...
...
@@ -89,11 +89,12 @@ import rrOperation from '@crud/RR.operation'
import
crudOperation
from
'@crud/CRUD.operation'
import
pagination
from
'@crud/Pagination'
// crud交由presenter持有
const
defaultCrud
=
CRUD
({
title
:
'七牛云文件'
,
url
:
'api/qiNiuContent'
,
crudMethod
:
{
...
crudQiNiu
}})
export
default
{
components
:
{
eForm
,
pagination
,
crudOperation
,
rrOperation
},
mixins
:
[
presenter
(
defaultCrud
),
header
(),
crud
()],
cruds
()
{
return
CRUD
({
title
:
'七牛云文件'
,
url
:
'api/qiNiuContent'
,
crudMethod
:
{
...
crudQiNiu
}})
},
mixins
:
[
presenter
(),
header
(),
crud
()],
data
()
{
return
{
permission
:
{
...
...
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