@neatui/vue 2.15.7 → 2.15.9
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
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neatui/vue",
|
|
3
|
-
"version": "2.15.
|
|
3
|
+
"version": "2.15.9",
|
|
4
4
|
"description": "basic component ui",
|
|
5
5
|
"main": "./src/index.ts",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@fekit/scrollto": "^3.0.3",
|
|
29
29
|
"@fekit/toast": "^2.7.2",
|
|
30
30
|
"@fekit/utils": "^4.3.1",
|
|
31
|
-
"@neatui/css": "^3.10.
|
|
31
|
+
"@neatui/css": "^3.10.6",
|
|
32
32
|
"@rollup/plugin-commonjs": "^26.0.1",
|
|
33
33
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
34
34
|
"@vue/compiler-sfc": "^3.4.30",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<div :class="listClass" :style="listStyle" am-view-item="list">
|
|
4
4
|
<slot name="list" :mode="mode"></slot>
|
|
5
5
|
</div>
|
|
6
|
-
<div
|
|
6
|
+
<div v-if="view === 'iteming' || view === 'listing' || view === 'item'" ref="itemRef" :class="itemClass" :style="itemStyle" am-view-item="item">
|
|
7
7
|
<div class="iroute-view-dark" @click="cancel"></div>
|
|
8
8
|
<div class="iroute-view-body" :style="mode === 'preview' || mode === 'pop-up' ? '' : 'width: 100%;'">
|
|
9
9
|
<slot name="item" :mode="mode"></slot>
|
|
@@ -64,17 +64,17 @@
|
|
|
64
64
|
);
|
|
65
65
|
};
|
|
66
66
|
};
|
|
67
|
-
provide('onlist', evs('list', 'item'));
|
|
68
|
-
provide('onitem', evs('item', 'list'));
|
|
69
67
|
|
|
70
68
|
const init = ref(0);
|
|
71
69
|
const view = ref('');
|
|
72
70
|
const anim = (e: any) => {
|
|
73
71
|
if (
|
|
74
72
|
e.animationName === 'am-show-default' ||
|
|
73
|
+
e.animationName === 'am-show-window' ||
|
|
75
74
|
e.animationName === 'am-show-preview' ||
|
|
76
75
|
e.animationName === 'am-show-pop-up' ||
|
|
77
76
|
e.animationName === 'am-hide-default' ||
|
|
77
|
+
e.animationName === 'am-hide-window' ||
|
|
78
78
|
e.animationName === 'am-hide-preview' ||
|
|
79
79
|
e.animationName === 'am-hide-pop-up'
|
|
80
80
|
) {
|
|
@@ -93,11 +93,13 @@
|
|
|
93
93
|
}
|
|
94
94
|
};
|
|
95
95
|
|
|
96
|
+
provide('onlist', evs('list', 'item'));
|
|
97
|
+
provide('onitem', evs('item', 'list'));
|
|
96
98
|
watch(() => route.query[props.queryName], a);
|
|
97
99
|
a();
|
|
98
100
|
|
|
99
101
|
// 取消
|
|
100
|
-
const cancel = (
|
|
102
|
+
const cancel = () => {
|
|
101
103
|
const _query = { ...route.query };
|
|
102
104
|
delete _query[props.queryName];
|
|
103
105
|
router.push({ path: route.path, query: _query });
|
|
@@ -242,9 +244,6 @@
|
|
|
242
244
|
flex-direction: row !important;
|
|
243
245
|
}
|
|
244
246
|
|
|
245
|
-
&[am-view-item~='list'] {
|
|
246
|
-
display: flex;
|
|
247
|
-
}
|
|
248
247
|
&[am-view-item~='item'] {
|
|
249
248
|
position: absolute;
|
|
250
249
|
top: 0;
|
|
@@ -333,9 +332,6 @@
|
|
|
333
332
|
flex-direction: row !important;
|
|
334
333
|
}
|
|
335
334
|
|
|
336
|
-
&[am-view-item~='list'] {
|
|
337
|
-
display: flex;
|
|
338
|
-
}
|
|
339
335
|
&[am-view-item~='item'] {
|
|
340
336
|
position: fixed;
|
|
341
337
|
flex-direction: column;
|
|
@@ -372,4 +368,73 @@
|
|
|
372
368
|
}
|
|
373
369
|
}
|
|
374
370
|
}
|
|
371
|
+
|
|
372
|
+
// 窗口模式
|
|
373
|
+
[am-view][am-mode~='window'] {
|
|
374
|
+
overflow: hidden;
|
|
375
|
+
|
|
376
|
+
@keyframes am-show-default {
|
|
377
|
+
0% {
|
|
378
|
+
opacity: 0;
|
|
379
|
+
transform: translate3d(1em, 0, 0);
|
|
380
|
+
}
|
|
381
|
+
100% {
|
|
382
|
+
opacity: 1;
|
|
383
|
+
transform: translate3d(0, 0, 0);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
@keyframes am-hide-default {
|
|
387
|
+
0% {
|
|
388
|
+
opacity: 1;
|
|
389
|
+
transform: translate3d(0, 0, 0);
|
|
390
|
+
}
|
|
391
|
+
100% {
|
|
392
|
+
opacity: 0;
|
|
393
|
+
transform: translate3d(1em, 0, 0);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
&[view-full~='1'] {
|
|
398
|
+
position: fixed;
|
|
399
|
+
width: 100%;
|
|
400
|
+
height: 100%;
|
|
401
|
+
left: 0;
|
|
402
|
+
top: 0;
|
|
403
|
+
z-index: 15;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
[am-view-item] {
|
|
407
|
+
display: none;
|
|
408
|
+
|
|
409
|
+
&[am-view-item~='row'] {
|
|
410
|
+
flex-direction: row !important;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
&[am-view='list'] {
|
|
414
|
+
[am-view-item~='list'] {
|
|
415
|
+
flex-direction: column;
|
|
416
|
+
display: flex;
|
|
417
|
+
animation: am-show-default 0s ease both;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
&[am-view='listing'] {
|
|
421
|
+
[am-view-item~='item'] {
|
|
422
|
+
flex-direction: column;
|
|
423
|
+
display: flex;
|
|
424
|
+
animation: am-hide-default 0s ease-in-out both;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
&[am-view='item'] {
|
|
428
|
+
[am-view-item~='item'] {
|
|
429
|
+
display: flex;
|
|
430
|
+
animation: am-show-default 0s ease both;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
&[am-view='iteming'] {
|
|
434
|
+
[am-view-item~='list'] {
|
|
435
|
+
display: flex;
|
|
436
|
+
animation: am-hide-default 0s ease-in-out both;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
375
440
|
</style>
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
</template>
|
|
110
110
|
|
|
111
111
|
<script setup lang="ts">
|
|
112
|
-
import { reactive, computed
|
|
112
|
+
import { reactive, computed } from 'vue';
|
|
113
113
|
import { useRoute } from 'vue-router';
|
|
114
114
|
|
|
115
115
|
interface ModelValueProps {
|
|
@@ -152,11 +152,37 @@
|
|
|
152
152
|
});
|
|
153
153
|
|
|
154
154
|
const emits = defineEmits(['update:modelValue', 'page', 'size']);
|
|
155
|
+
// Auto-detect common pagination keys when `defined` is omitted.
|
|
156
|
+
const defined = computed<DefinedProps>(() => {
|
|
157
|
+
const result: DefinedProps = { ...(props.defined || {}) };
|
|
158
|
+
const ensureKey = (field: keyof DefinedProps, candidates: string[], sources: Array<Record<string, any>>) => {
|
|
159
|
+
if (result[field]) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
for (const key of candidates) {
|
|
163
|
+
if (sources.some((source) => source && Object.prototype.hasOwnProperty.call(source, key))) {
|
|
164
|
+
result[field] = key;
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
result[field] = candidates[0];
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
ensureKey('page', ['page', 'current', 'currentPage'], [props.modelValue, props.data]);
|
|
172
|
+
ensureKey('totalPages', ['totalPages', 'pages', 'toastPages', 'totalPage'], [props.data]);
|
|
173
|
+
ensureKey('total', ['total', 'totalCount'], [props.data]);
|
|
174
|
+
ensureKey('pageSize', ['pageSize', 'size', 'page_size'], [props.modelValue, props.data]);
|
|
175
|
+
|
|
176
|
+
return result;
|
|
177
|
+
});
|
|
178
|
+
|
|
155
179
|
const state: any = reactive({
|
|
156
180
|
id: computed(() => (props.id || 'PAGINATION' + route.path?.replace(/\//g, '_')).toUpperCase()),
|
|
157
181
|
showTotal: true,
|
|
158
182
|
list: computed(() => {
|
|
159
|
-
const
|
|
183
|
+
const pageKey = defined.value.page || 'page';
|
|
184
|
+
const totalPagesKey = defined.value.totalPages || 'totalPages';
|
|
185
|
+
const _page = Number(props.data[pageKey] || 1);
|
|
160
186
|
const list = [_page];
|
|
161
187
|
if (_page > 1) {
|
|
162
188
|
list.unshift(_page - 1);
|
|
@@ -166,7 +192,7 @@
|
|
|
166
192
|
}
|
|
167
193
|
const _max = 5 - list.length;
|
|
168
194
|
for (let i = 1; i <= _max; i++) {
|
|
169
|
-
if (_page + i <= props.data[
|
|
195
|
+
if (_page + i <= props.data[totalPagesKey]) {
|
|
170
196
|
list.push(_page + i);
|
|
171
197
|
}
|
|
172
198
|
}
|
|
@@ -179,8 +205,9 @@
|
|
|
179
205
|
return list;
|
|
180
206
|
}),
|
|
181
207
|
lists: computed(() => {
|
|
208
|
+
const totalPagesKey = defined.value.totalPages || 'totalPages';
|
|
182
209
|
const _lists: any = [];
|
|
183
|
-
for (let i = 1; i <= props.data[
|
|
210
|
+
for (let i = 1; i <= props.data[totalPagesKey]; i++) {
|
|
184
211
|
_lists.push(i);
|
|
185
212
|
}
|
|
186
213
|
return _lists;
|
|
@@ -188,27 +215,32 @@
|
|
|
188
215
|
});
|
|
189
216
|
|
|
190
217
|
const prev = () => {
|
|
191
|
-
const
|
|
192
|
-
|
|
218
|
+
const pageKey = defined.value.page || 'page';
|
|
219
|
+
const _page = Number(props.data[pageKey]) - 1 < 1 ? 1 : Number(props.data[pageKey]) - 1;
|
|
220
|
+
emits('update:modelValue', { ...props.modelValue, ...{ [pageKey]: _page } });
|
|
193
221
|
emits('page', _page);
|
|
194
222
|
};
|
|
195
223
|
|
|
196
224
|
const next = () => {
|
|
225
|
+
const pageKey = defined.value.page || 'page';
|
|
226
|
+
const totalPagesKey = defined.value.totalPages || 'totalPages';
|
|
197
227
|
const _page =
|
|
198
|
-
Number(props.data[
|
|
199
|
-
? props.data[
|
|
200
|
-
: Number(props.data[
|
|
201
|
-
emits('update:modelValue', { ...props.modelValue, ...{ [
|
|
228
|
+
Number(props.data[pageKey]) + 1 > props.data[totalPagesKey]
|
|
229
|
+
? props.data[totalPagesKey]
|
|
230
|
+
: Number(props.data[pageKey]) + 1;
|
|
231
|
+
emits('update:modelValue', { ...props.modelValue, ...{ [pageKey]: _page } });
|
|
202
232
|
emits('page', _page);
|
|
203
233
|
};
|
|
204
234
|
|
|
205
235
|
const page = (idx: any) => {
|
|
206
|
-
|
|
236
|
+
const pageKey = defined.value.page || 'page';
|
|
237
|
+
emits('update:modelValue', { ...props.modelValue, ...{ [pageKey]: idx } });
|
|
207
238
|
emits('page', idx);
|
|
208
239
|
};
|
|
209
240
|
|
|
210
241
|
const size = (size: any) => {
|
|
211
|
-
|
|
242
|
+
const pageSizeKey = defined.value.pageSize || 'pageSize';
|
|
243
|
+
emits('update:modelValue', { ...props.modelValue, ...{ [pageSizeKey]: size } });
|
|
212
244
|
emits('size', size);
|
|
213
245
|
window.localStorage.setItem(state.id, `${size}`);
|
|
214
246
|
};
|