bri-components 1.5.22 → 1.6.1

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 (154) 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 +127 -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 +435 -434
  12. package/src/components/controls/base/BriUpload/BriUploadImage.vue +430 -377
  13. package/src/components/controls/base/BriUpload/uploadList.vue +738 -727
  14. package/src/components/controls/base/BriUpload/uploadMixin.js +453 -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 +587 -585
  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 +397 -399
  58. package/src/components/controls/senior/selectUsers/departMenu.vue +296 -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 +334 -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/other/DshVideoPlayer.vue +184 -0
  98. package/src/components/small/BriButton.vue +71 -71
  99. package/src/components/small/BriDrawer.vue +169 -169
  100. package/src/components/small/BriTooltip.vue +87 -87
  101. package/src/components/small/DshBtnModal.vue +68 -68
  102. package/src/components/small/DshButtons.vue +324 -324
  103. package/src/components/small/DshDropdown.vue +225 -225
  104. package/src/components/small/DshIcons.vue +59 -59
  105. package/src/components/small/DshListRender.js +21 -21
  106. package/src/components/small/DshModal.vue +160 -160
  107. package/src/components/small/DshSteps.vue +141 -141
  108. package/src/components/small/DshTabs.vue +598 -598
  109. package/src/components/small/DshTabsSet.vue +309 -309
  110. package/src/components/small/DshTags.vue +251 -251
  111. package/src/components/small/DshTitle.vue +50 -50
  112. package/src/components/small/render.js +20 -20
  113. package/src/components/unit/DshFormUnit.vue +398 -398
  114. package/src/components/unit/DshListUnit.vue +115 -115
  115. package/src/components/unit/unitMixin.js +86 -86
  116. package/src/data/index.js +4 -4
  117. package/src/index.js +287 -285
  118. package/src/styles/bundle.css +12 -12
  119. package/src/styles/components/BriButton.less +307 -307
  120. package/src/styles/components/BriTable.less +344 -344
  121. package/src/styles/components/DshModal.less +257 -257
  122. package/src/styles/components/index.less +3 -3
  123. package/src/styles/global/animate.less +11 -11
  124. package/src/styles/global/base.less +45 -45
  125. package/src/styles/global/box.less +186 -186
  126. package/src/styles/global/control.less +122 -122
  127. package/src/styles/global/flex.less +282 -282
  128. package/src/styles/global/global.less +8 -8
  129. package/src/styles/global/text.less +59 -59
  130. package/src/styles/global/variables.less +85 -85
  131. package/src/styles/iconfont/iconfont.css +254 -254
  132. package/src/styles/iconfont/iconfont.json +422 -422
  133. package/src/styles/iconfont/iconfont.svg +137 -137
  134. package/src/styles/index.less +26 -26
  135. package/src/styles/reset-easytable.less +21 -21
  136. package/src/styles/reset-iview-controls.less +145 -145
  137. package/src/styles/reset-iview-other.less +49 -49
  138. package/src/styles/reset-iview-variables.less +43 -43
  139. package/src/styles/reset.less +45 -45
  140. package/src/utils/index.js +3 -5
  141. package/lib/0.bri-components.min.js +0 -1
  142. package/lib/1.bri-components.min.js +0 -1
  143. package/lib/10.bri-components.min.js +0 -1
  144. package/lib/11.bri-components.min.js +0 -1
  145. package/lib/2.bri-components.min.js +0 -1
  146. package/lib/3.bri-components.min.js +0 -1
  147. package/lib/4.bri-components.min.js +0 -1
  148. package/lib/5.bri-components.min.js +0 -1
  149. package/lib/6.bri-components.min.js +0 -1
  150. package/lib/7.bri-components.min.js +0 -1
  151. package/lib/8.bri-components.min.js +0 -1
  152. package/lib/9.bri-components.min.js +0 -1
  153. package/lib/bri-components.min.js +0 -18
  154. package/src/utils/table.js +0 -175
