bri-components 1.5.21 → 1.6.0

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 (153) hide show
  1. package/README.md +83 -83
  2. package/lib/styles/bundle.css +12 -12
  3. package/lib/styles/font/fontello.svg +31 -31
  4. package/package.json +125 -125
  5. package/src/components/Error/Error403.vue +42 -42
  6. package/src/components/Error/Error404.vue +40 -40
  7. package/src/components/Error/Error500.vue +51 -51
  8. package/src/components/Error/error.less +162 -162
  9. package/src/components/Error/errorBack.vue +40 -40
  10. package/src/components/controls/DshControlInput.vue +195 -195
  11. package/src/components/controls/base/BriUpload/BriUpload.vue +434 -434
  12. package/src/components/controls/base/BriUpload/BriUploadImage.vue +377 -377
  13. package/src/components/controls/base/BriUpload/uploadList.vue +727 -727
  14. package/src/components/controls/base/BriUpload/uploadMixin.js +446 -446
  15. package/src/components/controls/base/DshCascader/DshCascader.vue +215 -215
  16. package/src/components/controls/base/DshCascader/components/cascaderModal.vue +366 -366
  17. package/src/components/controls/base/DshCascader/components/cascaderPicker.vue +416 -416
  18. package/src/components/controls/base/DshCascader/components/cascaderSimple.vue +141 -141
  19. package/src/components/controls/base/DshCascader/components/cascaderTree.vue +151 -151
  20. package/src/components/controls/base/DshCoordinates.vue +585 -577
  21. package/src/components/controls/base/DshDate/DshDate.vue +191 -191
  22. package/src/components/controls/base/DshDate/DshDaterange.vue +186 -186
  23. package/src/components/controls/base/DshDivider.vue +201 -201
  24. package/src/components/controls/base/DshEditor.vue +274 -274
  25. package/src/components/controls/base/DshInput/BriInputs.vue +166 -166
  26. package/src/components/controls/base/DshInput/DshInput.vue +260 -260
  27. package/src/components/controls/base/DshNumber/BriInputNumber/BriInputNumber.vue +435 -435
  28. package/src/components/controls/base/DshNumber/BriInputNumber/mixins/emitter.js +34 -34
  29. package/src/components/controls/base/DshNumber/BriInputNumber/mixins/form.js +14 -14
  30. package/src/components/controls/base/DshNumber/BriInputNumber/utils/assist.js +322 -322
  31. package/src/components/controls/base/DshNumber/DshNumber.vue +143 -143
  32. package/src/components/controls/base/DshNumber/DshNumberange.vue +109 -109
  33. package/src/components/controls/base/DshSelect/DshCheckbox.vue +168 -168
  34. package/src/components/controls/base/DshSelect/DshSelect.vue +180 -180
  35. package/src/components/controls/base/DshSelect/DshSelectAll.vue +269 -269
  36. package/src/components/controls/base/DshSwitch/DshSwitch.vue +115 -115
  37. package/src/components/controls/control.less +324 -324
  38. package/src/components/controls/controlMap.js +117 -117
  39. package/src/components/controls/extra/DshColor.vue +81 -81
  40. package/src/components/controls/extra/DshThemeColor.vue +100 -100
  41. package/src/components/controls/extra/DshThemeIcon.vue +122 -122
  42. package/src/components/controls/mixins/cascaderMixin.js +325 -325
  43. package/src/components/controls/mixins/cascaderPickerMixin.js +227 -227
  44. package/src/components/controls/mixins/cascaderTableMixin.js +130 -130
  45. package/src/components/controls/mixins/controlMixin.js +393 -393
  46. package/src/components/controls/mixins/dateMixin.js +149 -149
  47. package/src/components/controls/mixins/flatTableMixin.js +111 -111
  48. package/src/components/controls/mixins/numberMixin.js +112 -112
  49. package/src/components/controls/mixins/selectMixin.js +233 -233
  50. package/src/components/controls/mixins/switchMixin.js +87 -87
  51. package/src/components/controls/mixins/userAndDepartMixin.js +260 -260
  52. package/src/components/controls/senior/DshLabels.vue +333 -333
  53. package/src/components/controls/senior/DshPackage.vue +57 -57
  54. package/src/components/controls/senior/cascaderTable.vue +213 -213
  55. package/src/components/controls/senior/correlation.vue +135 -135
  56. package/src/components/controls/senior/flatTable.vue +138 -138
  57. package/src/components/controls/senior/selectDepartments.vue +399 -399
  58. package/src/components/controls/senior/selectUsers/departMenu.vue +293 -293
  59. package/src/components/controls/senior/selectUsers/selectUsers.vue +712 -712
  60. package/src/components/controls/special/DshBack.vue +42 -42
  61. package/src/components/controls/special/DshUndeveloped.vue +41 -41
  62. package/src/components/form/DshAdvSearch.vue +510 -510
  63. package/src/components/form/DshDefaultSearch.vue +260 -260
  64. package/src/components/form/DshForm.vue +494 -494
  65. package/src/components/form/searchMixin.js +376 -376
  66. package/src/components/list/BriCard.vue +95 -95
  67. package/src/components/list/BriTable.vue +205 -205
  68. package/src/components/list/BriTree.vue +529 -529
  69. package/src/components/list/BriTreeItem.vue +163 -163
  70. package/src/components/list/DshBox/DshBox.vue +219 -219
  71. package/src/components/list/DshBox/DshCard.vue +446 -446
  72. package/src/components/list/DshBox/DshCrossTable.vue +827 -827
  73. package/src/components/list/DshBox/DshList.vue +404 -404
  74. package/src/components/list/DshBox/DshPanel.vue +669 -669
  75. package/src/components/list/DshBox/DshSingleData.vue +119 -119
  76. package/src/components/list/DshBox/DshTable.vue +239 -239
  77. package/src/components/list/DshCascaderTable.vue +115 -115
  78. package/src/components/list/DshFlatTable.vue +337 -337
  79. package/src/components/list/DshPage.vue +194 -194
  80. package/src/components/list/DshTreeTable.vue +113 -113
  81. package/src/components/list/common/importModal.vue +243 -243
  82. package/src/components/list/common/quoteListModal.vue +206 -206
  83. package/src/components/list/mixins/DshCascaderTableMixin.js +278 -278
  84. package/src/components/list/mixins/DshFlatTableMixin.js +509 -509
  85. package/src/components/list/mixins/DshTreeTableMixin.js +286 -286
  86. package/src/components/list/mixins/tableBaseMixin.js +1653 -1653
  87. package/src/components/list/mixins/treeTableBaseMixin.js +145 -145
  88. package/src/components/other/BriAvatar.vue +166 -166
  89. package/src/components/other/BriCode.vue +125 -125
  90. package/src/components/other/BriCollapseTree.vue +207 -207
  91. package/src/components/other/BriGantt.vue +1087 -1087
  92. package/src/components/other/BriIframe.vue +116 -116
  93. package/src/components/other/BriLoading.vue +171 -171
  94. package/src/components/other/BriSvg.vue +27 -27
  95. package/src/components/other/DshColorPanel.vue +128 -128
  96. package/src/components/other/DshMenuNav.vue +188 -188
  97. package/src/components/small/BriButton.vue +71 -71
  98. package/src/components/small/BriDrawer.vue +169 -169
  99. package/src/components/small/BriTooltip.vue +87 -87
  100. package/src/components/small/DshBtnModal.vue +68 -68
  101. package/src/components/small/DshButtons.vue +324 -324
  102. package/src/components/small/DshDropdown.vue +225 -225
  103. package/src/components/small/DshIcons.vue +59 -59
  104. package/src/components/small/DshListRender.js +21 -21
  105. package/src/components/small/DshModal.vue +160 -160
  106. package/src/components/small/DshSteps.vue +141 -141
  107. package/src/components/small/DshTabs.vue +598 -598
  108. package/src/components/small/DshTabsSet.vue +309 -309
  109. package/src/components/small/DshTags.vue +251 -251
  110. package/src/components/small/DshTitle.vue +50 -50
  111. package/src/components/small/render.js +20 -20
  112. package/src/components/unit/DshFormUnit.vue +398 -398
  113. package/src/components/unit/DshListUnit.vue +115 -115
  114. package/src/components/unit/unitMixin.js +86 -86
  115. package/src/data/index.js +4 -4
  116. package/src/index.js +285 -285
  117. package/src/styles/bundle.css +12 -12
  118. package/src/styles/components/BriButton.less +307 -307
  119. package/src/styles/components/BriTable.less +344 -344
  120. package/src/styles/components/DshModal.less +257 -257
  121. package/src/styles/components/index.less +3 -3
  122. package/src/styles/global/animate.less +11 -11
  123. package/src/styles/global/base.less +45 -45
  124. package/src/styles/global/box.less +186 -186
  125. package/src/styles/global/control.less +122 -122
  126. package/src/styles/global/flex.less +282 -282
  127. package/src/styles/global/global.less +8 -8
  128. package/src/styles/global/text.less +59 -59
  129. package/src/styles/global/variables.less +85 -85
  130. package/src/styles/iconfont/iconfont.css +254 -254
  131. package/src/styles/iconfont/iconfont.json +422 -422
  132. package/src/styles/iconfont/iconfont.svg +137 -137
  133. package/src/styles/index.less +26 -26
  134. package/src/styles/reset-easytable.less +21 -21
  135. package/src/styles/reset-iview-controls.less +145 -145
  136. package/src/styles/reset-iview-other.less +49 -49
  137. package/src/styles/reset-iview-variables.less +43 -43
  138. package/src/styles/reset.less +45 -45
  139. package/src/utils/index.js +3 -5
  140. package/lib/0.bri-components.min.js +0 -1
  141. package/lib/1.bri-components.min.js +0 -1
  142. package/lib/10.bri-components.min.js +0 -1
  143. package/lib/11.bri-components.min.js +0 -1
  144. package/lib/2.bri-components.min.js +0 -1
  145. package/lib/3.bri-components.min.js +0 -1
  146. package/lib/4.bri-components.min.js +0 -1
  147. package/lib/5.bri-components.min.js +0 -1
  148. package/lib/6.bri-components.min.js +0 -1
  149. package/lib/7.bri-components.min.js +0 -1
  150. package/lib/8.bri-components.min.js +0 -1
  151. package/lib/9.bri-components.min.js +0 -1
  152. package/lib/bri-components.min.js +0 -18
  153. package/src/utils/table.js +0 -175
