vome-core 0.0.26 → 0.0.31

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.
Files changed (67) hide show
  1. package/dist/admin/components/vm-action-btn.vue +35 -8
  2. package/dist/admin/components/vm-aside-list-item.vue +18 -6
  3. package/dist/admin/components/vm-card-grid.vue +3 -2
  4. package/dist/admin/components/vm-card-head.vue +45 -0
  5. package/dist/admin/components/vm-card-meta.vue +22 -0
  6. package/dist/admin/components/vm-card-title.vue +56 -0
  7. package/dist/admin/components/vm-card.vue +72 -2
  8. package/dist/admin/components/vm-clamp-text.vue +39 -0
  9. package/dist/admin/components/vm-icon-btn.vue +88 -0
  10. package/dist/admin/components/vm-inline-search.vue +60 -0
  11. package/dist/admin/components/vm-page-tabs.vue +93 -0
  12. package/dist/admin/components/vm-split-layout.vue +36 -15
  13. package/dist/admin/components/vm-thumb.vue +49 -0
  14. package/dist/admin/config/plugin-dev.js +1 -1
  15. package/dist/admin/crud/components/vm-form-hint.vue +40 -22
  16. package/dist/admin/crud/components/vm-kv-row.vue +51 -0
  17. package/dist/admin/crud/components/vm-tag-list.vue +43 -17
  18. package/dist/admin/crud/components/vm-toggle-switch.vue +84 -0
  19. package/dist/admin/crud/config.js +1 -1
  20. package/dist/admin/crud/confirm.js +1 -1
  21. package/dist/admin/crud/dict.js +1 -1
  22. package/dist/admin/crud/index.d.ts +3 -1
  23. package/dist/admin/crud/index.js +1 -1
  24. package/dist/admin/crud/key.js +1 -1
  25. package/dist/admin/crud/mitt.js +1 -1
  26. package/dist/admin/crud/plugins.js +1 -1
  27. package/dist/admin/crud/span.js +1 -1
  28. package/dist/admin/crud/style.js +1 -1
  29. package/dist/admin/crud/validate.js +1 -1
  30. package/dist/admin/crud/vm-import-btn.vue +686 -0
  31. package/dist/admin/crud/vm-toolbar.vue +16 -0
  32. package/dist/admin/directives/perm.js +1 -1
  33. package/dist/admin/hooks/useUpload.js +1 -1
  34. package/dist/admin/lib/browser.js +1 -1
  35. package/dist/admin/lib/cn.js +1 -1
  36. package/dist/admin/lib/dialog-float.js +1 -1
  37. package/dist/admin/lib/export-excel.js +1 -1
  38. package/dist/admin/lib/file-preview.js +1 -1
  39. package/dist/admin/lib/import-excel.d.ts +18 -0
  40. package/dist/admin/lib/import-excel.js +1 -0
  41. package/dist/admin/lib/json.js +1 -1
  42. package/dist/admin/lib/menu.js +1 -1
  43. package/dist/admin/lib/tree.js +1 -1
  44. package/dist/admin/lib/upload.js +1 -1
  45. package/dist/admin/lib/video-frame.js +1 -1
  46. package/dist/admin/router/index.js +13 -3
  47. package/dist/client/vite-plugin-eps.d.ts +3 -3
  48. package/dist/client/vite-plugin-eps.js +6 -2
  49. package/dist/index.js +1 -1
  50. package/dist/server/index.js +1 -1
  51. package/dist/shared/excel.d.ts +10 -0
  52. package/dist/shared/excel.js +1 -1
  53. package/dist/shared/index.js +1 -1
  54. package/dist/shared/tree.js +1 -1
  55. package/dist/src/core/index.d.ts +1 -1
  56. package/dist/src/orm/import-excel.d.ts +31 -0
  57. package/dist/src/routing/index.d.ts +1 -0
  58. package/dist/src/routing/public-routes.d.ts +6 -0
  59. package/dist/src/server/index.d.ts +2 -2
  60. package/dist/src/shared/excel.d.ts +10 -0
  61. package/dist/src/shared/index.d.ts +1 -1
  62. package/dist/typings/routing/crud.d.ts +5 -0
  63. package/package.json +8 -3
  64. package/src/shared/excel.d.ts +10 -0
  65. package/src/shared/excel.ts +77 -0
  66. package/src/shared/index.ts +4 -0
  67. package/dist/admin/crud/components/vm-json-viewer.vue +0 -147
@@ -1,5 +1,9 @@
1
1
  <template>
2
- <div class="vm-split-layout" :style="gridStyle">
2
+ <div
3
+ class="vm-split-layout"
4
+ :class="{ 'has-toolbar': Boolean($slots.toolbar) }"
5
+ :style="gridStyle"
6
+ >
3
7
  <div v-if="$slots.toolbar" class="vm-split-layout__toolbar">
4
8
  <slot name="toolbar" />
5
9
  </div>
