@ddwl/ddwl-ui 1.2.3-beta.1 → 1.2.3-beta.2

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 (144) hide show
  1. package/dist/app.common.js +30684 -0
  2. package/dist/app.css +18 -0
  3. package/dist/app.umd.js +30703 -0
  4. package/dist/app.umd.min.js +18 -0
  5. package/dist/demo.html +1 -0
  6. package/package.json +5 -4
  7. package/src/assets/video-play.jpeg +0 -0
  8. package/src/lib/install/index.js +14 -0
  9. package/src/lib/slots/buttonGroup.vue +113 -0
  10. package/src/lib/slots/dict.vue +46 -0
  11. package/src/lib/slots/file.vue +36 -0
  12. package/src/lib/slots/icon.vue +74 -0
  13. package/src/lib/slots/index.js +11 -0
  14. package/src/lib/theme/alert.css +1 -0
  15. package/src/lib/theme/aside.css +1 -0
  16. package/src/lib/theme/autocomplete.css +1 -0
  17. package/src/lib/theme/avatar.css +1 -0
  18. package/src/lib/theme/backtop.css +1 -0
  19. package/src/lib/theme/badge.css +1 -0
  20. package/src/lib/theme/base.css +1 -0
  21. package/src/lib/theme/breadcrumb-item.css +0 -0
  22. package/src/lib/theme/breadcrumb.css +1 -0
  23. package/src/lib/theme/button-group.css +0 -0
  24. package/src/lib/theme/button.css +1 -0
  25. package/src/lib/theme/calendar.css +1 -0
  26. package/src/lib/theme/card.css +1 -0
  27. package/src/lib/theme/carousel-item.css +1 -0
  28. package/src/lib/theme/carousel.css +1 -0
  29. package/src/lib/theme/cascader-panel.css +1 -0
  30. package/src/lib/theme/cascader.css +1 -0
  31. package/src/lib/theme/checkbox-button.css +0 -0
  32. package/src/lib/theme/checkbox-group.css +0 -0
  33. package/src/lib/theme/checkbox.css +1 -0
  34. package/src/lib/theme/col.css +1 -0
  35. package/src/lib/theme/collapse-item.css +0 -0
  36. package/src/lib/theme/collapse.css +1 -0
  37. package/src/lib/theme/color-picker.css +1 -0
  38. package/src/lib/theme/container.css +1 -0
  39. package/src/lib/theme/date-picker.css +1 -0
  40. package/src/lib/theme/descriptions-item.css +1 -0
  41. package/src/lib/theme/descriptions.css +1 -0
  42. package/src/lib/theme/dialog.css +1 -0
  43. package/src/lib/theme/display.css +1 -0
  44. package/src/lib/theme/divider.css +1 -0
  45. package/src/lib/theme/drawer.css +1 -0
  46. package/src/lib/theme/dropdown-item.css +0 -0
  47. package/src/lib/theme/dropdown-menu.css +0 -0
  48. package/src/lib/theme/dropdown.css +1 -0
  49. package/src/lib/theme/empty.css +1 -0
  50. package/src/lib/theme/fonts/element-icons.ttf +0 -0
  51. package/src/lib/theme/fonts/element-icons.woff +0 -0
  52. package/src/lib/theme/footer.css +1 -0
  53. package/src/lib/theme/form-item.css +0 -0
  54. package/src/lib/theme/form.css +1 -0
  55. package/src/lib/theme/header.css +1 -0
  56. package/src/lib/theme/icon.css +1 -0
  57. package/src/lib/theme/image.css +1 -0
  58. package/src/lib/theme/index.css +1 -0
  59. package/src/lib/theme/infinite-scroll.css +0 -0
  60. package/src/lib/theme/infiniteScroll.css +0 -0
  61. package/src/lib/theme/input-number.css +1 -0
  62. package/src/lib/theme/input.css +1 -0
  63. package/src/lib/theme/link.css +1 -0
  64. package/src/lib/theme/loading.css +1 -0
  65. package/src/lib/theme/main.css +1 -0
  66. package/src/lib/theme/menu-item-group.css +0 -0
  67. package/src/lib/theme/menu-item.css +0 -0
  68. package/src/lib/theme/menu.css +1 -0
  69. package/src/lib/theme/message-box.css +1 -0
  70. package/src/lib/theme/message.css +1 -0
  71. package/src/lib/theme/notification.css +1 -0
  72. package/src/lib/theme/option-group.css +1 -0
  73. package/src/lib/theme/option.css +1 -0
  74. package/src/lib/theme/page-header.css +1 -0
  75. package/src/lib/theme/pagination.css +1 -0
  76. package/src/lib/theme/popconfirm.css +1 -0
  77. package/src/lib/theme/popover.css +1 -0
  78. package/src/lib/theme/popper.css +1 -0
  79. package/src/lib/theme/progress.css +1 -0
  80. package/src/lib/theme/radio-button.css +1 -0
  81. package/src/lib/theme/radio-group.css +1 -0
  82. package/src/lib/theme/radio.css +1 -0
  83. package/src/lib/theme/rate.css +1 -0
  84. package/src/lib/theme/reset.css +1 -0
  85. package/src/lib/theme/result.css +1 -0
  86. package/src/lib/theme/row.css +1 -0
  87. package/src/lib/theme/scrollbar.css +1 -0
  88. package/src/lib/theme/select-dropdown.css +1 -0
  89. package/src/lib/theme/select.css +1 -0
  90. package/src/lib/theme/skeleton-item.css +1 -0
  91. package/src/lib/theme/skeleton.css +1 -0
  92. package/src/lib/theme/slider.css +1 -0
  93. package/src/lib/theme/spinner.css +1 -0
  94. package/src/lib/theme/step.css +1 -0
  95. package/src/lib/theme/steps.css +1 -0
  96. package/src/lib/theme/submenu.css +0 -0
  97. package/src/lib/theme/switch.css +1 -0
  98. package/src/lib/theme/tab-pane.css +0 -0
  99. package/src/lib/theme/table-column.css +1 -0
  100. package/src/lib/theme/table.css +1 -0
  101. package/src/lib/theme/tabs.css +1 -0
  102. package/src/lib/theme/tag.css +1 -0
  103. package/src/lib/theme/time-picker.css +1 -0
  104. package/src/lib/theme/time-select.css +1 -0
  105. package/src/lib/theme/timeline-item.css +1 -0
  106. package/src/lib/theme/timeline.css +1 -0
  107. package/src/lib/theme/tooltip.css +1 -0
  108. package/src/lib/theme/transfer.css +1 -0
  109. package/src/lib/theme/tree.css +1 -0
  110. package/src/lib/theme/upload.css +1 -0
  111. package/src/main.js +70 -0
  112. package/src/packages/button/index.vue +36 -0
  113. package/src/packages/checkbox-group/index.vue +57 -0
  114. package/src/packages/descriptions/index.vue +124 -0
  115. package/src/packages/dialog/index.vue +172 -0
  116. package/src/packages/dialog-confirm/index.vue +99 -0
  117. package/src/packages/drawer/index.vue +136 -0
  118. package/src/packages/file-preview/index.vue +275 -0
  119. package/src/packages/file-preview/static/audio.png +0 -0
  120. package/src/packages/file-preview/static/video.png +0 -0
  121. package/src/packages/filter-tree/index.vue +292 -0
  122. package/src/packages/form/index.vue +149 -0
  123. package/src/packages/form-item/index.vue +199 -0
  124. package/src/packages/import-file/index.vue +173 -0
  125. package/src/packages/menu/index.vue +66 -0
  126. package/src/packages/menu/menuItem.vue +90 -0
  127. package/src/packages/popconfirm/index.vue +39 -0
  128. package/src/packages/radio-group/index.vue +57 -0
  129. package/src/packages/render/index.vue +14 -0
  130. package/src/packages/search-form/index.vue +257 -0
  131. package/src/packages/search-input/index.vue +68 -0
  132. package/src/packages/search-table/index.vue +93 -0
  133. package/src/packages/select/index.vue +74 -0
  134. package/src/packages/svg-icon/index.vue +43 -0
  135. package/src/packages/table/drag.png +0 -0
  136. package/src/packages/table/index.vue +453 -0
  137. package/src/packages/upload/index.vue +350 -0
  138. package/src/utils/constant.js +4 -0
  139. package/src/utils/index.js +77 -0
  140. package/src/utils/treeLib.js +190 -0
  141. package/dist/index.html +0 -1
  142. package/dist/js/app.js +0 -1
  143. package/dist/js/chunk-vendors.js +0 -17
  144. package/dist/static/css/app.2ec4a629.css +0 -1
