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