@tmagic/form 1.2.0-beta.8 → 1.2.0

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 (77) hide show
  1. package/dist/style.css +1 -1
  2. package/dist/{tmagic-form.mjs → tmagic-form.js} +322 -126
  3. package/dist/tmagic-form.js.map +1 -0
  4. package/dist/{tmagic-form.umd.js → tmagic-form.umd.cjs} +321 -124
  5. package/dist/tmagic-form.umd.cjs.map +1 -0
  6. package/package.json +10 -8
  7. package/src/Form.vue +11 -3
  8. package/src/FormDialog.vue +3 -1
  9. package/src/containers/Col.vue +3 -1
  10. package/src/containers/Container.vue +12 -6
  11. package/src/containers/Fieldset.vue +4 -1
  12. package/src/containers/GroupList.vue +4 -2
  13. package/src/containers/GroupListItem.vue +8 -5
  14. package/src/containers/Panel.vue +4 -1
  15. package/src/containers/Row.vue +3 -1
  16. package/src/containers/Step.vue +3 -1
  17. package/src/containers/Table.vue +44 -18
  18. package/src/containers/Tabs.vue +9 -4
  19. package/src/fields/Cascader.vue +2 -2
  20. package/src/fields/Checkbox.vue +2 -2
  21. package/src/fields/CheckboxGroup.vue +8 -3
  22. package/src/fields/ColorPicker.vue +2 -2
  23. package/src/fields/Date.vue +3 -3
  24. package/src/fields/DateTime.vue +2 -2
  25. package/src/fields/Daterange.vue +2 -2
  26. package/src/fields/Display.vue +1 -1
  27. package/src/fields/DynamicField.vue +2 -2
  28. package/src/fields/Hidden.vue +1 -1
  29. package/src/fields/Link.vue +2 -2
  30. package/src/fields/Number.vue +2 -2
  31. package/src/fields/RadioGroup.vue +9 -5
  32. package/src/fields/Select.vue +63 -24
  33. package/src/fields/SelectOptionGroups.vue +1 -1
  34. package/src/fields/SelectOptions.vue +1 -1
  35. package/src/fields/Switch.vue +2 -2
  36. package/src/fields/Text.vue +2 -2
  37. package/src/fields/Textarea.vue +2 -2
  38. package/src/fields/Time.vue +4 -2
  39. package/src/schema.ts +18 -4
  40. package/src/theme/form.scss +1 -1
  41. package/src/utils/form.ts +9 -5
  42. package/types/Form.vue.d.ts +32 -170
  43. package/types/FormDialog.vue.d.ts +4 -0
  44. package/types/containers/Col.vue.d.ts +12 -74
  45. package/types/containers/Container.vue.d.ts +17 -95
  46. package/types/containers/Fieldset.vue.d.ts +15 -87
  47. package/types/containers/GroupList.vue.d.ts +11 -71
  48. package/types/containers/GroupListItem.vue.d.ts +12 -80
  49. package/types/containers/Panel.vue.d.ts +4 -0
  50. package/types/containers/Row.vue.d.ts +12 -74
  51. package/types/containers/Step.vue.d.ts +13 -79
  52. package/types/containers/Table.vue.d.ts +4 -0
  53. package/types/containers/Tabs.vue.d.ts +12 -74
  54. package/types/fields/Cascader.vue.d.ts +12 -78
  55. package/types/fields/Checkbox.vue.d.ts +12 -78
  56. package/types/fields/CheckboxGroup.vue.d.ts +12 -78
  57. package/types/fields/ColorPicker.vue.d.ts +12 -78
  58. package/types/fields/Date.vue.d.ts +12 -78
  59. package/types/fields/DateTime.vue.d.ts +12 -78
  60. package/types/fields/Daterange.vue.d.ts +12 -78
  61. package/types/fields/Display.vue.d.ts +9 -65
  62. package/types/fields/DynamicField.vue.d.ts +12 -78
  63. package/types/fields/Hidden.vue.d.ts +9 -65
  64. package/types/fields/Link.vue.d.ts +12 -78
  65. package/types/fields/Number.vue.d.ts +12 -81
  66. package/types/fields/RadioGroup.vue.d.ts +12 -78
  67. package/types/fields/Select.vue.d.ts +12 -79
  68. package/types/fields/SelectOptionGroups.vue.d.ts +4 -50
  69. package/types/fields/SelectOptions.vue.d.ts +5 -53
  70. package/types/fields/Switch.vue.d.ts +12 -78
  71. package/types/fields/Text.vue.d.ts +12 -81
  72. package/types/fields/Textarea.vue.d.ts +12 -81
  73. package/types/fields/Time.vue.d.ts +12 -78
  74. package/types/schema.d.ts +17 -4
  75. package/types/utils/form.d.ts +2 -1
  76. package/dist/tmagic-form.mjs.map +0 -1
  77. package/dist/tmagic-form.umd.js.map +0 -1