@@ -0,0 +1,172 @@
1
+ <!-- 弹窗 -->
2
+ <template>
3
+ <el-dialog
4
+ :class="fullscreen ? 'cover-screen-dialog' : ''"
5
+ class="d-dialog"
6
+ v-bind="$attrs"
7
+ :title="title"
8
+ :close-on-click-modal="closeOnClickModal"
9
+ :visible.sync="visible"
10
+ :width="width"
11
+ v-on="$listeners"
12
+ @closed="closed"
13
+ >
14
+ <template slot="title">
15
+ <slot name="title" />
16
+ </template>
17
+ <slot />
18
+ <template slot="footer">
19
+ <slot name="footer" />
20
+ <div v-if="showButton" class="ar">
21
+ <el-button
22
+ type="primary"
23
+ :icon="submitButtonIcon"
24
+ :loading="loading"
25
+ @click="submit"
26
+ >
27
+ {{ submitButtonText }}
28
+ </el-button>
29
+ <el-button @click="cancel">
30
+ {{ cancelButtonText }}
31
+ </el-button>
32
+ </div>
33
+ </template>
34
+ </el-dialog>
35
+ </template>
36
+
37
+ <script>
38
+ export default {
39
+ name: 'DDialog',
40
+ components: {},
41
+ model: {
42
+ prop: 'modelValue',
43
+ event: 'change'
44
+ },
45
+ props: {
46
+ modelValue: {
47
+ type: Boolean,
48
+ default: false
49
+ },
50
+ title: {
51
+ type: String,
52
+ default: ''
53
+ },
54
+ closeOnClickModal: {
55
+ type: Boolean,
56
+ default: false
57
+ },
58
+ showButton: {
59
+ type: Boolean,
60
+ default: true
61
+ },
62
+ submitButtonText: {
63
+ type: String,
64
+ default: '确定'
65
+ },
66
+ submitButtonIcon: {
67
+ type: String,
68
+ default: ''
69
+ },
70
+ cancelButtonText: {
71
+ type: String,
72
+ default: '取消'
73
+ },
74
+ // 需要重置的表单ref, 支持ref字符串或ref对象或ref字符串|对象数组
75
+ formRefs: {
76
+ type: [String, Object, Array],
77
+ default: ''
78
+ },
79
+ width: {
80
+ type: String,
81
+ default: '70%'
82
+ },
83
+ maxWidth: {
84
+ type: String,
85
+ default: '70%'
86
+ },
87
+ // 是否高度撑满
88
+ fullscreen: {
89
+ type: Boolean,
90
+ default: false
91
+ }
92
+ },
93
+ data () {
94
+ return {
95
+ loading: false
96
+ }
97
+ },
98
+ computed: {
99
+ visible: {
100
+ get () {
101
+ return this.modelValue
102
+ },
103
+ set (value) {
104
+ this.$emit('change', value)
105
+ }
106
+ }
107
+ },
108
+ methods: {
109
+ getRef (ref) {
110
+ return typeof ref === 'string' ? this.$parent.$refs[ref] : ref
111
+ },
112
+ async submit () {
113
+ // 是否需要进行表单校验
114
+ if (this.formRefs) {
115
+ // 多表单校验
116
+ if (Array.isArray(this.formRefs)) {
117
+ await Promise.all(this.formRefs.map(ref => this.getRef(ref)?.validate()))
118
+ } else {
119
+ await this.getRef(this.formRefs)?.validate()
120
+ }
121
+ }
122
+ this.loading = true
123
+ this.$emit('submit', (status) => {
124
+ this.loading = false
125
+ if (!status) {
126
+ this.visible = false
127
+ }
128
+ })
129
+ },
130
+ cancel () {
131
+ this.$emit('cancel')
132
+ this.visible = false
133
+ },
134
+ /**
135
+ * @description: 弹窗关闭时清除表单校验
136
+ */
137
+ closed () {
138
+ this.$emit('closed')
139
+ if (this.formRefs) {
140
+ // 多表单校验
141
+ if (Array.isArray(this.formRefs)) {
142
+ this.formRefs.forEach(ref => this.getRef(ref)?.resetFields())
143
+ } else {
144
+ this.getRef(this.formRefs)?.resetFields()
145
+ }
146
+ }
147
+ }
148
+ }
149
+ }
150
+ </script>
151
+ <style lang="scss" scoped>
152
+ .d-dialog {
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: center;
156
+ :deep(.el-dialog) {
157
+ max-height: 90vh;
158
+ display: flex;
159
+ flex-direction: column;
160
+ margin: 0 !important;
161
+ .el-dialog__body {
162
+ flex: 1;
163
+ overflow: auto;
164
+ }
165
+ }
166
+ }
167
+ .cover-screen-dialog {
168
+ :deep(.el-dialog) {
169
+ height: 90vh;
170
+ }
171
+ }
172
+ </style>
@@ -0,0 +1,99 @@
1
+ <!-- 二次确认弹窗 -->
2
+ <template>
3
+ <div class="inline">
4
+ <span
5
+ v-if="button === 'text'"
6
+ slot="reference"
7
+ :class="`${buttonType || 'primary'}-text-btn ${disabled ? 'disabled': ''}`"
8
+ @click="() => { visible = true }"
9
+ >
10
+ {{ buttonName }}
11
+ </span>
12
+ <el-button
13
+ v-else
14
+ :disabled="disabled"
15
+ :icon="buttonIcon"
16
+ :type="buttonType"
17
+ @click="() => { visible = true }"
18
+ >
19
+ {{ buttonName }}
20
+ </el-button>
21
+ <d-dialog
22
+ v-model="visible"
23
+ :title="title"
24
+ width="374px"
25
+ append-to-body
26
+ @submit="submit"
27
+ >
28
+ <div class="d-dialog-confirm-container">
29
+ <i class="el-icon-warning" />
30
+ <p class="d-dialog-confirm-content">
31
+ <slot>您确定删除该信息?</slot>
32
+ </p>
33
+ </div>
34
+ </d-dialog>
35
+ </div>
36
+ </template>
37
+
38
+ <script>
39
+ import DDialog from '../dialog'
40
+
41
+ export default {
42
+ name: 'DDialogConfirm',
43
+ components: { DDialog },
44
+ props: {
45
+ buttonName: {
46
+ default: '批量删除',
47
+ type: String
48
+ },
49
+ buttonIcon: {
50
+ default: '',
51
+ type: String
52
+ },
53
+ buttonType: {
54
+ default: '',
55
+ type: String
56
+ },
57
+ title: {
58
+ default: '提示',
59
+ type: String
60
+ },
61
+ disabled: {
62
+ default: false,
63
+ type: Boolean
64
+ },
65
+ button: {
66
+ default: 'button',
67
+ type: String
68
+ }
69
+ },
70
+ data () {
71
+ return {
72
+ visible: false
73
+ }
74
+ },
75
+ methods: {
76
+ submit (callback) {
77
+ this.$emit('submit', callback)
78
+ }
79
+ }
80
+ }
81
+ </script>
82
+
83
+ <style lang="scss" scoped>
84
+ .d-dialog-confirm-container {
85
+ display: flex;
86
+ align-items: center;
87
+ & > i {
88
+ font-size: 28px;
89
+ color: rgb(255, 153, 0);
90
+ margin-right: 8px;
91
+ }
92
+ & > div {
93
+ flex: 1;
94
+ }
95
+ .d-dialog-confirm-content {
96
+ white-space: normal;
97
+ }
98
+ }
99
+ </style>
@@ -0,0 +1,136 @@
1
+ <!-- 抽屉 -->
2
+ <template>
3
+ <el-drawer
4
+ v-bind="$attrs"
5
+ :title="title"
6
+ :close-on-click-modal="false"
7
+ :visible.sync="visible"
8
+ :size="width"
9
+ v-on="$listeners"
10
+ @closed="closed"
11
+ >
12
+ <template slot="title">
13
+ <slot name="title" />
14
+ </template>
15
+ <div class="flex-col hf">
16
+ <div class="flex-1">
17
+ <slot />
18
+ </div>
19
+ <div v-if="showButton" class="ar mt16">
20
+ <el-button
21
+ type="primary"
22
+ :icon="submitButtonIcon"
23
+ :loading="loading"
24
+ @click="submit"
25
+ >
26
+ {{ submitButtonText }}
27
+ </el-button>
28
+ <el-button @click="cancel">
29
+ {{ cancelButtonText }}
30
+ </el-button>
31
+ </div>
32
+ </div>
33
+ </el-drawer>
34
+ </template>
35
+
36
+ <script>
37
+ export default {
38
+ name: 'DDrawer',
39
+ components: {},
40
+ model: {
41
+ prop: 'modelValue',
42
+ event: 'change'
43
+ },
44
+ props: {
45
+ modelValue: {
46
+ type: Boolean,
47
+ default: false
48
+ },
49
+ title: {
50
+ type: String,
51
+ default: ''
52
+ },
53
+ showButton: {
54
+ type: Boolean,
55
+ default: true
56
+ },
57
+ submitButtonText: {
58
+ type: String,
59
+ default: '确定'
60
+ },
61
+ submitButtonIcon: {
62
+ type: String,
63
+ default: ''
64
+ },
65
+ cancelButtonText: {
66
+ type: String,
67
+ default: '取消'
68
+ },
69
+ // 需要重置的表单ref
70
+ formRefs: {
71
+ type: [String, Array],
72
+ default: ''
73
+ },
74
+ width: {
75
+ type: String,
76
+ default: '70%'
77
+ }
78
+ },
79
+ data () {
80
+ return {
81
+ loading: false
82
+ }
83
+ },
84
+ computed: {
85
+ visible: {
86
+ get () {
87
+ return this.modelValue
88
+ },
89
+ set (value) {
90
+ this.$emit('change', value)
91
+ }
92
+ }
93
+ },
94
+ methods: {
95
+ getRef (ref) {
96
+ return typeof ref === 'string' ? this.$parent.$refs[ref] : ref
97
+ },
98
+ async submit () {
99
+ // 是否需要进行表单校验
100
+ if (this.formRefs) {
101
+ // 多表单校验
102
+ if (Array.isArray(this.formRefs)) {
103
+ await Promise.all(this.formRefs.map(ref => this.getRef(ref)?.validate()))
104
+ } else {
105
+ await this.getRef(this.formRefs)?.validate()
106
+ }
107
+ }
108
+ this.loading = true
109
+ this.$emit('submit', (status) => {
110
+ this.loading = false
111
+ if (!status) {
112
+ this.visible = false
113
+ }
114
+ })
115
+ },
116
+ cancel () {
117
+ this.$emit('cancel')
118
+ this.visible = false
119
+ },
120
+ /**
121
+ * @description: 弹窗关闭时清除表单校验
122
+ */
123
+ closed () {
124
+ this.$emit('closed')
125
+ if (this.formRefs) {
126
+ // 多表单校验
127
+ if (Array.isArray(this.formRefs)) {
128
+ this.formRefs.forEach(ref => this.getRef(ref)?.resetFields())
129
+ } else {
130
+ this.getRef(this.formRefs)?.resetFields()
131
+ }
132
+ }
133
+ }
134
+ }
135
+ }
136
+ </script>
@@ -0,0 +1,275 @@
1
+ <template>
2
+ <div
3
+ v-if="visible && list.length"
4
+ class="d-file-preview"
5
+ >
6
+ <div
7
+ ref="leftRef"
8
+ class="d-file-preview_left"
9
+ >
10
+ <el-tabs
11
+ v-model="activeTab"
12
+ @tab-click="handleTabClick"
13
+ >
14
+ <el-tab-pane
15
+ v-for="(v, i) in fileList"
16
+ :key="i"
17
+ :label="v.name"
18
+ :name="v.type"
19
+ />
20
+ </el-tabs>
21
+ <ul class="d-file-preview_list">
22
+ <li
23
+ v-for="(url, i) in currentFileList"
24
+ :key="i"
25
+ :class="currentFileIndex === i ? 'active_left' : ''"
26
+ @click="handleClickLeft(url, i)"
27
+ >
28
+ <el-image
29
+ style="width: 140px; height: 140px"
30
+ :src="getUrl(url)"
31
+ fit="cover"
32
+ />
33
+ </li>
34
+ </ul>
35
+ </div>
36
+ <el-image-viewer
37
+ v-show="activeTab === 'image'"
38
+ ref="viewer"
39
+ :mask-closable="false"
40
+ :append-to-body="false"
41
+ :url-list="[activeTab === 'image' ? currentFileList[currentFileIndex] : '']"
42
+ :on-close="close"
43
+ />
44
+ <div
45
+ v-show="activeTab !== 'image'"
46
+ class="d-file-preview_box"
47
+ >
48
+ <span
49
+ class="el-image-viewer__btn el-image-viewer__close"
50
+ @click="close"
51
+ >
52
+ <i class="el-icon-close" />
53
+ </span>
54
+ <audio
55
+ v-show="activeTab === 'audio'"
56
+ controls
57
+ style="width: 60%"
58
+ >
59
+ <source :src="currentFileList[currentFileIndex]">
60
+ 您的浏览器不支持 audio 元素。
61
+ </audio>
62
+ <video
63
+ v-show="activeTab === 'video'"
64
+ controls
65
+ style="min-width: 80%;max-height: 90%"
66
+ >
67
+ <source :src="currentFileList[currentFileIndex]">
68
+ 您的浏览器不支持 HTML5 video 标签。
69
+ </video>
70
+ </div>
71
+ </div>
72
+ </template>
73
+
74
+ <script>
75
+ import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
76
+ import {imgExts, videoExts, audioExts} from '../../utils/constant'
77
+ export default {
78
+ name: 'DFilePreview',
79
+ components: { ElImageViewer },
80
+ props: {
81
+ value: {
82
+ type: Boolean,
83
+ default: false
84
+ },
85
+ list: {
86
+ type: Array,
87
+ default: () => {
88
+ return [
89
+ { name: '图片', type: 'image', urls: [] },
90
+ { name: '视频', type: 'video', urls: [] },
91
+ { name: '音频', type: 'audio', urls: [] }
92
+ ]
93
+ }
94
+ },
95
+ defaultIndex: {
96
+ type: Number,
97
+ default: 0
98
+ }
99
+ },
100
+ data () {
101
+ return {
102
+ fileList: [],
103
+ currentFileIndex: 0,
104
+ activeTab: 'image',
105
+ visible: true
106
+ }
107
+ },
108
+ computed: {
109
+ currentFileList () {
110
+ return this.fileList.find(item => item.type === this.activeTab)?.urls || []
111
+ }
112
+ },
113
+ watch: {
114
+ list: {
115
+ handler (val) {
116
+ if (val.length && typeof (val[0]) === 'string') {
117
+ let arr = [
118
+ { name: '图片', type: 'image', urls: [] },
119
+ { name: '视频', type: 'video', urls: [] },
120
+ { name: '音频', type: 'audio', urls: [] }
121
+ ]
122
+ const exts = [imgExts, videoExts, audioExts]
123
+ val.map((url, index) => {
124
+ exts.forEach((item, i) => {
125
+ if (item.includes(url.substring(url.lastIndexOf('.') + 1))) {
126
+ arr[i].urls.push(url)
127
+ // 判断初始化tab、index
128
+ if (this.defaultIndex === index) {
129
+ this.activeTab = arr[i].type
130
+ this.currentFileIndex = arr[i].urls.length - 1
131
+ }
132
+ }
133
+ })
134
+ })
135
+ this.fileList = arr.filter(item => item.urls.length)
136
+ } else {
137
+ this.fileList = val
138
+ }
139
+ },
140
+ immediate: true,
141
+ deep: true
142
+ },
143
+ visible: {
144
+ handler (val) {
145
+ if (val) {
146
+ this.addEventEventFun()
147
+ } else {
148
+ this.removeEventFun()
149
+ }
150
+ }
151
+ }
152
+ },
153
+ methods: {
154
+ deviceSupportUninstall () {
155
+ this.$refs.viewer.deviceSupportUninstall()
156
+ },
157
+ deviceSupportInstall () {
158
+ this.$refs.viewer.deviceSupportInstall()
159
+ },
160
+ addEventEventFun () {
161
+ const elRef = this.$refs.leftRef
162
+ elRef.addEventListener('mouseenter', this.deviceSupportUninstall)
163
+ elRef.addEventListener('mouseleave', this.deviceSupportInstall)
164
+ },
165
+ removeEventFun () {
166
+ const elRef = this.$refs.leftRef
167
+ elRef.removeEventListener('mouseenter', this.deviceSupportUninstall)
168
+ elRef.removeEventListener('mouseleave', this.deviceSupportInstall)
169
+ },
170
+ close () {
171
+ this.visible = false
172
+ this.$emit('close')
173
+ },
174
+ getUrl (val) {
175
+ switch (this.activeTab) {
176
+ case 'video':
177
+ return require('./static/video.png')
178
+ case 'image':
179
+ return val
180
+ case 'audio':
181
+ return require('./static/audio.png')
182
+ default:
183
+ break
184
+ }
185
+ },
186
+ handleClickLeft (url, index) {
187
+ this.currentFileIndex = index
188
+ },
189
+ handleTabClick () {
190
+ this.currentFileIndex = 0
191
+ }
192
+ }
193
+ }
194
+ </script>
195
+
196
+ <style lang="scss" scoped>
197
+ .d-file-preview {
198
+ width: 100vw;
199
+ height: 100vh;
200
+ position: fixed;
201
+ top: 0;
202
+ left: 0;
203
+ z-index: 99999;
204
+
205
+ &_box {
206
+ position: fixed;
207
+ top: 0;
208
+ left: 0;
209
+ right: 0;
210
+ bottom: 0;
211
+ z-index: 1001;
212
+ padding-left: 250px;
213
+ background-color: rgba($color: #000000, $alpha: 0.5);
214
+ display: flex;
215
+ align-items: center;
216
+ justify-content: center;
217
+ }
218
+
219
+ &_left {
220
+ position: fixed;
221
+ z-index: 3000;
222
+ width: 220px;
223
+ height: 100vh;
224
+ top: 0;
225
+ left: 0;
226
+ bottom: 0;
227
+ overflow: hidden;
228
+ padding: 12px 12px 12px 20px;
229
+ display: flex;
230
+ flex-direction: column;
231
+ background: #606266;
232
+
233
+ :deep(.el-tabs__nav-wrap::after) {
234
+ background-color: transparent;
235
+ }
236
+
237
+ :deep(.el-tabs__item) {
238
+ color: #fff;
239
+ }
240
+
241
+ :deep(.el-tabs__item.is-active) {
242
+ color: #5f9efd;
243
+ }
244
+
245
+ &_list {
246
+ flex: 1;
247
+ overflow: auto;
248
+ text-align: center;
249
+ font-size: 0;
250
+
251
+ li {
252
+ margin-bottom: 7px;
253
+ border: 2px solid transparent;
254
+ margin-right: 2px;
255
+ }
256
+
257
+ .active_left {
258
+ border: 2px solid #5f9efd;
259
+ }
260
+
261
+ &::-webkit-scrollbar {
262
+ display: none;
263
+ }
264
+ }
265
+ }
266
+
267
+ :deep(.el-image-viewer__wrapper) {
268
+ left: calc(220px);
269
+ }
270
+
271
+ :deep(.el-icon-close) {
272
+ color: #fff;
273
+ }
274
+ }
275
+ </style>