vome-core 0.0.38 → 0.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/vm-markdown.vue +245 -5
- package/dist/admin/components/vm-marquee.vue +265 -0
- package/dist/admin/config/plugin-dev.js +1 -1
- package/dist/admin/crud/config.js +1 -1
- package/dist/admin/crud/confirm.js +1 -1
- package/dist/admin/crud/dict.js +1 -1
- package/dist/admin/crud/index.js +1 -1
- package/dist/admin/crud/key.js +1 -1
- package/dist/admin/crud/mitt.js +1 -1
- package/dist/admin/crud/plugins.js +1 -1
- package/dist/admin/crud/span.js +1 -1
- package/dist/admin/crud/style.js +1 -1
- package/dist/admin/crud/validate.js +1 -1
- package/dist/admin/directives/perm.js +1 -1
- package/dist/admin/hooks/useUpload.js +1 -1
- package/dist/admin/lib/browser.js +1 -1
- package/dist/admin/lib/cn.js +1 -1
- package/dist/admin/lib/dialog-float.js +1 -1
- package/dist/admin/lib/export-excel.js +1 -1
- package/dist/admin/lib/file-preview.js +1 -1
- package/dist/admin/lib/import-excel.js +1 -1
- package/dist/admin/lib/json.js +1 -1
- package/dist/admin/lib/menu.js +1 -1
- package/dist/admin/lib/tree.js +1 -1
- package/dist/admin/lib/upload.js +1 -1
- package/dist/admin/lib/video-frame.js +1 -1
- package/dist/index.js +1 -1
- package/dist/server/index.js +1 -1
- package/dist/shared/excel.js +1 -1
- package/dist/shared/index.js +1 -1
- package/dist/shared/tree.js +1 -1
- package/package.json +1 -1
|
@@ -1,16 +1,92 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
2
|
+
<div
|
|
3
|
+
class="vm-markdown"
|
|
4
|
+
:class="{
|
|
5
|
+
'is-shell': showShell,
|
|
6
|
+
'is-disabled': disabled,
|
|
7
|
+
}"
|
|
8
|
+
>
|
|
9
|
+
<div v-if="showTabs" class="vm-markdown__tabs" role="tablist">
|
|
10
|
+
<button
|
|
11
|
+
type="button"
|
|
12
|
+
class="vm-markdown__tab"
|
|
13
|
+
:class="{ 'is-on': tab === 'edit' }"
|
|
14
|
+
role="tab"
|
|
15
|
+
:aria-selected="tab === 'edit'"
|
|
16
|
+
@click="tab = 'edit'"
|
|
17
|
+
>
|
|
18
|
+
编辑
|
|
19
|
+
</button>
|
|
20
|
+
<button
|
|
21
|
+
type="button"
|
|
22
|
+
class="vm-markdown__tab"
|
|
23
|
+
:class="{ 'is-on': tab === 'preview' }"
|
|
24
|
+
role="tab"
|
|
25
|
+
:aria-selected="tab === 'preview'"
|
|
26
|
+
@click="tab = 'preview'"
|
|
27
|
+
>
|
|
28
|
+
预览
|
|
29
|
+
</button>
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<textarea
|
|
33
|
+
v-if="editEnabled && (!previewEnabled || tab === 'edit')"
|
|
34
|
+
ref="editorRef"
|
|
35
|
+
class="vm-markdown__editor"
|
|
36
|
+
:style="editorStyle"
|
|
37
|
+
:value="text"
|
|
38
|
+
:disabled="disabled || uploading"
|
|
39
|
+
:placeholder="placeholder"
|
|
40
|
+
@input="onInput"
|
|
41
|
+
@paste="onPaste"
|
|
42
|
+
/>
|
|
43
|
+
|
|
44
|
+
<div
|
|
45
|
+
v-if="previewEnabled && (!editEnabled || tab === 'preview')"
|
|
46
|
+
class="vm-markdown__preview"
|
|
47
|
+
:class="{ 'is-bare': !editEnabled }"
|
|
48
|
+
:style="editEnabled ? editorStyle : undefined"
|
|
49
|
+
v-html="html"
|
|
50
|
+
/>
|
|
51
|
+
|
|
52
|
+
<p v-if="uploading" class="vm-markdown__hint">图片上传中…</p>
|
|
53
|
+
</div>
|
|
3
54
|
</template>
|
|
4
55
|
|
|
5
56
|
<script setup lang="ts">
|
|
6
|
-
import { computed } from 'vue'
|
|
57
|
+
import { computed, nextTick, ref, watch } from 'vue'
|
|
7
58
|
import DOMPurify from 'dompurify'
|
|
8
59
|
import { marked } from 'marked'
|
|
9
60
|
|
|
10
61
|
defineOptions({ name: 'vm-markdown' })
|
|
11
62
|
|
|
12
|
-
const props =
|
|
13
|
-
|
|
63
|
+
const props = withDefaults(
|
|
64
|
+
defineProps<{
|
|
65
|
+
/** 只读预览源(兼容旧用法);与 v-model 二选一,优先 modelValue */
|
|
66
|
+
source?: string
|
|
67
|
+
modelValue?: string | null
|
|
68
|
+
/** 是否可编辑 Markdown 源码,默认 false */
|
|
69
|
+
edit?: boolean
|
|
70
|
+
/** 是否显示预览,默认 true */
|
|
71
|
+
preview?: boolean
|
|
72
|
+
disabled?: boolean
|
|
73
|
+
placeholder?: string
|
|
74
|
+
/** 编辑区 / 预览区最小高度 */
|
|
75
|
+
height?: number | string
|
|
76
|
+
/** 粘贴图片时上传,返回可访问 url;未传则忽略图片粘贴 */
|
|
77
|
+
uploadImage?: (file: File) => Promise<string>
|
|
78
|
+
}>(),
|
|
79
|
+
{
|
|
80
|
+
edit: false,
|
|
81
|
+
preview: true,
|
|
82
|
+
disabled: false,
|
|
83
|
+
placeholder: '支持 Markdown;可粘贴图片(需配置 uploadImage)',
|
|
84
|
+
height: 280,
|
|
85
|
+
},
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
const emit = defineEmits<{
|
|
89
|
+
'update:modelValue': [v: string]
|
|
14
90
|
}>()
|
|
15
91
|
|
|
16
92
|
marked.setOptions({
|
|
@@ -18,14 +94,97 @@ marked.setOptions({
|
|
|
18
94
|
breaks: false,
|
|
19
95
|
})
|
|
20
96
|
|
|
97
|
+
const editorRef = ref<HTMLTextAreaElement | null>(null)
|
|
98
|
+
const uploading = ref(false)
|
|
99
|
+
const tab = ref<'edit' | 'preview'>('edit')
|
|
100
|
+
|
|
101
|
+
const editEnabled = computed(() => Boolean(props.edit))
|
|
102
|
+
const previewEnabled = computed(() => {
|
|
103
|
+
// 至少保留一种能力:两者都关时按只读预览
|
|
104
|
+
if (!props.edit && !props.preview) return true
|
|
105
|
+
return Boolean(props.preview)
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
const showTabs = computed(() => editEnabled.value && previewEnabled.value)
|
|
109
|
+
const showShell = computed(() => editEnabled.value || showTabs.value)
|
|
110
|
+
|
|
111
|
+
const text = computed(() => {
|
|
112
|
+
if (props.modelValue != null) return String(props.modelValue)
|
|
113
|
+
return String(props.source ?? '')
|
|
114
|
+
})
|
|
115
|
+
|
|
21
116
|
const html = computed(() => {
|
|
22
|
-
const raw =
|
|
117
|
+
const raw = text.value
|
|
23
118
|
if (!raw.trim()) return ''
|
|
24
119
|
const parsed = marked.parse(raw, { async: false }) as string
|
|
25
120
|
return DOMPurify.sanitize(parsed, {
|
|
26
121
|
USE_PROFILES: { html: true },
|
|
27
122
|
})
|
|
28
123
|
})
|
|
124
|
+
|
|
125
|
+
const editorStyle = computed(() => ({
|
|
126
|
+
minHeight:
|
|
127
|
+
typeof props.height === 'number' ? `${props.height}px` : props.height,
|
|
128
|
+
}))
|
|
129
|
+
|
|
130
|
+
watch(
|
|
131
|
+
showTabs,
|
|
132
|
+
(both) => {
|
|
133
|
+
if (both) tab.value = 'edit'
|
|
134
|
+
},
|
|
135
|
+
{ immediate: true },
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
function onInput(e: Event) {
|
|
139
|
+
const v = (e.target as HTMLTextAreaElement).value
|
|
140
|
+
emit('update:modelValue', v)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function insertAtCursor(snippet: string) {
|
|
144
|
+
const el = editorRef.value
|
|
145
|
+
const cur = text.value
|
|
146
|
+
if (!el) {
|
|
147
|
+
emit('update:modelValue', `${cur}${snippet}`)
|
|
148
|
+
return
|
|
149
|
+
}
|
|
150
|
+
const start = el.selectionStart ?? cur.length
|
|
151
|
+
const end = el.selectionEnd ?? cur.length
|
|
152
|
+
const next = cur.slice(0, start) + snippet + cur.slice(end)
|
|
153
|
+
emit('update:modelValue', next)
|
|
154
|
+
void nextTick(() => {
|
|
155
|
+
const pos = start + snippet.length
|
|
156
|
+
el.focus()
|
|
157
|
+
el.setSelectionRange(pos, pos)
|
|
158
|
+
})
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async function onPaste(e: ClipboardEvent) {
|
|
162
|
+
if (!props.uploadImage || props.disabled || uploading.value) return
|
|
163
|
+
const items = e.clipboardData?.items
|
|
164
|
+
if (!items?.length) return
|
|
165
|
+
|
|
166
|
+
const files: File[] = []
|
|
167
|
+
for (const item of Array.from(items)) {
|
|
168
|
+
if (item.kind === 'file' && item.type.startsWith('image/')) {
|
|
169
|
+
const file = item.getAsFile()
|
|
170
|
+
if (file) files.push(file)
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (!files.length) return
|
|
174
|
+
|
|
175
|
+
e.preventDefault()
|
|
176
|
+
uploading.value = true
|
|
177
|
+
try {
|
|
178
|
+
for (const file of files) {
|
|
179
|
+
const url = await props.uploadImage(file)
|
|
180
|
+
const alt =
|
|
181
|
+
(file.name || 'image').replace(/\.[^.]+$/, '').trim() || 'image'
|
|
182
|
+
insertAtCursor(`\n\n`)
|
|
183
|
+
}
|
|
184
|
+
} finally {
|
|
185
|
+
uploading.value = false
|
|
186
|
+
}
|
|
187
|
+
}
|
|
29
188
|
</script>
|
|
30
189
|
|
|
31
190
|
<style lang="scss" scoped>
|
|
@@ -34,7 +193,82 @@ const html = computed(() => {
|
|
|
34
193
|
font-size: 14px;
|
|
35
194
|
line-height: 1.7;
|
|
36
195
|
word-break: break-word;
|
|
196
|
+
}
|
|
37
197
|
|
|
198
|
+
.vm-markdown.is-shell {
|
|
199
|
+
border: 1px solid var(--border);
|
|
200
|
+
border-radius: var(--radius, 12px);
|
|
201
|
+
overflow: hidden;
|
|
202
|
+
background: var(--card, #fff);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.vm-markdown.is-disabled {
|
|
206
|
+
opacity: 0.65;
|
|
207
|
+
pointer-events: none;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.vm-markdown__tabs {
|
|
211
|
+
display: flex;
|
|
212
|
+
border-bottom: 1px solid var(--border);
|
|
213
|
+
background: var(--muted, #f7f8fc);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.vm-markdown__tab {
|
|
217
|
+
appearance: none;
|
|
218
|
+
border: 0;
|
|
219
|
+
background: transparent;
|
|
220
|
+
padding: 10px 16px;
|
|
221
|
+
font: inherit;
|
|
222
|
+
font-size: 14px;
|
|
223
|
+
font-weight: 600;
|
|
224
|
+
color: var(--muted-foreground);
|
|
225
|
+
cursor: pointer;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.vm-markdown__tab.is-on {
|
|
229
|
+
color: var(--brand);
|
|
230
|
+
background: var(--card, #fff);
|
|
231
|
+
box-shadow: inset 0 -2px 0 var(--brand);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.vm-markdown__editor {
|
|
235
|
+
display: block;
|
|
236
|
+
width: 100%;
|
|
237
|
+
margin: 0;
|
|
238
|
+
padding: 14px 16px;
|
|
239
|
+
border: 0;
|
|
240
|
+
resize: vertical;
|
|
241
|
+
box-sizing: border-box;
|
|
242
|
+
background: color-mix(in srgb, var(--brand) 3%, var(--background, #fff));
|
|
243
|
+
color: var(--foreground);
|
|
244
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
245
|
+
font-size: 13.5px;
|
|
246
|
+
line-height: 1.6;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.vm-markdown__editor:focus {
|
|
250
|
+
outline: none;
|
|
251
|
+
background: var(--card, #fff);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.vm-markdown__preview {
|
|
255
|
+
padding: 14px 16px;
|
|
256
|
+
box-sizing: border-box;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.vm-markdown__preview.is-bare {
|
|
260
|
+
padding: 0;
|
|
261
|
+
min-height: 0;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.vm-markdown__hint {
|
|
265
|
+
margin: 0;
|
|
266
|
+
padding: 8px 16px 12px;
|
|
267
|
+
font-size: 13px;
|
|
268
|
+
color: var(--muted-foreground);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.vm-markdown__preview {
|
|
38
272
|
:deep(h1),
|
|
39
273
|
:deep(h2),
|
|
40
274
|
:deep(h3),
|
|
@@ -138,5 +372,11 @@ const html = computed(() => {
|
|
|
138
372
|
background: color-mix(in srgb, var(--foreground) 4%, var(--background));
|
|
139
373
|
font-weight: 650;
|
|
140
374
|
}
|
|
375
|
+
|
|
376
|
+
:deep(img) {
|
|
377
|
+
max-width: 100%;
|
|
378
|
+
height: auto;
|
|
379
|
+
border-radius: 8px;
|
|
380
|
+
}
|
|
141
381
|
}
|
|
142
382
|
</style>
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
class="vm-marquee"
|
|
4
|
+
:class="{ 'is-paused': hoverPaused }"
|
|
5
|
+
@mouseenter="onEnter"
|
|
6
|
+
@mouseleave="onLeave"
|
|
7
|
+
>
|
|
8
|
+
<div v-if="showIcon" class="vm-marquee__icon" aria-hidden="true">
|
|
9
|
+
<slot name="icon">
|
|
10
|
+
<VmRiIcon v-if="icon" :name="icon" />
|
|
11
|
+
</slot>
|
|
12
|
+
</div>
|
|
13
|
+
<div ref="viewportRef" class="vm-marquee__viewport">
|
|
14
|
+
<div ref="trackRef" class="vm-marquee__track">
|
|
15
|
+
{{ currentText }}
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</template>
|
|
20
|
+
|
|
21
|
+
<script setup lang="ts">
|
|
22
|
+
import {
|
|
23
|
+
computed,
|
|
24
|
+
nextTick,
|
|
25
|
+
onMounted,
|
|
26
|
+
onUnmounted,
|
|
27
|
+
ref,
|
|
28
|
+
useSlots,
|
|
29
|
+
watch,
|
|
30
|
+
} from 'vue'
|
|
31
|
+
import VmRiIcon from './vm-ri-icon.vue'
|
|
32
|
+
|
|
33
|
+
defineOptions({ name: 'vm-marquee' })
|
|
34
|
+
|
|
35
|
+
const props = withDefaults(
|
|
36
|
+
defineProps<{
|
|
37
|
+
/** 消息列表;仅 1 条时单条循环 */
|
|
38
|
+
messages?: string[]
|
|
39
|
+
/** Remix Icon 名,如 ri-notification-3-line;也可用 #icon 插槽完全自定义 */
|
|
40
|
+
icon?: string
|
|
41
|
+
/** 单条滚完后的停顿(毫秒) */
|
|
42
|
+
pause?: number
|
|
43
|
+
/** 滚动速度(px/s) */
|
|
44
|
+
speed?: number
|
|
45
|
+
/** 悬停暂停 */
|
|
46
|
+
pauseOnHover?: boolean
|
|
47
|
+
}>(),
|
|
48
|
+
{
|
|
49
|
+
messages: () => [],
|
|
50
|
+
pause: 3000,
|
|
51
|
+
speed: 60,
|
|
52
|
+
pauseOnHover: true,
|
|
53
|
+
},
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
const slots = useSlots()
|
|
57
|
+
const showIcon = computed(() => Boolean(props.icon) || Boolean(slots.icon))
|
|
58
|
+
|
|
59
|
+
const list = computed(() =>
|
|
60
|
+
(props.messages || []).map((s) => String(s ?? '').trim()).filter(Boolean),
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
const index = ref(0)
|
|
64
|
+
const currentText = computed(() => list.value[index.value] ?? '')
|
|
65
|
+
|
|
66
|
+
const viewportRef = ref<HTMLElement | null>(null)
|
|
67
|
+
const trackRef = ref<HTMLElement | null>(null)
|
|
68
|
+
const hoverPaused = ref(false)
|
|
69
|
+
|
|
70
|
+
let anim: Animation | null = null
|
|
71
|
+
let pauseTimer: ReturnType<typeof setTimeout> | null = null
|
|
72
|
+
let pauseResolve: (() => void) | null = null
|
|
73
|
+
/** 递增后旧循环全部退出,避免 messages 变更时双循环 */
|
|
74
|
+
let loopGen = 0
|
|
75
|
+
|
|
76
|
+
function clearPauseTimer() {
|
|
77
|
+
if (pauseTimer != null) {
|
|
78
|
+
clearTimeout(pauseTimer)
|
|
79
|
+
pauseTimer = null
|
|
80
|
+
}
|
|
81
|
+
if (pauseResolve) {
|
|
82
|
+
const resolve = pauseResolve
|
|
83
|
+
pauseResolve = null
|
|
84
|
+
resolve()
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function cancelAnim() {
|
|
89
|
+
anim?.cancel()
|
|
90
|
+
anim = null
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function advanceIndex() {
|
|
94
|
+
const n = list.value.length
|
|
95
|
+
if (n <= 0) {
|
|
96
|
+
index.value = 0
|
|
97
|
+
return
|
|
98
|
+
}
|
|
99
|
+
index.value = (index.value + 1) % n
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function sleep(ms: number) {
|
|
103
|
+
return new Promise<void>((resolve) => {
|
|
104
|
+
clearPauseTimer()
|
|
105
|
+
pauseResolve = resolve
|
|
106
|
+
pauseTimer = setTimeout(() => {
|
|
107
|
+
pauseTimer = null
|
|
108
|
+
pauseResolve = null
|
|
109
|
+
resolve()
|
|
110
|
+
}, ms)
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
async function waitWhileHovered(gen: number) {
|
|
115
|
+
while (hoverPaused.value && gen === loopGen) {
|
|
116
|
+
await sleep(100)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
async function runOnce(gen: number): Promise<void> {
|
|
121
|
+
const viewport = viewportRef.value
|
|
122
|
+
const track = trackRef.value
|
|
123
|
+
if (!viewport || !track || !list.value.length || gen !== loopGen) return
|
|
124
|
+
|
|
125
|
+
await nextTick()
|
|
126
|
+
if (gen !== loopGen) return
|
|
127
|
+
await nextTick()
|
|
128
|
+
if (gen !== loopGen) return
|
|
129
|
+
|
|
130
|
+
const from = viewport.clientWidth
|
|
131
|
+
const textW = Math.max(track.scrollWidth, 1)
|
|
132
|
+
const to = -textW
|
|
133
|
+
const distance = from - to
|
|
134
|
+
const duration = Math.max(
|
|
135
|
+
800,
|
|
136
|
+
Math.round((distance / Math.max(props.speed, 1)) * 1000),
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
cancelAnim()
|
|
140
|
+
// translateY(-50%) 与 top:50% 配合做垂直居中(动画不能只用 translateX)
|
|
141
|
+
const tx = (x: number) => `translateY(-50%) translateX(${x}px)`
|
|
142
|
+
track.style.transform = tx(from)
|
|
143
|
+
|
|
144
|
+
anim = track.animate(
|
|
145
|
+
[{ transform: tx(from) }, { transform: tx(to) }],
|
|
146
|
+
{
|
|
147
|
+
duration,
|
|
148
|
+
easing: 'linear',
|
|
149
|
+
fill: 'forwards',
|
|
150
|
+
},
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
if (hoverPaused.value) anim.pause()
|
|
154
|
+
|
|
155
|
+
try {
|
|
156
|
+
await anim.finished
|
|
157
|
+
} catch {
|
|
158
|
+
// cancel() 会 reject
|
|
159
|
+
} finally {
|
|
160
|
+
if (anim) anim = null
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
async function loop(gen: number) {
|
|
165
|
+
while (gen === loopGen && list.value.length) {
|
|
166
|
+
if (index.value >= list.value.length) index.value = 0
|
|
167
|
+
await runOnce(gen)
|
|
168
|
+
if (gen !== loopGen || !list.value.length) break
|
|
169
|
+
await waitWhileHovered(gen)
|
|
170
|
+
if (gen !== loopGen) break
|
|
171
|
+
await sleep(Math.max(0, props.pause))
|
|
172
|
+
if (gen !== loopGen) break
|
|
173
|
+
await waitWhileHovered(gen)
|
|
174
|
+
if (gen !== loopGen) break
|
|
175
|
+
advanceIndex()
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function restart() {
|
|
180
|
+
loopGen += 1
|
|
181
|
+
const gen = loopGen
|
|
182
|
+
clearPauseTimer()
|
|
183
|
+
cancelAnim()
|
|
184
|
+
if (index.value >= list.value.length) index.value = 0
|
|
185
|
+
if (!list.value.length) return
|
|
186
|
+
void loop(gen)
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function onEnter() {
|
|
190
|
+
if (!props.pauseOnHover) return
|
|
191
|
+
hoverPaused.value = true
|
|
192
|
+
anim?.pause()
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
function onLeave() {
|
|
196
|
+
if (!props.pauseOnHover) return
|
|
197
|
+
hoverPaused.value = false
|
|
198
|
+
anim?.play()
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
onMounted(() => {
|
|
202
|
+
restart()
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
onUnmounted(() => {
|
|
206
|
+
loopGen += 1
|
|
207
|
+
clearPauseTimer()
|
|
208
|
+
cancelAnim()
|
|
209
|
+
})
|
|
210
|
+
|
|
211
|
+
watch(
|
|
212
|
+
() => [props.messages, props.speed, props.pause] as const,
|
|
213
|
+
() => {
|
|
214
|
+
restart()
|
|
215
|
+
},
|
|
216
|
+
{ deep: true },
|
|
217
|
+
)
|
|
218
|
+
</script>
|
|
219
|
+
|
|
220
|
+
<style lang="scss" scoped>
|
|
221
|
+
.vm-marquee {
|
|
222
|
+
display: flex;
|
|
223
|
+
align-items: center;
|
|
224
|
+
gap: 8px;
|
|
225
|
+
width: 100%;
|
|
226
|
+
min-width: 0;
|
|
227
|
+
min-height: var(--vm-control-height, 32px);
|
|
228
|
+
padding: 0 10px;
|
|
229
|
+
border: 1px solid var(--border);
|
|
230
|
+
border-radius: var(--vm-control-radius, 8px);
|
|
231
|
+
background: var(--muted);
|
|
232
|
+
color: var(--foreground);
|
|
233
|
+
overflow: hidden;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.vm-marquee__icon {
|
|
237
|
+
flex-shrink: 0;
|
|
238
|
+
display: inline-flex;
|
|
239
|
+
align-items: center;
|
|
240
|
+
justify-content: center;
|
|
241
|
+
color: var(--brand, #4e5dff);
|
|
242
|
+
font-size: 16px;
|
|
243
|
+
line-height: 1;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.vm-marquee__viewport {
|
|
247
|
+
position: relative;
|
|
248
|
+
flex: 1;
|
|
249
|
+
align-self: stretch;
|
|
250
|
+
min-width: 0;
|
|
251
|
+
min-height: 0;
|
|
252
|
+
overflow: hidden;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.vm-marquee__track {
|
|
256
|
+
position: absolute;
|
|
257
|
+
top: 50%;
|
|
258
|
+
left: 0;
|
|
259
|
+
white-space: nowrap;
|
|
260
|
+
font-size: 13px;
|
|
261
|
+
line-height: 1.5;
|
|
262
|
+
transform: translateY(-50%);
|
|
263
|
+
will-change: transform;
|
|
264
|
+
}
|
|
265
|
+
</style>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const _0x1c885f=_0x22a8;(function(_0x5d8dd5,_0x4ad5c7){const _0x30a166=_0x22a8,_0x301959=_0x5d8dd5();while(!![]){try{const _0x38aca5=-parseInt(_0x30a166(0x1b3))/0x1+-parseInt(_0x30a166(0x1bf))/0x2*(parseInt(_0x30a166(0x1bc))/0x3)+-parseInt(_0x30a166(0x1b0))/0x4*(-parseInt(_0x30a166(0x1c7))/0x5)+-parseInt(_0x30a166(0x1b6))/0x6+parseInt(_0x30a166(0x1ba))/0x7+parseInt(_0x30a166(0x1ca))/0x8*(parseInt(_0x30a166(0x1bd))/0x9)+parseInt(_0x30a166(0x1c2))/0xa;if(_0x38aca5===_0x4ad5c7)break;else _0x301959['push'](_0x301959['shift']());}catch(_0x1046cf){_0x301959['push'](_0x301959['shift']());}}}(_0x3f2f,0xc2c8e));const ORG=_0x1c885f(0x1b9);function _0x22a8(_0x32f7a9,_0x4a5405){_0x32f7a9=_0x32f7a9-0x1b0;const _0x3f2fb0=_0x3f2f();let _0x22a898=_0x3f2fb0[_0x32f7a9];if(_0x22a8['HCdCqV']===undefined){var _0x45c251=function(_0x1a5b94){const _0x2bcd07='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x413de5='',_0x529a53='';for(let _0x4bd71a=0x0,_0xfb9017,_0x49f298,_0xb71880=0x0;_0x49f298=_0x1a5b94['charAt'](_0xb71880++);~_0x49f298&&(_0xfb9017=_0x4bd71a%0x4?_0xfb9017*0x40+_0x49f298:_0x49f298,_0x4bd71a++%0x4)?_0x413de5+=String['fromCharCode'](0xff&_0xfb9017>>(-0x2*_0x4bd71a&0x6)):0x0){_0x49f298=_0x2bcd07['indexOf'](_0x49f298);}for(let _0x44fdfd=0x0,_0x3cb061=_0x413de5['length'];_0x44fdfd<_0x3cb061;_0x44fdfd++){_0x529a53+='%'+('00'+_0x413de5['charCodeAt'](_0x44fdfd)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x529a53);};_0x22a8['FfafQb']=_0x45c251,_0x22a8['azdLgS']={},_0x22a8['HCdCqV']=!![];}const _0x3e52e0=_0x3f2fb0[0x0],_0x5d3dcc=_0x32f7a9+_0x3e52e0,_0x40a887=_0x22a8['azdLgS'][_0x5d3dcc];return!_0x40a887?(_0x22a898=_0x22a8['FfafQb'](_0x22a898),_0x22a8['azdLgS'][_0x5d3dcc]=_0x22a898):_0x22a898=_0x40a887,_0x22a898;}function giteeArchive(_0x413de5){const _0x390748=_0x1c885f;return'https://gitee.com/'+ORG+'/'+_0x413de5+_0x390748(0x1b8);}function _0x3f2f(){const _0xc62878=['5yMn56UVicSG5zco56UV','DM9Tzs1WBhvNAw4TzNvSBa','Ahr0Chm6lY92B21LA2OUy29T','zNvSBa','nw5IqKDoyW','Ahr0Chm6lY9NAxrODwiUy29TlW','57QV5yMn56UV','mJiXmtK5mMnxswvjqW','mtC0mdm1nMTNCvzbDa','5A6m5Pw05lIA5yQH5QIH5z2x6isA5OMl5P6277YilNzVBwxVVjRLKkSGC2vYDMvYios4JIb3zwlVViNVViZMNkZLNldLVidLJ5hMIzpLJixLKi7LJ5hLUipJGii','DM9Tzs1WBhvNAw4TC2vYDMLJzq','mtiXmZaXnxzRr2jMua','zNjVBNrLBMq','57QV5zco56UV','ntm3nZyZmKrbrMHguW','yMfJA2vUza','l3jLCg9ZAxrVCNKVyxjJAgL2zs9Tyxn0zxiUEMLW','DM9TzwTQ','mtq2mZKXCw9lsNnP','Ahr0Chm6lY9NAxrLzs5JB20V','m0zxwvHmCW','mZzwqwz4vfC','5zco5y+W5B6U5BQu55sO6isA5OMl5P6277YilNzVBwxVVjRLKkSGD2vIl++8IE+8Jos7Psb3DwPPzsdMJilOVB3NI6ZNQ4VLIy3NQ6/POBxPNAlJGii','mJKWmZm3meD2q0fttq','l2fYy2HPDMuVCMvMCY9OzwfKCY9Tyxn0zxiUEMLW','DM9Tzs1WBhvNAw4TzNjVBNq','mJC5nJGXmJb2yw9IAvq'];_0x3f2f=function(){return _0xc62878;};return _0x3f2f();}function githubArchive(_0x529a53){const _0x145eb4=_0x1c885f;return'https://github.com/'+ORG+'/'+_0x529a53+_0x145eb4(0x1c0);}function giteeRepo(_0x4bd71a){const _0x1cd599=_0x1c885f;return _0x1cd599(0x1bb)+ORG+'/'+_0x4bd71a;}function githubRepo(_0xfb9017){const _0xfbdd9=_0x1c885f;return _0xfbdd9(0x1c8)+ORG+'/'+_0xfb9017;}export const pluginDev={'docsUrl':_0x1c885f(0x1c5),'uploadUrl':'https://vomekj.com/plugins/upload','mirrors':{'prefer':'gitee','giteeOrg':'https://gitee.com/'+ORG,'githubOrg':_0x1c885f(0x1c8)+ORG},'scaffolds':{'full':{'key':_0x1c885f(0x1c6),'title':_0x1c885f(0x1c3),'desc':_0x1c885f(0x1b1),'repo':_0x1c885f(0x1c4),'repoUrl':giteeRepo(_0x1c885f(0x1c4)),'githubRepoUrl':githubRepo('vome-plugin-full'),'downloadUrl':giteeArchive(_0x1c885f(0x1c4)),'githubDownloadUrl':githubArchive('vome-plugin-full')},'backend':{'key':_0x1c885f(0x1b7),'title':_0x1c885f(0x1b5),'desc':'钩子\x20/\x20服务端插件脚手架(.vome:仅\x20server),适合上传、短信、支付等能力扩展。','repo':_0x1c885f(0x1b2),'repoUrl':giteeRepo('vome-plugin-service'),'githubRepoUrl':githubRepo(_0x1c885f(0x1b2)),'downloadUrl':giteeArchive(_0x1c885f(0x1b2)),'githubDownloadUrl':githubArchive(_0x1c885f(0x1b2))},'frontend':{'key':_0x1c885f(0x1b4),'title':_0x1c885f(0x1c9),'desc':_0x1c885f(0x1be),'repo':_0x1c885f(0x1c1),'repoUrl':giteeRepo(_0x1c885f(0x1c1)),'githubRepoUrl':githubRepo(_0x1c885f(0x1c1)),'downloadUrl':giteeArchive(_0x1c885f(0x1c1)),'githubDownloadUrl':githubArchive(_0x1c885f(0x1c1))}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x3f5d17,_0x94a45f){const _0x5002b3=_0x23d6,_0x559661=_0x3f5d17();while(!![]){try{const _0x127ccf=parseInt(_0x5002b3(0x172))/0x1+-parseInt(_0x5002b3(0x17b))/0x2+-parseInt(_0x5002b3(0x171))/0x3+-parseInt(_0x5002b3(0x16e))/0x4*(-parseInt(_0x5002b3(0x174))/0x5)+parseInt(_0x5002b3(0x175))/0x6*(parseInt(_0x5002b3(0x178))/0x7)+parseInt(_0x5002b3(0x16f))/0x8*(-parseInt(_0x5002b3(0x170))/0x9)+-parseInt(_0x5002b3(0x17d))/0xa*(parseInt(_0x5002b3(0x179))/0xb);if(_0x127ccf===_0x94a45f)break;else _0x559661['push'](_0x559661['shift']());}catch(_0x1c570c){_0x559661['push'](_0x559661['shift']());}}}(_0x1922,0x4550d));import{getCrudConfig}from'./style';import{CRUD_LABELS,DEFAULT_CRUD_DICT}from'./dict';export{CRUD_LABELS,DEFAULT_CRUD_DICT};function _0x23d6(_0xbff50b,_0x559266){_0xbff50b=_0xbff50b-0x16e;const _0x1922d4=_0x1922();let _0x23d63c=_0x1922d4[_0xbff50b];if(_0x23d6['ldNTLV']===undefined){var _0x46bab5=function(_0x4df46c){const _0x50763e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x444839='',_0x448afd='';for(let _0x52dae8=0x0,_0x79caa7,_0x137f05,_0x4b9f48=0x0;_0x137f05=_0x4df46c['charAt'](_0x4b9f48++);~_0x137f05&&(_0x79caa7=_0x52dae8%0x4?_0x79caa7*0x40+_0x137f05:_0x137f05,_0x52dae8++%0x4)?_0x444839+=String['fromCharCode'](0xff&_0x79caa7>>(-0x2*_0x52dae8&0x6)):0x0){_0x137f05=_0x50763e['indexOf'](_0x137f05);}for(let _0x2e08cf=0x0,_0xbbd4cf=_0x444839['length'];_0x2e08cf<_0xbbd4cf;_0x2e08cf++){_0x448afd+='%'+('00'+_0x444839['charCodeAt'](_0x2e08cf)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x448afd);};_0x23d6['gOEPwb']=_0x46bab5,_0x23d6['vMVmQK']={},_0x23d6['ldNTLV']=!![];}const _0x5706cb=_0x1922d4[0x0],_0x3c6c9a=_0xbff50b+_0x5706cb,_0x11a46d=_0x23d6['vMVmQK'][_0x3c6c9a];return!_0x11a46d?(_0x23d63c=_0x23d6['gOEPwb'](_0x23d63c),_0x23d6['vMVmQK'][_0x3c6c9a]=_0x23d63c):_0x23d63c=_0x11a46d,_0x23d63c;}export const DEFAULT_CRUD_PERMISSION={'page':!![],'list':!![],'info':!![],'add':!![],'delete':!![],'update':!![]};export function mergeDict(_0x444839){const _0x53d2ce=_0x23d6,_0x448afd=getCrudConfig()['dict'];if(!_0x444839)return{..._0x448afd,'label':{..._0x448afd['label']}};return{..._0x448afd,..._0x444839,'api':{..._0x448afd[_0x53d2ce(0x176)],..._0x444839['api']},'pagination':{..._0x448afd[_0x53d2ce(0x173)],..._0x444839['pagination']},'search':{..._0x448afd['search'],..._0x444839[_0x53d2ce(0x17a)]},'sort':{..._0x448afd[_0x53d2ce(0x17c)],..._0x444839['sort']},'label':{..._0x448afd['label'],..._0x444839[_0x53d2ce(0x177)]}};}export function mergePermission(_0x52dae8,_0x79caa7){return{...DEFAULT_CRUD_PERMISSION,..._0x79caa7,..._0x52dae8};}function _0x1922(){const _0x511e55=['mtyZnZKXmwryA29vzW','C2vHCMnO','mZKZotH2DxLIrLe','C29YDa','mtbpAff4DKS','mJC5nMHXtLLzwa','nZKYmteYt1PIDgPg','ndvoqNvfBeu','mti4ndqXmxPWvgzuAq','mZmYnJC4CgXpBgrU','CgfNAw5HDgLVBG','mZC2meHXrNn5tG','mJq0ndrerhzVvfC','yxbP','BgfIzwW','odG5EMPQuKz5'];_0x1922=function(){return _0x511e55;};return _0x1922();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
const _0x31747c=_0x1a57;function _0x12a1(){const _0xeccc21=['CMvTB3zL','cI52Bs1JB25MAxjTw2rHDgeTC2XVDd0NzgLHBg9NlwnVBNrLBNqNxsb7cIaGD2LKDgG6ig1PBIG0mdbWEcWGy2fSyYGXmdb2DYaTidmYChGPksaHAw1WB3j0yw50oWOGig1HEc13Awr0AdOGBwLUkdqWmhb4lcbJywXJkdeWmhz3ic0GmZjWEcKPicfPBxbVCNrHBNq7cIaGz2fWoIaWicfPBxbVCNrHBNq7cIaGCgfKzgLUzZOGmcaHAw1WB3j0yw50oWOGigjVCMrLCJOGBM9UzsaHAw1WB3j0yw50oWOGigjVCMrLCI1YywrPDxm6idi0ChGGiwLTCg9YDgfUDdSkicbIB3GTC2HHzg93oIb2yxiOls1ZAgfKB3CTC29MDcKGiwLTCg9YDgfUDdSkFqOUDM0Ty29UzMLYBv9FAgvHzcb7ihbHzgrPBMC6ide4ChGGmJjWEcaWoYbIB3jKzxiTyM90Dg9ToIbUB25LoYb9cI52Bs1JB25MAxjTx190AxrSzsb7igzVBNqTC2L6ztOGmtzWEdSGzM9UDc13zwLNAhq6idy1mdSGFqOUDM0Ty29UzMLYBv9FyM9KEsb7cIaGCgfKzgLUzZOGmtjWEcaYmNb4idHWEdSkicbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7cIaGzM9UDc1ZAxPLoIaXnhb4oWOGigXPBMuTAgvPz2H0oIaXlJy7cN0klNzTlwnVBMzPCM1Fx2zVB3qGEWOGigrPC3bSyxK6igzSzxG7cIaGANvZDgLMEs1JB250zw50oIbMBgv4lwvUzdSkicbNyxa6idHWEdSkicbWywrKAw5NoIaXnhb4idiYChG7cN0klNzTlwnVBMzPCM1Fx2j0BIb7cIaGAgvPz2H0oIaZnNb4oWOGihbHzgrPBMC6idaGmtzWEdSkicbIB3jKzxi6ig5VBMu7cIaGyM9YzgvYlxjHzgL1CZOGmtjWEdSkicbMB250lxnPEMu6ideZChG7cIaGzM9UDc13zwLNAhq6idyWmdSkicbJDxjZB3i6ihbVAw50zxi7cN0klNzTlwnVBMzPCM1Fx2j0BI5PCY1WCMLTyxj5ihSGyMfJA2DYB3vUzdOGDMfYkc0TyNjHBMqPoYbJB2XVCJOGi2zMzJSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlxbYAw1HCNK6Ag92zxiGEYbIywnRz3jVDw5KoIb2yxiOls1ICMfUzc1KzwvWktSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlwDOB3n0ihSGyMfJA2DYB3vUzdOGDMfYkc0TBxv0zwqPoYbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7ih0k','nZyYm3Hbvw9Wva','y3jLyxrLrwXLBwvUDa','DgL0Bgu','mJC4mZbizwvkwhi','z2v0rwXLBwvUDej5swq','C3r5Bgu','Dw5TB3vUDa','C3rYAw5N','BwvZC2fNzq','DM0Ty29UzMLYBv9FDgL0Bgu','odeYmZKYv3nXsLfg','odq4nJDAsuLZChC','y2fUy2vSvgv4Da','yxbWzw5Kq2HPBgq','y29UzMLYBvrLEhq','DM0Ty29UzMLYBv9FyNrUigLZlxbYAw1HCNK','DM0Ty29UzMLYBv9FyM9KEq','DM0Ty29UzMLYBv9FyNrUigLZlwDOB3n0','DM0Ty29UzMLYBq','nZzyCKLJvgy','ndmZntiXme9jq0nVBa','mtzIrKDWugu','m1jktvLWuG','AgvHza','mJuXodGXnuHkveDwCW','DM0Ty29UzMLYBv9FAgvHza','mJy0mZe4wxfiAM9f','DM0Ty29UzMLYBv9FzM9VDa','DMfSDwu','DM0Ty29UzMLYBs1ZDhLSzq','zgL2','Bw91BNq','yNv0Dg9U','Dgv4DenVBNrLBNq','mJGYmZe0nffztMPSEq','Dw5KzwzPBMvK'];_0x12a1=function(){return _0xeccc21;};return _0x12a1();}(function(_0x13c698,_0x2470ce){const _0x5bd21a=_0x1a57,_0x694a23=_0x13c698();while(!![]){try{const _0x4fa223=-parseInt(_0x5bd21a(0x1d8))/0x1*(parseInt(_0x5bd21a(0x1dc))/0x2)+parseInt(_0x5bd21a(0x1cd))/0x3*(-parseInt(_0x5bd21a(0x1d5))/0x4)+-parseInt(_0x5bd21a(0x1da))/0x5+-parseInt(_0x5bd21a(0x1be))/0x6+parseInt(_0x5bd21a(0x1cc))/0x7*(-parseInt(_0x5bd21a(0x1d7))/0x8)+parseInt(_0x5bd21a(0x1d6))/0x9+parseInt(_0x5bd21a(0x1c5))/0xa*(parseInt(_0x5bd21a(0x1c2))/0xb);if(_0x4fa223===_0x2470ce)break;else _0x694a23['push'](_0x694a23['shift']());}catch(_0x1adbb0){_0x694a23['push'](_0x694a23['shift']());}}}(_0x12a1,0x41e76));import{createApp,h,ref}from'vue';function _0x1a57(_0x11ab0a,_0x34c734){_0x11ab0a=_0x11ab0a-0x1b9;const _0x12a12e=_0x12a1();let _0x1a576f=_0x12a12e[_0x11ab0a];if(_0x1a57['yDphQm']===undefined){var _0x2935bf=function(_0xd45ac2){const _0x409f04='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x16e423='',_0x4ac662='';for(let _0x2a8774=0x0,_0x59fb03,_0x4e544a,_0x2485e8=0x0;_0x4e544a=_0xd45ac2['charAt'](_0x2485e8++);~_0x4e544a&&(_0x59fb03=_0x2a8774%0x4?_0x59fb03*0x40+_0x4e544a:_0x4e544a,_0x2a8774++%0x4)?_0x16e423+=String['fromCharCode'](0xff&_0x59fb03>>(-0x2*_0x2a8774&0x6)):0x0){_0x4e544a=_0x409f04['indexOf'](_0x4e544a);}for(let _0x432812=0x0,_0x273beb=_0x16e423['length'];_0x432812<_0x273beb;_0x432812++){_0x4ac662+='%'+('00'+_0x16e423['charCodeAt'](_0x432812)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4ac662);};_0x1a57['QXLywK']=_0x2935bf,_0x1a57['xBglWx']={},_0x1a57['yDphQm']=!![];}const _0x21438d=_0x12a12e[0x0],_0x11b365=_0x11ab0a+_0x21438d,_0x4b6378=_0x1a57['xBglWx'][_0x11b365];return!_0x4b6378?(_0x1a576f=_0x1a57['QXLywK'](_0x1a576f),_0x1a57['xBglWx'][_0x11b365]=_0x1a576f):_0x1a576f=_0x4b6378,_0x1a576f;}import{Dialog,DialogContent,DialogFooter,DialogHeader,DialogTitle}from'#vome-host/components/ui/dialog';export function vmConfirm(_0x16e423){const _0xb500ed=_0x1a57,_0x4ac662=typeof _0x16e423===_0xb500ed(0x1c9)?{'message':_0x16e423}:_0x16e423;return new Promise(_0x2a8774=>{const _0x5ecb8d=_0xb500ed,_0x59fb03=ref(!![]),_0x4e544a=document[_0x5ecb8d(0x1c3)](_0x5ecb8d(0x1ba));document['body'][_0x5ecb8d(0x1cf)](_0x4e544a);const _0x2485e8=createApp({'setup'(){const _0x13f8ea=_0x5ecb8d;function _0x432812(_0x273beb){const _0x373d11=_0x1a57;_0x59fb03[_0x373d11(0x1de)]=![],_0x2a8774(_0x273beb),setTimeout(()=>{const _0x5eb7fe=_0x373d11;_0x2485e8[_0x5eb7fe(0x1c8)](),_0x4e544a[_0x5eb7fe(0x1c0)]();},0xc8);}return()=>h(Dialog,{'open':_0x59fb03['value'],'onUpdate:open':_0x4fccc1=>{if(!_0x4fccc1)_0x432812(![]);}},{'default':()=>h(DialogContent,{'class':_0x13f8ea(0x1d4),'showCloseButton':![]},{'default':()=>[h(DialogHeader,{'class':_0x13f8ea(0x1db)},()=>h(DialogTitle,{'class':_0x13f8ea(0x1cb)},()=>_0x4ac662[_0x13f8ea(0x1c4)]||'提示')),h(_0x13f8ea(0x1ba),{'class':_0x13f8ea(0x1d2)},_0x4ac662[_0x13f8ea(0x1ca)]),h(DialogFooter,{'class':_0x13f8ea(0x1dd)},()=>[h(_0x13f8ea(0x1bc),{'type':_0x13f8ea(0x1bc),'class':_0x13f8ea(0x1d3),'onClick':()=>_0x432812(![])},_0x4ac662[_0x13f8ea(0x1ce)]||'取消'),h(_0x13f8ea(0x1bc),{'type':'button','class':_0x13f8ea(0x1d1),'onClick':()=>_0x432812(!![])},_0x4ac662[_0x13f8ea(0x1d0)]||'确定')])]})});}});_0x2485e8[_0x5ecb8d(0x1bb)](_0x4e544a);});}if(typeof document!==_0x31747c(0x1bf)&&!document[_0x31747c(0x1c6)](_0x31747c(0x1b9))){const style=document['createElement'](_0x31747c(0x1c7));style['id']='vm-confirm-style',style[_0x31747c(0x1bd)]=_0x31747c(0x1c1),document[_0x31747c(0x1d9)][_0x31747c(0x1cf)](style);}
|
package/dist/admin/crud/dict.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
function _0x48fb(_0x4ee715,_0x833acc){_0x4ee715=_0x4ee715-0xc9;const _0x8ccfbf=_0x8ccf();let _0x48fbeb=_0x8ccfbf[_0x4ee715];if(_0x48fb['aYoZSY']===undefined){var _0x505d92=function(_0x30645b){const _0x1074a9='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x30eaf5='',_0x4d9953='';for(let _0x21fe77=0x0,_0x386496,_0x5822a8,_0x5186ad=0x0;_0x5822a8=_0x30645b['charAt'](_0x5186ad++);~_0x5822a8&&(_0x386496=_0x21fe77%0x4?_0x386496*0x40+_0x5822a8:_0x5822a8,_0x21fe77++%0x4)?_0x30eaf5+=String['fromCharCode'](0xff&_0x386496>>(-0x2*_0x21fe77&0x6)):0x0){_0x5822a8=_0x1074a9['indexOf'](_0x5822a8);}for(let _0xec8aac=0x0,_0xa8b967=_0x30eaf5['length'];_0xec8aac<_0xa8b967;_0xec8aac++){_0x4d9953+='%'+('00'+_0x30eaf5['charCodeAt'](_0xec8aac)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4d9953);};_0x48fb['RDheVT']=_0x505d92,_0x48fb['vrjqkX']={},_0x48fb['aYoZSY']=!![];}const _0x34bb87=_0x8ccfbf[0x0],_0x314891=_0x4ee715+_0x34bb87,_0x513bce=_0x48fb['vrjqkX'][_0x314891];return!_0x513bce?(_0x48fbeb=_0x48fb['RDheVT'](_0x48fbeb),_0x48fb['vrjqkX'][_0x314891]=_0x48fbeb):_0x48fbeb=_0x513bce,_0x48fbeb;}const _0x14ef45=_0x48fb;function _0x8ccf(){const _0x43cca0=['5P+L55Yl5PU05AsA','6zQq6jEp5yAf5A65','B3jKzxi','5PcC57sI5ywZ6zsU5A2x','C29YDa','otLJzxrnEuu','zgvSzxrL','odG5mtCWug92BgvI','A2v5v29Yza','CgfNzq','mJi3nJrMueHty2y','odaYnZe2ognetNDIDG','DxbKyxrL','neHqB0fvvq','mtC1oeziA2Xurq','mJu2mZiWCuvcD1Pb','mtz0B3feEMi','5yIG6zMK5OIq5yQF','5y+w5RAi6ycj5OUP','nJK3nJqXm0vNzuXfBW','nZa0nJiXCePluM1s','6k+36l6t5ywL','BgLZDa','ndGZote1wwn0CfjT'];_0x8ccf=function(){return _0x43cca0;};return _0x8ccf();}(function(_0x1636f9,_0xafef29){const _0x3a8a33=_0x48fb,_0x142ffe=_0x1636f9();while(!![]){try{const _0x1bddd7=parseInt(_0x3a8a33(0xc9))/0x1+-parseInt(_0x3a8a33(0xda))/0x2*(parseInt(_0x3a8a33(0xcc))/0x3)+-parseInt(_0x3a8a33(0xdd))/0x4*(-parseInt(_0x3a8a33(0xdc))/0x5)+parseInt(_0x3a8a33(0xdb))/0x6*(parseInt(_0x3a8a33(0xd7))/0x7)+-parseInt(_0x3a8a33(0xd8))/0x8+-parseInt(_0x3a8a33(0xe0))/0x9+parseInt(_0x3a8a33(0xd4))/0xa*(parseInt(_0x3a8a33(0xd2))/0xb);if(_0x1bddd7===_0xafef29)break;else _0x142ffe['push'](_0x142ffe['shift']());}catch(_0x3f21c5){_0x142ffe['push'](_0x142ffe['shift']());}}}(_0x8ccf,0x891c3));export const CRUD_LABELS={'op':'操作','add':'新增','delete':'删除','multiDelete':'删除','export':'导出','import':'导入','update':'编辑','refresh':'刷新','info':'详情','search':'搜索','reset':'重置','clear':'清空','save':'保存','close':'取消','confirm':'确定','advSearch':'高级搜索','searchKey':_0x14ef45(0xd0),'placeholder':_0x14ef45(0xca),'tips':'提示','saveSuccess':'保存成功','deleteSuccess':_0x14ef45(0xde),'deleteConfirm':'此操作将数据标记为已删除,是否继续?','forceDeleteConfirm':'此操作将永久删除选中数据,是否继续?','empty':'暂无数据','desc':'降序','asc':'升序','select':'选择','deselect':_0x14ef45(0xdf),'seeMore':_0x14ef45(0xcd),'hideContent':_0x14ef45(0xce),'nonEmpty':'不能为空'};export const DEFAULT_CRUD_DICT={'primaryId':'id','api':{'list':_0x14ef45(0xcb),'add':'add','update':_0x14ef45(0xd9),'delete':_0x14ef45(0xd3),'info':'info','page':_0x14ef45(0xd6)},'pagination':{'page':_0x14ef45(0xd6),'size':'size'},'search':{'keyWord':_0x14ef45(0xd5),'query':'query'},'sort':{'prop':_0x14ef45(0xcf),'order':_0x14ef45(0xd1)},'label':CRUD_LABELS};
|