Commit 5091a875ab520c51aec4c57cdd200d68016958ab
1 parent
5c273534
feat(modal): add minHeight and height prop #156
Showing
6 changed files
with
21 additions
and
13 deletions
src/components/Form/src/BasicForm.vue
@@ -31,17 +31,7 @@ | @@ -31,17 +31,7 @@ | ||
31 | import type { AdvanceState } from './types/hooks'; | 31 | import type { AdvanceState } from './types/hooks'; |
32 | import type { CSSProperties, Ref, WatchStopHandle } from 'vue'; | 32 | import type { CSSProperties, Ref, WatchStopHandle } from 'vue'; |
33 | 33 | ||
34 | - import { | ||
35 | - defineComponent, | ||
36 | - reactive, | ||
37 | - ref, | ||
38 | - computed, | ||
39 | - unref, | ||
40 | - onMounted, | ||
41 | - watch, | ||
42 | - toRefs, | ||
43 | - toRaw, | ||
44 | - } from 'vue'; | 34 | + import { defineComponent, reactive, ref, computed, unref, onMounted, watch, toRefs } from 'vue'; |
45 | import { Form, Row } from 'ant-design-vue'; | 35 | import { Form, Row } from 'ant-design-vue'; |
46 | import FormItem from './components/FormItem'; | 36 | import FormItem from './components/FormItem'; |
47 | import FormAction from './components/FormAction.vue'; | 37 | import FormAction from './components/FormAction.vue'; |
src/components/Form/src/hooks/useFormValues.ts
1 | import { isArray, isFunction, isObject, isString } from '/@/utils/is'; | 1 | import { isArray, isFunction, isObject, isString } from '/@/utils/is'; |
2 | import moment from 'moment'; | 2 | import moment from 'moment'; |
3 | -import { unref } from 'vue'; | 3 | +import { unref, nextTick } from 'vue'; |
4 | import type { Ref, ComputedRef } from 'vue'; | 4 | import type { Ref, ComputedRef } from 'vue'; |
5 | import type { FieldMapToTime, FormSchema } from '../types/form'; | 5 | import type { FieldMapToTime, FormSchema } from '../types/form'; |
6 | +import { useModalContext } from '/@/components/Modal'; | ||
6 | 7 | ||
7 | interface UseFormValuesContext { | 8 | interface UseFormValuesContext { |
8 | transformDateFuncRef: Ref<Fn>; | 9 | transformDateFuncRef: Ref<Fn>; |
@@ -18,6 +19,7 @@ export function useFormValues({ | @@ -18,6 +19,7 @@ export function useFormValues({ | ||
18 | getSchema, | 19 | getSchema, |
19 | formModel, | 20 | formModel, |
20 | }: UseFormValuesContext) { | 21 | }: UseFormValuesContext) { |
22 | + const modalFn = useModalContext(); | ||
21 | // Processing form values | 23 | // Processing form values |
22 | function handleFormValues(values: Recordable) { | 24 | function handleFormValues(values: Recordable) { |
23 | if (!isObject(values)) { | 25 | if (!isObject(values)) { |
@@ -81,6 +83,10 @@ export function useFormValues({ | @@ -81,6 +83,10 @@ export function useFormValues({ | ||
81 | } | 83 | } |
82 | }); | 84 | }); |
83 | defaultValueRef.value = obj; | 85 | defaultValueRef.value = obj; |
86 | + nextTick(() => { | ||
87 | + // Solve the problem of modal adaptive height calculation when the form is placed in the modal | ||
88 | + modalFn?.redoModalHeight?.(); | ||
89 | + }); | ||
84 | } | 90 | } |
85 | 91 | ||
86 | return { handleFormValues, initDefault }; | 92 | return { handleFormValues, initDefault }; |
src/components/Modal/src/BasicModal.vue
@@ -23,6 +23,8 @@ | @@ -23,6 +23,8 @@ | ||
23 | :fullScreen="fullScreenRef" | 23 | :fullScreen="fullScreenRef" |
24 | ref="modalWrapperRef" | 24 | ref="modalWrapperRef" |
25 | :loading="getProps.loading" | 25 | :loading="getProps.loading" |
26 | + :minHeight="getProps.minHeight" | ||
27 | + :height="getProps.height" | ||
26 | :visible="visibleRef" | 28 | :visible="visibleRef" |
27 | :modalFooterHeight="footer !== undefined && !footer ? 0 : undefined" | 29 | :modalFooterHeight="footer !== undefined && !footer ? 0 : undefined" |
28 | v-bind="omit(getProps.wrapperProps, 'visible')" | 30 | v-bind="omit(getProps.wrapperProps, 'visible')" |
src/components/Modal/src/components/ModalWrapper.vue
@@ -38,6 +38,7 @@ | @@ -38,6 +38,7 @@ | ||
38 | modalHeaderHeight: propTypes.number.def(50), | 38 | modalHeaderHeight: propTypes.number.def(50), |
39 | modalFooterHeight: propTypes.number.def(54), | 39 | modalFooterHeight: propTypes.number.def(54), |
40 | minHeight: propTypes.number.def(200), | 40 | minHeight: propTypes.number.def(200), |
41 | + height: propTypes.number, | ||
41 | footerOffset: propTypes.number.def(0), | 42 | footerOffset: propTypes.number.def(0), |
42 | visible: propTypes.bool, | 43 | visible: propTypes.bool, |
43 | fullScreen: propTypes.bool, | 44 | fullScreen: propTypes.bool, |
@@ -142,7 +143,11 @@ | @@ -142,7 +143,11 @@ | ||
142 | realHeightRef.value = | 143 | realHeightRef.value = |
143 | window.innerHeight - props.modalFooterHeight - props.modalHeaderHeight; | 144 | window.innerHeight - props.modalFooterHeight - props.modalHeaderHeight; |
144 | } else { | 145 | } else { |
145 | - realHeightRef.value = realHeight > maxHeight ? maxHeight : realHeight + 16 + 30; | 146 | + realHeightRef.value = props.height |
147 | + ? props.height | ||
148 | + : realHeight > maxHeight | ||
149 | + ? maxHeight | ||
150 | + : realHeight + 16 + 30; | ||
146 | } | 151 | } |
147 | emit('height-change', unref(realHeightRef)); | 152 | emit('height-change', unref(realHeightRef)); |
148 | } catch (error) { | 153 | } catch (error) { |
src/components/Modal/src/props.ts
@@ -8,6 +8,8 @@ const { t } = useI18n(); | @@ -8,6 +8,8 @@ const { t } = useI18n(); | ||
8 | 8 | ||
9 | export const modalProps = { | 9 | export const modalProps = { |
10 | visible: propTypes.bool, | 10 | visible: propTypes.bool, |
11 | + height: propTypes.number, | ||
12 | + minHeight: propTypes.number, | ||
11 | // open drag | 13 | // open drag |
12 | draggable: propTypes.bool.def(true), | 14 | draggable: propTypes.bool.def(true), |
13 | centered: propTypes.bool, | 15 | centered: propTypes.bool, |
src/components/Modal/src/types.ts
@@ -27,6 +27,8 @@ export interface ReturnInnerMethods extends ModalMethods { | @@ -27,6 +27,8 @@ export interface ReturnInnerMethods extends ModalMethods { | ||
27 | export type UseModalInnerReturnType = [RegisterFn, ReturnInnerMethods]; | 27 | export type UseModalInnerReturnType = [RegisterFn, ReturnInnerMethods]; |
28 | 28 | ||
29 | export interface ModalProps { | 29 | export interface ModalProps { |
30 | + minHeight?: number; | ||
31 | + height?: number; | ||
30 | // 启用wrapper后 底部可以适当增加高度 | 32 | // 启用wrapper后 底部可以适当增加高度 |
31 | wrapperFooterOffset?: number; | 33 | wrapperFooterOffset?: number; |
32 | draggable?: boolean; | 34 | draggable?: boolean; |
@@ -195,6 +197,7 @@ export interface ModalWrapperProps { | @@ -195,6 +197,7 @@ export interface ModalWrapperProps { | ||
195 | modalHeaderHeight: number; | 197 | modalHeaderHeight: number; |
196 | modalFooterHeight: number; | 198 | modalFooterHeight: number; |
197 | minHeight: number; | 199 | minHeight: number; |
200 | + height: number; | ||
198 | visible: boolean; | 201 | visible: boolean; |
199 | fullScreen: boolean; | 202 | fullScreen: boolean; |
200 | useWrapper: boolean; | 203 | useWrapper: boolean; |