@neatui/vue 2.15.7 → 2.15.8

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.7",
3
+ "version": "2.15.8",
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.3",
31
+ "@neatui/css": "^3.10.5",
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 :class="itemClass" :style="itemStyle" am-view-item="item" ref="itemRef" v-if="view === 'iteming' || view === 'listing' || view === 'item'">
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 = ({ target }: any = {}) => {
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, watch } from 'vue';
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 _page = Number(props.data[props.defined.page || 'page'] || 1);
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[props.defined.totalPages || 'totalPages']) {
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[props.defined.totalPages || 'totalPages']; i++) {
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 _page = Number(props.data[props.defined.page || 'page']) - 1 < 1 ? 1 : Number(props.data[props.defined.page || 'page']) - 1;
192
- emits('update:modelValue', { ...props.modelValue, ...{ [props.defined.page || 'page']: _page } });
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[props.defined.page || 'page']) + 1 > props.data[props.defined.totalPages || 'totalPages']
199
- ? props.data[props.defined.totalPages || 'totalPages']
200
- : Number(props.data[props.defined.page || 'page']) + 1;
201
- emits('update:modelValue', { ...props.modelValue, ...{ [props.defined.page || 'page']: _page } });
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
- emits('update:modelValue', { ...props.modelValue, ...{ [props.defined.page || 'page']: idx } });
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
- emits('update:modelValue', { ...props.modelValue, ...{ [props.defined.pageSize || 'pageSize']: size } });
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
  };
@@ -127,7 +127,6 @@
127
127
  <script setup lang="ts">
128
128
  import { reactive, computed } from 'vue';
129
129
  import { useRoute } from 'vue-router';
130
- import { Input } from '../form';
131
130
 
132
131
  const route: any = useRoute();
133
132