mirror of
https://github.com/vbenjs/vue-vben-admin.git
synced 2025-02-03 02:54:40 +08:00
antdv升级到4.x版本 (#3006)
* fix(ApiTreeSelect): ApiTreeSelect组件首次调用会重复请求(#2940) 由于watchEffect,onMounted会立即执行,所以导致重复请求。 并且 watch函数和watchEffect监听的依赖重复了,故删去 * chore: update ant design npm version * chore: 修改antd的css引用路径 * style(layout): 替换sider header组件传参属性,适配原有组件的样式 * style(Menu): 去除气泡卡片的背景 * chore: typo * typo(Modal): 将visible替换成open * typo:修改modal弹窗的绑定函数名称 * style(Modal): 为了解决直接引用 Modal 组件时关闭按钮样式的问题,增加一个名为 "vben-basic-modal" 的类名,以实现样式隔离。 * Update package.json * typo(Drawer): Drawer 组件 visible 变为 open * typo(Table): Table 组件 filterDropdownVisible 变为 filterDropdownOpen。 * typo(TreeSelect): 组件弹框的 classname API 统一为 popupClassName,dropdownClassName
This commit is contained in:
parent
607a24632a
commit
aaf2fde3cf
@ -76,7 +76,7 @@
|
|||||||
"@vueuse/core": "^10.2.1",
|
"@vueuse/core": "^10.2.1",
|
||||||
"@vueuse/shared": "^10.2.1",
|
"@vueuse/shared": "^10.2.1",
|
||||||
"@zxcvbn-ts/core": "^3.0.2",
|
"@zxcvbn-ts/core": "^3.0.2",
|
||||||
"ant-design-vue": "^3.2.20",
|
"ant-design-vue": "^4.0.2",
|
||||||
"axios": "^1.4.0",
|
"axios": "^1.4.0",
|
||||||
"codemirror": "^5.65.12",
|
"codemirror": "^5.65.12",
|
||||||
"cropperjs": "^1.5.13",
|
"cropperjs": "^1.5.13",
|
||||||
|
558
pnpm-lock.yaml
generated
558
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -58,9 +58,9 @@
|
|||||||
components: { Drawer, ScrollContainer, DrawerFooter, DrawerHeader },
|
components: { Drawer, ScrollContainer, DrawerFooter, DrawerHeader },
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
props: basicProps,
|
props: basicProps,
|
||||||
emits: ['visible-change', 'ok', 'close', 'register'],
|
emits: ['open-change', 'ok', 'close', 'register'],
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
const visibleRef = ref(false);
|
const openRef = ref(false);
|
||||||
const attrs = useAttrs();
|
const attrs = useAttrs();
|
||||||
const propsRef = ref<Partial<DrawerProps | null>>(null);
|
const propsRef = ref<Partial<DrawerProps | null>>(null);
|
||||||
|
|
||||||
@ -69,7 +69,7 @@
|
|||||||
|
|
||||||
const drawerInstance: DrawerInstance = {
|
const drawerInstance: DrawerInstance = {
|
||||||
setDrawerProps: setDrawerProps as any,
|
setDrawerProps: setDrawerProps as any,
|
||||||
emitVisible: undefined,
|
emitOpen: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
const instance = getCurrentInstance();
|
const instance = getCurrentInstance();
|
||||||
@ -85,7 +85,7 @@
|
|||||||
placement: 'right',
|
placement: 'right',
|
||||||
...unref(attrs),
|
...unref(attrs),
|
||||||
...unref(getMergeProps),
|
...unref(getMergeProps),
|
||||||
visible: unref(visibleRef),
|
open: unref(openRef),
|
||||||
};
|
};
|
||||||
opt.title = undefined;
|
opt.title = undefined;
|
||||||
const { isDetail, width, wrapClassName, getContainer } = opt;
|
const { isDetail, width, wrapClassName, getContainer } = opt;
|
||||||
@ -135,19 +135,19 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.visible,
|
() => props.open,
|
||||||
(newVal, oldVal) => {
|
(newVal, oldVal) => {
|
||||||
if (newVal !== oldVal) visibleRef.value = newVal;
|
if (newVal !== oldVal) openRef.value = newVal;
|
||||||
},
|
},
|
||||||
{ deep: true },
|
{ deep: true },
|
||||||
);
|
);
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => visibleRef.value,
|
() => openRef.value,
|
||||||
(visible) => {
|
(open) => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
emit('visible-change', visible);
|
emit('open-change', open);
|
||||||
instance && drawerInstance.emitVisible?.(visible, instance.uid);
|
instance && drawerInstance.emitOpen?.(open, instance.uid);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -158,18 +158,18 @@
|
|||||||
emit('close', e);
|
emit('close', e);
|
||||||
if (closeFunc && isFunction(closeFunc)) {
|
if (closeFunc && isFunction(closeFunc)) {
|
||||||
const res = await closeFunc();
|
const res = await closeFunc();
|
||||||
visibleRef.value = !res;
|
openRef.value = !res;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
visibleRef.value = false;
|
openRef.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setDrawerProps(props: Partial<DrawerProps>): void {
|
function setDrawerProps(props: Partial<DrawerProps>): void {
|
||||||
// Keep the last setDrawerProps
|
// Keep the last setDrawerProps
|
||||||
propsRef.value = deepMerge(unref(propsRef) || ({} as any), props);
|
propsRef.value = deepMerge(unref(propsRef) || ({} as any), props);
|
||||||
|
|
||||||
if (Reflect.has(props, 'visible')) {
|
if (Reflect.has(props, 'open')) {
|
||||||
visibleRef.value = !!props.visible;
|
openRef.value = !!props.open;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ export const basicProps = {
|
|||||||
title: { type: String, default: '' },
|
title: { type: String, default: '' },
|
||||||
loadingText: { type: String },
|
loadingText: { type: String },
|
||||||
showDetailBack: { type: Boolean, default: true },
|
showDetailBack: { type: Boolean, default: true },
|
||||||
visible: { type: Boolean },
|
open: { type: Boolean },
|
||||||
loading: { type: Boolean },
|
loading: { type: Boolean },
|
||||||
maskClosable: { type: Boolean, default: true },
|
maskClosable: { type: Boolean, default: true },
|
||||||
getContainer: {
|
getContainer: {
|
||||||
|
@ -4,13 +4,13 @@ import type { ScrollContainerOptions } from '/@/components/Container/index';
|
|||||||
|
|
||||||
export interface DrawerInstance {
|
export interface DrawerInstance {
|
||||||
setDrawerProps: (props: Partial<DrawerProps> | boolean) => void;
|
setDrawerProps: (props: Partial<DrawerProps> | boolean) => void;
|
||||||
emitVisible?: (visible: boolean, uid: number) => void;
|
emitOpen?: (open: boolean, uid: number) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ReturnMethods extends DrawerInstance {
|
export interface ReturnMethods extends DrawerInstance {
|
||||||
openDrawer: <T = any>(visible?: boolean, data?: T, openOnSet?: boolean) => void;
|
openDrawer: <T = any>(open?: boolean, data?: T, openOnSet?: boolean) => void;
|
||||||
closeDrawer: () => void;
|
closeDrawer: () => void;
|
||||||
getVisible?: ComputedRef<boolean>;
|
getOpen?: ComputedRef<boolean>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type RegisterFn = (drawerInstance: DrawerInstance, uuid?: string) => void;
|
export type RegisterFn = (drawerInstance: DrawerInstance, uuid?: string) => void;
|
||||||
@ -19,7 +19,7 @@ export interface ReturnInnerMethods extends DrawerInstance {
|
|||||||
closeDrawer: () => void;
|
closeDrawer: () => void;
|
||||||
changeLoading: (loading: boolean) => void;
|
changeLoading: (loading: boolean) => void;
|
||||||
changeOkLoading: (loading: boolean) => void;
|
changeOkLoading: (loading: boolean) => void;
|
||||||
getVisible?: ComputedRef<boolean>;
|
getOpen?: ComputedRef<boolean>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type UseDrawerReturnType = [RegisterFn, ReturnMethods];
|
export type UseDrawerReturnType = [RegisterFn, ReturnMethods];
|
||||||
@ -73,7 +73,7 @@ export interface DrawerProps extends DrawerFooterProps {
|
|||||||
isDetail?: boolean;
|
isDetail?: boolean;
|
||||||
loading?: boolean;
|
loading?: boolean;
|
||||||
showDetailBack?: boolean;
|
showDetailBack?: boolean;
|
||||||
visible?: boolean;
|
open?: boolean;
|
||||||
/**
|
/**
|
||||||
* Built-in ScrollContainer component configuration
|
* Built-in ScrollContainer component configuration
|
||||||
* @type ScrollContainerOptions
|
* @type ScrollContainerOptions
|
||||||
@ -179,7 +179,7 @@ export interface DrawerProps extends DrawerFooterProps {
|
|||||||
* @type string
|
* @type string
|
||||||
*/
|
*/
|
||||||
placement?: 'top' | 'right' | 'bottom' | 'left';
|
placement?: 'top' | 'right' | 'bottom' | 'left';
|
||||||
afterVisibleChange?: (visible?: boolean) => void;
|
afterOpenChange?: (open?: boolean) => void;
|
||||||
keyboard?: boolean;
|
keyboard?: boolean;
|
||||||
/**
|
/**
|
||||||
* Specify a callback that will be called when a user clicks mask, close button or Cancel button.
|
* Specify a callback that will be called when a user clicks mask, close button or Cancel button.
|
||||||
|
@ -23,7 +23,7 @@ import { error } from '/@/utils/log';
|
|||||||
|
|
||||||
const dataTransferRef = reactive<any>({});
|
const dataTransferRef = reactive<any>({});
|
||||||
|
|
||||||
const visibleData = reactive<{ [key: number]: boolean }>({});
|
const openData = reactive<{ [key: number]: boolean }>({});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: Applicable to separate drawer and call outside
|
* @description: Applicable to separate drawer and call outside
|
||||||
@ -51,8 +51,8 @@ export function useDrawer(): UseDrawerReturnType {
|
|||||||
drawer.value = drawerInstance;
|
drawer.value = drawerInstance;
|
||||||
loaded.value = true;
|
loaded.value = true;
|
||||||
|
|
||||||
drawerInstance.emitVisible = (visible: boolean, uid: number) => {
|
drawerInstance.emitOpen = (open: boolean, uid: number) => {
|
||||||
visibleData[uid] = visible;
|
openData[uid] = open;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,13 +69,13 @@ export function useDrawer(): UseDrawerReturnType {
|
|||||||
getInstance()?.setDrawerProps(props);
|
getInstance()?.setDrawerProps(props);
|
||||||
},
|
},
|
||||||
|
|
||||||
getVisible: computed((): boolean => {
|
getOpen: computed((): boolean => {
|
||||||
return visibleData[~~unref(uid)];
|
return openData[~~unref(uid)];
|
||||||
}),
|
}),
|
||||||
|
|
||||||
openDrawer: <T = any>(visible = true, data?: T, openOnSet = true): void => {
|
openDrawer: <T = any>(open = true, data?: T, openOnSet = true): void => {
|
||||||
getInstance()?.setDrawerProps({
|
getInstance()?.setDrawerProps({
|
||||||
visible: visible,
|
open,
|
||||||
});
|
});
|
||||||
if (!data) return;
|
if (!data) return;
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ export function useDrawer(): UseDrawerReturnType {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
closeDrawer: () => {
|
closeDrawer: () => {
|
||||||
getInstance()?.setDrawerProps({ visible: false });
|
getInstance()?.setDrawerProps({ open: false });
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -145,15 +145,15 @@ export const useDrawerInner = (callbackFn?: Fn): UseDrawerInnerReturnType => {
|
|||||||
changeOkLoading: (loading = true) => {
|
changeOkLoading: (loading = true) => {
|
||||||
getInstance()?.setDrawerProps({ confirmLoading: loading });
|
getInstance()?.setDrawerProps({ confirmLoading: loading });
|
||||||
},
|
},
|
||||||
getVisible: computed((): boolean => {
|
getOpen: computed((): boolean => {
|
||||||
return visibleData[~~unref(uidRef)];
|
return openData[~~unref(uidRef)];
|
||||||
}),
|
}),
|
||||||
|
|
||||||
closeDrawer: () => {
|
closeDrawer: () => {
|
||||||
getInstance()?.setDrawerProps({ visible: false });
|
getInstance()?.setDrawerProps({ open: false });
|
||||||
},
|
},
|
||||||
|
|
||||||
setDrawerProps: (props: Partial<DrawerProps>) => {
|
setDrawerProps: (props: Partial<DrawerProps> | boolean) => {
|
||||||
getInstance()?.setDrawerProps(props);
|
getInstance()?.setDrawerProps(props);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<Modal v-bind="getBindValue" @cancel="handleCancel">
|
<Modal v-bind="getBindValue" @cancel="handleCancel" wrapClassName="vben-basic-modal">
|
||||||
<template #closeIcon v-if="!$slots.closeIcon">
|
<template #closeIcon v-if="!$slots.closeIcon">
|
||||||
<ModalClose
|
<ModalClose
|
||||||
:canFullscreen="getProps.canFullscreen"
|
:canFullscreen="getProps.canFullscreen"
|
||||||
@ -34,9 +34,9 @@
|
|||||||
:loading-tip="getProps.loadingTip"
|
:loading-tip="getProps.loadingTip"
|
||||||
:minHeight="getProps.minHeight"
|
:minHeight="getProps.minHeight"
|
||||||
:height="getWrapperHeight"
|
:height="getWrapperHeight"
|
||||||
:visible="visibleRef"
|
:open="openRef"
|
||||||
:modalFooterHeight="footer !== undefined && !footer ? 0 : undefined"
|
:modalFooterHeight="footer !== undefined && !footer ? 0 : undefined"
|
||||||
v-bind="omit(getProps.wrapperProps, 'visible', 'height', 'modalFooterHeight')"
|
v-bind="omit(getProps.wrapperProps, 'open', 'height', 'modalFooterHeight')"
|
||||||
@ext-height="handleExtHeight"
|
@ext-height="handleExtHeight"
|
||||||
@height-change="handleHeightChange"
|
@height-change="handleHeightChange"
|
||||||
>
|
>
|
||||||
@ -79,9 +79,9 @@
|
|||||||
components: { Modal, ModalWrapper, ModalClose, ModalFooter, ModalHeader },
|
components: { Modal, ModalWrapper, ModalClose, ModalFooter, ModalHeader },
|
||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
props: basicProps,
|
props: basicProps,
|
||||||
emits: ['visible-change', 'height-change', 'cancel', 'ok', 'register', 'update:visible'],
|
emits: ['open-change', 'height-change', 'cancel', 'ok', 'register', 'update:open'],
|
||||||
setup(props, { emit, attrs }) {
|
setup(props, { emit, attrs }) {
|
||||||
const visibleRef = ref(false);
|
const openRef = ref(false);
|
||||||
const propsRef = ref<Partial<ModalProps> | null>(null);
|
const propsRef = ref<Partial<ModalProps> | null>(null);
|
||||||
const modalWrapperRef = ref<any>(null);
|
const modalWrapperRef = ref<any>(null);
|
||||||
const { prefixCls } = useDesign('basic-modal');
|
const { prefixCls } = useDesign('basic-modal');
|
||||||
@ -90,7 +90,7 @@
|
|||||||
const extHeightRef = ref(0);
|
const extHeightRef = ref(0);
|
||||||
const modalMethods: ModalMethods = {
|
const modalMethods: ModalMethods = {
|
||||||
setModalProps,
|
setModalProps,
|
||||||
emitVisible: undefined,
|
emitOpen: undefined,
|
||||||
redoModalHeight: () => {
|
redoModalHeight: () => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
if (unref(modalWrapperRef)) {
|
if (unref(modalWrapperRef)) {
|
||||||
@ -123,7 +123,7 @@
|
|||||||
const getProps = computed((): Recordable => {
|
const getProps = computed((): Recordable => {
|
||||||
const opt = {
|
const opt = {
|
||||||
...unref(getMergeProps),
|
...unref(getMergeProps),
|
||||||
visible: unref(visibleRef),
|
open: unref(openRef),
|
||||||
okButtonProps: undefined,
|
okButtonProps: undefined,
|
||||||
cancelButtonProps: undefined,
|
cancelButtonProps: undefined,
|
||||||
title: undefined,
|
title: undefined,
|
||||||
@ -138,7 +138,7 @@
|
|||||||
const attr = {
|
const attr = {
|
||||||
...attrs,
|
...attrs,
|
||||||
...unref(getMergeProps),
|
...unref(getMergeProps),
|
||||||
visible: unref(visibleRef),
|
open: unref(openRef),
|
||||||
};
|
};
|
||||||
attr['wrapClassName'] = `${attr?.['wrapClassName'] || ''} ${unref(getWrapClassName)}`;
|
attr['wrapClassName'] = `${attr?.['wrapClassName'] || ''} ${unref(getWrapClassName)}`;
|
||||||
|
|
||||||
@ -154,16 +154,16 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
visibleRef.value = !!props.visible;
|
openRef.value = !!props.open;
|
||||||
fullScreenRef.value = !!props.defaultFullscreen;
|
fullScreenRef.value = !!props.defaultFullscreen;
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => unref(visibleRef),
|
() => unref(openRef),
|
||||||
(v) => {
|
(v) => {
|
||||||
emit('visible-change', v);
|
emit('open-change', v);
|
||||||
emit('update:visible', v);
|
emit('update:open', v);
|
||||||
instance && modalMethods.emitVisible?.(v, instance.uid);
|
instance && modalMethods.emitOpen?.(v, instance.uid);
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
if (props.scrollTop && v && unref(modalWrapperRef)) {
|
if (props.scrollTop && v && unref(modalWrapperRef)) {
|
||||||
(unref(modalWrapperRef) as any).scrollTop();
|
(unref(modalWrapperRef) as any).scrollTop();
|
||||||
@ -182,11 +182,11 @@
|
|||||||
if ((e.target as HTMLElement)?.classList?.contains(prefixCls + '-close--custom')) return;
|
if ((e.target as HTMLElement)?.classList?.contains(prefixCls + '-close--custom')) return;
|
||||||
if (props.closeFunc && isFunction(props.closeFunc)) {
|
if (props.closeFunc && isFunction(props.closeFunc)) {
|
||||||
const isClose: boolean = await props.closeFunc();
|
const isClose: boolean = await props.closeFunc();
|
||||||
visibleRef.value = !isClose;
|
openRef.value = !isClose;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
visibleRef.value = false;
|
openRef.value = false;
|
||||||
emit('cancel', e);
|
emit('cancel', e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,8 +196,8 @@
|
|||||||
function setModalProps(props: Partial<ModalProps>): void {
|
function setModalProps(props: Partial<ModalProps>): void {
|
||||||
// Keep the last setModalProps
|
// Keep the last setModalProps
|
||||||
propsRef.value = deepMerge(unref(propsRef) || ({} as any), props);
|
propsRef.value = deepMerge(unref(propsRef) || ({} as any), props);
|
||||||
if (Reflect.has(props, 'visible')) {
|
if (Reflect.has(props, 'open')) {
|
||||||
visibleRef.value = !!props.visible;
|
openRef.value = !!props.open;
|
||||||
}
|
}
|
||||||
if (Reflect.has(props, 'defaultFullscreen')) {
|
if (Reflect.has(props, 'defaultFullscreen')) {
|
||||||
fullScreenRef.value = !!props.defaultFullscreen;
|
fullScreenRef.value = !!props.defaultFullscreen;
|
||||||
@ -230,7 +230,7 @@
|
|||||||
fullScreenRef,
|
fullScreenRef,
|
||||||
getMergeProps,
|
getMergeProps,
|
||||||
handleOk,
|
handleOk,
|
||||||
visibleRef,
|
openRef,
|
||||||
omit,
|
omit,
|
||||||
modalWrapperRef,
|
modalWrapperRef,
|
||||||
handleExtHeight,
|
handleExtHeight,
|
||||||
|
@ -11,10 +11,10 @@ export default defineComponent({
|
|||||||
props: basicProps as any,
|
props: basicProps as any,
|
||||||
emits: ['cancel'],
|
emits: ['cancel'],
|
||||||
setup(props, { slots, emit }) {
|
setup(props, { slots, emit }) {
|
||||||
const { visible, draggable, destroyOnClose } = toRefs(props);
|
const { open, draggable, destroyOnClose } = toRefs(props);
|
||||||
const attrs = useAttrs();
|
const attrs = useAttrs();
|
||||||
useModalDragMove({
|
useModalDragMove({
|
||||||
visible,
|
open,
|
||||||
destroyOnClose,
|
destroyOnClose,
|
||||||
draggable,
|
draggable,
|
||||||
});
|
});
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
minHeight: { type: Number, default: 200 },
|
minHeight: { type: Number, default: 200 },
|
||||||
height: { type: Number },
|
height: { type: Number },
|
||||||
footerOffset: { type: Number, default: 0 },
|
footerOffset: { type: Number, default: 0 },
|
||||||
visible: { type: Boolean },
|
open: { type: Boolean },
|
||||||
fullScreen: { type: Boolean },
|
fullScreen: { type: Boolean },
|
||||||
loadingTip: { type: String },
|
loadingTip: { type: String },
|
||||||
};
|
};
|
||||||
@ -112,8 +112,8 @@
|
|||||||
|
|
||||||
async function setModalHeight() {
|
async function setModalHeight() {
|
||||||
// 解决在弹窗关闭的时候监听还存在,导致再次打开弹窗没有高度
|
// 解决在弹窗关闭的时候监听还存在,导致再次打开弹窗没有高度
|
||||||
// 加上这个,就必须在使用的时候传递父级的visible
|
// 加上这个,就必须在使用的时候传递父级的open
|
||||||
if (!props.visible) return;
|
if (!props.open) return;
|
||||||
const wrapperRefDom = unref(wrapperRef);
|
const wrapperRefDom = unref(wrapperRef);
|
||||||
if (!wrapperRefDom) return;
|
if (!wrapperRefDom) return;
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ import { error } from '/@/utils/log';
|
|||||||
|
|
||||||
const dataTransfer = reactive<any>({});
|
const dataTransfer = reactive<any>({});
|
||||||
|
|
||||||
const visibleData = reactive<{ [key: number]: boolean }>({});
|
const openData = reactive<{ [key: number]: boolean }>({});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: Applicable to independent modal and call outside
|
* @description: Applicable to independent modal and call outside
|
||||||
@ -49,8 +49,8 @@ export function useModal(): UseModalReturnType {
|
|||||||
|
|
||||||
modal.value = modalMethod;
|
modal.value = modalMethod;
|
||||||
loaded.value = true;
|
loaded.value = true;
|
||||||
modalMethod.emitVisible = (visible: boolean, uid: number) => {
|
modalMethod.emitOpen = (open: boolean, uid: number) => {
|
||||||
visibleData[uid] = visible;
|
openData[uid] = open;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,17 +67,17 @@ export function useModal(): UseModalReturnType {
|
|||||||
getInstance()?.setModalProps(props);
|
getInstance()?.setModalProps(props);
|
||||||
},
|
},
|
||||||
|
|
||||||
getVisible: computed((): boolean => {
|
getOpen: computed((): boolean => {
|
||||||
return visibleData[~~unref(uid)];
|
return openData[~~unref(uid)];
|
||||||
}),
|
}),
|
||||||
|
|
||||||
redoModalHeight: () => {
|
redoModalHeight: () => {
|
||||||
getInstance()?.redoModalHeight?.();
|
getInstance()?.redoModalHeight?.();
|
||||||
},
|
},
|
||||||
|
|
||||||
openModal: <T = any>(visible = true, data?: T, openOnSet = true): void => {
|
openModal: <T = any>(open = true, data?: T, openOnSet = true): void => {
|
||||||
getInstance()?.setModalProps({
|
getInstance()?.setModalProps({
|
||||||
visible: visible,
|
open,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!data) return;
|
if (!data) return;
|
||||||
@ -94,7 +94,7 @@ export function useModal(): UseModalReturnType {
|
|||||||
},
|
},
|
||||||
|
|
||||||
closeModal: () => {
|
closeModal: () => {
|
||||||
getInstance()?.setModalProps({ visible: false });
|
getInstance()?.setModalProps({ open: false });
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
return [register, methods];
|
return [register, methods];
|
||||||
@ -138,8 +138,8 @@ export const useModalInner = (callbackFn?: Fn): UseModalInnerReturnType => {
|
|||||||
changeLoading: (loading = true) => {
|
changeLoading: (loading = true) => {
|
||||||
getInstance()?.setModalProps({ loading });
|
getInstance()?.setModalProps({ loading });
|
||||||
},
|
},
|
||||||
getVisible: computed((): boolean => {
|
getOpen: computed((): boolean => {
|
||||||
return visibleData[~~unref(uidRef)];
|
return openData[~~unref(uidRef)];
|
||||||
}),
|
}),
|
||||||
|
|
||||||
changeOkLoading: (loading = true) => {
|
changeOkLoading: (loading = true) => {
|
||||||
@ -147,7 +147,7 @@ export const useModalInner = (callbackFn?: Fn): UseModalInnerReturnType => {
|
|||||||
},
|
},
|
||||||
|
|
||||||
closeModal: () => {
|
closeModal: () => {
|
||||||
getInstance()?.setModalProps({ visible: false });
|
getInstance()?.setModalProps({ open: false });
|
||||||
},
|
},
|
||||||
|
|
||||||
setModalProps: (props: Partial<ModalProps>) => {
|
setModalProps: (props: Partial<ModalProps>) => {
|
||||||
|
@ -4,7 +4,7 @@ import { useTimeoutFn } from '@vben/hooks';
|
|||||||
export interface UseModalDragMoveContext {
|
export interface UseModalDragMoveContext {
|
||||||
draggable: Ref<boolean>;
|
draggable: Ref<boolean>;
|
||||||
destroyOnClose: Ref<boolean | undefined> | undefined;
|
destroyOnClose: Ref<boolean | undefined> | undefined;
|
||||||
visible: Ref<boolean>;
|
open: Ref<boolean>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useModalDragMove(context: UseModalDragMoveContext) {
|
export function useModalDragMove(context: UseModalDragMoveContext) {
|
||||||
@ -97,7 +97,7 @@ export function useModalDragMove(context: UseModalDragMoveContext) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
if (!unref(context.visible) || !unref(context.draggable)) {
|
if (!unref(context.open) || !unref(context.draggable)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
useTimeoutFn(() => {
|
useTimeoutFn(() => {
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.ant-modal {
|
.vben-basic-modal .ant-modal {
|
||||||
width: 520px;
|
width: 520px;
|
||||||
padding-bottom: 0;
|
padding-bottom: 0;
|
||||||
|
|
||||||
@ -51,6 +51,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&-content {
|
&-content {
|
||||||
|
padding: 12px 8px !important;
|
||||||
box-shadow: 0 4px 8px 0 rgb(0 0 0 / 20%), 0 6px 20px 0 rgb(0 0 0 / 19%);
|
box-shadow: 0 4px 8px 0 rgb(0 0 0 / 20%), 0 6px 20px 0 rgb(0 0 0 / 19%);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,7 +62,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&-close {
|
&-close {
|
||||||
|
width: auto !important;
|
||||||
outline: none;
|
outline: none;
|
||||||
|
background: #fff !important;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ import { useI18n } from '/@/hooks/web/useI18n';
|
|||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
|
||||||
export const modalProps = {
|
export const modalProps = {
|
||||||
visible: { type: Boolean },
|
open: { type: Boolean },
|
||||||
scrollTop: { type: Boolean, default: true },
|
scrollTop: { type: Boolean, default: true },
|
||||||
height: { type: Number },
|
height: { type: Number },
|
||||||
minHeight: { type: Number },
|
minHeight: { type: Number },
|
||||||
@ -73,7 +73,7 @@ export const basicProps = Object.assign({}, modalProps, {
|
|||||||
|
|
||||||
title: { type: String },
|
title: { type: String },
|
||||||
|
|
||||||
visible: { type: Boolean },
|
open: { type: Boolean },
|
||||||
|
|
||||||
width: [String, Number] as PropType<string | number>,
|
width: [String, Number] as PropType<string | number>,
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import type { CSSProperties, VNodeChild, ComputedRef } from 'vue';
|
|||||||
*/
|
*/
|
||||||
export interface ModalMethods {
|
export interface ModalMethods {
|
||||||
setModalProps: (props: Partial<ModalProps>) => void;
|
setModalProps: (props: Partial<ModalProps>) => void;
|
||||||
emitVisible?: (visible: boolean, uid: number) => void;
|
emitOpen?: (open: boolean, uid: number) => void;
|
||||||
redoModalHeight?: () => void;
|
redoModalHeight?: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -14,7 +14,7 @@ export type RegisterFn = (modalMethods: ModalMethods, uuid?: string) => void;
|
|||||||
export interface ReturnMethods extends ModalMethods {
|
export interface ReturnMethods extends ModalMethods {
|
||||||
openModal: <T = any>(props?: boolean, data?: T, openOnSet?: boolean) => void;
|
openModal: <T = any>(props?: boolean, data?: T, openOnSet?: boolean) => void;
|
||||||
closeModal: () => void;
|
closeModal: () => void;
|
||||||
getVisible?: ComputedRef<boolean>;
|
getOpen?: ComputedRef<boolean>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type UseModalReturnType = [RegisterFn, ReturnMethods];
|
export type UseModalReturnType = [RegisterFn, ReturnMethods];
|
||||||
@ -23,7 +23,7 @@ export interface ReturnInnerMethods extends ModalMethods {
|
|||||||
closeModal: () => void;
|
closeModal: () => void;
|
||||||
changeLoading: (loading: boolean) => void;
|
changeLoading: (loading: boolean) => void;
|
||||||
changeOkLoading: (loading: boolean) => void;
|
changeOkLoading: (loading: boolean) => void;
|
||||||
getVisible?: ComputedRef<boolean>;
|
getOpen?: ComputedRef<boolean>;
|
||||||
redoModalHeight: () => void;
|
redoModalHeight: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ export interface ModalProps {
|
|||||||
// 是否可以进行全屏
|
// 是否可以进行全屏
|
||||||
canFullscreen?: boolean;
|
canFullscreen?: boolean;
|
||||||
defaultFullscreen?: boolean;
|
defaultFullscreen?: boolean;
|
||||||
visible?: boolean;
|
open?: boolean;
|
||||||
// 温馨提醒信息
|
// 温馨提醒信息
|
||||||
helpMessage: string | string[];
|
helpMessage: string | string[];
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ export interface ModalWrapperProps {
|
|||||||
modalFooterHeight: number;
|
modalFooterHeight: number;
|
||||||
minHeight: number;
|
minHeight: number;
|
||||||
height: number;
|
height: number;
|
||||||
visible: boolean;
|
open: boolean;
|
||||||
fullScreen: boolean;
|
fullScreen: boolean;
|
||||||
useWrapper: boolean;
|
useWrapper: boolean;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<Modal
|
<Modal
|
||||||
v-model:visible="visible"
|
v-model:open="open"
|
||||||
:title="title"
|
:title="title"
|
||||||
@ok="handleSubmit"
|
@ok="handleSubmit"
|
||||||
:destroyOnClose="true"
|
:destroyOnClose="true"
|
||||||
@ -20,7 +20,7 @@
|
|||||||
import { FormSchema } from '/@/components/Form';
|
import { FormSchema } from '/@/components/Form';
|
||||||
import { BasicForm, useForm } from '/@/components/Form/index';
|
import { BasicForm, useForm } from '/@/components/Form/index';
|
||||||
|
|
||||||
const visible = ref<boolean>(true);
|
const open = ref<boolean>(true);
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
title: string;
|
title: string;
|
||||||
addFormSchemas: FormSchema[];
|
addFormSchemas: FormSchema[];
|
||||||
@ -42,7 +42,7 @@
|
|||||||
if (props.onOK) {
|
if (props.onOK) {
|
||||||
await props.onOK(row.txt);
|
await props.onOK(row.txt);
|
||||||
}
|
}
|
||||||
visible.value = false;
|
open.value = false;
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -20,9 +20,10 @@
|
|||||||
placement="right"
|
placement="right"
|
||||||
:overlayClassName="`${prefixCls}-menu-popover`"
|
:overlayClassName="`${prefixCls}-menu-popover`"
|
||||||
v-else
|
v-else
|
||||||
:visible="getIsOpend"
|
:open="getIsOpend"
|
||||||
@visible-change="handleVisibleChange"
|
@on-open-change="handleVisibleChange"
|
||||||
:overlayStyle="getOverlayStyle"
|
:overlayStyle="getOverlayStyle"
|
||||||
|
:overlayInnerStyle="{ padding: 0 }"
|
||||||
:align="{ offset: [0, 0] }"
|
:align="{ offset: [0, 0] }"
|
||||||
>
|
>
|
||||||
<div :class="getSubClass" v-bind="getEvents(false)">
|
<div :class="getSubClass" v-bind="getEvents(false)">
|
||||||
|
@ -80,7 +80,7 @@ export interface ColumnProps<T> {
|
|||||||
* Whether filterDropdown is visible
|
* Whether filterDropdown is visible
|
||||||
* @type boolean
|
* @type boolean
|
||||||
*/
|
*/
|
||||||
filterDropdownVisible?: boolean;
|
filterDropdownOpen?: boolean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether the dataSource is filtered
|
* Whether the dataSource is filtered
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<Header :class="getHeaderClass">
|
<Layout.Header :class="getHeaderClass" style="height: auto; padding-inline: 0">
|
||||||
<!-- left start -->
|
<!-- left start -->
|
||||||
<div :class="`${prefixCls}-left`">
|
<div :class="`${prefixCls}-left`">
|
||||||
<!-- logo -->
|
<!-- logo -->
|
||||||
@ -21,7 +21,7 @@
|
|||||||
<!-- left end -->
|
<!-- left end -->
|
||||||
|
|
||||||
<!-- menu start -->
|
<!-- menu start -->
|
||||||
<div :class="`${prefixCls}-menu`" v-if="getShowTopMenu && !getIsMobile">
|
<div v-if="getShowTopMenu && !getIsMobile" :class="`${prefixCls}-menu`">
|
||||||
<LayoutMenu
|
<LayoutMenu
|
||||||
:isHorizontal="true"
|
:isHorizontal="true"
|
||||||
:theme="getHeaderTheme"
|
:theme="getHeaderTheme"
|
||||||
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
<!-- action -->
|
<!-- action -->
|
||||||
<div :class="`${prefixCls}-action`">
|
<div :class="`${prefixCls}-action`">
|
||||||
<AppSearch :class="`${prefixCls}-action__item `" v-if="getShowSearch" />
|
<AppSearch v-if="getShowSearch" :class="`${prefixCls}-action__item `" />
|
||||||
|
|
||||||
<ErrorAction v-if="getUseErrorHandle" :class="`${prefixCls}-action__item error-action`" />
|
<ErrorAction v-if="getUseErrorHandle" :class="`${prefixCls}-action__item error-action`" />
|
||||||
|
|
||||||
@ -52,54 +52,36 @@
|
|||||||
|
|
||||||
<SettingDrawer v-if="getShowSetting" :class="`${prefixCls}-action__item`" />
|
<SettingDrawer v-if="getShowSetting" :class="`${prefixCls}-action__item`" />
|
||||||
</div>
|
</div>
|
||||||
</Header>
|
</Layout.Header>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts" setup>
|
||||||
import { defineComponent, unref, computed } from 'vue';
|
|
||||||
|
|
||||||
import { propTypes } from '/@/utils/propTypes';
|
|
||||||
|
|
||||||
import { Layout } from 'ant-design-vue';
|
import { Layout } from 'ant-design-vue';
|
||||||
import { AppLogo, AppSearch, AppLocalePicker } from '/@/components/Application';
|
import { computed, unref } from 'vue';
|
||||||
|
|
||||||
|
import { AppLocalePicker, AppLogo, AppSearch } from '@/components/Application';
|
||||||
|
import { SettingButtonPositionEnum } from '@/enums/appEnum';
|
||||||
|
import { MenuModeEnum, MenuSplitTyeEnum } from '@/enums/menuEnum';
|
||||||
|
import { useHeaderSetting } from '@/hooks/setting/useHeaderSetting';
|
||||||
|
import { useMenuSetting } from '@/hooks/setting/useMenuSetting';
|
||||||
|
import { useRootSetting } from '@/hooks/setting/useRootSetting';
|
||||||
|
import { useAppInject } from '@/hooks/web/useAppInject';
|
||||||
|
import { useDesign } from '@/hooks/web/useDesign';
|
||||||
|
import { useLocale } from '@/locales/useLocale';
|
||||||
|
import { createAsyncComponent } from '@/utils/factory/createAsyncComponent';
|
||||||
|
import { propTypes } from '@/utils/propTypes';
|
||||||
|
|
||||||
import LayoutMenu from '../menu/index.vue';
|
import LayoutMenu from '../menu/index.vue';
|
||||||
import LayoutTrigger from '../trigger/index.vue';
|
import LayoutTrigger from '../trigger/index.vue';
|
||||||
|
import { ErrorAction, FullScreen, LayoutBreadcrumb, Notify, UserDropDown } from './components';
|
||||||
|
|
||||||
import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
|
const SettingDrawer = createAsyncComponent(() => import('@/layouts/default/setting/index.vue'), {
|
||||||
import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
|
|
||||||
import { useRootSetting } from '/@/hooks/setting/useRootSetting';
|
|
||||||
|
|
||||||
import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum';
|
|
||||||
import { SettingButtonPositionEnum } from '/@/enums/appEnum';
|
|
||||||
|
|
||||||
import { UserDropDown, LayoutBreadcrumb, FullScreen, Notify, ErrorAction } from './components';
|
|
||||||
import { useAppInject } from '/@/hooks/web/useAppInject';
|
|
||||||
import { useDesign } from '/@/hooks/web/useDesign';
|
|
||||||
|
|
||||||
import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
|
|
||||||
import { useLocale } from '/@/locales/useLocale';
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
name: 'LayoutHeader',
|
|
||||||
components: {
|
|
||||||
Header: Layout.Header,
|
|
||||||
AppLogo,
|
|
||||||
LayoutTrigger,
|
|
||||||
LayoutBreadcrumb,
|
|
||||||
LayoutMenu,
|
|
||||||
UserDropDown,
|
|
||||||
AppLocalePicker,
|
|
||||||
FullScreen,
|
|
||||||
Notify,
|
|
||||||
AppSearch,
|
|
||||||
ErrorAction,
|
|
||||||
SettingDrawer: createAsyncComponent(() => import('/@/layouts/default/setting/index.vue'), {
|
|
||||||
loading: true,
|
loading: true,
|
||||||
}),
|
});
|
||||||
},
|
defineOptions({ name: 'LayoutHeader' });
|
||||||
props: {
|
|
||||||
|
const props = defineProps({
|
||||||
fixed: propTypes.bool,
|
fixed: propTypes.bool,
|
||||||
},
|
});
|
||||||
setup(props) {
|
|
||||||
const { prefixCls } = useDesign('layout-header');
|
const { prefixCls } = useDesign('layout-header');
|
||||||
const {
|
const {
|
||||||
getShowTopMenu,
|
getShowTopMenu,
|
||||||
@ -109,8 +91,7 @@
|
|||||||
getMenuWidth,
|
getMenuWidth,
|
||||||
getIsMixSidebar,
|
getIsMixSidebar,
|
||||||
} = useMenuSetting();
|
} = useMenuSetting();
|
||||||
const { getUseErrorHandle, getShowSettingButton, getSettingButtonPosition } =
|
const { getUseErrorHandle, getShowSettingButton, getSettingButtonPosition } = useRootSetting();
|
||||||
useRootSetting();
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
getHeaderTheme,
|
getHeaderTheme,
|
||||||
@ -166,32 +147,6 @@
|
|||||||
const getMenuMode = computed(() => {
|
const getMenuMode = computed(() => {
|
||||||
return unref(getSplit) ? MenuModeEnum.HORIZONTAL : null;
|
return unref(getSplit) ? MenuModeEnum.HORIZONTAL : null;
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
|
||||||
prefixCls,
|
|
||||||
getHeaderClass,
|
|
||||||
getShowHeaderLogo,
|
|
||||||
getHeaderTheme,
|
|
||||||
getShowHeaderTrigger,
|
|
||||||
getIsMobile,
|
|
||||||
getShowBread,
|
|
||||||
getShowContent,
|
|
||||||
getSplitType,
|
|
||||||
getSplit,
|
|
||||||
getMenuMode,
|
|
||||||
getShowTopMenu,
|
|
||||||
getShowLocalePicker,
|
|
||||||
getShowFullScreen,
|
|
||||||
getShowNotice,
|
|
||||||
getUseErrorHandle,
|
|
||||||
getLogoWidth,
|
|
||||||
getIsMixSidebar,
|
|
||||||
getShowSettingButton,
|
|
||||||
getShowSetting,
|
|
||||||
getShowSearch,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="less">
|
<style lang="less">
|
||||||
@import url('./index.less');
|
@import url('./index.less');
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
v-if="getMenuFixed && !getIsMobile"
|
v-if="getMenuFixed && !getIsMobile"
|
||||||
:style="getHiddenDomStyle"
|
|
||||||
v-show="showClassSideBarRef"
|
v-show="showClassSideBarRef"
|
||||||
|
:style="getHiddenDomStyle"
|
||||||
></div>
|
></div>
|
||||||
<Sider
|
<Layout.Sider
|
||||||
v-show="showClassSideBarRef"
|
v-show="showClassSideBarRef"
|
||||||
ref="sideRef"
|
ref="sideRef"
|
||||||
breakpoint="lg"
|
breakpoint="lg"
|
||||||
@ -14,34 +14,33 @@
|
|||||||
:collapsed="getCollapsed"
|
:collapsed="getCollapsed"
|
||||||
:collapsedWidth="getCollapsedWidth"
|
:collapsedWidth="getCollapsedWidth"
|
||||||
:theme="getMenuTheme"
|
:theme="getMenuTheme"
|
||||||
@breakpoint="onBreakpointChange"
|
|
||||||
:trigger="getTrigger"
|
:trigger="getTrigger"
|
||||||
v-bind="getTriggerAttr"
|
v-bind="getTriggerAttr"
|
||||||
|
@breakpoint="onBreakpointChange"
|
||||||
>
|
>
|
||||||
<template #trigger v-if="getShowTrigger">
|
<template v-if="getShowTrigger" #trigger>
|
||||||
<LayoutTrigger />
|
<LayoutTrigger />
|
||||||
</template>
|
</template>
|
||||||
<LayoutMenu :theme="getMenuTheme" :menuMode="getMode" :splitType="getSplitType" />
|
<LayoutMenu :theme="getMenuTheme" :menuMode="getMode" :splitType="getSplitType" />
|
||||||
<DragBar ref="dragBarRef" />
|
<DragBar ref="dragBarRef" />
|
||||||
</Sider>
|
</Layout.Sider>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts" setup>
|
||||||
import { computed, defineComponent, ref, unref, CSSProperties, h } from 'vue';
|
|
||||||
|
|
||||||
import { Layout } from 'ant-design-vue';
|
import { Layout } from 'ant-design-vue';
|
||||||
import LayoutMenu from '../menu/index.vue';
|
import { computed, CSSProperties, h, ref, unref } from 'vue';
|
||||||
import LayoutTrigger from '/@/layouts/default/trigger/index.vue';
|
|
||||||
import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum';
|
import { MenuModeEnum, MenuSplitTyeEnum } from '@/enums/menuEnum';
|
||||||
import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
|
import { useMenuSetting } from '@/hooks/setting/useMenuSetting';
|
||||||
import { useTrigger, useDragLine, useSiderEvent } from './useLayoutSider';
|
import { useAppInject } from '@/hooks/web/useAppInject';
|
||||||
import { useAppInject } from '/@/hooks/web/useAppInject';
|
import { useDesign } from '@/hooks/web/useDesign';
|
||||||
import { useDesign } from '/@/hooks/web/useDesign';
|
import LayoutTrigger from '@/layouts/default/trigger/index.vue';
|
||||||
import DragBar from './DragBar.vue';
|
|
||||||
|
import LayoutMenu from '../menu/index.vue';
|
||||||
|
import DragBar from './DragBar.vue';
|
||||||
|
import { useDragLine, useSiderEvent, useTrigger } from './useLayoutSider';
|
||||||
|
|
||||||
|
defineOptions({ name: 'LayoutSideBar' });
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
name: 'LayoutSideBar',
|
|
||||||
components: { Sider: Layout.Sider, LayoutMenu, DragBar, LayoutTrigger },
|
|
||||||
setup() {
|
|
||||||
const dragBarRef = ref(null);
|
const dragBarRef = ref(null);
|
||||||
const sideRef = ref(null);
|
const sideRef = ref(null);
|
||||||
|
|
||||||
@ -54,7 +53,6 @@
|
|||||||
getMenuHidden,
|
getMenuHidden,
|
||||||
getMenuFixed,
|
getMenuFixed,
|
||||||
getIsMixMode,
|
getIsMixMode,
|
||||||
toggleCollapsed,
|
|
||||||
} = useMenuSetting();
|
} = useMenuSetting();
|
||||||
|
|
||||||
const { prefixCls } = useDesign('layout-sideBar');
|
const { prefixCls } = useDesign('layout-sideBar');
|
||||||
@ -92,7 +90,7 @@
|
|||||||
const getHiddenDomStyle = computed((): CSSProperties => {
|
const getHiddenDomStyle = computed((): CSSProperties => {
|
||||||
const width = `${unref(getRealWidth)}px`;
|
const width = `${unref(getRealWidth)}px`;
|
||||||
return {
|
return {
|
||||||
width: width,
|
width,
|
||||||
overflow: 'hidden',
|
overflow: 'hidden',
|
||||||
flex: `0 0 ${width}`,
|
flex: `0 0 ${width}`,
|
||||||
maxWidth: width,
|
maxWidth: width,
|
||||||
@ -104,30 +102,6 @@
|
|||||||
// 在此处使用计算量可能会导致sider异常
|
// 在此处使用计算量可能会导致sider异常
|
||||||
// andv 更新后,如果trigger插槽可用,则此处代码可废弃
|
// andv 更新后,如果trigger插槽可用,则此处代码可废弃
|
||||||
const getTrigger = h(LayoutTrigger);
|
const getTrigger = h(LayoutTrigger);
|
||||||
|
|
||||||
return {
|
|
||||||
prefixCls,
|
|
||||||
sideRef,
|
|
||||||
dragBarRef,
|
|
||||||
getIsMobile,
|
|
||||||
getHiddenDomStyle,
|
|
||||||
getSiderClass,
|
|
||||||
getTrigger,
|
|
||||||
getTriggerAttr,
|
|
||||||
getCollapsedWidth,
|
|
||||||
getMenuFixed,
|
|
||||||
showClassSideBarRef,
|
|
||||||
getMenuWidth,
|
|
||||||
getCollapsed,
|
|
||||||
getMenuTheme,
|
|
||||||
onBreakpointChange,
|
|
||||||
getMode,
|
|
||||||
getSplitType,
|
|
||||||
getShowTrigger,
|
|
||||||
toggleCollapsed,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="less">
|
<style lang="less">
|
||||||
@prefix-cls: ~'@{namespace}-layout-sideBar';
|
@prefix-cls: ~'@{namespace}-layout-sideBar';
|
||||||
@ -136,7 +110,7 @@
|
|||||||
z-index: @layout-sider-fixed-z-index;
|
z-index: @layout-sider-fixed-z-index;
|
||||||
|
|
||||||
&--fixed {
|
&--fixed {
|
||||||
position: fixed;
|
position: fixed !important;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
placement="left"
|
placement="left"
|
||||||
:class="prefixCls"
|
:class="prefixCls"
|
||||||
:width="getMenuWidth"
|
:width="getMenuWidth"
|
||||||
:getContainer="null"
|
:getContainer="false"
|
||||||
:visible="!getCollapsed"
|
:open="!getCollapsed"
|
||||||
@close="handleClose"
|
@close="handleClose"
|
||||||
>
|
>
|
||||||
<Sider />
|
<Sider />
|
||||||
@ -13,6 +13,7 @@
|
|||||||
<MixSider v-else-if="getIsMixSidebar" />
|
<MixSider v-else-if="getIsMixSidebar" />
|
||||||
<Sider v-else />
|
<Sider v-else />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent } from 'vue';
|
import { defineComponent } from 'vue';
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import 'uno.css';
|
import 'uno.css';
|
||||||
import '@/design/index.less';
|
import '@/design/index.less';
|
||||||
import '@/components/VxeTable/src/css/index.scss';
|
import '@/components/VxeTable/src/css/index.scss';
|
||||||
import 'ant-design-vue/dist/antd.less';
|
import 'ant-design-vue/dist/reset.css';
|
||||||
// Register icon sprite
|
// Register icon sprite
|
||||||
import 'virtual:svg-icons-register';
|
import 'virtual:svg-icons-register';
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
@register="register"
|
@register="register"
|
||||||
title="Modal Title"
|
title="Modal Title"
|
||||||
:helpMessage="['提示1', '提示2']"
|
:helpMessage="['提示1', '提示2']"
|
||||||
@visible-change="handleShow"
|
@open-change="handleShow"
|
||||||
>
|
>
|
||||||
<template #insertFooter>
|
<template #insertFooter>
|
||||||
<a-button type="primary" danger @click="setLines" :disabled="loading">点我更新内容</a-button>
|
<a-button type="primary" danger @click="setLines" :disabled="loading">点我更新内容</a-button>
|
||||||
@ -38,8 +38,8 @@
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
function handleShow(visible: boolean) {
|
function handleShow(open: boolean) {
|
||||||
if (visible) {
|
if (open) {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
setModalProps({ loading: true, confirmLoading: true });
|
setModalProps({ loading: true, confirmLoading: true });
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
/>
|
/>
|
||||||
<a-button type="primary" class="my-4" @click="handleCreatePrompt"> Prompt </a-button>
|
<a-button type="primary" class="my-4" @click="handleCreatePrompt"> Prompt </a-button>
|
||||||
|
|
||||||
<component :is="currentModal" v-model:visible="modalVisible" :userData="userData" />
|
<component :is="currentModal" v-model:open="modalOpen" :userData="userData" />
|
||||||
|
|
||||||
<Modal1 @register="register1" :minHeight="100" />
|
<Modal1 @register="register1" :minHeight="100" />
|
||||||
<Modal2 @register="register2" />
|
<Modal2 @register="register2" />
|
||||||
@ -59,7 +59,7 @@
|
|||||||
const [register2, { openModal: openModal2 }] = useModal();
|
const [register2, { openModal: openModal2 }] = useModal();
|
||||||
const [register3, { openModal: openModal3 }] = useModal();
|
const [register3, { openModal: openModal3 }] = useModal();
|
||||||
const [register4, { openModal: openModal4 }] = useModal();
|
const [register4, { openModal: openModal4 }] = useModal();
|
||||||
const modalVisible = ref<Boolean>(false);
|
const modalOpen = ref<Boolean>(false);
|
||||||
const userData = ref<any>(null);
|
const userData = ref<any>(null);
|
||||||
|
|
||||||
function send() {
|
function send() {
|
||||||
@ -96,7 +96,7 @@
|
|||||||
// passing data through `userData` prop
|
// passing data through `userData` prop
|
||||||
userData.value = { data: Math.random(), info: 'Info222' };
|
userData.value = { data: Math.random(), info: 'Info222' };
|
||||||
// open the target modal
|
// open the target modal
|
||||||
modalVisible.value = true;
|
modalOpen.value = true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,7 +122,7 @@
|
|||||||
openModal3,
|
openModal3,
|
||||||
register4,
|
register4,
|
||||||
openModal4,
|
openModal4,
|
||||||
modalVisible,
|
modalOpen,
|
||||||
userData,
|
userData,
|
||||||
openTargetModal,
|
openTargetModal,
|
||||||
send,
|
send,
|
||||||
|
@ -907,7 +907,7 @@ const componentAttrs: IBaseComponentProps = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'dropdownClassName',
|
name: 'popupClassName',
|
||||||
label: '下拉菜单的 className 属性',
|
label: '下拉菜单的 className 属性',
|
||||||
component: 'Input',
|
component: 'Input',
|
||||||
componentProps: {
|
componentProps: {
|
||||||
|
Loading…
Reference in New Issue
Block a user