@@ -1,434 +1,434 @@
1
- <template>
2
- <bri-upload-image
3
- v-if="propsObj._kind === 'uploadImage'"
4
- :value="value"
5
- :propsObj="propsObj"
6
- @change="change"
7
- ></bri-upload-image>
8
-
9
- <!-- 上传 -->
10
- <div
11
- v-else
12
- :class="{
13
- [prefixCls]: true,
14
- 'BriUpload': true,
15
- 'BriUpload-disabled': canEdit && disabled,
16
- 'BriUpload-readonly': !canEdit,
17
- 'BriUpload-unit': !canEdit && isInTable,
18
- [`BriUpload-${showMode}`]: true,
19
- }"
20
- @click="clickUpload"
21
- @drop.prevent="handleDrop"
22
- @paste="handlePaste"
23
- @dragover.prevent="dragOver = true"
24
- @dragleave.prevent="dragOver = false"
25
- >
26
-
27
- <!-- 编辑 -->
28
- <div
29
- v-if="!disabled"
30
- :class="classes"
31
- >
32
- <input
33
- ref="input"
34
- :class="[prefixCls + '-input']"
35
- type="file"
36
- :accept="accept"
37
- :multiple="multipleMode"
38
- :disabled="disabled || percent > 0"
39
- :webkitdirectory="false"
40
- @change="handleChange"
41
- >
42
-
43
- <!-- 上传按钮 -->
44
- <slot>
45
- <div :class="`BriUpload-${showMode}-add`">
46
- <!-- 上传 -->
47
- <i-circle
48
- v-if="percent"
49
- :class="`BriUpload-${showMode}-circle`"
50
- :percent="percent"
51
- :stroke-color="percentColor"
52
- >
53
- <!-- 上传完 -->
54
- <Icon
55
- v-if="Number(percent) === 100"
56
- type="ios-checkmark"
57
- ></Icon>
58
- <!-- 上传中 -->
59
- <span v-else-if="showMode === 'old'">
60
- {{ percent }}%
61
- </span>
62
- </i-circle>
63
-
64
- <!-- 未上传 -->
65
- <template v-else>
66
- <dsh-icons
67
- :list="$getOperationList([subType === 'image' ? 'add' : 'upload'])"
68
- @click="clickUpload"
69
- ></dsh-icons>
70
-
71
- <span v-if="showMode !== 'inline'">
72
- 点击上传{{ subType === 'image' ? "图片" : "文件" }}
73
- </span>
74
- </template>
75
- </div>
76
- </slot>
77
- </div>
78
-
79
- <!-- 编辑和查看 列表 -->
80
- <slot name="list">
81
- <upload-list
82
- :class="{
83
- ...commonClass,
84
- 'bri-control-edit': false
85
- }"
86
- :showMode="showMode"
87
- :canEdit="!disabled"
88
- :files="curValList"
89
- :propsObj="propsObj"
90
- :emptyShowVal="emptyShowVal"
91
- :isShowEditIcon="isShowEditIcon"
92
- @deleteItem="clickDeteItem"
93
- @editItemName="handleEditName"
94
- ></upload-list>
95
- </slot>
96
- </div>
97
- </template>
98
-
99
- <script>
100
- import controlMixin from "../../mixins/controlMixin.js";
101
- import uploadMixin from "./uploadMixin.js";
102
- import BriUploadImage from "./BriUploadImage.vue";
103
- import uploadList from "./uploadList.vue";
104
-
105
- const prefixCls = "ivu-upload";
106
- const imageType = ["jpg", "png", "gif", "jpeg", "tiff", "swf"];
107
- const documentType = ["txt", "doc", "xls", "ppt", "docx", "xlsx", "pptx", "pdf", "xmind"];
108
- const videoType = ["flv", "rmvb", "mp4", "mvb"];
109
- const audioType = ["wma", "mp3", "m4a"];
110
- const packageType = ["rar", "zip"];
111
- const fileTypes = [
112
- ...documentType,
113
- ...imageType,
114
- ...videoType,
115
- ...audioType,
116
- ...packageType
117
- ];
118
-
119
- export default {
120
- name: "BriUpload",
121
- mixins: [
122
- controlMixin,
123
- uploadMixin
124
- ],
125
- components: {
126
- BriUploadImage,
127
- uploadList
128
- },
129
- props: {},
130
- data () {
131
- return {
132
- prefixCls: prefixCls,
133
- dragOver: false,
134
-
135
- operationMap: {
136
- upload: {
137
- customIcon: "bico-upload1"
138
- },
139
- add: {
140
- icon: "md-add"
141
- }
142
- }
143
- };
144
- },
145
- computed: {
146
- selfPropsObj () {
147
- return {
148
- _fileType: "file", // "file", "image"
149
- _showMode: this.isHeightAuto ? "old" : "inline", // 宽度为100%、且不在表格字段里的 显示老版
150
-
151
- _multiple: true,
152
- _useType: "drag",
153
- _maxSize: 1024 * 1024 * 2, // 根据四局要求,限制文件为2G
154
- _format: [],
155
-
156
- ...this.propsObj,
157
- ...this.commonDealPropsObj
158
- };
159
- },
160
- subType () {
161
- return this.selfPropsObj._fileType;
162
- },
163
- showMode () {
164
- return this.isInTable
165
- ? this.selfPropsObj._inTableStyle == "list" && this.disabled
166
- ? "tableList"
167
- : "inline"
168
- : this.selfPropsObj._showMode;
169
- },
170
- useType () {
171
- return this.selfPropsObj._useType;
172
- },
173
- format () {
174
- return this.selfPropsObj._format;
175
- },
176
- maxSize () {
177
- return this.selfPropsObj._maxSize;
178
- },
179
- // 限制文件格式
180
- accept () {
181
- return (this.subType === "image" ? imageType : fileTypes)
182
- .map(type => `.${type}`)
183
- .join();
184
- },
185
- isShowEditIcon () {
186
- // 因为编辑name 需要这三个参数,因此没有这三个参数时不显示此按钮
187
- return this.compKey && this.appKey && this.modKey && !!(this.$getHttpPathMap({}).file && this.$getHttpPathMap({}).file.updateFileName);
188
- },
189
- classes () {
190
- return {
191
- [`${prefixCls}`]: true,
192
- [`${prefixCls}-select`]: this.useType === "select",
193
- [`${prefixCls}-drag`]: this.useType === "drag",
194
- [`${prefixCls}-dragOver`]: this.useType === "drag" && this.dragOver,
195
- [`BriUpload-${this.showMode}-wrapper`]: true
196
- };
197
- }
198
- },
199
- methods: {
200
- clickUpload () {
201
- if (!this.disabled) {
202
- this.$refs.input.click();
203
- }
204
- },
205
- clickDeteItem (fileItem, fileIndex) {
206
- this.curValList.splice(fileIndex, 1);
207
- this.curValList = [...this.curValList];
208
- },
209
- handleEditName (fileItem) {
210
- this.$https({
211
- url: {
212
- ...this.computedUrlModule,
213
- name: "updateFileName"
214
- },
215
- params: fileItem
216
- });
217
- },
218
- successCb (res, data) {
219
- if (data.res === 0) {
220
- if (this.multipleMode) {
221
- this.curValList = [
222
- ...this.curValList,
223
- data.data
224
- ];
225
- } else {
226
- this.curValList = [
227
- data.data
228
- ];
229
- }
230
- } else {
231
- this.$Message.error({
232
- content: `操作失败!${this.$getMsgText(data.msg)}`,
233
- duration: 4
234
- });
235
- }
236
- },
237
-
238
- handleChange (e) {
239
- if (e.target.files) {
240
- this.dealUpload(e.target.files);
241
- this.$refs.input.value = null;
242
- }
243
- },
244
- handleDrop (e) {
245
- this.dragOver = false;
246
- this.dealUpload(e.dataTransfer.files);
247
- },
248
- handlePaste (e) {
249
- this.dealUpload(e.clipboardData.files);
250
- },
251
- dealUpload (files) {
252
- if (!this.disabled) {
253
- let postFiles = Array.prototype.slice.call(files);
254
- if (!this.multipleMode) {
255
- postFiles = postFiles.slice(0, 1);
256
- }
257
- postFiles.forEach(fileItem => {
258
- if (
259
- (!this.format.length || this.format.some(item => item.toLocaleLowerCase() === fileItem.name.split(".").pop().toLocaleLowerCase())) &&
260
- (fileItem.size <= this.maxSize * 1024)
261
- ) {
262
- this.handlePost(fileItem);
263
- }
264
- });
265
- }
266
- }
267
- }
268
- };
269
- </script>
270
-
271
- <style lang="less">
272
- .BriUpload {
273
- width: 100%;
274
- height: 100%;
275
- border: 1px solid @borderColor;
276
- border-radius: @borderRadius;
277
- background-color: @white;
278
- overflow: hidden;
279
- position: relative;
280
-
281
- &-old,
282
- &-new,
283
- &-inline {
284
- display: flex;
285
-
286
- &-wrapper {
287
- border: none!important;
288
- border-radius: 0px !important;
289
-
290
- &:hover {
291
- border: none;
292
- }
293
- }
294
-
295
- &-add {
296
- .dsh-flex-col-center-center();
297
- cursor: pointer;
298
- position: relative;
299
- }
300
-
301
- &-circle {
302
- position: absolute;
303
- top: 0;
304
- left: 0;
305
- bottom: 0;
306
- right: 0;
307
- margin: auto;
308
- border-radius: 50%;
309
- }
310
- }
311
-
312
- &-old {
313
- overflow: hidden;
314
-
315
- &-wrapper {
316
- min-width: 120px;
317
- height: 100%;
318
- margin: 16px 0px 16px 16px;
319
- }
320
-
321
- &-add {
322
- width: 120px;
323
- height: 120px;
324
- border: 1px @borderColor dashed;
325
- border-radius: @borderRadius;
326
- color: @themeColor;
327
-
328
- &:hover {
329
- border-color: @themeColor;
330
- background-color: @theme-focus;
331
- }
332
- }
333
-
334
- &-circle {
335
- width: 50px!important;
336
- height: 50px!important;
337
- background-color: @inputBg-readonly;
338
- color: @themeColor;
339
-
340
- i {
341
- color: @scuess-color;
342
- font-size: 40px;
343
- }
344
- }
345
- }
346
-
347
- &-new,
348
- &-inline {
349
- &-wrapper {
350
- min-width: 32px;
351
- height: 32px;
352
- line-height: 32px;
353
- background-color: @border-readonly;
354
- }
355
-
356
- &-add {
357
- height: 32px;
358
- border: none;
359
- border-radius: 0px;
360
- background-color: @btn-hover;
361
- color: @textColor;
362
-
363
- &:hover {
364
- color: @themeColor;
365
- background-color: @theme-focus;
366
- }
367
- }
368
-
369
- &-circle {
370
- width: 24px!important;
371
- height: 24px!important;
372
- background-color: #f4f5fa;
373
-
374
- i {
375
- color: @scuess-color;
376
- font-size: 24px;
377
- }
378
- }
379
- }
380
-
381
- &-readonly {
382
- border: none;
383
- border-radius: 0px;
384
- background-color: transparent;
385
-
386
- .uploadList {
387
- &-old {
388
- margin: 0px;
389
- }
390
-
391
- &-list {
392
- .item {
393
- flex: 0 0 80px;
394
- height: 80px;
395
- }
396
- }
397
- }
398
- }
399
-
400
- &-disabled {
401
- .bri-control-disabled();
402
-
403
- .uploadList {
404
- &-old {
405
- margin: 0px;
406
- }
407
-
408
- &-list {
409
- .item {
410
- flex: 0 0 80px;
411
- height: 80px;
412
- }
413
- }
414
-
415
- &-nodata {
416
- color: @placeholder-disabled-color;
417
- text-indent: 7px;
418
- text-align: left;
419
- }
420
- &-inline-nodata {
421
- color: @placeholder-disabled-color;
422
- }
423
- }
424
- }
425
-
426
- &-unit {
427
- .uploadList {
428
- &-inline-nodata {
429
- .bri-control-nodata();
430
- }
431
- }
432
- }
433
- }
434
- </style>
1
+ <template>
2
+ <bri-upload-image
3
+ v-if="propsObj._kind === 'uploadImage'"
4
+ :value="value"
5
+ :propsObj="propsObj"
6
+ @change="change"
7
+ ></bri-upload-image>
8
+
9
+ <!-- 上传 -->
10
+ <div
11
+ v-else
12
+ :class="{
13
+ [prefixCls]: true,
14
+ 'BriUpload': true,
15
+ 'BriUpload-disabled': canEdit && disabled,
16
+ 'BriUpload-readonly': !canEdit,
17
+ 'BriUpload-unit': !canEdit && isInTable,
18
+ [`BriUpload-${showMode}`]: true,
19
+ }"
20
+ @click="clickUpload"
21
+ @drop.prevent="handleDrop"
22
+ @paste="handlePaste"
23
+ @dragover.prevent="dragOver = true"
24
+ @dragleave.prevent="dragOver = false"
25
+ >
26
+
27
+ <!-- 编辑 -->
28
+ <div
29
+ v-if="!disabled"
30
+ :class="classes"
31
+ >
32
+ <input
33
+ ref="input"
34
+ :class="[prefixCls + '-input']"
35
+ type="file"
36
+ :accept="accept"
37
+ :multiple="multipleMode"
38
+ :disabled="disabled || percent > 0"
39
+ :webkitdirectory="false"
40
+ @change="handleChange"
41
+ >
42
+
43
+ <!-- 上传按钮 -->
44
+ <slot>
45
+ <div :class="`BriUpload-${showMode}-add`">
46
+ <!-- 上传 -->
47
+ <i-circle
48
+ v-if="percent"
49
+ :class="`BriUpload-${showMode}-circle`"
50
+ :percent="percent"
51
+ :stroke-color="percentColor"
52
+ >
53
+ <!-- 上传完 -->
54
+ <Icon
55
+ v-if="Number(percent) === 100"
56
+ type="ios-checkmark"
57
+ ></Icon>
58
+ <!-- 上传中 -->
59
+ <span v-else-if="showMode === 'old'">
60
+ {{ percent }}%
61
+ </span>
62
+ </i-circle>
63
+
64
+ <!-- 未上传 -->
65
+ <template v-else>
66
+ <dsh-icons
67
+ :list="$getOperationList([subType === 'image' ? 'add' : 'upload'])"
68
+ @click="clickUpload"
69
+ ></dsh-icons>
70
+
71
+ <span v-if="showMode !== 'inline'">
72
+ 点击上传{{ subType === 'image' ? "图片" : "文件" }}
73
+ </span>
74
+ </template>
75
+ </div>
76
+ </slot>
77
+ </div>
78
+
79
+ <!-- 编辑和查看 列表 -->
80
+ <slot name="list">
81
+ <upload-list
82
+ :class="{
83
+ ...commonClass,
84
+ 'bri-control-edit': false
85
+ }"
86
+ :showMode="showMode"
87
+ :canEdit="!disabled"
88
+ :files="curValList"
89
+ :propsObj="propsObj"
90
+ :emptyShowVal="emptyShowVal"
91
+ :isShowEditIcon="isShowEditIcon"
92
+ @deleteItem="clickDeteItem"
93
+ @editItemName="handleEditName"
94
+ ></upload-list>
95
+ </slot>
96
+ </div>
97
+ </template>
98
+
99
+ <script>
100
+ import controlMixin from "../../mixins/controlMixin.js";
101
+ import uploadMixin from "./uploadMixin.js";
102
+ import BriUploadImage from "./BriUploadImage.vue";
103
+ import uploadList from "./uploadList.vue";
104
+
105
+ const prefixCls = "ivu-upload";
106
+ const imageType = ["jpg", "png", "gif", "jpeg", "tiff", "swf"];
107
+ const documentType = ["txt", "doc", "xls", "ppt", "docx", "xlsx", "pptx", "pdf", "xmind"];
108
+ const videoType = ["flv", "rmvb", "mp4", "mvb"];
109
+ const audioType = ["wma", "mp3", "m4a"];
110
+ const packageType = ["rar", "zip"];
111
+ const fileTypes = [
112
+ ...documentType,
113
+ ...imageType,
114
+ ...videoType,
115
+ ...audioType,
116
+ ...packageType
117
+ ];
118
+
119
+ export default {
120
+ name: "BriUpload",
121
+ mixins: [
122
+ controlMixin,
123
+ uploadMixin
124
+ ],
125
+ components: {
126
+ BriUploadImage,
127
+ uploadList
128
+ },
129
+ props: {},
130
+ data () {
131
+ return {
132
+ prefixCls: prefixCls,
133
+ dragOver: false,
134
+
135
+ operationMap: {
136
+ upload: {
137
+ customIcon: "bico-upload1"
138
+ },
139
+ add: {
140
+ icon: "md-add"
141
+ }
142
+ }
143
+ };
144
+ },
145
+ computed: {
146
+ selfPropsObj () {
147
+ return {
148
+ _fileType: "file", // "file", "image"
149
+ _showMode: this.isHeightAuto ? "old" : "inline", // 宽度为100%、且不在表格字段里的 显示老版
150
+
151
+ _multiple: true,
152
+ _useType: "drag",
153
+ _maxSize: 1024 * 1024 * 2, // 根据四局要求,限制文件为2G
154
+ _format: [],
155
+
156
+ ...this.propsObj,
157
+ ...this.commonDealPropsObj
158
+ };
159
+ },
160
+ subType () {
161
+ return this.selfPropsObj._fileType;
162
+ },
163
+ showMode () {
164
+ return this.isInTable
165
+ ? this.selfPropsObj._inTableStyle == "list" && this.disabled
166
+ ? "tableList"
167
+ : "inline"
168
+ : this.selfPropsObj._showMode;
169
+ },
170
+ useType () {
171
+ return this.selfPropsObj._useType;
172
+ },
173
+ format () {
174
+ return this.selfPropsObj._format;
175
+ },
176
+ maxSize () {
177
+ return this.selfPropsObj._maxSize;
178
+ },
179
+ // 限制文件格式
180
+ accept () {
181
+ return (this.subType === "image" ? imageType : fileTypes)
182
+ .map(type => `.${type}`)
183
+ .join();
184
+ },
185
+ isShowEditIcon () {
186
+ // 因为编辑name 需要这三个参数,因此没有这三个参数时不显示此按钮
187
+ return this.compKey && this.appKey && this.modKey && !!(this.$getHttpPathMap({}).file && this.$getHttpPathMap({}).file.updateFileName);
188
+ },
189
+ classes () {
190
+ return {
191
+ [`${prefixCls}`]: true,
192
+ [`${prefixCls}-select`]: this.useType === "select",
193
+ [`${prefixCls}-drag`]: this.useType === "drag",
194
+ [`${prefixCls}-dragOver`]: this.useType === "drag" && this.dragOver,
195
+ [`BriUpload-${this.showMode}-wrapper`]: true
196
+ };
197
+ }
198
+ },
199
+ methods: {
200
+ clickUpload () {
201
+ if (!this.disabled) {
202
+ this.$refs.input.click();
203
+ }
204
+ },
205
+ clickDeteItem (fileItem, fileIndex) {
206
+ this.curValList.splice(fileIndex, 1);
207
+ this.curValList = [...this.curValList];
208
+ },
209
+ handleEditName (fileItem) {
210
+ this.$https({
211
+ url: {
212
+ ...this.computedUrlModule,
213
+ name: "updateFileName"
214
+ },
215
+ params: fileItem
216
+ });
217
+ },
218
+ successCb (res, data) {
219
+ if (data.res === 0) {
220
+ if (this.multipleMode) {
221
+ this.curValList = [
222
+ ...this.curValList,
223
+ data.data
224
+ ];
225
+ } else {
226
+ this.curValList = [
227
+ data.data
228
+ ];
229
+ }
230
+ } else {
231
+ this.$Message.error({
232
+ content: `操作失败!${this.$getMsgText(data.msg)}`,
233
+ duration: 4
234
+ });
235
+ }
236
+ },
237
+
238
+ handleChange (e) {
239
+ if (e.target.files) {
240
+ this.dealUpload(e.target.files);
241
+ this.$refs.input.value = null;
242
+ }
243
+ },
244
+ handleDrop (e) {
245
+ this.dragOver = false;
246
+ this.dealUpload(e.dataTransfer.files);
247
+ },
248
+ handlePaste (e) {
249
+ this.dealUpload(e.clipboardData.files);
250
+ },
251
+ dealUpload (files) {
252
+ if (!this.disabled) {
253
+ let postFiles = Array.prototype.slice.call(files);
254
+ if (!this.multipleMode) {
255
+ postFiles = postFiles.slice(0, 1);
256
+ }
257
+ postFiles.forEach(fileItem => {
258
+ if (
259
+ (!this.format.length || this.format.some(item => item.toLocaleLowerCase() === fileItem.name.split(".").pop().toLocaleLowerCase())) &&
260
+ (fileItem.size <= this.maxSize * 1024)
261
+ ) {
262
+ this.handlePost(fileItem);
263
+ }
264
+ });
265
+ }
266
+ }
267
+ }
268
+ };
269
+ </script>
270
+
271
+ <style lang="less">
272
+ .BriUpload {
273
+ width: 100%;
274
+ height: 100%;
275
+ border: 1px solid @borderColor;
276
+ border-radius: @borderRadius;
277
+ background-color: @white;
278
+ overflow: hidden;
279
+ position: relative;
280
+
281
+ &-old,
282
+ &-new,
283
+ &-inline {
284
+ display: flex;
285
+
286
+ &-wrapper {
287
+ border: none!important;
288
+ border-radius: 0px !important;
289
+
290
+ &:hover {
291
+ border: none;
292
+ }
293
+ }
294
+
295
+ &-add {
296
+ .dsh-flex-col-center-center();
297
+ cursor: pointer;
298
+ position: relative;
299
+ }
300
+
301
+ &-circle {
302
+ position: absolute;
303
+ top: 0;
304
+ left: 0;
305
+ bottom: 0;
306
+ right: 0;
307
+ margin: auto;
308
+ border-radius: 50%;
309
+ }
310
+ }
311
+
312
+ &-old {
313
+ overflow: hidden;
314
+
315
+ &-wrapper {
316
+ min-width: 120px;
317
+ height: 100%;
318
+ margin: 16px 0px 16px 16px;
319
+ }
320
+
321
+ &-add {
322
+ width: 120px;
323
+ height: 120px;
324
+ border: 1px @borderColor dashed;
325
+ border-radius: @borderRadius;
326
+ color: @themeColor;
327
+
328
+ &:hover {
329
+ border-color: @themeColor;
330
+ background-color: @theme-focus;
331
+ }
332
+ }
333
+
334
+ &-circle {
335
+ width: 50px!important;
336
+ height: 50px!important;
337
+ background-color: @inputBg-readonly;
338
+ color: @themeColor;
339
+
340
+ i {
341
+ color: @scuess-color;
342
+ font-size: 40px;
343
+ }
344
+ }
345
+ }
346
+
347
+ &-new,
348
+ &-inline {
349
+ &-wrapper {
350
+ min-width: 32px;
351
+ height: 32px;
352
+ line-height: 32px;
353
+ background-color: @border-readonly;
354
+ }
355
+
356
+ &-add {
357
+ height: 32px;
358
+ border: none;
359
+ border-radius: 0px;
360
+ background-color: @btn-hover;
361
+ color: @textColor;
362
+
363
+ &:hover {
364
+ color: @themeColor;
365
+ background-color: @theme-focus;
366
+ }
367
+ }
368
+
369
+ &-circle {
370
+ width: 24px!important;
371
+ height: 24px!important;
372
+ background-color: #f4f5fa;
373
+
374
+ i {
375
+ color: @scuess-color;
376
+ font-size: 24px;
377
+ }
378
+ }
379
+ }
380
+
381
+ &-readonly {
382
+ border: none;
383
+ border-radius: 0px;
384
+ background-color: transparent;
385
+
386
+ .uploadList {
387
+ &-old {
388
+ margin: 0px;
389
+ }
390
+
391
+ &-list {
392
+ .item {
393
+ flex: 0 0 80px;
394
+ height: 80px;
395
+ }
396
+ }
397
+ }
398
+ }
399
+
400
+ &-disabled {
401
+ .bri-control-disabled();
402
+
403
+ .uploadList {
404
+ &-old {
405
+ margin: 0px;
406
+ }
407
+
408
+ &-list {
409
+ .item {
410
+ flex: 0 0 80px;
411
+ height: 80px;
412
+ }
413
+ }
414
+
415
+ &-nodata {
416
+ color: @placeholder-disabled-color;
417
+ text-indent: 7px;
418
+ text-align: left;
419
+ }
420
+ &-inline-nodata {
421
+ color: @placeholder-disabled-color;
422
+ }
423
+ }
424
+ }
425
+
426
+ &-unit {
427
+ .uploadList {
428
+ &-inline-nodata {
429
+ .bri-control-nodata();
430
+ }
431
+ }
432
+ }
433
+ }
434
+ </style>