Skip to content
项目
群组
代码片段
帮助
正在加载...
登录/注册
切换导航
广
广东建设用地-前端
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
广东建设用地
广东建设用地-前端
Commits
5a14683e
提交
5a14683e
authored
10月 25, 2023
作者:
gjx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改菜单权限
上级
b4be4b7a
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
202 行增加
和
84 行删除
+202
-84
FormModel.vue
src/components/FormModel.vue
+35
-0
index.vue
...layouts/default/header/components/user-dropdown/index.vue
+15
-9
index.vue
src/layouts/default/index.vue
+95
-68
index.ts
src/router/index.ts
+0
-1
index.ts
src/router/routes/index.ts
+9
-2
isAuth.ts
src/utils/auth/isAuth.ts
+13
-0
demos.vue
src/views/demos.vue
+24
-0
RolePermissionDrawer.vue
src/views/system/role/components/RolePermissionDrawer.vue
+0
-0
index.vue
src/views/system/user/index.vue
+11
-4
没有找到文件。
src/components/FormModel.vue
0 → 100644
浏览文件 @
5a14683e
<
template
>
<a-form
ref=
"formRef"
:model=
"form"
:layout=
"layout"
@
submit=
"handleSubmit"
>
<a-form-item
field=
"name"
label=
"Username"
>
<a-input
v-model=
"form.name"
placeholder=
"please enter your username..."
/>
</a-form-item>
<a-form-item>
<a-button
html-type=
"submit"
>
Submit
</a-button>
<slot></slot>
</a-form-item>
</a-form>
</
template
>
<
script
setup
>
import
{
computed
}
from
'vue'
;
import
{
string
}
from
'vue-types'
;
const
props
=
defineProps
({
FormData
:
Object
,
layout
:
{
type
:
String
,
default
:
'inline'
}
})
const
datas
=
computed
(()
=>
{
return
props
.
FormData
})
const
form
=
reactive
({
name
:
"11"
})
// 点击提交
function
handleSubmit
({
values
,
errors
})
{
console
.
log
(
'values:'
,
values
,
'
\
nerrors:'
,
errors
)
}
</
script
>
<
style
></
style
>
\ No newline at end of file
src/layouts/default/header/components/user-dropdown/index.vue
浏览文件 @
5a14683e
...
@@ -44,7 +44,7 @@
...
@@ -44,7 +44,7 @@
import
{
useSplitMenu
}
from
'/@/layouts/default/menu/useLayoutMenu'
;
import
{
useSplitMenu
}
from
'/@/layouts/default/menu/useLayoutMenu'
;
import
{
Dropdown
,
Menu
}
from
'ant-design-vue'
;
import
{
Dropdown
,
Menu
}
from
'ant-design-vue'
;
import
{
MenuModeEnum
,
MenuSplitTyeEnum
}
from
'/@/enums/menuEnum'
;
import
{
MenuModeEnum
,
MenuSplitTyeEnum
}
from
'/@/enums/menuEnum'
;
import
{
defineComponent
,
computed
,
ref
,
toRef
,
watch
}
from
'vue'
;
import
{
defineComponent
,
computed
,
ref
,
toRef
,
watch
,
watchEffect
}
from
'vue'
;
import
{
Icon
}
from
'/@/components/Icon'
;
import
{
Icon
}
from
'/@/components/Icon'
;
import
{
SITE_URL
}
from
'/@/settings/siteSetting'
;
import
{
SITE_URL
}
from
'/@/settings/siteSetting'
;
import
{
useUserStore
}
from
'/@/store/modules/user'
;
import
{
useUserStore
}
from
'/@/store/modules/user'
;
...
@@ -105,13 +105,13 @@ export default defineComponent({
...
@@ -105,13 +105,13 @@ export default defineComponent({
const
go
=
useGo
();
const
go
=
useGo
();
const
menus
=
menusStore
()
const
menus
=
menusStore
()
watch
(
watch
Effect
(()
=>
{
()
=>
menus
.
menus
,
menusRef
.
value
.
forEach
((
v
:
any
,
index
)
=>
{
(
val
)
=>
{
if
(
val
.
title
==
'首页'
)
if
(
menus
.
menus
.
title
==
v
.
title
)
actives
.
value
=
0
actives
.
value
=
index
}
})
);
}
);
const
getUserInfo
=
computed
(()
=>
{
const
getUserInfo
=
computed
(()
=>
{
const
{
realname
=
''
,
avatar
,
desc
}
=
userStore
.
getUserInfo
||
{};
const
{
realname
=
''
,
avatar
,
desc
}
=
userStore
.
getUserInfo
||
{};
...
@@ -132,8 +132,14 @@ export default defineComponent({
...
@@ -132,8 +132,14 @@ export default defineComponent({
function
select
(
v
,
index
)
{
function
select
(
v
,
index
)
{
// 存起来
// 存起来
actives
.
value
=
index
actives
.
value
=
index
console
.
log
(
v
,
'v'
)
menus
.
setMenus
(
v
)
menus
.
setMenus
(
v
)
go
(
v
.
path
)
if
(
v
?.
children
)
{
go
(
v
?.
children
[
0
]?.
path
)
}
else
{
go
(
v
.
path
)
}
}
}
/**
/**
...
...
src/layouts/default/index.vue
浏览文件 @
5a14683e
<
template
>
<
template
>
<Layout
:class=
"prefixCls"
v-bind=
"lockEvents"
>
<Layout
:class=
"prefixCls"
v-bind=
"lockEvents"
>
<!--
<LayoutFeatures
/>
-->
<!--
<LayoutFeatures
/>
-->
<LayoutHeader
/>
<LayoutHeader
/>
<Layout
:class=
"[layoutClass]"
>
<Layout
:class=
"[layoutClass]"
>
<!-- 左边 -->
<!-- 左边 -->
<LayoutSideBar
v-if=
"menus?.menus?.title
!='首页'&&menus?.menus?.title!=
'待办事项'"
/>
<LayoutSideBar
v-if=
"menus?.menus?.title
!= '首页' && menus?.menus?.title !=
'待办事项'"
/>
<!-- 左边结束 -->
<!-- 左边结束 -->
<Layout
:class=
"`$
{prefixCls}-main`">
<Layout
:class=
"`$
{prefixCls}-main`">
<LayoutMultipleHeader
v-if=
"menus?.menus?.title!='首页'&&menus?.menus?.title!=
'待办事项'"
/>
<LayoutMultipleHeader
v-if=
"menus?.menus?.title != '首页' && menus?.menus?.title !=
'待办事项'"
/>
<LayoutContent
/>
<LayoutContent
/>
<LayoutFooter
/>
<LayoutFooter
/>
</Layout>
</Layout>
...
@@ -16,80 +16,107 @@
...
@@ -16,80 +16,107 @@
</
template
>
</
template
>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
>
import
{
defineComponent
,
computed
,
unref
,
ref
}
from
'vue'
;
import
{
defineComponent
,
computed
,
unref
,
toRef
,
watch
}
from
'vue'
;
import
{
Layout
}
from
'ant-design-vue'
;
import
{
Layout
}
from
'ant-design-vue'
;
import
{
createAsyncComponent
}
from
'/@/utils/factory/createAsyncComponent'
;
import
{
createAsyncComponent
}
from
'/@/utils/factory/createAsyncComponent'
;
import
menusStore
from
'/@/store/menu'
import
menusStore
from
'/@/store/menu'
import
LayoutHeader
from
'./header/index.vue'
;
import
{
useSplitMenu
}
from
'/@/layouts/default/menu/useLayoutMenu'
;
import
LayoutContent
from
'./content/index.vue'
;
import
LayoutHeader
from
'./header/index.vue'
;
import
LayoutSideBar
from
'./sider/index.vue'
;
import
LayoutContent
from
'./content/index.vue'
;
import
LayoutMultipleHeader
from
'./header/MultipleHeader.vue'
;
import
LayoutSideBar
from
'./sider/index.vue'
;
import
LayoutMultipleHeader
from
'./header/MultipleHeader.vue'
;
import
{
useRoute
}
from
'vue-router'
;
import
{
useHeaderSetting
}
from
'/@/hooks/setting/useHeaderSetting'
;
import
{
useMenuSetting
}
from
'/@/hooks/setting/useMenuSetting'
;
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
import
{
useLockPage
}
from
'/@/hooks/web/useLockPage'
;
import
{
MenuModeEnum
,
MenuSplitTyeEnum
}
from
'/@/enums/menuEnum'
;
import
{
useAppInject
}
from
'/@/hooks/web/useAppInject'
;
import
{
useHeaderSetting
}
from
'/@/hooks/setting/useHeaderSetting'
;
export
default
defineComponent
({
import
{
useMenuSetting
}
from
'/@/hooks/setting/useMenuSetting'
;
name
:
'DefaultLayout'
,
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
props
:
{
import
{
useLockPage
}
from
'/@/hooks/web/useLockPage'
;
splitType
:
{
type
:
Number
as
PropType
<
MenuSplitTyeEnum
>
,
import
{
useAppInject
}
from
'/@/hooks/web/useAppInject'
;
default
:
MenuSplitTyeEnum
.
NONE
,
},
export
default
defineComponent
({
// menu Mode
name
:
'DefaultLayout'
,
menuMode
:
{
components
:
{
type
:
[
String
]
as
PropType
<
Nullable
<
MenuModeEnum
>>
,
LayoutFeatures
:
createAsyncComponent
(()
=>
import
(
'/@/layouts/default/feature/index.vue'
)),
default
:
''
,
LayoutFooter
:
createAsyncComponent
(()
=>
import
(
'/@/layouts/default/footer/index.vue'
)),
LayoutHeader
,
LayoutContent
,
LayoutSideBar
,
LayoutMultipleHeader
,
Layout
,
},
},
setup
()
{
},
const
{
prefixCls
}
=
useDesign
(
'default-layout'
);
components
:
{
const
{
getIsMobile
}
=
useAppInject
();
LayoutFeatures
:
createAsyncComponent
(()
=>
import
(
'/@/layouts/default/feature/index.vue'
)),
const
{
getShowFullHeaderRef
}
=
useHeaderSetting
();
LayoutFooter
:
createAsyncComponent
(()
=>
import
(
'/@/layouts/default/footer/index.vue'
)),
const
{
getShowSidebar
,
getIsMixSidebar
,
getShowMenu
}
=
useMenuSetting
();
LayoutHeader
,
const
menus
=
menusStore
()
LayoutContent
,
// Create a lock screen monitor
LayoutSideBar
,
const
lockEvents
=
useLockPage
();
LayoutMultipleHeader
,
Layout
,
},
setup
(
props
)
{
const
{
prefixCls
}
=
useDesign
(
'default-layout'
);
const
{
getIsMobile
}
=
useAppInject
();
const
{
getShowFullHeaderRef
}
=
useHeaderSetting
();
const
{
getShowSidebar
,
getIsMixSidebar
,
getShowMenu
}
=
useMenuSetting
();
const
menus
=
menusStore
()
// Create a lock screen monitor
const
lockEvents
=
useLockPage
();
const
router
=
useRoute
();
const
{
menusRef
}
=
useSplitMenu
(
toRef
(
props
,
'splitType'
));
const
layoutClass
=
computed
(()
=>
{
watch
(
let
cls
:
string
[]
=
[
'ant-layout'
];
()
=>
menusRef
.
value
,
if
(
unref
(
getIsMixSidebar
)
||
unref
(
getShowMenu
))
{
()
=>
{
cls
.
push
(
'ant-layout-has-sider'
);
menusRef
?.
value
.
forEach
((
v
:
any
)
=>
{
}
if
(
router
.
matched
[
0
]
&&
v
.
title
==
router
.
matched
[
0
].
meta
.
title
)
{
return
cls
;
menus
.
setMenus
(
v
)
});
return
{
}
getShowFullHeaderRef
,
});
getShowSidebar
,
}
prefixCls
,
);
getIsMobile
,
getIsMixSidebar
,
const
layoutClass
=
computed
(()
=>
{
layoutClass
,
let
cls
:
string
[]
=
[
'ant-layout'
];
lockEvents
,
if
(
unref
(
getIsMixSidebar
)
||
unref
(
getShowMenu
))
{
menus
,
cls
.
push
(
'ant-layout-has-sider'
);
};
}
},
return
cls
;
});
});
return
{
getShowFullHeaderRef
,
getShowSidebar
,
prefixCls
,
getIsMobile
,
getIsMixSidebar
,
layoutClass
,
lockEvents
,
menus
,
};
},
});
</
script
>
</
script
>
<
style
lang=
"less"
>
<
style
lang=
"less"
>
@prefix-cls: ~'@{namespace}-default-layout';
@prefix-cls: ~'@{namespace}-default-layout';
.@{prefix-cls} {
.@{prefix-cls} {
display: flex;
display: flex;
width: 100%;
width: 100%;
min-height: 100%;
min-height: 100%;
background-color: @content-bg;
background-color: @content-bg;
flex-direction: column;
flex-direction: column;
>
.ant-layout {
>
.ant-layout {
min-height: 100%;
min-height: 100%;
}
}
&-main {
&-main {
width: 100%;
width: 100%;
margin-left: 1px;
margin-left: 1px;
}
}
}
}
</
style
>
</
style
>
src/router/index.ts
浏览文件 @
5a14683e
...
@@ -12,7 +12,6 @@ const getRouteNames = (array: any[]) =>
...
@@ -12,7 +12,6 @@ const getRouteNames = (array: any[]) =>
getRouteNames
(
item
.
children
||
[]);
getRouteNames
(
item
.
children
||
[]);
});
});
getRouteNames
(
basicRoutes
);
getRouteNames
(
basicRoutes
);
// app router
// app router
export
const
router
=
createRouter
({
export
const
router
=
createRouter
({
history
:
createWebHistory
(
import
.
meta
.
env
.
VITE_PUBLIC_PATH
),
history
:
createWebHistory
(
import
.
meta
.
env
.
VITE_PUBLIC_PATH
),
...
...
src/router/routes/index.ts
浏览文件 @
5a14683e
...
@@ -38,7 +38,14 @@ export const LoginRoute: AppRouteRecordRaw = {
...
@@ -38,7 +38,14 @@ export const LoginRoute: AppRouteRecordRaw = {
title
:
t
(
'routes.basic.login'
),
title
:
t
(
'routes.basic.login'
),
},
},
};
};
export
const
DemosRoute
:
AppRouteRecordRaw
=
{
path
:
'/demos'
,
name
:
'demos'
,
component
:
()
=>
import
(
'/@/views/demose.vue'
),
meta
:
{
title
:
'测试'
,
},
};
//update-begin---author:wangshuai ---date:20220629 for:auth2登录页面路由------------
//update-begin---author:wangshuai ---date:20220629 for:auth2登录页面路由------------
export
const
Oauth2LoginRoute
:
AppRouteRecordRaw
=
{
export
const
Oauth2LoginRoute
:
AppRouteRecordRaw
=
{
path
:
'/oauth2-app/login'
,
path
:
'/oauth2-app/login'
,
...
@@ -66,4 +73,4 @@ export const TokenLoginRoute: AppRouteRecordRaw = {
...
@@ -66,4 +73,4 @@ export const TokenLoginRoute: AppRouteRecordRaw = {
};
};
// Basic routing without permission
// Basic routing without permission
export
const
basicRoutes
=
[
LoginRoute
,
RootRoute
,
...
mainOutRoutes
,
REDIRECT_ROUTE
,
PAGE_NOT_FOUND_ROUTE
,
TokenLoginRoute
,
Oauth2LoginRoute
];
export
const
basicRoutes
=
[
LoginRoute
,
RootRoute
,
DemosRoute
,
...
mainOutRoutes
,
REDIRECT_ROUTE
,
PAGE_NOT_FOUND_ROUTE
,
TokenLoginRoute
,
Oauth2LoginRoute
];
src/utils/auth/isAuth.ts
0 → 100644
浏览文件 @
5a14683e
import
{
usePermissionStore
}
from
'/@/store/modules/permission'
;
const
auth
=
usePermissionStore
()
export
function
isAuth
(
key
:
String
)
{
for
(
let
i
=
0
;
i
<
auth
.
allAuthList
.
length
;
i
++
){
if
(
auth
.
allAuthList
[
i
].
action
===
key
)
{
if
(
auth
.
allAuthList
[
i
].
type
!=
2
)
return
true
else
return
false
}
}
}
\ No newline at end of file
src/views/demos.vue
0 → 100644
浏览文件 @
5a14683e
<
template
>
<div>
<Form
:FormData=
"FormData"
/>
</div>
</
template
>
<
script
setup
>
import
Form
from
'/@/components/FormModel.vue'
let
FormData
=
ref
(
[
{
name
:
'name'
,
type
:
'text'
,
label
:
'名称'
},
{
name
:
'class'
,
type
:
'text'
,
label
:
'班级'
},
]
)
</
script
>
\ No newline at end of file
src/views/system/role/components/RolePermissionDrawer.vue
浏览文件 @
5a14683e
差异被折叠。
点击展开。
src/views/system/user/index.vue
浏览文件 @
5a14683e
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
<BasicTable
@
register=
"registerTable"
:rowSelection=
"rowSelection"
>
<BasicTable
@
register=
"registerTable"
:rowSelection=
"rowSelection"
>
<!--插槽:table标题-->
<!--插槽:table标题-->
<template
#
tableTitle
>
<template
#
tableTitle
>
<a-button
type=
"primary"
preIcon=
"ant-design:plus-outlined"
@
click=
"handleCreate"
>
新增
</a-button>
<a-button
type=
"primary"
preIcon=
"ant-design:plus-outlined"
@
click=
"handleCreate"
v-show=
"isAuth('system:user:add')"
>
新增
</a-button>
<a-button
type=
"primary"
preIcon=
"ant-design:export-outlined"
@
click=
"onExportXls"
>
导出
</a-button>
<a-button
type=
"primary"
preIcon=
"ant-design:export-outlined"
@
click=
"onExportXls"
>
导出
</a-button>
<j-upload-button
type=
"primary"
preIcon=
"ant-design:import-outlined"
@
click=
"onImportXls"
>
导入
</j-upload-button>
<j-upload-button
type=
"primary"
preIcon=
"ant-design:import-outlined"
@
click=
"onImportXls"
>
导入
</j-upload-button>
<a-button
type=
"primary"
@
click=
"handleSyncUser"
preIcon=
"ant-design:sync-outlined"
>
同步流程
</a-button>
<a-button
type=
"primary"
@
click=
"handleSyncUser"
preIcon=
"ant-design:sync-outlined"
>
同步流程
</a-button>
...
@@ -56,7 +56,8 @@
...
@@ -56,7 +56,8 @@
<
script
lang=
"ts"
name=
"system-user"
setup
>
<
script
lang=
"ts"
name=
"system-user"
setup
>
//ts语法
//ts语法
import
{
ref
,
computed
,
unref
}
from
'vue'
;
import
{
ref
,
computed
,
unref
}
from
'vue'
;
import
{
BasicTable
,
TableAction
,
ActionItem
}
from
'/@/components/Table'
;
import
{
BasicTable
,
TableAction
,
ActionItem
}
from
'/@/components/Table'
;
import
{
isAuth
}
from
'/@/utils/auth/isAuth'
import
UserDrawer
from
'./UserDrawer.vue'
;
import
UserDrawer
from
'./UserDrawer.vue'
;
import
UserRecycleBinModal
from
'./UserRecycleBinModal.vue'
;
import
UserRecycleBinModal
from
'./UserRecycleBinModal.vue'
;
import
PasswordModal
from
'./PasswordModal.vue'
;
import
PasswordModal
from
'./PasswordModal.vue'
;
...
@@ -241,7 +242,8 @@
...
@@ -241,7 +242,8 @@
/**
/**
* 操作栏
* 操作栏
*/
*/
function
getTableAction
(
record
):
ActionItem
[]
{
function
getTableAction
(
record
):
ActionItem
[]
{
if
(
isAuth
(
'system:user:edit'
))
{
return
[
return
[
{
{
label
:
'编辑'
,
label
:
'编辑'
,
...
@@ -249,11 +251,16 @@
...
@@ -249,11 +251,16 @@
// ifShow: () => hasPermission('system:user:edit'),
// ifShow: () => hasPermission('system:user:edit'),
},
},
];
];
}
else
{
return
[]
}
}
}
/**
/**
* 下拉操作栏
* 下拉操作栏
*/
*/
function
getDropDownAction
(
record
):
ActionItem
[]
{
function
getDropDownAction
(
record
):
ActionItem
[]
{
return
[
return
[
{
{
label
:
'详情'
,
label
:
'详情'
,
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论