@@ -1,434 +1,435 @@
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
+ @click.native.stop="0"
93
+ @deleteItem="clickDeteItem"
94
+ @editItemName="handleEditName"
95
+ ></upload-list>
96
+ </slot>
97
+ </div>
98
+ </template>
99
+
100
+ <script>
101
+ import controlMixin from "../../mixins/controlMixin.js";
102
+ import uploadMixin from "./uploadMixin.js";
103
+ import BriUploadImage from "./BriUploadImage.vue";
104
+ import uploadList from "./uploadList.vue";
105
+
106
+ const prefixCls = "ivu-upload";
107
+ const imageType = ["jpg", "png", "gif", "jpeg", "tiff", "swf"];
108
+ const documentType = ["txt", "doc", "xls", "ppt", "docx", "xlsx", "pptx", "pdf", "xmind"];
109
+ const videoType = ["flv", "rmvb", "mp4", "mvb"];
110
+ const audioType = ["wma", "mp3", "m4a"];
111
+ const packageType = ["rar", "zip"];
112
+ const fileTypes = [
113
+ ...documentType,
114
+ ...imageType,
115
+ ...videoType,
116
+ ...audioType,
117
+ ...packageType
118
+ ];
119
+
120
+ export default {
121
+ name: "BriUpload",
122
+ mixins: [
123
+ controlMixin,
124
+ uploadMixin
125
+ ],
126
+ components: {
127
+ BriUploadImage,
128
+ uploadList
129
+ },
130
+ props: {},
131
+ data () {
132
+ return {
133
+ prefixCls: prefixCls,
134
+ dragOver: false,
135
+
136
+ operationMap: {
137
+ upload: {
138
+ customIcon: "bico-upload1"
139
+ },
140
+ add: {
141
+ icon: "md-add"
142
+ }
143
+ }
144
+ };
145
+ },
146
+ computed: {
147
+ selfPropsObj () {
148
+ return {
149
+ _fileType: "file", // "file", "image"
150
+ _showMode: this.isHeightAuto ? "old" : "inline", // 宽度为100%、且不在表格字段里的 显示老版
151
+
152
+ _multiple: true,
153
+ _useType: "drag",
154
+ _maxSize: 1024 * 1024 * 2, // 根据四局要求,限制文件为2G
155
+ _format: [],
156
+
157
+ ...this.propsObj,
158
+ ...this.commonDealPropsObj
159
+ };
160
+ },
161
+ subType () {
162
+ return this.selfPropsObj._fileType;
163
+ },
164
+ showMode () {
165
+ return this.isInTable
166
+ ? this.selfPropsObj._inTableStyle === "list" && this.disabled
167
+ ? "tableList"
168
+ : "inline"
169
+ : this.selfPropsObj._showMode;
170
+ },
171
+ useType () {
172
+ return this.selfPropsObj._useType;
173
+ },
174
+ format () {
175
+ return this.selfPropsObj._format;
176
+ },
177
+ maxSize () {
178
+ return this.selfPropsObj._maxSize;
179
+ },
180
+ // 限制文件格式
181
+ accept () {
182
+ return (this.subType === "image" ? imageType : fileTypes)
183
+ .map(type => `.${type}`)
184
+ .join();
185
+ },
186
+ isShowEditIcon () {
187
+ // 因为编辑name 需要这三个参数,因此没有这三个参数时不显示此按钮
188
+ return this.compKey && this.appKey && this.modKey && !!(this.$getHttpPathMap({}).file && this.$getHttpPathMap({}).file.updateFileName);
189
+ },
190
+ classes () {
191
+ return {
192
+ [`${prefixCls}`]: true,
193
+ [`${prefixCls}-select`]: this.useType === "select",
194
+ [`${prefixCls}-drag`]: this.useType === "drag",
195
+ [`${prefixCls}-dragOver`]: this.useType === "drag" && this.dragOver,
196
+ [`BriUpload-${this.showMode}-wrapper`]: true
197
+ };
198
+ }
199
+ },
200
+ methods: {
201
+ clickUpload () {
202
+ if (!this.disabled) {
203
+ this.$refs.input.click();
204
+ }
205
+ },
206
+ clickDeteItem (fileItem, fileIndex) {
207
+ this.curValList.splice(fileIndex, 1);
208
+ this.curValList = [...this.curValList];
209
+ },
210
+ handleEditName (fileItem) {
211
+ this.$https({
212
+ url: {
213
+ ...this.computedUrlModule,
214
+ name: "updateFileName"
215
+ },
216
+ params: fileItem
217
+ });
218
+ },
219
+ successCb (res, data) {
220
+ if (data.res === 0) {
221
+ if (this.multipleMode) {
222
+ this.curValList = [
223
+ ...this.curValList,
224
+ data.data
225
+ ];
226
+ } else {
227
+ this.curValList = [
228
+ data.data
229
+ ];
230
+ }
231
+ } else {
232
+ this.$Message.error({
233
+ content: `操作失败!${this.$getMsgText(data.msg)}`,
234
+ duration: 4
235
+ });
236
+ }
237
+ },
238
+
239
+ handleChange (e) {
240
+ if (e.target.files) {
241
+ this.dealUpload(e.target.files);
242
+ this.$refs.input.value = null;
243
+ }
244
+ },
245
+ handleDrop (e) {
246
+ this.dragOver = false;
247
+ this.dealUpload(e.dataTransfer.files);
248
+ },
249
+ handlePaste (e) {
250
+ this.dealUpload(e.clipboardData.files);
251
+ },
252
+ dealUpload (files) {
253
+ if (!this.disabled) {
254
+ let postFiles = Array.prototype.slice.call(files);
255
+ if (!this.multipleMode) {
256
+ postFiles = postFiles.slice(0, 1);
257
+ }
258
+ postFiles.forEach(fileItem => {
259
+ if (
260
+ (!this.format.length || this.format.some(item => item.toLocaleLowerCase() === fileItem.name.split(".").pop().toLocaleLowerCase())) &&
261
+ (fileItem.size <= this.maxSize * 1024)
262
+ ) {
263
+ this.handlePost(fileItem);
264
+ }
265
+ });
266
+ }
267
+ }
268
+ }
269
+ };
270
+ </script>
271
+
272
+ <style lang="less">
273
+ .BriUpload {
274
+ width: 100%;
275
+ height: 100%;
276
+ border: 1px solid @borderColor;
277
+ border-radius: @borderRadius;
278
+ background-color: @white;
279
+ overflow: hidden;
280
+ position: relative;
281
+
282
+ &-old,
283
+ &-new,
284
+ &-inline {
285
+ display: flex;
286
+
287
+ &-wrapper {
288
+ border: none!important;
289
+ border-radius: 0px !important;
290
+
291
+ &:hover {
292
+ border: none;
293
+ }
294
+ }
295
+
296
+ &-add {
297
+ .dsh-flex-col-center-center();
298
+ cursor: pointer;
299
+ position: relative;
300
+ }
301
+
302
+ &-circle {
303
+ position: absolute;
304
+ top: 0;
305
+ left: 0;
306
+ bottom: 0;
307
+ right: 0;
308
+ margin: auto;
309
+ border-radius: 50%;
310
+ }
311
+ }
312
+
313
+ &-old {
314
+ overflow: hidden;
315
+
316
+ &-wrapper {
317
+ min-width: 120px;
318
+ height: 100%;
319
+ margin: 16px 0px 16px 16px;
320
+ }
321
+
322
+ &-add {
323
+ width: 120px;
324
+ height: 120px;
325
+ border: 1px @borderColor dashed;
326
+ border-radius: @borderRadius;
327
+ color: @themeColor;
328
+
329
+ &:hover {
330
+ border-color: @themeColor;
331
+ background-color: @theme-focus;
332
+ }
333
+ }
334
+
335
+ &-circle {
336
+ width: 50px!important;
337
+ height: 50px!important;
338
+ background-color: @inputBg-readonly;
339
+ color: @themeColor;
340
+
341
+ i {
342
+ color: @scuess-color;
343
+ font-size: 40px;
344
+ }
345
+ }
346
+ }
347
+
348
+ &-new,
349
+ &-inline {
350
+ &-wrapper {
351
+ min-width: 32px;
352
+ height: 32px;
353
+ line-height: 32px;
354
+ background-color: @border-readonly;
355
+ }
356
+
357
+ &-add {
358
+ height: 32px;
359
+ border: none;
360
+ border-radius: 0px;
361
+ background-color: @btn-hover;
362
+ color: @textColor;
363
+
364
+ &:hover {
365
+ color: @themeColor;
366
+ background-color: @theme-focus;
367
+ }
368
+ }
369
+
370
+ &-circle {
371
+ width: 24px!important;
372
+ height: 24px!important;
373
+ background-color: #f4f5fa;
374
+
375
+ i {
376
+ color: @scuess-color;
377
+ font-size: 24px;
378
+ }
379
+ }
380
+ }
381
+
382
+ &-readonly {
383
+ border: none;
384
+ border-radius: 0px;
385
+ background-color: transparent;
386
+
387
+ .uploadList {
388
+ &-old {
389
+ margin: 0px;
390
+ }
391
+
392
+ &-list {
393
+ .item {
394
+ flex: 0 0 80px;
395
+ height: 80px;
396
+ }
397
+ }
398
+ }
399
+ }
400
+
401
+ &-disabled {
402
+ .bri-control-disabled();
403
+
404
+ .uploadList {
405
+ &-old {
406
+ margin: 0px;
407
+ }
408
+
409
+ &-list {
410
+ .item {
411
+ flex: 0 0 80px;
412
+ height: 80px;
413
+ }
414
+ }
415
+
416
+ &-nodata {
417
+ color: @placeholder-disabled-color;
418
+ text-indent: 7px;
419
+ text-align: left;
420
+ }
421
+ &-inline-nodata {
422
+ color: @placeholder-disabled-color;
423
+ }
424
+ }
425
+ }
426
+
427
+ &-unit {
428
+ .uploadList {
429
+ &-inline-nodata {
430
+ .bri-control-nodata();
431
+ }
432
+ }
433
+ }
434
+ }
435
+ </style>