提交 5091a875 作者: vben

feat(modal): add minHeight and height prop #156

上级 5c273534
...@@ -31,17 +31,7 @@ ...@@ -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';
......
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({ ...@@ -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({ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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(); ...@@ -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 { ...@@ -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 { ...@@ -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;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论