@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.
- package/dist/style.css +1 -1
- package/dist/{tmagic-form.mjs → tmagic-form.js} +313 -129
- package/dist/tmagic-form.js.map +1 -0
- package/dist/{tmagic-form.umd.js → tmagic-form.umd.cjs} +312 -127
- package/dist/tmagic-form.umd.cjs.map +1 -0
- package/package.json +10 -8
- package/src/Form.vue +2 -2
- package/src/FormDialog.vue +3 -1
- package/src/containers/Col.vue +3 -1
- package/src/containers/Container.vue +6 -3
- 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 +46 -19
- 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/index.ts +1 -1
- package/src/schema.ts +25 -9
- package/src/theme/form.scss +1 -1
- package/src/utils/config.ts +1 -1
- package/src/utils/containerProps.ts +1 -1
- package/src/utils/createForm.ts +1 -1
- package/src/utils/form.ts +6 -6
- package/src/utils/useAddField.ts +1 -1
- 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 +10 -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 +23 -8
- 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,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
|
-
|
|
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"
|
|
@@ -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()"
|
|
120
|
+
<TMagicButton v-if="addable" size="small" type="primary" :disabled="disabled" plain @click="newHandler()"
|
|
121
|
+
>添加</TMagicButton
|
|
122
|
+
>
|
|
123
|
+
|
|
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
|
>
|
|
143
|
-
<TMagicButton v-if="importable" size="small" type="warning" plain @click="clearHandler()"
|
|
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
|
|
252
|
-
|
|
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
|
|
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
|
|
266
|
-
if (
|
|
267
|
-
|
|
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
|
-
|
|
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
|
};
|
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