@tmagic/form 1.2.0-beta.9 → 1.2.1

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 (82) hide show
  1. package/dist/style.css +1 -1
  2. package/dist/{tmagic-form.mjs → tmagic-form.js} +313 -129
  3. package/dist/tmagic-form.js.map +1 -0
  4. package/dist/{tmagic-form.umd.js → tmagic-form.umd.cjs} +312 -127
  5. package/dist/tmagic-form.umd.cjs.map +1 -0
  6. package/package.json +10 -8
  7. package/src/Form.vue +2 -2
  8. package/src/FormDialog.vue +3 -1
  9. package/src/containers/Col.vue +3 -1
  10. package/src/containers/Container.vue +6 -3
  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 +46 -19
  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/index.ts +1 -1
  40. package/src/schema.ts +25 -9
  41. package/src/theme/form.scss +1 -1
  42. package/src/utils/config.ts +1 -1
  43. package/src/utils/containerProps.ts +1 -1
  44. package/src/utils/createForm.ts +1 -1
  45. package/src/utils/form.ts +6 -6
  46. package/src/utils/useAddField.ts +1 -1
  47. package/types/Form.vue.d.ts +32 -170
  48. package/types/FormDialog.vue.d.ts +4 -0
  49. package/types/containers/Col.vue.d.ts +12 -74
  50. package/types/containers/Container.vue.d.ts +17 -95
  51. package/types/containers/Fieldset.vue.d.ts +15 -87
  52. package/types/containers/GroupList.vue.d.ts +11 -71
  53. package/types/containers/GroupListItem.vue.d.ts +12 -80
  54. package/types/containers/Panel.vue.d.ts +4 -0
  55. package/types/containers/Row.vue.d.ts +12 -74
  56. package/types/containers/Step.vue.d.ts +13 -79
  57. package/types/containers/Table.vue.d.ts +10 -0
  58. package/types/containers/Tabs.vue.d.ts +12 -74
  59. package/types/fields/Cascader.vue.d.ts +12 -78
  60. package/types/fields/Checkbox.vue.d.ts +12 -78
  61. package/types/fields/CheckboxGroup.vue.d.ts +12 -78
  62. package/types/fields/ColorPicker.vue.d.ts +12 -78
  63. package/types/fields/Date.vue.d.ts +12 -78
  64. package/types/fields/DateTime.vue.d.ts +12 -78
  65. package/types/fields/Daterange.vue.d.ts +12 -78
  66. package/types/fields/Display.vue.d.ts +9 -65
  67. package/types/fields/DynamicField.vue.d.ts +12 -78
  68. package/types/fields/Hidden.vue.d.ts +9 -65
  69. package/types/fields/Link.vue.d.ts +12 -78
  70. package/types/fields/Number.vue.d.ts +12 -81
  71. package/types/fields/RadioGroup.vue.d.ts +12 -78
  72. package/types/fields/Select.vue.d.ts +12 -79
  73. package/types/fields/SelectOptionGroups.vue.d.ts +4 -50
  74. package/types/fields/SelectOptions.vue.d.ts +5 -53
  75. package/types/fields/Switch.vue.d.ts +12 -78
  76. package/types/fields/Text.vue.d.ts +12 -81
  77. package/types/fields/Textarea.vue.d.ts +12 -81
  78. package/types/fields/Time.vue.d.ts +12 -78
  79. package/types/schema.d.ts +23 -8
  80. package/types/utils/form.d.ts +2 -1
  81. package/dist/tmagic-form.mjs.map +0 -1
  82. 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,14 +99,14 @@
97
99
  </template>
98
100
 
99
101
  <div style="text-align: center" v-if="config.expand && type !== 'fieldset'">
