vome-core 0.0.25 → 0.0.28

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 (48) hide show
  1. package/dist/admin/components/vm-action-btn.vue +35 -8
  2. package/dist/admin/components/vm-card-grid.vue +3 -2
  3. package/dist/admin/components/vm-card-head.vue +45 -0
  4. package/dist/admin/components/vm-card-meta.vue +22 -0
  5. package/dist/admin/components/vm-card-title.vue +56 -0
  6. package/dist/admin/components/vm-card.vue +72 -2
  7. package/dist/admin/components/vm-clamp-text.vue +39 -0
  8. package/dist/admin/components/vm-icon-btn.vue +88 -0
  9. package/dist/admin/components/vm-inline-search.vue +60 -0
  10. package/dist/admin/components/vm-page-tabs.vue +93 -0
  11. package/dist/admin/components/vm-split-layout.vue +32 -15
  12. package/dist/admin/components/vm-thumb.vue +49 -0
  13. package/dist/admin/config/plugin-dev.js +1 -1
  14. package/dist/admin/crud/components/vm-kv-row.vue +51 -0
  15. package/dist/admin/crud/components/vm-preview-viewer.vue +39 -6
  16. package/dist/admin/crud/components/vm-tag-list.vue +43 -17
  17. package/dist/admin/crud/components/vm-toggle-switch.vue +84 -0
  18. package/dist/admin/crud/config.js +1 -1
  19. package/dist/admin/crud/confirm.js +1 -1
  20. package/dist/admin/crud/dict.js +1 -1
  21. package/dist/admin/crud/index.d.ts +2 -1
  22. package/dist/admin/crud/index.js +1 -1
  23. package/dist/admin/crud/key.js +1 -1
  24. package/dist/admin/crud/mitt.js +1 -1
  25. package/dist/admin/crud/plugins.js +1 -1
  26. package/dist/admin/crud/registry.js +1 -0
  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/directives/perm.js +1 -1
  31. package/dist/admin/hooks/useUpload.js +1 -1
  32. package/dist/admin/lib/browser.js +1 -1
  33. package/dist/admin/lib/cn.js +1 -1
  34. package/dist/admin/lib/dialog-float.js +1 -1
  35. package/dist/admin/lib/export-excel.js +1 -1
  36. package/dist/admin/lib/file-preview.js +1 -1
  37. package/dist/admin/lib/json.js +1 -1
  38. package/dist/admin/lib/menu.js +1 -1
  39. package/dist/admin/lib/tree.js +1 -1
  40. package/dist/admin/lib/upload.js +1 -1
  41. package/dist/admin/lib/video-frame.js +1 -1
  42. package/dist/index.js +1 -1
  43. package/dist/server/index.js +1 -1
  44. package/dist/shared/excel.js +1 -1
  45. package/dist/shared/index.js +1 -1
  46. package/dist/shared/tree.js +1 -1
  47. package/package.json +1 -1
  48. package/dist/admin/crud/components/vm-audio.vue +0 -217
@@ -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,36 @@ 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);
68
75
  }
69
76
 
