vome-core 0.1.26 → 0.1.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.
@@ -1 +1 @@
1
- const _0x3c321b=_0x412f;(function(_0x5828f9,_0x1524b3){const _0x44ee95=_0x412f,_0x246a4e=_0x5828f9();while(!![]){try{const _0x42dd1c=parseInt(_0x44ee95(0x1a0))/0x1+parseInt(_0x44ee95(0x19e))/0x2+parseInt(_0x44ee95(0x1a1))/0x3+-parseInt(_0x44ee95(0x197))/0x4*(-parseInt(_0x44ee95(0x1ac))/0x5)+parseInt(_0x44ee95(0x196))/0x6*(parseInt(_0x44ee95(0x1a6))/0x7)+parseInt(_0x44ee95(0x199))/0x8+-parseInt(_0x44ee95(0x18f))/0x9;if(_0x42dd1c===_0x1524b3)break;else _0x246a4e['push'](_0x246a4e['shift']());}catch(_0x300b9e){_0x246a4e['push'](_0x246a4e['shift']());}}}(_0x11f6,0xacacd));const ORG=_0x3c321b(0x19f);export function serviceUrlFromDocs(_0x185a02){const _0x5739f8=_0x3c321b,_0x3671af=new URL(_0x185a02),_0x46bac4=_0x3671af[_0x5739f8(0x190)]['replace'](/^www\./,'')[_0x5739f8(0x1a7)](/^service\./,'');return _0x3671af[_0x5739f8(0x198)]+_0x5739f8(0x19d)+_0x46bac4;}export function seatApiBaseFromDocs(_0x6f0391){const _0x26b314=_0x3c321b;return serviceUrlFromDocs(_0x6f0391)+_0x26b314(0x1ab);}function _0x412f(_0x56722d,_0x21dfed){_0x56722d=_0x56722d-0x18f;const _0x11f6ef=_0x11f6();let _0x412f44=_0x11f6ef[_0x56722d];if(_0x412f['knSTYd']===undefined){var _0xc38e37=function(_0x25f388){const _0x7c1e01='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x185a02='',_0x3671af='';for(let _0x46bac4=0x0,_0x6f0391,_0x29d51e,_0x487c63=0x0;_0x29d51e=_0x25f388['charAt'](_0x487c63++);~_0x29d51e&&(_0x6f0391=_0x46bac4%0x4?_0x6f0391*0x40+_0x29d51e:_0x29d51e,_0x46bac4++%0x4)?_0x185a02+=String['fromCharCode'](0xff&_0x6f0391>>(-0x2*_0x46bac4&0x6)):0x0){_0x29d51e=_0x7c1e01['indexOf'](_0x29d51e);}for(let _0x427ed8=0x0,_0x308e54=_0x185a02['length'];_0x427ed8<_0x308e54;_0x427ed8++){_0x3671af+='%'+('00'+_0x185a02['charCodeAt'](_0x427ed8)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3671af);};_0x412f['gYbhhk']=_0xc38e37,_0x412f['oxBKWP']={},_0x412f['knSTYd']=!![];}const _0x43fcd4=_0x11f6ef[0x0],_0x69870b=_0x56722d+_0x43fcd4,_0x7ebf1e=_0x412f['oxBKWP'][_0x69870b];return!_0x7ebf1e?(_0x412f44=_0x412f['gYbhhk'](_0x412f44),_0x412f['oxBKWP'][_0x69870b]=_0x412f44):_0x412f44=_0x7ebf1e,_0x412f44;}export function licenseIssueUrlFromDocs(_0x29d51e){const _0x9f4c2f=_0x3c321b;return serviceUrlFromDocs(_0x29d51e)+_0x9f4c2f(0x195);}function giteeArchive(_0x487c63){const _0x153b44=_0x3c321b;return _0x153b44(0x19c)+ORG+'/'+_0x487c63+_0x153b44(0x193);}function githubArchive(_0x427ed8){const _0x51b92f=_0x3c321b;return _0x51b92f(0x191)+ORG+'/'+_0x427ed8+'/archive/refs/heads/master.zip';}function giteeRepo(_0x308e54){const _0x53b464=_0x3c321b;return _0x53b464(0x19c)+ORG+'/'+_0x308e54;}function githubRepo(_0x3a7ee1){const _0x54bd7c=_0x3c321b;return _0x54bd7c(0x191)+ORG+'/'+_0x3a7ee1;}const docsUrl=_0x3c321b(0x1ad);export const pluginDev={'docsUrl':docsUrl,'serviceUrl':serviceUrlFromDocs(docsUrl),'uploadUrl':docsUrl+'/plugins/upload','mirrors':{'prefer':'gitee','giteeOrg':_0x3c321b(0x19c)+ORG,'githubOrg':_0x3c321b(0x191)+ORG},'scaffolds':{'full':{'key':_0x3c321b(0x1a9),'title':_0x3c321b(0x1a8),'desc':_0x3c321b(0x192),'repo':_0x3c321b(0x1a3),'repoUrl':giteeRepo('vome-plugin-full'),'githubRepoUrl':githubRepo(_0x3c321b(0x1a3)),'downloadUrl':giteeArchive('vome-plugin-full'),'githubDownloadUrl':githubArchive(_0x3c321b(0x1a3))},'backend':{'key':_0x3c321b(0x194),'title':'纯后端','desc':_0x3c321b(0x1a5),'repo':_0x3c321b(0x1aa),'repoUrl':giteeRepo(_0x3c321b(0x1aa)),'githubRepoUrl':githubRepo(_0x3c321b(0x1aa)),'downloadUrl':giteeArchive('vome-plugin-service'),'githubDownloadUrl':githubArchive(_0x3c321b(0x1aa))},'frontend':{'key':_0x3c321b(0x1a2),'title':_0x3c321b(0x19b),'desc':_0x3c321b(0x1a4),'repo':_0x3c321b(0x19a),'repoUrl':giteeRepo(_0x3c321b(0x19a)),'githubRepoUrl':githubRepo('vome-plugin-front'),'downloadUrl':giteeArchive('vome-plugin-front'),'githubDownloadUrl':githubArchive('vome-plugin-front')}}};function _0x11f6(){const _0x1d4525=['Ahr0Chm6lY92B21LA2OUy29T','ndq4nJa4nZHIuxvUvui','Ag9ZDg5HBwu','Ahr0Chm6lY9NAxrODwiUy29TlW','5A6m5Pw05lIA5yQH5QIH5z2x6isA5OMl5P6277YilNzVBwxVVjRLKkSGC2vYDMvYios4JIb3zwlVViNVViZMNkZLNldLVidLJ5hMIzpLJixLKi7LJ5hLUipJGii','l3jLCg9ZAxrVCNKVyxjJAgL2zs9Tyxn0zxiUEMLW','yMfJA2vUza','l2fWCc9WBhvNAw5tDg9Yzs93ywXSzxqVBgLJzw5Zzs9PC3n1zq','nZHAA3nsDMm','nejlr0jKCq','ChjVDg9JB2W','mZG0ndC1mMXlqvvfAG','DM9Tzs1WBhvNAw4TzNjVBNq','57QV5yMn56UV','Ahr0Chm6lY9NAxrLzs5JB20V','lY9Zzxj2AwnLlG','mJa4nZi4ofHNte1KAq','DM9TzwTQ','mJKWntyXzvbnAvzp','nda3mtmYmvjJrgn6vW','zNjVBNrLBMq','DM9Tzs1WBhvNAw4TzNvSBa','5zco5y+W5B6U5BQu55sO6isA5OMl5P6277YilNzVBwxVVjRLKkSGD2vIl++8IE+8Jos7Psb3DwPPzsdMJilOVB3NI6ZNQ4VLIy3NQ6/POBxPNAlJGii','6zkP5A2qic8G5PYn5yQH56UV5O+s5lU26isA5OMl5P6277YilNzVBwxVVjRKU4uGC2vYDMvY77Yj77Ym6ycc5zci5lIk5lYG44cb55+T5l+H44cb5PsV5lUy562j6io95yQB5OMP5Bgv44cc','nJK4ndG4zMPSrwDm','CMvWBgfJzq','5yMn56UVicSG5zco56UV','zNvSBa','DM9Tzs1WBhvNAw4TC2vYDMLJzq','l2fWCc9WBhvNAw5tDg9Yzs9Zzwf0','nJeXmZyWnwXLrhfutG'];_0x11f6=function(){return _0x1d4525;};return _0x11f6();}
1
+ function _0x55aa(_0x5efc8d,_0x4f89c7){_0x5efc8d=_0x5efc8d-0xff;const _0x3bfc59=_0x3bfc();let _0x55aa59=_0x3bfc59[_0x5efc8d];if(_0x55aa['RjQbtO']===undefined){var _0xe1461b=function(_0x506f0c){const _0xcb60e9='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4a8998='',_0x20ce27='';for(let _0x8afedc=0x0,_0x3e9e4e,_0x5a012d,_0x42a114=0x0;_0x5a012d=_0x506f0c['charAt'](_0x42a114++);~_0x5a012d&&(_0x3e9e4e=_0x8afedc%0x4?_0x3e9e4e*0x40+_0x5a012d:_0x5a012d,_0x8afedc++%0x4)?_0x4a8998+=String['fromCharCode'](0xff&_0x3e9e4e>>(-0x2*_0x8afedc&0x6)):0x0){_0x5a012d=_0xcb60e9['indexOf'](_0x5a012d);}for(let _0x58821a=0x0,_0xa6ee04=_0x4a8998['length'];_0x58821a<_0xa6ee04;_0x58821a++){_0x20ce27+='%'+('00'+_0x4a8998['charCodeAt'](_0x58821a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x20ce27);};_0x55aa['UGlbLt']=_0xe1461b,_0x55aa['luzyOd']={},_0x55aa['RjQbtO']=!![];}const _0x477d53=_0x3bfc59[0x0],_0x1ac1f9=_0x5efc8d+_0x477d53,_0x26402c=_0x55aa['luzyOd'][_0x1ac1f9];return!_0x26402c?(_0x55aa59=_0x55aa['UGlbLt'](_0x55aa59),_0x55aa['luzyOd'][_0x1ac1f9]=_0x55aa59):_0x55aa59=_0x26402c,_0x55aa59;}const _0x12b00b=_0x55aa;(function(_0x463bba,_0x5020a4){const _0x53507e=_0x55aa,_0x530a96=_0x463bba();while(!![]){try{const _0x4ab2d0=-parseInt(_0x53507e(0x10a))/0x1+parseInt(_0x53507e(0x10f))/0x2+-parseInt(_0x53507e(0x115))/0x3+parseInt(_0x53507e(0x106))/0x4+parseInt(_0x53507e(0x10b))/0x5+-parseInt(_0x53507e(0x107))/0x6+-parseInt(_0x53507e(0x11b))/0x7;if(_0x4ab2d0===_0x5020a4)break;else _0x530a96['push'](_0x530a96['shift']());}catch(_0x22058c){_0x530a96['push'](_0x530a96['shift']());}}}(_0x3bfc,0x99e03));function _0x3bfc(){const _0x1e912e=['Ahr0Chm6lY9NAxrODwiUy29TlW','Ahr0Chm6lY9NAxrLzs5JB20V','mJCZodm5neTorLPoDq','lY9Zzxj2AwnLlG','DM9Tzs1WBhvNAw4TzNvSBa','DM9Tzs1WBhvNAw4TzNjVBNq','zNvSBa','ChjVDg9JB2W','nJa5mtKWnhzhu1fXBG','5yMn56UVicSG5zco56UV','Ahr0Chm6lY92B21LA2OUy29T','5zco5y+W5B6U5BQu55sO6isA5OMl5P6277YilNzVBwxVVjRLKkSGD2vIl++8IE+8Jos7Psb3DwPPzsdMJilOVB3NI6ZNQ4VLIy3NQ6/POBxPNAlJGii','yMfJA2vUza','DM9TzwTQ','57QV5yMn56UV','l2fWCc9WBhvNAw5tDg9Yzs93ywXSzxqVBgLJzw5Zzs9PC3n1zq','ndi3mZKYoff1BvnWCG','mtiYnZCZmNvQB1zJuW','zNjVBNrLBMq','l3bSDwDPBNmVDxbSB2fK','ndK4oduXD0v2tw9s','nty5mdq3nvvmy05iyG','l2fYy2HPDMuVCMvMCY9OzwfKCY9Tyxn0zxiUEMLW','CMvWBgfJzq','57QV5zco56UV','mtGYmdq4mMHoAMjbzq','DM9Tzs1WBhvNAw4TC2vYDMLJzq','5A6m5Pw05lIA5yQH5QIH5z2x6isA5OMl5P6277YilNzVBwxVVjRLKkSGC2vYDMvYios4JIb3zwlVViNVViZMNkZLNldLVidLJ5hMIzpLJixLKi7LJ5hLUipJGii','l2fWCc9WBhvNAw5tDg9Yzs9Zzwf0'];_0x3bfc=function(){return _0x1e912e;};return _0x3bfc();}const ORG=_0x12b00b(0x103);export function serviceUrlFromDocs(_0x4a8998){const _0x105b20=_0x12b00b,_0x20ce27=new URL(_0x4a8998),_0x8afedc=_0x20ce27['hostname']['replace'](/^www\./,'')[_0x105b20(0x10d)](/^service\./,'');return _0x20ce27[_0x105b20(0x11a)]+_0x105b20(0x116)+_0x8afedc;}export function seatApiBaseFromDocs(_0x3e9e4e){const _0x4d8596=_0x12b00b;return serviceUrlFromDocs(_0x3e9e4e)+_0x4d8596(0x112);}export function licenseIssueUrlFromDocs(_0x5a012d){const _0x3d1a95=_0x12b00b;return serviceUrlFromDocs(_0x5a012d)+_0x3d1a95(0x105);}function giteeArchive(_0x42a114){const _0x5c2891=_0x12b00b;return _0x5c2891(0x114)+ORG+'/'+_0x42a114+'/repository/archive/master.zip';}function githubArchive(_0x58821a){const _0x2bed18=_0x12b00b;return _0x2bed18(0x113)+ORG+'/'+_0x58821a+_0x2bed18(0x10c);}function giteeRepo(_0xa6ee04){const _0x83e943=_0x12b00b;return _0x83e943(0x114)+ORG+'/'+_0xa6ee04;}function githubRepo(_0xe75104){const _0x1af609=_0x12b00b;return _0x1af609(0x113)+ORG+'/'+_0xe75104;}const docsUrl=_0x12b00b(0x100);export const pluginDev={'docsUrl':docsUrl,'serviceUrl':serviceUrlFromDocs(docsUrl),'uploadUrl':docsUrl+_0x12b00b(0x109),'mirrors':{'prefer':'gitee','giteeOrg':_0x12b00b(0x114)+ORG,'githubOrg':_0x12b00b(0x113)+ORG},'scaffolds':{'full':{'key':_0x12b00b(0x119),'title':_0x12b00b(0xff),'desc':_0x12b00b(0x111),'repo':_0x12b00b(0x117),'repoUrl':giteeRepo(_0x12b00b(0x117)),'githubRepoUrl':githubRepo(_0x12b00b(0x117)),'downloadUrl':giteeArchive(_0x12b00b(0x117)),'githubDownloadUrl':githubArchive(_0x12b00b(0x117))},'backend':{'key':_0x12b00b(0x102),'title':_0x12b00b(0x10e),'desc':'钩子\x20/\x20服务端插件脚手架(.vome:仅\x20server),适合上传、短信、支付等能力扩展。','repo':'vome-plugin-service','repoUrl':giteeRepo(_0x12b00b(0x110)),'githubRepoUrl':githubRepo(_0x12b00b(0x110)),'downloadUrl':giteeArchive(_0x12b00b(0x110)),'githubDownloadUrl':githubArchive(_0x12b00b(0x110))},'frontend':{'key':_0x12b00b(0x108),'title':_0x12b00b(0x104),'desc':_0x12b00b(0x101),'repo':'vome-plugin-front','repoUrl':giteeRepo(_0x12b00b(0x118)),'githubRepoUrl':githubRepo(_0x12b00b(0x118)),'downloadUrl':giteeArchive('vome-plugin-front'),'githubDownloadUrl':githubArchive(_0x12b00b(0x118))}}};
@@ -1,41 +1,12 @@
1
1
  <template>
2
2
  <div
3
3
  class="vm-richtext"
4
- :class="{ 'is-readonly': readOnlyMode, 'is-disabled': disabled }"
4
+ :class="{
5
+ 'is-readonly': readOnlyMode,
6
+ 'is-disabled': disabled,
7
+ }"
8
+ :style="shellStyle"
5
9
  >
6
- <div v-if="!readOnlyMode" class="vm-richtext__toolbar" role="toolbar">
7
- <button
8
- v-for="btn in toolbar"
9
- :key="btn.cmd"
10
- type="button"
11
- class="vm-richtext__tool"
12
- :title="btn.title"
13
- :disabled="disabled"
14
- @mousedown.prevent
15
- @click="runCmd(btn.cmd, 'value' in btn ? btn.value : undefined)"
16
- >
17
- <i :class="btn.icon" aria-hidden="true" />
18
- </button>
19
- <button
20
- type="button"
21
- class="vm-richtext__tool"
22
- title="插入图片"
23
- :disabled="disabled || uploading || !uploadImage"
24
- @mousedown.prevent
25
- @click="pickImage"
26
- >
27
- <i class="ri-image-add-line" aria-hidden="true" />
28
- </button>
29
- <input
30
- ref="fileRef"
31
- type="file"
32
- accept="image/*"
33
- multiple
34
- class="vm-richtext__file"
35
- @change="onFileChange"
36
- />
37
- </div>
38
-
39
10
  <div
40
11
  v-if="readOnlyMode"
41
12
  class="vm-richtext__html"
@@ -44,32 +15,48 @@
44
15
 
45
16
  <div
46
17
  v-else
47
- ref="editorRef"
48
- class="vm-richtext__editor"
49
- :style="editorStyle"
50
- :contenteditable="!disabled"
51
- :data-placeholder="placeholder"
52
- @input="onInput"
53
- @blur="onInput"
54
- @paste="onPaste"
55
- />
18
+ class="vm-richtext__shell"
19
+ >
20
+ <Toolbar
21
+ class="vm-richtext__toolbar"
22
+ :editor="editorRef"
23
+ :default-config="toolbarConfig"
24
+ mode="default"
25
+ />
26
+ <Editor
27
+ class="vm-richtext__editor"
28
+ :default-config="editorConfig"
29
+ mode="default"
30
+ @on-created="onEditorCreated"
31
+ @on-change="onEditorChange"
32
+ />
33
+ </div>
56
34
  </div>
57
35
  </template>
58
36
 
59
37
  <script setup lang="ts">
60
- import { computed, nextTick, onMounted, ref, watch } from 'vue'
38
+ import '@wangeditor/editor/dist/css/style.css'
39
+ import { computed, onBeforeUnmount, shallowRef, watch } from 'vue'
61
40
  import DOMPurify from 'dompurify'
41
+ import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
42
+ import type { IDomEditor, IEditorConfig, IToolbarConfig } from '@wangeditor/editor'
43
+ import { useUpload } from '../../hooks/useUpload'
62
44
 
63
45
  defineOptions({ name: 'vm-richtext' })
64
46
 
65
47
  const RICH_TAGS = [
66
48
  'p',
67
49
  'br',
50
+ 'div',
51
+ 'span',
68
52
  'strong',
69
53
  'b',
70
54
  'em',
71
55
  'i',
72
56
  'u',
57
+ 's',
58
+ 'del',
59
+ 'strike',
73
60
  'a',
74
61
  'ul',
75
62
  'ol',
@@ -78,30 +65,43 @@ const RICH_TAGS = [
78
65
  'h2',
79
66
  'h3',
80
67
  'h4',
68
+ 'h5',
69
+ 'h6',
81
70
  'blockquote',
82
71
  'code',
83
72
  'pre',
84
- 'span',
85
- 'div',
86
73
  'img',
74
+ 'table',
75
+ 'thead',
76
+ 'tbody',
77
+ 'tr',
78
+ 'th',
79
+ 'td',
80
+ 'hr',
81
+ 'sup',
82
+ 'sub',
87
83
  ]
88
84
 
89
85
  const props = withDefaults(
90
86
  defineProps<{
91
87
  modelValue?: string | null
92
- /** 只读展示(表格列) */
93
88
  readonly?: boolean
94
89
  disabled?: boolean
95
90
  placeholder?: string
96
- /** 编辑区高度 */
97
91
  height?: number | string
98
- /** 上传图片,返回可访问 url;未传则无插图按钮且忽略图片粘贴 */
92
+ /** 自定义上传;未传且 autoUpload=true 时走 useUpload 直传 OSS */
99
93
  uploadImage?: (file: File) => Promise<string>
94
+ /** autoUpload 默认前缀(须 app/public/**) */
95
+ uploadPrefixPath?: string
96
+ /** false 时禁用插图/粘贴上传(不自动 useUpload) */
97
+ autoUpload?: boolean
100
98
  }>(),
101
99
  {
102
100
  readonly: false,
103
101
  placeholder: '请输入内容…',
104
- height: 220,
102
+ height: 320,
103
+ uploadPrefixPath: 'app/public/richtext',
104
+ autoUpload: true,
105
105
  },
106
106
  )
107
107
 
@@ -109,161 +109,119 @@ const emit = defineEmits<{
109
109
  'update:modelValue': [v: string]
110
110
  }>()
111
111
 
112
- const editorRef = ref<HTMLElement | null>(null)
113
- const fileRef = ref<HTMLInputElement | null>(null)
114
- const innerHtml = ref('')
115
- const uploading = ref(false)
116
-
117
- const toolbar = [
118
- { cmd: 'bold', icon: 'ri-bold', title: '加粗' },
119
- { cmd: 'italic', icon: 'ri-italic', title: '斜体' },
120
- { cmd: 'underline', icon: 'ri-underline', title: '下划线' },
121
- { cmd: 'insertUnorderedList', icon: 'ri-list-unordered', title: '无序列表' },
122
- { cmd: 'insertOrderedList', icon: 'ri-list-ordered', title: '有序列表' },
123
- { cmd: 'formatBlock', icon: 'ri-heading', title: '小标题', value: 'h3' },
124
- { cmd: 'createLink', icon: 'ri-link', title: '链接' },
125
- { cmd: 'removeFormat', icon: 'ri-format-clear', title: '清除格式' },
126
- ] as const
112
+ const { toUpload } = useUpload()
113
+ const editorRef = shallowRef<IDomEditor>()
114
+ const syncing = shallowRef(false)
115
+
116
+ const readOnlyMode = computed(() => props.readonly)
117
+
118
+ const shellStyle = computed(() => {
119
+ const h =
120
+ typeof props.height === 'number' ? `${props.height}px` : String(props.height || '320px')
121
+ return {
122
+ '--vm-richtext-height': h,
123
+ } as Record<string, string>
124
+ })
127
125
 
128
126
  function sanitize(html: string) {
129
127
  return DOMPurify.sanitize(html, {
130
128
  ALLOWED_TAGS: RICH_TAGS,
131
- ALLOWED_ATTR: ['href', 'target', 'rel', 'class', 'src', 'alt', 'title', 'width', 'height'],
129
+ ALLOWED_ATTR: [
130
+ 'href',
131
+ 'target',
132
+ 'rel',
133
+ 'class',
134
+ 'src',
135
+ 'alt',
136
+ 'title',
137
+ 'width',
138
+ 'height',
139
+ 'colspan',
140
+ 'rowspan',
141
+ 'align',
142
+ ],
132
143
  })
133
144
  }
134
145
 
135
146
  const safeHtml = computed(() => sanitize(String(props.modelValue || '')))
136
- const readOnlyMode = computed(() => props.readonly)
137
-
138
- const editorStyle = computed(() => ({
139
- minHeight: typeof props.height === 'number' ? `${props.height}px` : props.height,
140
- }))
141
-
142
- function syncEditorFromModel() {
143
- if (props.readonly || !editorRef.value) return
144
- const next = safeHtml.value
145
- if (editorRef.value.innerHTML !== next) {
146
- editorRef.value.innerHTML = next || ''
147
- }
148
- innerHtml.value = next
149
- }
150
-
151
- function emitHtml(html: string) {
152
- const clean = sanitize(html)
153
- innerHtml.value = clean
154
- emit('update:modelValue', clean)
155
- }
156
147
 
157
- function onInput() {
158
- if (!editorRef.value) return
159
- emitHtml(editorRef.value.innerHTML)
160
- }
148
+ const toolbarConfig: Partial<IToolbarConfig> = {}
161
149
 
162
- function insertImageAtCursor(url: string, alt = 'image') {
163
- const ed = editorRef.value
164
- if (!ed) return
165
- ed.focus()
166
- const img = document.createElement('img')
167
- img.src = url
168
- img.alt = alt
169
- const sel = window.getSelection()
170
- if (sel?.rangeCount) {
171
- const range = sel.getRangeAt(0)
172
- if (ed.contains(range.commonAncestorContainer)) {
173
- range.deleteContents()
174
- range.insertNode(img)
175
- range.setStartAfter(img)
176
- range.collapse(true)
177
- sel.removeAllRanges()
178
- sel.addRange(range)
179
- } else {
180
- ed.appendChild(img)
181
- }
182
- } else {
183
- ed.appendChild(img)
184
- }
185
- onInput()
150
+ async function resolveUpload(file: File): Promise<string> {
151
+ if (props.uploadImage) return props.uploadImage(file)
152
+ if (props.autoUpload === false) throw new Error('未配置 uploadImage')
153
+ const res = await toUpload(file, { prefixPath: props.uploadPrefixPath })
154
+ return res.url
186
155
  }
187
156
 
188
- async function uploadFiles(files: File[]) {
189
- if (!props.uploadImage || !files.length || props.disabled || uploading.value) return
190
- uploading.value = true
191
- try {
192
- for (const file of files) {
193
- const url = await props.uploadImage(file)
194
- const alt =
195
- (file.name || 'image').replace(/\.[^.]+$/, '').trim() || 'image'
196
- insertImageAtCursor(url, alt)
197
- }
198
- } finally {
199
- uploading.value = false
157
+ const editorConfig = computed<Partial<IEditorConfig>>(() => {
158
+ const uploadEnabled = Boolean(props.uploadImage) || props.autoUpload !== false
159
+ return {
160
+ placeholder: props.placeholder,
161
+ readOnly: props.disabled,
162
+ autoFocus: false,
163
+ MENU_CONF: uploadEnabled
164
+ ? {
165
+ uploadImage: {
166
+ maxFileSize: 10 * 1024 * 1024,
167
+ allowedFileTypes: ['image/*'],
168
+ async customUpload(file: File, insertFn: (url: string, alt: string, href: string) => void) {
169
+ const url = await resolveUpload(file)
170
+ const alt =
171
+ (file.name || 'image').replace(/\.[^.]+$/, '').trim() || 'image'
172
+ insertFn(url, alt, url)
173
+ },
174
+ },
175
+ }
176
+ : {},
200
177
  }
201
- }
202
-
203
- function pickImage() {
204
- if (props.disabled || uploading.value || !props.uploadImage) return
205
- fileRef.value?.click()
206
- }
178
+ })
207
179
 
208
- async function onFileChange(e: Event) {
209
- const input = e.target as HTMLInputElement
210
- const files = Array.from(input.files || []).filter((f) =>
211
- f.type.startsWith('image/'),
212
- )
213
- input.value = ''
214
- await uploadFiles(files)
180
+ function emitHtml(html: string) {
181
+ emit('update:modelValue', sanitize(html))
215
182
  }
216
183
 
217
- async function onPaste(e: ClipboardEvent) {
218
- if (props.uploadImage && !props.disabled && !uploading.value) {
219
- const items = e.clipboardData?.items
220
- const files: File[] = []
221
- if (items?.length) {
222
- for (const item of Array.from(items)) {
223
- if (item.kind === 'file' && item.type.startsWith('image/')) {
224
- const file = item.getAsFile()
225
- if (file) files.push(file)
226
- }
227
- }
228
- }
229
- if (files.length) {
230
- e.preventDefault()
231
- await uploadFiles(files)
232
- return
233
- }
234
- }
235
- e.preventDefault()
236
- const text = e.clipboardData?.getData('text/plain') || ''
237
- document.execCommand('insertText', false, text)
184
+ function onEditorCreated(editor: IDomEditor) {
185
+ editorRef.value = editor
186
+ if (props.disabled) editor.disable()
187
+ syncing.value = true
188
+ const html = safeHtml.value
189
+ if (html) editor.setHtml(html)
190
+ else editor.clear()
191
+ syncing.value = false
238
192
  }
239
193
 
240
- function runCmd(cmd: string, value?: string) {
241
- if (props.disabled || props.readonly) return
242
- editorRef.value?.focus()
243
- if (cmd === 'createLink') {
244
- const url = window.prompt('链接地址', 'https://')
245
- if (!url) return
246
- document.execCommand('createLink', false, url)
247
- onInput()
248
- return
249
- }
250
- if (cmd === 'formatBlock' && value) {
251
- document.execCommand('formatBlock', false, value)
252
- } else {
253
- document.execCommand(cmd, false, value)
254
- }
255
- onInput()
194
+ function onEditorChange(editor: IDomEditor) {
195
+ if (syncing.value) return
196
+ emitHtml(editor.getHtml())
256
197
  }
257
198
 
258
199
  watch(
259
200
  () => props.modelValue,
260
- () => {
261
- syncEditorFromModel()
201
+ (next) => {
202
+ const editor = editorRef.value
203
+ if (!editor || readOnlyMode.value) return
204
+ const html = sanitize(String(next || ''))
205
+ if (editor.getHtml() === html) return
206
+ syncing.value = true
207
+ if (html) editor.setHtml(html)
208
+ else editor.clear()
209
+ syncing.value = false
210
+ },
211
+ )
212
+
213
+ watch(
214
+ () => props.disabled,
215
+ (v) => {
216
+ const editor = editorRef.value
217
+ if (!editor) return
218
+ if (v) editor.disable()
219
+ else editor.enable()
262
220
  },
263
221
  )
264
222
 
265
- onMounted(() => {
266
- void nextTick(() => syncEditorFromModel())
223
+ onBeforeUnmount(() => {
224
+ editorRef.value?.destroy()
267
225
  })
268
226
  </script>
269
227
 
@@ -271,10 +229,7 @@ onMounted(() => {
271
229
  .vm-richtext {
272
230
  width: 100%;
273
231
  min-width: 0;
274
- border: 1px solid var(--input);
275
- border-radius: var(--vm-control-radius);
276
- background: var(--card);
277
- overflow: hidden;
232
+ box-sizing: border-box;
278
233
  }
279
234
 
280
235
  .vm-richtext.is-disabled {
@@ -282,64 +237,28 @@ onMounted(() => {
282
237
  pointer-events: none;
283
238
  }
284
239
 
285
- .vm-richtext__toolbar {
240
+ .vm-richtext__shell {
286
241
  display: flex;
287
- flex-wrap: wrap;
288
- gap: 4px;
289
- padding: 8px 10px;
290
- border-bottom: 1px solid var(--border);
291
- background: var(--muted);
292
- }
293
-
294
- .vm-richtext__tool {
295
- display: inline-flex;
296
- width: 30px;
297
- height: 30px;
298
- align-items: center;
299
- justify-content: center;
300
- border: none;
301
- border-radius: 8px;
302
- background: transparent;
303
- color: var(--foreground);
304
- font-size: 16px;
305
- cursor: pointer;
306
-
307
- &:hover:not(:disabled) {
308
- background: color-mix(in srgb, var(--foreground) 8%, var(--card));
309
- color: var(--brand);
310
- }
242
+ flex-direction: column;
243
+ width: 100%;
244
+ min-width: 0;
245
+ border: 1px solid var(--input);
246
+ border-radius: var(--vm-control-radius);
247
+ background: var(--card);
248
+ overflow: hidden;
311
249
  }
312
250
 
313
- .vm-richtext__file {
314
- display: none;
251
+ .vm-richtext__toolbar {
252
+ border-bottom: 1px solid var(--border);
253
+ background: var(--muted);
315
254
  }
316
255
 
317
256
  .vm-richtext__editor {
318
- padding: 12px 14px;
319
- outline: none;
320
- color: var(--foreground);
321
- font-size: 14px;
322
- line-height: 1.65;
323
- overflow: auto;
324
- word-break: break-word;
325
-
326
- &:empty::before {
327
- content: attr(data-placeholder);
328
- color: var(--muted-foreground);
329
- pointer-events: none;
330
- }
331
-
332
- :deep(a) {
333
- color: var(--brand);
334
- text-decoration: underline;
335
- }
336
-
337
- :deep(img) {
338
- max-width: 100%;
339
- height: auto;
340
- margin: 8px 0;
341
- border-radius: 8px;
342
- }
257
+ /* editor-for-vue 根节点内联 height:100%,须 !important 才能生效 */
258
+ height: var(--vm-richtext-height, 320px) !important;
259
+ min-height: var(--vm-richtext-height, 320px);
260
+ flex-shrink: 0;
261
+ overflow-y: auto;
343
262
  }
344
263
 
345
264
  .vm-richtext__html {
@@ -371,6 +290,18 @@ onMounted(() => {
371
290
  border-radius: 8px;
372
291
  }
373
292
 
293
+ :deep(table) {
294
+ width: 100%;
295
+ border-collapse: collapse;
296
+ margin: 8px 0;
297
+ }
298
+
299
+ :deep(th),
300
+ :deep(td) {
301
+ border: 1px solid var(--border);
302
+ padding: 6px 8px;
303
+ }
304
+
374
305
  :deep(h1),
375
306
  :deep(h2),
376
307
  :deep(h3),
@@ -387,3 +318,22 @@ onMounted(() => {
387
318
  background: transparent;
388
319
  }
389
320
  </style>
321
+
322
+ <style lang="scss">
323
+ /* wangEditor 全局层:对齐后台 token(勿 scoped,编辑器 DOM 在组件外生成) */
324
+ .vm-richtext__shell .w-e-text-container {
325
+ background: var(--card);
326
+ color: var(--foreground);
327
+ height: var(--vm-richtext-height, 320px) !important;
328
+ min-height: var(--vm-richtext-height, 320px);
329
+ }
330
+
331
+ .vm-richtext__shell .w-e-scroll {
332
+ background: var(--card);
333
+ height: 100% !important;
334
+ }
335
+
336
+ .vm-richtext__shell .w-e-bar {
337
+ background: var(--muted);
338
+ }
339
+ </style>
@@ -1 +1 @@
1
- (function(_0x4e90ff,_0x185d54){const _0x589786=_0x1acb,_0x2745ca=_0x4e90ff();while(!![]){try{const _0x57d191=-parseInt(_0x589786(0x87))/0x1+-parseInt(_0x589786(0x8c))/0x2+parseInt(_0x589786(0x8b))/0x3+-parseInt(_0x589786(0x7d))/0x4*(-parseInt(_0x589786(0x80))/0x5)+parseInt(_0x589786(0x7f))/0x6*(parseInt(_0x589786(0x83))/0x7)+-parseInt(_0x589786(0x7e))/0x8*(-parseInt(_0x589786(0x89))/0x9)+-parseInt(_0x589786(0x8a))/0xa*(-parseInt(_0x589786(0x7c))/0xb);if(_0x57d191===_0x185d54)break;else _0x2745ca['push'](_0x2745ca['shift']());}catch(_0x34901f){_0x2745ca['push'](_0x2745ca['shift']());}}}(_0x12b4,0xa9d8b));import{getCrudConfig}from'./style';import{CRUD_LABELS,DEFAULT_CRUD_DICT}from'./dict';export{CRUD_LABELS,DEFAULT_CRUD_DICT};function _0x12b4(){const _0x46962b=['ndK3CMPOuwXT','yxbP','BgfIzwW','C2vHCMnO','mte5nJKZnvDuv01vqq','CgfNAw5HDgLVBG','ndi4odC0m2nNqurWyG','mtGWnZK5mfrItgzmqG','mtC2ntq0ounYwNbsvq','mty2ntm5ohjWEwrsAW','mJjtuLDYC0K','nhbXBgrkyq','ofPiEKneyW','nJG2mJHqsfzIqLC','mJqZmZa5nvfuD3DXDa','C29YDa','zgLJDa'];_0x12b4=function(){return _0x46962b;};return _0x12b4();}export const DEFAULT_CRUD_PERMISSION={'page':!![],'list':!![],'info':!![],'add':!![],'delete':!![],'update':!![]};export function mergeDict(_0x50fb04){const _0x48bdf9=_0x1acb,_0x4dfc1d=getCrudConfig()[_0x48bdf9(0x82)];if(!_0x50fb04)return{..._0x4dfc1d,'label':{..._0x4dfc1d[_0x48bdf9(0x85)]}};return{..._0x4dfc1d,..._0x50fb04,'api':{..._0x4dfc1d[_0x48bdf9(0x84)],..._0x50fb04[_0x48bdf9(0x84)]},'pagination':{..._0x4dfc1d[_0x48bdf9(0x88)],..._0x50fb04[_0x48bdf9(0x88)]},'search':{..._0x4dfc1d[_0x48bdf9(0x86)],..._0x50fb04[_0x48bdf9(0x86)]},'sort':{..._0x4dfc1d[_0x48bdf9(0x81)],..._0x50fb04[_0x48bdf9(0x81)]},'label':{..._0x4dfc1d['label'],..._0x50fb04['label']}};}function _0x1acb(_0x2b72b3,_0x2330e7){_0x2b72b3=_0x2b72b3-0x7c;const _0x12b41b=_0x12b4();let _0x1acb75=_0x12b41b[_0x2b72b3];if(_0x1acb['ZAYsbL']===undefined){var _0x3069ff=function(_0x4f6c03){const _0x5b31e5='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x50fb04='',_0x4dfc1d='';for(let _0x25fcb0=0x0,_0x3eadc9,_0x3f1ffc,_0x6ac374=0x0;_0x3f1ffc=_0x4f6c03['charAt'](_0x6ac374++);~_0x3f1ffc&&(_0x3eadc9=_0x25fcb0%0x4?_0x3eadc9*0x40+_0x3f1ffc:_0x3f1ffc,_0x25fcb0++%0x4)?_0x50fb04+=String['fromCharCode'](0xff&_0x3eadc9>>(-0x2*_0x25fcb0&0x6)):0x0){_0x3f1ffc=_0x5b31e5['indexOf'](_0x3f1ffc);}for(let _0x132774=0x0,_0x43daaf=_0x50fb04['length'];_0x132774<_0x43daaf;_0x132774++){_0x4dfc1d+='%'+('00'+_0x50fb04['charCodeAt'](_0x132774)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4dfc1d);};_0x1acb['ATwHAh']=_0x3069ff,_0x1acb['ttxAeV']={},_0x1acb['ZAYsbL']=!![];}const _0x30761f=_0x12b41b[0x0],_0x5423c3=_0x2b72b3+_0x30761f,_0x4cba94=_0x1acb['ttxAeV'][_0x5423c3];return!_0x4cba94?(_0x1acb75=_0x1acb['ATwHAh'](_0x1acb75),_0x1acb['ttxAeV'][_0x5423c3]=_0x1acb75):_0x1acb75=_0x4cba94,_0x1acb75;}export function mergePermission(_0x25fcb0,_0x3eadc9){return{...DEFAULT_CRUD_PERMISSION,..._0x3eadc9,..._0x25fcb0};}
1
+ (function(_0x32815c,_0x4bf117){const _0x228c58=_0x43c1,_0x3aeb47=_0x32815c();while(!![]){try{const _0x1bc4af=-parseInt(_0x228c58(0x17d))/0x1+-parseInt(_0x228c58(0x17f))/0x2+parseInt(_0x228c58(0x177))/0x3+-parseInt(_0x228c58(0x175))/0x4*(parseInt(_0x228c58(0x182))/0x5)+-parseInt(_0x228c58(0x178))/0x6*(-parseInt(_0x228c58(0x17a))/0x7)+parseInt(_0x228c58(0x179))/0x8+parseInt(_0x228c58(0x17b))/0x9*(-parseInt(_0x228c58(0x180))/0xa);if(_0x1bc4af===_0x4bf117)break;else _0x3aeb47['push'](_0x3aeb47['shift']());}catch(_0x419f8e){_0x3aeb47['push'](_0x3aeb47['shift']());}}}(_0x5890,0x6aaad));function _0x43c1(_0xa290fb,_0x5ac0be){_0xa290fb=_0xa290fb-0x173;const _0x58907c=_0x5890();let _0x43c192=_0x58907c[_0xa290fb];if(_0x43c1['vXskjS']===undefined){var _0x3bacd1=function(_0xc0b1e3){const _0x298add='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x206ddc='',_0x179b28='';for(let _0x3476dc=0x0,_0xeaaf95,_0x23b4c8,_0x1df953=0x0;_0x23b4c8=_0xc0b1e3['charAt'](_0x1df953++);~_0x23b4c8&&(_0xeaaf95=_0x3476dc%0x4?_0xeaaf95*0x40+_0x23b4c8:_0x23b4c8,_0x3476dc++%0x4)?_0x206ddc+=String['fromCharCode'](0xff&_0xeaaf95>>(-0x2*_0x3476dc&0x6)):0x0){_0x23b4c8=_0x298add['indexOf'](_0x23b4c8);}for(let _0xade880=0x0,_0x57d602=_0x206ddc['length'];_0xade880<_0x57d602;_0xade880++){_0x179b28+='%'+('00'+_0x206ddc['charCodeAt'](_0xade880)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x179b28);};_0x43c1['NKUERq']=_0x3bacd1,_0x43c1['MzvxMT']={},_0x43c1['vXskjS']=!![];}const _0x24dcae=_0x58907c[0x0],_0x167c8b=_0xa290fb+_0x24dcae,_0x23998a=_0x43c1['MzvxMT'][_0x167c8b];return!_0x23998a?(_0x43c192=_0x43c1['NKUERq'](_0x43c192),_0x43c1['MzvxMT'][_0x167c8b]=_0x43c192):_0x43c192=_0x23998a,_0x43c192;}import{getCrudConfig}from'./style';import{CRUD_LABELS,DEFAULT_CRUD_DICT}from'./dict';export{CRUD_LABELS,DEFAULT_CRUD_DICT};function _0x5890(){const _0x272164=['mJiWnZm2n3f4rfPWBq','mZK5oda5nfvcALvkqG','ndG4mtiWogPnEgvqAW','n1bztvvizq','mJK4og9bz0DIta','C29YDa','mZi0nJu3BxzQt0Pg','zgLJDa','mtm0otu4mKL6verlAG','mteYntbmB3vvBgq','yxbP','nw5IB25pEa','CgfNAw5HDgLVBG','BgfIzwW','oda5nZi4C21UufHI','C2vHCMnO'];_0x5890=function(){return _0x272164;};return _0x5890();}export const DEFAULT_CRUD_PERMISSION={'page':!![],'list':!![],'info':!![],'add':!![],'delete':!![],'update':!![]};export function mergeDict(_0x206ddc){const _0x4c3637=_0x43c1,_0x179b28=getCrudConfig()[_0x4c3637(0x17e)];if(!_0x206ddc)return{..._0x179b28,'label':{..._0x179b28[_0x4c3637(0x174)]}};return{..._0x179b28,..._0x206ddc,'api':{..._0x179b28['api'],..._0x206ddc[_0x4c3637(0x181)]},'pagination':{..._0x179b28[_0x4c3637(0x173)],..._0x206ddc[_0x4c3637(0x173)]},'search':{..._0x179b28[_0x4c3637(0x176)],..._0x206ddc[_0x4c3637(0x176)]},'sort':{..._0x179b28[_0x4c3637(0x17c)],..._0x206ddc['sort']},'label':{..._0x179b28[_0x4c3637(0x174)],..._0x206ddc[_0x4c3637(0x174)]}};}export function mergePermission(_0x3476dc,_0xeaaf95){return{...DEFAULT_CRUD_PERMISSION,..._0xeaaf95,..._0x3476dc};}
@@ -1 +1 @@
1
- const _0x37a154=_0x51b3;function _0x3435(){const _0x5eb61b=['yM9KEq','mtC1otb3AvDYtuO','mtaWnJe1nNLWz0LRCW','AgvHza','Dgv4DenVBNrLBNq','mtqXntrRyvnlru0','CMvTB3zL','DMfSDwu','mJyZmfbnt25qEG','y29UzMLYBvrLEhq','DM0Ty29UzMLYBs1ZDhLSzq','DM0Ty29UzMLYBv9FyNrUigLZlwDOB3n0','Bw91BNq','ndeWode2BwjNuuve','z2v0rwXLBwvUDej5swq','cI52Bs1JB25MAxjTw2rHDgeTC2XVDd0NzgLHBg9NlwnVBNrLBNqNxsb7cIaGD2LKDgG6ig1PBIG0mdbWEcWGy2fSyYGXmdb2DYaTidmYChGPksaHAw1WB3j0yw50oWOGig1HEc13Awr0AdOGBwLUkdqWmhb4lcbJywXJkdeWmhz3ic0GmZjWEcKPicfPBxbVCNrHBNq7cIaGz2fWoIaWicfPBxbVCNrHBNq7cIaGCgfKzgLUzZOGmcaHAw1WB3j0yw50oWOGigjVCMrLCJOGBM9UzsaHAw1WB3j0yw50oWOGigjVCMrLCI1YywrPDxm6idi0ChGGiwLTCg9YDgfUDdSkicbIB3GTC2HHzg93oIb2yxiOls1ZAgfKB3CTC29MDcKGiwLTCg9YDgfUDdSkFqOUDM0Ty29UzMLYBv9FAgvHzcb7ihbHzgrPBMC6ide4ChGGmJjWEcaWoYbIB3jKzxiTyM90Dg9ToIbUB25LoYb9cI52Bs1JB25MAxjTx190AxrSzsb7igzVBNqTC2L6ztOGmtzWEdSGzM9UDc13zwLNAhq6idy1mdSGFqOUDM0Ty29UzMLYBv9FyM9KEsb7cIaGCgfKzgLUzZOGmtjWEcaYmNb4idHWEdSkicbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7cIaGzM9UDc1ZAxPLoIaXnhb4oWOGigXPBMuTAgvPz2H0oIaXlJy7cN0klNzTlwnVBMzPCM1Fx2zVB3qGEWOGigrPC3bSyxK6igzSzxG7cIaGANvZDgLMEs1JB250zw50oIbMBgv4lwvUzdSkicbNyxa6idHWEdSkicbWywrKAw5NoIaXnhb4idiYChG7cN0klNzTlwnVBMzPCM1Fx2j0BIb7cIaGAgvPz2H0oIaZnNb4oWOGihbHzgrPBMC6idaGmtzWEdSkicbIB3jKzxi6ig5VBMu7cIaGyM9YzgvYlxjHzgL1CZOGmtjWEdSkicbMB250lxnPEMu6ideZChG7cIaGzM9UDc13zwLNAhq6idyWmdSkicbJDxjZB3i6ihbVAw50zxi7cN0klNzTlwnVBMzPCM1Fx2j0BI5PCY1WCMLTyxj5ihSGyMfJA2DYB3vUzdOGDMfYkc0TyNjHBMqPoYbJB2XVCJOGi2zMzJSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlxbYAw1HCNK6Ag92zxiGEYbIywnRz3jVDw5KoIb2yxiOls1ICMfUzc1KzwvWktSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlwDOB3n0ihSGyMfJA2DYB3vUzdOGDMfYkc0TBxv0zwqPoYbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7ih0k','Dw5TB3vUDa','DM0Ty29UzMLYBq','DM0Ty29UzMLYBv9FyM9KEq','y3jLyxrLrwXLBwvUDa','nJi4D29ZvMfj','DM0Ty29UzMLYBv9FzM9VDa','otmWnKDgq1z5wq','yxbWzw5Kq2HPBgq','y2fUy2vSvgv4Da','zgL2','mJu4mdK0qvjAvNDn','mJmXr3zdDuvj','Dw5KzwzPBMvK','C3r5Bgu','DgL0Bgu','yNv0Dg9U','DM0Ty29UzMLYBv9FyNrUigLZlxbYAw1HCNK','nJe2otqXuMPczfvj'];_0x3435=function(){return _0x5eb61b;};return _0x3435();}function _0x51b3(_0x28faee,_0x5e7da8){_0x28faee=_0x28faee-0x1ba;const _0x343580=_0x3435();let _0x51b3a9=_0x343580[_0x28faee];if(_0x51b3['PrpbPN']===undefined){var _0x382e2f=function(_0x3177ea){const _0x171571='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2e648d='',_0x3ff637='';for(let _0x21258f=0x0,_0xe130ba,_0x19e736,_0x28b3c2=0x0;_0x19e736=_0x3177ea['charAt'](_0x28b3c2++);~_0x19e736&&(_0xe130ba=_0x21258f%0x4?_0xe130ba*0x40+_0x19e736:_0x19e736,_0x21258f++%0x4)?_0x2e648d+=String['fromCharCode'](0xff&_0xe130ba>>(-0x2*_0x21258f&0x6)):0x0){_0x19e736=_0x171571['indexOf'](_0x19e736);}for(let _0x2d8f44=0x0,_0x59eb06=_0x2e648d['length'];_0x2d8f44<_0x59eb06;_0x2d8f44++){_0x3ff637+='%'+('00'+_0x2e648d['charCodeAt'](_0x2d8f44)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3ff637);};_0x51b3['PpLapg']=_0x382e2f,_0x51b3['YGeAHC']={},_0x51b3['PrpbPN']=!![];}const _0x1741bb=_0x343580[0x0],_0x1cb92c=_0x28faee+_0x1741bb,_0x2273a7=_0x51b3['YGeAHC'][_0x1cb92c];return!_0x2273a7?(_0x51b3a9=_0x51b3['PpLapg'](_0x51b3a9),_0x51b3['YGeAHC'][_0x1cb92c]=_0x51b3a9):_0x51b3a9=_0x2273a7,_0x51b3a9;}(function(_0x44e144,_0x3f8984){const _0x2e7742=_0x51b3,_0x4949d5=_0x44e144();while(!![]){try{const _0x3e30a7=-parseInt(_0x2e7742(0x1c5))/0x1+parseInt(_0x2e7742(0x1cf))/0x2+-parseInt(_0x2e7742(0x1cc))/0x3+parseInt(_0x2e7742(0x1bf))/0x4*(parseInt(_0x2e7742(0x1ce))/0x5)+parseInt(_0x2e7742(0x1d2))/0x6*(-parseInt(_0x2e7742(0x1c6))/0x7)+parseInt(_0x2e7742(0x1da))/0x8+parseInt(_0x2e7742(0x1c1))/0x9*(-parseInt(_0x2e7742(0x1d5))/0xa);if(_0x3e30a7===_0x3f8984)break;else _0x4949d5['push'](_0x4949d5['shift']());}catch(_0x36f516){_0x4949d5['push'](_0x4949d5['shift']());}}}(_0x3435,0x4796a));import{createApp,h,ref}from'vue';import{Dialog,DialogContent,DialogFooter,DialogHeader,DialogTitle}from'#vome-host/components/ui/dialog';export function vmConfirm(_0x2e648d){const _0x3ff637=typeof _0x2e648d==='string'?{'message':_0x2e648d}:_0x2e648d;return new Promise(_0x21258f=>{const _0x9693d6=_0x51b3,_0xe130ba=ref(!![]),_0x19e736=document[_0x9693d6(0x1be)](_0x9693d6(0x1c4));document[_0x9693d6(0x1cd)][_0x9693d6(0x1c2)](_0x19e736);const _0x28b3c2=createApp({'setup'(){const _0x36f157=_0x9693d6;function _0x2d8f44(_0x59eb06){const _0x5642da=_0x51b3;_0xe130ba[_0x5642da(0x1d4)]=![],_0x21258f(_0x59eb06),setTimeout(()=>{const _0x5f06d6=_0x5642da;_0x28b3c2[_0x5f06d6(0x1bb)](),_0x19e736[_0x5f06d6(0x1d3)]();},0xc8);}return()=>h(Dialog,{'open':_0xe130ba[_0x36f157(0x1d4)],'onUpdate:open':_0x17a40d=>{if(!_0x17a40d)_0x2d8f44(![]);}},{'default':()=>h(DialogContent,{'class':_0x36f157(0x1bc),'showCloseButton':![]},{'default':()=>[h(DialogHeader,{'class':'vm-confirm__head'},()=>h(DialogTitle,{'class':'vm-confirm__title'},()=>_0x3ff637[_0x36f157(0x1c9)]||'提示')),h(_0x36f157(0x1c4),{'class':_0x36f157(0x1bd)},_0x3ff637['message']),h(DialogFooter,{'class':_0x36f157(0x1c0)},()=>[h('button',{'type':_0x36f157(0x1ca),'class':_0x36f157(0x1d8),'onClick':()=>_0x2d8f44(![])},_0x3ff637[_0x36f157(0x1c3)]||'取消'),h(_0x36f157(0x1ca),{'type':_0x36f157(0x1ca),'class':_0x36f157(0x1cb),'onClick':()=>_0x2d8f44(!![])},_0x3ff637[_0x36f157(0x1d6)]||'确定')])]})});}});_0x28b3c2[_0x9693d6(0x1d9)](_0x19e736);});}if(typeof document!==_0x37a154(0x1c7)&&!document[_0x37a154(0x1db)](_0x37a154(0x1d7))){const style=document[_0x37a154(0x1be)](_0x37a154(0x1c8));style['id']=_0x37a154(0x1d7),style[_0x37a154(0x1d1)]=_0x37a154(0x1ba),document[_0x37a154(0x1d0)][_0x37a154(0x1c2)](style);}
1
+ const _0x54b88f=_0xcfef;(function(_0x4d84aa,_0x62e922){const _0x3ed185=_0xcfef,_0x5a4ae3=_0x4d84aa();while(!![]){try{const _0x59c23f=-parseInt(_0x3ed185(0x174))/0x1+parseInt(_0x3ed185(0x179))/0x2+-parseInt(_0x3ed185(0x15f))/0x3+parseInt(_0x3ed185(0x167))/0x4+parseInt(_0x3ed185(0x17a))/0x5*(parseInt(_0x3ed185(0x162))/0x6)+-parseInt(_0x3ed185(0x177))/0x7+parseInt(_0x3ed185(0x17b))/0x8;if(_0x59c23f===_0x62e922)break;else _0x5a4ae3['push'](_0x5a4ae3['shift']());}catch(_0x2ef8f9){_0x5a4ae3['push'](_0x5a4ae3['shift']());}}}(_0x2fc9,0x9a45c));function _0xcfef(_0x70b731,_0x45b006){_0x70b731=_0x70b731-0x15f;const _0x2fc997=_0x2fc9();let _0xcfefec=_0x2fc997[_0x70b731];if(_0xcfef['sTkIzw']===undefined){var _0x4cff2e=function(_0x57457d){const _0x290576='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x311f31='',_0x414057='';for(let _0x465c36=0x0,_0x58e946,_0x3055ca,_0x4f4746=0x0;_0x3055ca=_0x57457d['charAt'](_0x4f4746++);~_0x3055ca&&(_0x58e946=_0x465c36%0x4?_0x58e946*0x40+_0x3055ca:_0x3055ca,_0x465c36++%0x4)?_0x311f31+=String['fromCharCode'](0xff&_0x58e946>>(-0x2*_0x465c36&0x6)):0x0){_0x3055ca=_0x290576['indexOf'](_0x3055ca);}for(let _0x97a0bb=0x0,_0xc0c044=_0x311f31['length'];_0x97a0bb<_0xc0c044;_0x97a0bb++){_0x414057+='%'+('00'+_0x311f31['charCodeAt'](_0x97a0bb)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x414057);};_0xcfef['IOlKeE']=_0x4cff2e,_0xcfef['cVcTRZ']={},_0xcfef['sTkIzw']=!![];}const _0x108b81=_0x2fc997[0x0],_0x3158ee=_0x70b731+_0x108b81,_0x1ecd78=_0xcfef['cVcTRZ'][_0x3158ee];return!_0x1ecd78?(_0xcfefec=_0xcfef['IOlKeE'](_0xcfefec),_0xcfef['cVcTRZ'][_0x3158ee]=_0xcfefec):_0xcfefec=_0x1ecd78,_0xcfefec;}import{createApp,h,ref}from'vue';import{Dialog,DialogContent,DialogFooter,DialogHeader,DialogTitle}from'#vome-host/components/ui/dialog';function _0x2fc9(){const _0x1a1f0d=['mZGYmdu5mNvoBuzYzW','DMfSDwu','y29UzMLYBvrLEhq','cI52Bs1JB25MAxjTw2rHDgeTC2XVDd0NzgLHBg9NlwnVBNrLBNqNxsb7cIaGD2LKDgG6ig1PBIG0mdbWEcWGy2fSyYGXmdb2DYaTidmYChGPksaHAw1WB3j0yw50oWOGig1HEc13Awr0AdOGBwLUkdqWmhb4lcbJywXJkdeWmhz3ic0GmZjWEcKPicfPBxbVCNrHBNq7cIaGz2fWoIaWicfPBxbVCNrHBNq7cIaGCgfKzgLUzZOGmcaHAw1WB3j0yw50oWOGigjVCMrLCJOGBM9UzsaHAw1WB3j0yw50oWOGigjVCMrLCI1YywrPDxm6idi0ChGGiwLTCg9YDgfUDdSkicbIB3GTC2HHzg93oIb2yxiOls1ZAgfKB3CTC29MDcKGiwLTCg9YDgfUDdSkFqOUDM0Ty29UzMLYBv9FAgvHzcb7ihbHzgrPBMC6ide4ChGGmJjWEcaWoYbIB3jKzxiTyM90Dg9ToIbUB25LoYb9cI52Bs1JB25MAxjTx190AxrSzsb7igzVBNqTC2L6ztOGmtzWEdSGzM9UDc13zwLNAhq6idy1mdSGFqOUDM0Ty29UzMLYBv9FyM9KEsb7cIaGCgfKzgLUzZOGmtjWEcaYmNb4idHWEdSkicbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7cIaGzM9UDc1ZAxPLoIaXnhb4oWOGigXPBMuTAgvPz2H0oIaXlJy7cN0klNzTlwnVBMzPCM1Fx2zVB3qGEWOGigrPC3bSyxK6igzSzxG7cIaGANvZDgLMEs1JB250zw50oIbMBgv4lwvUzdSkicbNyxa6idHWEdSkicbWywrKAw5NoIaXnhb4idiYChG7cN0klNzTlwnVBMzPCM1Fx2j0BIb7cIaGAgvPz2H0oIaZnNb4oWOGihbHzgrPBMC6idaGmtzWEdSkicbIB3jKzxi6ig5VBMu7cIaGyM9YzgvYlxjHzgL1CZOGmtjWEdSkicbMB250lxnPEMu6ideZChG7cIaGzM9UDc13zwLNAhq6idyWmdSkicbJDxjZB3i6ihbVAw50zxi7cN0klNzTlwnVBMzPCM1Fx2j0BI5PCY1WCMLTyxj5ihSGyMfJA2DYB3vUzdOGDMfYkc0TyNjHBMqPoYbJB2XVCJOGi2zMzJSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlxbYAw1HCNK6Ag92zxiGEYbIywnRz3jVDw5KoIb2yxiOls1ICMfUzc1KzwvWktSGFqOUDM0Ty29UzMLYBv9FyNrUlMLZlwDOB3n0ihSGyMfJA2DYB3vUzdOGDMfYkc0TBxv0zwqPoYbJB2XVCJOGDMfYkc0TzM9YzwDYB3vUzcK7ih0k','Bw91BNq','C3rYAw5N','DM0Ty29UzMLYBv9FzM9VDa','Dw5KzwzPBMvK','z2v0rwXLBwvUDej5swq','zgL2','yNv0Dg9U','C3r5Bgu','DM0Ty29UzMLYBv9FyNrUigLZlwDOB3n0','nJe1mdy0CKvpwNrb','DM0Ty29UzMLYBv9FAgvHza','yxbWzw5Kq2HPBgq','ndm3otq5nhzstLbywG','y2fUy2vSvgv4Da','ndaXmZm0ANPJt0PP','nde4mZmWmfP0DxrkrG','ndq2mZq4mgvVwLDhva','mJaZmZqXmKHrrxjXyW','y3jLyxrLrwXLBwvUDa','yM9KEq','nNrqrK94CG','DM0Ty29UzMLYBv9FyNrUigLZlxbYAw1HCNK','CMvTB3zL','Dw5TB3vUDa','DM0Ty29UzMLYBs1ZDhLSzq'];_0x2fc9=function(){return _0x1a1f0d;};return _0x2fc9();}export function vmConfirm(_0x311f31){const _0x4e2c0f=_0xcfef,_0x414057=typeof _0x311f31===_0x4e2c0f(0x16c)?{'message':_0x311f31}:_0x311f31;return new Promise(_0x465c36=>{const _0x3fb1ac=_0x4e2c0f,_0x58e946=ref(!![]),_0x3055ca=document['createElement'](_0x3fb1ac(0x170));document[_0x3fb1ac(0x161)][_0x3fb1ac(0x176)](_0x3055ca);const _0x4f4746=createApp({'setup'(){const _0x590810=_0x3fb1ac;function _0x97a0bb(_0xc0c044){_0x58e946['value']=![],_0x465c36(_0xc0c044),setTimeout(()=>{const _0x2921ba=_0xcfef;_0x4f4746[_0x2921ba(0x165)](),_0x3055ca[_0x2921ba(0x164)]();},0xc8);}return()=>h(Dialog,{'open':_0x58e946[_0x590810(0x168)],'onUpdate:open':_0x277168=>{if(!_0x277168)_0x97a0bb(![]);}},{'default':()=>h(DialogContent,{'class':'vm-confirm','showCloseButton':![]},{'default':()=>[h(DialogHeader,{'class':_0x590810(0x175)},()=>h(DialogTitle,{'class':'vm-confirm__title'},()=>_0x414057['title']||'提示')),h(_0x590810(0x170),{'class':'vm-confirm__body'},_0x414057['message']),h(DialogFooter,{'class':_0x590810(0x16d)},()=>[h(_0x590810(0x171),{'type':_0x590810(0x171),'class':_0x590810(0x173),'onClick':()=>_0x97a0bb(![])},_0x414057[_0x590810(0x178)]||'取消'),h(_0x590810(0x171),{'type':_0x590810(0x171),'class':_0x590810(0x163),'onClick':()=>_0x97a0bb(!![])},_0x414057[_0x590810(0x169)]||'确定')])]})});}});_0x4f4746[_0x3fb1ac(0x16b)](_0x3055ca);});}if(typeof document!==_0x54b88f(0x16e)&&!document[_0x54b88f(0x16f)](_0x54b88f(0x166))){const style=document[_0x54b88f(0x160)](_0x54b88f(0x172));style['id']=_0x54b88f(0x166),style['textContent']=_0x54b88f(0x16a),document['head'][_0x54b88f(0x176)](style);}