officialblock 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +25 -1
  2. package/dist/official-block.cjs.js +195 -1
  3. package/dist/official-block.es.js +27230 -72
  4. package/dist/official-block.umd.js +195 -1
  5. package/dist/style.css +1 -1
  6. package/package.json +13 -2
  7. package/src/App.vue +32 -82
  8. package/src/components/ArticleList/article.vue +73 -0
  9. package/src/components/ArticleList/contact.vue +95 -0
  10. package/src/components/ArticleList/index.vue +220 -46
  11. package/src/components/ArticleList/setting.vue +709 -0
  12. package/src/components/Button/index.vue +183 -0
  13. package/src/components/Media/index.vue +327 -0
  14. package/src/components/Operate/index.vue +74 -0
  15. package/src/components/RichTextEditor/RichTextEditor.vue +277 -0
  16. package/src/components/RichTextEditor/index.ts +7 -0
  17. package/src/components/ThemePreview/ThemePreview.vue +462 -0
  18. package/src/components/ThemePreview/index.ts +4 -0
  19. package/src/components/index.ts +3 -0
  20. package/src/composables/useTheme.ts +205 -0
  21. package/src/index.ts +15 -4
  22. package/src/main.ts +16 -1
  23. package/src/router/index.ts +96 -0
  24. package/src/style.css +2 -4
  25. package/src/styles/editor.scss +649 -0
  26. package/src/styles/test.scss +20 -0
  27. package/src/styles/variables.scss +669 -0
  28. package/src/utils/common.ts +13 -0
  29. package/src/utils/theme.ts +335 -0
  30. package/src/views/Layout.vue +250 -0
  31. package/src/views/NotFound.vue +114 -0
  32. package/src/views/components/ArticleListDemo.vue +166 -0
  33. package/src/views/components/DragLimitDemo.vue +573 -0
  34. package/src/views/components/DragSortDemo.vue +610 -0
  35. package/src/views/components/HeroSlideDemo.vue +353 -0
  36. package/src/views/components/RichTextEditorDemo.vue +53 -0
  37. package/src/views/components/ThemeDemo.vue +477 -0
  38. package/src/views/guide/Installation.vue +234 -0
  39. package/src/views/guide/Introduction.vue +174 -0
  40. package/src/views/guide/QuickStart.vue +265 -0