@@ -7,12 +7,13 @@
7
7
  :label-width="config.labelWidth || labelWidth"
8
8
  :expand-more="expandMore"
9
9
  :size="size"
10
+ :disabled="disabled"
10
11
  @change="changeHandler"
11
12
  ></Container>
12
13
  </TMagicCol>
13
14
  </template>
14
15
 
15
- <script setup lang="ts">
16
+ <script setup lang="ts" name="MFormCol">
16
17
  import { computed, inject } from 'vue';
17
18
 
18
19
  import { TMagicCol } from '@tmagic/design';
@@ -30,6 +31,7 @@ const props = defineProps<{
30
31
  span?: number;
31
32
  size?: string;
32
33
  prop?: string;
34
+ disabled?: boolean;
33
35
  }>();
34
36
 
35
37
  const emit = defineEmits(['change']);
@@ -21,6 +21,7 @@
21
21
  :is="tagName"
22
22
  :model="model"
23
23
  :config="config"
24
+ :disabled="disabled"
24
25
  :name="name"
25
26
  :prop="itemProp"
26
27
  :step-active="stepActive"
@@ -87,6 +88,7 @@
87
88
  :model="name || name === 0 ? model[name] : model"
88
89
  :config="item"
89
90
  :size="size"
91
+ :disabled="disabled"
90
92
  :step-active="stepActive"
91
93
  :expand-more="expand"
92
94
  :label-width="itemLabelWidth"
@@ -97,12 +99,14 @@
97
99
  </template>
98
100
 
99
101
  <div style="text-align: center" v-if="config.expand && type !== 'fieldset'">
100
- <TMagicButton text @click="expandHandler">{{ expand ? '收起配置' : '展开更多配置' }}</TMagicButton>
102
+ <TMagicButton type="primary" size="small" :disabled="false" text @click="expandHandler">{{
103
+ expand ? '收起配置' : '展开更多配置'
104
+ }}</TMagicButton>
101
105
  </div>
102
106
  </div>
103
107
  </template>
104
108
 
105
- <script setup lang="ts">
109
+ <script setup lang="ts" name="MFormContainer">
106
110
  import { computed, inject, ref, resolveComponent, watchEffect } from 'vue';
107
111
  import { WarningFilled } from '@element-plus/icons-vue';
108
112
 