100
- <TMagicButton type="primary" size="small" text @click="expandHandler">{{
102
+ <TMagicButton type="primary" size="small" :disabled="false" text @click="expandHandler">{{
101
103
  expand ? '收起配置' : '展开更多配置'
102
104
  }}</TMagicButton>
103
105
  </div>
104
106
  </div>
105
107
  </template>
106
108
 
107
- <script setup lang="ts">
109
+ <script setup lang="ts" name="MFormContainer">
108
110
  import { computed, inject, ref, resolveComponent, watchEffect } from 'vue';
109
111
  import { WarningFilled } from '@element-plus/icons-vue';
110
112
 
@@ -118,6 +120,7 @@ const props = withDefaults(
118
120
  model: FormValue;
119
121
  config: ChildConfig;
120
122
  prop?: string;
123
+ disabled?: boolean;
121
124
  labelWidth?: string;
122
125
  expandMore?: boolean;
123
126
  stepActive?: string | number;
@@ -159,7 +162,7 @@ const tagName = computed(() => {
159
162
  return 'm-fields-text';
160
163
  });
161
164
 
162
- const disabled = computed(() => filterFunction(mForm, props.config.disabled, props));
165
+ const disabled = computed(() => props.disabled || filterFunction(mForm, props.config.disabled, props));
163
166
 
164
167
  const tooltip = computed(() => filterFunction(mForm, props.config.tooltip, props));
165
168
 
@@ -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"
@@ -23,11 +24,12 @@
23
24
 
24
25
  <TMagicTableColumn
25
26
  label="操作"
26
- width="55"
27
+ :width="config.operateColWidth || 55"
27
28
  align="center"
28
29
  :fixed="config.fixed === false ? undefined : 'left'"
29
30
  >
30
31
  <template v-slot="scope">
32
+ <slot name="operateCol" :scope="scope"></slot>
31
33
  <TMagicIcon
32
34
  v-show="showDelete(scope.$index + 1 + pagecontext * pagesize - 1)"
33
35
  class="m-table-delete-icon"
@@ -49,6 +51,7 @@
49
51
  size="small"
50
52
  type="primary"
51
53
  :icon="ArrowUp"
54
+ :disabled="disabled"
52
55
  text
53
56
  @click="upHandler(scope.$index + 1 + pagecontext * pagesize - 1)"
54
57
  @dblclick="topHandler(scope.$index + 1 + pagecontext * pagesize - 1)"
@@ -64,6 +67,7 @@
64
67
  size="small"
65
68
  type="primary"
66
69
  :icon="ArrowDown"
70
+ :disabled="disabled"
67
71
  text
68
72
  @click="downHandler(scope.$index + 1 + pagecontext * pagesize - 1)"
69
73
  @dblclick="bottomHandler(scope.$index + 1 + pagecontext * pagesize - 1)"
@@ -99,9 +103,10 @@
99
103
  <Container
100
104
  v-if="scope.$index > -1"
101
105
  labelWidth="0"
106
+ :disabled="disabled"
102
107
  :prop="getProp(scope.$index)"
103
108
  :rules="column.rules"
104
- :config="makeConfig(column)"
109
+ :config="makeConfig(column, scope.row)"
105
110
  :model="scope.row"
106
111
  :size="size"
107
112
  @change="$emit('change', model[modelName])"
@@ -112,7 +117,10 @@
112
117
  </TMagicTable>
113
118
  </TMagicTooltip>
114
119
  <slot></slot>
115
- <TMagicButton v-if="addable" size="small" type="primary" plain @click="newHandler()">添加</TMagicButton> &nbsp;
120
+ <TMagicButton v-if="addable" size="small" type="primary" :disabled="disabled" plain @click="newHandler()"
121
+ >添加</TMagicButton
122
+ >
123
+ &nbsp;
116
124
  <TMagicButton
117
125
  :icon="Grid"
118
126
  size="small"
@@ -132,18 +140,21 @@
132
140
  </TMagicButton>
133
141
  <TMagicUpload
134
142
  v-if="importable"
143
+ style="display: inline-block"
135
144
  ref="excelBtn"
136
145
  action="/noop"
146
+ :disabled="disabled"
137
147
  :on-change="excelHandler"
138
148
  :auto-upload="false"
139
- style="display: inline-block"
140
149
  >
141
- <TMagicButton size="small" type="success" plain>导入EXCEL</TMagicButton> </TMagicUpload
150
+ <TMagicButton size="small" type="success" :disabled="disabled" plain>导入EXCEL</TMagicButton> </TMagicUpload
142
151
  >&nbsp;
143
- <TMagicButton v-if="importable" size="small" type="warning" plain @click="clearHandler()">清空</TMagicButton>
152
+ <TMagicButton v-if="importable" size="small" type="warning" :disabled="disabled" plain @click="clearHandler()"
153
+ >清空</TMagicButton
154
+ >
144
155
  </div>
145
156
 
146
- <div class="bottom" style="text-align: right">
157
+ <div class="bottom" style="text-align: right" v-if="config.pagination">
147
158
  <TMagicPagination
148
159
  layout="total, sizes, prev, pager, next, jumper"
149
160
  :hide-on-single-page="model[modelName].length < pagesize"
@@ -159,8 +170,8 @@
159
170
  </div>
160
171
  </template>
161
172
 
162
- <script setup lang="ts">
163
- import { computed, inject, onMounted, ref, toRefs } from 'vue';
173
+ <script setup lang="ts" name="MFormTable">
174
+ import { computed, inject, onMounted, ref, toRefs, watchEffect } from 'vue';
164
175
  import { ArrowDown, ArrowUp, Delete, FullScreen, Grid } from '@element-plus/icons-vue';
165
176
  import { cloneDeep } from 'lodash-es';
166
177
  import Sortable, { SortableEvent } from 'sortablejs';
@@ -190,6 +201,7 @@ const props = withDefaults(
190
201
  prop?: string;
191
202
  labelWidth?: string;
192
203
  sort?: boolean;
204
+ disabled?: boolean;
193
205
  sortKey?: string;
194
206
  text?: string;
195
207
  size?: string;
@@ -220,6 +232,15 @@ const isFullscreen = ref(false);
220
232
 
221
233
  const modelName = computed(() => props.name || props.config.name || '');
222
234
 
235
+ const data = computed(() =>
236
+ props.config.pagination
237
+ ? props.model[modelName.value].filter(
238
+ (item: any, index: number) =>
239
+ index >= pagecontext.value * pagesize.value && index + 1 <= (pagecontext.value + 1) * pagesize.value,
240
+ )
241
+ : props.model[modelName.value],
242
+ );
243
+
223
244
  const sortChange = ({ prop, order }: SortProp) => {
224
245
  if (order === 'ascending') {
225
246
  props.model[modelName.value] = props.model[modelName.value].sort((a: any, b: any) => a[prop] - b[prop]);
@@ -248,11 +269,11 @@ const swapArray = (index1: number, index2: number) => {
248
269
  };
249
270
 
250
271
  const rowDrop = () => {
251
- const tableEl = tMagicTable.value?.$el;
252
- if (tableEl?.querySelectorAll('.el-table__body > tbody')) {
272
+ const tableEl = tMagicTable.value?.instance.$el;
273
+ const tBodyEl = tableEl?.querySelector('.el-table__body > tbody');
274
+ if (tBodyEl) {
253
275
  // eslint-disable-next-line prefer-destructuring
254
- const el = tableEl.querySelectorAll('.el-table__body > tbody')[0];
255
- const sortable = Sortable.create(el, {
276
+ const sortable = Sortable.create(tBodyEl, {
256
277
  onEnd: ({ newIndex, oldIndex }: SortableEvent) => {
257
278
  if (typeof newIndex === 'undefined') return;
258
279
  if (typeof oldIndex === 'undefined') return;
@@ -262,11 +283,11 @@ const rowDrop = () => {
262
283
  sortable.destroy();
263
284
  mForm?.$emit('field-change', props.prop, props.model[modelName.value]);
264
285
  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)';
286
+ const elTrs = tableEl.querySelectorAll('.el-table__body > tbody > tr');
287
+ if (elTrs?.[newIndex]) {
288
+ elTrs[newIndex].style.backgroundColor = 'rgba(243, 89, 59, 0.2)';
268
289
  sleep(1000).then(() => {
269
- eltrs[newIndex].style.backgroundColor = '';
290
+ elTrs[newIndex].style.backgroundColor = '';
270
291
  });
271
292
  }
272
293
  });
@@ -348,7 +369,9 @@ onMounted(() => {
348
369
  if (props.sort && props.sortKey) {
349
370
  props.model[modelName.value].sort((a: any, b: any) => b[props.sortKey] - a[props.sortKey]);
350
371
  }
372
+ });
351
373
 
374
+ watchEffect(() => {
352
375
  if (props.config.dropSort) {
353
376
  rowDrop();
354
377
  }
@@ -402,6 +425,7 @@ const itemExtra = (fuc: any, index: number) => {
402
425
  };
403
426
 
404
427
  const removeHandler = (index: number) => {
428
+ if (props.disabled) return;
405
429
  props.model[modelName.value].splice(index, 1);
406
430
  emit('change', props.model[modelName.value]);
407
431
  };
@@ -421,8 +445,11 @@ const toggleRowSelection = (row: any, selected: boolean) => {
421
445
  tMagicTable.value?.toggleRowSelection.call(tMagicTable.value, row, selected);
422
446
  };
423
447
 
424
- const makeConfig = (config: ColumnConfig) => {
448
+ const makeConfig = (config: ColumnConfig, row: any) => {
425
449
  const newConfig = cloneDeep(config);
450
+ if (typeof config.itemsFunction === 'function') {
451
+ newConfig.items = config.itemsFunction(row);
452
+ }
426
453
  delete newConfig.display;
427
454
  return newConfig;
428
455
  };
@@ -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