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:
invalid w 2023-09-08 22:10:07 +08:00 committed by GitHub
parent 607a24632a
commit aaf2fde3cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 651 additions and 479 deletions

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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;
} }
} }

View File

@ -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: {

View File

@ -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.

View File

@ -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);
}, },
}, },

View File

@ -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,

View File

@ -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,
}); });

View File

@ -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;

View File

@ -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>) => {

View File

@ -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(() => {

View File

@ -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;
} }

View File

@ -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>,

View File

@ -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;
} }

View File

@ -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>

View File

@ -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)">

View File

@ -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

View File

@ -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');

View File

@ -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%;

View File

@ -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';

View File

@ -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';

View File

@ -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(() => {

View File

@ -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,

View File

@ -907,7 +907,7 @@ const componentAttrs: IBaseComponentProps = {
}, },
}, },
{ {
name: 'dropdownClassName', name: 'popupClassName',
label: '下拉菜单的 className 属性', label: '下拉菜单的 className 属性',
component: 'Input', component: 'Input',
componentProps: { componentProps: {