@neatui/vue 2.11.0 → 2.15.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/package.json +1 -1
- package/src/components/basic/LayerView/Layer.vue +0 -16
- package/src/components/display/Calendar.vue +14 -14
- package/src/components/display/CalendarReg.vue +14 -14
- package/src/components/display/Tree.vue +6 -6
- package/src/components/form/Cascader.vue +20 -20
- package/src/components/form/DatePicker.vue +8 -9
- package/src/components/form/DateRangePicker@v3.vue +5 -5
- package/src/components/form/DateRangeView@v3.vue +9 -9
- package/src/components/form/DateView.vue +14 -14
- package/src/components/form/DateView@v2.vue +14 -14
- package/src/components/form/DateView@v3.vue +17 -15
- package/src/components/form/Input@v3.vue +7 -7
- package/src/components/form/MoreSelect@v3.vue +85 -15
- package/src/components/form/MoreSelectList.vue +1 -1
- package/src/components/form/MoreSelectPanel@v3.vue +4 -4
- package/src/components/form/MoreSelectPicker.vue +1 -1
- package/src/components/form/MoreSelectTags.vue +1 -1
- package/src/components/form/PageMoreSelect.vue +15 -15
- package/src/components/form/PageSelect.vue +17 -17
- package/src/components/form/SearchMoreSelect.vue +1 -1
- package/src/components/form/SearchSelect@v3.vue +4 -4
- package/src/components/form/Select@v3.vue +227 -20
- package/src/components/form/SelectList.vue +8 -8
- package/src/components/form/SelectPicker.vue +7 -7
- package/src/components/form/SelectTags.vue +7 -7
- package/src/components/form/SelectTree/SelectTree@v1.vue +6 -6
- package/src/components/form/Switch.vue +33 -58
- package/src/components/form/Textarea@v2.vue +275 -0
- package/src/components/form/TimeView.vue +14 -14
- package/src/components/form/Upload.vue +52 -9
- package/src/components/form/date.ts +321 -0
- package/src/components/form/index.ts +2 -2
- package/src/components/form/number.ts +3 -0
- package/src/components/form/type.ts +224 -0
- package/src/components/loader/FormLoader/FormLoader@v2.vue +20 -20
- package/src/components/loader/FormLoader/FormLoader@v3.vue.backup +372 -291
- package/src/components/loader/FormLoader/FormRender@v3.vue.backup +4 -0
- package/src/components/loader/FormLoader/NodeLoader.vue +85 -0
- package/src/components/loader/FormLoader@v1/FormLoader.vue +1 -1
- package/src/components/loader/FormLoader@v1/FormRender.vue +49 -24
- package/src/components/loader/LayerLoader/LayerLoader.vue +1 -1
- package/src/components/loader/LimitLoader/LimitLoader@v3.vue +1 -1
- package/src/components/loader/MoveLoader/MoveLoader.vue +8 -8
- package/src/components/loader/TableLoader/TableRender.vue +1 -1
- package/src/components/loader/index.ts +1 -1
- package/src/components/tools/Pagination@a.vue +1 -1
- package/tsconfig.json +1 -1
- package/src/components/loader/FormLoader/index.ts +0 -2
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<template v-for="(item, index) in $nodes" :key="item.paths">
|
|
3
|
+
<div class="fekit-node-loader" :data-level="level" :data-index="index" :data-paths="item.paths" v-bind="item.attrs" v-on="item.$events" v-html="item.value"></div>
|
|
4
|
+
<NodeLoader v-if="item.child" :nodes="item.child" :level="$level" :index="index" :paths="item.paths" />
|
|
5
|
+
</template>
|
|
6
|
+
</template>
|
|
7
|
+
<script setup lang="ts">
|
|
8
|
+
import { computed } from 'vue';
|
|
9
|
+
import NodeLoader from './NodeLoader.vue';
|
|
10
|
+
|
|
11
|
+
interface NodeProps {
|
|
12
|
+
label?: string | ((data: any) => string);
|
|
13
|
+
field?: string | ((data: any) => string);
|
|
14
|
+
model?: string | ((data: any) => string);
|
|
15
|
+
attrs?: Record<string, any> | ((data: any) => Record<string, any>);
|
|
16
|
+
clear?: boolean | ((data: any) => boolean);
|
|
17
|
+
media?: string | ((data: any) => string);
|
|
18
|
+
value?: any | ((data: any) => any);
|
|
19
|
+
event?: Record<string, any> | ((data: any) => Record<string, any>);
|
|
20
|
+
child?: NodeProps[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface Props {
|
|
24
|
+
nodes: NodeProps[];
|
|
25
|
+
level?: number;
|
|
26
|
+
index?: number;
|
|
27
|
+
paths?: string;
|
|
28
|
+
}
|
|
29
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
30
|
+
nodes: () => [],
|
|
31
|
+
level: 0,
|
|
32
|
+
index: 0,
|
|
33
|
+
paths: '',
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const $nodes = computed(() => {
|
|
37
|
+
return props.nodes.map((item, index) => {
|
|
38
|
+
const paths = props.paths ? `${props.paths}-${index}` : `${index}`;
|
|
39
|
+
const context = { node: item, level: props.level, index, paths } as const;
|
|
40
|
+
|
|
41
|
+
let attrs: any = item.attrs;
|
|
42
|
+
if (typeof attrs === 'function') {
|
|
43
|
+
try {
|
|
44
|
+
attrs = attrs(context);
|
|
45
|
+
} catch {
|
|
46
|
+
/* noop */
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
let value: any = (item as any).value;
|
|
51
|
+
if (typeof value === 'function') {
|
|
52
|
+
try {
|
|
53
|
+
value = value(context);
|
|
54
|
+
} catch {
|
|
55
|
+
/* noop */
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
let ev: any = (item as any).event;
|
|
60
|
+
if (typeof ev === 'function') {
|
|
61
|
+
try {
|
|
62
|
+
ev = ev(context);
|
|
63
|
+
} catch {
|
|
64
|
+
ev = undefined;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const $events: Record<string, any> = {};
|
|
69
|
+
if (ev && typeof ev === 'object') {
|
|
70
|
+
for (const key in ev) {
|
|
71
|
+
const fn = ev[key];
|
|
72
|
+
if (typeof fn === 'function') {
|
|
73
|
+
$events[key] = (...args: any[]) => fn(context, ...args);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return { ...item, index, paths, attrs, value, $events } as any;
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const $level = computed(() => {
|
|
83
|
+
return props.level + 1;
|
|
84
|
+
});
|
|
85
|
+
</script>
|
|
@@ -170,7 +170,7 @@
|
|
|
170
170
|
<div v-for="(item, idx) in node.other.suffix" v-html="item.value" v-bind="item.attrs" :key="idx"></div>
|
|
171
171
|
</div>
|
|
172
172
|
</div>
|
|
173
|
-
<div v-if="$slots.submit" class="full
|
|
173
|
+
<div v-if="$slots.submit" class="w-full" ui-flex="row lm">
|
|
174
174
|
<div class="flex-fixed" :style="labelcss(node)"> </div>
|
|
175
175
|
<div class="flex-block"><slot name="submit"></slot></div>
|
|
176
176
|
</div>
|
|
@@ -2,12 +2,19 @@
|
|
|
2
2
|
<div class="flex-block pr">
|
|
3
3
|
<template v-if="mode === 'view'">
|
|
4
4
|
<slot :name="`${node.field}-value`" :data="data" :node="node" :bind.sync="bind">
|
|
5
|
-
<div class="nt-ss"><div v-html="value" style="padding-top: 2px
|
|
5
|
+
<div class="nt-ss"><div v-html="value" style="padding-top: 2px"></div></div>
|
|
6
6
|
</slot>
|
|
7
7
|
</template>
|
|
8
8
|
<template v-else>
|
|
9
|
-
<el-input v-if="node.model[0] === 'Input'" v-model="value" class="full
|
|
10
|
-
<el-input
|
|
9
|
+
<el-input v-if="node.model[0] === 'Input'" v-model="value" class="w-full" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted" />
|
|
10
|
+
<el-input
|
|
11
|
+
v-if="node.model[0] === 'Textarea'"
|
|
12
|
+
v-model="value"
|
|
13
|
+
class="w-full"
|
|
14
|
+
v-bind="{ ...(node.model[1] || {}, { type: 'textarea', rows: 3 }) }"
|
|
15
|
+
@input="setInteracted"
|
|
16
|
+
@blur="setInteracted"
|
|
17
|
+
/>
|
|
11
18
|
<el-select v-else-if="node.model[0] === 'Select'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted">
|
|
12
19
|
<el-option v-for="item in node.enums" :key="item.value" :label="item.label" :value="item.value"> </el-option>
|
|
13
20
|
</el-select>
|
|
@@ -19,17 +26,35 @@
|
|
|
19
26
|
</el-checkbox-group>
|
|
20
27
|
<el-checkbox v-else-if="node.model[0] === 'Checkbox'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted"> </el-checkbox>
|
|
21
28
|
<el-switch v-else-if="node.model[0] === 'Switch'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted"> </el-switch>
|
|
22
|
-
<el-time-select v-else-if="node.model[0] === 'TimeSelect'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted">
|
|
23
|
-
|
|
24
|
-
<el-
|
|
25
|
-
|
|
26
|
-
<el-
|
|
29
|
+
<el-time-select v-else-if="node.model[0] === 'TimeSelect'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted">
|
|
30
|
+
</el-time-select>
|
|
31
|
+
<el-time-picker v-else-if="node.model[0] === 'TimePicker'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted">
|
|
32
|
+
</el-time-picker>
|
|
33
|
+
<el-date-picker v-else-if="node.model[0] === 'DatePicker'" v-model="value" v-bind="{ ...(node.model[1] || {}) }" @input="setInteracted" @blur="setInteracted">
|
|
34
|
+
</el-date-picker>
|
|
35
|
+
<el-date-picker
|
|
36
|
+
v-else-if="node.model[0] === 'DateTimePicker'"
|
|
37
|
+
v-model="value"
|
|
38
|
+
type="datetime"
|
|
39
|
+
v-bind="{ ...(node.model[1] || {}) }"
|
|
40
|
+
@input="setInteracted"
|
|
41
|
+
@blur="setInteracted"
|
|
42
|
+
>
|
|
43
|
+
</el-date-picker>
|
|
44
|
+
<el-cascader
|
|
45
|
+
v-else-if="node.model[0] === 'Cascader'"
|
|
46
|
+
v-model="value"
|
|
47
|
+
:options="node.enums"
|
|
48
|
+
v-bind="{ ...node.model[1] }"
|
|
49
|
+
@input="setInteracted"
|
|
50
|
+
@blur="setInteracted"
|
|
51
|
+
></el-cascader>
|
|
27
52
|
<gallery-value v-else-if="node.model[0] === 'SelectImg'" :form="data" :node="node" v-bind="{ ...node.model[1] }"></gallery-value>
|
|
28
53
|
<!-- 自定义组件插槽 -->
|
|
29
54
|
<slot v-else-if="node.model[0]" :name="node.model[0]" :data="data" :node="node" :bind.sync="bind"></slot>
|
|
30
55
|
<!-- 自定义字段插槽 -->
|
|
31
56
|
<slot v-else :name="`${node.field}-value`" :data="data" :node="node" :bind.sync="bind">
|
|
32
|
-
<div class="nt-ss"><div v-html="value" style="padding-top: 2px
|
|
57
|
+
<div class="nt-ss"><div v-html="value" style="padding-top: 2px"></div></div>
|
|
33
58
|
</slot>
|
|
34
59
|
<p v-show="error.verify === 'no'" class="form-loader-verify" :data-verify-type="error.co">{{ error.tips }}</p>
|
|
35
60
|
</template>
|
|
@@ -44,28 +69,28 @@
|
|
|
44
69
|
props: {
|
|
45
70
|
mode: {
|
|
46
71
|
type: String,
|
|
47
|
-
default: 'edit'
|
|
72
|
+
default: 'edit',
|
|
48
73
|
},
|
|
49
74
|
node: {
|
|
50
75
|
type: Object,
|
|
51
|
-
default: () => ({})
|
|
76
|
+
default: () => ({}),
|
|
52
77
|
},
|
|
53
78
|
data: {
|
|
54
79
|
type: Object,
|
|
55
|
-
default: () => ({})
|
|
80
|
+
default: () => ({}),
|
|
56
81
|
},
|
|
57
82
|
interacted: {
|
|
58
83
|
type: Boolean,
|
|
59
|
-
default: false
|
|
60
|
-
}
|
|
84
|
+
default: false,
|
|
85
|
+
},
|
|
61
86
|
},
|
|
62
87
|
data() {
|
|
63
88
|
return {
|
|
64
89
|
_interacted: false,
|
|
65
90
|
bind: {
|
|
66
|
-
value: null
|
|
91
|
+
value: null,
|
|
67
92
|
},
|
|
68
|
-
error: {}
|
|
93
|
+
error: {},
|
|
69
94
|
};
|
|
70
95
|
},
|
|
71
96
|
created() {},
|
|
@@ -99,8 +124,8 @@
|
|
|
99
124
|
this.$set(this.data, this.node.field, value);
|
|
100
125
|
}
|
|
101
126
|
this.validate();
|
|
102
|
-
}
|
|
103
|
-
}
|
|
127
|
+
},
|
|
128
|
+
},
|
|
104
129
|
},
|
|
105
130
|
methods: {
|
|
106
131
|
async validate() {
|
|
@@ -166,7 +191,7 @@
|
|
|
166
191
|
this.validate();
|
|
167
192
|
}, 50);
|
|
168
193
|
}
|
|
169
|
-
}
|
|
194
|
+
},
|
|
170
195
|
},
|
|
171
196
|
watch: {
|
|
172
197
|
bind: {
|
|
@@ -183,22 +208,22 @@
|
|
|
183
208
|
this.$set(this.data, this.node.field, value);
|
|
184
209
|
this.$set(this.bind, 'value', value);
|
|
185
210
|
},
|
|
186
|
-
deep: true
|
|
211
|
+
deep: true,
|
|
187
212
|
},
|
|
188
213
|
interacted: {
|
|
189
214
|
handler(val) {
|
|
190
215
|
this._interacted = val;
|
|
191
216
|
this.validate();
|
|
192
217
|
},
|
|
193
|
-
deep: true
|
|
218
|
+
deep: true,
|
|
194
219
|
},
|
|
195
220
|
value: {
|
|
196
221
|
handler() {
|
|
197
222
|
this.validate();
|
|
198
223
|
},
|
|
199
|
-
deep: true
|
|
200
|
-
}
|
|
201
|
-
}
|
|
224
|
+
deep: true,
|
|
225
|
+
},
|
|
226
|
+
},
|
|
202
227
|
};
|
|
203
228
|
</script>
|
|
204
229
|
<style>
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
<script setup lang="ts">
|
|
76
76
|
import { nextTick, reactive, ref, watch, onMounted } from 'vue';
|
|
77
77
|
import LayerLoader from './LayerLoader.vue';
|
|
78
|
-
import { useBasicStore, useWorksStore, storeToRefs } from '@/
|
|
78
|
+
import { useBasicStore, useWorksStore, storeToRefs } from '@/stores';
|
|
79
79
|
import { deepcopy } from '@fekit/utils';
|
|
80
80
|
import scrollto from '@fekit/scrollto';
|
|
81
81
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="full
|
|
2
|
+
<div class="w-full" ui-flex="row xt">
|
|
3
3
|
<div class="flex-block mr-mm-sub my-sm-sub" ui-flex="row lm wrap">
|
|
4
4
|
<template v-for="(item, idx) in state.limit" :key="idx">
|
|
5
5
|
<div v-if="!item._close" ui-flex="row lm" v-bind="{ ...(item.attrs || {}) }">
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
layer: {
|
|
47
47
|
moveing: false,
|
|
48
48
|
from: null,
|
|
49
|
-
correct: ''
|
|
50
|
-
}
|
|
49
|
+
correct: '',
|
|
50
|
+
},
|
|
51
51
|
});
|
|
52
52
|
const word: any = {};
|
|
53
53
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
const props: any = withDefaults(defineProps<Props>(), {
|
|
62
62
|
data: () => [],
|
|
63
63
|
path: '',
|
|
64
|
-
line: true
|
|
64
|
+
line: true,
|
|
65
65
|
});
|
|
66
66
|
|
|
67
67
|
// 内部状态
|
|
@@ -267,7 +267,7 @@
|
|
|
267
267
|
top: 1.5em;
|
|
268
268
|
bottom: 0.5em;
|
|
269
269
|
left: 0.6em;
|
|
270
|
-
background-color: var(--co-line-ls);
|
|
270
|
+
background-color: var(--co-line-o-ls);
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
273
|
|
|
@@ -388,7 +388,7 @@
|
|
|
388
388
|
}
|
|
389
389
|
|
|
390
390
|
[data-selected='true'] {
|
|
391
|
-
background: var(--co-main-ss) !important;
|
|
391
|
+
background: var(--co-main-o-ss) !important;
|
|
392
392
|
}
|
|
393
393
|
|
|
394
394
|
.fekit-json-tree-tools {
|
|
@@ -451,7 +451,7 @@
|
|
|
451
451
|
left: 0;
|
|
452
452
|
top: 0;
|
|
453
453
|
z-index: 1;
|
|
454
|
-
box-shadow: inset 0 1px 0 0 var(--co-main-ls);
|
|
454
|
+
box-shadow: inset 0 1px 0 0 var(--co-main-o-ls);
|
|
455
455
|
}
|
|
456
456
|
|
|
457
457
|
// &[tree-level='2'] {
|
|
@@ -478,7 +478,7 @@
|
|
|
478
478
|
left: 0;
|
|
479
479
|
top: 0;
|
|
480
480
|
z-index: 1;
|
|
481
|
-
box-shadow: inset 0 0 0 1px var(--co-main-ls);
|
|
481
|
+
box-shadow: inset 0 0 0 1px var(--co-main-o-ls);
|
|
482
482
|
}
|
|
483
483
|
}
|
|
484
484
|
// 插入后面
|
|
@@ -493,7 +493,7 @@
|
|
|
493
493
|
left: 0;
|
|
494
494
|
top: 0;
|
|
495
495
|
z-index: 1;
|
|
496
|
-
box-shadow: inset 0 -1px 0 0 var(--co-main-ls);
|
|
496
|
+
box-shadow: inset 0 -1px 0 0 var(--co-main-o-ls);
|
|
497
497
|
}
|
|
498
498
|
|
|
499
499
|
// &[tree-level='2'] {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<template v-else>
|
|
16
16
|
<div v-if="model.value" v-bind="attrs" v-on="event">
|
|
17
17
|
<div v-if="model.value === 'image'" ui-cover="1:1" v-bind="model.attrs">
|
|
18
|
-
<div class="pa full bg-case-ls r-sm ot-no ol-no" :class="state.isloaded ? 'o-no' : 'o-ms'" ui-flex="col cm"><i ui-load="@d"></i></div>
|
|
18
|
+
<div class="pa full bg-case-o-ls r-sm ot-no ol-no" :class="state.isloaded ? 'o-no' : 'o-ms'" ui-flex="col cm"><i ui-load="@d"></i></div>
|
|
19
19
|
<img ref="img" class="r-sm" :src="value" @load="state.isloaded = 1" />
|
|
20
20
|
</div>
|
|
21
21
|
<label v-else-if="model.value === 'switch'" ui-form="@a type:switch" @click.prevent>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div ui-pagination="@a" class="full
|
|
2
|
+
<div ui-pagination="@a" class="w-full pading" ui-flex="row rm">
|
|
3
3
|
<div class="ml-sl ar mob-ac" ui-flex="row rm">
|
|
4
4
|
<div class="mx-ss-sub" ui-flex="row">
|
|
5
5
|
<div v-if="state.showTotal" ui-flex="row cm" ui-hide="<pad">共 {{ data[defined.total || 'total'] || 0 }} 条</div>
|
package/tsconfig.json
CHANGED
|
@@ -19,6 +19,6 @@
|
|
|
19
19
|
},
|
|
20
20
|
"lib": ["esnext", "dom", "dom.iterable", "scripthost"]
|
|
21
21
|
},
|
|
22
|
-
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "src/shims-vue.d.ts"],
|
|
22
|
+
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "src/shims-vue.d.ts", "src/components/loader/FormLoader/FormRender@v3.vue.backup", "src/components/loader/FormLoader/FormLoader@v3.vue.backup"],
|
|
23
23
|
"exclude": ["node_modules"]
|
|
24
24
|
}
|