vome-core 0.1.96 → 0.1.97
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/ui/avatar/index.js +1 -1
- package/dist/admin/components/ui/checkbox/index.js +1 -1
- package/dist/admin/components/ui/dialog/index.js +1 -1
- package/dist/admin/components/ui/dropdown-menu/index.js +1 -1
- package/dist/admin/components/ui/input/index.js +1 -1
- package/dist/admin/components/ui/label/index.js +1 -1
- package/dist/admin/components/ui/scroll-area/index.js +1 -1
- package/dist/admin/components/ui/select/index.js +1 -1
- package/dist/admin/components/ui/separator/index.js +1 -1
- package/dist/admin/components/ui/sheet/index.js +1 -1
- package/dist/admin/components/ui/sonner/index.js +1 -1
- package/dist/admin/components/ui/table/index.js +1 -1
- package/dist/admin/components/ui/tabs/index.js +1 -1
- package/dist/admin/components/ui/tooltip/index.js +1 -1
- package/dist/admin/crud/components/vm-richtext-extensions.js +1 -1
- package/dist/admin/crud/config.js +1 -1
- package/dist/admin/crud/confirm.js +1 -1
- package/dist/admin/crud/crud-page-request.js +1 -1
- package/dist/admin/crud/data-i18n.d.ts +16 -6
- package/dist/admin/crud/data-i18n.js +1 -1
- package/dist/admin/crud/dict.js +1 -1
- package/dist/admin/crud/export-fetch.js +1 -1
- package/dist/admin/crud/key.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/crud/vm-crud.vue +45 -9
- package/dist/admin/crud/vm-data-i18n-btn.vue +45 -22
- package/dist/admin/crud/vm-data-i18n-lang.vue +147 -44
- package/dist/admin/crud/vm-table.vue +108 -27
- package/dist/admin/crud/vm-toolbar.vue +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/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/micro-locale.js +1 -1
- package/dist/admin/lib/micro-theme.js +1 -1
- package/dist/admin/lib/setup-crud-defaults.js +1 -1
- package/dist/admin/lib/shell.js +1 -1
- package/dist/admin/lib/theme-color-options.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/admin/router/create.js +1 -1
- package/dist/admin/router/guards.js +1 -1
- package/dist/admin/themes/dark.js +1 -1
- package/dist/admin/themes/index.js +1 -1
- package/dist/admin/themes/light.js +1 -1
- package/dist/index.js +1 -1
- package/dist/server/index.js +1 -1
- package/dist/shared/datetime-picker.js +1 -1
- package/dist/shared/excel.js +1 -1
- package/dist/shared/index.js +1 -1
- package/dist/shared/locale-json.js +1 -1
- package/dist/shared/tree.js +1 -1
- package/dist/typings/routing/eps.d.ts +2 -0
- package/package.json +1 -1
- package/typings/admin/comm/crud.ts +4 -0
- package/typings/admin/comm/eps.ts +2 -0
- package/typings/routing/eps.ts +2 -0
|
@@ -1,40 +1,84 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
<
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
2
|
+
<div v-if="targetLangs.length" class="vm-data-i18n-lang">
|
|
3
|
+
<DropdownMenu :modal="false">
|
|
4
|
+
<DropdownMenuTrigger as-child>
|
|
5
|
+
<button
|
|
6
|
+
type="button"
|
|
7
|
+
class="vm-crud-toolbar__btn is-ghost vm-data-i18n-lang__btn"
|
|
8
|
+
:disabled="switching"
|
|
9
|
+
:title="
|
|
10
|
+
crudFormat(
|
|
11
|
+
crudLabel('dataI18nTargetLang', crud.dict.label),
|
|
12
|
+
targetCurrent?.name || targetCode,
|
|
13
|
+
)
|
|
14
|
+
"
|
|
15
|
+
>
|
|
16
|
+
<span class="vm-data-i18n-lang__flag" aria-hidden="true">
|
|
17
|
+
{{ targetCurrent?.flag || '🏳️' }}
|
|
18
|
+
</span>
|
|
19
|
+
{{ crudLabel('dataI18nSwitch', crud.dict.label) }}
|
|
20
|
+
</button>
|
|
21
|
+
</DropdownMenuTrigger>
|
|
22
|
+
<DropdownMenuContent align="start" class="vm-data-i18n-lang__menu">
|
|
23
|
+
<DropdownMenuItem
|
|
24
|
+
v-for="lang in targetLangs"
|
|
25
|
+
:key="lang.value"
|
|
26
|
+
class="vm-data-i18n-lang__item"
|
|
27
|
+
:class="{ 'is-active': targetCode === lang.value }"
|
|
28
|
+
:disabled="switching"
|
|
29
|
+
@click="switchTarget(lang.value)"
|
|
30
|
+
>
|
|
31
|
+
<span class="vm-data-i18n-lang__flag" aria-hidden="true">
|
|
32
|
+
{{ lang.flag || '🏳️' }}
|
|
33
|
+
</span>
|
|
34
|
+
<span class="vm-data-i18n-lang__label">{{ lang.name || lang.label }}</span>
|
|
35
|
+
</DropdownMenuItem>
|
|
36
|
+
</DropdownMenuContent>
|
|
37
|
+
</DropdownMenu>
|
|
38
|
+
|
|
39
|
+
<DropdownMenu :modal="false">
|
|
40
|
+
<DropdownMenuTrigger as-child>
|
|
41
|
+
<button
|
|
42
|
+
type="button"
|
|
43
|
+
class="vm-crud-toolbar__btn is-ghost vm-data-i18n-lang__btn"
|
|
44
|
+
:disabled="switching"
|
|
45
|
+
:title="
|
|
46
|
+
crudFormat(
|
|
47
|
+
crudLabel('dataI18nSourceLang', crud.dict.label),
|
|
48
|
+
sourceCurrent?.name || sourceCode,
|
|
49
|
+
)
|
|
50
|
+
"
|
|
51
|
+
>
|
|
52
|
+
<span class="vm-data-i18n-lang__flag" aria-hidden="true">
|
|
53
|
+
{{ sourceCurrent?.flag || '🇨🇳' }}
|
|
54
|
+
</span>
|
|
55
|
+
{{ crudLabel('dataI18nSource', crud.dict.label) }}
|
|
56
|
+
</button>
|
|
57
|
+
</DropdownMenuTrigger>
|
|
58
|
+
<DropdownMenuContent align="start" class="vm-data-i18n-lang__menu">
|
|
59
|
+
<DropdownMenuItem
|
|
60
|
+
v-for="lang in sourceLangs"
|
|
61
|
+
:key="lang.value"
|
|
62
|
+
class="vm-data-i18n-lang__item"
|
|
63
|
+
:class="{ 'is-active': sourceCode === lang.value }"
|
|
64
|
+
:disabled="switching"
|
|
65
|
+
@click="switchSource(lang.value)"
|
|
66
|
+
>
|
|
67
|
+
<span class="vm-data-i18n-lang__flag" aria-hidden="true">
|
|
68
|
+
{{ lang.flag || '🏳️' }}
|
|
69
|
+
</span>
|
|
70
|
+
<span class="vm-data-i18n-lang__label">{{ lang.name || lang.label }}</span>
|
|
71
|
+
</DropdownMenuItem>
|
|
72
|
+
</DropdownMenuContent>
|
|
73
|
+
</DropdownMenu>
|
|
74
|
+
</div>
|
|
32
75
|
</template>
|
|
33
76
|
|
|
34
77
|
<script setup lang="ts">
|
|
35
78
|
import { computed, onMounted, ref, watch } from 'vue'
|
|
36
79
|
import { useVome } from '../hooks/useVome'
|
|
37
80
|
import { useCrud } from './useCrud'
|
|
81
|
+
import { crudFormat, crudLabel } from './style'
|
|
38
82
|
import {
|
|
39
83
|
DropdownMenu,
|
|
40
84
|
DropdownMenuContent,
|
|
@@ -50,15 +94,49 @@ const { service } = useVome()
|
|
|
50
94
|
const langs = ref<DataI18nLangOption[]>([])
|
|
51
95
|
const switching = ref(false)
|
|
52
96
|
|
|
53
|
-
const
|
|
97
|
+
const targetCode = computed({
|
|
54
98
|
get: () => crud.dataI18nLangCode?.value || '',
|
|
55
99
|
set: (v: string) => {
|
|
56
100
|
if (crud.dataI18nLangCode) crud.dataI18nLangCode.value = v
|
|
57
101
|
},
|
|
58
102
|
})
|
|
59
103
|
|
|
60
|
-
const
|
|
61
|
-
|
|
104
|
+
const sourceCode = computed({
|
|
105
|
+
get: () => crud.dataI18nSourceLangCode?.value || 'zh-CN',
|
|
106
|
+
set: (v: string) => {
|
|
107
|
+
if (crud.dataI18nSourceLangCode) crud.dataI18nSourceLangCode.value = v
|
|
108
|
+
},
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
const targetLangs = computed(() =>
|
|
112
|
+
langs.value.filter((l) => l.value !== 'zh-CN'),
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
const sourceLangs = computed(() => {
|
|
116
|
+
const zhName = crudLabel('dataI18nZh', crud.dict.label)
|
|
117
|
+
const zh: DataI18nLangOption = {
|
|
118
|
+
label: `${zhName} (zh-CN)`,
|
|
119
|
+
value: 'zh-CN',
|
|
120
|
+
name: zhName,
|
|
121
|
+
flag: '🇨🇳',
|
|
122
|
+
}
|
|
123
|
+
// 对照可选中文 + 其它语种(不含当前目标,避免无意义对照)
|
|
124
|
+
const rest = langs.value.filter(
|
|
125
|
+
(l) => l.value !== 'zh-CN' && l.value !== targetCode.value,
|
|
126
|
+
)
|
|
127
|
+
return [zh, ...rest]
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
const targetCurrent = computed(
|
|
131
|
+
() =>
|
|
132
|
+
targetLangs.value.find((l) => l.value === targetCode.value) ||
|
|
133
|
+
targetLangs.value[0],
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
const sourceCurrent = computed(
|
|
137
|
+
() =>
|
|
138
|
+
sourceLangs.value.find((l) => l.value === sourceCode.value) ||
|
|
139
|
+
sourceLangs.value[0],
|
|
62
140
|
)
|
|
63
141
|
|
|
64
142
|
async function loadLangs() {
|
|
@@ -66,7 +144,7 @@ async function loadLangs() {
|
|
|
66
144
|
.i18n?.lang
|
|
67
145
|
if (!langSvc?.list) {
|
|
68
146
|
langs.value = [{ label: 'en-US', value: 'en-US', name: 'en-US', flag: '🇺🇸' }]
|
|
69
|
-
|
|
147
|
+
ensureLangs()
|
|
70
148
|
return
|
|
71
149
|
}
|
|
72
150
|
try {
|
|
@@ -76,34 +154,53 @@ async function loadLangs() {
|
|
|
76
154
|
flag?: string
|
|
77
155
|
}>
|
|
78
156
|
langs.value = (rows || [])
|
|
79
|
-
.filter((r) => r.code
|
|
157
|
+
.filter((r) => r.code)
|
|
80
158
|
.map((r) => ({
|
|
81
159
|
label: `${r.name || r.code} (${r.code})`,
|
|
82
160
|
value: String(r.code),
|
|
83
161
|
name: String(r.name || r.code),
|
|
84
|
-
flag: r.flag || '🏳️',
|
|
162
|
+
flag: r.flag || (r.code === 'zh-CN' ? '🇨🇳' : '🏳️'),
|
|
85
163
|
}))
|
|
86
164
|
} catch {
|
|
87
165
|
langs.value = [{ label: 'en-US', value: 'en-US', name: 'en-US', flag: '🇺🇸' }]
|
|
88
166
|
}
|
|
89
|
-
|
|
167
|
+
ensureLangs()
|
|
90
168
|
if (crud.trashMode.value === 'dataI18n') {
|
|
91
169
|
await crud.refresh()
|
|
92
170
|
}
|
|
93
171
|
}
|
|
94
172
|
|
|
95
|
-
function
|
|
96
|
-
if (!
|
|
97
|
-
if (
|
|
98
|
-
|
|
173
|
+
function ensureLangs() {
|
|
174
|
+
if (!targetLangs.value.length) return
|
|
175
|
+
if (
|
|
176
|
+
!targetCode.value ||
|
|
177
|
+
!targetLangs.value.some((o) => o.value === targetCode.value)
|
|
178
|
+
) {
|
|
179
|
+
targetCode.value = targetLangs.value[0]!.value
|
|
180
|
+
}
|
|
181
|
+
if (!sourceCode.value) sourceCode.value = 'zh-CN'
|
|
182
|
+
if (sourceCode.value === targetCode.value) sourceCode.value = 'zh-CN'
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
async function switchTarget(code: string) {
|
|
186
|
+
if (switching.value || !code || code === targetCode.value) return
|
|
187
|
+
switching.value = true
|
|
188
|
+
try {
|
|
189
|
+
targetCode.value = code
|
|
190
|
+
if (sourceCode.value === code) sourceCode.value = 'zh-CN'
|
|
191
|
+
crud.pagination.value = { ...crud.pagination.value, page: 1 }
|
|
192
|
+
await crud.refresh()
|
|
193
|
+
} finally {
|
|
194
|
+
switching.value = false
|
|
99
195
|
}
|
|
100
196
|
}
|
|
101
197
|
|
|
102
|
-
async function
|
|
103
|
-
if (switching.value || !code || code ===
|
|
198
|
+
async function switchSource(code: string) {
|
|
199
|
+
if (switching.value || !code || code === sourceCode.value) return
|
|
200
|
+
if (code === targetCode.value) return
|
|
104
201
|
switching.value = true
|
|
105
202
|
try {
|
|
106
|
-
|
|
203
|
+
sourceCode.value = code
|
|
107
204
|
crud.pagination.value = { ...crud.pagination.value, page: 1 }
|
|
108
205
|
await crud.refresh()
|
|
109
206
|
} finally {
|
|
@@ -124,6 +221,12 @@ onMounted(() => {
|
|
|
124
221
|
</script>
|
|
125
222
|
|
|
126
223
|
<style lang="scss" scoped>
|
|
224
|
+
.vm-data-i18n-lang {
|
|
225
|
+
display: inline-flex;
|
|
226
|
+
align-items: center;
|
|
227
|
+
gap: 8px;
|
|
228
|
+
}
|
|
229
|
+
|
|
127
230
|
.vm-crud-toolbar__btn {
|
|
128
231
|
display: inline-flex;
|
|
129
232
|
height: 36px;
|
|
@@ -277,7 +277,9 @@
|
|
|
277
277
|
@interact-outside="preventDialogOutsideClose"
|
|
278
278
|
>
|
|
279
279
|
<DialogHeader class="vm-crud-shell__head">
|
|
280
|
-
<DialogTitle class="vm-crud-shell__title"
|
|
280
|
+
<DialogTitle class="vm-crud-shell__title">
|
|
281
|
+
{{ crudLabel('dataI18nEdit', crud.dict.label) }}
|
|
282
|
+
</DialogTitle>
|
|
281
283
|
<DialogClose class="vm-crud-shell__close">
|
|
282
284
|
<i class="ri-close-line" />
|
|
283
285
|
<span class="sr-only">Close</span>
|
|
@@ -296,17 +298,27 @@
|
|
|
296
298
|
/>
|
|
297
299
|
</div>
|
|
298
300
|
<div
|
|
301
|
+
v-for="f in dataI18nEditFields"
|
|
302
|
+
:key="f.name"
|
|
299
303
|
class="vm-data-i18n-edit__field"
|
|
300
304
|
:style="{ gridColumn: `span ${dataI18nEditSpan}` }"
|
|
301
305
|
>
|
|
302
|
-
<Label class="vm-data-i18n-edit__label">
|
|
303
|
-
value
|
|
304
|
-
<span class="vm-data-i18n-edit__req">*</span>
|
|
305
|
-
</Label>
|
|
306
|
+
<Label class="vm-data-i18n-edit__label">{{ f.label || f.name }}</Label>
|
|
306
307
|
<Input
|
|
307
308
|
class="vm-data-i18n-edit__control"
|
|
308
|
-
v-model="dataI18nEditForm.
|
|
309
|
+
v-model="dataI18nEditForm.values[f.name]"
|
|
309
310
|
/>
|
|
311
|
+
<div
|
|
312
|
+
v-if="dataI18nEditForm.sources[f.name]"
|
|
313
|
+
class="vm-data-i18n-edit__source"
|
|
314
|
+
>
|
|
315
|
+
{{
|
|
316
|
+
crudFormat(
|
|
317
|
+
crudLabel('dataI18nCompare', crud.dict.label),
|
|
318
|
+
dataI18nEditForm.sources[f.name],
|
|
319
|
+
)
|
|
320
|
+
}}
|
|
321
|
+
</div>
|
|
310
322
|
</div>
|
|
311
323
|
</div>
|
|
312
324
|
<DialogFooter class="vm-crud-shell__foot">
|
|
@@ -316,7 +328,7 @@
|
|
|
316
328
|
:disabled="dataI18nEditSubmitting"
|
|
317
329
|
@click="dataI18nEditOpen = false"
|
|
318
330
|
>
|
|
319
|
-
|
|
331
|
+
{{ crudLabel('close', crud.dict.label) }}
|
|
320
332
|
</button>
|
|
321
333
|
<button
|
|
322
334
|
type="button"
|
|
@@ -324,7 +336,11 @@
|
|
|
324
336
|
:disabled="dataI18nEditSubmitting"
|
|
325
337
|
@click="saveDataI18nEdit"
|
|
326
338
|
>
|
|
327
|
-
{{
|
|
339
|
+
{{
|
|
340
|
+
dataI18nEditSubmitting
|
|
341
|
+
? crudLabel('saving', crud.dict.label)
|
|
342
|
+
: crudLabel('save', crud.dict.label)
|
|
343
|
+
}}
|
|
328
344
|
</button>
|
|
329
345
|
</DialogFooter>
|
|
330
346
|
</DialogContent>
|
|
@@ -339,7 +355,7 @@ import { useCrud } from './useCrud'
|
|
|
339
355
|
import { injectTableOptions, TABLE_API_KEY } from './key'
|
|
340
356
|
import { flattenTree } from '../lib/tree'
|
|
341
357
|
import { resolveCrudComponent } from './registry'
|
|
342
|
-
import { getCrudStyle, crudLabel, crudT, crudLocaleRev } from './style'
|
|
358
|
+
import { getCrudStyle, crudLabel, crudT, crudFormat, crudLocaleRev } from './style'
|
|
343
359
|
import { findEpsEntity } from '../lib/eps'
|
|
344
360
|
import { useVome } from '../hooks/useVome'
|
|
345
361
|
import { vmConfirm } from './confirm'
|
|
@@ -391,17 +407,56 @@ let emptyRo: ResizeObserver | null = null
|
|
|
391
407
|
|
|
392
408
|
const overrideColumns = ref<CrudColumn[] | null>(null)
|
|
393
409
|
|
|
394
|
-
const
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
410
|
+
const DATA_I18N_ID_COL: CrudColumn = {
|
|
411
|
+
prop: 'id',
|
|
412
|
+
label: 'ID',
|
|
413
|
+
minWidth: 100,
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
const DATA_I18N_OP_COL: CrudColumn = {
|
|
417
|
+
type: 'op',
|
|
418
|
+
buttons: ['edit', 'delete'],
|
|
419
|
+
width: 140,
|
|
420
|
+
}
|
|
400
421
|
|
|
401
422
|
const isDataI18nView = computed(() => crud.trashMode.value === 'dataI18n')
|
|
402
423
|
|
|
403
|
-
|
|
404
|
-
|
|
424
|
+
/** 语言 Tab:按表头/当前页内容估 minWidth(限幅) */
|
|
425
|
+
function dataI18nColMinWidth(header: string, samples: string[]) {
|
|
426
|
+
let maxChars = [...header].length
|
|
427
|
+
for (const s of samples) {
|
|
428
|
+
const n = [...String(s || '')].length
|
|
429
|
+
if (n > maxChars) maxChars = n
|
|
430
|
+
}
|
|
431
|
+
return Math.min(360, Math.max(108, maxChars * 14 + 28))
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
const columns = computed((): CrudColumn[] => {
|
|
435
|
+
if (isDataI18nView.value) {
|
|
436
|
+
void crudLocaleRev.value
|
|
437
|
+
const fields = crud.dataI18nFields?.value || []
|
|
438
|
+
const rows = crud.list.value || []
|
|
439
|
+
const origSuffix = crudLabel('dataI18nOrigSuffix', crud.dict.label)
|
|
440
|
+
const fieldCols: CrudColumn[] = []
|
|
441
|
+
for (const f of fields) {
|
|
442
|
+
const base = f.label || f.name
|
|
443
|
+
const srcProp = `__src_${f.name}`
|
|
444
|
+
const srcHeader = `${base}${origSuffix}`
|
|
445
|
+
const srcSamples = rows.map((r) => String(r[srcProp] ?? ''))
|
|
446
|
+
const valSamples = rows.map((r) => String(r[f.name] ?? ''))
|
|
447
|
+
fieldCols.push({
|
|
448
|
+
prop: srcProp,
|
|
449
|
+
label: srcHeader,
|
|
450
|
+
minWidth: dataI18nColMinWidth(srcHeader, srcSamples),
|
|
451
|
+
})
|
|
452
|
+
fieldCols.push({
|
|
453
|
+
prop: f.name,
|
|
454
|
+
label: base,
|
|
455
|
+
minWidth: dataI18nColMinWidth(base, valSamples),
|
|
456
|
+
})
|
|
457
|
+
}
|
|
458
|
+
return [DATA_I18N_ID_COL, ...fieldCols, DATA_I18N_OP_COL]
|
|
459
|
+
}
|
|
405
460
|
const raw =
|
|
406
461
|
overrideColumns.value ||
|
|
407
462
|
(props.columns?.length ? props.columns : tableOpts?.columns || [])
|
|
@@ -724,21 +779,36 @@ function deleteRowTargets(row: Record<string, unknown>) {
|
|
|
724
779
|
const { service: hostService } = useVome()
|
|
725
780
|
const dataI18nEditOpen = ref(false)
|
|
726
781
|
const dataI18nEditSubmitting = ref(false)
|
|
727
|
-
const dataI18nEditForm = ref
|
|
782
|
+
const dataI18nEditForm = ref<{
|
|
783
|
+
id: string
|
|
784
|
+
values: Record<string, string>
|
|
785
|
+
sources: Record<string, string>
|
|
786
|
+
}>({ id: '', values: {}, sources: {} })
|
|
728
787
|
const dataI18nEditFormCols = useFormCols()
|
|
729
788
|
const dataI18nEditSpan = computed(() =>
|
|
730
789
|
resolveFormSpan(12, dataI18nEditFormCols.value),
|
|
731
790
|
)
|
|
791
|
+
const dataI18nEditFields = computed(
|
|
792
|
+
() => crud.dataI18nFields?.value || [],
|
|
793
|
+
)
|
|
732
794
|
|
|
733
795
|
function onDataI18nEditOpenChange(v: boolean) {
|
|
734
796
|
dataI18nEditOpen.value = v
|
|
735
797
|
}
|
|
736
798
|
|
|
737
799
|
function openDataI18nEdit(row: Record<string, unknown>) {
|
|
800
|
+
const fields = crud.dataI18nFields?.value || []
|
|
801
|
+
const sources = (row.__sources as Record<string, string>) || {}
|
|
802
|
+
const values: Record<string, string> = {}
|
|
803
|
+
const src: Record<string, string> = {}
|
|
804
|
+
for (const f of fields) {
|
|
805
|
+
values[f.name] = String(row[f.name] ?? '')
|
|
806
|
+
src[f.name] = String(sources[f.name] ?? '')
|
|
807
|
+
}
|
|
738
808
|
dataI18nEditForm.value = {
|
|
739
809
|
id: String(row.id ?? ''),
|
|
740
|
-
|
|
741
|
-
|
|
810
|
+
values,
|
|
811
|
+
sources: src,
|
|
742
812
|
}
|
|
743
813
|
dataI18nEditOpen.value = true
|
|
744
814
|
}
|
|
@@ -749,7 +819,7 @@ async function saveDataI18nEdit() {
|
|
|
749
819
|
const dataPack = dataPackFromService(hostService)
|
|
750
820
|
const lang = crud.dataI18nLangCode?.value
|
|
751
821
|
if (!meta.ok || !dataPack?.updateEntry || !lang) {
|
|
752
|
-
toast.error('
|
|
822
|
+
toast.error(crudLabel('dataI18nNoService', crud.dict.label))
|
|
753
823
|
return
|
|
754
824
|
}
|
|
755
825
|
dataI18nEditSubmitting.value = true
|
|
@@ -758,8 +828,7 @@ async function saveDataI18nEdit() {
|
|
|
758
828
|
tableName: meta.tableName,
|
|
759
829
|
langCode: lang,
|
|
760
830
|
id: dataI18nEditForm.value.id,
|
|
761
|
-
|
|
762
|
-
value: dataI18nEditForm.value.value,
|
|
831
|
+
values: { ...dataI18nEditForm.value.values },
|
|
763
832
|
})
|
|
764
833
|
toast.success(crudLabel('saveSuccess', crud.dict.label))
|
|
765
834
|
dataI18nEditOpen.value = false
|
|
@@ -776,12 +845,17 @@ async function deleteDataI18nEntry(row: Record<string, unknown>) {
|
|
|
776
845
|
const dataPack = dataPackFromService(hostService)
|
|
777
846
|
const lang = crud.dataI18nLangCode?.value
|
|
778
847
|
if (!meta.ok || !dataPack?.deleteEntry || !lang) {
|
|
779
|
-
toast.error('
|
|
848
|
+
toast.error(crudLabel('dataI18nNoService', crud.dict.label))
|
|
780
849
|
return
|
|
781
850
|
}
|
|
851
|
+
const id = String(row.id ?? '')
|
|
852
|
+
if (!id) return
|
|
782
853
|
const ok = await vmConfirm({
|
|
783
854
|
title: crudLabel('tips', crud.dict.label),
|
|
784
|
-
message:
|
|
855
|
+
message: crudFormat(
|
|
856
|
+
crudLabel('dataI18nDeleteConfirm', crud.dict.label),
|
|
857
|
+
id,
|
|
858
|
+
),
|
|
785
859
|
confirmText: crudLabel('confirm', crud.dict.label),
|
|
786
860
|
cancelText: crudLabel('close', crud.dict.label),
|
|
787
861
|
})
|
|
@@ -790,8 +864,7 @@ async function deleteDataI18nEntry(row: Record<string, unknown>) {
|
|
|
790
864
|
await dataPack.deleteEntry({
|
|
791
865
|
tableName: meta.tableName,
|
|
792
866
|
langCode: lang,
|
|
793
|
-
id
|
|
794
|
-
key: String(row.key ?? ''),
|
|
867
|
+
id,
|
|
795
868
|
})
|
|
796
869
|
toast.success(crudLabel('deleteSuccess', crud.dict.label))
|
|
797
870
|
await crud.refresh()
|
|
@@ -1283,4 +1356,12 @@ defineExpose({
|
|
|
1283
1356
|
cursor: default;
|
|
1284
1357
|
}
|
|
1285
1358
|
}
|
|
1359
|
+
|
|
1360
|
+
.vm-data-i18n-edit__source {
|
|
1361
|
+
margin-top: 6px;
|
|
1362
|
+
font-size: 12px;
|
|
1363
|
+
line-height: 1.4;
|
|
1364
|
+
color: var(--muted-foreground);
|
|
1365
|
+
word-break: break-word;
|
|
1366
|
+
}
|
|
1286
1367
|
</style>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function _0x23e4(_0x705e2d,_0x3e63f3){_0x705e2d=_0x705e2d-0x1b0;const _0x2061b8=_0x2061();let _0x23e463=_0x2061b8[_0x705e2d];if(_0x23e4['ZRwQtg']===undefined){var _0x1e4002=function(_0x3829f5){const _0x45f1b5='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1337b2='',_0x3c9699='';for(let _0x137756=0x0,_0x515cba,_0x27a7d3,_0x2a35fe=0x0;_0x27a7d3=_0x3829f5['charAt'](_0x2a35fe++);~_0x27a7d3&&(_0x515cba=_0x137756%0x4?_0x515cba*0x40+_0x27a7d3:_0x27a7d3,_0x137756++%0x4)?_0x1337b2+=String['fromCharCode'](0xff&_0x515cba>>(-0x2*_0x137756&0x6)):0x0){_0x27a7d3=_0x45f1b5['indexOf'](_0x27a7d3);}for(let _0x7f3fc0=0x0,_0x4dad38=_0x1337b2['length'];_0x7f3fc0<_0x4dad38;_0x7f3fc0++){_0x3c9699+='%'+('00'+_0x1337b2['charCodeAt'](_0x7f3fc0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3c9699);};_0x23e4['nxiNpy']=_0x1e4002,_0x23e4['dfJtSS']={},_0x23e4['ZRwQtg']=!![];}const _0x2b7ef4=_0x2061b8[0x0],_0x3b98c5=_0x705e2d+_0x2b7ef4,_0x437fb7=_0x23e4['dfJtSS'][_0x3b98c5];return!_0x437fb7?(_0x23e463=_0x23e4['nxiNpy'](_0x23e463),_0x23e4['dfJtSS'][_0x3b98c5]=_0x23e463):_0x23e463=_0x437fb7,_0x23e463;}(function(_0x1be7c2,_0x5b11d7){const _0x14b644=_0x23e4,_0xc674d3=_0x1be7c2();while(!![]){try{const _0x343e88=parseInt(_0x14b644(0x1bf))/0x1*(parseInt(_0x14b644(0x1b1))/0x2)+-parseInt(_0x14b644(0x1b2))/0x3*(-parseInt(_0x14b644(0x1b9))/0x4)+parseInt(_0x14b644(0x1be))/0x5*(-parseInt(_0x14b644(0x1bc))/0x6)+-parseInt(_0x14b644(0x1b6))/0x7*(-parseInt(_0x14b644(0x1b7))/0x8)+parseInt(_0x14b644(0x1b4))/0x9+parseInt(_0x14b644(0x1ba))/0xa+parseInt(_0x14b644(0x1bd))/0xb*(-parseInt(_0x14b644(0x1b5))/0xc);if(_0x343e88===_0x5b11d7)break;else _0xc674d3['push'](_0xc674d3['shift']());}catch(_0x39e770){_0xc674d3['push'](_0xc674d3['shift']());}}}(_0x2061,0x7c16d));import{useUserStore}from'../stores/user';function _0x2061(){const _0x5cc93c=['BM9Uzq','neLRChj2AW','mJG3nZiXmfvntgrOCW','zgLZCgXHEq','mtjtAgHMwvi','ntvfEvv0qK4','mta5mJy2me9ks1LdEq','mw53vhPZsq','DMfSDwu','mtq0mZqWnM1uqvPpyq','ntK4mJGXyKrhsvbw','C3r5Bgu','nJq2mJm2mgLOwNDdrG','ndy3nde1nKzwBhj2zW','ndLWCKTfr0m','mteWndaWofzmDfHLsW'];_0x2061=function(){return _0x5cc93c;};return _0x2061();}export const vPerm={'mounted'(_0x1337b2,_0x3c9699){apply(_0x1337b2,_0x3c9699['value']);},'updated'(_0x137756,_0x515cba){const _0x42c8b3=_0x23e4;apply(_0x137756,_0x515cba[_0x42c8b3(0x1b0)]);}};function apply(_0x27a7d3,_0x2a35fe){const _0x54f078=_0x23e4,_0x7f3fc0=useUserStore(),_0x4dad38=_0x7f3fc0['hasPerm'](_0x2a35fe);_0x27a7d3[_0x54f078(0x1b3)][_0x54f078(0x1bb)]=_0x4dad38?'':_0x54f078(0x1b8);}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function _0x3586(_0xacac3e,_0x27e15e){_0xacac3e=_0xacac3e-0x1b8;const _0x56a344=_0x56a3();let _0x358657=_0x56a344[_0xacac3e];if(_0x3586['BdGFRo']===undefined){var _0x1133af=function(_0x1f2d9d){const _0x10e624='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x8a7c0a='',_0x23c34c='';for(let _0x305738=0x0,_0x348dca,_0x1a6383,_0x55ee13=0x0;_0x1a6383=_0x1f2d9d['charAt'](_0x55ee13++);~_0x1a6383&&(_0x348dca=_0x305738%0x4?_0x348dca*0x40+_0x1a6383:_0x1a6383,_0x305738++%0x4)?_0x8a7c0a+=String['fromCharCode'](0xff&_0x348dca>>(-0x2*_0x305738&0x6)):0x0){_0x1a6383=_0x10e624['indexOf'](_0x1a6383);}for(let _0x5404ee=0x0,_0x3a752b=_0x8a7c0a['length'];_0x5404ee<_0x3a752b;_0x5404ee++){_0x23c34c+='%'+('00'+_0x8a7c0a['charCodeAt'](_0x5404ee)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x23c34c);};_0x3586['OjQRgB']=_0x1133af,_0x3586['jMmkpS']={},_0x3586['BdGFRo']=!![];}const _0xa2069a=_0x56a344[0x0],_0x10cbde=_0xacac3e+_0xa2069a,_0xa424a8=_0x3586['jMmkpS'][_0x10cbde];return!_0xa424a8?(_0x358657=_0x3586['OjQRgB'](_0x358657),_0x3586['jMmkpS'][_0x10cbde]=_0x358657):_0x358657=_0xa424a8,_0x358657;}function _0x56a3(){const _0x326520=['ChvIBgLJrg9TywLU','zMXVB3i','B25LCNjVCG','B3bLBG','C3rHDhvZ','mZiYotiZnNvTrwvMuG','Ag9ZDa','B25SB2fK','nhPdtg9Tsq','mta5nZC0mNjJv2Lrsa','DxbSB2fKvxjS','BwLU','ChjLDMLLD1vYBa','mZe5ovjRr0zgqq','BgvUz3rOq29TChv0ywjSzq','mti5otmZnuj6C3bcuG','Bg9HzgvK','mtq5nZbkt1nzqK0','DxbSB2fK','AgfZ','DxjS','yxbWzw5K','zw50CMLLCW','C2XPy2u','5lIk5lYG5zYW5z2a5PEG5Pwi','otyXnte0C1rOAKjl','ue9tva','C2vUza','zxjYB3i','5lIk5lYG572r57UC6zsz6k+V','5lIk5lYG5AsX6lsLicG','mtm2odbWBM5msMq','CMvZCg9UC2vuzxH0','mZKZmZzYsurIy2e','Dg90ywW','zMLSzq','BMfTzq','ChjLDMLLDW','C3rYAw5NAwz5','mZG3uK5QENLR'];_0x56a3=function(){return _0x326520;};return _0x56a3();}const _0x9d04b3=_0x3586;(function(_0x2bf960,_0x194d38){const _0x47a774=_0x3586,_0x59d33b=_0x2bf960();while(!![]){try{const _0x246a25=-parseInt(_0x47a774(0x1d7))/0x1+-parseInt(_0x47a774(0x1cf))/0x2+parseInt(_0x47a774(0x1bf))/0x3+parseInt(_0x47a774(0x1be))/0x4*(parseInt(_0x47a774(0x1c5))/0x5)+-parseInt(_0x47a774(0x1bb))/0x6+-parseInt(_0x47a774(0x1c3))/0x7*(-parseInt(_0x47a774(0x1d5))/0x8)+parseInt(_0x47a774(0x1dd))/0x9*(parseInt(_0x47a774(0x1c7))/0xa);if(_0x246a25===_0x194d38)break;else _0x59d33b['push'](_0x59d33b['shift']());}catch(_0x41f955){_0x59d33b['push'](_0x59d33b['shift']());}}}(_0x56a3,0x64e8b));import{toast}from'vue-sonner';import{request}from'../api/client';import{extname,filename,pathJoin,uploadUid}from'../lib/upload';const UPLOAD_PATH='/admin/base/comm/upload',SIGN_SKIP=new Set([_0x9d04b3(0x1ca),_0x9d04b3(0x1bc),_0x9d04b3(0x1c0),_0x9d04b3(0x1de),_0x9d04b3(0x1c2),_0x9d04b3(0x1db)]);export function useUpload(){async function _0x8a7c0a(_0x23c34c,_0x305738={}){const _0x1c3772=_0x3586,{prefixPath:prefixPath='app/public',onProgress:_0x348dca}=_0x305738,_0x1a6383=uploadUid(),_0x55ee13=extname(_0x23c34c['name']),_0x5404ee=filename(_0x23c34c[_0x1c3772(0x1da)])+'_'+_0x1a6383+(_0x55ee13?'.'+_0x55ee13:''),_0x3a752b=pathJoin(prefixPath,_0x5404ee),_0x7738c8=await request(UPLOAD_PATH,{'method':_0x1c3772(0x1d0),'body':JSON[_0x1c3772(0x1dc)]({})}),_0x471223=String(_0x7738c8[_0x1c3772(0x1bc)]||_0x7738c8[_0x1c3772(0x1ca)]||_0x7738c8[_0x1c3772(0x1c0)]||'');if(!_0x471223)throw new Error(_0x1c3772(0x1ce));const _0x309c48=new FormData();_0x309c48['append']('key',_0x3a752b);for(const [_0x305a93,_0xf90694]of Object[_0x1c3772(0x1cc)](_0x7738c8)){if(SIGN_SKIP['has'](_0x305a93)||_0xf90694==null||_0x309c48[_0x1c3772(0x1c9)](_0x305a93))continue;_0x309c48[_0x1c3772(0x1cb)](_0x305a93,String(_0xf90694));}_0x309c48['append'](_0x1c3772(0x1d9),_0x23c34c),await xhrUpload(_0x471223,_0x309c48,_0x348dca);const _0x26beaa=String(_0x7738c8[_0x1c3772(0x1de)]||_0x7738c8[_0x1c3772(0x1c2)]||_0x471223);return{'url':pathJoin(_0x26beaa,_0x3a752b),'key':_0x3a752b,'fileId':_0x1a6383};}return{'toUpload':_0x8a7c0a};}function xhrUpload(_0xe1fee7,_0x2ee45b,_0x3bd2ee){return new Promise((_0x280fd8,_0x483b73)=>{const _0x32ba38=_0x3586,_0x5d1f73=new XMLHttpRequest();_0x5d1f73[_0x32ba38(0x1b9)](_0x32ba38(0x1d0),_0xe1fee7),_0x5d1f73[_0x32ba38(0x1c8)]['onprogress']=_0x180458=>{const _0x31a824=_0x32ba38;if(!_0x180458[_0x31a824(0x1c4)])return;_0x3bd2ee?.(Math[_0x31a824(0x1c1)](0x64,Math[_0x31a824(0x1df)](_0x180458[_0x31a824(0x1c6)]/_0x180458[_0x31a824(0x1d8)]*0x64)));},_0x5d1f73[_0x32ba38(0x1bd)]=()=>{const _0x56ee38=_0x32ba38;if(_0x5d1f73[_0x56ee38(0x1ba)]<0xc8||_0x5d1f73['status']>=0x12c){const _0xe5d614=_0x5d1f73[_0x56ee38(0x1d6)]||_0x56ee38(0x1d4)+_0x5d1f73['status']+')';toast[_0x56ee38(0x1d2)](_0xe5d614[_0x56ee38(0x1cd)](0x0,0xc8)),_0x483b73(new Error(_0xe5d614));return;}_0x3bd2ee?.(0x64),_0x280fd8();},_0x5d1f73[_0x32ba38(0x1b8)]=()=>_0x483b73(new Error(_0x32ba38(0x1d3))),_0x5d1f73[_0x32ba38(0x1d1)](_0x2ee45b);});}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const _0x3bdf5f=_0x3617;function _0x3617(_0xae8247,_0x40acad){_0xae8247=_0xae8247-0x187;const _0xd414be=_0xd414();let _0x36178d=_0xd414be[_0xae8247];if(_0x3617['nMNmrQ']===undefined){var _0x2fcac9=function(_0x45ffbf){const _0x41ad9e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x25e174='',_0x1cfe50='';for(let _0xc49b0c=0x0,_0x2c3218,_0x3d459a,_0x5a2093=0x0;_0x3d459a=_0x45ffbf['charAt'](_0x5a2093++);~_0x3d459a&&(_0x2c3218=_0xc49b0c%0x4?_0x2c3218*0x40+_0x3d459a:_0x3d459a,_0xc49b0c++%0x4)?_0x25e174+=String['fromCharCode'](0xff&_0x2c3218>>(-0x2*_0xc49b0c&0x6)):0x0){_0x3d459a=_0x41ad9e['indexOf'](_0x3d459a);}for(let _0x2df612=0x0,_0x1a92bf=_0x25e174['length'];_0x2df612<_0x1a92bf;_0x2df612++){_0x1cfe50+='%'+('00'+_0x25e174['charCodeAt'](_0x2df612)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1cfe50);};_0x3617['RaNdSN']=_0x2fcac9,_0x3617['iQsxRv']={},_0x3617['nMNmrQ']=!![];}const _0x2417c4=_0xd414be[0x0],_0x120841=_0xae8247+_0x2417c4,_0x547b4d=_0x3617['iQsxRv'][_0x120841];return!_0x547b4d?(_0x36178d=_0x3617['RaNdSN'](_0x36178d),_0x3617['iQsxRv'][_0x120841]=_0x36178d):_0x36178d=_0x547b4d,_0x36178d;}(function(_0x2a077e,_0x49fdfa){const _0x2fc4fb=_0x3617,_0x24376e=_0x2a077e();while(!![]){try{const _0x4413ba=parseInt(_0x2fc4fb(0x188))/0x1*(-parseInt(_0x2fc4fb(0x193))/0x2)+parseInt(_0x2fc4fb(0x18f))/0x3*(parseInt(_0x2fc4fb(0x195))/0x4)+parseInt(_0x2fc4fb(0x196))/0x5*(parseInt(_0x2fc4fb(0x18d))/0x6)+parseInt(_0x2fc4fb(0x191))/0x7*(parseInt(_0x2fc4fb(0x194))/0x8)+parseInt(_0x2fc4fb(0x197))/0x9+parseInt(_0x2fc4fb(0x189))/0xa*(parseInt(_0x2fc4fb(0x190))/0xb)+parseInt(_0x2fc4fb(0x199))/0xc*(-parseInt(_0x2fc4fb(0x18e))/0xd);if(_0x4413ba===_0x49fdfa)break;else _0x24376e['push'](_0x24376e['shift']());}catch(_0x312fab){_0x24376e['push'](_0x24376e['shift']());}}}(_0xd414,0x824c2));function _0xd414(){const _0x14a4b1=['mtCXntqYvMHnufb6','B3rOzxi','mLvkvfznyG','mJrqvw1xA2C','ndKXntzKq25mC3q','odvMwxvcELi','oteZodq1nKj5rhPpDG','BxnPzq','otzNEMrZBvO','zg9JDw1LBNrfBgvTzw50','ndCYnZeXu0PctvHb','nJbmsuLWs1C','Bwf0y2G','zNvSBa','Dw5KzwzPBMvK','mta1mJqWrwfUrNjZ','mJG2otyZm1n2vejXtW','mta1CMzkEuDw','mtC1mta5mgfIufzrra'];_0xd414=function(){return _0x14a4b1;};return _0xd414();}const SSR_FALLBACK={'height':0x0,'width':0x780,'type':_0x3bdf5f(0x192),'screen':_0x3bdf5f(0x18b),'isMini':![]};export function getBrowser(){const _0x4193ae=_0x3bdf5f;if(typeof document===_0x4193ae(0x18c)||typeof navigator===_0x4193ae(0x18c))return{...SSR_FALLBACK};const {clientHeight:_0x25e174,clientWidth:_0x1cfe50}=document[_0x4193ae(0x187)],_0xc49b0c=navigator['userAgent']['toLowerCase']();let _0x2c3218=(_0xc49b0c[_0x4193ae(0x18a)](/firefox|chrome|safari|opera/g)||[_0x4193ae(0x192)])[0x0];if((_0xc49b0c[_0x4193ae(0x18a)](/msie|trident/g)||[])[0x0])_0x2c3218=_0x4193ae(0x198);let _0x3d459a=_0x4193ae(0x18b);if(_0x1cfe50<0x300)_0x3d459a='xs';else{if(_0x1cfe50<0x3e0)_0x3d459a='sm';else{if(_0x1cfe50<0x4b0)_0x3d459a='md';else{if(_0x1cfe50<0x780)_0x3d459a='xl';}}}const _0x5a2093=!/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i['test'](_0xc49b0c);return{'height':_0x25e174,'width':_0x1cfe50,'type':_0x2c3218,'screen':_0x3d459a,'isMini':_0x3d459a==='xs'||!_0x5a2093};}
|
package/dist/admin/lib/cn.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function _0x22ad(_0xf2b626,_0x1a797a){_0xf2b626=_0xf2b626-0x16f;var _0x5dcc56=_0x5dcc();var _0x22add7=_0x5dcc56[_0xf2b626];if(_0x22ad['ZyLomf']===undefined){var _0x1d33da=function(_0x1c8c57){var _0x46f02c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x322e4b='',_0x10a83f='';for(var _0xd9898a=0x0,_0x2165cf,_0x431ba0,_0x148003=0x0;_0x431ba0=_0x1c8c57['charAt'](_0x148003++);~_0x431ba0&&(_0x2165cf=_0xd9898a%0x4?_0x2165cf*0x40+_0x431ba0:_0x431ba0,_0xd9898a++%0x4)?_0x322e4b+=String['fromCharCode'](0xff&_0x2165cf>>(-0x2*_0xd9898a&0x6)):0x0){_0x431ba0=_0x46f02c['indexOf'](_0x431ba0);}for(var _0x471029=0x0,_0x4e1454=_0x322e4b['length'];_0x471029<_0x4e1454;_0x471029++){_0x10a83f+='%'+('00'+_0x322e4b['charCodeAt'](_0x471029)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x10a83f);};_0x22ad['ShRPVN']=_0x1d33da,_0x22ad['fUbMdc']={},_0x22ad['ZyLomf']=!![];}var _0x26cdb0=_0x5dcc56[0x0],_0x156a8c=_0xf2b626+_0x26cdb0,_0x3fdc57=_0x22ad['fUbMdc'][_0x156a8c];return!_0x3fdc57?(_0x22add7=_0x22ad['ShRPVN'](_0x22add7),_0x22ad['fUbMdc'][_0x156a8c]=_0x22add7):_0x22add7=_0x3fdc57,_0x22add7;}(function(_0x51c895,_0x2568ae){var _0x52b80a=_0x22ad,_0x42d742=_0x51c895();while(!![]){try{var _0xa5c573=-parseInt(_0x52b80a(0x170))/0x1*(parseInt(_0x52b80a(0x172))/0x2)+parseInt(_0x52b80a(0x177))/0x3*(-parseInt(_0x52b80a(0x175))/0x4)+-parseInt(_0x52b80a(0x178))/0x5+-parseInt(_0x52b80a(0x176))/0x6*(parseInt(_0x52b80a(0x16f))/0x7)+parseInt(_0x52b80a(0x174))/0x8+-parseInt(_0x52b80a(0x173))/0x9*(-parseInt(_0x52b80a(0x179))/0xa)+parseInt(_0x52b80a(0x171))/0xb;if(_0xa5c573===_0x2568ae)break;else _0x42d742['push'](_0x42d742['shift']());}catch(_0x41895e){_0x42d742['push'](_0x42d742['shift']());}}}(_0x5dcc,0x3ec63));import{clsx}from'clsx';function _0x5dcc(){var _0x4923b6=['mtbjCMvewLC','mtrmB1bstNO','mZy3nZa3re5Osgng','mta1nZu2odziCvPQvxq','mLbOvuzNzG','mJK1mda2nw1dzvfwBG','mJaXnJG4meXRDg94DG','mtiZmZa4wLfZBM1V','odC5nZmYsfHmyxbI','mtv4uuHxDfK','mJm0ntu2mfDPv0TVEa'];_0x5dcc=function(){return _0x4923b6;};return _0x5dcc();}import{twMerge}from'tailwind-merge';export function cn(..._0x322e4b){return twMerge(clsx(_0x322e4b));}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
function _0x1fc7(_0x3e9b8f,_0xdf9dc2){_0x3e9b8f=_0x3e9b8f-0xa6;const _0x15dec6=_0x15de();let _0x1fc78a=_0x15dec6[_0x3e9b8f];if(_0x1fc7['krlhzb']===undefined){var _0x22dd1a=function(_0x2e0f54){const _0xf16ec1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3b3ecc='',_0x285f9d='';for(let _0x198fa6=0x0,_0x22c474,_0x36b756,_0x423341=0x0;_0x36b756=_0x2e0f54['charAt'](_0x423341++);~_0x36b756&&(_0x22c474=_0x198fa6%0x4?_0x22c474*0x40+_0x36b756:_0x36b756,_0x198fa6++%0x4)?_0x3b3ecc+=String['fromCharCode'](0xff&_0x22c474>>(-0x2*_0x198fa6&0x6)):0x0){_0x36b756=_0xf16ec1['indexOf'](_0x36b756);}for(let _0x49b5ee=0x0,_0x4d5df4=_0x3b3ecc['length'];_0x49b5ee<_0x4d5df4;_0x49b5ee++){_0x285f9d+='%'+('00'+_0x3b3ecc['charCodeAt'](_0x49b5ee)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x285f9d);};_0x1fc7['XHoFjE']=_0x22dd1a,_0x1fc7['BrCVVX']={},_0x1fc7['krlhzb']=!![];}const _0x2cb5cf=_0x15dec6[0x0],_0x211384=_0x3e9b8f+_0x2cb5cf,_0x31c6d1=_0x1fc7['BrCVVX'][_0x211384];return!_0x31c6d1?(_0x1fc78a=_0x1fc7['XHoFjE'](_0x1fc78a),_0x1fc7['BrCVVX'][_0x211384]=_0x1fc78a):_0x1fc78a=_0x31c6d1,_0x1fc78a;}(function(_0x2611cc,_0x23cdf8){const _0x2dbf2d=_0x1fc7,_0x299e4b=_0x2611cc();while(!![]){try{const _0x37fd2e=parseInt(_0x2dbf2d(0xae))/0x1+parseInt(_0x2dbf2d(0xb4))/0x2+parseInt(_0x2dbf2d(0xa8))/0x3*(-parseInt(_0x2dbf2d(0xb3))/0x4)+parseInt(_0x2dbf2d(0xaa))/0x5*(-parseInt(_0x2dbf2d(0xb5))/0x6)+-parseInt(_0x2dbf2d(0xb0))/0x7+-parseInt(_0x2dbf2d(0xb2))/0x8*(parseInt(_0x2dbf2d(0xa6))/0x9)+-parseInt(_0x2dbf2d(0xaf))/0xa*(-parseInt(_0x2dbf2d(0xac))/0xb);if(_0x37fd2e===_0x23cdf8)break;else _0x299e4b['push'](_0x299e4b['shift']());}catch(_0x9fa263){_0x299e4b['push'](_0x299e4b['shift']());}}}(_0x15de,0xb0eec));export const DIALOG_FLOAT_CLASS='vm-dialog-float';export const POPUP_TRIGGER_GAP=0x2;export function isDialogFloatTarget(_0x3b3ecc){const _0x36ed87=_0x1fc7,_0x285f9d=_0x3b3ecc[_0x36ed87(0xab)],_0x198fa6=_0x285f9d?.[_0x36ed87(0xa9)]?.[_0x36ed87(0xad)]??_0x3b3ecc[_0x36ed87(0xad)];if(!_0x198fa6)return![];const _0x22c474=_0x198fa6 instanceof Element?_0x198fa6:_0x198fa6['parentElement'];return Boolean(_0x22c474?.[_0x36ed87(0xb1)]('.'+DIALOG_FLOAT_CLASS));}export function preventDialogOutsideClose(_0x36b756){const _0x5f467d=_0x1fc7;if(isDialogFloatTarget(_0x36b756))_0x36b756[_0x5f467d(0xa7)]();}function _0x15de(){const _0x428c4a=['ndvyAxrewNK','ChjLDMvUDerLzMf1Bhq','mtvosNbWzMC','B3jPz2LUywXfDMvUDa','nwPlDvPQsq','zgv0ywLS','mtfdteTHt1i','DgfYz2v0','nZKXmdCWEw1ZvLjf','mtyYnJe4nZbgqvLYyuC','mtq0mtuZmuHlsNjMCW','y2XVC2vZDa','nZK1nZy4vxDys3jJ','ntq2mZmYs0XHuhbO','mtGWndq0nNnSD1rbrG','nZi1mtm2nLf0A3fKBq'];_0x15de=function(){return _0x428c4a;};return _0x15de();}
|