@tmagic/form 1.3.0-alpha.2 → 1.3.0-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/style.css +21 -0
  2. package/dist/tmagic-form.js +1400 -1187
  3. package/dist/tmagic-form.js.map +1 -1
  4. package/dist/tmagic-form.umd.cjs +1425 -1210
  5. package/dist/tmagic-form.umd.cjs.map +1 -1
  6. package/package.json +10 -11
  7. package/src/Form.vue +14 -2
  8. package/src/FormDialog.vue +20 -6
  9. package/src/FormDrawer.vue +134 -0
  10. package/src/containers/Col.vue +5 -1
  11. package/src/containers/Container.vue +16 -11
  12. package/src/containers/Fieldset.vue +5 -1
  13. package/src/containers/GroupList.vue +7 -2
  14. package/src/containers/GroupListItem.vue +15 -9
  15. package/src/containers/Panel.vue +5 -1
  16. package/src/containers/Row.vue +5 -1
  17. package/src/containers/Step.vue +5 -1
  18. package/src/containers/Table.vue +153 -151
  19. package/src/containers/Tabs.vue +14 -8
  20. package/src/fields/Cascader.vue +7 -13
  21. package/src/fields/Checkbox.vue +7 -13
  22. package/src/fields/CheckboxGroup.vue +9 -15
  23. package/src/fields/ColorPicker.vue +10 -14
  24. package/src/fields/Date.vue +11 -15
  25. package/src/fields/DateTime.vue +12 -16
  26. package/src/fields/Daterange.vue +7 -13
  27. package/src/fields/Display.vue +7 -11
  28. package/src/fields/DynamicField.vue +8 -14
  29. package/src/fields/Hidden.vue +7 -11
  30. package/src/fields/Link.vue +7 -13
  31. package/src/fields/Number.vue +12 -15
  32. package/src/fields/NumberRange.vue +50 -0
  33. package/src/fields/RadioGroup.vue +7 -13
  34. package/src/fields/Select.vue +28 -30
  35. package/src/fields/SelectOptionGroups.vue +7 -3
  36. package/src/fields/SelectOptions.vue +5 -1
  37. package/src/fields/Switch.vue +11 -15
  38. package/src/fields/Text.vue +12 -15
  39. package/src/fields/Textarea.vue +12 -15
  40. package/src/fields/Time.vue +10 -14
  41. package/src/index.ts +43 -37
  42. package/src/schema.ts +27 -5
  43. package/src/theme/form-drawer.scss +11 -0
  44. package/src/theme/index.scss +2 -0
  45. package/src/theme/number-range.scss +8 -0
  46. package/src/theme/panel.scss +6 -0
  47. package/src/utils/config.ts +1 -1
  48. package/src/utils/form.ts +2 -1
  49. package/types/Form.vue.d.ts +11 -6
  50. package/types/FormDialog.vue.d.ts +89 -125
  51. package/types/FormDrawer.vue.d.ts +338 -0
  52. package/types/containers/Col.vue.d.ts +1 -1
  53. package/types/containers/Container.vue.d.ts +6 -3
  54. package/types/containers/Fieldset.vue.d.ts +6 -3
  55. package/types/containers/GroupList.vue.d.ts +1 -1
  56. package/types/containers/GroupListItem.vue.d.ts +1 -1
  57. package/types/containers/Panel.vue.d.ts +3 -3
  58. package/types/containers/Row.vue.d.ts +1 -1
  59. package/types/containers/Step.vue.d.ts +6 -3
  60. package/types/containers/Table.vue.d.ts +9 -6
  61. package/types/containers/Tabs.vue.d.ts +6 -3
  62. package/types/fields/Cascader.vue.d.ts +3 -23
  63. package/types/fields/Checkbox.vue.d.ts +3 -23
  64. package/types/fields/CheckboxGroup.vue.d.ts +3 -23
  65. package/types/fields/ColorPicker.vue.d.ts +2 -24
  66. package/types/fields/Date.vue.d.ts +2 -24
  67. package/types/fields/DateTime.vue.d.ts +2 -24
  68. package/types/fields/Daterange.vue.d.ts +3 -23
  69. package/types/fields/Display.vue.d.ts +2 -18
  70. package/types/fields/DynamicField.vue.d.ts +3 -32
  71. package/types/fields/Hidden.vue.d.ts +2 -18
  72. package/types/fields/Link.vue.d.ts +3 -23
  73. package/types/fields/Number.vue.d.ts +2 -25
  74. package/types/fields/NumberRange.vue.d.ts +12 -0
  75. package/types/fields/RadioGroup.vue.d.ts +3 -23
  76. package/types/fields/Select.vue.d.ts +3 -23
  77. package/types/fields/SelectOptionGroups.vue.d.ts +2 -2
  78. package/types/fields/SelectOptions.vue.d.ts +2 -2
  79. package/types/fields/Switch.vue.d.ts +2 -24
  80. package/types/fields/Text.vue.d.ts +2 -25
  81. package/types/fields/Textarea.vue.d.ts +2 -25
  82. package/types/fields/Time.vue.d.ts +2 -24
  83. package/types/index.d.ts +6 -1
  84. package/types/schema.d.ts +25 -5
  85. package/types/utils/config.d.ts +1 -1