@@ -0,0 +1,709 @@
1
+ <template>
2
+ <a-drawer :width="500" :visible="show" :footer="false" @cancel="handleCancel" unmountOnClose>
3
+ <template #title>
4
+ {{data.type}}组件编辑
5
+ </template>
6
+ <div class="setting-content">
7
+ <!-- 组件自身属性 -->
8
+ <div class="setting-header flex items-center">
9
+ <span class="header-title">组件宽度</span>
10
+ <a-select v-model="data.width" placeholder="请选择" allow-clear>
11
+ <a-option value="default">默认</a-option>
12
+ <a-option value="small">小</a-option>
13
+ <a-option value="medium">中</a-option>
14
+ <a-option value="large">大</a-option>
15
+ </a-select>
16
+ </div>
17
+ <div class="setting-header flex items-center">
18
+ <span class="header-title">组件背景</span>
19
+ <a-select v-model="data.background" placeholder="请选择" allow-clear>
20
+ <a-option value="white">白色</a-option>
21
+ <a-option value="grey">灰色</a-option>
22
+ </a-select>
23
+ </div>
24
+
25
+ <a-button-group type="primary">
26
+ <a-button size="mini" @click="handleAdd('Article')"><template #icon><icon-plus /></template> Article </a-button>
27
+ <a-button size="mini" @click="handleAdd('Contact')"><template #icon><icon-plus /></template> Contact </a-button>
28
+ <a-button size="mini" @click="handleAdd('Image')"><template #icon><icon-plus /></template> Image </a-button>
29
+ <a-button size="mini" @click="handleAdd('ImageList')"><template #icon><icon-plus /></template> ImageList </a-button>
30
+ <a-button size="mini" @click="handleAdd('Video')"><template #icon><icon-plus /></template> Video </a-button>
31
+ </a-button-group>
32
+
33
+ <!-- 子组件属性 -->
34
+ <div class="setting-body">
35
+ <draggable
36
+ v-model="data.data"
37
+ :component-data="{
38
+ tag: 'div',
39
+ type: 'transition-group',
40
+ name: !drag ? 'flip-list' : null
41
+ }"
42
+ v-bind="dragOptions"
43
+ @start="drag = true"
44
+ @end="drag = false"
45
+ item-key="id"
46
+ >
47
+ <template #item="{ element: item }">
48
+ <div class="setting-item">
49
+ <p class="item-name">{{ item.type }}</p>
50
+ <div class="drag-handle img-drag-handle">
51
+ <icon-drag-arrow class="drag-icon" />
52
+ </div>
53
+
54
+ <template v-if="item.type === 'Article'">
55
+ <p class="item-title">标题</p>
56
+ <a-input v-model="item.data.title" placeholder="请输入标题" allow-clear />
57
+
58
+ <p class="item-title">内容</p>
59
+ <RichTextEditor v-model="item.data.content"></RichTextEditor>
60
+
61
+ <p class="item-title">按钮</p>
62
+ <draggable
63
+ v-model="item.data.buttonList"
64
+ :component-data="{
65
+ tag: 'div',
66
+ type: 'transition-group',
67
+ name: !drag ? 'flip-list' : null
68
+ }"
69
+ v-bind="buttonDragOptions"
70
+ :disabled="!shouldShowDragHandle(item.data.buttonList)"
71
+ @start="drag = true"
72
+ @end="drag = false"
73
+ item-key="id"
74
+ >
75
+ <template #item="{ element: button }">
76
+ <div
77
+ class="item-button draggable-item"
78
+ :class="{ 'sortable-disabled': !shouldShowDragHandle(item.data.buttonList) }"
79
+ :key="button.id"
80
+ >
81
+ <div
82
+ v-if="shouldShowDragHandle(item.data.buttonList)"
83
+ class="drag-handle"
84
+ >
85
+ <icon-drag-arrow class="drag-icon" />
86
+ </div>
87
+ <icon-delete class="btn-delete" @click="handleDeleteButton(item.data.buttonList, button.id)" />
88
+ <a-button type="primary">{{ button.text }}</a-button>
89
+ <div class="item-action flex items-center">
90
+ <a-input class="action-text" v-model="button.text" placeholder="按钮文本" allow-clear />
91
+ <a-input v-model="button.url" placeholder="按钮链接" allow-clear />
92
+ </div>
93
+ <a-checkbox :model-value="button.isExternal">是否外部链接</a-checkbox>
94
+ </div>
95
+ </template>
96
+ </draggable>
97
+ <div class="item-add-btn flex items-center" @click="handleAddButton(item.data.buttonList)">
98
+ <icon-plus />
99
+ <span class="btn-text">添加按钮</span>
100
+ </div>
101
+
102
+ <p class="item-title">链接</p>
103
+ <draggable
104
+ v-model="item.data.linkList"
105
+ :component-data="{
106
+ tag: 'div',
107
+ type: 'transition-group',
108
+ name: !drag ? 'flip-list' : null
109
+ }"
110
+ v-bind="linkDragOptions"
111
+ :disabled="!shouldShowDragHandle(item.data.linkList)"
112
+ @start="drag = true"
113
+ @end="drag = false"
114
+ item-key="id"
115
+ >
116
+ <template #item="{ element: link }">
117
+ <div
118
+ class="item-button draggable-item"
119
+ :class="{ 'sortable-disabled': !shouldShowDragHandle(item.data.linkList) }"
120
+ :key="link.id"
121
+ >
122
+ <div
123
+ v-if="shouldShowDragHandle(item.data.linkList)"
124
+ class="drag-handle"
125
+ >
126
+ <icon-drag-arrow class="drag-icon" />
127
+ </div>
128
+ <icon-delete class="btn-delete" @click="handleDeleteLink(item.data.linkList, link.id)" />
129
+ <a-link href="link">{{ link.text }}</a-link>
130
+ <div class="item-action flex items-center">
131
+ <a-input class="action-text" v-model="link.text" placeholder="按钮文本" allow-clear />
132
+ <a-input v-model="link.url" placeholder="按钮链接" allow-clear />
133
+ </div>
134
+ <a-checkbox :model-value="link.isExternal">是否外部链接</a-checkbox>
135
+ </div>
136
+ </template>
137
+ </draggable>
138
+ <div class="item-add-btn flex items-center" @click="handleAddLink(item.data.linkList)">
139
+ <icon-plus />
140
+ <span class="btn-text">添加链接</span>
141
+ </div>
142
+ </template>
143
+
144
+ <template v-if="item.type === 'Contact'">
145
+ <p class="item-title">标题</p>
146
+ <a-input v-model="item.data.title" placeholder="请输入标题" allow-clear />
147
+
148
+ <p class="item-title">内容</p>
149
+ <RichTextEditor v-model="item.data.content"></RichTextEditor>
150
+
151
+ <p class="item-title">分类</p>
152
+ <draggable
153
+ v-model="item.data.categories"
154
+ :component-data="{
155
+ tag: 'div',
156
+ type: 'transition-group',
157
+ name: !drag ? 'flip-list' : null
158
+ }"
159
+ v-bind="categoryDragOptions"
160
+ :disabled="!shouldShowDragHandle(item.data.categories)"
161
+ @start="drag = true"
162
+ @end="drag = false"
163
+ item-key="id"
164
+ >
165
+ <template #item="{ element: category }">
166
+ <div
167
+ class="item-button draggable-item"
168
+ :class="{ 'sortable-disabled': !shouldShowDragHandle(item.data.categories) }"
169
+ :key="category.id"
170
+ >
171
+ <div
172
+ v-if="shouldShowDragHandle(item.data.categories)"
173
+ class="drag-handle"
174
+ >
175
+ <icon-drag-arrow class="drag-icon" />
176
+ </div>
177
+ <icon-delete class="btn-delete" @click="handleDeleteCategory(item.data.categories, category.id)" />
178
+ <a-link href="link">{{ category.text }}</a-link>
179
+ <div class="item-action flex items-center">
180
+ <a-input v-model="category.text" placeholder="分类名称" allow-clear />
181
+ </div>
182
+ </div>
183
+ </template>
184
+ </draggable>
185
+ <div class="item-add-btn flex items-center" @click="handleAddCategory(item.data.categories)">
186
+ <icon-plus />
187
+ <span class="btn-text">添加分类</span>
188
+ </div>
189
+
190
+ <p class="item-title">链接</p>
191
+ <draggable
192
+ v-model="item.data.linkList"
193
+ :component-data="{
194
+ tag: 'div',
195
+ type: 'transition-group',
196
+ name: !drag ? 'flip-list' : null
197
+ }"
198
+ v-bind="linkDragOptions"
199
+ :disabled="!shouldShowDragHandle(item.data.linkList)"
200
+ @start="drag = true"
201
+ @end="drag = false"
202
+ item-key="id"
203
+ >
204
+ <template #item="{ element: link }">
205
+ <div
206
+ class="item-button draggable-item"
207
+ :class="{ 'sortable-disabled': !shouldShowDragHandle(item.data.linkList) }"
208
+ :key="link.id"
209
+ >
210
+ <div
211
+ v-if="shouldShowDragHandle(item.data.linkList)"
212
+ class="drag-handle"
213
+ >
214
+ <icon-drag-arrow class="drag-icon" />
215
+ </div>
216
+ <icon-delete class="btn-delete" @click="handleDeleteLink(item.data.linkList, link.id)" />
217
+ <a-link href="link">{{ link.text }}</a-link>
218
+ <div class="item-action flex items-center">
219
+ <a-input class="action-text" v-model="link.text" placeholder="按钮文本" allow-clear />
220
+ <a-input v-model="link.url" placeholder="按钮链接" allow-clear />
221
+ </div>
222
+ <a-checkbox :model-value="link.isExternal">是否外部链接</a-checkbox>
223
+ </div>
224
+ </template>
225
+ </draggable>
226
+ <div class="item-add-btn flex items-center" @click="handleAddLink(item.data.linkList)">
227
+ <icon-plus />
228
+ <span class="btn-text">添加链接</span>
229
+ </div>
230
+ </template>
231
+
232
+ <template v-if="item.type === 'Image'">
233
+ <img class="item-img" :src="item.data.imgSrc" />
234
+ <div class="item-uplaod flex items-center">
235
+ <a-input v-model="item.data.imgSrc" placeholder="请输入标题" allow-clear />
236
+ <a-upload class="fit-content" :show-file-list="false" action="/" />
237
+ </div>
238
+ <a-input class="mt-10" v-model="item.data.caption" placeholder="图片描述" allow-clear />
239
+ <a-input class="mt-10" v-model="item.data.alt" placeholder="图片alt" allow-clear />
240
+ <a-checkbox class="pt-10" :model-value="item.data.isRound">圆角</a-checkbox>
241
+ </template>
242
+
243
+ <template v-if="item.type === 'ImageList'">
244
+ <p class="item-title">图片组</p>
245
+ <div class="item-img-list">
246
+ <draggable
247
+ v-model="item.data.imageList"
248
+ :component-data="{
249
+ tag: 'div',
250
+ type: 'transition-group',
251
+ name: !drag ? 'flip-list' : null
252
+ }"
253
+ v-bind="imageDragOptions"
254
+ :disabled="!shouldShowDragHandle(item.data.imageList)"
255
+ @start="drag = true"
256
+ @end="drag = false"
257
+ item-key="id"
258
+ >
259
+ <template #item="{ element: img }">
260
+ <div
261
+ class="img-list-item flex draggable-item"
262
+ :class="{ 'sortable-disabled': !shouldShowDragHandle(item.data.imageList) }"
263
+ :key="img.id"
264
+ >
265
+ <div
266
+ v-if="shouldShowDragHandle(item.data.imageList)"
267
+ class="drag-handle img-drag-handle"
268
+ >
269
+ <icon-drag-arrow class="drag-icon" />
270
+ </div>
271
+ <div class="item-img-box" v-if="img.src">
272
+ <icon-close-circle-fill class="item-img-dlete" @click="handleDeleteImage(item.data.imageList, img.id)" />
273
+ <img class="item-img small-img" :src="img.src" />
274
+ </div>
275
+
276
+ <div class="item-right flex-1">
277
+ <a-input style="margin-bottom: 12px" v-model="img.src" placeholder="请输入图片路径" allow-clear />
278
+ <a-upload :show-file-list="false" action="/" />
279
+ </div>
280
+ </div>
281
+ </template>
282
+ </draggable>
283
+ </div>
284
+ <div class="item-add-btn flex items-center" @click="handleAddImage(item.data.imageList)">
285
+ <icon-plus />
286
+ <span class="btn-text">添加图片</span>
287
+ </div>
288
+ </template>
289
+
290
+ <template v-if="item.type === 'Video'">
291
+ <p class="item-title">视频</p>
292
+ <video class="item-img" :src="item.data.videoSrc" controls></video>
293
+ <div class="item-uplaod flex items-center">
294
+ <a-input v-model="item.data.videoSrc" placeholder="请输入视频链接" allow-clear />
295
+ <a-upload class="fit-content" :show-file-list="false" action="/" />
296
+ </div>
297
+ <img class="item-img" :src="item.data.imgSrc" />
298
+ <div class="item-uplaod flex items-center">
299
+ <a-input v-model="item.data.imgSrc" placeholder="视频封面" allow-clear />
300
+ <a-upload class="fit-content" :show-file-list="false" action="/" />
301
+ </div>
302
+ </template>
303
+ </div>
304
+ </template>
305
+ </draggable>
306
+ </div>
307
+ </div>
308
+ </a-drawer>
309
+ </template>
310
+
311
+ <script lang="ts" setup>
312
+ import { ref, computed } from 'vue'
313
+ import draggable from 'vuedraggable'
314
+ import RichTextEditor from '@/components/RichTextEditor'
315
+ import { randomString } from '@/utils/common'
316
+
317
+ // 拖拽相关状态
318
+ const drag = ref(false)
319
+
320
+ // 不同类型的拖拽配置选项
321
+ const dragOptions = computed(() => ({
322
+ animation: 200,
323
+ group: 'item', // 按钮专用分组
324
+ disabled: false,
325
+ ghostClass: 'ghost'
326
+ }))
327
+
328
+ const buttonDragOptions = computed(() => ({
329
+ animation: 200,
330
+ group: 'buttons', // 按钮专用分组
331
+ disabled: false,
332
+ ghostClass: 'ghost'
333
+ }))
334
+
335
+ const linkDragOptions = computed(() => ({
336
+ animation: 200,
337
+ group: 'links', // 链接专用分组
338
+ disabled: false,
339
+ ghostClass: 'ghost'
340
+ }))
341
+
342
+ const categoryDragOptions = computed(() => ({
343
+ animation: 200,
344
+ group: 'categories', // 分类专用分组
345
+ disabled: false,
346
+ ghostClass: 'ghost'
347
+ }))
348
+
349
+ const imageDragOptions = computed(() => ({
350
+ animation: 200,
351
+ group: 'images', // 图片专用分组
352
+ disabled: false,
353
+ ghostClass: 'ghost'
354
+ }))
355
+
356
+ // 检查是否应该显示拖拽图标
357
+ const shouldShowDragHandle = (list: any[]) => {
358
+ return list && list.length > 1
359
+ }
360
+
361
+ const props = defineProps({
362
+ show: {
363
+ type: Boolean,
364
+ default: false
365
+ },
366
+
367
+ data: {
368
+ type: Object,
369
+ default: () => {}
370
+ }
371
+ })
372
+
373
+ const emit = defineEmits(['update:show']);
374
+
375
+ const handleCancel = () => {
376
+ emit('update:show', false);
377
+ }
378
+
379
+ const handleAdd = (type: string) => {
380
+ const detail = props.data;
381
+ if (type === 'Article') {
382
+ detail.data.push({
383
+ id: randomString(),
384
+ type: 'Article',
385
+ data: {
386
+ title: '',
387
+ content: '',
388
+ buttonList: [],
389
+ linkList: []
390
+ }
391
+ })
392
+ } else if (type === 'Contact') {
393
+ detail.data.push({
394
+ id: randomString(),
395
+ type: 'Contact',
396
+ data: {
397
+ title: '',
398
+ content: '',
399
+ categories: [],
400
+ linkList: []
401
+ }
402
+ })
403
+ } else if (type === 'Image') {
404
+ detail.data.push({
405
+ id: randomString(),
406
+ type: 'Image',
407
+ data: {
408
+ imgSrc: '',
409
+ caption: '',
410
+ alt: '',
411
+ isRound: false
412
+ }
413
+ })
414
+ } else if (type === 'ImageList') {
415
+ detail.data.push({
416
+ id: randomString(),
417
+ type: 'ImageList',
418
+ data: {
419
+ imageList: []
420
+ }
421
+ })
422
+ } else if (type === 'Video') {
423
+ detail.data.push({
424
+ id: randomString(),
425
+ type: 'Video',
426
+ data: {
427
+ videoSrc: '',
428
+ imgSrc: ''
429
+ }
430
+ })
431
+ }
432
+ }
433
+
434
+ const handleAddButton = (list: any[]) => {
435
+ list.push({
436
+ id: randomString(),
437
+ text: '查看更多',
438
+ url: 'https://www.baidu.com',
439
+ isExternal: false
440
+ })
441
+ }
442
+
443
+ const handleDeleteButton = (list: any[], id: string) => {
444
+ list.splice(list.findIndex(item => item.id === id), 1)
445
+ }
446
+
447
+ const handleAddLink = (list: any[]) => {
448
+ list.push({
449
+ id: randomString(),
450
+ text: '查看更多',
451
+ url: 'https://www.baidu.com',
452
+ isExternal: false
453
+ })
454
+ }
455
+
456
+ const handleDeleteLink = (list: any[], id: string) => {
457
+ list.splice(list.findIndex(item => item.id === id), 1)
458
+ }
459
+
460
+ const handleAddCategory = (list: any[]) => {
461
+ list.push({
462
+ id: randomString(),
463
+ text: '分类'
464
+ })
465
+ }
466
+
467
+ const handleDeleteCategory = (list: any[], id: string) => {
468
+ list.splice(list.findIndex(item => item.id === id), 1)
469
+ }
470
+ const handleAddImage = (list: any[]) => {
471
+ list.push({
472
+ id: randomString(),
473
+ src: ''
474
+ })
475
+ }
476
+
477
+ const handleDeleteImage = (list: any[], img: string) => {
478
+ list.splice(list.findIndex(item => item === img), 1)
479
+ }
480
+ </script>
481
+
482
+ <style lang="scss" scoped>
483
+ .setting-content {
484
+ .setting-header {
485
+ padding-bottom: 12px;
486
+
487
+ .header-title {
488
+ width: 120px;
489
+ padding-right: 12px;
490
+ text-align: right;
491
+ }
492
+ }
493
+
494
+ .setting-body {
495
+ margin-top: 12px;
496
+
497
+ .setting-item {
498
+ position: relative;
499
+ padding: 16px 12px;
500
+ background: #f0f2f5;
501
+ border-radius: 8px;
502
+ margin-bottom: 20px;
503
+
504
+ .item-name {
505
+ font-size: 16px;
506
+ font-weight: 600;
507
+ padding-bottom: 10px;
508
+ border-bottom: 1px solid #fff;
509
+ }
510
+
511
+ .item-title {
512
+ padding: 12px 0 8px 0;
513
+ font-size: 14px;
514
+ font-weight: 600;
515
+ }
516
+
517
+ .arco-input-wrapper {
518
+ background: #fff;
519
+ }
520
+
521
+ .item-button {
522
+ position: relative;
523
+ padding: 12px 8px 4px;
524
+ background: #fff;
525
+ border-radius: 4px;
526
+ margin: 4px 0;
527
+ transition: all 0.3s ease;
528
+
529
+ &.draggable-item {
530
+ cursor: move;
531
+
532
+ &:hover {
533
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
534
+ transform: translateY(-1px);
535
+ }
536
+
537
+ // 当禁用拖拽时,不显示拖拽效果
538
+ &.sortable-disabled {
539
+ cursor: default;
540
+
541
+ &:hover {
542
+ box-shadow: none;
543
+ transform: none;
544
+ }
545
+ }
546
+ }
547
+
548
+ .arco-input-wrapper {
549
+ background: #f2f3f5;
550
+ }
551
+
552
+ .btn-delete {
553
+ position: absolute;
554
+ padding: 4px;
555
+ top: 8px;
556
+ right: 34px;
557
+ font-size: 24px;
558
+ cursor: pointer;
559
+ }
560
+ }
561
+
562
+ // 拖拽相关样式
563
+ .flip-list-move {
564
+ transition: transform 0.5s;
565
+ }
566
+
567
+ .no-move {
568
+ transition: transform 0s;
569
+ }
570
+
571
+ .ghost {
572
+ opacity: 0.5;
573
+ background: #c8ebfb;
574
+ }
575
+
576
+ .list-group {
577
+ min-height: 20px;
578
+ }
579
+
580
+ .list-group-item {
581
+ cursor: move;
582
+ }
583
+
584
+ .list-group-item i {
585
+ cursor: pointer;
586
+ }
587
+
588
+ .item-action {
589
+ padding: 10px 0;
590
+
591
+ .action-text {
592
+ width: 150px;
593
+ margin-right: 8px;
594
+ }
595
+ }
596
+
597
+ .item-add-btn {
598
+ display: inline-block;
599
+ padding: 2px 8px;
600
+ margin-top: 5px;
601
+ font-size: 11px;
602
+ color: #165dff;
603
+ border-radius: 4px;
604
+ font-weight: 600;
605
+ border: 1px solid #165dff;
606
+ cursor: pointer;
607
+ }
608
+
609
+ .item-img {
610
+ margin-top: 12px;
611
+ height: 160px;
612
+ }
613
+
614
+ .fit-content {
615
+ width: fit-content;
616
+ }
617
+
618
+ .item-img-list {
619
+ .img-list-item {
620
+ margin: 4px 0;
621
+ position: relative;
622
+ padding: 8px;
623
+ border-radius: 4px;
624
+ transition: all 0.3s ease;
625
+ background: #fff;
626
+ border-radius: 4px;
627
+
628
+ &.draggable-item {
629
+ cursor: move;
630
+
631
+ &:hover {
632
+ background-color: #f8f9fa;
633
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
634
+ }
635
+
636
+ // 当禁用拖拽时,不显示拖拽效果
637
+ &.sortable-disabled {
638
+ cursor: default;
639
+
640
+ &:hover {
641
+ background-color: transparent;
642
+ box-shadow: none;
643
+ }
644
+ }
645
+ }
646
+
647
+ .arco-input-wrapper {
648
+ background: #f2f3f5;
649
+ }
650
+
651
+ .img-drag-handle {
652
+ top: 0 !important;
653
+ }
654
+ }
655
+
656
+ .item-img-box {
657
+ margin-right: 12px;
658
+ position: relative;
659
+ width: 133px;
660
+ height: 100px;
661
+
662
+ .item-img-dlete {
663
+ position: absolute;
664
+ padding: 8px;
665
+ font-size: 32px;
666
+ top: -16px;
667
+ right: -16px;
668
+ color: red;
669
+ cursor: pointer;
670
+ }
671
+ }
672
+
673
+ .small-img {
674
+ margin: 0;
675
+ height: 100px;
676
+ object-fit: cover;
677
+ }
678
+
679
+ .item-right {
680
+ padding-top: 24px;
681
+ }
682
+ }
683
+ }
684
+ }
685
+
686
+ .drag-handle {
687
+ position: absolute;
688
+ padding: 4px;
689
+ top: 6px;
690
+ right: 6px;
691
+ cursor: grab;
692
+ padding: 4px;
693
+ border-radius: 4px;
694
+
695
+ &:hover {
696
+ background-color: #f0f2f5;
697
+ }
698
+
699
+ &:active {
700
+ cursor: grabbing;
701
+ }
702
+
703
+ .drag-icon {
704
+ font-size: 16px;
705
+ color: #86909c;
706
+ }
707
+ }
708
+ }
709
+ </style>