Commit 00fca0fe6c912141ba8b06576b6c53c5b4c3cd9e

Authored by Vben
1 parent 34a80542

chore: prettier code

Showing 36 changed files with 381 additions and 432 deletions
src/components/ContextMenu/index.ts
1 1 export { createContextMenu, destroyContextMenu } from './src/createContextMenu';
2 2  
3   -export * from './src/types';
  3 +export * from './src/typing';
... ...
src/components/ContextMenu/src/ContextMenu.tsx renamed to src/components/ContextMenu/src/ContextMenu.vue
1   -import './index.less';
2   -
3   -import type { ContextMenuItem, ItemContentProps } from './types';
4   -import type { FunctionalComponent, CSSProperties } from 'vue';
5   -
6   -import { defineComponent, nextTick, onMounted, computed, ref, unref, onUnmounted } from 'vue';
7   -
8   -import Icon from '/@/components/Icon';
9   -import { Menu, Divider } from 'ant-design-vue';
10   -
11   -import { contextMenuProps } from './props';
12   -
13   -const prefixCls = 'context-menu';
14   -
15   -const ItemContent: FunctionalComponent<ItemContentProps> = (props) => {
16   - const { item } = props;
17   - return (
18   - <span
19   - style="display: inline-block; width: 100%; "
20   - class="px-4"
21   - onClick={props.handler.bind(null, item)}
22   - >
23   - {props.showIcon && item.icon && <Icon class="mr-2" icon={item.icon} />}
24   - <span>{item.label}</span>
25   - </span>
26   - );
27   -};
28   -
29   -export default defineComponent({
30   - name: 'ContextMenu',
31   - props: contextMenuProps,
32   - setup(props) {
33   - const wrapRef = ref<ElRef>(null);
34   - const showRef = ref(false);
35   -
36   - const getStyle = computed((): CSSProperties => {
37   - const { axis, items, styles, width } = props;
38   - const { x, y } = axis || { x: 0, y: 0 };
39   - const menuHeight = (items || []).length * 40;
40   - const menuWidth = width;
41   - const body = document.body;
42   -
43   - const left = body.clientWidth < x + menuWidth ? x - menuWidth : x;
44   - const top = body.clientHeight < y + menuHeight ? y - menuHeight : y;
45   - return {
46   - ...styles,
47   - width: `${width}px`,
48   - left: `${left + 1}px`,
49   - top: `${top + 1}px`,
50   - };
51   - });
52   -
53   - onMounted(() => {
54   - nextTick(() => (showRef.value = true));
55   - });
56   -
57   - onUnmounted(() => {
58   - const el = unref(wrapRef);
59   - el && document.body.removeChild(el);
60   - });
  1 +<script lang="tsx">
  2 + import type { ContextMenuItem, ItemContentProps, Axis } from './typing';
  3 + import type { FunctionalComponent, CSSProperties } from 'vue';
  4 + import { defineComponent, nextTick, onMounted, computed, ref, unref, onUnmounted } from 'vue';
  5 + import Icon from '/@/components/Icon';
  6 + import { Menu, Divider } from 'ant-design-vue';
  7 +
  8 + const prefixCls = 'context-menu';
  9 +
  10 + const props = {
  11 + width: { type: Number, default: 156 },
  12 + customEvent: { type: Object as PropType<Event>, default: null },
  13 + styles: { type: Object as PropType<CSSProperties> },
  14 + showIcon: { type: Boolean, default: true },
  15 + axis: {
  16 + // The position of the right mouse button click
  17 + type: Object as PropType<Axis>,
  18 + default() {
  19 + return { x: 0, y: 0 };
  20 + },
  21 + },
  22 + items: {
  23 + // The most important list, if not, will not be displayed
  24 + type: Array as PropType<ContextMenuItem[]>,
  25 + default() {
  26 + return [];
  27 + },
  28 + },
  29 + };
  30 +
  31 + const ItemContent: FunctionalComponent<ItemContentProps> = (props) => {
  32 + const { item } = props;
  33 + return (
  34 + <span
  35 + style="display: inline-block; width: 100%; "
  36 + class="px-4"
  37 + onClick={props.handler.bind(null, item)}
  38 + >
  39 + {props.showIcon && item.icon && <Icon class="mr-2" icon={item.icon} />}
  40 + <span>{item.label}</span>
  41 + </span>
  42 + );
  43 + };
  44 +
  45 + export default defineComponent({
  46 + name: 'ContextMenu',
  47 + props,
  48 + setup(props) {
  49 + const wrapRef = ref<ElRef>(null);
  50 + const showRef = ref(false);
  51 +
  52 + const getStyle = computed((): CSSProperties => {
  53 + const { axis, items, styles, width } = props;
  54 + const { x, y } = axis || { x: 0, y: 0 };
  55 + const menuHeight = (items || []).length * 40;
  56 + const menuWidth = width;
  57 + const body = document.body;
  58 +
  59 + const left = body.clientWidth < x + menuWidth ? x - menuWidth : x;
  60 + const top = body.clientHeight < y + menuHeight ? y - menuHeight : y;
  61 + return {
  62 + ...styles,
  63 + width: `${width}px`,
  64 + left: `${left + 1}px`,
  65 + top: `${top + 1}px`,
  66 + };
  67 + });
61 68  
62   - function handleAction(item: ContextMenuItem, e: MouseEvent) {
63   - const { handler, disabled } = item;
64   - if (disabled) return;
65   - showRef.value = false;
  69 + onMounted(() => {
  70 + nextTick(() => (showRef.value = true));
  71 + });
66 72  
67   - e?.stopPropagation();
68   - e?.preventDefault();
69   - handler?.();
70   - }
  73 + onUnmounted(() => {
  74 + unref(wrapRef) && document.body.removeChild(el);
  75 + });
71 76  
72   - function renderMenuItem(items: ContextMenuItem[]) {
73   - return items.map((item) => {
74   - const { disabled, label, children, divider = false } = item;
  77 + function handleAction(item: ContextMenuItem, e: MouseEvent) {
  78 + const { handler, disabled } = item;
  79 + if (disabled) {
  80 + return;
  81 + }
  82 + showRef.value = false;
  83 + e?.stopPropagation();
  84 + e?.preventDefault();
  85 + handler?.();
  86 + }
  87 +
  88 + function renderMenuItem(items: ContextMenuItem[]) {
  89 + return items.map((item) => {
  90 + const { disabled, label, children, divider = false } = item;
  91 +
  92 + const contentProps = {
  93 + item,
  94 + handler: handleAction,
  95 + showIcon: props.showIcon,
  96 + };
  97 +
  98 + if (!children || children.length === 0) {
  99 + return (
  100 + <>
  101 + <Menu.Item disabled={disabled} class={`${prefixCls}__item`} key={label}>
  102 + <ItemContent {...contentProps} />
  103 + </Menu.Item>
  104 + {divider ? <Divider key={`d-${label}`} /> : null}
  105 + </>
  106 + );
  107 + }
  108 + if (!unref(showRef)) return null;
75 109  
76   - const DividerComp = divider ? <Divider key={`d-${label}`} /> : null;
77   - if (!children || children.length === 0) {
78 110 return (
79   - <>
80   - <Menu.Item disabled={disabled} class={`${prefixCls}__item`} key={label}>
81   - <ItemContent showIcon={props.showIcon} item={item} handler={handleAction} />
82   - </Menu.Item>
83   - {DividerComp}
84   - </>
  111 + <Menu.SubMenu key={label} disabled={disabled} popupClassName={`${prefixCls}__popup`}>
  112 + {{
  113 + title: () => <ItemContent {...contentProps} />,
  114 + default: () => renderMenuItem(children),
  115 + }}
  116 + </Menu.SubMenu>
85 117 );
86   - }
  118 + });
  119 + }
  120 + return () => {
  121 + const { items } = props;
87 122 if (!unref(showRef)) return null;
88   -
89 123 return (
90   - <Menu.SubMenu key={label} disabled={disabled} popupClassName={`${prefixCls}__popup`}>
91   - {{
92   - title: () => (
93   - <ItemContent showIcon={props.showIcon} item={item} handler={handleAction} />
94   - ),
95   - default: () => renderMenuItem(children),
96   - }}
97   - </Menu.SubMenu>
  124 + <Menu
  125 + inlineIndent={12}
  126 + mode="vertical"
  127 + class={prefixCls}
  128 + ref={wrapRef}
  129 + style={unref(getStyle)}
  130 + >
  131 + {renderMenuItem(items)}
  132 + </Menu>
98 133 );
99   - });
  134 + };
  135 + },
  136 + });
  137 +</script>
  138 +<style lang="less">
  139 + @default-height: 42px !important;
  140 +
  141 + @small-height: 36px !important;
  142 +
  143 + @large-height: 36px !important;
  144 +
  145 + .item-style() {
  146 + li {
  147 + display: inline-block;
  148 + width: 100%;
  149 + height: @default-height;
  150 + margin: 0 !important;
  151 + line-height: @default-height;
  152 +
  153 + span {
  154 + line-height: @default-height;
  155 + }
  156 +
  157 + > div {
  158 + margin: 0 !important;
  159 + }
  160 +
  161 + &:not(.ant-menu-item-disabled):hover {
  162 + color: @text-color-base;
  163 + background-color: @item-hover-bg;
  164 + }
  165 + }
  166 + }
  167 +
  168 + .context-menu {
  169 + position: fixed;
  170 + top: 0;
  171 + left: 0;
  172 + z-index: 200;
  173 + display: block;
  174 + width: 156px;
  175 + margin: 0;
  176 + list-style: none;
  177 + background-color: @component-background;
  178 + border: 1px solid rgba(0, 0, 0, 0.08);
  179 + border-radius: 0.25rem;
  180 + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.1),
  181 + 0 1px 5px 0 rgba(0, 0, 0, 0.06);
  182 + background-clip: padding-box;
  183 + user-select: none;
  184 +
  185 + .item-style();
  186 +
  187 + .ant-divider {
  188 + margin: 0 0;
  189 + }
  190 +
  191 + &__popup {
  192 + .ant-divider {
  193 + margin: 0 0;
  194 + }
  195 +
  196 + .item-style();
  197 + }
  198 +
  199 + .ant-menu-submenu-title,
  200 + .ant-menu-item {
  201 + padding: 0 !important;
100 202 }
101   - return () => {
102   - const { items } = props;
103   - if (!unref(showRef)) return null;
104   - return (
105   - <Menu
106   - inlineIndent={12}
107   - mode="vertical"
108   - class={prefixCls}
109   - ref={wrapRef}
110   - style={unref(getStyle)}
111   - >
112   - {renderMenuItem(items)}
113   - </Menu>
114   - );
115   - };
116   - },
117   -});
  203 + }
  204 +</style>
