@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.
- package/dist/style.css +1 -1
- package/dist/{tmagic-form.mjs → tmagic-form.js} +322 -126
- package/dist/tmagic-form.js.map +1 -0
- package/dist/{tmagic-form.umd.js → tmagic-form.umd.cjs} +321 -124
- package/dist/tmagic-form.umd.cjs.map +1 -0
- package/package.json +10 -8
- package/src/Form.vue +11 -3
- package/src/FormDialog.vue +3 -1
- package/src/containers/Col.vue +3 -1
- package/src/containers/Container.vue +12 -6
- package/src/containers/Fieldset.vue +4 -1
- package/src/containers/GroupList.vue +4 -2
- package/src/containers/GroupListItem.vue +8 -5
- package/src/containers/Panel.vue +4 -1
- package/src/containers/Row.vue +3 -1
- package/src/containers/Step.vue +3 -1
- package/src/containers/Table.vue +44 -18
- package/src/containers/Tabs.vue +9 -4
- package/src/fields/Cascader.vue +2 -2
- package/src/fields/Checkbox.vue +2 -2
- package/src/fields/CheckboxGroup.vue +8 -3
- package/src/fields/ColorPicker.vue +2 -2
- package/src/fields/Date.vue +3 -3
- package/src/fields/DateTime.vue +2 -2
- package/src/fields/Daterange.vue +2 -2
- package/src/fields/Display.vue +1 -1
- package/src/fields/DynamicField.vue +2 -2
- package/src/fields/Hidden.vue +1 -1
- package/src/fields/Link.vue +2 -2
- package/src/fields/Number.vue +2 -2
- package/src/fields/RadioGroup.vue +9 -5
- package/src/fields/Select.vue +63 -24
- package/src/fields/SelectOptionGroups.vue +1 -1
- package/src/fields/SelectOptions.vue +1 -1
- package/src/fields/Switch.vue +2 -2
- package/src/fields/Text.vue +2 -2
- package/src/fields/Textarea.vue +2 -2
- package/src/fields/Time.vue +4 -2
- package/src/schema.ts +18 -4
- package/src/theme/form.scss +1 -1
- package/src/utils/form.ts +9 -5
- package/types/Form.vue.d.ts +32 -170
- package/types/FormDialog.vue.d.ts +4 -0
- package/types/containers/Col.vue.d.ts +12 -74
- package/types/containers/Container.vue.d.ts +17 -95
- package/types/containers/Fieldset.vue.d.ts +15 -87
- package/types/containers/GroupList.vue.d.ts +11 -71
- package/types/containers/GroupListItem.vue.d.ts +12 -80
- package/types/containers/Panel.vue.d.ts +4 -0
- package/types/containers/Row.vue.d.ts +12 -74
- package/types/containers/Step.vue.d.ts +13 -79
- package/types/containers/Table.vue.d.ts +4 -0
- package/types/containers/Tabs.vue.d.ts +12 -74
- package/types/fields/Cascader.vue.d.ts +12 -78
- package/types/fields/Checkbox.vue.d.ts +12 -78
- package/types/fields/CheckboxGroup.vue.d.ts +12 -78
- package/types/fields/ColorPicker.vue.d.ts +12 -78
- package/types/fields/Date.vue.d.ts +12 -78
- package/types/fields/DateTime.vue.d.ts +12 -78
- package/types/fields/Daterange.vue.d.ts +12 -78
- package/types/fields/Display.vue.d.ts +9 -65
- package/types/fields/DynamicField.vue.d.ts +12 -78
- package/types/fields/Hidden.vue.d.ts +9 -65
- package/types/fields/Link.vue.d.ts +12 -78
- package/types/fields/Number.vue.d.ts +12 -81
- package/types/fields/RadioGroup.vue.d.ts +12 -78
- package/types/fields/Select.vue.d.ts +12 -79
- package/types/fields/SelectOptionGroups.vue.d.ts +4 -50
- package/types/fields/SelectOptions.vue.d.ts +5 -53
- package/types/fields/Switch.vue.d.ts +12 -78
- package/types/fields/Text.vue.d.ts +12 -81
- package/types/fields/Textarea.vue.d.ts +12 -81
- package/types/fields/Time.vue.d.ts +12 -78
- package/types/schema.d.ts +17 -4
- package/types/utils/form.d.ts +2 -1
- package/dist/tmagic-form.mjs.map +0 -1
- package/dist/tmagic-form.umd.js.map +0 -1
package/src/containers/Col.vue
CHANGED
|
@@ -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">{{
|
|
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
|
-
|
|
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
|
-
|
|
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']);
|
package/src/containers/Panel.vue
CHANGED
|
@@ -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']);
|
package/src/containers/Row.vue
CHANGED
|
@@ -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']);
|
package/src/containers/Step.vue
CHANGED
|
@@ -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,
|
package/src/containers/Table.vue
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
v-if="model[modelName]"
|
|
8
8
|
ref="tMagicTable"
|
|
9
9
|
style="width: 100%"
|
|
10
|
-
:
|
|
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()"
|
|
119
|
+
<TMagicButton v-if="addable" size="small" type="primary" :disabled="disabled" plain @click="newHandler()"
|
|
120
|
+
>添加</TMagicButton
|
|
121
|
+
>
|
|
122
|
+
|
|
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
|
>
|
|
143
|
-
<TMagicButton v-if="importable" size="small" type="warning" plain @click="clearHandler()"
|
|
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
|
|
252
|
-
|
|
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
|
|
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
|
|
266
|
-
if (
|
|
267
|
-
|
|
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
|
-
|
|
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
|
};
|
package/src/containers/Tabs.vue
CHANGED
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
@tab-remove="onTabRemove"
|
|
11
11
|
>
|
|
12
12
|
<template v-for="(tab, tabIndex) in tabs">
|
|
13
|
-
<
|
|
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
|
-
</
|
|
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 {
|
|
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']);
|
package/src/fields/Cascader.vue
CHANGED
|
@@ -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
|
|
34
|
+
size?: 'large' | 'default' | 'small';
|
|
35
35
|
}>();
|
|
36
36
|
|
|
37
37
|
const emit = defineEmits(['change']);
|
package/src/fields/Checkbox.vue
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
25
|
+
size?: 'large' | 'default' | 'small';
|
|
26
26
|
}>();
|
|
27
27
|
|
|
28
28
|
const emit = defineEmits(['change']);
|
package/src/fields/Date.vue
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
:placeholder="config.placeholder"
|
|
7
7
|
:disabled="disabled"
|
|
8
8
|
:format="config.format"
|
|
9
|
-
:value-format="config.
|
|
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
|
|
29
|
+
size?: 'large' | 'default' | 'small';
|
|
30
30
|
}>();
|
|
31
31
|
|
|
32
32
|
const emit = defineEmits(['change']);
|
package/src/fields/DateTime.vue
CHANGED
|
@@ -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
|
|
31
|
+
size?: 'large' | 'default' | 'small';
|
|
32
32
|
}>();
|
|
33
33
|
|
|
34
34
|
const emit = defineEmits(['change']);
|
package/src/fields/Daterange.vue
CHANGED
|
@@ -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
|
|
33
|
+
size?: 'large' | 'default' | 'small';
|
|
34
34
|
}>();
|
|
35
35
|
|
|
36
36
|
const emit = defineEmits(['change']);
|
package/src/fields/Display.vue
CHANGED