Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
FLIPPED-AURORA
gin-vue-admin
提交
18e57b15
G
gin-vue-admin
项目概览
FLIPPED-AURORA
/
gin-vue-admin
大约 1 年 前同步成功
通知
332
Star
18154
Fork
5505
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gin-vue-admin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
18e57b15
编写于
1月 14, 2021
作者:
Mr.奇淼(
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
https://github.com/flipped-aurora/gin-vue-admin
into gva_gormv2_dev
上级
4a0a54e2
deb6ea59
变更
18
隐藏空白更改
内联
并排
Showing
18 changed file
with
83 addition
and
47 deletion
+83
-47
server/cmd/datas/authorities.go
server/cmd/datas/authorities.go
+3
-3
server/config.yaml
server/config.yaml
+1
-1
server/model/sys_authority.go
server/model/sys_authority.go
+1
-0
server/resource/template/server/router.go.tpl
server/resource/template/server/router.go.tpl
+1
-1
server/resource/template/web/table.vue.tpl
server/resource/template/web/table.vue.tpl
+11
-11
web/package.json
web/package.json
+2
-2
web/src/components/chooseImg/index.vue
web/src/components/chooseImg/index.vue
+4
-2
web/src/permission.js
web/src/permission.js
+2
-2
web/src/store/module/router.js
web/src/store/module/router.js
+4
-1
web/src/store/module/user.js
web/src/store/module/user.js
+5
-2
web/src/view/example/customer/customer.vue
web/src/view/example/customer/customer.vue
+1
-2
web/src/view/layout/aside/historyComponent/history.vue
web/src/view/layout/aside/historyComponent/history.vue
+19
-9
web/src/view/superAdmin/authority/components/menus.vue
web/src/view/superAdmin/authority/components/menus.vue
+25
-2
web/src/view/superAdmin/dictionary/sysDictionary.vue
web/src/view/superAdmin/dictionary/sysDictionary.vue
+1
-2
web/src/view/superAdmin/dictionary/sysDictionaryDetail.vue
web/src/view/superAdmin/dictionary/sysDictionaryDetail.vue
+1
-2
web/src/view/superAdmin/operation/sysOperationRecord.vue
web/src/view/superAdmin/operation/sysOperationRecord.vue
+1
-2
web/src/view/systemTools/autoCode/component/fieldDialog.vue
web/src/view/systemTools/autoCode/component/fieldDialog.vue
+0
-1
web/src/view/workflow/workflowProcess/workflowProcess.vue
web/src/view/workflow/workflowProcess/workflowProcess.vue
+1
-2
未找到文件。
server/cmd/datas/authorities.go
浏览文件 @
18e57b15
...
...
@@ -10,9 +10,9 @@ import (
)
var
Authorities
=
[]
model
.
SysAuthority
{
{
CreatedAt
:
time
.
Now
(),
UpdatedAt
:
time
.
Now
(),
AuthorityId
:
"888"
,
AuthorityName
:
"普通用户"
,
ParentId
:
"0"
},
{
CreatedAt
:
time
.
Now
(),
UpdatedAt
:
time
.
Now
(),
AuthorityId
:
"8881"
,
AuthorityName
:
"普通用户子角色"
,
ParentId
:
"888"
},
{
CreatedAt
:
time
.
Now
(),
UpdatedAt
:
time
.
Now
(),
AuthorityId
:
"9528"
,
AuthorityName
:
"测试角色"
,
ParentId
:
"0"
},
{
CreatedAt
:
time
.
Now
(),
UpdatedAt
:
time
.
Now
(),
AuthorityId
:
"888"
,
AuthorityName
:
"普通用户"
,
ParentId
:
"0"
,
DefaultRouter
:
"dashboard"
},
{
CreatedAt
:
time
.
Now
(),
UpdatedAt
:
time
.
Now
(),
AuthorityId
:
"8881"
,
AuthorityName
:
"普通用户子角色"
,
ParentId
:
"888"
,
DefaultRouter
:
"dashboard"
},
{
CreatedAt
:
time
.
Now
(),
UpdatedAt
:
time
.
Now
(),
AuthorityId
:
"9528"
,
AuthorityName
:
"测试角色"
,
ParentId
:
"0"
,
DefaultRouter
:
"dashboard"
},
}
func
InitSysAuthority
(
db
*
gorm
.
DB
)
{
...
...
server/config.yaml
浏览文件 @
18e57b15
...
...
@@ -43,7 +43,7 @@ system:
env
:
'
public'
# Change to "develop" to skip authentication for development mode
addr
:
8888
db-type
:
'
mysql'
oss-type
:
'
local'
oss-type
:
'
local'
# 控制oss选择走本期还是 七牛等其他仓 自行增加其他oss仓可以在 server/utils/upload/upload.go 中 NewOss函数配置
use-multipoint
:
false
# captcha configuration
...
...
server/model/sys_authority.go
浏览文件 @
18e57b15
...
...
@@ -14,4 +14,5 @@ type SysAuthority struct {
DataAuthorityId
[]
SysAuthority
`json:"dataAuthorityId" gorm:"many2many:sys_data_authority_id"`
Children
[]
SysAuthority
`json:"children" gorm:"-"`
SysBaseMenus
[]
SysBaseMenu
`json:"menus" gorm:"many2many:sys_authority_menus;"`
DefaultRouter
string
`json:"defaultRouter" gorm:"comment:默认菜单;default:dashboard"`
}
server/resource/template/server/router.go.tpl
浏览文件 @
18e57b15
...
...
@@ -7,7 +7,7 @@ import (
)
func Init{{.StructName}}Router(Router *gin.RouterGroup) {
{{.StructName}}Router := Router.Group("{{.Abbreviation}}").Use(middleware.
JWTAuth()).Use(middleware.CasbinHandler()).Use(middleware.
OperationRecord())
{{.StructName}}Router := Router.Group("{{.Abbreviation}}").Use(middleware.OperationRecord())
{
{{.StructName}}Router.POST("create{{.StructName}}", v1.Create{{.StructName}}) // 新建{{.StructName}}
{{.StructName}}Router.DELETE("delete{{.StructName}}", v1.Delete{{.StructName}}) // 删除{{.StructName}}
...
...
server/resource/template/web/table.vue.tpl
浏览文件 @
18e57b15
...
...
@@ -68,14 +68,7 @@
<el-table-column
label=
"按钮组"
>
<template
slot-scope=
"scope"
>
<el-button
class=
"table-button"
@
click=
"update{{.StructName}}(scope.row)"
size=
"small"
type=
"primary"
icon=
"el-icon-edit"
>
变更
</el-button>
<el-popover
placement=
"top"
width=
"160"
v-model=
"scope.row.visible"
>
<p>
确定要删除吗?
</p>
<div
style=
"text-align: right; margin: 0"
>
<el-button
size=
"mini"
type=
"text"
@
click=
"scope.row.visible = false"
>
取消
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click=
"delete{{.StructName}}(scope.row)"
>
确定
</el-button>
</div>
<el-button
type=
"danger"
icon=
"el-icon-delete"
size=
"mini"
slot=
"reference"
>
删除
</el-button>
</el-popover>
<el-button
type=
"danger"
icon=
"el-icon-delete"
size=
"mini"
@
click=
"deleteRow(scope.row)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
...
...
@@ -145,7 +138,6 @@ export default {
return
{
listApi
:
get
{{
.
StructName
}}
List
,
dialogFormVisible
:
false
,
visible
:
false
,
type
:
""
,
deleteVisible
:
false
,
multipleSelection
:
[],
...
...
@@ -208,6 +200,15 @@ export default {
handleSelectionChange
(
val
)
{
this
.
multipleSelection
=
val
},
deleteRow
(
row
){
this
.
$confirm
(
'
确定要删除吗?
'
,
'
提示
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
type
:
'
warning
'
}).
then
(()
=>
{
this
.
delete
{{.
StructName
}}(
row
);
});
},
async
onDelete
()
{
const
ids
=
[]
if
(
this
.
multipleSelection
.
length
==
0
){
...
...
@@ -265,7 +266,6 @@ export default {
};
},
async
delete
{{.
StructName
}}(
row
)
{
this
.
visible
=
false
;
const
res
=
await
delete
{{.
StructName
}}({
ID
:
row
.
ID
});
if
(
res
.
code
==
0
)
{
this
.
$message
({
...
...
@@ -317,4 +317,4 @@ export default {
</script>
<style>
</style>
\ No newline at end of file
</style>
web/package.json
浏览文件 @
18e57b15
{
"name"
:
"
qm-plus-vue-page
"
,
"name"
:
"
gin-vue-admin
"
,
"version"
:
"0.1.0"
,
"private"
:
true
,
"scripts"
:
{
...
...
@@ -72,4 +72,4 @@
"> 1%"
,
"last 2 versions"
]
}
}
\ No newline at end of file
web/src/components/chooseImg/index.vue
浏览文件 @
18e57b15
...
...
@@ -3,7 +3,7 @@
<div
style=
"display:flex;justify-content:space-around;flex-wrap:wrap;padding-top:40px"
>
<el-image
class=
"header-img-box-list"
:src=
"item.url"
:src=
"
(item.url && item.url.slice(0, 4) !== 'http')?path+item.url:
item.url"
v-for=
"(item,key) in picList"
:key=
"key"
@
click.native=
"chooseImg(item.url,target,targetKey)"
...
...
@@ -17,6 +17,7 @@
</
template
>
<
script
>
const
path
=
process
.
env
.
VUE_APP_BASE_API
import
{
getFileList
}
from
"
@/api/fileUploadAndDownload
"
;
export
default
{
props
:
{
...
...
@@ -26,7 +27,8 @@ export default {
data
()
{
return
{
drawer
:
false
,
picList
:
[]
picList
:
[],
path
:
path
};
},
methods
:
{
...
...
web/src/permission.js
浏览文件 @
18e57b15
...
...
@@ -13,7 +13,7 @@ router.beforeEach(async(to, from, next) => {
document
.
title
=
getPageTitle
(
to
.
meta
.
title
)
if
(
whiteList
.
indexOf
(
to
.
name
)
>
-
1
)
{
if
(
token
)
{
next
({
path
:
'
/layout/dashboard
'
})
next
({
name
:
store
.
getters
[
"
user/userInfo
"
].
authority
.
defaultRouter
})
}
else
{
next
()
}
...
...
@@ -21,7 +21,7 @@ router.beforeEach(async(to, from, next) => {
// 不在白名单中并且已经登陆的时候
if
(
token
)
{
// 添加flag防止多次获取动态路由和栈溢出
if
(
!
asyncRouterFlag
)
{
if
(
!
asyncRouterFlag
&&
store
.
getters
[
'
router/asyncRouters
'
].
length
==
0
)
{
asyncRouterFlag
++
await
store
.
dispatch
(
'
router/SetAsyncRouter
'
)
const
asyncRouters
=
store
.
getters
[
'
router/asyncRouters
'
]
...
...
web/src/store/module/router.js
浏览文件 @
18e57b15
...
...
@@ -28,7 +28,7 @@ export const router = {
// 设置动态路由
setAsyncRouter
(
state
,
asyncRouters
)
{
state
.
asyncRouters
=
asyncRouters
}
}
,
},
actions
:
{
// 从后台获取动态路由
...
...
@@ -73,6 +73,9 @@ export const router = {
},
routerList
(
state
)
{
return
state
.
routerList
},
defaultRouter
(
state
)
{
return
state
.
defaultRouter
}
}
}
\ No newline at end of file
web/src/store/module/user.js
浏览文件 @
18e57b15
...
...
@@ -35,16 +35,19 @@ export const user = {
}
},
actions
:
{
async
LoginIn
({
commit
},
loginInfo
)
{
async
LoginIn
({
commit
,
dispatch
,
rootGetters
,
getters
},
loginInfo
)
{
const
res
=
await
login
(
loginInfo
)
if
(
res
.
code
==
0
)
{
commit
(
'
setUserInfo
'
,
res
.
data
.
user
)
commit
(
'
setToken
'
,
res
.
data
.
token
)
await
dispatch
(
'
router/SetAsyncRouter
'
,
{},
{
root
:
true
})
const
asyncRouters
=
rootGetters
[
'
router/asyncRouters
'
]
router
.
addRoutes
(
asyncRouters
)
const
redirect
=
router
.
history
.
current
.
query
.
redirect
if
(
redirect
)
{
router
.
push
({
path
:
redirect
})
}
else
{
router
.
push
({
path
:
'
/layout/dashboard
'
})
router
.
push
({
name
:
getters
[
"
userInfo
"
].
authority
.
defaultRouter
})
}
return
true
}
...
...
web/src/view/example/customer/customer.vue
浏览文件 @
18e57b15
...
...
@@ -84,7 +84,6 @@ export default {
return
{
listApi
:
getExaCustomerList
,
dialogFormVisible
:
false
,
visible
:
false
,
type
:
""
,
form
:
{
customerName
:
""
,
...
...
@@ -119,7 +118,7 @@ export default {
};
},
async
deleteCustomer
(
row
)
{
this
.
visible
=
false
;
row
.
visible
=
false
;
const
res
=
await
deleteExaCustomer
({
ID
:
row
.
ID
});
if
(
res
.
code
==
0
)
{
this
.
$message
({
...
...
web/src/view/layout/aside/historyComponent/history.vue
浏览文件 @
18e57b15
<
template
>
<div
class=
"router-history"
>
<el-tabs
:closable=
"!(historys.length==1&&this.$route.name==
'dashboard'
)"
:closable=
"!(historys.length==1&&this.$route.name==
defaultRouter
)"
@
contextmenu.prevent.native=
"openContextMenu($event)"
@
tab-click=
"changeTab"
@
tab-remove=
"removeTab"
...
...
@@ -27,12 +27,14 @@
</div>
</
template
>
<
script
>
import
{
mapGetters
}
from
"
vuex
"
export
default
{
name
:
'
HistoryComponent
'
,
data
()
{
return
{
historys
:
[],
activeValue
:
'
dashboard
'
,
activeValue
:
''
,
contextMenuVisible
:
false
,
left
:
0
,
top
:
0
,
...
...
@@ -41,7 +43,15 @@ export default {
rightActive
:
''
}
},
computed
:{
...
mapGetters
(
"
user
"
,[
"
userInfo
"
]),
defaultRouter
(){
return
this
.
userInfo
.
authority
.
defaultRouter
}
},
created
()
{
this
.
activeValue
=
this
.
defaultRouter
this
.
$bus
.
on
(
'
mobile
'
,
isMobile
=>
{
this
.
isMobile
=
isMobile
})
...
...
@@ -50,9 +60,9 @@ export default {
})
const
initHistorys
=
[
{
name
:
'
dashboard
'
,
name
:
this
.
defaultRouter
,
meta
:
{
title
:
'
仪表盘
'
title
:
'
首页
'
}
}
]
...
...
@@ -67,7 +77,7 @@ export default {
},
methods
:
{
openContextMenu
(
e
)
{
if
(
this
.
historys
.
length
==
1
&&
this
.
$route
.
name
==
'
dashboard
'
)
{
if
(
this
.
historys
.
length
==
1
&&
this
.
$route
.
name
==
this
.
defaultRouter
)
{
return
false
}
if
(
e
.
srcElement
.
id
)
{
...
...
@@ -89,13 +99,13 @@ export default {
closeAll
()
{
this
.
historys
=
[
{
name
:
'
dashboard
'
,
name
:
this
.
defaultRouter
,
meta
:
{
title
:
'
仪表盘
'
title
:
'
首页
'
}
}
]
this
.
$router
.
push
({
name
:
'
dashboard
'
})
this
.
$router
.
push
({
name
:
this
.
defaultRouter
})
this
.
contextMenuVisible
=
false
sessionStorage
.
setItem
(
'
historys
'
,
JSON
.
stringify
(
this
.
historys
))
},
...
...
@@ -169,7 +179,7 @@ export default {
const
index
=
this
.
historys
.
findIndex
(
item
=>
item
.
name
==
tab
)
if
(
this
.
$route
.
name
==
tab
)
{
if
(
this
.
historys
.
length
==
1
)
{
this
.
$router
.
push
({
name
:
'
dashboard
'
})
this
.
$router
.
push
({
name
:
this
.
defaultRouter
})
}
else
{
if
(
index
<
this
.
historys
.
length
-
1
)
{
this
.
$router
.
push
({
name
:
this
.
historys
[
index
+
1
].
name
,
query
:
this
.
historys
[
index
+
1
].
query
,
params
:
this
.
historys
[
index
+
1
].
params
})
...
...
web/src/view/superAdmin/authority/components/menus.vue
浏览文件 @
18e57b15
...
...
@@ -13,12 +13,28 @@
node-key=
"ID"
ref=
"menuTree"
show-checkbox
></el-tree>
>
<span
class=
"custom-tree-node"
slot-scope=
"
{ node , data }">
<span>
{{
node
.
label
}}
</span>
<span>
<el-button
type=
"text"
size=
"mini"
:style=
"
{color:row.defaultRouter == data.name?'#E6A23C':'#85ce61'}"
:disabled="!node.checked"
@click="() => setDefault(data)">
{{
row
.
defaultRouter
==
data
.
name
?
"
首页
"
:
"
设为首页
"
}}
</el-button>
</span>
</span>
</el-tree>
</div>
</
template
>
<
script
>
import
{
getBaseMenuTree
,
getMenuAuthority
,
addMenuAuthority
}
from
'
@/api/menu
'
import
{
updateAuthority
,
}
from
"
@/api/authority
"
;
export
default
{
name
:
'
Menus
'
,
props
:
{
...
...
@@ -43,6 +59,13 @@ export default {
}
},
methods
:
{
async
setDefault
(
data
){
const
res
=
await
updateAuthority
({
authorityId
:
this
.
row
.
authorityId
,
AuthorityName
:
this
.
row
.
authorityName
,
parentId
:
this
.
row
.
parentId
,
defaultRouter
:
data
.
name
})
if
(
res
.
code
==
0
){
this
.
$message
({
type
:
"
success
"
,
message
:
"
设置成功
"
})
this
.
row
.
defaultRouter
=
res
.
data
.
authority
.
defaultRouter
}
},
nodeChange
(){
this
.
needConfirm
=
true
},
...
...
web/src/view/superAdmin/dictionary/sysDictionary.vue
浏览文件 @
18e57b15
...
...
@@ -128,7 +128,6 @@ export default {
return
{
listApi
:
getSysDictionaryList
,
dialogFormVisible
:
false
,
visible
:
false
,
type
:
""
,
formData
:
{
name
:
null
,
...
...
@@ -214,7 +213,7 @@ export default {
};
},
async
deleteSysDictionary
(
row
)
{
this
.
visible
=
false
;
row
.
visible
=
false
;
const
res
=
await
deleteSysDictionary
({
ID
:
row
.
ID
});
if
(
res
.
code
==
0
)
{
this
.
$message
({
...
...
web/src/view/superAdmin/dictionary/sysDictionaryDetail.vue
浏览文件 @
18e57b15
...
...
@@ -124,7 +124,6 @@ export default {
return
{
listApi
:
getSysDictionaryDetailList
,
dialogFormVisible
:
false
,
visible
:
false
,
type
:
""
,
formData
:
{
label
:
null
,
...
...
@@ -203,7 +202,7 @@ export default {
};
},
async
deleteSysDictionaryDetail
(
row
)
{
this
.
visible
=
false
;
row
.
visible
=
false
;
const
res
=
await
deleteSysDictionaryDetail
({
ID
:
row
.
ID
});
if
(
res
.
code
==
0
)
{
this
.
$message
({
...
...
web/src/view/superAdmin/operation/sysOperationRecord.vue
浏览文件 @
18e57b15
...
...
@@ -123,7 +123,6 @@ export default {
return
{
listApi
:
getSysOperationRecordList
,
dialogFormVisible
:
false
,
visible
:
false
,
type
:
""
,
deleteVisible
:
false
,
multipleSelection
:
[],
...
...
@@ -186,7 +185,7 @@ export default {
}
},
async
deleteSysOperationRecord
(
row
)
{
this
.
visible
=
false
;
row
.
visible
=
false
;
const
res
=
await
deleteSysOperationRecord
({
ID
:
row
.
ID
});
if
(
res
.
code
==
0
)
{
this
.
$message
({
...
...
web/src/view/systemTools/autoCode/component/fieldDialog.vue
浏览文件 @
18e57b15
...
...
@@ -121,7 +121,6 @@ export default {
data
()
{
return
{
dbfdOptions
:
[],
visible
:
false
,
dictOptions
:
[],
typeSearchOptions
:
[
{
...
...
web/src/view/workflow/workflowProcess/workflowProcess.vue
浏览文件 @
18e57b15
...
...
@@ -110,7 +110,6 @@ export default {
return
{
listApi
:
getWorkflowProcessList
,
dialogFormVisible
:
false
,
visible
:
false
,
deleteVisible
:
false
,
multipleSelection
:
[]
};
...
...
@@ -191,7 +190,7 @@ export default {
});
},
async
deleteWorkflowProcess
(
row
)
{
this
.
visible
=
false
;
row
.
visible
=
false
;
const
res
=
await
deleteWorkflowProcess
({
id
:
row
.
id
});
if
(
res
.
code
==
0
)
{
this
.
$message
({
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录