... ...
src/components/ContextMenu/src/createContextMenu.ts
1   -import contextMenuVue from './ContextMenu';
  1 +import contextMenuVue from './ContextMenu.vue';
2 2 import { isClient } from '/@/utils/is';
3   -import { CreateContextOptions, ContextMenuProps } from './types';
  3 +import { CreateContextOptions, ContextMenuProps } from './typing';
4 4 import { createVNode, render } from 'vue';
5 5  
6 6 const menuManager: {
... ... @@ -16,7 +16,9 @@ export const createContextMenu = function (options: CreateContextOptions) {
16 16  
17 17 event && event?.preventDefault();
18 18  
19   - if (!isClient) return;
  19 + if (!isClient) {
  20 + return;
  21 + }
20 22 return new Promise((resolve) => {
21 23 const body = document.body;
22 24  
... ... @@ -54,9 +56,9 @@ export const createContextMenu = function (options: CreateContextOptions) {
54 56 body.removeEventListener('scroll', handleClick);
55 57 };
56 58  
57   - menuManager.resolve = function (...arg: any) {
  59 + menuManager.resolve = function (arg) {
58 60 remove();
59   - resolve(arg[0]);
  61 + resolve(arg);
60 62 };
61 63 remove();
62 64 body.appendChild(container);
... ...
src/components/ContextMenu/src/index.less deleted 100644 → 0
1   -@default-height: 42px !important;
2   -
3   -@small-height: 36px !important;
4   -
5   -@large-height: 36px !important;
6   -
7   -.item-style() {
8   - li {
9   - display: inline-block;
10   - width: 100%;
11   - height: @default-height;
12   - margin: 0 !important;
13   - line-height: @default-height;
14   -
15   - span {
16   - line-height: @default-height;
17   - }
18   -
19   - > div {
20   - margin: 0 !important;
21   - }
22   -
23   - &:not(.ant-menu-item-disabled):hover {
24   - color: @text-color-base;
25   - background-color: @item-hover-bg;
26   - }
27   - }
28   -}
29   -
30   -.context-menu {
31   - position: fixed;
32   - top: 0;
33   - left: 0;
34   - z-index: 200;
35   - display: block;
36   - width: 156px;
37   - margin: 0;
38   - list-style: none;
39   - background-color: @component-background;
40   - border: 1px solid rgba(0, 0, 0, 0.08);
41   - border-radius: 0.25rem;
42   - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.1),
43   - 0 1px 5px 0 rgba(0, 0, 0, 0.06);
44   - background-clip: padding-box;
45   - user-select: none;
46   -
47   - .item-style();
48   -
49   - .ant-divider {
50   - margin: 0 0;
51   - }
52   -
53   - &__popup {
54   - .ant-divider {
55   - margin: 0 0;
56   - }
57   -
58   - .item-style();
59   - }
60   -
61   - .ant-menu-submenu-title,
62   - .ant-menu-item {
63   - padding: 0 !important;
64   - }
65   -}
src/components/ContextMenu/src/props.ts deleted 100644 → 0
1   -import type { PropType } from 'vue';
2   -import type { Axis, ContextMenuItem } from './types';
3   -import { propTypes } from '/@/utils/propTypes';
4   -export const contextMenuProps = {
5   - width: propTypes.number.def(156),
6   - customEvent: {
7   - type: Object as PropType<Event>,
8   - default: null,
9   - },
10   - styles: propTypes.style,
11   - showIcon: propTypes.bool.def(true),
12   - axis: {
13   - // The position of the right mouse button click
14   - type: Object as PropType<Axis>,
15   - default() {
16   - return { x: 0, y: 0 };
17   - },
18   - },
19   - items: {
20   - // The most important list, if not, will not be displayed
21   - type: Array as PropType<ContextMenuItem[]>,
22   - default() {
23   - return [];
24   - },
25   - },
26   -};
src/components/ContextMenu/src/types.ts renamed to src/components/ContextMenu/src/typing.ts
src/components/Drawer/src/BasicDrawer.vue
... ... @@ -81,46 +81,40 @@
81 81  
82 82 instance && emit('register', drawerInstance, instance.uid);
83 83  
84   - const getMergeProps = computed(
85   - (): DrawerProps => {
86   - return deepMerge(toRaw(props), unref(propsRef));
87   - }
88   - );
  84 + const getMergeProps = computed((): DrawerProps => {
  85 + return deepMerge(toRaw(props), unref(propsRef));
  86 + });
89 87  
90   - const getProps = computed(
91   - (): DrawerProps => {
92   - const opt = {
93   - placement: 'right',
94   - ...unref(attrs),
95   - ...unref(getMergeProps),
96   - visible: unref(visibleRef),
97   - };
98   - opt.title = undefined;
99   - const { isDetail, width, wrapClassName, getContainer } = opt;
100   - if (isDetail) {
101   - if (!width) {
102   - opt.width = '100%';
103   - }
104   - const detailCls = `${prefixCls}__detail`;
105   - opt.wrapClassName = wrapClassName ? `${wrapClassName} ${detailCls}` : detailCls;
106   -
107   - if (!getContainer) {
108   - // TODO type error?
109   - opt.getContainer = `.${prefixVar}-layout-content` as any;
110   - }
  88 + const getProps = computed((): DrawerProps => {
  89 + const opt = {
  90 + placement: 'right',
  91 + ...unref(attrs),
  92 + ...unref(getMergeProps),
  93 + visible: unref(visibleRef),
  94 + };
  95 + opt.title = undefined;
  96 + const { isDetail, width, wrapClassName, getContainer } = opt;
  97 + if (isDetail) {
  98 + if (!width) {
  99 + opt.width = '100%';
111 100 }
112   - return opt as DrawerProps;
113   - }
114   - );
  101 + const detailCls = `${prefixCls}__detail`;
  102 + opt.wrapClassName = wrapClassName ? `${wrapClassName} ${detailCls}` : detailCls;
115 103  
116   - const getBindValues = computed(
117   - (): DrawerProps => {
118   - return {
119   - ...attrs,
120   - ...unref(getProps),
121   - };
  104 + if (!getContainer) {
  105 + // TODO type error?
  106 + opt.getContainer = `.${prefixVar}-layout-content` as any;
  107 + }
122 108 }
123   - );
  109 + return opt as DrawerProps;
  110 + });
  111 +
  112 + const getBindValues = computed((): DrawerProps => {
  113 + return {
  114 + ...attrs,
  115 + ...unref(getProps),
  116 + };
  117 + });
124 118  
125 119 // Custom implementation of the bottom button,
126 120 const getFooterHeight = computed(() => {
... ... @@ -133,15 +127,13 @@
133 127 return `0px`;
134 128 });
135 129  
136   - const getScrollContentStyle = computed(
137   - (): CSSProperties => {
138   - const footerHeight = unref(getFooterHeight);
139   - return {
140   - position: 'relative',
141   - height: `calc(100% - ${footerHeight})`,
142   - };
143   - }
144   - );
  130 + const getScrollContentStyle = computed((): CSSProperties => {
  131 + const footerHeight = unref(getFooterHeight);
  132 + return {
  133 + position: 'relative',
  134 + height: `calc(100% - ${footerHeight})`,
  135 + };
  136 + });
145 137  
146 138 const getLoading = computed(() => {
147 139 return !!unref(getProps)?.loading;
... ...
src/components/Drawer/src/components/DrawerFooter.vue
... ... @@ -43,15 +43,13 @@
43 43 setup(props, { emit }) {
44 44 const { prefixCls } = useDesign('basic-drawer-footer');
45 45  
46   - const getStyle = computed(
47   - (): CSSProperties => {
48   - const heightStr = `${props.height}`;
49   - return {
50   - height: heightStr,
51   - lineHeight: heightStr,
52   - };
53   - }
54   - );
  46 + const getStyle = computed((): CSSProperties => {
  47 + const heightStr = `${props.height}`;
  48 + return {
  49 + height: heightStr,
  50 + lineHeight: heightStr,
  51 + };
  52 + });
55 53  
56 54 function handleOk() {
57 55 emit('ok');
... ...
src/components/Form/src/components/FormItem.vue
... ... @@ -174,9 +174,7 @@
174 174 return Promise.resolve();
175 175 }
176 176  
177   - const getRequired = isFunction(required)
178   - ? required(unref(getValues))
179   - : required;
  177 + const getRequired = isFunction(required) ? required(unref(getValues)) : required;
180 178  
181 179 if ((!rules || rules.length === 0) && getRequired) {
182 180 rules = [{ required: getRequired, validator }];
... ...
src/components/Icon/src/SvgIcon.vue
... ... @@ -36,17 +36,15 @@
36 36 const { prefixCls } = useDesign('svg-icon');
37 37 const symbolId = computed(() => `#${props.prefix}-${props.name}`);
38 38  
39   - const getStyle = computed(
40   - (): CSSProperties => {
41   - const { size } = props;
42   - let s = `${size}`;
43   - s = `${s.replace('px', '')}px`;
44   - return {
45   - width: s,
46   - height: s,
47   - };
48   - }
49   - );
  39 + const getStyle = computed((): CSSProperties => {
  40 + const { size } = props;
  41 + let s = `${size}`;
  42 + s = `${s.replace('px', '')}px`;
  43 + return {
  44 + width: s,
  45 + height: s,
  46 + };
  47 + });
50 48 return { symbolId, prefixCls, getStyle };
51 49 },
52 50 });
... ...
src/components/Modal/src/BasicModal.vue
... ... @@ -107,14 +107,12 @@
107 107 }
108 108  
109 109 // Custom title component: get title
110   - const getMergeProps = computed(
111   - (): ModalProps => {
112   - return {
113   - ...props,
114   - ...(unref(propsRef) as any),
115   - };
116   - }
117   - );
  110 + const getMergeProps = computed((): ModalProps => {
  111 + return {
  112 + ...props,
  113 + ...(unref(propsRef) as any),
  114 + };
  115 + });
118 116  
119 117 const { handleFullScreen, getWrapClassName, fullScreenRef } = useFullScreen({
120 118 modalWrapperRef,
... ... @@ -123,31 +121,27 @@
123 121 });
124 122  
125 123 // modal component does not need title and origin buttons
126   - const getProps = computed(
127   - (): ModalProps => {
128   - const opt = {
129   - ...unref(getMergeProps),
130   - visible: unref(visibleRef),
131   - okButtonProps: undefined,
132   - cancelButtonProps: undefined,
133   - title: undefined,
134   - };
135   - return {
136   - ...opt,
137   - wrapClassName: unref(getWrapClassName),
138   - };
139   - }
140   - );
  124 + const getProps = computed((): ModalProps => {
  125 + const opt = {
  126 + ...unref(getMergeProps),
  127 + visible: unref(visibleRef),
  128 + okButtonProps: undefined,
  129 + cancelButtonProps: undefined,
  130 + title: undefined,
  131 + };
  132 + return {
  133 + ...opt,
  134 + wrapClassName: unref(getWrapClassName),
  135 + };
  136 + });
141 137  
142   - const getBindValue = computed(
143   - (): Recordable => {
144   - const attr = { ...attrs, ...unref(getProps) };
145   - if (unref(fullScreenRef)) {
146   - return omit(attr, 'height');
147   - }
148   - return attr;
  138 + const getBindValue = computed((): Recordable => {
  139 + const attr = { ...attrs, ...unref(getProps) };
  140 + if (unref(fullScreenRef)) {
  141 + return omit(attr, 'height');
149 142 }
150   - );
  143 + return attr;
  144 + });
151 145  
152 146 const getWrapperHeight = computed(() => {
153 147 if (unref(fullScreenRef)) return undefined;
... ...
src/components/SimpleMenu/src/components/MenuItem.vue
... ... @@ -39,9 +39,8 @@
39 39  
40 40 const active = ref(false);
41 41  
42   - const { getItemStyle, getParentList, getParentMenu, getParentRootMenu } = useMenuItem(
43   - instance
44   - );
  42 + const { getItemStyle, getParentList, getParentMenu, getParentRootMenu } =
  43 + useMenuItem(instance);
45 44  
46 45 const { prefixCls } = useDesign('menu');
47 46  
... ...
src/components/SimpleMenu/src/components/SubMenuItem.vue
... ... @@ -109,9 +109,8 @@
109 109 isChild: false,
110 110 });
111 111  
112   - const { getParentSubMenu, getItemStyle, getParentMenu, getParentList } = useMenuItem(
113   - instance
114   - );
  112 + const { getParentSubMenu, getItemStyle, getParentMenu, getParentList } =
  113 + useMenuItem(instance);
115 114  
116 115 const { prefixCls } = useDesign('menu');
117 116  
... ... @@ -148,13 +147,11 @@
148 147 const getCollapse = computed(() => rootProps.collapse);
149 148 const getTheme = computed(() => rootProps.theme);
150 149  
151   - const getOverlayStyle = computed(
152   - (): CSSProperties => {
153   - return {
154   - minWidth: '200px',
155   - };
156   - }
157   - );
  150 + const getOverlayStyle = computed((): CSSProperties => {
  151 + return {
  152 + minWidth: '200px',
  153 + };
  154 + });
158 155  
159 156 const getIsOpend = computed(() => {
160 157 const name = props.name;
... ...
src/components/SimpleMenu/src/components/useMenu.ts
... ... @@ -14,26 +14,24 @@ export function useMenuItem(instance: ComponentInternalInstance | null) {
14 14 return findParentMenu(['SubMenu']);
15 15 });
16 16  
17   - const getItemStyle = computed(
18   - (): CSSProperties => {
19   - let parent = instance?.parent;
20   - if (!parent) return {};
21   - const indentSize = (unref(getParentRootMenu)?.props.indentSize as number) ?? 20;
22   - let padding = indentSize;
  17 + const getItemStyle = computed((): CSSProperties => {
  18 + let parent = instance?.parent;
  19 + if (!parent) return {};
  20 + const indentSize = (unref(getParentRootMenu)?.props.indentSize as number) ?? 20;
  21 + let padding = indentSize;
23 22  
24   - if (unref(getParentRootMenu)?.props.collapse) {
25   - padding = indentSize;
26   - } else {
27   - while (parent && parent.type.name !== 'Menu') {
28   - if (parent.type.name === 'SubMenu') {
29   - padding += indentSize;
30   - }
31   - parent = parent.parent;
  23 + if (unref(getParentRootMenu)?.props.collapse) {
  24 + padding = indentSize;
  25 + } else {
  26 + while (parent && parent.type.name !== 'Menu') {
  27 + if (parent.type.name === 'SubMenu') {
  28 + padding += indentSize;
32 29 }
  30 + parent = parent.parent;
33 31 }
34   - return { paddingLeft: padding + 'px' };
35 32 }
36   - );
  33 + return { paddingLeft: padding + 'px' };
  34 + });
37 35  
38 36 function findParentMenu(name: string[]) {
39 37 let parent = instance?.parent;
... ...
src/directives/clickOutside.ts
... ... @@ -31,12 +31,14 @@ function createDocumentHandler(el: HTMLElement, binding: DirectiveBinding): Docu
31 31 excludes = binding.arg;
32 32 } else {
33 33 // due to current implementation on binding type is wrong the type casting is necessary here
34   - excludes.push((binding.arg as unknown) as HTMLElement);
  34 + excludes.push(binding.arg as unknown as HTMLElement);
35 35 }
36 36 return function (mouseup, mousedown) {
37   - const popperRef = (binding.instance as ComponentPublicInstance<{
38   - popperRef: Nullable<HTMLElement>;
39   - }>).popperRef;
  37 + const popperRef = (
  38 + binding.instance as ComponentPublicInstance<{
  39 + popperRef: Nullable<HTMLElement>;
  40 + }>
  41 + ).popperRef;
40 42 const mouseUpTarget = mouseup.target as Node;
41 43 const mouseDownTarget = mousedown.target as Node;
42 44 const isBound = !binding || !binding.instance;
... ...
src/hooks/web/useI18n.ts
... ... @@ -21,9 +21,7 @@ function getKey(namespace: string | undefined, key: string) {
21 21 return `${namespace}.${key}`;
22 22 }
23 23  
24   -export function useI18n(
25   - namespace?: string
26   -): {
  24 +export function useI18n(namespace?: string): {
27 25 t: I18nGlobalTranslation;
28 26 } {
29 27 const normalFn = {
... ...
src/hooks/web/useMessage.tsx
... ... @@ -60,7 +60,7 @@ function createConfirm(options: ModalOptionsEx): ConfirmOptions {
60 60 icon: getIcon(iconType),
61 61 ...options,
62 62 };
63   - return (Modal.confirm(opt) as unknown) as ConfirmOptions;
  63 + return Modal.confirm(opt) as unknown as ConfirmOptions;
64 64 }
65 65  
66 66 const getBaseOptions = () => {
... ...
src/layouts/default/header/components/Breadcrumb.vue
... ... @@ -71,10 +71,10 @@
71 71 const breadcrumbList = filterItem(matched);
72 72  
73 73 if (currentRoute.value.meta?.currentActiveMenu) {
74   - breadcrumbList.push(({
  74 + breadcrumbList.push({
75 75 ...currentRoute.value,
76 76 name: currentRoute.value.meta?.title || currentRoute.value.name,
77   - } as unknown) as RouteLocationMatched);
  77 + } as unknown as RouteLocationMatched);
78 78 }
79 79 routes.value = breadcrumbList;
80 80 });
... ...
src/layouts/default/menu/index.vue
... ... @@ -76,13 +76,11 @@
76 76 );
77 77 });
78 78  
79   - const getWrapperStyle = computed(
80   - (): CSSProperties => {
81   - return {
82   - height: `calc(100% - ${unref(getIsShowLogo) ? '48px' : '0px'})`,
83   - };
84   - }
85   - );
  79 + const getWrapperStyle = computed((): CSSProperties => {
  80 + return {
  81 + height: `calc(100% - ${unref(getIsShowLogo) ? '48px' : '0px'})`,
  82 + };
  83 + });
86 84  
87 85 const getLogoClass = computed(() => {
88 86 return [
... ...
src/layouts/default/setting/SettingDrawer.tsx
... ... @@ -58,12 +58,8 @@ export default defineComponent({
58 58 getThemeColor,
59 59 } = useRootSetting();
60 60  
61   - const {
62   - getOpenPageLoading,
63   - getBasicTransition,
64   - getEnableTransition,
65   - getOpenNProgress,
66   - } = useTransitionSetting();
  61 + const { getOpenPageLoading, getBasicTransition, getEnableTransition, getOpenNProgress } =
  62 + useTransitionSetting();
67 63  
68 64 const {
69 65 getIsHorizontal,
... ...
src/layouts/default/sider/LayoutSider.vue
... ... @@ -89,19 +89,17 @@
89 89 ];
90 90 });
91 91  
92   - const getHiddenDomStyle = computed(
93   - (): CSSProperties => {
94   - const width = `${unref(getRealWidth)}px`;
95   - return {
96   - width: width,
97   - overflow: 'hidden',
98   - flex: `0 0 ${width}`,
99   - maxWidth: width,
100   - minWidth: width,
101   - transition: 'all 0.2s',
102   - };
103   - }
104   - );
  92 + const getHiddenDomStyle = computed((): CSSProperties => {
  93 + const width = `${unref(getRealWidth)}px`;
  94 + return {
  95 + width: width,
  96 + overflow: 'hidden',
  97 + flex: `0 0 ${width}`,
  98 + maxWidth: width,
  99 + minWidth: width,
  100 + transition: 'all 0.2s',
  101 + };
  102 + });
105 103  
106 104 return {
107 105 prefixCls,
... ...
src/layouts/default/sider/MixSider.vue
... ... @@ -147,14 +147,12 @@
147 147  
148 148 useDragLine(sideRef, dragBarRef, true);
149 149  
150   - const getMenuStyle = computed(
151   - (): CSSProperties => {
152   - return {
153   - width: unref(openMenu) ? `${unref(getMenuWidth)}px` : 0,
154   - left: `${unref(getMixSideWidth)}px`,
155   - };
156   - }
157   - );
  150 + const getMenuStyle = computed((): CSSProperties => {
  151 + return {
  152 + width: unref(openMenu) ? `${unref(getMenuWidth)}px` : 0,
  153 + left: `${unref(getMixSideWidth)}px`,
  154 + };
  155 + });
158 156  
159 157 const getIsFixed = computed(() => {
160 158 /* eslint-disable-next-line */
... ... @@ -171,20 +169,16 @@
171 169 return unref(getCollapsed) ? SIDE_BAR_MINI_WIDTH : SIDE_BAR_SHOW_TIT_MINI_WIDTH;
172 170 });
173 171  
174   - const getDomStyle = computed(
175   - (): CSSProperties => {
176   - const fixedWidth = unref(getIsFixed) ? unref(getRealWidth) : 0;
177   - const width = `${unref(getMixSideWidth) + fixedWidth}px`;
178   - return getWrapCommonStyle(width);
179   - }
180   - );
  172 + const getDomStyle = computed((): CSSProperties => {
  173 + const fixedWidth = unref(getIsFixed) ? unref(getRealWidth) : 0;
  174 + const width = `${unref(getMixSideWidth) + fixedWidth}px`;
  175 + return getWrapCommonStyle(width);
  176 + });
181 177  
182   - const getWrapStyle = computed(
183   - (): CSSProperties => {
184   - const width = `${unref(getMixSideWidth)}px`;
185   - return getWrapCommonStyle(width);
186   - }
187   - );
  178 + const getWrapStyle = computed((): CSSProperties => {
  179 + const width = `${unref(getMixSideWidth)}px`;
  180 + return getWrapCommonStyle(width);
  181 + });
188 182  
189 183 const getMenuEvents = computed(() => {
190 184 return !unref(getMixSideFixed)
... ...
src/layouts/default/tabs/index.vue
... ... @@ -106,8 +106,7 @@
106 106 .getRoutes()
107 107 .find((item) => item.path === currentActiveMenu);
108 108  
109   - findParentRoute &&
110   - tabStore.addTab((findParentRoute as unknown) as RouteLocationNormalized);
  109 + findParentRoute && tabStore.addTab(findParentRoute as unknown as RouteLocationNormalized);
111 110 } else {
112 111 tabStore.addTab(unref(route));
113 112 }
... ...
src/layouts/default/tabs/useMultipleTabs.ts
... ... @@ -30,14 +30,14 @@ export function initAffixTabs(): string[] {
30 30 * @description: Set fixed tabs
31 31 */
32 32 function addAffixTabs(): void {
33   - const affixTabs = filterAffixTabs((router.getRoutes() as unknown) as RouteLocationNormalized[]);
  33 + const affixTabs = filterAffixTabs(router.getRoutes() as unknown as RouteLocationNormalized[]);
34 34 affixList.value = affixTabs;
35 35 for (const tab of affixTabs) {
36   - tabStore.addTab(({
  36 + tabStore.addTab({
37 37 meta: tab.meta,
38 38 name: tab.name,
39 39 path: tab.path,
40   - } as unknown) as RouteLocationNormalized);
  40 + } as unknown as RouteLocationNormalized);
41 41 }
42 42 }
43 43  
... ...
src/layouts/default/tabs/useTabDropdown.ts
... ... @@ -20,11 +20,9 @@ export function useTabDropdown(tabContentProps: TabContentProps, getIsTabs: Comp
20 20 const { currentRoute } = useRouter();
21 21 const { refreshPage, closeAll, close, closeLeft, closeOther, closeRight } = useTabs();
22 22  
23   - const getTargetTab = computed(
24   - (): RouteLocationNormalized => {
25   - return unref(getIsTabs) ? tabContentProps.tabItem : unref(currentRoute);
26   - }
27   - );
  23 + const getTargetTab = computed((): RouteLocationNormalized => {
  24 + return unref(getIsTabs) ? tabContentProps.tabItem : unref(currentRoute);
  25 + });
28 26  
29 27 /**
30 28 * @description: drop-down list
... ...
src/layouts/iframe/useFrameKeepAlive.ts
... ... @@ -16,8 +16,7 @@ export function useFrameKeepAlive() {
16 16 const { getShowMultipleTab } = useMultipleTabSetting();
17 17 const tabStore = useMultipleTabStore();
18 18 const getFramePages = computed(() => {
19   - const ret =
20   - getAllFramePages((toRaw(router.getRoutes()) as unknown) as AppRouteRecordRaw[]) || [];
  19 + const ret = getAllFramePages(toRaw(router.getRoutes()) as unknown as AppRouteRecordRaw[]) || [];
21 20 return ret;
22 21 });
23 22  
... ...
src/router/guard/permissionGuard.ts
... ... @@ -60,7 +60,7 @@ export function createPermissionGuard(router: Router) {
60 60 const routes = await permissionStore.buildRoutesAction();
61 61  
62 62 routes.forEach((route) => {
63   - router.addRoute((route as unknown) as RouteRecordRaw);
  63 + router.addRoute(route as unknown as RouteRecordRaw);
64 64 });
65 65  
66 66 const redirectPath = (from.query.redirect || to.path) as string;
... ...
src/utils/cache/memory.ts
... ... @@ -80,7 +80,7 @@ export class Memory&lt;T = any, V = any&gt; {
80 80  
81 81 resetCache(cache: { [K in keyof T]: Cache }) {
82 82 Object.keys(cache).forEach((key) => {
83   - const k = (key as any) as keyof T;
  83 + const k = key as any as keyof T;
84 84 const item = cache[k];
85 85 if (item && item.time) {
86 86 const now = new Date().getTime();
... ...
src/utils/env.ts
... ... @@ -17,10 +17,10 @@ export function getStorageShortName() {
17 17 export function getAppEnvConfig() {
18 18 const ENV_NAME = getConfigFileName(import.meta.env);
19 19  
20   - const ENV = ((import.meta.env.DEV
  20 + const ENV = (import.meta.env.DEV
21 21 ? // Get the global configuration (the configuration will be extracted independently when packaging)
22   - ((import.meta.env as unknown) as GlobEnvConfig)
23   - : window[ENV_NAME as any]) as unknown) as GlobEnvConfig;
  22 + (import.meta.env as unknown as GlobEnvConfig)
  23 + : window[ENV_NAME as any]) as unknown as GlobEnvConfig;
24 24  
25 25 const {
26 26 VITE_GLOB_APP_TITLE,
... ...
src/utils/is.ts
... ... @@ -89,6 +89,7 @@ export const isServer = typeof window === &#39;undefined&#39;;
89 89 export const isClient = !isServer;
90 90  
91 91 export function isUrl(path: string): boolean {
92   - const reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
  92 + const reg =
  93 + /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
93 94 return reg.test(path);
94 95 }
... ...
src/views/demo/form/DynamicForm.vue
... ... @@ -181,16 +181,14 @@
181 181 export default defineComponent({
182 182 components: { BasicForm, CollapseContainer, PageWrapper },
183 183 setup() {
184   - const [
185   - register,
186   - { setProps, updateSchema, appendSchemaByField, removeSchemaByFiled },
187   - ] = useForm({
188   - labelWidth: 120,
189   - schemas,
190   - actionColOptions: {
191   - span: 24,
192   - },
193   - });
  184 + const [register, { setProps, updateSchema, appendSchemaByField, removeSchemaByFiled }] =
  185 + useForm({
  186 + labelWidth: 120,
  187 + schemas,
  188 + actionColOptions: {
  189 + span: 24,
  190 + },
  191 + });
194 192 const [register1] = useForm({
195 193 labelWidth: 120,
196 194 schemas: schemas1,
... ...
src/views/demo/system/account/DeptTree.vue
... ... @@ -26,7 +26,7 @@
26 26 const treeData = ref<TreeItem[]>([]);
27 27  
28 28 async function fetch() {
29   - treeData.value = ((await getDeptList()) as unknown) as TreeItem[];
  29 + treeData.value = (await getDeptList()) as unknown as TreeItem[];
30 30 }
31 31  
32 32 function handleSelect(keys: string, e) {
... ...
src/views/demo/system/role/RoleDrawer.vue
... ... @@ -54,7 +54,7 @@
54 54 ...data.record,
55 55 });
56 56 }
57   - treeData.value = ((await getMenuList()) as any) as TreeItem[];
  57 + treeData.value = (await getMenuList()) as any as TreeItem[];
58 58 });
59 59  
60 60 const getTitle = computed(() => (!unref(isUpdate) ? '新增角色' : '编辑角色'));
... ...
src/views/sys/exception/Exception.vue
... ... @@ -64,11 +64,9 @@
64 64 return Number(routeStatus) || status;
65 65 });
66 66  
67   - const getMapValue = computed(
68   - (): MapValue => {
69   - return unref(statusMapRef).get(unref(getStatus)) as MapValue;
70   - }
71   - );
  67 + const getMapValue = computed((): MapValue => {
  68 + return unref(statusMapRef).get(unref(getStatus)) as MapValue;
  69 + });
72 70  
73 71 const backLoginI18n = t('sys.exception.backLogin');
74 72 const backHomeI18n = t('sys.exception.backHome');
... ...
src/views/sys/iframe/index.vue
... ... @@ -32,13 +32,11 @@
32 32 const { prefixCls } = useDesign('iframe-page');
33 33 useWindowSizeFn(calcHeight, 150, { immediate: true });
34 34  
35   - const getWrapStyle = computed(
36   - (): CSSProperties => {
37   - return {
38   - height: `${unref(heightRef)}px`,
39   - };
40   - }
41   - );
  35 + const getWrapStyle = computed((): CSSProperties => {
  36 + return {
  37 + height: `${unref(heightRef)}px`,
  38 + };
  39 + });
42 40  
43 41 function calcHeight() {
44 42 const iframe = unref(frameRef);
... ...
stylelint.config.js
... ... @@ -28,7 +28,7 @@ module.exports = {
28 28 'font-family-no-missing-generic-family-keyword': null,
29 29 'declaration-colon-space-after': 'always-single-line',
30 30 'declaration-colon-space-before': 'never',
31   - 'declaration-block-trailing-semicolon': 'always',
  31 + // 'declaration-block-trailing-semicolon': 'always',
32 32 'rule-empty-line-before': [
33 33 'always',
34 34 {
... ...