Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
njgzx
dataease
Commits
639246df
提交
639246df
authored
4月 29, 2021
作者:
taojinlong
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'main' of github.com:dataease/dataease into main
上级
883eb91a
f35c4477
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
18 个修改的文件
包含
621 行增加
和
70 行删除
+621
-70
SysMenuController.java
...in/java/io/dataease/controller/sys/SysMenuController.java
+7
-0
MenuTreeNode.java
...ava/io/dataease/controller/sys/response/MenuTreeNode.java
+26
-0
DataSetTableService.java
...java/io/dataease/service/dataset/DataSetTableService.java
+10
-2
MenuService.java
...nd/src/main/java/io/dataease/service/sys/MenuService.java
+31
-0
V8__system.sql
backend/src/main/resources/db/migration/V8__system.sql
+0
-0
menu.js
frontend/src/api/system/menu.js
+8
-1
index.vue
frontend/src/components/business/complex-table/index.vue
+4
-0
chart.js
frontend/src/views/chart/chart/chart.js
+18
-18
AddExcel.vue
frontend/src/views/dataset/add/AddExcel.vue
+14
-21
AddSQL.vue
frontend/src/views/dataset/add/AddSQL.vue
+20
-4
TabDataPreview.vue
frontend/src/views/dataset/data/TabDataPreview.vue
+1
-1
form.vue
frontend/src/views/system/dept/form.vue
+173
-0
index.vue
frontend/src/views/system/dept/index.vue
+14
-8
form.vue
frontend/src/views/system/menu/form.vue
+187
-0
index.vue
frontend/src/views/system/menu/index.vue
+14
-8
form.vue
frontend/src/views/system/role/form.vue
+80
-0
index.vue
frontend/src/views/system/role/index.vue
+12
-6
form.vue
frontend/src/views/system/user/form.vue
+2
-1
没有找到文件。
backend/src/main/java/io/dataease/controller/sys/SysMenuController.java
浏览文件 @
639246df
...
@@ -7,6 +7,7 @@ import io.dataease.commons.utils.BeanUtils;
...
@@ -7,6 +7,7 @@ import io.dataease.commons.utils.BeanUtils;
import
io.dataease.controller.sys.request.MenuCreateRequest
;
import
io.dataease.controller.sys.request.MenuCreateRequest
;
import
io.dataease.controller.sys.request.MenuDeleteRequest
;
import
io.dataease.controller.sys.request.MenuDeleteRequest
;
import
io.dataease.controller.sys.response.MenuNodeResponse
;
import
io.dataease.controller.sys.response.MenuNodeResponse
;
import
io.dataease.controller.sys.response.MenuTreeNode
;
import
io.dataease.service.sys.MenuService
;
import
io.dataease.service.sys.MenuService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
...
@@ -62,6 +63,12 @@ public class SysMenuController {
...
@@ -62,6 +63,12 @@ public class SysMenuController {
sets
.
add
(
pid
);
sets
.
add
(
pid
);
return
sets
;
return
sets
;
}
}
@PostMapping
(
"/nodesByMenuId/{menuId}"
)
public
List
<
MenuTreeNode
>
nodesByMenuId
(
@PathVariable
(
"menuId"
)
Long
menuId
)
{
return
menuService
.
searchTree
(
menuId
);
}
}
}
backend/src/main/java/io/dataease/controller/sys/response/MenuTreeNode.java
0 → 100644
浏览文件 @
639246df
package
io
.
dataease
.
controller
.
sys
.
response
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.List
;
@Data
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
public
class
MenuTreeNode
implements
Serializable
{
private
Long
id
;
private
String
label
;
private
Boolean
hasChildren
;
private
List
<
MenuTreeNode
>
children
;
public
List
<
MenuTreeNode
>
toList
(){
List
<
MenuTreeNode
>
lists
=
new
ArrayList
<>();
lists
.
add
(
this
);
return
lists
;
}
}
backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java
浏览文件 @
639246df
...
@@ -81,7 +81,15 @@ public class DataSetTableService {
...
@@ -81,7 +81,15 @@ public class DataSetTableService {
saveTableField
(
datasetTable
);
saveTableField
(
datasetTable
);
}
}
}
else
{
}
else
{
datasetTableMapper
.
updateByPrimaryKeySelective
(
datasetTable
);
int
update
=
datasetTableMapper
.
updateByPrimaryKeySelective
(
datasetTable
);
// sql 更新
if
(
update
==
1
)
{
if
(
StringUtils
.
equalsIgnoreCase
(
datasetTable
.
getType
(),
"sql"
))
{
// 删除所有字段,重新抽象
dataSetTableFieldsService
.
deleteByTableId
(
datasetTable
.
getId
());
saveTableField
(
datasetTable
);
}
}
}
}
return
datasetTable
;
return
datasetTable
;
}
}
...
@@ -262,7 +270,7 @@ public class DataSetTableService {
...
@@ -262,7 +270,7 @@ public class DataSetTableService {
DatasourceRequest
datasourceRequest
=
new
DatasourceRequest
();
DatasourceRequest
datasourceRequest
=
new
DatasourceRequest
();
datasourceRequest
.
setDatasource
(
ds
);
datasourceRequest
.
setDatasource
(
ds
);
String
sql
=
new
Gson
().
fromJson
(
dataSetTableRequest
.
getInfo
(),
DataTableInfoDTO
.
class
).
getSql
();
String
sql
=
new
Gson
().
fromJson
(
dataSetTableRequest
.
getInfo
(),
DataTableInfoDTO
.
class
).
getSql
();
datasourceRequest
.
setQuery
(
sql
);
datasourceRequest
.
setQuery
(
"SELECT * FROM ("
+
sql
+
") AS tmp LIMIT 0,1000"
);
Map
<
String
,
List
>
result
=
datasourceProvider
.
fetchResultAndField
(
datasourceRequest
);
Map
<
String
,
List
>
result
=
datasourceProvider
.
fetchResultAndField
(
datasourceRequest
);
List
<
String
[]>
data
=
result
.
get
(
"dataList"
);
List
<
String
[]>
data
=
result
.
get
(
"dataList"
);
List
<
TableFiled
>
fields
=
result
.
get
(
"fieldList"
);
List
<
TableFiled
>
fields
=
result
.
get
(
"fieldList"
);
...
...
backend/src/main/java/io/dataease/service/sys/MenuService.java
浏览文件 @
639246df
package
io
.
dataease
.
service
.
sys
;
package
io
.
dataease
.
service
.
sys
;
import
io.dataease.base.domain.SysDept
;
import
io.dataease.base.domain.SysMenu
;
import
io.dataease.base.domain.SysMenu
;
import
io.dataease.base.domain.SysMenuExample
;
import
io.dataease.base.domain.SysMenuExample
;
import
io.dataease.base.mapper.SysMenuMapper
;
import
io.dataease.base.mapper.SysMenuMapper
;
...
@@ -7,8 +8,10 @@ import io.dataease.base.mapper.ext.ExtMenuMapper;
...
@@ -7,8 +8,10 @@ import io.dataease.base.mapper.ext.ExtMenuMapper;
import
io.dataease.commons.utils.BeanUtils
;
import
io.dataease.commons.utils.BeanUtils
;
import
io.dataease.controller.sys.request.MenuCreateRequest
;
import
io.dataease.controller.sys.request.MenuCreateRequest
;
import
io.dataease.controller.sys.request.MenuDeleteRequest
;
import
io.dataease.controller.sys.request.MenuDeleteRequest
;
import
io.dataease.controller.sys.response.DeptTreeNode
;
import
io.dataease.controller.sys.response.MenuNodeResponse
;
import
io.dataease.controller.sys.response.MenuNodeResponse
;
import
io.dataease.controller.sys.response.MenuTreeNode
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -16,6 +19,7 @@ import org.springframework.transaction.annotation.Transactional;
...
@@ -16,6 +19,7 @@ import org.springframework.transaction.annotation.Transactional;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.util.HashSet
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Optional
;
import
java.util.Set
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -121,6 +125,24 @@ public class MenuService {
...
@@ -121,6 +125,24 @@ public class MenuService {
return
responses
;
return
responses
;
}
}
public
List
<
MenuTreeNode
>
searchTree
(
Long
menuId
)
{
List
<
SysMenu
>
roots
=
nodesByPid
(
0L
);
if
(
menuId
==
MENU_ROOT_PID
)
return
roots
.
stream
().
map
(
this
::
format
).
collect
(
Collectors
.
toList
());
SysMenu
sysMenu
=
sysMenuMapper
.
selectByPrimaryKey
(
menuId
);
if
(
roots
.
stream
().
anyMatch
(
node
->
node
.
getMenuId
()
==
menuId
))
return
roots
.
stream
().
map
(
this
::
format
).
collect
(
Collectors
.
toList
());
SysMenu
current
=
sysMenu
;
MenuTreeNode
currentNode
=
format
(
sysMenu
);
while
(
current
.
getPid
()
!=
MENU_ROOT_PID
){
SysMenu
parent
=
sysMenuMapper
.
selectByPrimaryKey
(
current
.
getPid
());
//pid上有索引 所以效率不会太差
MenuTreeNode
parentNode
=
format
(
parent
);
parentNode
.
setChildren
(
currentNode
.
toList
());
current
=
parent
;
currentNode
=
parentNode
;
}
MenuTreeNode
targetRootNode
=
currentNode
;
return
roots
.
stream
().
map
(
node
->
node
.
getMenuId
()
==
targetRootNode
.
getId
()
?
targetRootNode
:
format
(
node
)).
collect
(
Collectors
.
toList
());
}
private
Set
<
SysMenu
>
getChilds
(
List
<
SysMenu
>
lists
,
Set
<
SysMenu
>
sets
){
private
Set
<
SysMenu
>
getChilds
(
List
<
SysMenu
>
lists
,
Set
<
SysMenu
>
sets
){
lists
.
forEach
(
menu
->
{
lists
.
forEach
(
menu
->
{
sets
.
add
(
menu
);
sets
.
add
(
menu
);
...
@@ -132,6 +154,15 @@ public class MenuService {
...
@@ -132,6 +154,15 @@ public class MenuService {
return
sets
;
return
sets
;
}
}
private
MenuTreeNode
format
(
SysMenu
sysMenu
)
{
MenuTreeNode
menuTreeNode
=
new
MenuTreeNode
();
menuTreeNode
.
setId
(
sysMenu
.
getMenuId
());
menuTreeNode
.
setLabel
(
sysMenu
.
getName
());
menuTreeNode
.
setHasChildren
(
false
);
Optional
.
ofNullable
(
sysMenu
.
getMenuSort
()).
ifPresent
(
num
->
menuTreeNode
.
setHasChildren
(
num
>
0
));
return
menuTreeNode
;
}
public
List
<
MenuNodeResponse
>
convert
(
List
<
SysMenu
>
menus
){
public
List
<
MenuNodeResponse
>
convert
(
List
<
SysMenu
>
menus
){
return
menus
.
stream
().
map
(
node
->
{
return
menus
.
stream
().
map
(
node
->
{
MenuNodeResponse
menuNodeResponse
=
BeanUtils
.
copyBean
(
new
MenuNodeResponse
(),
node
);
MenuNodeResponse
menuNodeResponse
=
BeanUtils
.
copyBean
(
new
MenuNodeResponse
(),
node
);
...
...
backend/src/main/resources/db/migration/V8__system.sql
浏览文件 @
639246df
差异被折叠。
点击展开。
frontend/src/api/system/menu.js
浏览文件 @
639246df
...
@@ -46,4 +46,11 @@ export function editMenu(data) {
...
@@ -46,4 +46,11 @@ export function editMenu(data) {
})
})
}
}
export
default
{
addMenu
,
editMenu
,
delMenu
,
getMenusTree
,
getChild
}
export
function
treeByMenuId
(
menuId
)
{
return
request
({
url
:
'/api/menu/nodesByMenuId/'
+
menuId
,
method
:
'post'
})
}
export
default
{
addMenu
,
editMenu
,
delMenu
,
getMenusTree
,
getChild
,
treeByMenuId
}
frontend/src/components/business/complex-table/index.vue
浏览文件 @
639246df
...
@@ -46,9 +46,13 @@ export default {
...
@@ -46,9 +46,13 @@ export default {
type
:
Array
,
type
:
Array
,
default
:
()
=>
[]
default
:
()
=>
[]
},
},
// eslint-disable-next-line vue/require-default-prop
localKey
:
String
,
// 如果需要记住选择的列,则这里添加一个唯一的Key
localKey
:
String
,
// 如果需要记住选择的列,则这里添加一个唯一的Key
// eslint-disable-next-line vue/require-default-prop
header
:
String
,
header
:
String
,
// eslint-disable-next-line vue/require-default-prop
searchConfig
:
Object
,
searchConfig
:
Object
,
// eslint-disable-next-line vue/require-default-prop
paginationConfig
:
Object
paginationConfig
:
Object
},
},
data
()
{
data
()
{
...
...
frontend/src/views/chart/chart/chart.js
浏览文件 @
639246df
...
@@ -88,9 +88,9 @@ export const BASE_BAR = {
...
@@ -88,9 +88,9 @@ export const BASE_BAR = {
title
:
{
title
:
{
text
:
''
text
:
''
},
},
grid
:
{
//
grid: {
containLabel
:
true
//
containLabel: true
},
//
},
tooltip
:
{},
tooltip
:
{},
legend
:
{
legend
:
{
show
:
true
,
show
:
true
,
...
@@ -117,9 +117,9 @@ export const HORIZONTAL_BAR = {
...
@@ -117,9 +117,9 @@ export const HORIZONTAL_BAR = {
title
:
{
title
:
{
text
:
''
text
:
''
},
},
grid
:
{
//
grid: {
containLabel
:
true
//
containLabel: true
},
//
},
tooltip
:
{},
tooltip
:
{},
legend
:
{
legend
:
{
show
:
true
,
show
:
true
,
...
@@ -147,9 +147,9 @@ export const BASE_LINE = {
...
@@ -147,9 +147,9 @@ export const BASE_LINE = {
title
:
{
title
:
{
text
:
''
text
:
''
},
},
grid
:
{
//
grid: {
containLabel
:
true
//
containLabel: true
},
//
},
tooltip
:
{},
tooltip
:
{},
legend
:
{
legend
:
{
show
:
true
,
show
:
true
,
...
@@ -178,9 +178,9 @@ export const BASE_PIE = {
...
@@ -178,9 +178,9 @@ export const BASE_PIE = {
title
:
{
title
:
{
text
:
''
text
:
''
},
},
grid
:
{
//
grid: {
containLabel
:
true
//
containLabel: true
},
//
},
tooltip
:
{},
tooltip
:
{},
legend
:
{
legend
:
{
show
:
true
,
show
:
true
,
...
@@ -211,9 +211,9 @@ export const BASE_FUNNEL = {
...
@@ -211,9 +211,9 @@ export const BASE_FUNNEL = {
title
:
{
title
:
{
text
:
''
text
:
''
},
},
grid
:
{
//
grid: {
containLabel
:
true
//
containLabel: true
},
//
},
tooltip
:
{
tooltip
:
{
trigger
:
'item'
trigger
:
'item'
},
},
...
@@ -267,9 +267,9 @@ export const BASE_RADAR = {
...
@@ -267,9 +267,9 @@ export const BASE_RADAR = {
title
:
{
title
:
{
text
:
''
text
:
''
},
},
grid
:
{
//
grid: {
containLabel
:
true
//
containLabel: true
},
//
},
tooltip
:
{},
tooltip
:
{},
legend
:
{
legend
:
{
show
:
true
,
show
:
true
,
...
...
frontend/src/views/dataset/add/AddExcel.vue
浏览文件 @
639246df
...
@@ -19,10 +19,10 @@
...
@@ -19,10 +19,10 @@
<el-row>
<el-row>
<el-col
style=
"width: 500px;"
>
<el-col
style=
"width: 500px;"
>
<el-form
:inline=
"true"
size=
"mini"
class=
"row-style"
>
<el-form
:inline=
"true"
size=
"mini"
class=
"row-style"
>
<el-form-item>
<el-form-item
class=
"form-item"
>
<el-input
v-model=
"name"
:placeholder=
"$t('commons.name')"
/>
<el-input
v-model=
"name"
:placeholder=
"$t('commons.name')"
/>
</el-form-item>
</el-form-item>
<el-form-item>
<el-form-item
class=
"form-item"
>
<el-upload
<el-upload
:action=
"baseUrl+'dataset/table/excel/upload'"
:action=
"baseUrl+'dataset/table/excel/upload'"
:multiple=
"false"
:multiple=
"false"
...
@@ -41,7 +41,7 @@
...
@@ -41,7 +41,7 @@
</el-row>
</el-row>
</el-row>
</el-row>
<el-row>
<el-row
style=
"margin-top: 10px;"
>
<el-card
class=
"box-card dataPreview"
shadow=
"never"
>
<el-card
class=
"box-card dataPreview"
shadow=
"never"
>
<div
slot=
"header"
class=
"clearfix"
>
<div
slot=
"header"
class=
"clearfix"
>
<span>
{{
$t
(
'dataset.data_preview'
)
}}
</span>
<span>
{{
$t
(
'dataset.data_preview'
)
}}
</span>
...
@@ -100,27 +100,13 @@ export default {
...
@@ -100,27 +100,13 @@ export default {
}
}
},
},
watch
:
{
watch
:
{
// dataSource(val) {
// if (val) {
// post('/datasource/getTables', { id: val }).then(response => {
// this.tables = response.data
// this.tableData = JSON.parse(JSON.stringify(this.tables))
// })
// }
// },
// searchTable(val) {
// if (val && val !== '') {
// this.tableData = JSON.parse(JSON.stringify(this.tables.filter(ele => { return ele.includes(val) })))
// } else {
// this.tableData = JSON.parse(JSON.stringify(this.tables))
// }
// }
},
},
mounted
()
{
mounted
()
{
// this.initDataSource()
// this.initDataSource()
},
window
.
onresize
=
()
=>
{
activated
()
{
this
.
calHeight
()
// this.initDataSource()
}
this
.
calHeight
()
},
},
methods
:
{
methods
:
{
// initDataSource() {
// initDataSource() {
...
@@ -128,6 +114,13 @@ export default {
...
@@ -128,6 +114,13 @@ export default {
// this.options = response.data
// this.options = response.data
// })
// })
// },
// },
calHeight
()
{
const
that
=
this
setTimeout
(
function
()
{
const
currentHeight
=
document
.
documentElement
.
clientHeight
that
.
height
=
currentHeight
-
56
-
30
-
26
-
25
-
35
-
10
-
37
-
20
-
10
},
10
)
},
uploadSuccess
(
response
,
file
,
fileList
)
{
uploadSuccess
(
response
,
file
,
fileList
)
{
// console.log(response)
// console.log(response)
// console.log(file)
// console.log(file)
...
...
frontend/src/views/dataset/add/AddSQL.vue
浏览文件 @
639246df
...
@@ -76,6 +76,11 @@
...
@@ -76,6 +76,11 @@
/>
/>
</ux-grid>
</ux-grid>
</div>
</div>
<span
class=
"table-count"
>
{{
$t
(
'dataset.preview_show'
)
}}
<span
class=
"span-number"
>
1000
</span>
{{
$t
(
'dataset.preview_item'
)
}}
</span>
</el-card>
</el-card>
</el-row>
</el-row>
</el-row>
</el-row>
...
@@ -155,11 +160,9 @@ export default {
...
@@ -155,11 +160,9 @@ export default {
},
},
mounted
()
{
mounted
()
{
window
.
onresize
=
()
=>
{
window
.
onresize
=
()
=>
{
return
(()
=>
{
this
.
calHeight
()
this
.
height
=
window
.
innerHeight
/
2
})()
}
}
this
.
height
=
window
.
innerHeight
/
2
this
.
calHeight
()
this
.
initDataSource
()
this
.
initDataSource
()
this
.
$refs
.
myCm
.
codemirror
.
on
(
'keypress'
,
()
=>
{
this
.
$refs
.
myCm
.
codemirror
.
on
(
'keypress'
,
()
=>
{
this
.
$refs
.
myCm
.
codemirror
.
showHint
()
this
.
$refs
.
myCm
.
codemirror
.
showHint
()
...
@@ -168,6 +171,13 @@ export default {
...
@@ -168,6 +171,13 @@ export default {
this
.
initTableInfo
()
this
.
initTableInfo
()
},
},
methods
:
{
methods
:
{
calHeight
()
{
const
that
=
this
setTimeout
(
function
()
{
const
currentHeight
=
document
.
documentElement
.
clientHeight
that
.
height
=
currentHeight
-
56
-
30
-
26
-
25
-
43
-
160
-
10
-
37
-
20
-
10
-
16
},
10
)
},
initDataSource
()
{
initDataSource
()
{
listDatasource
().
then
(
response
=>
{
listDatasource
().
then
(
response
=>
{
this
.
options
=
response
.
data
this
.
options
=
response
.
data
...
@@ -303,4 +313,10 @@ export default {
...
@@ -303,4 +313,10 @@ export default {
span
{
span
{
font-size
:
14px
;
font-size
:
14px
;
}
}
.span-number
{
color
:
#f18126
;
}
.table-count
{
color
:
#606266
;
}
</
style
>
</
style
>
frontend/src/views/dataset/data/TabDataPreview.vue
浏览文件 @
639246df
...
@@ -160,7 +160,7 @@ export default {
...
@@ -160,7 +160,7 @@ export default {
float
:
right
;
float
:
right
;
}
}
span
{
span
{
font-size
:
1
4
px
;
font-size
:
1
2
px
;
}
}
.span-number
{
.span-number
{
color
:
#f18126
;
color
:
#f18126
;
...
...
frontend/src/views/system/dept/form.vue
0 → 100644
浏览文件 @
639246df
<
template
>
<layout-content
:header=
"formType=='add' ? $t('organization.create') : $t('organization.modify')"
back-name=
"组织管理"
>
<el-form
ref=
"deptForm"
:model=
"form"
:rules=
"rule"
size=
"small"
label-width=
"auto"
label-position=
"right"
>
<el-form-item
label=
"组织名称"
prop=
"name"
>
<el-input
v-model=
"form.name"
/>
</el-form-item>
<el-form-item
label=
"组织排序"
prop=
"deptSort"
>
<el-input-number
v-model
.
number=
"form.deptSort"
:min=
"0"
:max=
"999"
controls-position=
"right"
/>
</el-form-item>
<el-form-item
label=
"顶级组织"
prop=
"top"
>
<el-radio-group
v-model=
"form.top"
@
change=
"topChange"
>
<el-radio
:label=
"true"
>
是
</el-radio>
<el-radio
:label=
"false"
>
否
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"enabled"
>
<el-radio-group
v-model=
"form.enabled"
disabled
>
<el-radio
:label=
"true"
>
启用
</el-radio>
<el-radio
:label=
"false"
>
停用
</el-radio>
</el-radio-group>
<!--
<el-radio
v-for=
"item in dict.dept_status"
:key=
"item.id"
v-model=
"form.enabled"
:label=
"item.value"
>
{{
item
.
label
}}
</el-radio>
-->
</el-form-item>
<el-form-item
v-if=
"!form.top"
label=
"上级组织"
prop=
"pid"
>
<treeselect
v-model=
"form.pid"
:auto-load-root-options=
"false"
:load-options=
"loadDepts"
:options=
"depts"
placeholder=
"选择上级类目"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"save"
>
保存
</el-button>
<el-button
@
click=
"reset"
>
重置
</el-button>
</el-form-item>
</el-form>
</layout-content>
</
template
>
<
script
>
import
LayoutContent
from
'@/components/business/LayoutContent'
import
Treeselect
from
'@riophae/vue-treeselect'
import
'@riophae/vue-treeselect/dist/vue-treeselect.css'
import
{
LOAD_CHILDREN_OPTIONS
,
LOAD_ROOT_OPTIONS
}
from
'@riophae/vue-treeselect'
import
{
getDeptTree
,
treeByDeptId
,
addDept
,
editDept
}
from
'@/api/system/dept'
export
default
{
components
:
{
LayoutContent
,
Treeselect
},
data
()
{
return
{
defaultForm
:
{
deptId
:
null
,
top
:
true
,
enabled
:
true
,
pid
:
null
},
maps
:
new
Map
(),
form
:
{},
rule
:
{
name
:
[
{
required
:
true
,
message
:
this
.
$t
(
'organization.input_name'
),
trigger
:
'blur'
},
{
min
:
2
,
max
:
25
,
message
:
this
.
$t
(
'commons.input_limit'
,
[
2
,
25
]),
trigger
:
'blur'
}
],
description
:
[
{
max
:
50
,
message
:
this
.
$t
(
'commons.input_limit'
,
[
0
,
50
]),
trigger
:
'blur'
}
]
},
depts
:
null
,
formType
:
'add'
}
},
created
()
{
if
(
this
.
$router
.
currentRoute
.
params
&&
this
.
$router
.
currentRoute
.
params
.
deptId
)
{
const
row
=
this
.
$router
.
currentRoute
.
params
this
.
edit
(
row
)
}
else
{
this
.
create
()
}
},
methods
:
{
create
()
{
this
.
formType
=
'add'
this
.
form
=
Object
.
assign
({},
this
.
defaultForm
)
},
edit
(
row
)
{
this
.
formType
=
'modify'
this
.
form
=
Object
.
assign
({},
row
)
this
.
initDeptTree
()
},
initDeptTree
()
{
treeByDeptId
(
this
.
form
.
pid
||
0
).
then
(
res
=>
{
const
results
=
res
.
data
.
map
(
node
=>
{
if
(
node
.
hasChildren
&&
!
node
.
children
)
{
node
.
children
=
null
}
return
node
})
this
.
depts
=
results
})
},
// 获取弹窗内部门数据
loadDepts
({
action
,
parentNode
,
callback
})
{
if
(
action
===
LOAD_ROOT_OPTIONS
&&
!
this
.
form
.
pid
)
{
const
_self
=
this
treeByDeptId
(
0
).
then
(
res
=>
{
const
results
=
res
.
data
.
map
(
node
=>
{
if
(
node
.
hasChildren
&&
!
node
.
children
)
{
node
.
children
=
null
}
return
node
})
_self
.
depts
=
results
callback
()
})
}
if
(
action
===
LOAD_CHILDREN_OPTIONS
)
{
const
_self
=
this
getDeptTree
(
parentNode
.
id
).
then
(
res
=>
{
parentNode
.
children
=
res
.
data
.
map
(
function
(
obj
)
{
return
_self
.
normalizer
(
obj
)
})
callback
()
})
}
},
normalizer
(
node
)
{
if
(
node
.
hasChildren
)
{
node
.
children
=
null
}
return
{
id
:
node
.
deptId
,
label
:
node
.
name
,
children
:
node
.
children
}
},
topChange
(
value
)
{
if
(
!
value
)
{
this
.
form
.
pid
=
null
this
.
depts
=
null
}
},
reset
()
{
this
.
$refs
.
deptForm
.
resetFields
()
},
save
()
{
this
.
$refs
.
deptForm
.
validate
(
valid
=>
{
if
(
valid
)
{
const
method
=
this
.
formType
===
'add'
?
addDept
:
editDept
method
(
this
.
form
).
then
(
res
=>
{
this
.
$success
(
this
.
$t
(
'commons.save_success'
))
this
.
backToList
()
})
}
else
{
return
false
}
})
},
backToList
()
{
this
.
$router
.
push
({
name
:
'组织管理'
})
}
}
}
</
script
>
frontend/src/views/system/dept/index.vue
浏览文件 @
639246df
...
@@ -203,17 +203,23 @@ export default {
...
@@ -203,17 +203,23 @@ export default {
this
.
search
()
this
.
search
()
},
},
methods
:
{
methods
:
{
// create() {
// this.form = Object.assign({}, this.defaultForm)
// this.dialogOrgAddVisible = true
// this.formType = 'add'
// },
// edit(row) {
// this.dialogOrgAddVisible = true
// this.formType = 'modify'
// this.oldPid = row.pid
// this.form = Object.assign({}, row)
// this.treeByRow(row)
// },
create
()
{
create
()
{
this
.
form
=
Object
.
assign
({},
this
.
defaultForm
)
this
.
$router
.
push
({
name
:
'组织表单'
})
this
.
dialogOrgAddVisible
=
true
this
.
formType
=
'add'
},
},
edit
(
row
)
{
edit
(
row
)
{
this
.
dialogOrgAddVisible
=
true
this
.
$router
.
push
({
name
:
'组织表单'
,
params
:
row
})
this
.
formType
=
'modify'
this
.
oldPid
=
row
.
pid
this
.
form
=
Object
.
assign
({},
row
)
this
.
treeByRow
(
row
)
},
},
treeByRow
(
row
)
{
treeByRow
(
row
)
{
...
...
frontend/src/views/system/menu/form.vue
0 → 100644
浏览文件 @
639246df
<
template
>
<layout-content
:header=
"formType=='add' ? $t('menu.create') : $t('menu.modify')"
back-name=
"菜单管理"
>
<el-form
ref=
"menuForm"
:model=
"form"
:rules=
"rule"
size=
"small"
label-width=
"auto"
label-position=
"right"
>
<el-form-item
label=
"菜单类型"
prop=
"type"
>
<el-radio-group
v-model=
"form.type"
size=
"mini"
:disabled=
"formType!=='add'"
>
<el-radio-button
label=
"0"
>
目录
</el-radio-button>
<el-radio-button
label=
"1"
>
菜单
</el-radio-button>
<el-radio-button
label=
"2"
>
按钮
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item
v-if=
"form.type!== 2"
label=
"菜单图标"
prop=
"icon"
>
<el-popover
placement=
"bottom-start"
width=
"425"
trigger=
"click"
@
show=
"$refs['iconSelect'].reset()"
>
<IconSelect
ref=
"iconSelect"
@
selected=
"selected"
/>
<el-input
slot=
"reference"
v-model=
"form.icon"
placeholder=
"点击选择图标"
readonly
>
<svg-icon
v-if=
"form.icon"
slot=
"prefix"
:icon-class=
"form.icon"
class=
"el-input__icon"
style=
"height: 32px;width: 16px;"
/>
<i
v-else
slot=
"prefix"
class=
"el-icon-search el-input__icon"
/>
</el-input>
</el-popover>
</el-form-item>
<el-form-item
v-if=
"form.type !== 2"
label=
"菜单标题"
prop=
"title"
>
<el-input
v-model=
"form.title"
placeholder=
"菜单标题"
/>
</el-form-item>
<el-form-item
v-if=
"form.type === 2"
label=
"按钮名称"
prop=
"title"
>
<el-input
v-model=
"form.title"
placeholder=
"按钮名称"
/>
</el-form-item>
<el-form-item
v-if=
"form.type !== 0"
label=
"权限标识"
prop=
"permission"
>
<el-input
v-model=
"form.permission"
:disabled=
"form.iframe || formType!=='add'"
placeholder=
"权限标识"
/>
</el-form-item>
<el-form-item
v-if=
"form.type !== 2"
label=
"路由地址"
prop=
"path"
>
<el-input
v-model=
"form.path"
placeholder=
"路由地址"
:disabled=
"formType!=='add'"
/>
</el-form-item>
<el-form-item
label=
"菜单排序"
prop=
"menuSort"
>
<el-input-number
v-model
.
number=
"form.menuSort"
:min=
"0"
:max=
"999"
controls-position=
"right"
/>
</el-form-item>
<el-form-item
v-if=
"!form.iframe && form.type === 1"
label=
"组件名称"
prop=
"componentName"
>
<el-input
v-model=
"form.componentName"
:disabled=
"formType!=='add'"
placeholder=
"匹配组件内Name字段"
/>
</el-form-item>
<el-form-item
v-if=
"!form.iframe && form.type === 1"
label=
"组件路径"
prop=
"component"
>
<el-input
v-model=
"form.component"
:disabled=
"formType!=='add'"
placeholder=
"组件路径"
/>
</el-form-item>
<el-form-item
label=
"上级类目"
prop=
"pid"
>
<treeselect
v-model=
"form.pid"
:disabled=
"formType!=='add'"
:options=
"menus"
:load-options=
"loadMenus"
placeholder=
"选择上级类目"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"save"
>
保存
</el-button>
<el-button
@
click=
"reset"
>
重置
</el-button>
</el-form-item>
</el-form>
</layout-content>
</
template
>
<
script
>
import
LayoutContent
from
'@/components/business/LayoutContent'
import
Treeselect
from
'@riophae/vue-treeselect'
import
IconSelect
from
'@/components/IconSelect'
import
'@riophae/vue-treeselect/dist/vue-treeselect.css'
import
{
LOAD_CHILDREN_OPTIONS
,
LOAD_ROOT_OPTIONS
}
from
'@riophae/vue-treeselect'
import
{
addMenu
,
editMenu
,
getMenusTree
,
treeByMenuId
}
from
'@/api/system/menu'
export
default
{
components
:
{
LayoutContent
,
Treeselect
,
IconSelect
},
data
()
{
return
{
topMunu
:
{
id
:
0
,
label
:
'顶级目录'
,
children
:
null
},
defaultForm
:
{
menuId
:
null
,
title
:
null
,
menuSort
:
999
,
path
:
null
,
component
:
null
,
componentName
:
null
,
iframe
:
false
,
pid
:
0
,
icon
:
null
,
cache
:
false
,
hidden
:
false
,
type
:
0
,
permission
:
null
},
form
:
{},
rule
:
{
name
:
[
{
required
:
true
,
message
:
this
.
$t
(
'organization.input_name'
),
trigger
:
'blur'
},
{
min
:
2
,
max
:
25
,
message
:
this
.
$t
(
'commons.input_limit'
,
[
2
,
25
]),
trigger
:
'blur'
}
],
description
:
[
{
max
:
50
,
message
:
this
.
$t
(
'commons.input_limit'
,
[
0
,
50
]),
trigger
:
'blur'
}
]
},
menus
:
null
,
maps
:
new
Map
(),
formType
:
'add'
}
},
created
()
{
if
(
this
.
$router
.
currentRoute
.
params
&&
this
.
$router
.
currentRoute
.
params
.
menuId
)
{
const
row
=
this
.
$router
.
currentRoute
.
params
this
.
edit
(
row
)
}
else
{
this
.
create
()
}
this
.
initData
()
},
methods
:
{
create
()
{
this
.
formType
=
'add'
this
.
form
=
Object
.
assign
({},
this
.
defaultForm
)
},
edit
(
row
)
{
this
.
formType
=
'modify'
this
.
form
=
Object
.
assign
({},
row
)
this
.
initMenuTree
()
},
initMenuTree
()
{
treeByMenuId
(
this
.
form
.
pid
||
0
).
then
(
res
=>
{
const
results
=
res
.
data
.
map
(
node
=>
{
if
(
node
.
hasChildren
&&
!
node
.
children
)
{
node
.
children
=
null
}
return
node
})
this
.
menus
=
results
})
},
// 获取弹窗内部门数据
loadMenus
({
action
,
parentNode
,
callback
})
{
if
(
action
===
LOAD_ROOT_OPTIONS
)
{
const
_self
=
this
!
this
.
menus
&&
getMenusTree
(
'0'
).
then
(
res
=>
{
_self
.
menus
=
res
.
data
.
map
(
node
=>
_self
.
normalizer
(
node
))
callback
()
})
}
if
(
action
===
LOAD_CHILDREN_OPTIONS
)
{
const
_self
=
this
getMenusTree
(
parentNode
.
id
).
then
(
res
=>
{
parentNode
.
children
=
res
.
data
.
map
(
function
(
obj
)
{
return
_self
.
normalizer
(
obj
)
})
callback
()
})
}
},
initData
()
{
this
.
menus
=
[]
this
.
menus
.
push
(
this
.
topMunu
)
},
normalizer
(
node
)
{
if
(
node
.
hasChildren
)
{
node
.
children
=
null
}
return
{
id
:
node
.
menuId
,
label
:
node
.
title
,
children
:
node
.
children
}
},
selected
(
name
)
{
this
.
form
.
icon
=
name
},
reset
()
{
this
.
$refs
.
menuForm
.
resetFields
()
},
save
()
{
this
.
$refs
.
menuForm
.
validate
(
valid
=>
{
if
(
valid
)
{
const
method
=
this
.
formType
===
'add'
?
addMenu
:
editMenu
method
(
this
.
form
).
then
(
res
=>
{
this
.
$success
(
this
.
$t
(
'commons.save_success'
))
this
.
backToList
()
})
}
else
{
return
false
}
})
},
backToList
()
{
this
.
$router
.
push
({
name
:
'菜单管理'
})
}
}
}
</
script
>
frontend/src/views/system/menu/index.vue
浏览文件 @
639246df
...
@@ -199,21 +199,27 @@ export default {
...
@@ -199,21 +199,27 @@ export default {
this
.
initTableData
()
this
.
initTableData
()
},
},
methods
:
{
methods
:
{
// create() {
// this.form = Object.assign({}, this.defaultForm)
// this.dialogVisible = true
// this.formType = 'add'
// },
create
()
{
create
()
{
this
.
form
=
Object
.
assign
({},
this
.
defaultForm
)
this
.
$router
.
push
({
name
:
'菜单表单'
})
this
.
dialogVisible
=
true
this
.
formType
=
'add'
},
},
search
(
condition
)
{
search
(
condition
)
{
console
.
log
(
condition
)
console
.
log
(
condition
)
},
},
// edit(row) {
// this.dialogVisible = true
// this.formType = 'modify'
// this.oldPid = row.pid
// this.form = Object.assign({}, row)
// this.treeByRow(row)
// },
edit
(
row
)
{
edit
(
row
)
{
this
.
dialogVisible
=
true
this
.
$router
.
push
({
name
:
'菜单表单'
,
params
:
row
})
this
.
formType
=
'modify'
this
.
oldPid
=
row
.
pid
this
.
form
=
Object
.
assign
({},
row
)
this
.
treeByRow
(
row
)
},
},
treeByRow
(
row
)
{
treeByRow
(
row
)
{
...
...
frontend/src/views/system/role/form.vue
0 → 100644
浏览文件 @
639246df
<
template
>
<layout-content
:header=
"formType=='add' ? $t('role.add') : $t('role.modify')"
back-name=
"角色管理"
>
<el-form
ref=
"roleForm"
:model=
"form"
:rules=
"rule"
size=
"small"
label-width=
"auto"
label-position=
"right"
>
<el-form-item
label=
"角色名称"
prop=
"name"
>
<el-input
v-model=
"form.name"
/>
</el-form-item>
<el-form-item
label=
"角色代码"
prop=
"code"
>
<el-input
v-model=
"form.code"
:disabled=
"formType !== 'add'"
/>
</el-form-item>
<el-form-item
label=
"描述信息"
prop=
"description"
>
<el-input
v-model=
"form.description"
type=
"textarea"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"save"
>
保存
</el-button>
<el-button
@
click=
"reset"
>
重置
</el-button>
</el-form-item>
</el-form>
</layout-content>
</
template
>
<
script
>
import
LayoutContent
from
'@/components/business/LayoutContent'
import
{
addRole
,
editRole
}
from
'@/api/system/user'
export
default
{
components
:
{
LayoutContent
},
data
()
{
return
{
form
:
{},
rule
:
{
name
:
[
{
required
:
true
,
message
:
'请输入名称'
,
trigger
:
'blur'
}
],
code
:
[{
required
:
true
,
message
:
'请输入代码'
,
trigger
:
'blur'
}]
}
}
},
created
()
{
if
(
this
.
$router
.
currentRoute
.
params
&&
this
.
$router
.
currentRoute
.
params
.
roleId
)
{
const
row
=
this
.
$router
.
currentRoute
.
params
this
.
edit
(
row
)
}
else
{
this
.
create
()
}
},
methods
:
{
create
()
{
this
.
formType
=
'add'
},
edit
(
row
)
{
this
.
formType
=
'modify'
this
.
form
=
Object
.
assign
({},
row
)
},
reset
()
{
this
.
$refs
.
roleForm
.
resetFields
()
},
save
()
{
this
.
$refs
.
roleForm
.
validate
(
valid
=>
{
if
(
valid
)
{
const
method
=
this
.
formType
===
'add'
?
addRole
:
editRole
method
(
this
.
form
).
then
(
res
=>
{
this
.
$success
(
this
.
$t
(
'commons.save_success'
))
this
.
backToList
()
})
}
else
{
return
false
}
})
},
backToList
()
{
this
.
$router
.
push
({
name
:
'角色管理'
})
}
}
}
</
script
>
frontend/src/views/system/role/index.vue
浏览文件 @
639246df
...
@@ -152,10 +152,13 @@ export default {
...
@@ -152,10 +152,13 @@ export default {
handleClick
(
tab
,
event
)
{
handleClick
(
tab
,
event
)
{
console
.
log
(
tab
,
event
)
console
.
log
(
tab
,
event
)
},
},
// create() {
// this.form = {}
// this.formType = 'add'
// this.dialogVisible = true
// },
create
()
{
create
()
{
this
.
form
=
{}
this
.
$router
.
push
({
name
:
'角色表单'
})
this
.
formType
=
'add'
this
.
dialogVisible
=
true
},
},
search
(
condition
)
{
search
(
condition
)
{
const
temp
=
formatCondition
(
condition
)
const
temp
=
formatCondition
(
condition
)
...
@@ -167,10 +170,13 @@ export default {
...
@@ -167,10 +170,13 @@ export default {
})
})
},
},
// edit(row) {
// this.formType = 'modify'
// this.dialogVisible = true
// this.form = Object.assign({}, row)
// },
edit
(
row
)
{
edit
(
row
)
{
this
.
formType
=
'modify'
this
.
$router
.
push
({
name
:
'角色表单'
,
params
:
row
})
this
.
dialogVisible
=
true
this
.
form
=
Object
.
assign
({},
row
)
},
},
saveRole
(
roleForm
)
{
saveRole
(
roleForm
)
{
...
...
frontend/src/views/system/user/form.vue
浏览文件 @
639246df
...
@@ -31,7 +31,7 @@
...
@@ -31,7 +31,7 @@
v-model=
"form.deptId"
v-model=
"form.deptId"
:options=
"depts"
:options=
"depts"
:load-options=
"loadDepts"
:load-options=
"loadDepts"
:auto-load-root-options=
"false"
placeholder=
"选择部门"
placeholder=
"选择部门"
/>
/>
</el-form-item>
</el-form-item>
...
@@ -182,6 +182,7 @@ export default {
...
@@ -182,6 +182,7 @@ export default {
const
results
=
res
.
data
.
map
(
node
=>
{
const
results
=
res
.
data
.
map
(
node
=>
{
if
(
node
.
hasChildren
&&
!
node
.
children
)
{
if
(
node
.
hasChildren
&&
!
node
.
children
)
{
node
.
children
=
null
node
.
children
=
null
// delete node.children
}
}
return
node
return
node
})
})
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论