@@ -116,6 +120,7 @@ const props = withDefaults(
116
120
  model: FormValue;
117
121
  config: ChildConfig;
118
122
  prop?: string;
123
+ disabled?: boolean;
119
124
  labelWidth?: string;
120
125
  expandMore?: boolean;
121
126
  stepActive?: string | number;
@@ -157,7 +162,7 @@ const tagName = computed(() => {
157
162
  return 'm-fields-text';
158
163
  });
159
164
 
160
- const disabled = computed(() => filterFunction(mForm, props.config.disabled, props));
165
+ const disabled = computed(() => props.disabled || filterFunction(mForm, props.config.disabled, props));
161
166
 
162
167
  const tooltip = computed(() => filterFunction(mForm, props.config.tooltip, props));
163
168
 
@@ -177,11 +182,12 @@ const type = computed((): string => {
177
182
  });
178
183
 
179
184
  const display = computed((): boolean => {
180
- if (props.config.display === 'expand') {
185
+ const value = displayFunction(mForm, props.config.display, props);
186
+
187
+ if (value === 'expand') {
181
188
  return expand.value;
182
189
  }
183
-
184
- return displayFunction(mForm, props.config.display, props);
190
+ return value;
185
191
  });
186
192
 
187
193
  const itemLabelWidth = computed(() => props.config.labelWidth || props.labelWidth);
@@ -27,6 +27,7 @@
27
27
  :rules="name ? rules[name] : []"
28
28
  :config="item"
29
29
  :prop="prop"
30
+ :disabled="disabled"
30
31
  :labelWidth="lWidth"
31
32
  :size="size"
32
33
  @change="change"
@@ -46,13 +47,14 @@
46
47
  :prop="prop"
47
48
  :labelWidth="lWidth"
48
49
  :size="size"
50
+ :disabled="disabled"
49
51
  @change="change"
50
52
  ></Container>
51
53
  </template>
52
54
  </fieldset>
53
55
  </template>
54
56
 
55
- <script lang="ts" setup>
57
+ <script lang="ts" setup name="MFormFieldset">
56
58
  import { computed, inject, watch } from 'vue';
57
59
 
58
60
  import { TMagicCheckbox } from '@tmagic/design';
@@ -69,6 +71,7 @@ const props = withDefaults(
69
71
  model: Record<string, any>;
70
72
  config: FieldsetConfig;
71
73
  rules?: any;
74
+ disabled?: boolean;
72
75
  }>(),
73
76
  {
74
77
  rules: {},
@@ -15,19 +15,20 @@
15
15
  :index="index"
16
16
  :label-width="labelWidth"
17
17
  :size="size"
18
+ :disabled="disabled"
18
19
  :group-model="model[name]"
19
20
  @remove-item="removeHandler"
20
21
  @swap-item="swapHandler"
21
22
  @change="changeHandler"
22
23
  ></MFieldsGroupListItem>
23
24
 
24
- <TMagicButton @click="addHandler" size="small" v-if="addable">添加组</TMagicButton>
25
+ <TMagicButton @click="addHandler" size="small" :disabled="disabled" v-if="addable">添加组</TMagicButton>
25
26
 
26
27
  <TMagicButton :icon="Grid" size="small" @click="toggleMode" v-if="config.enableToggleMode">切换为表格</TMagicButton>
27
28
  </div>
28
29
  </template>
29
30
 
30
- <script setup lang="ts">
31
+ <script setup lang="ts" name="MFormGroupList">
31
32
  import { computed, inject } from 'vue';
32
33
  import { Grid } from '@element-plus/icons-vue';
33
34
 
@@ -45,6 +46,7 @@ const props = defineProps<{
45
46
  labelWidth?: string;
46
47
  prop?: string;
47
48
  size?: string;
49
+ disabled?: boolean;
48
50
  }>();
49
51
 
50
52
  const emit = defineEmits(['change']);
@@ -5,21 +5,22 @@
5
5
  ><CaretBottom v-if="expand" /><CaretRight v-else
6
6
  /></TMagicIcon>
7
7
 
8
- <TMagicButton text @click="expandHandler">{{ title }}</TMagicButton>
8
+ <TMagicButton text :disabled="disabled" @click="expandHandler">{{ title }}</TMagicButton>
9
9
 
10
10
  <TMagicButton
11
11
  v-show="showDelete(parseInt(String(index)))"
12
+ style="color: #f56c6c"
12
13
  text
13
14
  :icon="Delete"
14
- style="color: #f56c6c"
15
+ :disabled="disabled"
15
16
  @click="removeHandler"
16
17
  ></TMagicButton>
17
18
 
18
19
  <template v-if="movable()">
19
- <TMagicButton v-show="index !== 0" text size="small" @click="changeOrder(-1)"
20
+ <TMagicButton v-show="index !== 0" text :disabled="disabled" size="small" @click="changeOrder(-1)"
20
21
  >上移<TMagicIcon><CaretTop /></TMagicIcon
21
22
  ></TMagicButton>
22
- <TMagicButton v-show="index !== length - 1" text size="small" @click="changeOrder(1)"
23
+ <TMagicButton v-show="index !== length - 1" :disabled="disabled" text size="small" @click="changeOrder(1)"
23
24
  >下移<TMagicIcon><CaretBottom /></TMagicIcon
24
25
  ></TMagicButton>
25
26
  </template>
@@ -34,12 +35,13 @@
34
35
  :labelWidth="labelWidth"
35
36
  :prop="`${prop}${prop ? '.' : ''}${String(index)}`"
36
37
  :size="size"
38
+ :disabled="disabled"
37
39
  @change="changeHandler"
38
40
  ></Container>
39
41
  </div>
40
42
  </template>
41
43
 
42
- <script setup lang="ts">
44
+ <script setup lang="ts" name="MFormGroupListItem">
43
45
  import { computed, inject, ref, watchEffect } from 'vue';
44
46
  import { CaretBottom, CaretRight, CaretTop, Delete } from '@element-plus/icons-vue';
45
47
 
@@ -58,6 +60,7 @@ const props = defineProps<{
58
60
  prop?: string;
59
61
  size?: string;
60
62
  index: number;
63
+ disabled?: boolean;
61
64
  }>();
62
65
 
63
66
  const emit = defineEmits(['swap-item', 'remove-item', 'change']);
@@ -25,6 +25,7 @@
25
25
  :model="name ? model[name] : model"
26
26
  :prop="prop"
27
27
  :size="size"
28
+ :disabled="disabled"
28
29
  :label-width="config.labelWidth || labelWidth"
29
30
  @change="changeHandler"
30
31
  ></Container>
@@ -41,6 +42,7 @@
41
42
  :model="name ? model[name] : model"
42
43
  :prop="prop"
43
44
  :size="size"
45
+ :disabled="disabled"
44
46
  :label-width="config.labelWidth || labelWidth"
45
47
  @change="changeHandler"
46
48
  ></Container>
@@ -49,7 +51,7 @@
49
51
  </TMagicCard>
50
52
  </template>
51
53
 
52
- <script setup lang="ts">
54
+ <script setup lang="ts" name="MFormPanel">
53
55
  import { computed, inject, ref } from 'vue';
54
56
  import { CaretBottom, CaretRight } from '@element-plus/icons-vue';
55
57
 
@@ -67,6 +69,7 @@ const props = defineProps<{
67
69
  labelWidth?: string;
68
70
  prop?: string;
69
71
  size?: string;
72
+ disabled?: boolean;
70
73
  }>();
71
74
 
72
75
  const emit = defineEmits(['change']);
@@ -10,12 +10,13 @@
10
10
  :model="name ? model[name] : model"
11
11
  :prop="prop"
12
12
  :size="size"
13
+ :disabled="disabled"
13
14
  @change="changeHandler"
14
15
  />
15
16
  </TMagicRow>
16
17
  </template>
17
18
 
18
- <script setup lang="ts">
19
+ <script setup lang="ts" name="MFormRow">
19
20
  import { inject } from 'vue';
20
21
 
21
22
  import { TMagicRow } from '@tmagic/design';
@@ -32,6 +33,7 @@ const props = defineProps<{
32
33
  prop?: string;
33
34
  size?: string;
34
35
  expandMore?: boolean;
36
+ disabled?: boolean;
35
37
  }>();
36
38
 
37
39
  const emit = defineEmits(['change']);
@@ -20,6 +20,7 @@
20
20
  :model="step.name ? model[step.name] : model"
21
21
  :prop="`${step.name}`"
22
22
  :size="size"
23
+ :disabled="disabled"
23
24
  :label-width="config.labelWidth || labelWidth"
24
25
  @change="changeHandler"
25
26
  ></Container>
@@ -28,7 +29,7 @@
28
29
  </div>
29
30
  </template>
30
31
 
31
- <script setup lang="ts">
32
+ <script setup lang="ts" name="MFormStep">
32
33
  import { inject, ref, watchEffect } from 'vue';
33
34
 
34
35
  import { TMagicStep, TMagicSteps } from '@tmagic/design';
@@ -44,6 +45,7 @@ const props = withDefaults(
44
45
  stepActive?: number;
45
46
  labelWidth?: string;
46
47
  size?: string;
48
+ disabled?: boolean;
47
49
  }>(),
48
50
  {
49
51
  stepActive: 1,
@@ -7,7 +7,8 @@
7
7
  v-if="model[modelName]"
8
8
  ref="tMagicTable"
9
9
  style="width: 100%"
10
- :data="model[modelName]"
10
+ :row-key="config.rowKey || 'id'"
11
+ :data="data"
11
12
  :border="config.border"
12
13
  :max-height="config.maxHeight"
13
14
  :default-expand-all="true"
@@ -49,6 +50,7 @@
49
50
  size="small"
50
51
  type="primary"
51
52
  :icon="ArrowUp"
53
+ :disabled="disabled"
52
54
  text
53
55
  @click="upHandler(scope.$index + 1 + pagecontext * pagesize - 1)"
54
56
  @dblclick="topHandler(scope.$index + 1 + pagecontext * pagesize - 1)"
@@ -64,6 +66,7 @@
64
66
  size="small"
65
67
  type="primary"
66
68
  :icon="ArrowDown"
69
+ :disabled="disabled"
67
70
  text
68
71
  @click="downHandler(scope.$index + 1 + pagecontext * pagesize - 1)"
69
72
  @dblclick="bottomHandler(scope.$index + 1 + pagecontext * pagesize - 1)"
@@ -99,9 +102,10 @@
99
102
  <Container
100
103
  v-if="scope.$index > -1"
101
104
  labelWidth="0"
105
+ :disabled="disabled"
102
106
  :prop="getProp(scope.$index)"
103
107
  :rules="column.rules"
104
- :config="makeConfig(column)"
108
+ :config="makeConfig(column, scope.row)"
105
109
  :model="scope.row"
106
110
  :size="size"
107
111
  @change="$emit('change', model[modelName])"
@@ -112,7 +116,10 @@
112
116
  </TMagicTable>
113
117
  </TMagicTooltip>
114
118
  <slot></slot>
115
- <TMagicButton v-if="addable" size="small" type="primary" plain @click="newHandler()">添加</TMagicButton> &nbsp;
119
+ <TMagicButton v-if="addable" size="small" type="primary" :disabled="disabled" plain @click="newHandler()"
120
+ >添加</TMagicButton
121
+ >
122
+ &nbsp;
116
123
  <TMagicButton
117
124
  :icon="Grid"
118
125
  size="small"
@@ -132,18 +139,21 @@
132
139
  </TMagicButton>
133
140
  <TMagicUpload
134
141
  v-if="importable"
142
+ style="display: inline-block"
135
143
  ref="excelBtn"
136
144
  action="/noop"
145
+ :disabled="disabled"
137
146
  :on-change="excelHandler"
138
147
  :auto-upload="false"
139
- style="display: inline-block"
140
148
  >
141
- <TMagicButton size="small" type="success" plain>导入EXCEL</TMagicButton> </TMagicUpload
149
+ <TMagicButton size="small" type="success" :disabled="disabled" plain>导入EXCEL</TMagicButton> </TMagicUpload
142
150
  >&nbsp;
143
- <TMagicButton v-if="importable" size="small" type="warning" plain @click="clearHandler()">清空</TMagicButton>
151
+ <TMagicButton v-if="importable" size="small" type="warning" :disabled="disabled" plain @click="clearHandler()"
152
+ >清空</TMagicButton
153
+ >
144
154
  </div>
145
155
 
146
- <div class="bottom" style="text-align: right">
156
+ <div class="bottom" style="text-align: right" v-if="config.pagination">
147
157
  <TMagicPagination
148
158
  layout="total, sizes, prev, pager, next, jumper"
149
159
  :hide-on-single-page="model[modelName].length < pagesize"
@@ -159,8 +169,8 @@
159
169
  </div>
160
170
  </template>
161
171
 
162
- <script setup lang="ts">
163
- import { computed, inject, onMounted, ref, toRefs } from 'vue';
172
+ <script setup lang="ts" name="MFormTable">
173
+ import { computed, inject, onMounted, ref, toRefs, watchEffect } from 'vue';
164
174
  import { ArrowDown, ArrowUp, Delete, FullScreen, Grid } from '@element-plus/icons-vue';
165
175
  import { cloneDeep } from 'lodash-es';
166
176
  import Sortable, { SortableEvent } from 'sortablejs';
@@ -190,6 +200,7 @@ const props = withDefaults(
190
200
  prop?: string;
191
201
  labelWidth?: string;
192
202
  sort?: boolean;
203
+ disabled?: boolean;
193
204
  sortKey?: string;
194
205
  text?: string;
195
206
  size?: string;
@@ -220,6 +231,15 @@ const isFullscreen = ref(false);
220
231
 
221
232
  const modelName = computed(() => props.name || props.config.name || '');
222
233
 
234
+ const data = computed(() =>
235
+ props.config.pagination
236
+ ? props.model[modelName.value].filter(
237
+ (item: any, index: number) =>
238
+ index >= pagecontext.value * pagesize.value && index + 1 <= (pagecontext.value + 1) * pagesize.value,
239
+ )
240
+ : props.model[modelName.value],
241
+ );
242
+
223
243
  const sortChange = ({ prop, order }: SortProp) => {
224
244
  if (order === 'ascending') {
225
245
  props.model[modelName.value] = props.model[modelName.value].sort((a: any, b: any) => a[prop] - b[prop]);
@@ -248,11 +268,11 @@ const swapArray = (index1: number, index2: number) => {
248
268
  };
249
269
 
250
270
  const rowDrop = () => {
251
- const tableEl = tMagicTable.value?.$el;
252
- if (tableEl?.querySelectorAll('.el-table__body > tbody')) {
271
+ const tableEl = tMagicTable.value?.instance.$el;
272
+ const tBodyEl = tableEl?.querySelector('.el-table__body > tbody');
273
+ if (tBodyEl) {
253
274
  // eslint-disable-next-line prefer-destructuring
254
- const el = tableEl.querySelectorAll('.el-table__body > tbody')[0];
255
- const sortable = Sortable.create(el, {
275
+ const sortable = Sortable.create(tBodyEl, {
256
276
  onEnd: ({ newIndex, oldIndex }: SortableEvent) => {
257
277
  if (typeof newIndex === 'undefined') return;
258
278
  if (typeof oldIndex === 'undefined') return;
@@ -262,11 +282,11 @@ const rowDrop = () => {
262
282
  sortable.destroy();
263
283
  mForm?.$emit('field-change', props.prop, props.model[modelName.value]);
264
284
  sleep(1000).then(() => {
265
- const eltrs = tableEl.querySelectorAll('.el-table__body > tbody > tr');
266
- if (eltrs?.[newIndex]) {
267
- eltrs[newIndex].style.backgroundColor = 'rgba(243, 89, 59, 0.2)';
285
+ const elTrs = tableEl.querySelectorAll('.el-table__body > tbody > tr');
286
+ if (elTrs?.[newIndex]) {
287
+ elTrs[newIndex].style.backgroundColor = 'rgba(243, 89, 59, 0.2)';
268
288
  sleep(1000).then(() => {
269
- eltrs[newIndex].style.backgroundColor = '';
289
+ elTrs[newIndex].style.backgroundColor = '';
270
290
  });
271
291
  }
272
292
  });
@@ -348,7 +368,9 @@ onMounted(() => {
348
368
  if (props.sort && props.sortKey) {
349
369
  props.model[modelName.value].sort((a: any, b: any) => b[props.sortKey] - a[props.sortKey]);
350
370
  }
371
+ });
351
372
 
373
+ watchEffect(() => {
352
374
  if (props.config.dropSort) {
353
375
  rowDrop();
354
376
  }
@@ -402,6 +424,7 @@ const itemExtra = (fuc: any, index: number) => {
402
424
  };
403
425
 
404
426
  const removeHandler = (index: number) => {
427
+ if (props.disabled) return;
405
428
  props.model[modelName.value].splice(index, 1);
406
429
  emit('change', props.model[modelName.value]);
407
430
  };
@@ -421,8 +444,11 @@ const toggleRowSelection = (row: any, selected: boolean) => {
421
444
  tMagicTable.value?.toggleRowSelection.call(tMagicTable.value, row, selected);
422
445
  };
423
446
 
424
- const makeConfig = (config: ColumnConfig) => {
447
+ const makeConfig = (config: ColumnConfig, row: any) => {
425
448
  const newConfig = cloneDeep(config);
449
+ if (typeof config.itemsFunction === 'function') {
450
+ newConfig.items = config.itemsFunction(row);
451
+ }
426
452
  delete newConfig.display;
427
453
  return newConfig;
428
454
  };
@@ -10,8 +10,9 @@
10
10
  @tab-remove="onTabRemove"
11
11
  >
12
12
  <template v-for="(tab, tabIndex) in tabs">
13
- <TMagicTabPane
13
+ <component
14
14
  v-if="display(tab.display) && tabItems(tab).length"
15
+ :is="uiComponent.component"
15
16
  :key="tab[mForm?.keyProp || '__key'] ?? tabIndex"
16
17
  :name="filter(tab.status) || tabIndex.toString()"
17
18
  :label="filter(tab.title)"
@@ -21,6 +22,7 @@
21
22
  v-for="item in tabItems(tab)"
22
23
  :key="item[mForm?.keyProp || '__key']"
23
24
  :config="item"
25
+ :disabled="disabled"
24
26
  :model="
25
27
  config.dynamic
26
28
  ? (name ? model[name] : model)[tabIndex]
@@ -36,22 +38,24 @@
36
38
  :expand-more="expandMore"
37
39
  @change="changeHandler"
38
40
  ></Container>
39
- </TMagicTabPane>
41
+ </component>
40
42
  </template>
41
43
  </TMagicTabs>
42
44
  </template>
43
45
 
44
- <script setup lang="ts">
46
+ <script setup lang="ts" name="MFormTabs">
45
47
  import { computed, inject, ref, watchEffect } from 'vue';
46
48
  import { cloneDeep } from 'lodash-es';
47
49
 
48
- import { TMagicTabPane, TMagicTabs } from '@tmagic/design';
50
+ import { getConfig, TMagicTabs } from '@tmagic/design';
49
51
 
50
52
  import { FormState, TabConfig, TabPaneConfig } from '../schema';
51
53
  import { display as displayFunc, filterFunction } from '../utils/form';
52
54
 
53
55
  import Container from './Container.vue';
54
56
 
57
+ const uiComponent = getConfig('components').tabPane;
58
+
55
59
  const getActive = (mForm: FormState | undefined, props: any, activeTabName: string) => {
56
60
  const { config, model, prop } = props;
57
61
  const { active } = config;
@@ -87,6 +91,7 @@ const props = defineProps<{
87
91
  labelWidth?: string;
88
92
  prop?: string;
89
93
  expandMore?: boolean;
94
+ disabled?: boolean;
90
95
  }>();
91
96
 
92
97
  const emit = defineEmits(['change']);
@@ -14,7 +14,7 @@
14
14
  ></TMagicCascader>
15
15
  </template>
16
16
 
17
- <script setup lang="ts">
17
+ <script setup lang="ts" name="MFormCascader">
18
18
  import { inject, ref, watchEffect } from 'vue';
19
19
 
20
20
  import { TMagicCascader } from '@tmagic/design';
@@ -31,7 +31,7 @@ const props = defineProps<{
31
31
  name: string;
32
32
  prop: string;
33
33
  disabled?: boolean;
34
- size: 'mini' | 'small' | 'medium';
34
+ size?: 'large' | 'default' | 'small';
35
35
  }>();
36
36
 
37
37
  const emit = defineEmits(['change']);
@@ -10,7 +10,7 @@
10
10
  >
11
11
  </template>
12
12
 
13
- <script setup lang="ts">
13
+ <script setup lang="ts" name="MFormCheckbox">
14
14
  import { computed } from 'vue';
15
15
 
16
16
  import { TMagicCheckbox } from '@tmagic/design';
@@ -26,7 +26,7 @@ const props = defineProps<{
26
26
  name: string;
27
27
  prop: string;
28
28
  disabled?: boolean;
29
- size: 'mini' | 'small' | 'medium';
29
+ size?: 'large' | 'default' | 'small';
30
30
  }>();
31
31
 
32
32
  const emit = defineEmits(['change']);
@@ -1,12 +1,17 @@
1
1
  <template>
2
2
  <TMagicCheckboxGroup v-model="model[name]" :size="size" :disabled="disabled" @change="changeHandler">
3
- <TMagicCheckbox v-for="option in options" :label="option.value" :key="option.value" :disabled="option.disabled"
3
+ <TMagicCheckbox
4
+ v-for="option in options"
5
+ :label="option.value"
6
+ :value="option.value"
7
+ :key="option.value"
8
+ :disabled="option.disabled"
4
9
  >{{ option.text }}
5
10
  </TMagicCheckbox>
6
11
  </TMagicCheckboxGroup>
7
12
  </template>
8
13
 
9
- <script lang="ts" setup>
14
+ <script lang="ts" setup name="MFormCheckGroup">
10
15
  import { computed, inject } from 'vue';
11
16
 
12
17
  import { TMagicCheckbox, TMagicCheckboxGroup } from '@tmagic/design';
@@ -23,7 +28,7 @@ const props = defineProps<{
23
28
  name: string;
24
29
  prop: string;
25
30
  disabled?: boolean;
26
- size: 'mini' | 'small' | 'medium';
31
+ size?: 'large' | 'default' | 'small';
27
32
  }>();
28
33
 
29
34
  const emit = defineEmits(['change']);
@@ -8,7 +8,7 @@
8
8
  ></TMagicColorPicker>
9
9
  </template>
10
10
 
11
- <script lang="ts" setup>
11
+ <script lang="ts" setup name="MFormColorPicker">
12
12
  import { TMagicColorPicker } from '@tmagic/design';
13
13
 
14
14
  import { ColorPickConfig } from '../schema';
@@ -22,7 +22,7 @@ const props = defineProps<{
22
22
  name: string;
23
23
  prop: string;
24
24
  disabled?: boolean;
25
- size: 'mini' | 'small' | 'medium';
25
+ size?: 'large' | 'default' | 'small';
26
26
  }>();
27
27
 
28
28
  const emit = defineEmits(['change']);
@@ -6,12 +6,12 @@
6
6
  :placeholder="config.placeholder"
7
7
  :disabled="disabled"
8
8
  :format="config.format"
9
- :value-format="config.format || 'YYYY-MM-DD HH:mm:ss'"
9
+ :value-format="config.valueFormat || 'YYYY-MM-DD HH:mm:ss'"
10
10
  @change="changeHandler"
11
11
  ></TMagicDatePicker>
12
12
  </template>
13
13
 
14
- <script lang="ts" setup>
14
+ <script lang="ts" setup name="MFormDate">
15
15
  import { TMagicDatePicker } from '@tmagic/design';
16
16
  import { datetimeFormatter } from '@tmagic/utils';
17
17
 
@@ -26,7 +26,7 @@ const props = defineProps<{
26
26
  name: string;
27
27
  prop: string;
28
28
  disabled?: boolean;
29
- size: 'mini' | 'small' | 'medium';
29
+ size?: 'large' | 'default' | 'small';
30
30
  }>();
31
31
 
32
32
  const emit = defineEmits(['change']);
@@ -13,7 +13,7 @@
13
13
  ></TMagicDatePicker>
14
14
  </template>
15
15
 
16
- <script lang="ts" setup>
16
+ <script lang="ts" setup name="MFormDateTime">
17
17
  import { TMagicDatePicker } from '@tmagic/design';
18
18
  import { datetimeFormatter } from '@tmagic/utils';
19
19
 
@@ -28,7 +28,7 @@ const props = defineProps<{
28
28
  name: string;
29
29
  prop: string;
30
30
  disabled?: boolean;
31
- size: 'mini' | 'small' | 'medium';
31
+ size?: 'large' | 'default' | 'small';
32
32
  }>();
33
33
 
34
34
  const emit = defineEmits(['change']);
@@ -13,7 +13,7 @@
13
13
  ></TMagicDatePicker>
14
14
  </template>
15
15
 
16
- <script lang="ts" setup>
16
+ <script lang="ts" setup name="MFormDateRange">
17
17
  import { ref, watch } from 'vue';
18
18
 
19
19
  import { TMagicDatePicker } from '@tmagic/design';
@@ -30,7 +30,7 @@ const props = defineProps<{
30
30
  name: string;
31
31
  prop: string;
32
32
  disabled?: boolean;
33
- size: 'mini' | 'small' | 'medium';
33
+ size?: 'large' | 'default' | 'small';
34
34
  }>();
35
35
 
36
36
  const emit = defineEmits(['change']);
@@ -2,7 +2,7 @@
2
2
  <span v-if="model">{{ model[name] }}</span>
3
3
  </template>
4
4
 
5
- <script setup lang="ts">
5
+ <script setup lang="ts" name="MFormDisplay">
6
6
  import { DisplayConfig } from '../schema';
7
7
  import { useAddField } from '../utils/useAddField';
8
8