@@ -2,19 +2,15 @@
2
2
  <span v-if="model">{{ model[name] }}</span>
3
3
  </template>
4
4
 
5
- <script setup lang="ts" name="MFormDisplay">
6
- import { DisplayConfig } from '../schema';
5
+ <script setup lang="ts">
6
+ import type { DisplayConfig, FieldProps } from '../schema';
7
7
  import { useAddField } from '../utils/useAddField';
8
8
 
9
- const props = defineProps<{
10
- config: DisplayConfig;
11
- model: any;
12
- initValues?: any;
13
- values?: any;
14
- name: string;
15
- prop: string;
16
- lastValues?: Record<string, any>;
17
- }>();
9
+ defineOptions({
10
+ name: 'MFormDisplay',
11
+ });
12
+
13
+ const props = defineProps<FieldProps<DisplayConfig>>();
18
14
 
19
15
  if (props.config.initValue && props.model) {
20
16
  // eslint-disable-next-line vue/no-setup-props-destructure
@@ -12,7 +12,7 @@
12
12
  </div>
13
13
  </template>
14
14
 
15
- <script lang="ts" setup name="MFormDynamicField">
15
+ <script lang="ts" setup>
16
16
  /**
17
17
  * 动态表单,目前只支持input类型字段
18
18
  * inputType: 'dynamic-field',
@@ -27,27 +27,21 @@ import { onBeforeUnmount, reactive, watch } from 'vue';
27
27
 
28
28
  import { TMagicForm, TMagicFormItem, TMagicInput } from '@tmagic/design';
29
29
 
30
- import { DynamicFieldConfig } from '../schema';
30
+ import type { DynamicFieldConfig, FieldProps } from '../schema';
31
31
  import { getConfig } from '../utils/config';
32
32
  import { useAddField } from '../utils/useAddField';
33
33
 
34
- const props = defineProps<{
35
- config: DynamicFieldConfig;
36
- model: any;
37
- initValues?: any;
38
- values?: any;
39
- name: string;
40
- prop: string;
41
- disabled?: boolean;
42
- size?: 'large' | 'default' | 'small';
43
- lastValues?: Record<string, any>;
44
- }>();
34
+ defineOptions({
35
+ name: 'MFormDynamicField',
36
+ });
37
+
38
+ const props = defineProps<FieldProps<DynamicFieldConfig>>();
45
39
 
46
40
  const emit = defineEmits(['change']);
47
41
 
48
42
  useAddField(props.prop);
49
43
 
50
- const request = getConfig('request') as Function;
44
+ const request = getConfig<Function>('request');
51
45
  const fieldMap = reactive<{ [key: string]: any }>({
52
46
  value: {},
53
47
  });
@@ -2,19 +2,15 @@
2
2
  <input v-if="model" v-model="model[name]" type="hidden" />
3
3
  </template>
4
4
 
5
- <script setup lang="ts" name="MFormHidden">
6
- import { HiddenConfig } from '../schema';
5
+ <script setup lang="ts">
6
+ import type { FieldProps, HiddenConfig } from '../schema';
7
7
  import { useAddField } from '../utils/useAddField';
8
8
 
9
- const props = defineProps<{
10
- config: HiddenConfig;
11
- model: any;
12
- initValues?: any;
13
- values?: any;
14
- name: string;
15
- prop: string;
16
- lastValues?: Record<string, any>;
17
- }>();
9
+ defineOptions({
10
+ name: 'MFormHidden',
11
+ });
12
+
13
+ const props = defineProps<FieldProps<HiddenConfig>>();
18
14
 
19
15
  useAddField(props.prop);
20
16
  </script>
@@ -16,26 +16,20 @@
16
16
  </div>
17
17
  </template>
18
18
 
19
- <script lang="ts" setup name="MFormLink">
19
+ <script lang="ts" setup>
20
20
  import { computed, inject, ref } from 'vue';
21
21
 
22
22
  import { TMagicButton } from '@tmagic/design';
23
23
 
24
24
  import FormDialog from '../FormDialog.vue';
25
- import { FormState, LinkConfig } from '../schema';
25
+ import type { FieldProps, FormState, LinkConfig } from '../schema';
26
26
  import { useAddField } from '../utils/useAddField';
27
27
 
28
- const props = defineProps<{
29
- config: LinkConfig;
30
- model: any;
31
- initValues?: any;
32
- values?: any;
33
- name: string;
34
- prop: string;
35
- disabled?: boolean;
36
- size?: 'large' | 'default' | 'small';
37
- lastValues?: Record<string, any>;
38
- }>();
28
+ defineOptions({
29
+ name: 'MFormLink',
30
+ });
31
+
32
+ const props = defineProps<FieldProps<LinkConfig>>();
39
33
 
40
34
  const emit = defineEmits(['change']);
41
35
 
@@ -15,27 +15,24 @@
15
15
  ></TMagicInputNumber>
16
16
  </template>
17
17
 
18
- <script lang="ts" setup name="MFormNumber">
18
+ <script lang="ts" setup>
19
19
  import { inject } from 'vue';
20
20
 
21
21
  import { TMagicInputNumber } from '@tmagic/design';
22
22
 
23
- import { FormState, NumberConfig } from '../schema';
23
+ import type { FieldProps, FormState, NumberConfig } from '../schema';
24
24
  import { useAddField } from '../utils/useAddField';
25
25
 
26
- const props = defineProps<{
27
- config: NumberConfig;
28
- model: any;
29
- initValues?: any;
30
- values?: any;
31
- name: string;
32
- prop: string;
33
- disabled?: boolean;
34
- size?: 'large' | 'default' | 'small';
35
- lastValues?: Record<string, any>;
36
- }>();
26
+ defineOptions({
27
+ name: 'MFormNumber',
28
+ });
29
+
30
+ const props = defineProps<FieldProps<NumberConfig>>();
37
31
 
38
- const emit = defineEmits(['change', 'input']);
32
+ const emit = defineEmits<{
33
+ change: [values: number];
34
+ input: [values: number];
35
+ }>();
39
36
 
40
37
  useAddField(props.prop);
41
38
 
@@ -45,7 +42,7 @@ const changeHandler = (value: number) => {
45
42
  emit('change', value);
46
43
  };
47
44
 
48
- const inputHandler = (v: string) => {
45
+ const inputHandler = (v: number) => {
49
46
  emit('input', v);
50
47
  mForm?.$emit('field-input', props.prop, v);
51
48
  };
@@ -0,0 +1,50 @@
1
+ <template>
2
+ <div class="m-fields-number-range">
3
+ <TMagicInput
4
+ v-model="model[name][0]"
5
+ clearable
6
+ :size="size"
7
+ :disabled="disabled"
8
+ @change="minChangeHandler"
9
+ ></TMagicInput>
10
+ <span class="split-tag">-</span>
11
+ <TMagicInput
12
+ v-model="model[name][1]"
13
+ clearable
14
+ :size="size"
15
+ :disabled="disabled"
16
+ @change="maxChangeHandler"
17
+ ></TMagicInput>
18
+ </div>
19
+ </template>
20
+
21
+ <script lang="ts" setup>
22
+ import { TMagicInput } from '@tmagic/design';
23
+
24
+ import type { FieldProps, NumberRangeConfig } from '../schema';
25
+ import { useAddField } from '../utils/useAddField';
26
+
27
+ defineOptions({
28
+ name: 'MFormNumberRange',
29
+ });
30
+
31
+ const props = defineProps<FieldProps<NumberRangeConfig>>();
32
+
33
+ const emit = defineEmits<{
34
+ change: [values: [number, number]];
35
+ }>();
36
+
37
+ useAddField(props.prop);
38
+
39
+ if (!Array.isArray(props.model[props.name])) {
40
+ props.model[props.name] = [];
41
+ }
42
+
43
+ const minChangeHandler = (v: string) => {
44
+ emit('change', [Number(v), props.model[props.name][1]]);
45
+ };
46
+
47
+ const maxChangeHandler = (v: string) => {
48
+ emit('change', [props.model[props.name][0], Number(v)]);
49
+ };
50
+ </script>
@@ -10,23 +10,17 @@
10
10
  </TMagicRadioGroup>
11
11
  </template>
12
12
 
13
- <script lang="ts" setup name="MFormRadioGroup">
13
+ <script lang="ts" setup>
14
14
  import { TMagicRadio, TMagicRadioGroup } from '@tmagic/design';
15
15
 
16
- import { RadioGroupConfig } from '../schema';
16
+ import type { FieldProps, RadioGroupConfig } from '../schema';
17
17
  import { useAddField } from '../utils/useAddField';
18
18
 
19
- const props = defineProps<{
20
- config: RadioGroupConfig;
21
- model: any;
22
- initValues?: any;
23
- values?: any;
24
- name: string;
25
- prop: string;
26
- disabled?: boolean;
27
- size?: 'large' | 'default' | 'small';
28
- lastValues?: Record<string, any>;
29
- }>();
19
+ defineOptions({
20
+ name: 'MFormRadioGroup',
21
+ });
22
+
23
+ const props = defineProps<FieldProps<RadioGroupConfig>>();
30
24
 
31
25
  const emit = defineEmits(['change']);
32
26
 
@@ -25,29 +25,24 @@
25
25
  </TMagicSelect>
26
26
  </template>
27
27
 
28
- <script lang="ts" setup name="MFormSelect">
28
+ <script lang="ts" setup>
29
29
  import { inject, onBeforeMount, Ref, ref, watch, watchEffect } from 'vue';
30
30
 
31
31
  import { TMagicSelect } from '@tmagic/design';
32
+ import { getValueByKeyPath } from '@tmagic/utils';
32
33
 
33
- import { FormState, SelectConfig, SelectGroupOption, SelectOption } from '../schema';
34
+ import type { FieldProps, FormState, SelectConfig, SelectGroupOption, SelectOption } from '../schema';
34
35
  import { getConfig } from '../utils/config';
35
36
  import { useAddField } from '../utils/useAddField';
36
37
 
37
38
  import SelectOptionGroups from './SelectOptionGroups.vue';
38
39
  import SelectOptions from './SelectOptions.vue';
39
40
 
40
- const props = defineProps<{
41
- config: SelectConfig;
42
- model: any;
43
- initValues?: any;
44
- values?: any;
45
- name: string;
46
- prop: string;
47
- disabled?: boolean;
48
- size?: 'large' | 'default' | 'small';
49
- lastValues?: Record<string, any>;
50
- }>();
41
+ defineOptions({
42
+ name: 'MFormSelect',
43
+ });
44
+
45
+ const props = defineProps<FieldProps<SelectConfig>>();
51
46
 
52
47
  const emit = defineEmits(['change']);
53
48
 
@@ -77,13 +72,17 @@ const equalValue = (value: any, v: any): boolean => {
77
72
  };
78
73
 
79
74
  const mapOptions = (data: any[]) => {
80
- const { option } = props.config;
81
- const { text } = option;
82
- const { value } = option;
75
+ const {
76
+ option = {
77
+ text: 'text',
78
+ value: 'value',
79
+ },
80
+ } = props.config;
81
+ const { text = 'text', value = 'value' } = option;
83
82
 
84
83
  return data.map((item) => ({
85
- text: typeof text === 'function' ? text(item) : item[text || 'text'],
86
- value: typeof value === 'function' ? value(item) : item[value || 'value'],
84
+ text: typeof text === 'function' ? text(item) : item[text],
85
+ value: typeof value === 'function' ? value(item) : item[value],
87
86
  }));
88
87
  };
89
88
 
@@ -98,8 +97,10 @@ const getOptions = async () => {
98
97
 
99
98
  let items: SelectOption[] | SelectGroupOption[] = [];
100
99
 
101
- const { config } = props;
102
- const { option } = config;
100
+ const { option } = props.config;
101
+
102
+ if (!option) return [];
103
+
103
104
  const { root = '', totalKey = 'total' } = option;
104
105
  let { body = {}, url } = option;
105
106
 
@@ -157,12 +158,9 @@ const getOptions = async () => {
157
158
  });
158
159
  }
159
160
 
160
- const optionsData = root.split('.').reduce((accumulator, currentValue: any) => accumulator[currentValue], res);
161
+ const optionsData = getValueByKeyPath(root, res);
161
162
 
162
- const resTotal = globalThis.parseInt(
163
- totalKey.split('.').reduce((accumulator, currentValue: any) => accumulator[currentValue], res),
164
- 10,
165
- );
163
+ const resTotal = globalThis.parseInt(getValueByKeyPath(totalKey, res), 10);
166
164
  if (resTotal > 0) {
167
165
  total.value = resTotal;
168
166
  }
@@ -222,8 +220,10 @@ const getInitLocalOption = async () => {
222
220
  const getInitOption = async () => {
223
221
  if (!props.model) return [];
224
222
 
225
- const { config } = props;
226
- const { option } = config;
223
+ const { option } = props.config;
224
+
225
+ if (!option) return [];
226
+
227
227
  const { root = '', initRoot = '' } = option;
228
228
  let { initBody = {} } = option;
229
229
 
@@ -283,9 +283,7 @@ const getInitOption = async () => {
283
283
  });
284
284
  }
285
285
 
286
- let initData = (initRoot || root)
287
- .split('.')
288
- .reduce((accumulator, currentValue: any) => accumulator[currentValue], res);
286
+ let initData = getValueByKeyPath(initRoot || root, res);
289
287
  if (initData) {
290
288
  if (!Array.isArray(initData)) {
291
289
  initData = [initData];
@@ -2,7 +2,7 @@
2
2
  <TMagicOptionGroup v-for="(group, index) in options" :key="index" :label="group.label" :disabled="group.disabled">
3
3
  <component
4
4
  v-for="(item, index) in group.options"
5
- :is="uiComponent.component"
5
+ :is="uiComponent"
6
6
  :key="index"
7
7
  :label="item.label || item.text"
8
8
  :value="item.value"
@@ -12,14 +12,18 @@
12
12
  </TMagicOptionGroup>
13
13
  </template>
14
14
 
15
- <script lang="ts" setup name="MFormSelectOptionGroups">
15
+ <script lang="ts" setup>
16
16
  import { getConfig, TMagicOptionGroup } from '@tmagic/design';
17
17
 
18
18
  import { SelectGroupOption } from '../schema';
19
19
 
20
+ defineOptions({
21
+ name: 'MFormSelectOptionGroups',
22
+ });
23
+
20
24
  defineProps<{
21
25
  options: SelectGroupOption[];
22
26
  }>();
23
27
 
24
- const uiComponent = getConfig('components').option;
28
+ const uiComponent = getConfig('components')?.option.component || 'el-option';
25
29
  </script>
@@ -8,11 +8,15 @@
8
8
  ></TMagicOption>
9
9
  </template>
10
10
 
11
- <script lang="ts" setup name="MFormSelectOptions">
11
+ <script lang="ts" setup>
12
12
  import { TMagicOption } from '@tmagic/design';
13
13
 
14
14
  import { SelectOption } from '../schema';
15
15
 
16
+ defineOptions({
17
+ name: 'MFormSelectOptions',
18
+ });
19
+
16
20
  defineProps<{
17
21
  options: SelectOption[];
18
22
  valueKey?: string;
@@ -9,31 +9,27 @@
9
9
  ></TMagicSwitch>
10
10
  </template>
11
11
 
12
- <script lang="ts" setup name="MFormSwitch">
12
+ <script lang="ts" setup>
13
13
  import { computed } from 'vue';
14
14
 
15
15
  import { TMagicSwitch } from '@tmagic/design';
16
16
 
17
- import { SwitchConfig } from '../schema';
17
+ import type { FieldProps, SwitchConfig } from '../schema';
18
18
  import { useAddField } from '../utils/useAddField';
19
19
 
20
- const props = defineProps<{
21
- config: SwitchConfig;
22
- model: any;
23
- initValues?: any;
24
- values?: any;
25
- name: string;
26
- prop: string;
27
- disabled?: boolean;
28
- size?: 'large' | 'default' | 'small';
29
- lastValues?: Record<string, any>;
30
- }>();
20
+ defineOptions({
21
+ name: 'MFormSwitch',
22
+ });
31
23
 
32
- const emit = defineEmits(['change']);
24
+ const props = defineProps<FieldProps<SwitchConfig>>();
25
+
26
+ const emit = defineEmits<{
27
+ change: [value: any];
28
+ }>();
33
29
 
34
30
  useAddField(props.prop);
35
31
 
36
- const changeHandler = (value: number) => {
32
+ const changeHandler = (value: any) => {
37
33
  emit('change', value);
38
34
  };
39
35
 
@@ -23,34 +23,31 @@
23
23
  </TMagicInput>
24
24
  </template>
25
25
 
26
- <script lang="ts" setup name="MFormText">
26
+ <script lang="ts" setup>
27
27
  import { inject } from 'vue';
28
28
 
29
29
  import { TMagicButton, TMagicInput } from '@tmagic/design';
30
30
  import { isNumber } from '@tmagic/utils';
31
31
 
32
- import { FormState, TextConfig } from '../schema';
32
+ import type { FieldProps, FormState, TextConfig } from '../schema';
33
33
  import { useAddField } from '../utils/useAddField';
34
34
 
35
- const props = defineProps<{
36
- config: TextConfig;
37
- model: any;
38
- initValues?: any;
39
- values?: any;
40
- name: string;
41
- prop: string;
42
- disabled?: boolean;
43
- size?: 'large' | 'default' | 'small';
44
- lastValues?: Record<string, any>;
45
- }>();
35
+ defineOptions({
36
+ name: 'MFormText',
37
+ });
38
+
39
+ const props = defineProps<FieldProps<TextConfig>>();
46
40
 
47
- const emit = defineEmits(['change', 'input']);
41
+ const emit = defineEmits<{
42
+ change: [value: string];
43
+ input: [value: string];
44
+ }>();
48
45
 
49
46
  useAddField(props.prop);
50
47
 
51
48
  const mForm = inject<FormState | undefined>('mForm');
52
49
 
53
- const changeHandler = (value: number) => {
50
+ const changeHandler = (value: string) => {
54
51
  emit('change', value);
55
52
  };
56
53
 
@@ -12,33 +12,30 @@
12
12
  </TMagicInput>
13
13
  </template>
14
14
 
15
- <script lang="ts" setup name="MFormTextarea">
15
+ <script lang="ts" setup>
16
16
  import { inject } from 'vue';
17
17
 
18
18
  import { TMagicInput } from '@tmagic/design';
19
19
 
20
- import { FormState, TextareaConfig } from '../schema';
20
+ import type { FieldProps, FormState, TextareaConfig } from '../schema';
21
21
  import { useAddField } from '../utils/useAddField';
22
22
 
23
- const props = defineProps<{
24
- config: TextareaConfig;
25
- model: any;
26
- initValues?: any;
27
- values?: any;
28
- name: string;
29
- prop: string;
30
- disabled?: boolean;
31
- size?: 'large' | 'default' | 'small';
32
- lastValues?: Record<string, any>;
33
- }>();
23
+ defineOptions({
24
+ name: 'MFormTextarea',
25
+ });
26
+
27
+ const props = defineProps<FieldProps<TextareaConfig>>();
34
28
 
35
- const emit = defineEmits(['change', 'input']);
29
+ const emit = defineEmits<{
30
+ change: [value: string];
31
+ input: [value: string];
32
+ }>();
36
33
 
37
34
  useAddField(props.prop);
38
35
 
39
36
  const mForm = inject<FormState | null>('mForm');
40
37
 
41
- const changeHandler = (value: number) => {
38
+ const changeHandler = (value: string) => {
42
39
  emit('change', value);
43
40
  };
44
41
 
@@ -10,25 +10,21 @@
10
10
  ></TMagicTimePicker>
11
11
  </template>
12
12
 
13
- <script lang="ts" setup name="MFormTime">
13
+ <script lang="ts" setup>
14
14
  import { TMagicTimePicker } from '@tmagic/design';
15
15
 
16
- import { TimeConfig } from '../schema';
16
+ import type { FieldProps, TimeConfig } from '../schema';
17
17
  import { useAddField } from '../utils/useAddField';
18
18
 
19
- const props = defineProps<{
20
- config: TimeConfig;
21
- model: any;
22
- initValues?: any;
23
- values?: any;
24
- name: string;
25
- prop: string;
26
- disabled?: boolean;
27
- size?: 'large' | 'default' | 'small';
28
- lastValues?: Record<string, any>;
29
- }>();
19
+ defineOptions({
20
+ name: 'MFormTime',
21
+ });
22
+
23
+ const props = defineProps<FieldProps<TimeConfig>>();
30
24
 
31
- const emit = defineEmits(['change']);
25
+ const emit = defineEmits<{
26
+ change: [value: string];
27
+ }>();
32
28
 
33
29
  useAddField(props.prop);
34
30