@@ -34,21 +38,24 @@ const gridStyle = computed(() => ({
34
38
  <style lang="scss" scoped>
35
39
  .vm-split-layout {
36
40
  display: grid;
37
- height: 100%;
41
+ width: 100%;
42
+ flex: 1;
38
43
  min-height: 0;
44
+ align-self: stretch;
39
45
  overflow: hidden;
40
46
  border-radius: var(--radius);
41
47
  background: var(--card);
42
48
  box-shadow: var(--shadow-soft);
43
- grid-template-columns: var(--vm-split-aside) minmax(0, 1fr);
49
+ grid-template-columns: var(--vm-split-aside, 240px) minmax(0, 1fr);
44
50
  grid-template-rows: minmax(0, 1fr);
51
+ }
45
52
 
46
- &:has(.vm-split-layout__toolbar) {
47
- grid-template-rows: auto minmax(0, 1fr);
48
- }
53
+ .vm-split-layout.has-toolbar {
54
+ grid-template-rows: auto minmax(0, 1fr);
49
55
  }
50
56
 
51
57
  .vm-split-layout__toolbar {
58
+ grid-row: 1;
52
59
  grid-column: 1 / -1;
53
60
  display: flex;
54
61
  flex-wrap: wrap;
@@ -60,26 +67,40 @@ const gridStyle = computed(() => ({
60
67
  }
61
68
 
62
69
  .vm-split-layout__aside {
63
- grid-row: 2;
70
+ grid-row: 1;
64
71
  grid-column: 1;
65
72
  min-height: 0;
66
73
  overflow: hidden;
67
74
  border-right: 1px solid color-mix(in srgb, var(--foreground) 8%, transparent);
75
+
76
+ :deep(.vm-aside) {
77
+ border-right: none;
78
+ }
68
79
  }
69
80
 
70
- .vm-split-layout__main {
81
+ .has-toolbar .vm-split-layout__aside {
71
82
  grid-row: 2;
83
+ }
84
+
85
+ .vm-split-layout__main {
86
+ grid-row: 1;
72
87
  grid-column: 2;
73
- display: grid;
88
+ display: flex;
89
+ flex-direction: column;
74
90
  min-width: 0;
75
91
  min-height: 0;
76
92
  overflow: hidden;
93
+ }
77
94
 
78
- :deep(.vm-crud) {
79
- height: 100%;
80
- min-height: 0;
81
- border-radius: 0;
82
- box-shadow: none;
83
- }
95
+ .has-toolbar .vm-split-layout__main {
96
+ grid-row: 2;
97
+ }
98
+
99
+ .vm-split-layout__main :deep(.vm-crud) {
100
+ flex: 1;
101
+ min-height: 0;
102
+ height: 100%;
103
+ border-radius: 0;
104
+ box-shadow: none;
84
105
  }
85
106
  </style>
@@ -0,0 +1,49 @@
1
+ <template>
2
+ <span class="vm-thumb" :style="boxStyle">
3
+ <img v-if="src" :src="src" alt="" />
4
+ <i v-else-if="icon" :class="icon" aria-hidden="true" />
5
+ <slot v-else />
6
+ </span>
7
+ </template>
8
+
9
+ <script setup lang="ts">
10
+ import { computed } from 'vue'
11
+
12
+ defineOptions({ name: 'vm-thumb' })
13
+
14
+ const props = withDefaults(
15
+ defineProps<{
16
+ src?: string
17
+ icon?: string
18
+ size?: number
19
+ }>(),
20
+ {
21
+ size: 32,
22
+ },
23
+ )
24
+
25
+ const boxStyle = computed(() => ({
26
+ width: `${props.size}px`,
27
+ height: `${props.size}px`,
28
+ }))
29
+ </script>
30
+
31
+ <style lang="scss" scoped>
32
+ .vm-thumb {
33
+ display: inline-flex;
34
+ flex-shrink: 0;
35
+ align-items: center;
36
+ justify-content: center;
37
+ overflow: hidden;
38
+ border-radius: 8px;
39
+ background: color-mix(in srgb, var(--brand) 12%, var(--card));
40
+ color: var(--brand);
41
+ font-size: 16px;
42
+
43
+ img {
44
+ width: 100%;
45
+ height: 100%;
46
+ object-fit: cover;
47
+ }
48
+ }
49
+ </style>
@@ -1 +1 @@
1
- const _0x1675a6=_0xb6be;(function(_0x4fa867,_0x1358cd){const _0x3f26b4=_0xb6be,_0x285beb=_0x4fa867();while(!![]){try{const _0x5da2c1=-parseInt(_0x3f26b4(0x1a6))/0x1+parseInt(_0x3f26b4(0x19c))/0x2+parseInt(_0x3f26b4(0x1a4))/0x3*(-parseInt(_0x3f26b4(0x1ae))/0x4)+parseInt(_0x3f26b4(0x1aa))/0x5*(parseInt(_0x3f26b4(0x1a1))/0x6)+parseInt(_0x3f26b4(0x19b))/0x7*(parseInt(_0x3f26b4(0x1ac))/0x8)+-parseInt(_0x3f26b4(0x1ab))/0x9+parseInt(_0x3f26b4(0x19f))/0xa*(parseInt(_0x3f26b4(0x1a9))/0xb);if(_0x5da2c1===_0x1358cd)break;else _0x285beb['push'](_0x285beb['shift']());}catch(_0xe41ab3){_0x285beb['push'](_0x285beb['shift']());}}}(_0x2484,0x1c41a));export const pluginDev={'docsUrl':_0x1675a6(0x1a8),'uploadUrl':_0x1675a6(0x1a7),'scaffolds':{'full':{'key':'full','title':_0x1675a6(0x1ad),'desc':_0x1675a6(0x19a),'downloadUrl':_0x1675a6(0x1a3)},'backend':{'key':_0x1675a6(0x1a0),'title':_0x1675a6(0x19d),'desc':'钩子\x20/\x20服务端插件脚手架(.vome:仅\x20server),适合上传、短信、支付等能力扩展。','downloadUrl':_0x1675a6(0x1a2)},'frontend':{'key':_0x1675a6(0x1a5),'title':'纯前端','desc':'后台微应用脚手架(.vome:含\x20web/),以\x20wujie\x20挂载独立前端页面。','downloadUrl':_0x1675a6(0x19e)}}};function _0xb6be(_0x101dc3,_0x353e36){_0x101dc3=_0x101dc3-0x19a;const _0x24840a=_0x2484();let _0xb6be52=_0x24840a[_0x101dc3];if(_0xb6be['mpgVUA']===undefined){var _0x425eef=function(_0x19c0b8){const _0x2e2946='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1ad588='',_0x844e3e='';for(let _0x5d7a3e=0x0,_0x209ace,_0x4a4f35,_0x3c0179=0x0;_0x4a4f35=_0x19c0b8['charAt'](_0x3c0179++);~_0x4a4f35&&(_0x209ace=_0x5d7a3e%0x4?_0x209ace*0x40+_0x4a4f35:_0x4a4f35,_0x5d7a3e++%0x4)?_0x1ad588+=String['fromCharCode'](0xff&_0x209ace>>(-0x2*_0x5d7a3e&0x6)):0x0){_0x4a4f35=_0x2e2946['indexOf'](_0x4a4f35);}for(let _0x1a1519=0x0,_0x1ed1b6=_0x1ad588['length'];_0x1a1519<_0x1ed1b6;_0x1a1519++){_0x844e3e+='%'+('00'+_0x1ad588['charCodeAt'](_0x1a1519)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x844e3e);};_0xb6be['XxwhQN']=_0x425eef,_0xb6be['kWevRc']={},_0xb6be['mpgVUA']=!![];}const _0x124d25=_0x24840a[0x0],_0x3cac21=_0x101dc3+_0x124d25,_0x3a09ca=_0xb6be['kWevRc'][_0x3cac21];return!_0x3a09ca?(_0xb6be52=_0xb6be['XxwhQN'](_0xb6be52),_0xb6be['kWevRc'][_0x3cac21]=_0xb6be52):_0xb6be52=_0x3a09ca,_0xb6be52;}function _0x2484(){const _0x5e218b=['Ahr0Chm6lY92B21LlMrLDI9WBhvNAw5Zl3vWBg9Hza','Ahr0Chm6lY92B21LlMrLDI9KB2nZl3bSDwDPBG','mJjcv3rvwei','nu1oCuLVBW','otq0mdu1rfrgy3L3','mtu5ndy0wfH6sezb','5yMn56UVicSG5zco56UV','ofrWse9zBa','5A6m5Pw05lIA5yQH5QIH5z2x6isA5OMl5P6277YilNzVBwxVVjRLKkSGC2vYDMvYios4JIb3zwlVViNVViZMNkZLNldLVidLJ5hMIzpLJixLKi7LJ5hLUipJGii','mJfvC3PLzhm','ndq0nJaYBLr5Exz3','57QV5zco56UV','Ahr0Chm6lY9NAxrLzs5JB20Vwu9vuL9puKCVwu9vuL9srvbpl3jHDY9Tyxn0zxiVCgX1z2LUlwzYB250zw5KlNPPCa','mZy5ndKWDKDPu0Hz','yMfJA2vUza','nZC1nduYufHPufjd','Ahr0Chm6lY9NAxrLzs5JB20Vwu9vuL9puKCVwu9vuL9srvbpl3jHDY9Tyxn0zxiVCgX1z2LUlwjHy2TLBMqUEMLW','Ahr0Chm6lY9NAxrLzs5JB20Vwu9vuL9puKCVwu9vuL9srvbpl3jHDY9Tyxn0zxiVCgX1z2LUlwz1BgWUEMLW','mta5odq1r3rAreX3','zNjVBNrLBMq','mtKXmZC3Cvn0B21n'];_0x2484=function(){return _0x5e218b;};return _0x2484();}
1
+ const _0x1cbd46=_0x5a22;(function(_0x31a748,_0x435a9a){const _0x8d48d6=_0x5a22,_0x2713cb=_0x31a748();while(!![]){try{const _0x333922=parseInt(_0x8d48d6(0x13c))/0x1*(parseInt(_0x8d48d6(0x141))/0x2)+-parseInt(_0x8d48d6(0x146))/0x3+-parseInt(_0x8d48d6(0x149))/0x4+parseInt(_0x8d48d6(0x143))/0x5+-parseInt(_0x8d48d6(0x13e))/0x6+-parseInt(_0x8d48d6(0x145))/0x7+-parseInt(_0x8d48d6(0x148))/0x8*(parseInt(_0x8d48d6(0x13f))/0x9);if(_0x333922===_0x435a9a)break;else _0x2713cb['push'](_0x2713cb['shift']());}catch(_0x2577f4){_0x2713cb['push'](_0x2713cb['shift']());}}}(_0x26cb,0x3cce1));function _0x26cb(){const _0x258a84=['mtuYwM1rEwrW','57QV5yMn56UV','mJi0mtK5nvHpy0nttG','5A6m5Pw05lIA5yQH5QIH5z2x6isA5OMl5P6277YilNzVBwxVVjRLKkSGC2vYDMvYios4JIb3zwlVViNVViZMNkZLNldLVidLJ5hMIzpLJixLKi7LJ5hLUipJGii','otuZmde1t0nzzKTd','mZu5mJi2ufnuB0Pp','yMfJA2vUza','mJCXmZeYs0vzvgPY','ndiYnJyWAhn5vgrn','zNjVBNrLBMq','Ahr0Chm6lY9NAxrLzs5JB20Vwu9vuL9puKCVwu9vuL9srvbpl3jHDY9Tyxn0zxiVCgX1z2LUlwjHy2TLBMqUEMLW','57QV5zco56UV','ndC4nKH2AK9SEG','Ahr0Chm6lY9NAxrLzs5JB20Vwu9vuL9puKCVwu9vuL9srvbpl3jHDY9Tyxn0zxiVCgX1z2LUlwz1BgWUEMLW','odaYmtG4BLrcyxHt','mtHvu1zXy1q','zNvSBa'];_0x26cb=function(){return _0x258a84;};return _0x26cb();}function _0x5a22(_0x1d06c8,_0x25b413){_0x1d06c8=_0x1d06c8-0x13b;const _0x26cbde=_0x26cb();let _0x5a2266=_0x26cbde[_0x1d06c8];if(_0x5a22['UOshFH']===undefined){var _0x102bc3=function(_0x29fbea){const _0x57241f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xfcd797='',_0x528141='';for(let _0x243a19=0x0,_0x25930a,_0x5a9bd2,_0x22e41c=0x0;_0x5a9bd2=_0x29fbea['charAt'](_0x22e41c++);~_0x5a9bd2&&(_0x25930a=_0x243a19%0x4?_0x25930a*0x40+_0x5a9bd2:_0x5a9bd2,_0x243a19++%0x4)?_0xfcd797+=String['fromCharCode'](0xff&_0x25930a>>(-0x2*_0x243a19&0x6)):0x0){_0x5a9bd2=_0x57241f['indexOf'](_0x5a9bd2);}for(let _0x22a825=0x0,_0x3c2d4a=_0xfcd797['length'];_0x22a825<_0x3c2d4a;_0x22a825++){_0x528141+='%'+('00'+_0xfcd797['charCodeAt'](_0x22a825)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x528141);};_0x5a22['ByZIsZ']=_0x102bc3,_0x5a22['yccSpH']={},_0x5a22['UOshFH']=!![];}const _0x6479cf=_0x26cbde[0x0],_0x9147b=_0x1d06c8+_0x6479cf,_0x1025f7=_0x5a22['yccSpH'][_0x9147b];return!_0x1025f7?(_0x5a2266=_0x5a22['ByZIsZ'](_0x5a2266),_0x5a22['yccSpH'][_0x9147b]=_0x5a2266):_0x5a2266=_0x1025f7,_0x5a2266;}export const pluginDev={'docsUrl':'https://vome.dev/docs/plugin','uploadUrl':'https://vome.dev/plugins/upload','scaffolds':{'full':{'key':_0x1cbd46(0x140),'title':'前端\x20+\x20后端','desc':_0x1cbd46(0x144),'downloadUrl':_0x1cbd46(0x13d)},'backend':{'key':_0x1cbd46(0x147),'title':_0x1cbd46(0x13b),'desc':'钩子\x20/\x20服务端插件脚手架(.vome:仅\x20server),适合上传、短信、支付等能力扩展。','downloadUrl':_0x1cbd46(0x14b)},'frontend':{'key':_0x1cbd46(0x14a),'title':_0x1cbd46(0x142),'desc':'后台微应用脚手架(.vome:含\x20web/),以\x20wujie\x20挂载独立前端页面。','downloadUrl':'https://gitee.com/YOUR_ORG/YOUR_REPO/raw/master/plugin-frontend.zip'}}};
@@ -1,8 +1,12 @@
1
1
  <template>
2
- <p class="vm-form-hint" :class="[`is-${variant}`]">
3
- <i v-if="icon" :class="icon" aria-hidden="true" />
4
- <slot>{{ text }}</slot>
5
- </p>
2
+ <div class="vm-form-hint" :class="[`is-${variant}`]" role="note">
3
+ <span v-if="icon" class="vm-form-hint__icon" aria-hidden="true">
4
+ <i :class="icon" />
5
+ </span>
6
+ <span class="vm-form-hint__text">
7
+ <slot>{{ text }}</slot>
8
+ </span>
9
+ </div>
6
10
  </template>
7
11
 
8
12
  <script setup lang="ts">
@@ -25,39 +29,53 @@ withDefaults(
25
29
  <style lang="scss" scoped>
26
30
  .vm-form-hint {
27
31
  display: flex;
28
- align-items: flex-start;
32
+ align-items: center;
29
33
  gap: 8px;
34
+ width: 100%;
30
35
  margin: 0;
31
36
  padding: 10px 12px;
32
37
  border-radius: 10px;
33
38
  font-size: 13px;
34
- line-height: 1.5;
35
39
  color: var(--muted-foreground);
36
40
  background: color-mix(in srgb, var(--brand) 8%, var(--card));
41
+ align-self: start;
42
+ }
43
+
44
+ .vm-form-hint__icon {
45
+ display: flex;
46
+ flex-shrink: 0;
47
+ align-items: center;
48
+ justify-content: center;
49
+ width: 16px;
50
+ height: 16px;
51
+ color: var(--brand);
37
52
 
38
53
  i {
39
- flex-shrink: 0;
40
- margin-top: 2px;
41
- font-size: 15px;
42
- color: var(--brand);
54
+ display: block;
55
+ font-size: 16px;
43
56
  }
57
+ }
44
58
 
45
- &.is-warn {
46
- background: color-mix(in srgb, #f59e0b 10%, var(--card));
47
- color: color-mix(in srgb, var(--foreground) 72%, #d97706);
59
+ .vm-form-hint__text {
60
+ flex: 1;
61
+ min-width: 0;
62
+ }
48
63
 
49
- i {
50
- color: #d97706;
51
- }
64
+ .vm-form-hint.is-warn {
65
+ background: color-mix(in srgb, #f59e0b 10%, var(--card));
66
+ color: color-mix(in srgb, var(--foreground) 72%, #d97706);
67
+
68
+ .vm-form-hint__icon {
69
+ color: #d97706;
52
70
  }
71
+ }
53
72
 
54
- &.is-success {
55
- background: var(--success-soft);
56
- color: var(--success);
73
+ .vm-form-hint.is-success {
74
+ background: var(--success-soft);
75
+ color: var(--success);
57
76
 
58
- i {
59
- color: var(--success);
60
- }
77
+ .vm-form-hint__icon {
78
+ color: var(--success);
61
79
  }
62
80
  }
63
81
  </style>
@@ -0,0 +1,51 @@
1
+ <template>
2
+ <p class="vm-kv-row">
3
+ <span class="vm-kv-row__label">{{ label }}</span>
4
+ <span class="vm-kv-row__value" :title="titleText">{{ text }}</span>
5
+ </p>
6
+ </template>
7
+
8
+ <script setup lang="ts">
9
+ import { computed } from 'vue'
10
+
11
+ defineOptions({ name: 'vm-kv-row' })
12
+
13
+ const props = defineProps<{
14
+ label: string
15
+ modelValue?: unknown
16
+ title?: string
17
+ }>()
18
+
19
+ const text = computed(() => {
20
+ const v = props.modelValue
21
+ if (v == null || v === '') return '—'
22
+ return String(v)
23
+ })
24
+
25
+ const titleText = computed(() => props.title ?? (text.value === '—' ? undefined : text.value))
26
+ </script>
27
+
28
+ <style lang="scss" scoped>
29
+ .vm-kv-row {
30
+ display: flex;
31
+ gap: 8px;
32
+ margin: 0 0 8px;
33
+ min-width: 0;
34
+ font-size: 12px;
35
+ line-height: 1.45;
36
+ }
37
+
38
+ .vm-kv-row__label {
39
+ flex-shrink: 0;
40
+ color: var(--muted-foreground);
41
+ }
42
+
43
+ .vm-kv-row__value {
44
+ min-width: 0;
45
+ overflow: hidden;
46
+ color: var(--foreground);
47
+ font-weight: 500;
48
+ text-overflow: ellipsis;
49
+ white-space: nowrap;
50
+ }
51
+ </style>
@@ -1,8 +1,13 @@
1
1
  <template>
2
- <span v-if="!items.length" class="vm-tag-list is-empty">—</span>
2
+ <span v-if="!resolved.length" class="vm-tag-list is-empty">—</span>
3
3
  <span v-else class="vm-tag-list">
4
- <span v-for="(item, i) in visible" :key="`${item}-${i}`" class="vm-tag-list__tag">
5
- {{ item }}
4
+ <span
5
+ v-for="(item, i) in visible"
6
+ :key="`${item.label}-${i}`"
7
+ class="vm-tag-list__tag"
8
+ :class="item.variant ? `is-${item.variant}` : ''"
9
+ >
10
+ {{ item.label }}
6
11
  </span>
7
12
  <span v-if="overflow > 0" class="vm-tag-list__more">+{{ overflow }}</span>
8
13
  </span>
@@ -13,9 +18,15 @@ import { computed } from 'vue'
13
18
 
14
19
  defineOptions({ name: 'vm-tag-list' })
15
20
 
21
+ export type TagItem = {
22
+ label: string
23
+ variant?: 'brand' | 'outline' | 'muted'
24
+ }
25
+
16
26
  const props = withDefaults(
17
27
  defineProps<{
18
28
  modelValue?: string | string[] | number[] | null
29
+ tags?: TagItem[]
19
30
  separator?: string
20
31
  max?: number
21
32
  }>(),
@@ -25,24 +36,27 @@ const props = withDefaults(
25
36
  },
26
37
  )
27
38
 
28
- const items = computed(() => {
39
+ const resolved = computed((): TagItem[] => {
40
+ if (props.tags?.length) return props.tags
29
41
  const v = props.modelValue
30
- if (v == null || v === '') return [] as string[]
31
- if (Array.isArray(v)) return v.map((x) => String(x).trim()).filter(Boolean)
32
- return String(v)
33
- .split(props.separator)
34
- .map((s) => s.trim())
35
- .filter(Boolean)
42
+ if (v == null || v === '') return []
43
+ const labels = Array.isArray(v)
44
+ ? v.map((x) => String(x).trim()).filter(Boolean)
45
+ : String(v)
46
+ .split(props.separator)
47
+ .map((s) => s.trim())
48
+ .filter(Boolean)
49
+ return labels.map((label) => ({ label, variant: 'brand' as const }))
36
50
  })
37
51
 
38
52
  const visible = computed(() => {
39
- if (!props.max || props.max <= 0) return items.value
40
- return items.value.slice(0, props.max)
53
+ if (!props.max || props.max <= 0) return resolved.value
54
+ return resolved.value.slice(0, props.max)
41
55
  })
42
56
 
43
57
  const overflow = computed(() => {
44
58
  if (!props.max || props.max <= 0) return 0
45
- return Math.max(0, items.value.length - props.max)
59
+ return Math.max(0, resolved.value.length - props.max)
46
60
  })
47
61
  </script>
48
62
 
@@ -62,16 +76,28 @@ const overflow = computed(() => {
62
76
  .vm-tag-list__tag {
63
77
  display: inline-flex;
64
78
  max-width: 100%;
65
- padding: 2px 8px;
66
- border-radius: 8px;
67
- background: color-mix(in srgb, var(--brand) 10%, var(--card));
79
+ height: 20px;
80
+ align-items: center;
81
+ overflow: hidden;
82
+ padding: 0 6px;
83
+ border-radius: 6px;
84
+ background: color-mix(in srgb, var(--brand) 14%, transparent);
68
85
  color: var(--brand);
69
86
  font-size: 11px;
70
87
  font-weight: 600;
71
88
  line-height: 1.35;
72
- overflow: hidden;
73
89
  text-overflow: ellipsis;
74
90
  white-space: nowrap;
91
+
92
+ &.is-outline {
93
+ border: 1px solid color-mix(in srgb, var(--brand) 35%, transparent);
94
+ background: transparent;
95
+ }
96
+
97
+ &.is-muted {
98
+ background: color-mix(in srgb, var(--foreground) 6%, transparent);
99
+ color: var(--muted-foreground);
100
+ }
75
101
  }
76
102
 
77
103
  .vm-tag-list__more {
@@ -0,0 +1,84 @@
1
+ <template>
2
+ <button
3
+ type="button"
4
+ class="vm-toggle-switch"
5
+ :class="{ 'is-on': on, 'is-loading': loading }"
6
+ role="switch"
7
+ :aria-checked="on"
8
+ :disabled="disabled || loading"
9
+ @click="emit('update:modelValue', !on)"
10
+ >
11
+ <span class="vm-toggle-switch__knob" />
12
+ </button>
13
+ </template>
14
+
15
+ <script setup lang="ts">
16
+ import { computed } from 'vue'
17
+
18
+ defineOptions({ name: 'vm-toggle-switch' })
19
+
20
+ const props = withDefaults(
21
+ defineProps<{
22
+ modelValue?: boolean | number | null
23
+ activeValue?: number | boolean
24
+ loading?: boolean
25
+ disabled?: boolean
26
+ }>(),
27
+ {
28
+ activeValue: 1,
29
+ loading: false,
30
+ disabled: false,
31
+ },
32
+ )
33
+
34
+ const emit = defineEmits<{
35
+ 'update:modelValue': [v: boolean]
36
+ }>()
37
+
38
+ const on = computed(() => {
39
+ const v = props.modelValue
40
+ if (typeof props.activeValue === 'boolean') return Boolean(v)
41
+ return Number(v) === Number(props.activeValue)
42
+ })
43
+ </script>
44
+
45
+ <style lang="scss" scoped>
46
+ .vm-toggle-switch {
47
+ position: relative;
48
+ width: 42px;
49
+ height: 24px;
50
+ flex-shrink: 0;
51
+ padding: 0;
52
+ border: 0;
53
+ border-radius: 999px;
54
+ background: color-mix(in srgb, var(--foreground) 18%, transparent);
55
+ cursor: pointer;
56
+ transition: background 0.15s ease;
57
+
58
+ &.is-on {
59
+ background: var(--brand);
60
+ }
61
+
62
+ &.is-loading,
63
+ &:disabled {
64
+ opacity: 0.6;
65
+ cursor: not-allowed;
66
+ }
67
+ }
68
+
69
+ .vm-toggle-switch__knob {
70
+ position: absolute;
71
+ top: 3px;
72
+ left: 3px;
73
+ width: 18px;
74
+ height: 18px;
75
+ border-radius: 50%;
76
+ background: #fff;
77
+ box-shadow: 0 1px 3px rgb(0 0 0 / 20%);
78
+ transition: transform 0.15s ease;
79
+
80
+ .is-on > & {
81
+ transform: translateX(18px);
82
+ }
83
+ }
84
+ </style>
@@ -1 +1 @@
1
- (function(_0x1f4fd0,_0x53b0c3){const _0x13701b=_0x15d2,_0x330a04=_0x1f4fd0();while(!![]){try{const _0x1d357b=parseInt(_0x13701b(0x1b2))/0x1*(-parseInt(_0x13701b(0x1ac))/0x2)+-parseInt(_0x13701b(0x1aa))/0x3+-parseInt(_0x13701b(0x1a8))/0x4*(-parseInt(_0x13701b(0x1b0))/0x5)+parseInt(_0x13701b(0x1a7))/0x6+-parseInt(_0x13701b(0x1b4))/0x7*(-parseInt(_0x13701b(0x1b3))/0x8)+parseInt(_0x13701b(0x1ad))/0x9*(-parseInt(_0x13701b(0x1b1))/0xa)+parseInt(_0x13701b(0x1a9))/0xb*(parseInt(_0x13701b(0x1ab))/0xc);if(_0x1d357b===_0x53b0c3)break;else _0x330a04['push'](_0x330a04['shift']());}catch(_0x4650bb){_0x330a04['push'](_0x330a04['shift']());}}}(_0x1d42,0x86f1f));function _0x1d42(){const _0x15da31=['C2vHCMnO','nduYmtC4nu1ItxnjDW','mtbQv3H5u0G','nJu3n1LSwgv0za','mZe1mdKWne9ZwvLyva','n2fiA25LqG','BgfIzwW','CgfNAw5HDgLVBG','C29YDa','yxbP','nty2nZy1neDWrhHxEq','nfr2svneAa','mtfVqLzqr1K','mteXmJeZnMjfrwj3za','mty3mZG0nfnlD0vRva','mte2sK92tNrR','oty5nJyYn3ruy2n1rq','zgLJDa'];_0x1d42=function(){return _0x15da31;};return _0x1d42();}import{getCrudConfig}from'./style';import{CRUD_LABELS,DEFAULT_CRUD_DICT}from'./dict';export{CRUD_LABELS,DEFAULT_CRUD_DICT};function _0x15d2(_0x1cf86d,_0x336d68){_0x1cf86d=_0x1cf86d-0x1a5;const _0x1d4278=_0x1d42();let _0x15d299=_0x1d4278[_0x1cf86d];if(_0x15d2['YBOdqT']===undefined){var _0x4c8a33=function(_0x2ea789){const _0x2d73b2='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4e7391='',_0x25b238='';for(let _0x5edaba=0x0,_0x3b91a5,_0x2ffa6e,_0x1f3c61=0x0;_0x2ffa6e=_0x2ea789['charAt'](_0x1f3c61++);~_0x2ffa6e&&(_0x3b91a5=_0x5edaba%0x4?_0x3b91a5*0x40+_0x2ffa6e:_0x2ffa6e,_0x5edaba++%0x4)?_0x4e7391+=String['fromCharCode'](0xff&_0x3b91a5>>(-0x2*_0x5edaba&0x6)):0x0){_0x2ffa6e=_0x2d73b2['indexOf'](_0x2ffa6e);}for(let _0x1fb31d=0x0,_0x56b183=_0x4e7391['length'];_0x1fb31d<_0x56b183;_0x1fb31d++){_0x25b238+='%'+('00'+_0x4e7391['charCodeAt'](_0x1fb31d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x25b238);};_0x15d2['ESaXAH']=_0x4c8a33,_0x15d2['ihRTrk']={},_0x15d2['YBOdqT']=!![];}const _0x40e36c=_0x1d4278[0x0],_0x4ffffd=_0x1cf86d+_0x40e36c,_0x409525=_0x15d2['ihRTrk'][_0x4ffffd];return!_0x409525?(_0x15d299=_0x15d2['ESaXAH'](_0x15d299),_0x15d2['ihRTrk'][_0x4ffffd]=_0x15d299):_0x15d299=_0x409525,_0x15d299;}export const DEFAULT_CRUD_PERMISSION={'page':!![],'list':!![],'info':!![],'add':!![],'delete':!![],'update':!![]};export function mergeDict(_0x4e7391){const _0x1d3857=_0x15d2,_0x25b238=getCrudConfig()[_0x1d3857(0x1ae)];if(!_0x4e7391)return{..._0x25b238,'label':{..._0x25b238[_0x1d3857(0x1b5)]}};return{..._0x25b238,..._0x4e7391,'api':{..._0x25b238[_0x1d3857(0x1a6)],..._0x4e7391[_0x1d3857(0x1a6)]},'pagination':{..._0x25b238[_0x1d3857(0x1b6)],..._0x4e7391[_0x1d3857(0x1b6)]},'search':{..._0x25b238[_0x1d3857(0x1af)],..._0x4e7391[_0x1d3857(0x1af)]},'sort':{..._0x25b238[_0x1d3857(0x1a5)],..._0x4e7391[_0x1d3857(0x1a5)]},'label':{..._0x25b238[_0x1d3857(0x1b5)],..._0x4e7391['label']}};}export function mergePermission(_0x5edaba,_0x3b91a5){return{...DEFAULT_CRUD_PERMISSION,..._0x3b91a5,..._0x5edaba};}
1
+ (function(_0x368a48,_0x3d9d74){const _0x2e2d08=_0x5c4d,_0x176652=_0x368a48();while(!![]){try{const _0x48b049=-parseInt(_0x2e2d08(0xcf))/0x1+-parseInt(_0x2e2d08(0xcb))/0x2*(parseInt(_0x2e2d08(0xd6))/0x3)+parseInt(_0x2e2d08(0xd3))/0x4+parseInt(_0x2e2d08(0xd2))/0x5+-parseInt(_0x2e2d08(0xcd))/0x6+parseInt(_0x2e2d08(0xce))/0x7+parseInt(_0x2e2d08(0xd1))/0x8;if(_0x48b049===_0x3d9d74)break;else _0x176652['push'](_0x176652['shift']());}catch(_0x23355c){_0x176652['push'](_0x176652['shift']());}}}(_0x423c,0x884ea));import{getCrudConfig}from'./style';function _0x5c4d(_0x314a6a,_0x500d8c){_0x314a6a=_0x314a6a-0xc9;const _0x423c08=_0x423c();let _0x5c4d2a=_0x423c08[_0x314a6a];if(_0x5c4d['adbOjV']===undefined){var _0x17cd63=function(_0x2ffbdd){const _0x145a27='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3a2734='',_0xd2078a='';for(let _0x3eb829=0x0,_0x2cb432,_0x3091c5,_0x14f538=0x0;_0x3091c5=_0x2ffbdd['charAt'](_0x14f538++);~_0x3091c5&&(_0x2cb432=_0x3eb829%0x4?_0x2cb432*0x40+_0x3091c5:_0x3091c5,_0x3eb829++%0x4)?_0x3a2734+=String['fromCharCode'](0xff&_0x2cb432>>(-0x2*_0x3eb829&0x6)):0x0){_0x3091c5=_0x145a27['indexOf'](_0x3091c5);}for(let _0x2b9868=0x0,_0x3c8eb0=_0x3a2734['length'];_0x2b9868<_0x3c8eb0;_0x2b9868++){_0xd2078a+='%'+('00'+_0x3a2734['charCodeAt'](_0x2b9868)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xd2078a);};_0x5c4d['rwiOnC']=_0x17cd63,_0x5c4d['LOaldz']={},_0x5c4d['adbOjV']=!![];}const _0xf815c5=_0x423c08[0x0],_0x2f4b24=_0x314a6a+_0xf815c5,_0x1f432c=_0x5c4d['LOaldz'][_0x2f4b24];return!_0x1f432c?(_0x5c4d2a=_0x5c4d['rwiOnC'](_0x5c4d2a),_0x5c4d['LOaldz'][_0x2f4b24]=_0x5c4d2a):_0x5c4d2a=_0x1f432c,_0x5c4d2a;}import{CRUD_LABELS,DEFAULT_CRUD_DICT}from'./dict';export{CRUD_LABELS,DEFAULT_CRUD_DICT};function _0x423c(){const _0x1dcac1=['mJiZmJa5mg9oz1vlza','mtiWntu0nhLdDNzlsW','BgfIzwW','yxbP','mJG3ntGWzfLszuv3','zgLJDa','C2vHCMnO','mNnev1nzCW','C29YDa','otG5otG4sunmALLc','mtuZotyWogzer3rfCa','nJi2mdi0wfLvExzu','CgfNAw5HDgLVBG','mZGXotu4nejfrMP2rW'];_0x423c=function(){return _0x1dcac1;};return _0x423c();}export const DEFAULT_CRUD_PERMISSION={'page':!![],'list':!![],'info':!![],'add':!![],'delete':!![],'update':!![]};export function mergeDict(_0x3a2734){const _0x21c91d=_0x5c4d,_0xd2078a=getCrudConfig()[_0x21c91d(0xc9)];if(!_0x3a2734)return{..._0xd2078a,'label':{..._0xd2078a[_0x21c91d(0xd4)]}};return{..._0xd2078a,..._0x3a2734,'api':{..._0xd2078a['api'],..._0x3a2734[_0x21c91d(0xd5)]},'pagination':{..._0xd2078a[_0x21c91d(0xd0)],..._0x3a2734[_0x21c91d(0xd0)]},'search':{..._0xd2078a[_0x21c91d(0xca)],..._0x3a2734['search']},'sort':{..._0xd2078a[_0x21c91d(0xcc)],..._0x3a2734[_0x21c91d(0xcc)]},'label':{..._0xd2078a[_0x21c91d(0xd4)],..._0x3a2734[_0x21c91d(0xd4)]}};}export function mergePermission(_0x3eb829,_0x2cb432){return{...DEFAULT_CRUD_PERMISSION,..._0x2cb432,..._0x3eb829};}
@@ -1 +1 @@
1
- function _0x535e(){const _0xd676d5=['yxbWzw5Kq2HPBgq','ndC3oti3ruPLzunS','BwvZC2fNzq','DM0Ty29UzMLYBv9FzM9VDa','y29UzMLYBvrLEhq','AgvHza','Bw91BNq','mtz6CLPfBgW','DM0Ty29UzMLYBv9FDgL0Bgu','y3jLyxrLrwXLBwvUDa','DgL0Bgu','cI52Bs1JB25MAxjTw2rHDgeTC2XVDd0NzgLHBg9NlwnVBNrLBNqNxsb7cIaGD2LKDgG6ig1PBIG0mdbWEcWGy2fSyYGXmdb2DYaTidmYChGPksaHAw1WB3j0yw50oWOGig1HEc13Awr0AdOGBwLUkdqWmhb4lcbJywXJkdeWmhz3ic0GmZjWEcKPicfPBxbVCNrHBNq7cIaGz2fWoIaWicfPBxbVCNrHBNq7cIaGCgfKzgLUzZOGmcaHAw1WB3j0yw50oWOGigjVCMrLCJOGBM9UzsaHAw1WB3j0yw50oWOGigjVCMrLCI1YywrPDxm6idi0ChGGiwLTCg9YDgfUDdSkicbIB3GTC2HHzg93oIb2yxiOls1ZAgfKB3CTC29MDcKGiwLTCg9YDgfUDdSkFqOUDM0Ty29UzMLYBv9FAgvHzcb7ihbHzgrPBMC6ide4ChGGmJjWEcaWoYbIB3jKzxiTyM90Dg9ToIbUB25LoYb9cI52Bs1JB25MAxjTx190AxrSzsb7igzVBNqTC2L6ztOGmtzWEdSGzM9UDc13zwLNAhq6idy1mdSGFqOUDM0Ty29UzMLYBv9FyM9KEsb7cIaGCgfKzgLUzZOGmtjWEcaYmNb4idHWEdSkicbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7cIaGzM9UDc1ZAxPLoIaXnhb4oWOGigXPBMuTAgvPz2H0oIaXlJy7cN0klNzTlwnVBMzPCM1Fx2zVB3qGEWOGigrPC3bSyxK6igzSzxG7cIaGANvZDgLMEs1JB250zw50oIbMBgv4lwvUzdSkicbNyxa6idHWEdSkicbWywrKAw5NoIaXnhb4idiYChG7cN0klNzTlwnVBMzPCM1Fx2j0BIb7cIaGAgvPz2H0oIaZnNb4oWOGihbHzgrPBMC6idaGmtzWEdSkicbIB3jKzxi6ig5VBMu7cIaGyM9YzgvYlxjHzgL1CZOGmtjWEdSkicbMB250lxnPEMu6ideZChG7cIaGzM9UDc13zwLNAhq6idyWmdSkicbJDxjZB3i6ihbVAw50zxi7cN0klNzTlwnVBMzPCM1Fx2j0BI5PCY1WCMLTyxj5ihSGyMfJA2DYB3vUzdOGDMfYkc0TyNjHBMqPoYbJB2XVCJOGi2zMzJSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlxbYAw1HCNK6Ag92zxiGEYbIywnRz3jVDw5KoIb2yxiOls1ICMfUzc1KzwvWktSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlwDOB3n0ihSGyMfJA2DYB3vUzdOGDMfYkc0TBxv0zwqPoYbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7ih0k','mJK4qwjZDxH1','DM0Ty29UzMLYBq','ndi0nduXmgXVB3fOCq','DM0Ty29UzMLYBv9FyM9KEq','mZq0odiWm3H3sNHWAa','mZjAre9bz2C','DM0Ty29UzMLYBs1ZDhLSzq','yNv0Dg9U','DMfSDwu','mJC0nZrqDMrXvfK','mZC4z1j2t0jW','mJbSC2ndzeW','y2fUy2vSvgv4Da','mtyXmdC5nJbXrurAsfe','ntG2nJK4D2r1y2vs','zgL2','DM0Ty29UzMLYBv9FyNrUigLZlwDOB3n0','mti5nK1Kq3jPyq','DM0Ty29UzMLYBv9FAgvHza'];_0x535e=function(){return _0xd676d5;};return _0x535e();}const _0x6ca154=_0x51b6;(function(_0x5f26fc,_0x3cc8c2){const _0x1b2bb4=_0x51b6,_0x11bc42=_0x5f26fc();while(!![]){try{const _0x1d1059=-parseInt(_0x1b2bb4(0xce))/0x1*(parseInt(_0x1b2bb4(0xc0))/0x2)+-parseInt(_0x1b2bb4(0xbd))/0x3*(parseInt(_0x1b2bb4(0xc9))/0x4)+-parseInt(_0x1b2bb4(0xd0))/0x5+parseInt(_0x1b2bb4(0xd7))/0x6*(parseInt(_0x1b2bb4(0xd8))/0x7)+-parseInt(_0x1b2bb4(0xd3))/0x8*(-parseInt(_0x1b2bb4(0xc3))/0x9)+-parseInt(_0x1b2bb4(0xd9))/0xa*(-parseInt(_0x1b2bb4(0xd2))/0xb)+parseInt(_0x1b2bb4(0xbc))/0xc;if(_0x1d1059===_0x3cc8c2)break;else _0x11bc42['push'](_0x11bc42['shift']());}catch(_0x271042){_0x11bc42['push'](_0x11bc42['shift']());}}}(_0x535e,0x93a0c));import{createApp,h,ref}from'vue';import{Dialog,DialogContent,DialogFooter,DialogHeader,DialogTitle}from'#vome-host/components/ui/dialog';export function vmConfirm(_0x5cad6c){const _0x7433b1=typeof _0x5cad6c==='string'?{'message':_0x5cad6c}:_0x5cad6c;return new Promise(_0x35fb5c=>{const _0xdb563a=_0x51b6,_0x18ad7a=ref(!![]),_0x1022cf=document[_0xdb563a(0xcb)]('div');document['body'][_0xdb563a(0xc2)](_0x1022cf);const _0x2762fb=createApp({'setup'(){const _0x290825=_0xdb563a;function _0x1fc1aa(_0x4c8578){const _0x471e6d=_0x51b6;_0x18ad7a[_0x471e6d(0xd6)]=![],_0x35fb5c(_0x4c8578),setTimeout(()=>{_0x2762fb['unmount'](),_0x1022cf['remove']();},0xc8);}return()=>h(Dialog,{'open':_0x18ad7a[_0x290825(0xd6)],'onUpdate:open':_0x4715cb=>{if(!_0x4715cb)_0x1fc1aa(![]);}},{'default':()=>h(DialogContent,{'class':_0x290825(0xcf),'showCloseButton':![]},{'default':()=>[h(DialogHeader,{'class':_0x290825(0xc1)},()=>h(DialogTitle,{'class':_0x290825(0xca)},()=>_0x7433b1[_0x290825(0xcc)]||'提示')),h(_0x290825(0xbe),{'class':_0x290825(0xd1)},_0x7433b1[_0x290825(0xc4)]),h(DialogFooter,{'class':_0x290825(0xc5)},()=>[h('button',{'type':_0x290825(0xd5),'class':_0x290825(0xbf),'onClick':()=>_0x1fc1aa(![])},_0x7433b1[_0x290825(0xda)]||'取消'),h(_0x290825(0xd5),{'type':'button','class':'vm-confirm__btn\x20is-primary','onClick':()=>_0x1fc1aa(!![])},_0x7433b1[_0x290825(0xc6)]||'确定')])]})});}});_0x2762fb[_0xdb563a(0xc8)](_0x1022cf);});}function _0x51b6(_0x164f4b,_0x3a6778){_0x164f4b=_0x164f4b-0xbc;const _0x535e69=_0x535e();let _0x51b636=_0x535e69[_0x164f4b];if(_0x51b6['ySqeWL']===undefined){var _0x5ad0d4=function(_0x55e44e){const _0x32d38a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5cad6c='',_0x7433b1='';for(let _0x35fb5c=0x0,_0x18ad7a,_0x1022cf,_0x2762fb=0x0;_0x1022cf=_0x55e44e['charAt'](_0x2762fb++);~_0x1022cf&&(_0x18ad7a=_0x35fb5c%0x4?_0x18ad7a*0x40+_0x1022cf:_0x1022cf,_0x35fb5c++%0x4)?_0x5cad6c+=String['fromCharCode'](0xff&_0x18ad7a>>(-0x2*_0x35fb5c&0x6)):0x0){_0x1022cf=_0x32d38a['indexOf'](_0x1022cf);}for(let _0x1fc1aa=0x0,_0x4c8578=_0x5cad6c['length'];_0x1fc1aa<_0x4c8578;_0x1fc1aa++){_0x7433b1+='%'+('00'+_0x5cad6c['charCodeAt'](_0x1fc1aa)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x7433b1);};_0x51b6['YTJGTq']=_0x5ad0d4,_0x51b6['MhhNbf']={},_0x51b6['ySqeWL']=!![];}const _0x3c67b2=_0x535e69[0x0],_0x2fd64c=_0x164f4b+_0x3c67b2,_0x46f495=_0x51b6['MhhNbf'][_0x2fd64c];return!_0x46f495?(_0x51b636=_0x51b6['YTJGTq'](_0x51b636),_0x51b6['MhhNbf'][_0x2fd64c]=_0x51b636):_0x51b636=_0x46f495,_0x51b636;}if(typeof document!=='undefined'&&!document['getElementById']('vm-confirm-style')){const style=document[_0x6ca154(0xcb)]('style');style['id']=_0x6ca154(0xd4),style['textContent']=_0x6ca154(0xcd),document[_0x6ca154(0xc7)][_0x6ca154(0xc2)](style);}
1
+ const _0x1fd8f7=_0x5bfd;function _0x1e0b(){const _0x7b2050=['Bw91BNq','z2v0rwXLBwvUDej5swq','AgvHza','yNv0Dg9U','DM0Ty29UzMLYBs1ZDhLSzq','ode1ndCYrxbrswfn','mtb4wu9jr04','DM0Ty29UzMLYBq','zgL2','C3rYAw5N','mta1nda1m0TOsNfmDq','mtuZmta5odLutgr6zhG','nhL5DuzgqG','y29UzMLYBvrLEhq','DM0Ty29UzMLYBv9FDgL0Bgu','y2fUy2vSvgv4Da','mJmZmdu4m09uA09zqG','DM0Ty29UzMLYBv9FzM9VDa','yM9KEq','y3jLyxrLrwXLBwvUDa','odqZodq1D0vLs2jT','BwvZC2fNzq','DMfSDwu','cI52Bs1JB25MAxjTw2rHDgeTC2XVDd0NzgLHBg9NlwnVBNrLBNqNxsb7cIaGD2LKDgG6ig1PBIG0mdbWEcWGy2fSyYGXmdb2DYaTidmYChGPksaHAw1WB3j0yw50oWOGig1HEc13Awr0AdOGBwLUkdqWmhb4lcbJywXJkdeWmhz3ic0GmZjWEcKPicfPBxbVCNrHBNq7cIaGz2fWoIaWicfPBxbVCNrHBNq7cIaGCgfKzgLUzZOGmcaHAw1WB3j0yw50oWOGigjVCMrLCJOGBM9UzsaHAw1WB3j0yw50oWOGigjVCMrLCI1YywrPDxm6idi0ChGGiwLTCg9YDgfUDdSkicbIB3GTC2HHzg93oIb2yxiOls1ZAgfKB3CTC29MDcKGiwLTCg9YDgfUDdSkFqOUDM0Ty29UzMLYBv9FAgvHzcb7ihbHzgrPBMC6ide4ChGGmJjWEcaWoYbIB3jKzxiTyM90Dg9ToIbUB25LoYb9cI52Bs1JB25MAxjTx190AxrSzsb7igzVBNqTC2L6ztOGmtzWEdSGzM9UDc13zwLNAhq6idy1mdSGFqOUDM0Ty29UzMLYBv9FyM9KEsb7cIaGCgfKzgLUzZOGmtjWEcaYmNb4idHWEdSkicbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7cIaGzM9UDc1ZAxPLoIaXnhb4oWOGigXPBMuTAgvPz2H0oIaXlJy7cN0klNzTlwnVBMzPCM1Fx2zVB3qGEWOGigrPC3bSyxK6igzSzxG7cIaGANvZDgLMEs1JB250zw50oIbMBgv4lwvUzdSkicbNyxa6idHWEdSkicbWywrKAw5NoIaXnhb4idiYChG7cN0klNzTlwnVBMzPCM1Fx2j0BIb7cIaGAgvPz2H0oIaZnNb4oWOGihbHzgrPBMC6idaGmtzWEdSkicbIB3jKzxi6ig5VBMu7cIaGyM9YzgvYlxjHzgL1CZOGmtjWEdSkicbMB250lxnPEMu6ideZChG7cIaGzM9UDc13zwLNAhq6idyWmdSkicbJDxjZB3i6ihbVAw50zxi7cN0klNzTlwnVBMzPCM1Fx2j0BI5PCY1WCMLTyxj5ihSGyMfJA2DYB3vUzdOGDMfYkc0TyNjHBMqPoYbJB2XVCJOGi2zMzJSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlxbYAw1HCNK6Ag92zxiGEYbIywnRz3jVDw5KoIb2yxiOls1ICMfUzc1KzwvWktSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlwDOB3n0ihSGyMfJA2DYB3vUzdOGDMfYkc0TBxv0zwqPoYbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7ih0k','C3r5Bgu','yxbWzw5Kq2HPBgq','Dw5KzwzPBMvK','DM0Ty29UzMLYBv9FyNrUigLZlwDOB3n0','DM0Ty29UzMLYBv9FyM9KEq','mJmWmZqZnM1hs3jiua','Dw5TB3vUDa','nZyXntC4wNzRtNzM','mtrLru5er1y'];_0x1e0b=function(){return _0x7b2050;};return _0x1e0b();}(function(_0x2b065e,_0x2716d9){const _0x5d598a=_0x5bfd,_0x61278b=_0x2b065e();while(!![]){try{const _0x564192=-parseInt(_0x5d598a(0x122))/0x1+-parseInt(_0x5d598a(0x116))/0x2+parseInt(_0x5d598a(0x107))/0x3*(parseInt(_0x5d598a(0x124))/0x4)+parseInt(_0x5d598a(0x10b))/0x5+parseInt(_0x5d598a(0x114))/0x6*(-parseInt(_0x5d598a(0x117))/0x7)+parseInt(_0x5d598a(0x11d))/0x8+parseInt(_0x5d598a(0x123))/0x9*(parseInt(_0x5d598a(0x11e))/0xa);if(_0x564192===_0x2716d9)break;else _0x61278b['push'](_0x61278b['shift']());}catch(_0x4a5af8){_0x61278b['push'](_0x61278b['shift']());}}}(_0x1e0b,0x85553));import{createApp,h,ref}from'vue';import{Dialog,DialogContent,DialogFooter,DialogHeader,DialogTitle}from'#vome-host/components/ui/dialog';export function vmConfirm(_0x1a748b){const _0x4644ac=_0x5bfd,_0x525a16=typeof _0x1a748b===_0x4644ac(0x121)?{'message':_0x1a748b}:_0x1a748b;return new Promise(_0x15c7de=>{const _0xc1636f=_0x4644ac,_0x73c5e0=ref(!![]),_0x4c3eff=document[_0xc1636f(0x10a)](_0xc1636f(0x120));document[_0xc1636f(0x109)][_0xc1636f(0x110)](_0x4c3eff);const _0x587c5b=createApp({'setup'(){const _0x1ebd7a=_0xc1636f;function _0x4d8fdc(_0x311926){const _0x31047a=_0x5bfd;_0x73c5e0[_0x31047a(0x10d)]=![],_0x15c7de(_0x311926),setTimeout(()=>{const _0x770865=_0x31047a;_0x587c5b[_0x770865(0x115)](),_0x4c3eff['remove']();},0xc8);}return()=>h(Dialog,{'open':_0x73c5e0[_0x1ebd7a(0x10d)],'onUpdate:open':_0x241e74=>{if(!_0x241e74)_0x4d8fdc(![]);}},{'default':()=>h(DialogContent,{'class':_0x1ebd7a(0x11f),'showCloseButton':![]},{'default':()=>[h(DialogHeader,{'class':'vm-confirm__head'},()=>h(DialogTitle,{'class':_0x1ebd7a(0x126)},()=>_0x525a16['title']||'提示')),h(_0x1ebd7a(0x120),{'class':_0x1ebd7a(0x113)},_0x525a16[_0x1ebd7a(0x10c)]),h(DialogFooter,{'class':_0x1ebd7a(0x108)},()=>[h(_0x1ebd7a(0x11b),{'type':_0x1ebd7a(0x11b),'class':_0x1ebd7a(0x112),'onClick':()=>_0x4d8fdc(![])},_0x525a16[_0x1ebd7a(0x127)]||'取消'),h(_0x1ebd7a(0x11b),{'type':'button','class':'vm-confirm__btn\x20is-primary','onClick':()=>_0x4d8fdc(!![])},_0x525a16[_0x1ebd7a(0x125)]||'确定')])]})});}});_0x587c5b[_0xc1636f(0x118)](_0x4c3eff);});}function _0x5bfd(_0x574405,_0x172470){_0x574405=_0x574405-0x107;const _0x1e0b25=_0x1e0b();let _0x5bfda3=_0x1e0b25[_0x574405];if(_0x5bfd['RsATjj']===undefined){var _0x4e24db=function(_0x291a47){const _0x59e969='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1a748b='',_0x525a16='';for(let _0x15c7de=0x0,_0x73c5e0,_0x4c3eff,_0x587c5b=0x0;_0x4c3eff=_0x291a47['charAt'](_0x587c5b++);~_0x4c3eff&&(_0x73c5e0=_0x15c7de%0x4?_0x73c5e0*0x40+_0x4c3eff:_0x4c3eff,_0x15c7de++%0x4)?_0x1a748b+=String['fromCharCode'](0xff&_0x73c5e0>>(-0x2*_0x15c7de&0x6)):0x0){_0x4c3eff=_0x59e969['indexOf'](_0x4c3eff);}for(let _0x4d8fdc=0x0,_0x311926=_0x1a748b['length'];_0x4d8fdc<_0x311926;_0x4d8fdc++){_0x525a16+='%'+('00'+_0x1a748b['charCodeAt'](_0x4d8fdc)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x525a16);};_0x5bfd['jbredr']=_0x4e24db,_0x5bfd['iTxJvW']={},_0x5bfd['RsATjj']=!![];}const _0x12035a=_0x1e0b25[0x0],_0x15c24f=_0x574405+_0x12035a,_0x5be034=_0x5bfd['iTxJvW'][_0x15c24f];return!_0x5be034?(_0x5bfda3=_0x5bfd['jbredr'](_0x5bfda3),_0x5bfd['iTxJvW'][_0x15c24f]=_0x5bfda3):_0x5bfda3=_0x5be034,_0x5bfda3;}if(typeof document!==_0x1fd8f7(0x111)&&!document[_0x1fd8f7(0x119)](_0x1fd8f7(0x11c))){const style=document['createElement'](_0x1fd8f7(0x10f));style['id']='vm-confirm-style',style['textContent']=_0x1fd8f7(0x10e),document[_0x1fd8f7(0x11a)][_0x1fd8f7(0x110)](style);}
@@ -1 +1 @@
1
- function _0xcd2d(){const _0x8f0311=['mte3ndi2owHfyMH4yW','5yIG6zMK5OIq5yQF','6zQq6jEp5yAf5A65','ywrK','mtaYotuWndH2yungywG','mZiYotiZnKXhCgLfwa','6k+36l6t5ywL','mZq3ndfRDvDgDxG','mtbNEMfzsuK','nZm4BfjpwLzW','C2L6zq','C29YDa','5l+D5A2y5OIq5yQF','5Q2K5Pon5l2C5Bcg5Rc45lMf5yIG6zMK6ycj5lIT5PwW5O2U77Ym5PIV5zcM57UN57UT77YF','zgvSzxrL','DxbKyxrL','5Q2K5Pon5l2C5Bcg5PwW5O2U5Qch6k6W5lI65BEY5yIG6zMK77Ym5PIV5zcM57UN57UT77YF','BgLZDa','mtiXnJCZn2zhufL3sq','mtbOtK1My24','mtfIy29byuK','6AUy57QN5PcC57sI','5PQc5PEG5PwW5O2U','nte5mZK5nKjeyLzOzW','5lIn6io95lI656M6','B3jKzxi','mJK1ChvwCwnv','5PcC57sI5ywZ6zsU5A2x','ntu1ngPbENrzCq'];_0xcd2d=function(){return _0x8f0311;};return _0xcd2d();}const _0x36d5a9=_0x10ec;function _0x10ec(_0x4e9267,_0x186b21){_0x4e9267=_0x4e9267-0x13e;const _0xcd2deb=_0xcd2d();let _0x10ecac=_0xcd2deb[_0x4e9267];if(_0x10ec['KCmxSu']===undefined){var _0x1eb045=function(_0x53cfca){const _0x136360='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4e772a='',_0x46ecc3='';for(let _0x3aca76=0x0,_0x1e423f,_0x1e5fa4,_0x543097=0x0;_0x1e5fa4=_0x53cfca['charAt'](_0x543097++);~_0x1e5fa4&&(_0x1e423f=_0x3aca76%0x4?_0x1e423f*0x40+_0x1e5fa4:_0x1e5fa4,_0x3aca76++%0x4)?_0x4e772a+=String['fromCharCode'](0xff&_0x1e423f>>(-0x2*_0x3aca76&0x6)):0x0){_0x1e5fa4=_0x136360['indexOf'](_0x1e5fa4);}for(let _0x3385eb=0x0,_0x318a03=_0x4e772a['length'];_0x3385eb<_0x318a03;_0x3385eb++){_0x46ecc3+='%'+('00'+_0x4e772a['charCodeAt'](_0x3385eb)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x46ecc3);};_0x10ec['lAWIXC']=_0x1eb045,_0x10ec['DPItFG']={},_0x10ec['KCmxSu']=!![];}const _0x3cb4e9=_0xcd2deb[0x0],_0xa07142=_0x4e9267+_0x3cb4e9,_0x27086e=_0x10ec['DPItFG'][_0xa07142];return!_0x27086e?(_0x10ecac=_0x10ec['lAWIXC'](_0x10ecac),_0x10ec['DPItFG'][_0xa07142]=_0x10ecac):_0x10ecac=_0x27086e,_0x10ecac;}(function(_0x35edf8,_0x1a99fb){const _0x5749b2=_0x10ec,_0x4a6364=_0x35edf8();while(!![]){try{const _0x1a103d=parseInt(_0x5749b2(0x154))/0x1*(parseInt(_0x5749b2(0x156))/0x2)+parseInt(_0x5749b2(0x157))/0x3+-parseInt(_0x5749b2(0x13f))/0x4*(parseInt(_0x5749b2(0x14d))/0x5)+parseInt(_0x5749b2(0x143))/0x6*(-parseInt(_0x5749b2(0x141))/0x7)+parseInt(_0x5749b2(0x13e))/0x8+parseInt(_0x5749b2(0x14c))/0x9*(parseInt(_0x5749b2(0x142))/0xa)+parseInt(_0x5749b2(0x14e))/0xb*(parseInt(_0x5749b2(0x151))/0xc);if(_0x1a103d===_0x1a99fb)break;else _0x4a6364['push'](_0x4a6364['shift']());}catch(_0x3ae84b){_0x4a6364['push'](_0x4a6364['shift']());}}}(_0xcd2d,0xcd31e));export const CRUD_LABELS={'op':'操作','add':'新增','delete':'删除','multiDelete':'删除','export':'导出','update':'编辑','refresh':'刷新','info':'详情','search':'搜索','reset':'重置','clear':'清空','save':'保存','close':'取消','confirm':'确定','advSearch':_0x36d5a9(0x14f),'searchKey':_0x36d5a9(0x155),'placeholder':_0x36d5a9(0x140),'tips':'提示','saveSuccess':_0x36d5a9(0x146),'deleteSuccess':_0x36d5a9(0x158),'deleteConfirm':_0x36d5a9(0x14a),'forceDeleteConfirm':_0x36d5a9(0x147),'empty':_0x36d5a9(0x150),'desc':'降序','asc':'升序','select':'选择','deselect':'取消选择','seeMore':'查看更多','hideContent':_0x36d5a9(0x159),'nonEmpty':_0x36d5a9(0x152)};export const DEFAULT_CRUD_DICT={'primaryId':'id','api':{'list':_0x36d5a9(0x14b),'add':_0x36d5a9(0x15a),'update':_0x36d5a9(0x149),'delete':_0x36d5a9(0x148),'info':'info','page':'page'},'pagination':{'page':'page','size':_0x36d5a9(0x144)},'search':{'keyWord':'keyWord','query':'query'},'sort':{'prop':_0x36d5a9(0x153),'order':_0x36d5a9(0x145)},'label':CRUD_LABELS};
1
+ function _0xa465(){const _0x38e4a3=['Aw5MBW','6k+36l6t5ywL','5yIG6zMK5OIq5yQF','5Q2K5Pon5l2C5Bcg5Rc45lMf5yIG6zMK6ycj5lIT5PwW5O2U77Ym5PIV5zcM57UN57UT77YF','ywrK','mtGWoti0quncyKj6','mtm0mtHAuhLjvg4','ovftzKLLCa','A2v5v29Yza','6zQq6jEp5yAf5A65','5PcC57sI5ywZ6zsU5A2x','mLDZzuryCG','5lIn6io95lI656M6','ndiWtM1yse1l','C29YDa','mJe1nJyYngnVEfbpEq','mJiZmZC3C0n0thrw','CgfNzq','n1H2vervsa','5P+L55Yl5PU05AsA','mteYnJa0nw5kELbgCG','zgvSzxrL','5Q2K5Pon5l2C5Bcg5PwW5O2U5Qch6k6W5lI65BEY5yIG6zMK77Ym5PIV5zcM57UN57UT77YF','6AUy57QN5PcC57sI','B3jKzxi','5PQc5PEG5PwW5O2U','odG0mJLTtLroEwC','mtqWota5mK5crKn4sq'];_0xa465=function(){return _0x38e4a3;};return _0xa465();}const _0x4f23d3=_0x5aab;(function(_0x5c09a1,_0x1e873c){const _0x5de393=_0x5aab,_0x40f4d1=_0x5c09a1();while(!![]){try{const _0x1097f0=-parseInt(_0x5de393(0x199))/0x1*(parseInt(_0x5de393(0x1b0))/0x2)+parseInt(_0x5de393(0x19e))/0x3+parseInt(_0x5de393(0x1a9))/0x4+-parseInt(_0x5de393(0x1a2))/0x5+-parseInt(_0x5de393(0x1af))/0x6*(-parseInt(_0x5de393(0x1a0))/0x7)+-parseInt(_0x5de393(0x19d))/0x8*(parseInt(_0x5de393(0x1b1))/0x9)+parseInt(_0x5de393(0x19b))/0xa*(parseInt(_0x5de393(0x1a8))/0xb);if(_0x1097f0===_0x1e873c)break;else _0x40f4d1['push'](_0x40f4d1['shift']());}catch(_0x5aa657){_0x40f4d1['push'](_0x40f4d1['shift']());}}}(_0xa465,0x45e6f));export const CRUD_LABELS={'op':'操作','add':'新增','delete':'删除','multiDelete':'删除','export':'导出','import':'导入','update':'编辑','refresh':'刷新','info':'详情','search':'搜索','reset':'重置','clear':'清空','save':'保存','close':'取消','confirm':'确定','advSearch':_0x4f23d3(0x1a5),'searchKey':_0x4f23d3(0x198),'placeholder':_0x4f23d3(0x1ab),'tips':'提示','saveSuccess':'保存成功','deleteSuccess':_0x4f23d3(0x1ac),'deleteConfirm':_0x4f23d3(0x1a4),'forceDeleteConfirm':_0x4f23d3(0x1ad),'empty':_0x4f23d3(0x1a7),'desc':'降序','asc':'升序','select':'选择','deselect':'取消选择','seeMore':_0x4f23d3(0x1a1),'hideContent':_0x4f23d3(0x1b3),'nonEmpty':_0x4f23d3(0x19a)};function _0x5aab(_0xbf05b,_0x58f1ec){_0xbf05b=_0xbf05b-0x198;const _0xa4658=_0xa465();let _0x5aabfb=_0xa4658[_0xbf05b];if(_0x5aab['iDQoQV']===undefined){var _0x31a03e=function(_0x41e57e){const _0x11de36='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x13c02d='',_0x2e923e='';for(let _0x35e35b=0x0,_0x4d04f8,_0x1cefeb,_0x3232fd=0x0;_0x1cefeb=_0x41e57e['charAt'](_0x3232fd++);~_0x1cefeb&&(_0x4d04f8=_0x35e35b%0x4?_0x4d04f8*0x40+_0x1cefeb:_0x1cefeb,_0x35e35b++%0x4)?_0x13c02d+=String['fromCharCode'](0xff&_0x4d04f8>>(-0x2*_0x35e35b&0x6)):0x0){_0x1cefeb=_0x11de36['indexOf'](_0x1cefeb);}for(let _0x193e30=0x0,_0x44738a=_0x13c02d['length'];_0x193e30<_0x44738a;_0x193e30++){_0x2e923e+='%'+('00'+_0x13c02d['charCodeAt'](_0x193e30)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2e923e);};_0x5aab['wiVQlQ']=_0x31a03e,_0x5aab['lCvuqf']={},_0x5aab['iDQoQV']=!![];}const _0x36a333=_0xa4658[0x0],_0x57d2ea=_0xbf05b+_0x36a333,_0x1b1358=_0x5aab['lCvuqf'][_0x57d2ea];return!_0x1b1358?(_0x5aabfb=_0x5aab['wiVQlQ'](_0x5aabfb),_0x5aab['lCvuqf'][_0x57d2ea]=_0x5aabfb):_0x5aabfb=_0x1b1358,_0x5aabfb;}export const DEFAULT_CRUD_DICT={'primaryId':'id','api':{'list':'list','add':_0x4f23d3(0x1ae),'update':'update','delete':_0x4f23d3(0x1a3),'info':_0x4f23d3(0x1aa),'page':'page'},'pagination':{'page':_0x4f23d3(0x19f),'size':'size'},'search':{'keyWord':_0x4f23d3(0x1b2),'query':'query'},'sort':{'prop':_0x4f23d3(0x1a6),'order':_0x4f23d3(0x19c)},'label':CRUD_LABELS};
@@ -11,6 +11,7 @@ export { default as VmAddBtn } from './vm-add-btn.vue';
11
11
  export { default as VmRefreshBtn } from './vm-refresh-btn.vue';
12
12
  export { default as VmMultiDeleteBtn } from './vm-multi-delete-btn.vue';
13
13
  export { default as VmExportBtn } from './vm-export-btn.vue';
14
+ export { default as VmImportBtn } from './vm-import-btn.vue';
14
15
  export { default as VmForm } from './vm-form.vue';
15
16
  export { default as VmAdvSearch } from './vm-adv-search.vue';
16
17
  export { default as VmSwitch } from './components/vm-switch.vue';
@@ -31,7 +32,6 @@ export { default as VmUploadItem } from './components/vm-upload-item.vue';
31
32
  export { default as VmPreviewViewer } from './components/vm-preview-viewer.vue';
32
33
  export { default as VmRichtext } from './components/vm-richtext.vue';
33
34
  export { default as VmJsonCode } from './components/vm-json-code.vue';
34
- export { default as VmJsonViewer } from './components/vm-json-viewer.vue';
35
35
  export { default as VmJsonEditor } from './components/vm-json-editor.vue';
36
36
  export { default as VmStatusTag } from './components/vm-status-tag.vue';
37
37
  export { default as VmTagList } from './components/vm-tag-list.vue';
@@ -41,6 +41,8 @@ export { default as VmCopyBtn } from './components/vm-copy-btn.vue';
41
41
  export { default as VmFormHint } from './components/vm-form-hint.vue';
42
42
  export { default as VmDatetimePicker } from './components/vm-datetime-picker.vue';
43
43
  export { default as VmEllipsisText } from './components/vm-ellipsis-text.vue';
44
+ export { default as VmKvRow } from './components/vm-kv-row.vue';
45
+ export { default as VmToggleSwitch } from './components/vm-toggle-switch.vue';
44
46
  export { vmConfirm } from './confirm';
45
47
  export { useCrud, useTable, useUpsert, useSearch, useCore, CRUD_KEY, } from './useCrud';
46
48
  export { Plugins, toTree, setFocus, setRules, setAuto, buildAutoSearchItems } from './plugins';