feat(modal): add minHeight and height prop #156
This commit is contained in:
parent
5c27353467
commit
5091a875ab
|
|
@ -31,17 +31,7 @@
|
||||||
import type { AdvanceState } from './types/hooks';
|
import type { AdvanceState } from './types/hooks';
|
||||||
import type { CSSProperties, Ref, WatchStopHandle } from 'vue';
|
import type { CSSProperties, Ref, WatchStopHandle } from 'vue';
|
||||||
|
|
||||||
import {
|
import { defineComponent, reactive, ref, computed, unref, onMounted, watch, toRefs } from 'vue';
|
||||||
defineComponent,
|
|
||||||
reactive,
|
|
||||||
ref,
|
|
||||||
computed,
|
|
||||||
unref,
|
|
||||||
onMounted,
|
|
||||||
watch,
|
|
||||||
toRefs,
|
|
||||||
toRaw,
|
|
||||||
} from 'vue';
|
|
||||||
import { Form, Row } from 'ant-design-vue';
|
import { Form, Row } from 'ant-design-vue';
|
||||||
import FormItem from './components/FormItem';
|
import FormItem from './components/FormItem';
|
||||||
import FormAction from './components/FormAction.vue';
|
import FormAction from './components/FormAction.vue';
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
import { isArray, isFunction, isObject, isString } from '/@/utils/is';
|
import { isArray, isFunction, isObject, isString } from '/@/utils/is';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { unref } from 'vue';
|
import { unref, nextTick } from 'vue';
|
||||||
import type { Ref, ComputedRef } from 'vue';
|
import type { Ref, ComputedRef } from 'vue';
|
||||||
import type { FieldMapToTime, FormSchema } from '../types/form';
|
import type { FieldMapToTime, FormSchema } from '../types/form';
|
||||||
|
import { useModalContext } from '/@/components/Modal';
|
||||||
|
|
||||||
interface UseFormValuesContext {
|
interface UseFormValuesContext {
|
||||||
transformDateFuncRef: Ref<Fn>;
|
transformDateFuncRef: Ref<Fn>;
|
||||||
|
|
@ -18,6 +19,7 @@ export function useFormValues({
|
||||||
getSchema,
|
getSchema,
|
||||||
formModel,
|
formModel,
|
||||||
}: UseFormValuesContext) {
|
}: UseFormValuesContext) {
|
||||||
|
const modalFn = useModalContext();
|
||||||
// Processing form values
|
// Processing form values
|
||||||
function handleFormValues(values: Recordable) {
|
function handleFormValues(values: Recordable) {
|
||||||
if (!isObject(values)) {
|
if (!isObject(values)) {
|
||||||
|
|
@ -81,6 +83,10 @@ export function useFormValues({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
defaultValueRef.value = obj;
|
defaultValueRef.value = obj;
|
||||||
|
nextTick(() => {
|
||||||
|
// Solve the problem of modal adaptive height calculation when the form is placed in the modal
|
||||||
|
modalFn?.redoModalHeight?.();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return { handleFormValues, initDefault };
|
return { handleFormValues, initDefault };
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,8 @@
|
||||||
:fullScreen="fullScreenRef"
|
:fullScreen="fullScreenRef"
|
||||||
ref="modalWrapperRef"
|
ref="modalWrapperRef"
|
||||||
:loading="getProps.loading"
|
:loading="getProps.loading"
|
||||||
|
:minHeight="getProps.minHeight"
|
||||||
|
:height="getProps.height"
|
||||||
:visible="visibleRef"
|
:visible="visibleRef"
|
||||||
:modalFooterHeight="footer !== undefined && !footer ? 0 : undefined"
|
:modalFooterHeight="footer !== undefined && !footer ? 0 : undefined"
|
||||||
v-bind="omit(getProps.wrapperProps, 'visible')"
|
v-bind="omit(getProps.wrapperProps, 'visible')"
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@
|
||||||
modalHeaderHeight: propTypes.number.def(50),
|
modalHeaderHeight: propTypes.number.def(50),
|
||||||
modalFooterHeight: propTypes.number.def(54),
|
modalFooterHeight: propTypes.number.def(54),
|
||||||
minHeight: propTypes.number.def(200),
|
minHeight: propTypes.number.def(200),
|
||||||
|
height: propTypes.number,
|
||||||
footerOffset: propTypes.number.def(0),
|
footerOffset: propTypes.number.def(0),
|
||||||
visible: propTypes.bool,
|
visible: propTypes.bool,
|
||||||
fullScreen: propTypes.bool,
|
fullScreen: propTypes.bool,
|
||||||
|
|
@ -142,7 +143,11 @@
|
||||||
realHeightRef.value =
|
realHeightRef.value =
|
||||||
window.innerHeight - props.modalFooterHeight - props.modalHeaderHeight;
|
window.innerHeight - props.modalFooterHeight - props.modalHeaderHeight;
|
||||||
} else {
|
} else {
|
||||||
realHeightRef.value = realHeight > maxHeight ? maxHeight : realHeight + 16 + 30;
|
realHeightRef.value = props.height
|
||||||
|
? props.height
|
||||||
|
: realHeight > maxHeight
|
||||||
|
? maxHeight
|
||||||
|
: realHeight + 16 + 30;
|
||||||
}
|
}
|
||||||
emit('height-change', unref(realHeightRef));
|
emit('height-change', unref(realHeightRef));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ const { t } = useI18n();
|
||||||
|
|
||||||
export const modalProps = {
|
export const modalProps = {
|
||||||
visible: propTypes.bool,
|
visible: propTypes.bool,
|
||||||
|
height: propTypes.number,
|
||||||
|
minHeight: propTypes.number,
|
||||||
// open drag
|
// open drag
|
||||||
draggable: propTypes.bool.def(true),
|
draggable: propTypes.bool.def(true),
|
||||||
centered: propTypes.bool,
|
centered: propTypes.bool,
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@ export interface ReturnInnerMethods extends ModalMethods {
|
||||||
export type UseModalInnerReturnType = [RegisterFn, ReturnInnerMethods];
|
export type UseModalInnerReturnType = [RegisterFn, ReturnInnerMethods];
|
||||||
|
|
||||||
export interface ModalProps {
|
export interface ModalProps {
|
||||||
|
minHeight?: number;
|
||||||
|
height?: number;
|
||||||
// 启用wrapper后 底部可以适当增加高度
|
// 启用wrapper后 底部可以适当增加高度
|
||||||
wrapperFooterOffset?: number;
|
wrapperFooterOffset?: number;
|
||||||
draggable?: boolean;
|
draggable?: boolean;
|
||||||
|
|
@ -195,6 +197,7 @@ export interface ModalWrapperProps {
|
||||||
modalHeaderHeight: number;
|
modalHeaderHeight: number;
|
||||||
modalFooterHeight: number;
|
modalFooterHeight: number;
|
||||||
minHeight: number;
|
minHeight: number;
|
||||||
|
height: number;
|
||||||
visible: boolean;
|
visible: boolean;
|
||||||
fullScreen: boolean;
|
fullScreen: boolean;
|
||||||
useWrapper: boolean;
|
useWrapper: boolean;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue