Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
一臭打代码的 aka 潘先生です
vue-vben-admin
提交
00fca0fe
V
vue-vben-admin
项目概览
一臭打代码的 aka 潘先生です
/
vue-vben-admin
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vue-vben-admin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
00fca0fe
编写于
6月 09, 2021
作者:
V
Vben
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: prettier code
上级
34a80542
变更
37
隐藏空白更改
内联
并排
Showing
37 changed file
with
391 addition
and
442 deletion
+391
-442
src/components/ContextMenu/index.ts
src/components/ContextMenu/index.ts
+1
-1
src/components/ContextMenu/src/ContextMenu.tsx
src/components/ContextMenu/src/ContextMenu.tsx
+0
-117
src/components/ContextMenu/src/ContextMenu.vue
src/components/ContextMenu/src/ContextMenu.vue
+204
-0
src/components/ContextMenu/src/createContextMenu.ts
src/components/ContextMenu/src/createContextMenu.ts
+7
-5
src/components/ContextMenu/src/index.less
src/components/ContextMenu/src/index.less
+0
-65
src/components/ContextMenu/src/props.ts
src/components/ContextMenu/src/props.ts
+0
-26
src/components/ContextMenu/src/typing.ts
src/components/ContextMenu/src/typing.ts
+0
-0
src/components/Drawer/src/BasicDrawer.vue
src/components/Drawer/src/BasicDrawer.vue
+37
-45
src/components/Drawer/src/components/DrawerFooter.vue
src/components/Drawer/src/components/DrawerFooter.vue
+7
-9
src/components/Form/src/components/FormItem.vue
src/components/Form/src/components/FormItem.vue
+1
-3
src/components/Icon/src/SvgIcon.vue
src/components/Icon/src/SvgIcon.vue
+9
-11
src/components/Modal/src/BasicModal.vue
src/components/Modal/src/BasicModal.vue
+25
-31
src/components/SimpleMenu/src/components/MenuItem.vue
src/components/SimpleMenu/src/components/MenuItem.vue
+2
-3
src/components/SimpleMenu/src/components/SubMenuItem.vue
src/components/SimpleMenu/src/components/SubMenuItem.vue
+7
-10
src/components/SimpleMenu/src/components/useMenu.ts
src/components/SimpleMenu/src/components/useMenu.ts
+14
-16
src/directives/clickOutside.ts
src/directives/clickOutside.ts
+6
-4
src/hooks/web/useI18n.ts
src/hooks/web/useI18n.ts
+1
-3
src/hooks/web/useMessage.tsx
src/hooks/web/useMessage.tsx
+1
-1
src/layouts/default/header/components/Breadcrumb.vue
src/layouts/default/header/components/Breadcrumb.vue
+2
-2
src/layouts/default/menu/index.vue
src/layouts/default/menu/index.vue
+5
-7
src/layouts/default/setting/SettingDrawer.tsx
src/layouts/default/setting/SettingDrawer.tsx
+2
-6
src/layouts/default/sider/LayoutSider.vue
src/layouts/default/sider/LayoutSider.vue
+11
-13
src/layouts/default/sider/MixSider.vue
src/layouts/default/sider/MixSider.vue
+15
-21
src/layouts/default/tabs/index.vue
src/layouts/default/tabs/index.vue
+1
-2
src/layouts/default/tabs/useMultipleTabs.ts
src/layouts/default/tabs/useMultipleTabs.ts
+3
-3
src/layouts/default/tabs/useTabDropdown.ts
src/layouts/default/tabs/useTabDropdown.ts
+3
-5
src/layouts/iframe/useFrameKeepAlive.ts
src/layouts/iframe/useFrameKeepAlive.ts
+1
-2
src/router/guard/permissionGuard.ts
src/router/guard/permissionGuard.ts
+1
-1
src/utils/cache/memory.ts
src/utils/cache/memory.ts
+1
-1
src/utils/env.ts
src/utils/env.ts
+3
-3
src/utils/is.ts
src/utils/is.ts
+2
-1
src/views/demo/form/DynamicForm.vue
src/views/demo/form/DynamicForm.vue
+8
-10
src/views/demo/system/account/DeptTree.vue
src/views/demo/system/account/DeptTree.vue
+1
-1
src/views/demo/system/role/RoleDrawer.vue
src/views/demo/system/role/RoleDrawer.vue
+1
-1
src/views/sys/exception/Exception.vue
src/views/sys/exception/Exception.vue
+3
-5
src/views/sys/iframe/index.vue
src/views/sys/iframe/index.vue
+5
-7
stylelint.config.js
stylelint.config.js
+1
-1
未找到文件。
src/components/ContextMenu/index.ts
浏览文件 @
00fca0fe
export
{
createContextMenu
,
destroyContextMenu
}
from
'
./src/createContextMenu
'
;
export
*
from
'
./src/typ
es
'
;
export
*
from
'
./src/typ
ing
'
;
src/components/ContextMenu/src/ContextMenu.tsx
已删除
100644 → 0
浏览文件 @
34a80542
import
'
./index.less
'
;
import
type
{
ContextMenuItem
,
ItemContentProps
}
from
'
./types
'
;
import
type
{
FunctionalComponent
,
CSSProperties
}
from
'
vue
'
;
import
{
defineComponent
,
nextTick
,
onMounted
,
computed
,
ref
,
unref
,
onUnmounted
}
from
'
vue
'
;
import
Icon
from
'
/@/components/Icon
'
;
import
{
Menu
,
Divider
}
from
'
ant-design-vue
'
;
import
{
contextMenuProps
}
from
'
./props
'
;
const
prefixCls
=
'
context-menu
'
;
const
ItemContent
:
FunctionalComponent
<
ItemContentProps
>
=
(
props
)
=>
{
const
{
item
}
=
props
;
return
(
<
span
style
=
"display: inline-block; width: 100%; "
class
=
"px-4"
onClick
=
{
props
.
handler
.
bind
(
null
,
item
)
}
>
{
props
.
showIcon
&&
item
.
icon
&&
<
Icon
class
=
"mr-2"
icon
=
{
item
.
icon
}
/>
}
<
span
>
{
item
.
label
}
</
span
>
</
span
>
);
};
export
default
defineComponent
({
name
:
'
ContextMenu
'
,
props
:
contextMenuProps
,
setup
(
props
)
{
const
wrapRef
=
ref
<
ElRef
>
(
null
);
const
showRef
=
ref
(
false
);
const
getStyle
=
computed
(():
CSSProperties
=>
{
const
{
axis
,
items
,
styles
,
width
}
=
props
;
const
{
x
,
y
}
=
axis
||
{
x
:
0
,
y
:
0
};
const
menuHeight
=
(
items
||
[]).
length
*
40
;
const
menuWidth
=
width
;
const
body
=
document
.
body
;
const
left
=
body
.
clientWidth
<
x
+
menuWidth
?
x
-
menuWidth
:
x
;
const
top
=
body
.
clientHeight
<
y
+
menuHeight
?
y
-
menuHeight
:
y
;
return
{
...
styles
,
width
:
`
${
width
}
px`
,
left
:
`
${
left
+
1
}
px`
,
top
:
`
${
top
+
1
}
px`
,
};
});
onMounted
(()
=>
{
nextTick
(()
=>
(
showRef
.
value
=
true
));
});
onUnmounted
(()
=>
{
const
el
=
unref
(
wrapRef
);
el
&&
document
.
body
.
removeChild
(
el
);
});
function
handleAction
(
item
:
ContextMenuItem
,
e
:
MouseEvent
)
{
const
{
handler
,
disabled
}
=
item
;
if
(
disabled
)
return
;
showRef
.
value
=
false
;
e
?.
stopPropagation
();
e
?.
preventDefault
();
handler
?.();
}
function
renderMenuItem
(
items
:
ContextMenuItem
[])
{
return
items
.
map
((
item
)
=>
{
const
{
disabled
,
label
,
children
,
divider
=
false
}
=
item
;
const
DividerComp
=
divider
?
<
Divider
key
=
{
`d-
${
label
}
`
}
/>
:
null
;
if
(
!
children
||
children
.
length
===
0
)
{
return
(
<>
<
Menu
.
Item
disabled
=
{
disabled
}
class
=
{
`
${
prefixCls
}
__item`
}
key
=
{
label
}
>
<
ItemContent
showIcon
=
{
props
.
showIcon
}
item
=
{
item
}
handler
=
{
handleAction
}
/>
</
Menu
.
Item
>
{
DividerComp
}
</>
);
}
if
(
!
unref
(
showRef
))
return
null
;
return
(
<
Menu
.
SubMenu
key
=
{
label
}
disabled
=
{
disabled
}
popupClassName
=
{
`
${
prefixCls
}
__popup`
}
>
{
{
title
:
()
=>
(
<
ItemContent
showIcon
=
{
props
.
showIcon
}
item
=
{
item
}
handler
=
{
handleAction
}
/>
),
default
:
()
=>
renderMenuItem
(
children
),
}
}
</
Menu
.
SubMenu
>
);
});
}
return
()
=>
{
const
{
items
}
=
props
;
if
(
!
unref
(
showRef
))
return
null
;
return
(
<
Menu
inlineIndent
=
{
12
}
mode
=
"vertical"
class
=
{
prefixCls
}
ref
=
{
wrapRef
}
style
=
{
unref
(
getStyle
)
}
>
{
renderMenuItem
(
items
)
}
</
Menu
>
);
};
},
});
src/components/ContextMenu/src/ContextMenu.vue
0 → 100644
浏览文件 @
00fca0fe
<
script
lang=
"tsx"
>
import
type
{
ContextMenuItem
,
ItemContentProps
,
Axis
}
from
'
./typing
'
;
import
type
{
FunctionalComponent
,
CSSProperties
}
from
'
vue
'
;
import
{
defineComponent
,
nextTick
,
onMounted
,
computed
,
ref
,
unref
,
onUnmounted
}
from
'
vue
'
;
import
Icon
from
'
/@/components/Icon
'
;
import
{
Menu
,
Divider
}
from
'
ant-design-vue
'
;
const
prefixCls
=
'
context-menu
'
;
const
props
=
{
width
:
{
type
:
Number
,
default
:
156
},
customEvent
:
{
type
:
Object
as
PropType
<
Event
>
,
default
:
null
},
styles
:
{
type
:
Object
as
PropType
<
CSSProperties
>
},
showIcon
:
{
type
:
Boolean
,
default
:
true
},
axis
:
{
// The position of the right mouse button click
type
:
Object
as
PropType
<
Axis
>
,
default
()
{
return
{
x
:
0
,
y
:
0
};
},
},
items
:
{
// The most important list, if not, will not be displayed
type
:
Array
as
PropType
<
ContextMenuItem
[]
>
,
default
()
{
return
[];
},
},
};
const
ItemContent
:
FunctionalComponent
<
ItemContentProps
>
=
(
props
)
=>
{
const
{
item
}
=
props
;
return
(
<
span
style
=
"
display: inline-block; width: 100%;
"
class
=
"
px-4
"
onClick
=
{
props
.
handler
.
bind
(
null
,
item
)}
>
{
props
.
showIcon
&&
item
.
icon
&&
<
Icon
class
=
"
mr-2
"
icon
=
{
item
.
icon
}
/>
}
<
span
>
{
item
.
label
}
<
/span
>
<
/span
>
);
};
export
default
defineComponent
({
name
:
'
ContextMenu
'
,
props
,
setup
(
props
)
{
const
wrapRef
=
ref
<
ElRef
>
(
null
);
const
showRef
=
ref
(
false
);
const
getStyle
=
computed
(():
CSSProperties
=>
{
const
{
axis
,
items
,
styles
,
width
}
=
props
;
const
{
x
,
y
}
=
axis
||
{
x
:
0
,
y
:
0
};
const
menuHeight
=
(
items
||
[]).
length
*
40
;
const
menuWidth
=
width
;
const
body
=
document
.
body
;
const
left
=
body
.
clientWidth
<
x
+
menuWidth
?
x
-
menuWidth
:
x
;
const
top
=
body
.
clientHeight
<
y
+
menuHeight
?
y
-
menuHeight
:
y
;
return
{
...
styles
,
width
:
`
${
width
}
px`
,
left
:
`
${
left
+
1
}
px`
,
top
:
`
${
top
+
1
}
px`
,
};
});
onMounted
(()
=>
{
nextTick
(()
=>
(
showRef
.
value
=
true
));
});
onUnmounted
(()
=>
{
unref
(
wrapRef
)
&&
document
.
body
.
removeChild
(
el
);
});
function
handleAction
(
item
:
ContextMenuItem
,
e
:
MouseEvent
)
{
const
{
handler
,
disabled
}
=
item
;
if
(
disabled
)
{
return
;
}
showRef
.
value
=
false
;
e
?.
stopPropagation
();
e
?.
preventDefault
();
handler
?.();
}
function
renderMenuItem
(
items
:
ContextMenuItem
[])
{
return
items
.
map
((
item
)
=>
{
const
{
disabled
,
label
,
children
,
divider
=
false
}
=
item
;
const
contentProps
=
{
item
,
handler
:
handleAction
,
showIcon
:
props
.
showIcon
,
};
if
(
!
children
||
children
.
length
===
0
)
{
return
(
<>
<
Menu
.
Item
disabled
=
{
disabled
}
class
=
{
`
${
prefixCls
}
__item`
}
key
=
{
label
}
>
<
ItemContent
{...
contentProps
}
/
>
<
/Menu.Item
>
{
divider
?
<
Divider
key
=
{
`d-
${
label
}
`
}
/> : null
}
<
/
>
);
}
if
(
!
unref
(
showRef
))
return
null
;
return
(
<
Menu
.
SubMenu
key
=
{
label
}
disabled
=
{
disabled
}
popupClassName
=
{
`
${
prefixCls
}
__popup`
}
>
{{
title
:
()
=>
<
ItemContent
{...
contentProps
}
/>
,
default
:
()
=>
renderMenuItem
(
children
),
}}
<
/Menu.SubMenu
>
);
});
}
return
()
=>
{
const
{
items
}
=
props
;
if
(
!
unref
(
showRef
))
return
null
;
return
(
<
Menu
inlineIndent
=
{
12
}
mode
=
"
vertical
"
class
=
{
prefixCls
}
ref
=
{
wrapRef
}
style
=
{
unref
(
getStyle
)}
>
{
renderMenuItem
(
items
)}
<
/Menu
>
);
};
},
});
</
script
>
<
style
lang=
"less"
>
@default-height: 42px !important;
@small-height: 36px !important;
@large-height: 36px !important;
.item-style() {
li {
display: inline-block;
width: 100%;
height: @default-height;
margin: 0 !important;
line-height: @default-height;
span {
line-height: @default-height;
}
> div {
margin: 0 !important;
}
&:not(.ant-menu-item-disabled):hover {
color: @text-color-base;
background-color: @item-hover-bg;
}
}
}
.context-menu {
position: fixed;
top: 0;
left: 0;
z-index: 200;
display: block;
width: 156px;
margin: 0;
list-style: none;
background-color: @component-background;
border: 1px solid rgba(0, 0, 0, 0.08);
border-radius: 0.25rem;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.1),
0 1px 5px 0 rgba(0, 0, 0, 0.06);
background-clip: padding-box;
user-select: none;
.item-style();
.ant-divider {
margin: 0 0;
}
&__popup {
.ant-divider {
margin: 0 0;
}
.item-style();
}
.ant-menu-submenu-title,
.ant-menu-item {
padding: 0 !important;
}
}
</
style
>
src/components/ContextMenu/src/createContextMenu.ts
浏览文件 @
00fca0fe
import
contextMenuVue
from
'
./ContextMenu
'
;
import
contextMenuVue
from
'
./ContextMenu
.vue
'
;
import
{
isClient
}
from
'
/@/utils/is
'
;
import
{
CreateContextOptions
,
ContextMenuProps
}
from
'
./typ
es
'
;
import
{
CreateContextOptions
,
ContextMenuProps
}
from
'
./typ
ing
'
;
import
{
createVNode
,
render
}
from
'
vue
'
;
const
menuManager
:
{
...
...
@@ -16,7 +16,9 @@ export const createContextMenu = function (options: CreateContextOptions) {
event
&&
event
?.
preventDefault
();
if
(
!
isClient
)
return
;
if
(
!
isClient
)
{
return
;
}
return
new
Promise
((
resolve
)
=>
{
const
body
=
document
.
body
;
...
...
@@ -54,9 +56,9 @@ export const createContextMenu = function (options: CreateContextOptions) {
body
.
removeEventListener
(
'
scroll
'
,
handleClick
);
};
menuManager
.
resolve
=
function
(
...
arg
:
any
)
{
menuManager
.
resolve
=
function
(
arg
)
{
remove
();
resolve
(
arg
[
0
]
);
resolve
(
arg
);
};
remove
();
body
.
appendChild
(
container
);
...
...
src/components/ContextMenu/src/index.less
已删除
100644 → 0
浏览文件 @
34a80542
@default-height: 42px !important;
@small-height: 36px !important;
@large-height: 36px !important;
.item-style() {
li {
display: inline-block;
width: 100%;
height: @default-height;
margin: 0 !important;
line-height: @default-height;
span {
line-height: @default-height;
}
> div {
margin: 0 !important;
}
&:not(.ant-menu-item-disabled):hover {
color: @text-color-base;
background-color: @item-hover-bg;
}
}
}
.context-menu {
position: fixed;
top: 0;
left: 0;
z-index: 200;
display: block;
width: 156px;
margin: 0;
list-style: none;
background-color: @component-background;
border: 1px solid rgba(0, 0, 0, 0.08);
border-radius: 0.25rem;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.1),
0 1px 5px 0 rgba(0, 0, 0, 0.06);
background-clip: padding-box;
user-select: none;
.item-style();
.ant-divider {
margin: 0 0;
}
&__popup {
.ant-divider {
margin: 0 0;
}
.item-style();
}
.ant-menu-submenu-title,
.ant-menu-item {
padding: 0 !important;
}
}
src/components/ContextMenu/src/props.ts
已删除
100644 → 0
浏览文件 @
34a80542
import
type
{
PropType
}
from
'
vue
'
;
import
type
{
Axis
,
ContextMenuItem
}
from
'
./types
'
;
import
{
propTypes
}
from
'
/@/utils/propTypes
'
;
export
const
contextMenuProps
=
{
width
:
propTypes
.
number
.
def
(
156
),
customEvent
:
{
type
:
Object
as
PropType
<
Event
>
,
default
:
null
,
},
styles
:
propTypes
.
style
,
showIcon
:
propTypes
.
bool
.
def
(
true
),
axis
:
{
// The position of the right mouse button click
type
:
Object
as
PropType
<
Axis
>
,
default
()
{
return
{
x
:
0
,
y
:
0
};
},
},
items
:
{
// The most important list, if not, will not be displayed
type
:
Array
as
PropType
<
ContextMenuItem
[]
>
,
default
()
{
return
[];
},
},
};
src/components/ContextMenu/src/typ
es
.ts
→
src/components/ContextMenu/src/typ
ing
.ts
浏览文件 @
00fca0fe
文件已移动
src/components/Drawer/src/BasicDrawer.vue
浏览文件 @
00fca0fe
...
...
@@ -81,46 +81,40 @@
instance
&&
emit
(
'
register
'
,
drawerInstance
,
instance
.
uid
);
const
getMergeProps
=
computed
(
():
DrawerProps
=>
{
return
deepMerge
(
toRaw
(
props
),
unref
(
propsRef
));
}
);
const
getMergeProps
=
computed
(():
DrawerProps
=>
{
return
deepMerge
(
toRaw
(
props
),
unref
(
propsRef
));
});
const
getProps
=
computed
(
():
DrawerProps
=>
{
const
opt
=
{
placement
:
'
right
'
,
...
unref
(
attrs
),
...
unref
(
getMergeProps
),
visible
:
unref
(
visibleRef
),
};
opt
.
title
=
undefined
;
const
{
isDetail
,
width
,
wrapClassName
,
getContainer
}
=
opt
;
if
(
isDetail
)
{
if
(
!
width
)
{
opt
.
width
=
'
100%
'
;
}
const
detailCls
=
`
${
prefixCls
}
__detail`
;
opt
.
wrapClassName
=
wrapClassName
?
`
${
wrapClassName
}
${
detailCls
}
`
:
detailCls
;
if
(
!
getContainer
)
{
// TODO type error?
opt
.
getContainer
=
`.
${
prefixVar
}
-layout-content`
as
any
;
}
const
getProps
=
computed
(():
DrawerProps
=>
{
const
opt
=
{
placement
:
'
right
'
,
...
unref
(
attrs
),
...
unref
(
getMergeProps
),
visible
:
unref
(
visibleRef
),
};
opt
.
title
=
undefined
;
const
{
isDetail
,
width
,
wrapClassName
,
getContainer
}
=
opt
;
if
(
isDetail
)
{
if
(
!
width
)
{
opt
.
width
=
'
100%
'
;
}
return
opt
as
DrawerProps
;
}
);
const
detailCls
=
`
${
prefixCls
}
__detail`
;
opt
.
wrapClassName
=
wrapClassName
?
`
${
wrapClassName
}
${
detailCls
}
`
:
detailCls
;
const
getBindValues
=
computed
(
():
DrawerProps
=>
{
return
{
...
attrs
,
...
unref
(
getProps
),
};
if
(
!
getContainer
)
{
// TODO type error?
opt
.
getContainer
=
`.
${
prefixVar
}
-layout-content`
as
any
;
}
}
);
return
opt
as
DrawerProps
;
});
const
getBindValues
=
computed
(():
DrawerProps
=>
{
return
{
...
attrs
,
...
unref
(
getProps
),
};
});
// Custom implementation of the bottom button,
const
getFooterHeight
=
computed
(()
=>
{
...
...
@@ -133,15 +127,13 @@
return
`0px`
;
});
const
getScrollContentStyle
=
computed
(
():
CSSProperties
=>
{
const
footerHeight
=
unref
(
getFooterHeight
);
return
{
position
:
'
relative
'
,
height
:
`calc(100% -
${
footerHeight
}
)`
,
};
}
);
const
getScrollContentStyle
=
computed
(():
CSSProperties
=>
{
const
footerHeight
=
unref
(
getFooterHeight
);
return
{
position
:
'
relative
'
,
height
:
`calc(100% -
${
footerHeight
}
)`
,
};
});
const
getLoading
=
computed
(()
=>
{
return
!!
unref
(
getProps
)?.
loading
;
...
...
src/components/Drawer/src/components/DrawerFooter.vue
浏览文件 @
00fca0fe
...
...
@@ -43,15 +43,13 @@
setup
(
props
,
{
emit
})
{
const
{
prefixCls
}
=
useDesign
(
'
basic-drawer-footer
'
);
const
getStyle
=
computed
(
():
CSSProperties
=>
{
const
heightStr
=
`
${
props
.
height
}
`
;
return
{
height
:
heightStr
,
lineHeight
:
heightStr
,
};
}
);
const
getStyle
=
computed
(():
CSSProperties
=>
{
const
heightStr
=
`
${
props
.
height
}
`
;
return
{
height
:
heightStr
,
lineHeight
:
heightStr
,
};
});
function
handleOk
()
{
emit
(
'
ok
'
);
...
...
src/components/Form/src/components/FormItem.vue
浏览文件 @
00fca0fe
...
...
@@ -174,9 +174,7 @@
return
Promise
.
resolve
();
}
const
getRequired
=
isFunction
(
required
)
?
required
(
unref
(
getValues
))
:
required
;
const
getRequired
=
isFunction
(
required
)
?
required
(
unref
(
getValues
))
:
required
;
if
((
!
rules
||
rules
.
length
===
0
)
&&
getRequired
)
{
rules
=
[{
required
:
getRequired
,
validator
}];
...
...
src/components/Icon/src/SvgIcon.vue
浏览文件 @
00fca0fe
...
...
@@ -36,17 +36,15 @@
const
{
prefixCls
}
=
useDesign
(
'
svg-icon
'
);
const
symbolId
=
computed
(()
=>
`#
${
props
.
prefix
}
-
${
props
.
name
}
`
);
const
getStyle
=
computed
(
():
CSSProperties
=>
{
const
{
size
}
=
props
;
let
s
=
`
${
size
}
`
;
s
=
`
${
s
.
replace
(
'
px
'
,
''
)}
px`
;
return
{
width
:
s
,
height
:
s
,
};
}
);
const
getStyle
=
computed
(():
CSSProperties
=>
{
const
{
size
}
=
props
;
let
s
=
`
${
size
}
`
;
s
=
`
${
s
.
replace
(
'
px
'
,
''
)}
px`
;
return
{
width
:
s
,
height
:
s
,
};
});
return
{
symbolId
,
prefixCls
,
getStyle
};
},
});
...
...
src/components/Modal/src/BasicModal.vue
浏览文件 @
00fca0fe
...
...
@@ -107,14 +107,12 @@
}
// Custom title component: get title
const
getMergeProps
=
computed
(
():
ModalProps
=>
{
return
{
...
props
,
...(
unref
(
propsRef
)
as
any
),
};
}
);
const
getMergeProps
=
computed
(():
ModalProps
=>
{
return
{
...
props
,
...(
unref
(
propsRef
)
as
any
),
};
});
const
{
handleFullScreen
,
getWrapClassName
,
fullScreenRef
}
=
useFullScreen
({
modalWrapperRef
,
...
...
@@ -123,31 +121,27 @@
});
// modal component does not need title and origin buttons
const
getProps
=
computed
(
():
ModalProps
=>
{
const
opt
=
{
...
unref
(
getMergeProps
),
visible
:
unref
(
visibleRef
),
okButtonProps
:
undefined
,
cancelButtonProps
:
undefined
,
title
:
undefined
,
};
return
{
...
opt
,
wrapClassName
:
unref
(
getWrapClassName
),
};
}
);
const
getProps
=
computed
(():
ModalProps
=>
{
const
opt
=
{
...
unref
(
getMergeProps
),
visible
:
unref
(
visibleRef
),
okButtonProps
:
undefined
,
cancelButtonProps
:
undefined
,
title
:
undefined
,
};
return
{
...
opt
,
wrapClassName
:
unref
(
getWrapClassName
),
};
});
const
getBindValue
=
computed
(
():
Recordable
=>
{
const
attr
=
{
...
attrs
,
...
unref
(
getProps
)
};
if
(
unref
(
fullScreenRef
))
{
return
omit
(
attr
,
'
height
'
);
}
return
attr
;
const
getBindValue
=
computed
(():
Recordable
=>
{
const
attr
=
{
...
attrs
,
...
unref
(
getProps
)
};
if
(
unref
(
fullScreenRef
))
{
return
omit
(
attr
,
'
height
'
);
}
);
return
attr
;
});
const
getWrapperHeight
=
computed
(()
=>
{
if
(
unref
(
fullScreenRef
))
return
undefined
;
...
...
src/components/SimpleMenu/src/components/MenuItem.vue
浏览文件 @
00fca0fe
...
...
@@ -39,9 +39,8 @@
const
active
=
ref
(
false
);
const
{
getItemStyle
,
getParentList
,
getParentMenu
,
getParentRootMenu
}
=
useMenuItem
(
instance
);
const
{
getItemStyle
,
getParentList
,
getParentMenu
,
getParentRootMenu
}
=
useMenuItem
(
instance
);
const
{
prefixCls
}
=
useDesign
(
'
menu
'
);
...
...
src/components/SimpleMenu/src/components/SubMenuItem.vue
浏览文件 @
00fca0fe
...
...
@@ -109,9 +109,8 @@
isChild
:
false
,
});
const
{
getParentSubMenu
,
getItemStyle
,
getParentMenu
,
getParentList
}
=
useMenuItem
(
instance
);
const
{
getParentSubMenu
,
getItemStyle
,
getParentMenu
,
getParentList
}
=
useMenuItem
(
instance
);
const
{
prefixCls
}
=
useDesign
(
'
menu
'
);
...
...
@@ -148,13 +147,11 @@
const
getCollapse
=
computed
(()
=>
rootProps
.
collapse
);
const
getTheme
=
computed
(()
=>
rootProps
.
theme
);
const
getOverlayStyle
=
computed
(
():
CSSProperties
=>
{
return
{
minWidth
:
'
200px
'
,
};
}
);
const
getOverlayStyle
=
computed
(():
CSSProperties
=>
{
return
{
minWidth
:
'
200px
'
,
};
});
const
getIsOpend
=
computed
(()
=>
{
const
name
=
props
.
name
;
...
...
src/components/SimpleMenu/src/components/useMenu.ts
浏览文件 @
00fca0fe
...
...
@@ -14,26 +14,24 @@ export function useMenuItem(instance: ComponentInternalInstance | null) {
return
findParentMenu
([
'
SubMenu
'
]);
});
const
getItemStyle
=
computed
(
():
CSSProperties
=>
{
let
parent
=
instance
?.
parent
;
if
(
!
parent
)
return
{};
const
indentSize
=
(
unref
(
getParentRootMenu
)?.
props
.
indentSize
as
number
)
??
20
;
let
padding
=
indentSize
;
const
getItemStyle
=
computed
(():
CSSProperties
=>
{
let
parent
=
instance
?.
parent
;
if
(
!
parent
)
return
{};
const
indentSize
=
(
unref
(
getParentRootMenu
)?.
props
.
indentSize
as
number
)
??
20
;
let
padding
=
indentSize
;
if
(
unref
(
getParentRootMenu
)?.
props
.
collapse
)
{
padding
=
indentSize
;
}
else
{
while
(
parent
&&
parent
.
type
.
name
!==
'
Menu
'
)
{
if
(
parent
.
type
.
name
===
'
SubMenu
'
)
{
padding
+=
indentSize
;
}
parent
=
parent
.
parent
;
if
(
unref
(
getParentRootMenu
)?.
props
.
collapse
)
{
padding
=
indentSize
;
}
else
{
while
(
parent
&&
parent
.
type
.
name
!==
'
Menu
'
)
{
if
(
parent
.
type
.
name
===
'
SubMenu
'
)
{
padding
+=
indentSize
;
}
parent
=
parent
.
parent
;
}
return
{
paddingLeft
:
padding
+
'
px
'
};
}
);
return
{
paddingLeft
:
padding
+
'
px
'
};
});
function
findParentMenu
(
name
:
string
[])
{
let
parent
=
instance
?.
parent
;
...
...
src/directives/clickOutside.ts
浏览文件 @
00fca0fe
...
...
@@ -31,12 +31,14 @@ function createDocumentHandler(el: HTMLElement, binding: DirectiveBinding): Docu
excludes
=
binding
.
arg
;
}
else
{
// due to current implementation on binding type is wrong the type casting is necessary here
excludes
.
push
(
(
binding
.
arg
as
unknown
)
as
HTMLElement
);
excludes
.
push
(
binding
.
arg
as
unknown
as
HTMLElement
);
}
return
function
(
mouseup
,
mousedown
)
{
const
popperRef
=
(
binding
.
instance
as
ComponentPublicInstance
<
{
popperRef
:
Nullable
<
HTMLElement
>
;
}
>
).
popperRef
;
const
popperRef
=
(
binding
.
instance
as
ComponentPublicInstance
<
{
popperRef
:
Nullable
<
HTMLElement
>
;
}
>
).
popperRef
;
const
mouseUpTarget
=
mouseup
.
target
as
Node
;
const
mouseDownTarget
=
mousedown
.
target
as
Node
;
const
isBound
=
!
binding
||
!
binding
.
instance
;
...
...
src/hooks/web/useI18n.ts
浏览文件 @
00fca0fe
...
...
@@ -21,9 +21,7 @@ function getKey(namespace: string | undefined, key: string) {
return
`
${
namespace
}
.
${
key
}
`
;
}
export
function
useI18n
(
namespace
?:
string
):
{
export
function
useI18n
(
namespace
?:
string
):
{
t
:
I18nGlobalTranslation
;
}
{
const
normalFn
=
{
...
...
src/hooks/web/useMessage.tsx
浏览文件 @
00fca0fe
...
...
@@ -60,7 +60,7 @@ function createConfirm(options: ModalOptionsEx): ConfirmOptions {
icon
:
getIcon
(
iconType
),
...
options
,
};
return
(
Modal
.
confirm
(
opt
)
as
unknown
)
as
ConfirmOptions
;
return
Modal
.
confirm
(
opt
)
as
unknown
as
ConfirmOptions
;
}
const
getBaseOptions
=
()
=>
{
...
...
src/layouts/default/header/components/Breadcrumb.vue
浏览文件 @
00fca0fe
...
...
@@ -71,10 +71,10 @@
const
breadcrumbList
=
filterItem
(
matched
);
if
(
currentRoute
.
value
.
meta
?.
currentActiveMenu
)
{
breadcrumbList
.
push
(
(
{
breadcrumbList
.
push
({
...
currentRoute
.
value
,
name
:
currentRoute
.
value
.
meta
?.
title
||
currentRoute
.
value
.
name
,
}
as
unknown
)
as
RouteLocationMatched
);
}
as
unknown
as
RouteLocationMatched
);
}
routes
.
value
=
breadcrumbList
;
});
...
...
src/layouts/default/menu/index.vue
浏览文件 @
00fca0fe
...
...
@@ -76,13 +76,11 @@
);
});
const
getWrapperStyle
=
computed
(
():
CSSProperties
=>
{
return
{
height
:
`calc(100% -
${
unref
(
getIsShowLogo
)
?
'
48px
'
:
'
0px
'
}
)`
,
};
}
);
const
getWrapperStyle
=
computed
(():
CSSProperties
=>
{
return
{
height
:
`calc(100% -
${
unref
(
getIsShowLogo
)
?
'
48px
'
:
'
0px
'
}
)`
,
};
});
const
getLogoClass
=
computed
(()
=>
{
return
[
...
...
src/layouts/default/setting/SettingDrawer.tsx
浏览文件 @
00fca0fe
...
...
@@ -58,12 +58,8 @@ export default defineComponent({
getThemeColor
,
}
=
useRootSetting
();
const
{
getOpenPageLoading
,
getBasicTransition
,
getEnableTransition
,
getOpenNProgress
,
}
=
useTransitionSetting
();
const
{
getOpenPageLoading
,
getBasicTransition
,
getEnableTransition
,
getOpenNProgress
}
=
useTransitionSetting
();
const
{
getIsHorizontal
,
...
...
src/layouts/default/sider/LayoutSider.vue
浏览文件 @
00fca0fe
...
...
@@ -89,19 +89,17 @@
];
});
const
getHiddenDomStyle
=
computed
(
():
CSSProperties
=>
{
const
width
=
`
${
unref
(
getRealWidth
)}
px`
;
return
{
width
:
width
,
overflow
:
'
hidden
'
,
flex
:
`0 0
${
width
}
`
,
maxWidth
:
width
,
minWidth
:
width
,
transition
:
'
all 0.2s
'
,
};
}
);
const
getHiddenDomStyle
=
computed
(():
CSSProperties
=>
{
const
width
=
`
${
unref
(
getRealWidth
)}
px`
;
return
{
width
:
width
,
overflow
:
'
hidden
'
,
flex
:
`0 0
${
width
}
`
,
maxWidth
:
width
,
minWidth
:
width
,
transition
:
'
all 0.2s
'
,
};
});
return
{
prefixCls
,
...
...
src/layouts/default/sider/MixSider.vue
浏览文件 @
00fca0fe
...
...
@@ -147,14 +147,12 @@
useDragLine
(
sideRef
,
dragBarRef
,
true
);
const
getMenuStyle
=
computed
(
():
CSSProperties
=>
{
return
{
width
:
unref
(
openMenu
)
?
`
${
unref
(
getMenuWidth
)}
px`
:
0
,
left
:
`
${
unref
(
getMixSideWidth
)}
px`
,
};
}
);
const
getMenuStyle
=
computed
(():
CSSProperties
=>
{
return
{
width
:
unref
(
openMenu
)
?
`
${
unref
(
getMenuWidth
)}
px`
:
0
,
left
:
`
${
unref
(
getMixSideWidth
)}
px`
,
};
});
const
getIsFixed
=
computed
(()
=>
{
/* eslint-disable-next-line */
...
...
@@ -171,20 +169,16 @@
return
unref
(
getCollapsed
)
?
SIDE_BAR_MINI_WIDTH
:
SIDE_BAR_SHOW_TIT_MINI_WIDTH
;
});
const
getDomStyle
=
computed
(
():
CSSProperties
=>
{
const
fixedWidth
=
unref
(
getIsFixed
)
?
unref
(
getRealWidth
)
:
0
;
const
width
=
`
${
unref
(
getMixSideWidth
)
+
fixedWidth
}
px`
;
return
getWrapCommonStyle
(
width
);
}
);
const
getDomStyle
=
computed
(():
CSSProperties
=>
{
const
fixedWidth
=
unref
(
getIsFixed
)
?
unref
(
getRealWidth
)
:
0
;
const
width
=
`
${
unref
(
getMixSideWidth
)
+
fixedWidth
}
px`
;
return
getWrapCommonStyle
(
width
);
});
const
getWrapStyle
=
computed
(
():
CSSProperties
=>
{
const
width
=
`
${
unref
(
getMixSideWidth
)}
px`
;
return
getWrapCommonStyle
(
width
);
}
);
const
getWrapStyle
=
computed
(():
CSSProperties
=>
{
const
width
=
`
${
unref
(
getMixSideWidth
)}
px`
;
return
getWrapCommonStyle
(
width
);
});
const
getMenuEvents
=
computed
(()
=>
{
return
!
unref
(
getMixSideFixed
)
...
...
src/layouts/default/tabs/index.vue
浏览文件 @
00fca0fe
...
...
@@ -106,8 +106,7 @@
.
getRoutes
()
.
find
((
item
)
=>
item
.
path
===
currentActiveMenu
);
findParentRoute
&&
tabStore
.
addTab
((
findParentRoute
as
unknown
)
as
RouteLocationNormalized
);
findParentRoute
&&
tabStore
.
addTab
(
findParentRoute
as
unknown
as
RouteLocationNormalized
);
}
else
{
tabStore
.
addTab
(
unref
(
route
));
}
...
...
src/layouts/default/tabs/useMultipleTabs.ts
浏览文件 @
00fca0fe
...
...
@@ -30,14 +30,14 @@ export function initAffixTabs(): string[] {
* @description: Set fixed tabs
*/
function
addAffixTabs
():
void
{
const
affixTabs
=
filterAffixTabs
(
(
router
.
getRoutes
()
as
unknown
)
as
RouteLocationNormalized
[]);
const
affixTabs
=
filterAffixTabs
(
router
.
getRoutes
()
as
unknown
as
RouteLocationNormalized
[]);
affixList
.
value
=
affixTabs
;
for
(
const
tab
of
affixTabs
)
{
tabStore
.
addTab
(
(
{
tabStore
.
addTab
({
meta
:
tab
.
meta
,
name
:
tab
.
name
,
path
:
tab
.
path
,
}
as
unknown
)
as
RouteLocationNormalized
);
}
as
unknown
as
RouteLocationNormalized
);
}
}
...
...
src/layouts/default/tabs/useTabDropdown.ts
浏览文件 @
00fca0fe
...
...
@@ -20,11 +20,9 @@ export function useTabDropdown(tabContentProps: TabContentProps, getIsTabs: Comp
const
{
currentRoute
}
=
useRouter
();
const
{
refreshPage
,
closeAll
,
close
,
closeLeft
,
closeOther
,
closeRight
}
=
useTabs
();
const
getTargetTab
=
computed
(
():
RouteLocationNormalized
=>
{
return
unref
(
getIsTabs
)
?
tabContentProps
.
tabItem
:
unref
(
currentRoute
);
}
);
const
getTargetTab
=
computed
(():
RouteLocationNormalized
=>
{
return
unref
(
getIsTabs
)
?
tabContentProps
.
tabItem
:
unref
(
currentRoute
);
});
/**
* @description: drop-down list
...
...
src/layouts/iframe/useFrameKeepAlive.ts
浏览文件 @
00fca0fe
...
...
@@ -16,8 +16,7 @@ export function useFrameKeepAlive() {
const
{
getShowMultipleTab
}
=
useMultipleTabSetting
();
const
tabStore
=
useMultipleTabStore
();
const
getFramePages
=
computed
(()
=>
{
const
ret
=
getAllFramePages
((
toRaw
(
router
.
getRoutes
())
as
unknown
)
as
AppRouteRecordRaw
[])
||
[];
const
ret
=
getAllFramePages
(
toRaw
(
router
.
getRoutes
())
as
unknown
as
AppRouteRecordRaw
[])
||
[];
return
ret
;
});
...
...
src/router/guard/permissionGuard.ts
浏览文件 @
00fca0fe
...
...
@@ -60,7 +60,7 @@ export function createPermissionGuard(router: Router) {
const
routes
=
await
permissionStore
.
buildRoutesAction
();
routes
.
forEach
((
route
)
=>
{
router
.
addRoute
(
(
route
as
unknown
)
as
RouteRecordRaw
);
router
.
addRoute
(
route
as
unknown
as
RouteRecordRaw
);
});
const
redirectPath
=
(
from
.
query
.
redirect
||
to
.
path
)
as
string
;
...
...
src/utils/cache/memory.ts
浏览文件 @
00fca0fe
...
...
@@ -80,7 +80,7 @@ export class Memory<T = any, V = any> {
resetCache
(
cache
:
{
[
K
in
keyof
T
]:
Cache
})
{
Object
.
keys
(
cache
).
forEach
((
key
)
=>
{
const
k
=
(
key
as
any
)
as
keyof
T
;
const
k
=
key
as
any
as
keyof
T
;
const
item
=
cache
[
k
];
if
(
item
&&
item
.
time
)
{
const
now
=
new
Date
().
getTime
();
...
...
src/utils/env.ts
浏览文件 @
00fca0fe
...
...
@@ -17,10 +17,10 @@ export function getStorageShortName() {
export
function
getAppEnvConfig
()
{
const
ENV_NAME
=
getConfigFileName
(
import
.
meta
.
env
);
const
ENV
=
(
(
import
.
meta
.
env
.
DEV
const
ENV
=
(
import
.
meta
.
env
.
DEV
?
// Get the global configuration (the configuration will be extracted independently when packaging)
(
(
import
.
meta
.
env
as
unknown
)
as
GlobEnvConfig
)
:
window
[
ENV_NAME
as
any
])
as
unknown
)
as
GlobEnvConfig
;
(
import
.
meta
.
env
as
unknown
as
GlobEnvConfig
)
:
window
[
ENV_NAME
as
any
])
as
unknown
as
GlobEnvConfig
;
const
{
VITE_GLOB_APP_TITLE
,
...
...
src/utils/is.ts
浏览文件 @
00fca0fe
...
...
@@ -89,6 +89,7 @@ export const isServer = typeof window === 'undefined';
export
const
isClient
=
!
isServer
;
export
function
isUrl
(
path
:
string
):
boolean
{
const
reg
=
/
(((
^https
?
:
(?:\/\/)?)(?:[
-;:&=
\+\$
,
\w]
+@
)?[
A-Za-z0-9.-
]
+
(?:
:
\d
+
)?
|
(?:
www.|
[
-;:&=
\+\$
,
\w]
+@
)[
A-Za-z0-9.-
]
+
)((?:\/[\+
~%
\/
.
\w
-_
]
*
)?\??(?:[
-
\+
=&;%@.
\w
_
]
*
)
#
?(?:[\w]
*
))?)
$/
;
const
reg
=
/
(((
^https
?
:
(?:\/\/)?)(?:[
-;:&=
\+\$
,
\w]
+@
)?[
A-Za-z0-9.-
]
+
(?:
:
\d
+
)?
|
(?:
www.|
[
-;:&=
\+\$
,
\w]
+@
)[
A-Za-z0-9.-
]
+
)((?:\/[\+
~%
\/
.
\w
-_
]
*
)?\??(?:[
-
\+
=&;%@.
\w
_
]
*
)
#
?(?:[\w]
*
))?)
$/
;
return
reg
.
test
(
path
);
}
src/views/demo/form/DynamicForm.vue
浏览文件 @
00fca0fe
...
...
@@ -181,16 +181,14 @@
export
default
defineComponent
({
components
:
{
BasicForm
,
CollapseContainer
,
PageWrapper
},
setup
()
{
const
[
register
,
{
setProps
,
updateSchema
,
appendSchemaByField
,
removeSchemaByFiled
},
]
=
useForm
({
labelWidth
:
120
,
schemas
,
actionColOptions
:
{
span
:
24
,
},
});
const
[
register
,
{
setProps
,
updateSchema
,
appendSchemaByField
,
removeSchemaByFiled
}]
=
useForm
({
labelWidth
:
120
,
schemas
,
actionColOptions
:
{
span
:
24
,
},
});
const
[
register1
]
=
useForm
({
labelWidth
:
120
,
schemas
:
schemas1
,
...
...
src/views/demo/system/account/DeptTree.vue
浏览文件 @
00fca0fe
...
...
@@ -26,7 +26,7 @@
const
treeData
=
ref
<
TreeItem
[]
>
([]);
async
function
fetch
()
{
treeData
.
value
=
(
(
await
getDeptList
())
as
unknown
)
as
TreeItem
[];
treeData
.
value
=
(
await
getDeptList
())
as
unknown
as
TreeItem
[];
}
function
handleSelect
(
keys
:
string
,
e
)
{
...
...
src/views/demo/system/role/RoleDrawer.vue
浏览文件 @
00fca0fe
...
...
@@ -54,7 +54,7 @@
...
data
.
record
,
});
}
treeData
.
value
=
(
(
await
getMenuList
())
as
any
)
as
TreeItem
[];
treeData
.
value
=
(
await
getMenuList
())
as
any
as
TreeItem
[];
});
const
getTitle
=
computed
(()
=>
(
!
unref
(
isUpdate
)
?
'
新增角色
'
:
'
编辑角色
'
));
...
...
src/views/sys/exception/Exception.vue
浏览文件 @
00fca0fe
...
...
@@ -64,11 +64,9 @@
return
Number
(
routeStatus
)
||
status
;
});
const
getMapValue
=
computed
(
():
MapValue
=>
{
return
unref
(
statusMapRef
).
get
(
unref
(
getStatus
))
as
MapValue
;
}
);
const
getMapValue
=
computed
(():
MapValue
=>
{
return
unref
(
statusMapRef
).
get
(
unref
(
getStatus
))
as
MapValue
;
});
const
backLoginI18n
=
t
(
'
sys.exception.backLogin
'
);
const
backHomeI18n
=
t
(
'
sys.exception.backHome
'
);
...
...
src/views/sys/iframe/index.vue
浏览文件 @
00fca0fe
...
...
@@ -32,13 +32,11 @@
const
{
prefixCls
}
=
useDesign
(
'
iframe-page
'
);
useWindowSizeFn
(
calcHeight
,
150
,
{
immediate
:
true
});
const
getWrapStyle
=
computed
(
():
CSSProperties
=>
{
return
{
height
:
`
${
unref
(
heightRef
)}
px`
,
};
}
);
const
getWrapStyle
=
computed
(():
CSSProperties
=>
{
return
{
height
:
`
${
unref
(
heightRef
)}
px`
,
};
});
function
calcHeight
()
{
const
iframe
=
unref
(
frameRef
);
...
...
stylelint.config.js
浏览文件 @
00fca0fe
...
...
@@ -28,7 +28,7 @@ module.exports = {
'
font-family-no-missing-generic-family-keyword
'
:
null
,
'
declaration-colon-space-after
'
:
'
always-single-line
'
,
'
declaration-colon-space-before
'
:
'
never
'
,
'
declaration-block-trailing-semicolon
'
:
'
always
'
,
//
'declaration-block-trailing-semicolon': 'always',
'
rule-empty-line-before
'
:
[
'
always
'
,
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录