70
- .vm-split-layout__main {
77
+ .has-toolbar .vm-split-layout__aside {
71
78
  grid-row: 2;
79
+ }
80
+
81
+ .vm-split-layout__main {
82
+ grid-row: 1;
72
83
  grid-column: 2;
73
- display: grid;
84
+ display: flex;
85
+ flex-direction: column;
74
86
  min-width: 0;
75
87
  min-height: 0;
76
88
  overflow: hidden;
89
+ }
77
90
 
78
- :deep(.vm-crud) {
79
- height: 100%;
80
- min-height: 0;
81
- border-radius: 0;
82
- box-shadow: none;
83
- }
91
+ .has-toolbar .vm-split-layout__main {
92
+ grid-row: 2;
93
+ }
94
+
95
+ .vm-split-layout__main :deep(.vm-crud) {
96
+ flex: 1;
97
+ min-height: 0;
98
+ height: 100%;
99
+ border-radius: 0;
100
+ box-shadow: none;
84
101
  }
85
102
  </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
- function _0x1ff3(_0x2bcf3e,_0x39012c){_0x2bcf3e=_0x2bcf3e-0xad;const _0x41178c=_0x4117();let _0x1ff323=_0x41178c[_0x2bcf3e];if(_0x1ff3['MLIgmd']===undefined){var _0x1d11bd=function(_0x306715){const _0x59dd59='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x41c6b8='',_0x52edf6='';for(let _0xdf020b=0x0,_0x1b04d1,_0x184455,_0x5f05bc=0x0;_0x184455=_0x306715['charAt'](_0x5f05bc++);~_0x184455&&(_0x1b04d1=_0xdf020b%0x4?_0x1b04d1*0x40+_0x184455:_0x184455,_0xdf020b++%0x4)?_0x41c6b8+=String['fromCharCode'](0xff&_0x1b04d1>>(-0x2*_0xdf020b&0x6)):0x0){_0x184455=_0x59dd59['indexOf'](_0x184455);}for(let _0x2c0dd3=0x0,_0x8d4674=_0x41c6b8['length'];_0x2c0dd3<_0x8d4674;_0x2c0dd3++){_0x52edf6+='%'+('00'+_0x41c6b8['charCodeAt'](_0x2c0dd3)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x52edf6);};_0x1ff3['hbYeqB']=_0x1d11bd,_0x1ff3['RZOdhl']={},_0x1ff3['MLIgmd']=!![];}const _0x361ee2=_0x41178c[0x0],_0x5cf959=_0x2bcf3e+_0x361ee2,_0x46c861=_0x1ff3['RZOdhl'][_0x5cf959];return!_0x46c861?(_0x1ff323=_0x1ff3['hbYeqB'](_0x1ff323),_0x1ff3['RZOdhl'][_0x5cf959]=_0x1ff323):_0x1ff323=_0x46c861,_0x1ff323;}function _0x4117(){const _0x577fc7=['57QV5yMn56UV','mti4ntaYm2ftruHhDG','5yMn56UVicSG5zco56UV','oePWr0fbCq','mtHYrfjRzKS','6zkP5A2qic8G5PYn5yQH56UV5O+s5lU26isA5OMl5P6277YilNzVBwxVVjRKU4uGC2vYDMvY77Yj77Ym6ycc5zci5lIk5lYG44cb55+T5l+H44cb5PsV5lUy562j6io95yQB5OMP5Bgv44cc','mtG3ndy1nuDLDezhEa','5zco5y+W5B6U5BQu55sO6isA5OMl5P6277YilNzVBwxVVjRLKkSGD2vIl++8IE+8Jos7Psb3DwPPzsdMJilOVB3NI6ZNQ4VLIy3NQ6/POBxPNAlJGii','zNjVBNrLBMq','mJu2mZGYwwXWAfDR','Ahr0Chm6lY92B21LlMrLDI9KB2nZl3bSDwDPBG','Ahr0Chm6lY92B21LlMrLDI9WBhvNAw5Zl3vWBg9Hza','mJCZndeZndngq1zvAem','Ahr0Chm6lY9NAxrLzs5JB20Vwu9vuL9puKCVwu9vuL9srvbpl3jHDY9Tyxn0zxiVCgX1z2LUlwz1BgWUEMLW','yMfJA2vUza','Ahr0Chm6lY9NAxrLzs5JB20Vwu9vuL9puKCVwu9vuL9srvbpl3jHDY9Tyxn0zxiVCgX1z2LUlwjHy2TLBMqUEMLW','zNvSBa','mJa0mdy5meDiuhrvua','nZe1ntaWmeDyBfrMwG','5A6m5Pw05lIA5yQH5QIH5z2x6isA5OMl5P6277YilNzVBwxVVjRLKkSGC2vYDMvYios4JIb3zwlVViNVViZMNkZLNldLVidLJ5hMIzpLJixLKi7LJ5hLUipJGii','mJGZmJmYnhDXzwj5Aa'];_0x4117=function(){return _0x577fc7;};return _0x4117();}const _0x4f75d5=_0x1ff3;(function(_0xc507ad,_0x1e4dc5){const _0x55ed3c=_0x1ff3,_0x20c323=_0xc507ad();while(!![]){try{const _0x9439a=-parseInt(_0x55ed3c(0xb0))/0x1+-parseInt(_0x55ed3c(0xc0))/0x2+-parseInt(_0x55ed3c(0xb5))/0x3+-parseInt(_0x55ed3c(0xae))/0x4+parseInt(_0x55ed3c(0xc1))/0x5+-parseInt(_0x55ed3c(0xb3))/0x6*(parseInt(_0x55ed3c(0xb8))/0x7)+parseInt(_0x55ed3c(0xb2))/0x8*(parseInt(_0x55ed3c(0xbb))/0x9);if(_0x9439a===_0x1e4dc5)break;else _0x20c323['push'](_0x20c323['shift']());}catch(_0x876906){_0x20c323['push'](_0x20c323['shift']());}}}(_0x4117,0xaff4b));export const pluginDev={'docsUrl':_0x4f75d5(0xb9),'uploadUrl':_0x4f75d5(0xba),'scaffolds':{'full':{'key':_0x4f75d5(0xbf),'title':_0x4f75d5(0xb1),'desc':_0x4f75d5(0xad),'downloadUrl':_0x4f75d5(0xbc)},'backend':{'key':_0x4f75d5(0xbd),'title':'纯后端','desc':_0x4f75d5(0xb4),'downloadUrl':_0x4f75d5(0xbe)},'frontend':{'key':_0x4f75d5(0xb7),'title':_0x4f75d5(0xaf),'desc':_0x4f75d5(0xb6),'downloadUrl':'https://gitee.com/YOUR_ORG/YOUR_REPO/raw/master/plugin-frontend.zip'}}};
1
+ const _0x4d8a0c=_0xbf00;(function(_0x43dc3f,_0x4ef46c){const _0x4ac54c=_0xbf00,_0x21eebd=_0x43dc3f();while(!![]){try{const _0x469312=-parseInt(_0x4ac54c(0x195))/0x1*(-parseInt(_0x4ac54c(0x1a0))/0x2)+-parseInt(_0x4ac54c(0x19a))/0x3+parseInt(_0x4ac54c(0x19d))/0x4+parseInt(_0x4ac54c(0x191))/0x5*(-parseInt(_0x4ac54c(0x193))/0x6)+parseInt(_0x4ac54c(0x1a2))/0x7*(-parseInt(_0x4ac54c(0x197))/0x8)+parseInt(_0x4ac54c(0x19f))/0x9+parseInt(_0x4ac54c(0x196))/0xa;if(_0x469312===_0x4ef46c)break;else _0x21eebd['push'](_0x21eebd['shift']());}catch(_0x193691){_0x21eebd['push'](_0x21eebd['shift']());}}}(_0x2073,0xb6500));function _0xbf00(_0xf3fefb,_0x2ba6dd){_0xf3fefb=_0xf3fefb-0x18e;const _0x20730b=_0x2073();let _0xbf0027=_0x20730b[_0xf3fefb];if(_0xbf00['nWOHXW']===undefined){var _0x4b1457=function(_0x360024){const _0x5d7f2d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4488f0='',_0x43005d='';for(let _0x2db3de=0x0,_0x4ba87f,_0xfb1d2a,_0x257e09=0x0;_0xfb1d2a=_0x360024['charAt'](_0x257e09++);~_0xfb1d2a&&(_0x4ba87f=_0x2db3de%0x4?_0x4ba87f*0x40+_0xfb1d2a:_0xfb1d2a,_0x2db3de++%0x4)?_0x4488f0+=String['fromCharCode'](0xff&_0x4ba87f>>(-0x2*_0x2db3de&0x6)):0x0){_0xfb1d2a=_0x5d7f2d['indexOf'](_0xfb1d2a);}for(let _0x323be6=0x0,_0x452be5=_0x4488f0['length'];_0x323be6<_0x452be5;_0x323be6++){_0x43005d+='%'+('00'+_0x4488f0['charCodeAt'](_0x323be6)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x43005d);};_0xbf00['jTCvat']=_0x4b1457,_0xbf00['LSePrW']={},_0xbf00['nWOHXW']=!![];}const _0x45881f=_0x20730b[0x0],_0x180749=_0xf3fefb+_0x45881f,_0x393b01=_0xbf00['LSePrW'][_0x180749];return!_0x393b01?(_0xbf0027=_0xbf00['jTCvat'](_0xbf0027),_0xbf00['LSePrW'][_0x180749]=_0xbf0027):_0xbf0027=_0x393b01,_0xbf0027;}function _0x2073(){const _0x10b6bb=['mZCYnJe3s0TQDNDx','Ahr0Chm6lY92B21LlMrLDI9WBhvNAw5Zl3vWBg9Hza','Ahr0Chm6lY9NAxrLzs5JB20Vwu9vuL9puKCVwu9vuL9srvbpl3jHDY9Tyxn0zxiVCgX1z2LUlwz1BgWUEMLW','Ahr0Chm6lY9NAxrLzs5JB20Vwu9vuL9puKCVwu9vuL9srvbpl3jHDY9Tyxn0zxiVCgX1z2LUlwjHy2TLBMqUEMLW','nJC3mtv0zhDOsfa','57QV5yMn56UV','ndq0sevPAezx','5yMn56UVicSG5zco56UV','mtuZtgP1tKLz','nty5nJK5mhbqywjRzW','ndHwC1njyve','57QV5zco56UV','6zkP5A2qic8G5PYn5yQH56UV5O+s5lU26isA5OMl5P6277YilNzVBwxVVjRKU4uGC2vYDMvY77Yj77Ym6ycc5zci5lIk5lYG44cb55+T5l+H44cb5PsV5lUy562j6io95yQB5OMP5Bgv44cc','mtG2nJe4rujlwgHx','Ahr0Chm6lY92B21LlMrLDI9KB2nZl3bSDwDPBG','zNvSBa','mZuWnduXnLfLD3bXBq','5zco5y+W5B6U5BQu55sO6isA5OMl5P6277YilNzVBwxVVjRLKkSGD2vIl++8IE+8Jos7Psb3DwPPzsdMJilOVB3NI6ZNQ4VLIy3NQ6/POBxPNAlJGii','nZe3nJi0zfjIBfzx','nZKWoenrs1P0uq','5A6m5Pw05lIA5yQH5QIH5z2x6isA5OMl5P6277YilNzVBwxVVjRLKkSGC2vYDMvYios4JIb3zwlVViNVViZMNkZLNldLVidLJ5hMIzpLJixLKi7LJ5hLUipJGii'];_0x2073=function(){return _0x10b6bb;};return _0x2073();}export const pluginDev={'docsUrl':_0x4d8a0c(0x19b),'uploadUrl':_0x4d8a0c(0x18e),'scaffolds':{'full':{'key':_0x4d8a0c(0x19c),'title':_0x4d8a0c(0x194),'desc':_0x4d8a0c(0x1a1),'downloadUrl':_0x4d8a0c(0x18f)},'backend':{'key':'backend','title':_0x4d8a0c(0x198),'desc':_0x4d8a0c(0x199),'downloadUrl':_0x4d8a0c(0x190)},'frontend':{'key':'frontend','title':_0x4d8a0c(0x192),'desc':_0x4d8a0c(0x19e),'downloadUrl':'https://gitee.com/YOUR_ORG/YOUR_REPO/raw/master/plugin-frontend.zip'}}};
@@ -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>
@@ -45,10 +45,11 @@
45
45
  type="button"
46
46
  class="vm-preview-viewer__btn"
47
47
  :disabled="!preview"
48
+ :title="preview ? triggerTitle : undefined"
48
49
  @click="openViewer"
49
50
  >
50
- <i class="ri-file-search-line" aria-hidden="true" />
51
- <span>{{ label }}</span>
51
+ <i :class="triggerIcon" aria-hidden="true" />
52
+ <span>{{ displayLabel }}</span>
52
53
  </button>
53
54
  </div>
54
55
  <span v-else-if="!src" class="vm-preview-viewer is-empty">—</span>
@@ -132,9 +133,12 @@
132
133
 
133
134
  <audio
134
135
  v-else-if="kind === 'audio'"
136
+ ref="audioRef"
135
137
  class="vm-file-preview-viewer__audio"
136
138
  :src="src"
137
139
  controls
140
+ autoplay
141
+ playsinline
138
142
  />
139
143
 
140
144
  <iframe
@@ -214,8 +218,8 @@ const props = withDefaults(
214
218
  mediaKind?: MediaPreviewKind
215
219
  /** thumb | button | auto:触发方式 */
216
220
  trigger?: 'thumb' | 'button' | 'auto'
217
- /** image | video | auto(缩略图列) */
218
- type?: 'image' | 'video' | 'auto'
221
+ /** image | video | audio | auto(缩略图列或类型覆盖) */
222
+ type?: 'image' | 'video' | 'audio' | 'auto'
219
223
  size?: number | string
220
224
  radius?: number | string
221
225
  preview?: boolean
@@ -243,6 +247,7 @@ const excelHtml = ref('')
243
247
  const scale = ref(1)
244
248
  const rotate = ref(0)
245
249
  const videoRef = ref<HTMLVideoElement | null>(null)
250
+ const audioRef = ref<HTMLAudioElement | null>(null)
246
251
 
247
252
  const src = computed(() => {
248
253
  const raw = props.embedded ? props.src : props.modelValue
@@ -252,12 +257,19 @@ const src = computed(() => {
252
257
 
253
258
  const isVideoKind = computed(() => {
254
259
  if (props.mediaKind === 'video') return true
255
- if (props.mediaKind === 'image') return false
260
+ if (props.mediaKind === 'image' || props.mediaKind === 'audio') return false
256
261
  if (props.type === 'video') return true
257
- if (props.type === 'image') return false
262
+ if (props.type === 'image' || props.type === 'audio') return false
258
263
  return VIDEO_EXT.test(src.value)
259
264
  })
260
265
 
266
+ const isAudioKind = computed(() => {
267
+ if (props.mediaKind === 'audio') return true
268
+ if (props.type === 'audio') return true
269
+ if (props.mediaKind || props.type === 'image' || props.type === 'video') return false
270
+ return getMediaPreviewKind(props.fileName || src.value) === 'audio'
271
+ })
272
+
261
273
  const showThumb = computed(() => {
262
274
  if (props.embedded) return false
263
275
  if (props.trigger === 'button') return false
@@ -279,11 +291,26 @@ const showButton = computed(() => {
279
291
 
280
292
  const kind = computed((): MediaPreviewKind => {
281
293
  if (props.mediaKind) return props.mediaKind
294
+ if (props.type === 'audio' || isAudioKind.value) return 'audio'
282
295
  if (props.type === 'video' || isVideoKind.value) return 'video'
283
296
  if (props.type === 'image') return 'image'
284
297
  return getMediaPreviewKind(props.fileName || src.value)
285
298
  })
286
299
 
300
+ const displayLabel = computed(() => {
301
+ if (props.label !== '查看') return props.label
302
+ if (kind.value === 'audio') return '播放'
303
+ return props.label
304
+ })
305
+
306
+ const triggerIcon = computed(() =>
307
+ kind.value === 'audio' ? 'ri-play-circle-line' : 'ri-file-search-line',
308
+ )
309
+
310
+ const triggerTitle = computed(() =>
311
+ kind.value === 'audio' ? '播放音频' : '查看文件',
312
+ )
313
+
287
314
  const kindLabel = computed(() => KIND_LABEL[kind.value])
288
315
 
289
316
  const displayName = computed(() =>
@@ -399,6 +426,11 @@ watch(viewerOpen, (open) => {
399
426
  videoRef.value?.play?.().catch(() => undefined)
400
427
  })
401
428
  }
429
+ if (kind.value === 'audio') {
430
+ void nextTick(() => {
431
+ audioRef.value?.play?.().catch(() => undefined)
432
+ })
433
+ }
402
434
  } else {
403
435
  window.removeEventListener('keydown', onKeydown)
404
436
  loading.value = false
@@ -406,6 +438,7 @@ watch(viewerOpen, (open) => {
406
438
  textContent.value = ''
407
439
  excelHtml.value = ''
408
440
  videoRef.value?.pause?.()
441
+ audioRef.value?.pause?.()
409
442
  }
410
443
  })
411
444
 
@@ -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(_0x1cb170,_0x1b58fe){const _0x43774c=_0x1d16,_0x26cdb8=_0x1cb170();while(!![]){try{const _0xce027a=parseInt(_0x43774c(0x94))/0x1*(parseInt(_0x43774c(0x92))/0x2)+-parseInt(_0x43774c(0x99))/0x3+-parseInt(_0x43774c(0x95))/0x4*(parseInt(_0x43774c(0x8e))/0x5)+parseInt(_0x43774c(0x98))/0x6+parseInt(_0x43774c(0x93))/0x7+parseInt(_0x43774c(0x97))/0x8+-parseInt(_0x43774c(0x90))/0x9;if(_0xce027a===_0x1b58fe)break;else _0x26cdb8['push'](_0x26cdb8['shift']());}catch(_0x34d66a){_0x26cdb8['push'](_0x26cdb8['shift']());}}}(_0x33a8,0xefc1c));function _0x1d16(_0x2c3dd2,_0x4484c4){_0x2c3dd2=_0x2c3dd2-0x8e;const _0x33a88e=_0x33a8();let _0x1d1632=_0x33a88e[_0x2c3dd2];if(_0x1d16['clniBQ']===undefined){var _0x196be5=function(_0x5cc788){const _0x26aa28='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3cf67d='',_0x51b887='';for(let _0x36b969=0x0,_0x59032e,_0x5d7702,_0x504ff1=0x0;_0x5d7702=_0x5cc788['charAt'](_0x504ff1++);~_0x5d7702&&(_0x59032e=_0x36b969%0x4?_0x59032e*0x40+_0x5d7702:_0x5d7702,_0x36b969++%0x4)?_0x3cf67d+=String['fromCharCode'](0xff&_0x59032e>>(-0x2*_0x36b969&0x6)):0x0){_0x5d7702=_0x26aa28['indexOf'](_0x5d7702);}for(let _0x28994c=0x0,_0x237892=_0x3cf67d['length'];_0x28994c<_0x237892;_0x28994c++){_0x51b887+='%'+('00'+_0x3cf67d['charCodeAt'](_0x28994c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x51b887);};_0x1d16['INjPeu']=_0x196be5,_0x1d16['DagBLM']={},_0x1d16['clniBQ']=!![];}const _0x1aca1c=_0x33a88e[0x0],_0x2f472c=_0x2c3dd2+_0x1aca1c,_0x465398=_0x1d16['DagBLM'][_0x2f472c];return!_0x465398?(_0x1d1632=_0x1d16['INjPeu'](_0x1d1632),_0x1d16['DagBLM'][_0x2f472c]=_0x1d1632):_0x1d1632=_0x465398,_0x1d1632;}import{getCrudConfig}from'./style';import{CRUD_LABELS,DEFAULT_CRUD_DICT}from'./dict';export{CRUD_LABELS,DEFAULT_CRUD_DICT};function _0x33a8(){const _0x23ed7b=['C29YDa','CgfNAw5HDgLVBG','mtbAyMDcuuO','C2vHCMnO','mte0ndK4mZz0t0rIDKe','BgfIzwW','mtmZmdzuBvbPExG','nZy3mZy1mLngu2LJBG','mJaYy2Tjrhf1','mtaWnJu3nM9mtgvOvG','yxbP','mJK3mty0ofn0wuLezG','mtqYnZK0mhfku3jutq','odC2mtu2yNDMt1nn'];_0x33a8=function(){return _0x23ed7b;};return _0x33a8();}export const DEFAULT_CRUD_PERMISSION={'page':!![],'list':!![],'info':!![],'add':!![],'delete':!![],'update':!![]};export function mergeDict(_0x3cf67d){const _0x426c80=_0x1d16,_0x51b887=getCrudConfig()['dict'];if(!_0x3cf67d)return{..._0x51b887,'label':{..._0x51b887[_0x426c80(0x91)]}};return{..._0x51b887,..._0x3cf67d,'api':{..._0x51b887[_0x426c80(0x96)],..._0x3cf67d[_0x426c80(0x96)]},'pagination':{..._0x51b887[_0x426c80(0x9b)],..._0x3cf67d[_0x426c80(0x9b)]},'search':{..._0x51b887[_0x426c80(0x8f)],..._0x3cf67d[_0x426c80(0x8f)]},'sort':{..._0x51b887['sort'],..._0x3cf67d[_0x426c80(0x9a)]},'label':{..._0x51b887[_0x426c80(0x91)],..._0x3cf67d[_0x426c80(0x91)]}};}export function mergePermission(_0x36b969,_0x59032e){return{...DEFAULT_CRUD_PERMISSION,..._0x59032e,..._0x36b969};}
1
+ (function(_0x537ba6,_0x2c603e){const _0x21dd81=_0x5da0,_0x1299c9=_0x537ba6();while(!![]){try{const _0x11803e=-parseInt(_0x21dd81(0xcb))/0x1+-parseInt(_0x21dd81(0xc9))/0x2*(-parseInt(_0x21dd81(0xd3))/0x3)+-parseInt(_0x21dd81(0xc4))/0x4+parseInt(_0x21dd81(0xd1))/0x5*(parseInt(_0x21dd81(0xd2))/0x6)+parseInt(_0x21dd81(0xc7))/0x7+-parseInt(_0x21dd81(0xc8))/0x8+parseInt(_0x21dd81(0xcd))/0x9*(parseInt(_0x21dd81(0xd0))/0xa);if(_0x11803e===_0x2c603e)break;else _0x1299c9['push'](_0x1299c9['shift']());}catch(_0x18b70a){_0x1299c9['push'](_0x1299c9['shift']());}}}(_0x5ad3,0xb97b7));import{getCrudConfig}from'./style';import{CRUD_LABELS,DEFAULT_CRUD_DICT}from'./dict';export{CRUD_LABELS,DEFAULT_CRUD_DICT};export const DEFAULT_CRUD_PERMISSION={'page':!![],'list':!![],'info':!![],'add':!![],'delete':!![],'update':!![]};export function mergeDict(_0x4d3d81){const _0x4355e8=_0x5da0,_0x280035=getCrudConfig()[_0x4355e8(0xcc)];if(!_0x4d3d81)return{..._0x280035,'label':{..._0x280035['label']}};return{..._0x280035,..._0x4d3d81,'api':{..._0x280035[_0x4355e8(0xc6)],..._0x4d3d81[_0x4355e8(0xc6)]},'pagination':{..._0x280035['pagination'],..._0x4d3d81[_0x4355e8(0xcf)]},'search':{..._0x280035[_0x4355e8(0xce)],..._0x4d3d81[_0x4355e8(0xce)]},'sort':{..._0x280035[_0x4355e8(0xc5)],..._0x4d3d81[_0x4355e8(0xc5)]},'label':{..._0x280035[_0x4355e8(0xca)],..._0x4d3d81[_0x4355e8(0xca)]}};}function _0x5ad3(){const _0xef24b3=['mJiYmdy1mLHzzeTIBG','C29YDa','yxbP','ndaWndqWnM5MsgXxDa','odqXmtG1nKLfrhrMvq','mMP2z1HUsG','BgfIzwW','mtm0mZq1nK9IzuH2uq','zgLJDa','mtm0nJy5nZLZy0PRAva','C2vHCMnO','CgfNAw5HDgLVBG','mtbPzuvis1a','mJeWnvjmCMLJuq','mta2odzMtxjuwMy','mJy3ndKZofHIEe1jrG'];_0x5ad3=function(){return _0xef24b3;};return _0x5ad3();}function _0x5da0(_0x34e202,_0x282e5){_0x34e202=_0x34e202-0xc4;const _0x5ad3ff=_0x5ad3();let _0x5da0cf=_0x5ad3ff[_0x34e202];if(_0x5da0['KnlhfG']===undefined){var _0x3f4a5c=function(_0x2b9eeb){const _0xe476dd='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4d3d81='',_0x280035='';for(let _0x312840=0x0,_0x2910fc,_0x45e91a,_0x5885a3=0x0;_0x45e91a=_0x2b9eeb['charAt'](_0x5885a3++);~_0x45e91a&&(_0x2910fc=_0x312840%0x4?_0x2910fc*0x40+_0x45e91a:_0x45e91a,_0x312840++%0x4)?_0x4d3d81+=String['fromCharCode'](0xff&_0x2910fc>>(-0x2*_0x312840&0x6)):0x0){_0x45e91a=_0xe476dd['indexOf'](_0x45e91a);}for(let _0x4baaca=0x0,_0x1e44aa=_0x4d3d81['length'];_0x4baaca<_0x1e44aa;_0x4baaca++){_0x280035+='%'+('00'+_0x4d3d81['charCodeAt'](_0x4baaca)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x280035);};_0x5da0['GUGfXJ']=_0x3f4a5c,_0x5da0['kvinly']={},_0x5da0['KnlhfG']=!![];}const _0x2190e7=_0x5ad3ff[0x0],_0x1ff780=_0x34e202+_0x2190e7,_0x2ade1c=_0x5da0['kvinly'][_0x1ff780];return!_0x2ade1c?(_0x5da0cf=_0x5da0['GUGfXJ'](_0x5da0cf),_0x5da0['kvinly'][_0x1ff780]=_0x5da0cf):_0x5da0cf=_0x2ade1c,_0x5da0cf;}export function mergePermission(_0x312840,_0x2910fc){return{...DEFAULT_CRUD_PERMISSION,..._0x2910fc,..._0x312840};}
@@ -1 +1 @@
1
- const _0x4dcf32=_0x36af;(function(_0x53b068,_0x12ec31){const _0x475d16=_0x36af,_0x4bbcba=_0x53b068();while(!![]){try{const _0x530f53=-parseInt(_0x475d16(0xa8))/0x1*(-parseInt(_0x475d16(0xac))/0x2)+-parseInt(_0x475d16(0xb2))/0x3*(parseInt(_0x475d16(0xa1))/0x4)+parseInt(_0x475d16(0xa0))/0x5+-parseInt(_0x475d16(0xb7))/0x6+-parseInt(_0x475d16(0xa5))/0x7*(-parseInt(_0x475d16(0xaa))/0x8)+-parseInt(_0x475d16(0x9f))/0x9+parseInt(_0x475d16(0xb8))/0xa;if(_0x530f53===_0x12ec31)break;else _0x4bbcba['push'](_0x4bbcba['shift']());}catch(_0x506ef7){_0x4bbcba['push'](_0x4bbcba['shift']());}}}(_0x47ad,0x30679));import{createApp,h,ref}from'vue';function _0x36af(_0x363539,_0x52c8cd){_0x363539=_0x363539-0x9f;const _0x47ad46=_0x47ad();let _0x36afbc=_0x47ad46[_0x363539];if(_0x36af['zIVdXZ']===undefined){var _0x92abb2=function(_0x545262){const _0x2f4e69='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2033ec='',_0x4dda3f='';for(let _0x351254=0x0,_0x2ca29a,_0x2836fd,_0x461f02=0x0;_0x2836fd=_0x545262['charAt'](_0x461f02++);~_0x2836fd&&(_0x2ca29a=_0x351254%0x4?_0x2ca29a*0x40+_0x2836fd:_0x2836fd,_0x351254++%0x4)?_0x2033ec+=String['fromCharCode'](0xff&_0x2ca29a>>(-0x2*_0x351254&0x6)):0x0){_0x2836fd=_0x2f4e69['indexOf'](_0x2836fd);}for(let _0x547321=0x0,_0x47d020=_0x2033ec['length'];_0x547321<_0x47d020;_0x547321++){_0x4dda3f+='%'+('00'+_0x2033ec['charCodeAt'](_0x547321)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4dda3f);};_0x36af['cuSJtC']=_0x92abb2,_0x36af['QkcWuh']={},_0x36af['zIVdXZ']=!![];}const _0x598d7d=_0x47ad46[0x0],_0x29aa1c=_0x363539+_0x598d7d,_0x8e2df5=_0x36af['QkcWuh'][_0x29aa1c];return!_0x8e2df5?(_0x36afbc=_0x36af['cuSJtC'](_0x36afbc),_0x36af['QkcWuh'][_0x29aa1c]=_0x36afbc):_0x36afbc=_0x8e2df5,_0x36afbc;}import{Dialog,DialogContent,DialogFooter,DialogHeader,DialogTitle}from'#vome-host/components/ui/dialog';export function vmConfirm(_0x2033ec){const _0x2a0a83=_0x36af,_0x4dda3f=typeof _0x2033ec===_0x2a0a83(0xae)?{'message':_0x2033ec}:_0x2033ec;return new Promise(_0x351254=>{const _0x5dec37=_0x2a0a83,_0x2ca29a=ref(!![]),_0x2836fd=document[_0x5dec37(0xb5)](_0x5dec37(0xa7));document[_0x5dec37(0xa3)][_0x5dec37(0xa6)](_0x2836fd);const _0x461f02=createApp({'setup'(){const _0x20a516=_0x5dec37;function _0x547321(_0x47d020){_0x2ca29a['value']=![],_0x351254(_0x47d020),setTimeout(()=>{const _0x122180=_0x36af;_0x461f02['unmount'](),_0x2836fd[_0x122180(0xb1)]();},0xc8);}return()=>h(Dialog,{'open':_0x2ca29a[_0x20a516(0xa2)],'onUpdate:open':_0x4d1113=>{if(!_0x4d1113)_0x547321(![]);}},{'default':()=>h(DialogContent,{'class':'vm-confirm','showCloseButton':![]},{'default':()=>[h(DialogHeader,{'class':_0x20a516(0xad)},()=>h(DialogTitle,{'class':_0x20a516(0xa4)},()=>_0x4dda3f[_0x20a516(0xb0)]||'提示')),h('div',{'class':'vm-confirm__body'},_0x4dda3f['message']),h(DialogFooter,{'class':'vm-confirm__foot'},()=>[h(_0x20a516(0xba),{'type':_0x20a516(0xba),'class':_0x20a516(0xb4),'onClick':()=>_0x547321(![])},_0x4dda3f['cancelText']||'取消'),h(_0x20a516(0xba),{'type':'button','class':_0x20a516(0xbb),'onClick':()=>_0x547321(!![])},_0x4dda3f['confirmText']||'确定')])]})});}});_0x461f02[_0x5dec37(0xb9)](_0x2836fd);});}if(typeof document!==_0x4dcf32(0xbc)&&!document[_0x4dcf32(0xa9)](_0x4dcf32(0xb6))){const style=document[_0x4dcf32(0xb5)](_0x4dcf32(0xbd));style['id']=_0x4dcf32(0xb6),style[_0x4dcf32(0xb3)]=_0x4dcf32(0xab),document[_0x4dcf32(0xaf)][_0x4dcf32(0xa6)](style);}function _0x47ad(){const _0x3d99e3=['Dw5KzwzPBMvK','C3r5Bgu','mZq2ntK5mgfUCKXozG','ntiZmtiWquDAy2nf','mtz3AeTQExe','DMfSDwu','yM9KEq','DM0Ty29UzMLYBv9FDgL0Bgu','mZaXEg5Os0nW','yxbWzw5Kq2HPBgq','zgL2','ntr3zxfpAeS','z2v0rwXLBwvUDej5swq','ota4mfD6A09vyG','cI52Bs1JB25MAxjTw2rHDgeTC2XVDd0NzgLHBg9NlwnVBNrLBNqNxsb7cIaGD2LKDgG6ig1PBIG0mdbWEcWGy2fSyYGXmdb2DYaTidmYChGPksaHAw1WB3j0yw50oWOGig1HEc13Awr0AdOGBwLUkdqWmhb4lcbJywXJkdeWmhz3ic0GmZjWEcKPicfPBxbVCNrHBNq7cIaGz2fWoIaWicfPBxbVCNrHBNq7cIaGCgfKzgLUzZOGmcaHAw1WB3j0yw50oWOGigjVCMrLCJOGBM9UzsaHAw1WB3j0yw50oWOGigjVCMrLCI1YywrPDxm6idi0ChGGiwLTCg9YDgfUDdSkicbIB3GTC2HHzg93oIb2yxiOls1ZAgfKB3CTC29MDcKGiwLTCg9YDgfUDdSkFqOUDM0Ty29UzMLYBv9FAgvHzcb7ihbHzgrPBMC6ide4ChGGmJjWEcaWoYbIB3jKzxiTyM90Dg9ToIbUB25LoYb9cI52Bs1JB25MAxjTx190AxrSzsb7igzVBNqTC2L6ztOGmtzWEdSGzM9UDc13zwLNAhq6idy1mdSGFqOUDM0Ty29UzMLYBv9FyM9KEsb7cIaGCgfKzgLUzZOGmtjWEcaYmNb4idHWEdSkicbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7cIaGzM9UDc1ZAxPLoIaXnhb4oWOGigXPBMuTAgvPz2H0oIaXlJy7cN0klNzTlwnVBMzPCM1Fx2zVB3qGEWOGigrPC3bSyxK6igzSzxG7cIaGANvZDgLMEs1JB250zw50oIbMBgv4lwvUzdSkicbNyxa6idHWEdSkicbWywrKAw5NoIaXnhb4idiYChG7cN0klNzTlwnVBMzPCM1Fx2j0BIb7cIaGAgvPz2H0oIaZnNb4oWOGihbHzgrPBMC6idaGmtzWEdSkicbIB3jKzxi6ig5VBMu7cIaGyM9YzgvYlxjHzgL1CZOGmtjWEdSkicbMB250lxnPEMu6ideZChG7cIaGzM9UDc13zwLNAhq6idyWmdSkicbJDxjZB3i6ihbVAw50zxi7cN0klNzTlwnVBMzPCM1Fx2j0BI5PCY1WCMLTyxj5ihSGyMfJA2DYB3vUzdOGDMfYkc0TyNjHBMqPoYbJB2XVCJOGi2zMzJSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlxbYAw1HCNK6Ag92zxiGEYbIywnRz3jVDw5KoIb2yxiOls1ICMfUzc1KzwvWktSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlwDOB3n0ihSGyMfJA2DYB3vUzdOGDMfYkc0TBxv0zwqPoYbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7ih0k','ndu4DfPYBuvx','DM0Ty29UzMLYBv9FAgvHza','C3rYAw5N','AgvHza','DgL0Bgu','CMvTB3zL','mtG0mZeXtMPuyMr6','Dgv4DenVBNrLBNq','DM0Ty29UzMLYBv9FyNrUigLZlwDOB3n0','y3jLyxrLrwXLBwvUDa','DM0Ty29UzMLYBs1ZDhLSzq','mtK2mJy1ngTdtgvVAG','otKWndm3mgDvyKfPCW','Bw91BNq','yNv0Dg9U','DM0Ty29UzMLYBv9FyNrUigLZlxbYAw1HCNK'];_0x47ad=function(){return _0x3d99e3;};return _0x47ad();}
1
+ const _0x192594=_0xbde4;function _0x4936(){const _0x190399=['DM0Ty29UzMLYBv9FyM9KEq','Dw5KzwzPBMvK','C3r5Bgu','C3rYAw5N','DgL0Bgu','Dw5TB3vUDa','mtCXnJe5ogTLvwzirW','z2v0rwXLBwvUDej5swq','y3jLyxrLrwXLBwvUDa','zgL2','DM0Ty29UzMLYBv9FzM9VDa','ntG1odG4qLryruzf','mxnABMzZsG','mty0ntm5nJborNvvqMu','BwvZC2fNzq','DM0Ty29UzMLYBs1ZDhLSzq','DMfSDwu','yNv0Dg9U','cI52Bs1JB25MAxjTw2rHDgeTC2XVDd0NzgLHBg9NlwnVBNrLBNqNxsb7cIaGD2LKDgG6ig1PBIG0mdbWEcWGy2fSyYGXmdb2DYaTidmYChGPksaHAw1WB3j0yw50oWOGig1HEc13Awr0AdOGBwLUkdqWmhb4lcbJywXJkdeWmhz3ic0GmZjWEcKPicfPBxbVCNrHBNq7cIaGz2fWoIaWicfPBxbVCNrHBNq7cIaGCgfKzgLUzZOGmcaHAw1WB3j0yw50oWOGigjVCMrLCJOGBM9UzsaHAw1WB3j0yw50oWOGigjVCMrLCI1YywrPDxm6idi0ChGGiwLTCg9YDgfUDdSkicbIB3GTC2HHzg93oIb2yxiOls1ZAgfKB3CTC29MDcKGiwLTCg9YDgfUDdSkFqOUDM0Ty29UzMLYBv9FAgvHzcb7ihbHzgrPBMC6ide4ChGGmJjWEcaWoYbIB3jKzxiTyM90Dg9ToIbUB25LoYb9cI52Bs1JB25MAxjTx190AxrSzsb7igzVBNqTC2L6ztOGmtzWEdSGzM9UDc13zwLNAhq6idy1mdSGFqOUDM0Ty29UzMLYBv9FyM9KEsb7cIaGCgfKzgLUzZOGmtjWEcaYmNb4idHWEdSkicbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7cIaGzM9UDc1ZAxPLoIaXnhb4oWOGigXPBMuTAgvPz2H0oIaXlJy7cN0klNzTlwnVBMzPCM1Fx2zVB3qGEWOGigrPC3bSyxK6igzSzxG7cIaGANvZDgLMEs1JB250zw50oIbMBgv4lwvUzdSkicbNyxa6idHWEdSkicbWywrKAw5NoIaXnhb4idiYChG7cN0klNzTlwnVBMzPCM1Fx2j0BIb7cIaGAgvPz2H0oIaZnNb4oWOGihbHzgrPBMC6idaGmtzWEdSkicbIB3jKzxi6ig5VBMu7cIaGyM9YzgvYlxjHzgL1CZOGmtjWEdSkicbMB250lxnPEMu6ideZChG7cIaGzM9UDc13zwLNAhq6idyWmdSkicbJDxjZB3i6ihbVAw50zxi7cN0klNzTlwnVBMzPCM1Fx2j0BI5PCY1WCMLTyxj5ihSGyMfJA2DYB3vUzdOGDMfYkc0TyNjHBMqPoYbJB2XVCJOGi2zMzJSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlxbYAw1HCNK6Ag92zxiGEYbIywnRz3jVDw5KoIb2yxiOls1ICMfUzc1KzwvWktSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlwDOB3n0ihSGyMfJA2DYB3vUzdOGDMfYkc0TBxv0zwqPoYbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7ih0k','y2fUy2vSvgv4Da','CMvTB3zL','mJK1nZmWnefSq1nOzq','mtaYzKXHuhbf','mJfiq01bD3C','DM0Ty29UzMLYBv9FAgvHza','mtm0nJu0nJDXyvDgvfi','ota3me5hA0jyBG','nJe5mZq4ohzvte5nCG','yxbWzw5Kq2HPBgq','yM9KEq','AgvHza','Dgv4DenVBNrLBNq'];_0x4936=function(){return _0x190399;};return _0x4936();}function _0xbde4(_0x181a81,_0x133418){_0x181a81=_0x181a81-0x126;const _0x49361a=_0x4936();let _0xbde4e1=_0x49361a[_0x181a81];if(_0xbde4['PfotUO']===undefined){var _0x6656b0=function(_0x1989fe){const _0x11e560='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x405ff4='',_0x28050c='';for(let _0x275bab=0x0,_0x1806e6,_0x4db980,_0x197baa=0x0;_0x4db980=_0x1989fe['charAt'](_0x197baa++);~_0x4db980&&(_0x1806e6=_0x275bab%0x4?_0x1806e6*0x40+_0x4db980:_0x4db980,_0x275bab++%0x4)?_0x405ff4+=String['fromCharCode'](0xff&_0x1806e6>>(-0x2*_0x275bab&0x6)):0x0){_0x4db980=_0x11e560['indexOf'](_0x4db980);}for(let _0xb5e900=0x0,_0x534688=_0x405ff4['length'];_0xb5e900<_0x534688;_0xb5e900++){_0x28050c+='%'+('00'+_0x405ff4['charCodeAt'](_0xb5e900)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x28050c);};_0xbde4['UvncLi']=_0x6656b0,_0xbde4['MsHUbC']={},_0xbde4['PfotUO']=!![];}const _0x40ea2a=_0x49361a[0x0],_0x5bc264=_0x181a81+_0x40ea2a,_0x21e0a3=_0xbde4['MsHUbC'][_0x5bc264];return!_0x21e0a3?(_0xbde4e1=_0xbde4['UvncLi'](_0xbde4e1),_0xbde4['MsHUbC'][_0x5bc264]=_0xbde4e1):_0xbde4e1=_0x21e0a3,_0xbde4e1;}(function(_0x1b2c1d,_0xa3ca27){const _0x49bc02=_0xbde4,_0x3e3270=_0x1b2c1d();while(!![]){try{const _0x297680=-parseInt(_0x49bc02(0x139))/0x1*(-parseInt(_0x49bc02(0x142))/0x2)+parseInt(_0x49bc02(0x133))/0x3+-parseInt(_0x49bc02(0x128))/0x4+-parseInt(_0x49bc02(0x127))/0x5*(-parseInt(_0x49bc02(0x143))/0x6)+-parseInt(_0x49bc02(0x144))/0x7*(-parseInt(_0x49bc02(0x138))/0x8)+-parseInt(_0x49bc02(0x126))/0x9+parseInt(_0x49bc02(0x13a))/0xa;if(_0x297680===_0xa3ca27)break;else _0x3e3270['push'](_0x3e3270['shift']());}catch(_0x4f0eb2){_0x3e3270['push'](_0x3e3270['shift']());}}}(_0x4936,0xdc3ed));import{createApp,h,ref}from'vue';import{Dialog,DialogContent,DialogFooter,DialogHeader,DialogTitle}from'#vome-host/components/ui/dialog';export function vmConfirm(_0x405ff4){const _0x237309=_0xbde4,_0x28050c=typeof _0x405ff4===_0x237309(0x130)?{'message':_0x405ff4}:_0x405ff4;return new Promise(_0x275bab=>{const _0xd8837e=_0x237309,_0x1806e6=ref(!![]),_0x4db980=document[_0xd8837e(0x135)](_0xd8837e(0x136));document[_0xd8837e(0x12a)][_0xd8837e(0x129)](_0x4db980);const _0x197baa=createApp({'setup'(){const _0x399179=_0xd8837e;function _0xb5e900(_0x534688){const _0x1623eb=_0xbde4;_0x1806e6[_0x1623eb(0x13d)]=![],_0x275bab(_0x534688),setTimeout(()=>{const _0x2b6e73=_0x1623eb;_0x197baa[_0x2b6e73(0x132)](),_0x4db980[_0x2b6e73(0x141)]();},0xc8);}return()=>h(Dialog,{'open':_0x1806e6['value'],'onUpdate:open':_0xa6688f=>{if(!_0xa6688f)_0xb5e900(![]);}},{'default':()=>h(DialogContent,{'class':'vm-confirm','showCloseButton':![]},{'default':()=>[h(DialogHeader,{'class':_0x399179(0x145)},()=>h(DialogTitle,{'class':'vm-confirm__title'},()=>_0x28050c[_0x399179(0x131)]||'提示')),h(_0x399179(0x136),{'class':_0x399179(0x12d)},_0x28050c[_0x399179(0x13b)]),h(DialogFooter,{'class':_0x399179(0x137)},()=>[h(_0x399179(0x13e),{'type':_0x399179(0x13e),'class':'vm-confirm__btn\x20is-ghost','onClick':()=>_0xb5e900(![])},_0x28050c[_0x399179(0x140)]||'取消'),h(_0x399179(0x13e),{'type':_0x399179(0x13e),'class':'vm-confirm__btn\x20is-primary','onClick':()=>_0xb5e900(!![])},_0x28050c['confirmText']||'确定')])]})});}});_0x197baa['mount'](_0x4db980);});}if(typeof document!==_0x192594(0x12e)&&!document[_0x192594(0x134)](_0x192594(0x13c))){const style=document[_0x192594(0x135)](_0x192594(0x12f));style['id']=_0x192594(0x13c),style[_0x192594(0x12c)]=_0x192594(0x13f),document[_0x192594(0x12b)]['appendChild'](style);}
@@ -1 +1 @@
1
- const _0x1d84eb=_0x4569;(function(_0x43ace0,_0x212843){const _0x547c75=_0x4569,_0x18fa0b=_0x43ace0();while(!![]){try{const _0x58f88a=-parseInt(_0x547c75(0x8d))/0x1+-parseInt(_0x547c75(0x90))/0x2+-parseInt(_0x547c75(0x82))/0x3*(parseInt(_0x547c75(0x81))/0x4)+parseInt(_0x547c75(0x95))/0x5+-parseInt(_0x547c75(0x86))/0x6+parseInt(_0x547c75(0x87))/0x7*(parseInt(_0x547c75(0x84))/0x8)+parseInt(_0x547c75(0x8b))/0x9;if(_0x58f88a===_0x212843)break;else _0x18fa0b['push'](_0x18fa0b['shift']());}catch(_0x222fbe){_0x18fa0b['push'](_0x18fa0b['shift']());}}}(_0x5baf,0x83ee3));export const CRUD_LABELS={'op':'操作','add':'新增','delete':'删除','multiDelete':'删除','export':'导出','update':'编辑','refresh':'刷新','info':'详情','search':'搜索','reset':'重置','clear':'清空','save':'保存','close':'取消','confirm':'确定','advSearch':_0x1d84eb(0x85),'searchKey':'搜索关键字','placeholder':_0x1d84eb(0x93),'tips':'提示','saveSuccess':'保存成功','deleteSuccess':_0x1d84eb(0x94),'deleteConfirm':_0x1d84eb(0x96),'forceDeleteConfirm':'此操作将永久删除选中数据,是否继续?','empty':_0x1d84eb(0x92),'desc':'降序','asc':'升序','select':'选择','deselect':_0x1d84eb(0x91),'seeMore':'查看更多','hideContent':'隐藏内容','nonEmpty':_0x1d84eb(0x88)};function _0x4569(_0x28d2b4,_0x495cbc){_0x28d2b4=_0x28d2b4-0x81;const _0x5baf13=_0x5baf();let _0x45690b=_0x5baf13[_0x28d2b4];if(_0x4569['QMTLEp']===undefined){var _0x5ebf4d=function(_0x472d4c){const _0x3d7c1c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2eab81='',_0x1d3247='';for(let _0x279dc9=0x0,_0x136172,_0x45cf41,_0xc452a1=0x0;_0x45cf41=_0x472d4c['charAt'](_0xc452a1++);~_0x45cf41&&(_0x136172=_0x279dc9%0x4?_0x136172*0x40+_0x45cf41:_0x45cf41,_0x279dc9++%0x4)?_0x2eab81+=String['fromCharCode'](0xff&_0x136172>>(-0x2*_0x279dc9&0x6)):0x0){_0x45cf41=_0x3d7c1c['indexOf'](_0x45cf41);}for(let _0x414262=0x0,_0x1b765a=_0x2eab81['length'];_0x414262<_0x1b765a;_0x414262++){_0x1d3247+='%'+('00'+_0x2eab81['charCodeAt'](_0x414262)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1d3247);};_0x4569['gbxXcm']=_0x5ebf4d,_0x4569['owXAGb']={},_0x4569['QMTLEp']=!![];}const _0x160860=_0x5baf13[0x0],_0x50a72d=_0x28d2b4+_0x160860,_0x4311a0=_0x4569['owXAGb'][_0x50a72d];return!_0x4311a0?(_0x45690b=_0x4569['gbxXcm'](_0x45690b),_0x4569['owXAGb'][_0x50a72d]=_0x45690b):_0x45690b=_0x4311a0,_0x45690b;}function _0x5baf(){const _0x4036b0=['ndGXnZeXohL4sg5gEa','mJC4odaZn2vbyxPbCW','5lIn6io95lI656M6','zgvSzxrL','CxvLCNK','mtuXodyWntf4ugfswui','C29YDa','nde5mtC0zKDnsNbW','CgfNzq','Aw5MBW','mZy1otu0v3HQuMX3','5y+w5RAi6ycj5OUP','5PQc5PEG5PwW5O2U','6k+36l6t5ywL','5yIG6zMK5OIq5yQF','mJuWnZe4mfvezKLVqW','5Q2K5Pon5l2C5Bcg5PwW5O2U5Qch6k6W5lI65BEY5yIG6zMK77Ym5PIV5zcM57UN57UT77YF','BgLZDa','mtaWuhHNwLrm','nZCWmdfLA1bttNG','DxbKyxrL','oePwyLPYBW','6AUy57QN5PcC57sI'];_0x5baf=function(){return _0x4036b0;};return _0x5baf();}export const DEFAULT_CRUD_DICT={'primaryId':'id','api':{'list':_0x1d84eb(0x97),'add':'add','update':_0x1d84eb(0x83),'delete':_0x1d84eb(0x89),'info':_0x1d84eb(0x8f),'page':_0x1d84eb(0x8e)},'pagination':{'page':'page','size':'size'},'search':{'keyWord':'keyWord','query':_0x1d84eb(0x8a)},'sort':{'prop':'order','order':_0x1d84eb(0x8c)},'label':CRUD_LABELS};
1
+ const _0x48d37f=_0x3352;(function(_0x34f160,_0x489ada){const _0x4e78de=_0x3352,_0x215354=_0x34f160();while(!![]){try{const _0x189368=parseInt(_0x4e78de(0x208))/0x1+-parseInt(_0x4e78de(0x1f0))/0x2+-parseInt(_0x4e78de(0x1f3))/0x3+parseInt(_0x4e78de(0x1ef))/0x4*(parseInt(_0x4e78de(0x1f1))/0x5)+-parseInt(_0x4e78de(0x205))/0x6*(-parseInt(_0x4e78de(0x201))/0x7)+-parseInt(_0x4e78de(0x1f9))/0x8+-parseInt(_0x4e78de(0x1f4))/0x9*(-parseInt(_0x4e78de(0x206))/0xa);if(_0x189368===_0x489ada)break;else _0x215354['push'](_0x215354['shift']());}catch(_0x30bf96){_0x215354['push'](_0x215354['shift']());}}}(_0x3d2f,0x87d83));function _0x3352(_0x3a7f34,_0x5a6036){_0x3a7f34=_0x3a7f34-0x1ef;const _0x3d2fdf=_0x3d2f();let _0x3352f5=_0x3d2fdf[_0x3a7f34];if(_0x3352['FLmWKm']===undefined){var _0x54707a=function(_0x5cfed6){const _0x26adaf='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x305e5e='',_0x3ae1fd='';for(let _0x153c65=0x0,_0x16128f,_0x5362b3,_0x5837a6=0x0;_0x5362b3=_0x5cfed6['charAt'](_0x5837a6++);~_0x5362b3&&(_0x16128f=_0x153c65%0x4?_0x16128f*0x40+_0x5362b3:_0x5362b3,_0x153c65++%0x4)?_0x305e5e+=String['fromCharCode'](0xff&_0x16128f>>(-0x2*_0x153c65&0x6)):0x0){_0x5362b3=_0x26adaf['indexOf'](_0x5362b3);}for(let _0xaaf7e1=0x0,_0xdf413c=_0x305e5e['length'];_0xaaf7e1<_0xdf413c;_0xaaf7e1++){_0x3ae1fd+='%'+('00'+_0x305e5e['charCodeAt'](_0xaaf7e1)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3ae1fd);};_0x3352['KCosPr']=_0x54707a,_0x3352['gvEESn']={},_0x3352['FLmWKm']=!![];}const _0x2a71cc=_0x3d2fdf[0x0],_0x4f2326=_0x3a7f34+_0x2a71cc,_0x8dce44=_0x3352['gvEESn'][_0x4f2326];return!_0x8dce44?(_0x3352f5=_0x3352['KCosPr'](_0x3352f5),_0x3352['gvEESn'][_0x4f2326]=_0x3352f5):_0x3352f5=_0x8dce44,_0x3352f5;}export const CRUD_LABELS={'op':'操作','add':'新增','delete':'删除','multiDelete':'删除','export':'导出','update':'编辑','refresh':'刷新','info':'详情','search':'搜索','reset':'重置','clear':'清空','save':'保存','close':'取消','confirm':'确定','advSearch':_0x48d37f(0x203),'searchKey':_0x48d37f(0x1fb),'placeholder':'请输入','tips':'提示','saveSuccess':_0x48d37f(0x1fe),'deleteSuccess':'删除成功','deleteConfirm':_0x48d37f(0x200),'forceDeleteConfirm':'此操作将永久删除选中数据,是否继续?','empty':_0x48d37f(0x204),'desc':'降序','asc':'升序','select':'选择','deselect':_0x48d37f(0x202),'seeMore':_0x48d37f(0x1f8),'hideContent':_0x48d37f(0x1f5),'nonEmpty':_0x48d37f(0x1fd)};export const DEFAULT_CRUD_DICT={'primaryId':'id','api':{'list':_0x48d37f(0x1fa),'add':'add','update':'update','delete':_0x48d37f(0x1f2),'info':_0x48d37f(0x1ff),'page':_0x48d37f(0x1f6)},'pagination':{'page':_0x48d37f(0x1f6),'size':'size'},'search':{'keyWord':'keyWord','query':_0x48d37f(0x207)},'sort':{'prop':_0x48d37f(0x1f7),'order':_0x48d37f(0x1fc)},'label':CRUD_LABELS};function _0x3d2f(){const _0x2e5223=['5lIn6io95lI656M6','5l+D5A2y5OIq5yQF','Aw5MBW','5Q2K5Pon5l2C5Bcg5PwW5O2U5Qch6k6W5lI65BEY5yIG6zMK77Ym5PIV5zcM57UN57UT77YF','n2v0zfLNra','5y+w5RAi6ycj5OUP','6AUy57QN5PcC57sI','5PQc5PEG5PwW5O2U','nty3ntCZmfvlzxLitW','otm0mhjRyLDmDG','CxvLCNK','mJyXmJC4vKDgzwTz','mZmZmJCXmLfmqKvXuG','mtiZndGXofDqs2Lfra','nwjHwwzqDa','zgvSzxrL','mtC5mZy0oxbtz3rgva','ntCZm3feyuXjtq','6zQq6jEp5yAf5A65','CgfNzq','B3jKzxi','5P+L55Yl5PU05AsA','nJKWoti2nhrAB3H6vG','BgLZDa','5PcC57sI5ywZ6zsU5A2x','C29YDa'];_0x3d2f=function(){return _0x2e5223;};return _0x3d2f();}
@@ -29,7 +29,6 @@ export { default as VmContextMenu } from './components/vm-context-menu.vue';
29
29
  export { default as VmUpload } from './components/vm-upload.vue';
30
30
  export { default as VmUploadItem } from './components/vm-upload-item.vue';
31
31
  export { default as VmPreviewViewer } from './components/vm-preview-viewer.vue';
32
- export { default as VmAudio } from './components/vm-audio.vue';
33
32
  export { default as VmRichtext } from './components/vm-richtext.vue';
34
33
  export { default as VmJsonCode } from './components/vm-json-code.vue';
35
34
  export { default as VmJsonViewer } from './components/vm-json-viewer.vue';
@@ -42,6 +41,8 @@ export { default as VmCopyBtn } from './components/vm-copy-btn.vue';
42
41
  export { default as VmFormHint } from './components/vm-form-hint.vue';
43
42
  export { default as VmDatetimePicker } from './components/vm-datetime-picker.vue';
44
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';
45
46
  export { vmConfirm } from './confirm';
46
47
  export { useCrud, useTable, useUpsert, useSearch, useCore, CRUD_KEY, } from './useCrud';
47
48
  export { Plugins, toTree, setFocus, setRules, setAuto, buildAutoSearchItems } from './plugins';