bri-components 1.0.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 (215) hide show
  1. package/README.md +30 -0
  2. package/lib/.DS_Store +0 -0
  3. package/lib/0.bri-components.min.js +2 -0
  4. package/lib/0.bri-components.min.js.map +1 -0
  5. package/lib/1.bri-components.min.js +2 -0
  6. package/lib/1.bri-components.min.js.map +1 -0
  7. package/lib/2.bri-components.min.js +2 -0
  8. package/lib/2.bri-components.min.js.map +1 -0
  9. package/lib/3.bri-components.min.js +2 -0
  10. package/lib/3.bri-components.min.js.gz +0 -0
  11. package/lib/3.bri-components.min.js.map +1 -0
  12. package/lib/4.bri-components.min.js +2 -0
  13. package/lib/4.bri-components.min.js.gz +0 -0
  14. package/lib/4.bri-components.min.js.map +1 -0
  15. package/lib/5.bri-components.min.js +2 -0
  16. package/lib/5.bri-components.min.js.map +1 -0
  17. package/lib/6.bri-components.min.js +2 -0
  18. package/lib/6.bri-components.min.js.map +1 -0
  19. package/lib/bri-components.min.js +21 -0
  20. package/lib/bri-components.min.js.gz +0 -0
  21. package/lib/bri-components.min.js.map +1 -0
  22. package/lib/styles/bri-components.css +1 -0
  23. package/lib/styles/bundle.css +14 -0
  24. package/lib/styles/font/fontello.eot +0 -0
  25. package/lib/styles/font/fontello.svg +32 -0
  26. package/lib/styles/font/fontello.ttf +0 -0
  27. package/lib/styles/font/fontello.woff +0 -0
  28. package/lib/styles/font/fontello.woff2 +0 -0
  29. package/package.json +121 -0
  30. package/src/.DS_Store +0 -0
  31. package/src/components/controls/base/DshBack.vue +36 -0
  32. package/src/components/controls/base/DshCascader.vue +366 -0
  33. package/src/components/controls/base/DshCascaderMultiple.vue +158 -0
  34. package/src/components/controls/base/DshCheckbox.vue +199 -0
  35. package/src/components/controls/base/DshCoordinates.vue +497 -0
  36. package/src/components/controls/base/DshDate.vue +148 -0
  37. package/src/components/controls/base/DshDaterange.vue +335 -0
  38. package/src/components/controls/base/DshDivider.vue +59 -0
  39. package/src/components/controls/base/DshEditor.vue +166 -0
  40. package/src/components/controls/base/DshInput.vue +139 -0
  41. package/src/components/controls/base/DshLabels.vue +302 -0
  42. package/src/components/controls/base/DshNumber/BriInputNumber/BriInputNumber.vue +425 -0
  43. package/src/components/controls/base/DshNumber/BriInputNumber/mixins/emitter.js +34 -0
  44. package/src/components/controls/base/DshNumber/BriInputNumber/mixins/form.js +14 -0
  45. package/src/components/controls/base/DshNumber/BriInputNumber/utils/assist.js +322 -0
  46. package/src/components/controls/base/DshNumber/DshNumber.vue +148 -0
  47. package/src/components/controls/base/DshNumberange.vue +137 -0
  48. package/src/components/controls/base/DshPackage.vue +72 -0
  49. package/src/components/controls/base/DshSelect.vue +231 -0
  50. package/src/components/controls/base/DshSwitch.vue +112 -0
  51. package/src/components/controls/base/DshUndeveloped.vue +39 -0
  52. package/src/components/controls/base/YSerialNumber.vue +37 -0
  53. package/src/components/controls/base/ZUpload/YUploadImage.vue +228 -0
  54. package/src/components/controls/base/ZUpload/index.vue +356 -0
  55. package/src/components/controls/base/ZUpload/upload-list.vue +277 -0
  56. package/src/components/controls/base/ZUpload/upload-listItem.vue +0 -0
  57. package/src/components/controls/base/ZUpload/uploadMixin.js +397 -0
  58. package/src/components/controls/base/selectMixin.js +110 -0
  59. package/src/components/controls/base/textMultiple/DshTextMultiple.vue +94 -0
  60. package/src/components/controls/base/textMultiple/MultipleInput.vue +106 -0
  61. package/src/components/controls/controlMap.js +94 -0
  62. package/src/components/controls/controlMixin.js +84 -0
  63. package/src/components/form/DshAdvSearchForm.vue +341 -0
  64. package/src/components/form/DshDefaultSearch.vue +203 -0
  65. package/src/components/form/DshForm.vue +364 -0
  66. package/src/components/form/searchMixin.js +205 -0
  67. package/src/components/list/DshBox/DshBox.vue +168 -0
  68. package/src/components/list/DshBox/DshCard.vue +219 -0
  69. package/src/components/list/DshBox/DshCrossTable.vue +624 -0
  70. package/src/components/list/DshBox/DshList.vue +442 -0
  71. package/src/components/list/DshBox/DshPanel.vue +407 -0
  72. package/src/components/list/DshBox/DshSingleData.vue +82 -0
  73. package/src/components/list/DshBox/DshTable.vue +273 -0
  74. package/src/components/list/DshCascaderTable.vue +817 -0
  75. package/src/components/list/DshFlatTable.vue +622 -0
  76. package/src/components/list/ZTree.vue +527 -0
  77. package/src/components/list/easyTable/index.js +23 -0
  78. package/src/components/list/easyTable/src/directives/clickoutside.js +32 -0
  79. package/src/components/list/easyTable/src/mixins/layerAdjustment.js +62 -0
  80. package/src/components/list/easyTable/src/settings/settings.js +11 -0
  81. package/src/components/list/easyTable/src/utils/deepClone.js +256 -0
  82. package/src/components/list/easyTable/src/utils/dom.js +41 -0
  83. package/src/components/list/easyTable/src/utils/utils.js +190 -0
  84. package/src/components/list/easyTable/v-checkbox/index.js +7 -0
  85. package/src/components/list/easyTable/v-checkbox/src/checkbox.vue +127 -0
  86. package/src/components/list/easyTable/v-checkbox-group/index.js +7 -0
  87. package/src/components/list/easyTable/v-checkbox-group/src/checkbox-group.vue +68 -0
  88. package/src/components/list/easyTable/v-dropdown/index.js +7 -0
  89. package/src/components/list/easyTable/v-dropdown/src/dropdown.vue +337 -0
  90. package/src/components/list/easyTable/v-table/index.js +7 -0
  91. package/src/components/list/easyTable/v-table/src/body-cell-merge-mixin.js +141 -0
  92. package/src/components/list/easyTable/v-table/src/cell-edit-mixin.js +102 -0
  93. package/src/components/list/easyTable/v-table/src/checkbox-selection-mixin.js +189 -0
  94. package/src/components/list/easyTable/v-table/src/classes-mixin.js +56 -0
  95. package/src/components/list/easyTable/v-table/src/drag-width-mixin.js +202 -0
  96. package/src/components/list/easyTable/v-table/src/export-csv.js +74 -0
  97. package/src/components/list/easyTable/v-table/src/frozen-columns-mixin.js +134 -0
  98. package/src/components/list/easyTable/v-table/src/loading.vue +49 -0
  99. package/src/components/list/easyTable/v-table/src/scroll-bar-control-mixin.js +21 -0
  100. package/src/components/list/easyTable/v-table/src/scroll-control-mixin.js +92 -0
  101. package/src/components/list/easyTable/v-table/src/sort-control-mixin.js +108 -0
  102. package/src/components/list/easyTable/v-table/src/table-empty-mixin.js +73 -0
  103. package/src/components/list/easyTable/v-table/src/table-empty.vue +66 -0
  104. package/src/components/list/easyTable/v-table/src/table-filters-mixin.js +126 -0
  105. package/src/components/list/easyTable/v-table/src/table-footer-mixin.js +122 -0
  106. package/src/components/list/easyTable/v-table/src/table-resize-mixin.js +279 -0
  107. package/src/components/list/easyTable/v-table/src/table-row-mouse-events-mixin.js +123 -0
  108. package/src/components/list/easyTable/v-table/src/table.vue +1565 -0
  109. package/src/components/list/easyTable/v-table/src/title-cell-merge-mixin.js +115 -0
  110. package/src/components/list/evTable/EvTable.vue +323 -0
  111. package/src/components/list/evTable/EvTableMixin.js +26 -0
  112. package/src/components/other/DshAvatar.vue +149 -0
  113. package/src/components/other/DshBtnModal.vue +64 -0
  114. package/src/components/other/DshColorPanel.vue +128 -0
  115. package/src/components/other/DshEditPanel.vue +130 -0
  116. package/src/components/other/InfoCascader.vue +258 -0
  117. package/src/components/other/YNoPermission.vue +45 -0
  118. package/src/components/other/ZCode.vue +125 -0
  119. package/src/components/other/ZCollapseTree.vue +84 -0
  120. package/src/components/other/ZGantt.vue +669 -0
  121. package/src/components/other/ZIframe.vue +105 -0
  122. package/src/components/other/ZLoading.vue +59 -0
  123. package/src/components/other/menu/DshMenu.vue +133 -0
  124. package/src/components/other/menu/DshMenuNav.vue +104 -0
  125. package/src/components/pages/Error/Error403.vue +34 -0
  126. package/src/components/pages/Error/Error404.vue +34 -0
  127. package/src/components/pages/Error/Error500.vue +34 -0
  128. package/src/components/pages/Error/error.less +163 -0
  129. package/src/components/pages/Error/errorBack.vue +38 -0
  130. package/src/components/small/Ctooltip.vue +90 -0
  131. package/src/components/small/DshButtons.vue +195 -0
  132. package/src/components/small/DshControlDefine.vue +110 -0
  133. package/src/components/small/DshCrumbs.vue +61 -0
  134. package/src/components/small/DshCrumbsItem.vue +107 -0
  135. package/src/components/small/DshDropdown.vue +159 -0
  136. package/src/components/small/DshFileShow.vue +212 -0
  137. package/src/components/small/DshIcons.vue +63 -0
  138. package/src/components/small/DshModal.vue +255 -0
  139. package/src/components/small/DshPage.vue +98 -0
  140. package/src/components/small/DshSteps.vue +68 -0
  141. package/src/components/small/DshTabs.vue +227 -0
  142. package/src/components/small/DshTags.vue +58 -0
  143. package/src/components/small/DshTdRender.js +21 -0
  144. package/src/components/small/DshTitle.vue +36 -0
  145. package/src/components/small/render.js +20 -0
  146. package/src/components/unit/DshFormItem.vue +157 -0
  147. package/src/components/unit/DshUnit.vue +72 -0
  148. package/src/components/unit/unitMixin.js +43 -0
  149. package/src/datas/.DS_Store +0 -0
  150. package/src/datas/common/region.json +1 -0
  151. package/src/datas/common/resourceData.json +20 -0
  152. package/src/datas/index.js +11 -0
  153. package/src/index.js +243 -0
  154. package/src/styles/animate.less +16 -0
  155. package/src/styles/bundle.css +14 -0
  156. package/src/styles/common/box.less +157 -0
  157. package/src/styles/common/common.less +31 -0
  158. package/src/styles/common/flex.less +282 -0
  159. package/src/styles/common/index.less +4 -0
  160. package/src/styles/common/text.less +43 -0
  161. package/src/styles/components/controls/DshCascader.less +75 -0
  162. package/src/styles/components/controls/DshCheckbox.less +156 -0
  163. package/src/styles/components/controls/DshCoordinates.less +72 -0
  164. package/src/styles/components/controls/DshDaterange.less +49 -0
  165. package/src/styles/components/controls/DshDivider.less +115 -0
  166. package/src/styles/components/controls/DshEditor.less +52 -0
  167. package/src/styles/components/controls/DshInput.less +40 -0
  168. package/src/styles/components/controls/DshLabels.less +187 -0
  169. package/src/styles/components/controls/DshNumberange.less +24 -0
  170. package/src/styles/components/controls/DshPackage.less +25 -0
  171. package/src/styles/components/controls/DshSelect.less +172 -0
  172. package/src/styles/components/controls/MultipleInput.less +55 -0
  173. package/src/styles/components/controls/ZUpload.less +446 -0
  174. package/src/styles/components/form/DshAdvSearchForm.less +159 -0
  175. package/src/styles/components/form/DshDefaultSearch.less +71 -0
  176. package/src/styles/components/index.less +49 -0
  177. package/src/styles/components/list/DshCascaderTable.less +113 -0
  178. package/src/styles/components/list/DshCrossTable.less +175 -0
  179. package/src/styles/components/list/DshFlatTable.less +98 -0
  180. package/src/styles/components/list/DshSingleData.less +30 -0
  181. package/src/styles/components/list/evTable.less +79 -0
  182. package/src/styles/components/list/evtable/animation.less +141 -0
  183. package/src/styles/components/list/evtable/font/fontello.eot +0 -0
  184. package/src/styles/components/list/evtable/font/fontello.svg +32 -0
  185. package/src/styles/components/list/evtable/font/fontello.ttf +0 -0
  186. package/src/styles/components/list/evtable/font/fontello.woff +0 -0
  187. package/src/styles/components/list/evtable/font/fontello.woff2 +0 -0
  188. package/src/styles/components/list/evtable/fontello.less +68 -0
  189. package/src/styles/components/list/evtable/index.less +5 -0
  190. package/src/styles/components/list/evtable/v-checkbox.less +167 -0
  191. package/src/styles/components/list/evtable/v-dropdown.less +235 -0
  192. package/src/styles/components/list/evtable/v-table.less +334 -0
  193. package/src/styles/components/list/ivu_reset.less +49 -0
  194. package/src/styles/components/other/DshEditPanel.less +70 -0
  195. package/src/styles/components/other/DshMenu.less +37 -0
  196. package/src/styles/components/other/DshMenuNav.less +82 -0
  197. package/src/styles/components/other/InfoCascader.less +55 -0
  198. package/src/styles/components/other/ZCode.less +1 -0
  199. package/src/styles/components/other/ZCollapseTree.less +62 -0
  200. package/src/styles/components/other/ZGantt.less +278 -0
  201. package/src/styles/components/other/ZLoading.less +36 -0
  202. package/src/styles/components/small/Ctooltip.less +5 -0
  203. package/src/styles/components/small/DshButtons.less +40 -0
  204. package/src/styles/components/small/DshControlDefine.less +64 -0
  205. package/src/styles/components/small/DshDropdown.less +61 -0
  206. package/src/styles/components/small/DshPage.less +94 -0
  207. package/src/styles/components/small/DshSteps.less +58 -0
  208. package/src/styles/components/small/DshTabs.less +82 -0
  209. package/src/styles/components/small/DshTitle.less +18 -0
  210. package/src/styles/components/unit/DshFormItem.less +124 -0
  211. package/src/styles/define.less +374 -0
  212. package/src/styles/index.less +10 -0
  213. package/src/styles/reset.less +83 -0
  214. package/src/styles/variables.less +98 -0
  215. package/src/styles/view_reset.less +446 -0
@@ -0,0 +1,397 @@
1
+ import axios from "axios";
2
+ const minio = require("minio");
3
+ const stream = require("stream");
4
+ export default {
5
+ props: {
6
+ groupKey: {
7
+ type: String
8
+ },
9
+ urlModule: {
10
+ type: Object,
11
+ default: function () {
12
+ return {
13
+ module: "file",
14
+ name: "ossToken"
15
+ };
16
+ }
17
+ },
18
+ ossType: {
19
+ type: String,
20
+ default: "multipartUpload"
21
+ }
22
+ },
23
+ data () {
24
+ return {
25
+ percent: 0
26
+ };
27
+ },
28
+ created () {
29
+ },
30
+ computed: {
31
+ computedGroupKey () {
32
+ return this.propsObj.groupKey || this.groupKey;
33
+ },
34
+ computedUrlModule () {
35
+ return this.propsObj.urlModule || this.urlModule;
36
+ },
37
+ computedOssType () {
38
+ return this.propsObj.ossType || this.ossType;
39
+ },
40
+ archiveKey () {
41
+ return this.propsObj._archiveKey || [];
42
+ },
43
+ percentColor () {
44
+ if (this.percent === 100) {
45
+ return "#5cb85c";
46
+ } else {
47
+ return "#6090ed";
48
+ }
49
+ },
50
+ // 是否允许点击
51
+ canClickUpload () {
52
+ if (this.percent > 0) {
53
+ return false;
54
+ } else {
55
+ return this.finalCanEdit;
56
+ }
57
+ }
58
+ },
59
+ methods: {
60
+ handlePost (file, callback) {
61
+ this.$https({
62
+ url: this.computedUrlModule,
63
+ params: {token: this.$route.query && this.$route.query.token},
64
+ callback: res => {
65
+ this.inputType = "file";
66
+ if (res.ossType === "ali-oss") {
67
+ // 上传到阿里云
68
+ this[this.computedOssType](file, res, callback);
69
+ } else if (res.ossType === "local") {
70
+ this.localUpload(file, res, callback);
71
+ } else if (res.ossType === "minio") {
72
+ this.minioUpload(file, res, callback);
73
+ } else {
74
+ console.log(`请开发这种类型‘${res.ossType}’的上传模式`);
75
+ }
76
+
77
+ }
78
+ });
79
+ },
80
+ localUpload (file, res, callback) {
81
+ let fileBody = {
82
+ groupKey: this.computedGroupKey,
83
+ archiveKey: this.archiveKey[this.archiveKey.length - 1]
84
+ };
85
+
86
+ const url = `${res.ossHost}${res.uploadPath}`;
87
+ let formData = new FormData();
88
+ formData.append("file_stream", file);
89
+
90
+ axios.post(url, formData, {
91
+ headers: {
92
+ filetoken: res.filetoken,
93
+ filebody: JSON.stringify(fileBody)
94
+ },
95
+ onUploadProgress: progressEvent => {
96
+ this.inProgress(Number((progressEvent.loaded / progressEvent.total * 100).toFixed(0)));
97
+ }
98
+ })
99
+ .then(response => {
100
+ const newResponse = {
101
+ data: response,
102
+ res: {}
103
+ };
104
+ this.handleSuccess && this.handleSuccess(newResponse, newResponse.data, file);
105
+ callback && callback(response.data);
106
+ }).catch(error => {
107
+ this.handleError && this.handleError(error, {}, file);
108
+ callback && callback(error);
109
+ });
110
+ },
111
+ multipartUpload (file, res, callback) {
112
+ let type = file.name.substring(file.name.lastIndexOf(".") + 1).toLowerCase();
113
+ let remoteName = `${this.randomTimeStampFn()}.${type}`;
114
+ let officeFileDefaultType = "";
115
+ if (!file.type) {
116
+ switch (type) {
117
+ case "xls":
118
+ officeFileDefaultType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
119
+ break;
120
+ case "xlsx":
121
+ officeFileDefaultType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
122
+ break;
123
+ case "doc":
124
+ officeFileDefaultType = "application/msword";
125
+ break;
126
+ case "docx":
127
+ officeFileDefaultType = "application/msword";
128
+ break;
129
+ case "ppt":
130
+ officeFileDefaultType = "application/vnd.ms-powerpoint";
131
+ break;
132
+ case "pptx":
133
+ officeFileDefaultType = "application/vnd.ms-powerpoint";
134
+ break;
135
+ default:
136
+ officeFileDefaultType = "";
137
+ }
138
+ }
139
+
140
+ // 上传成功的回调参数
141
+ let callbackBody = {
142
+ name: file.name,
143
+ mimetype: file.type || officeFileDefaultType,
144
+ size: file.size,
145
+ path: remoteName,
146
+ bucket: res.ossConfig.bucket,
147
+ filetoken: res.filetoken,
148
+ groupKey: this.computedGroupKey,
149
+ archiveKey: this.archiveKey[this.archiveKey.length - 1]
150
+ };
151
+
152
+ let ossCallback = {
153
+ callbackUrl: res.ossHost + res.confirmPath,
154
+ callbackBodyType: "application/json",
155
+ callbackBody: this.transferCallBody(callbackBody)
156
+ };
157
+ new this.$aliOss(res.ossConfig).multipartUpload(remoteName, file, {
158
+ progress: (percentage) => {
159
+ this.inProgress(Number((percentage * 100).toFixed(0)));
160
+ this.handleProgress && this.handleProgress(percentage, file);
161
+ },
162
+ headers: {
163
+ "x-oss-callback": this.base64Encode(JSON.stringify(ossCallback)),
164
+ "Content-Disposition": type === "pdf" ? `inline;filename=${encodeURI(file.name)}` : `attachment;filename=${encodeURI(file.name)}`
165
+ }
166
+ }).then(response => {
167
+ this.handleSuccess && this.handleSuccess(response, response.data, file);
168
+ callback && callback(response.data);
169
+ }).catch((err, response) => {
170
+ this.handleError && this.handleError(err, response, file);
171
+ callback && callback(err);
172
+ });
173
+ },
174
+ minioUpload (file, res, callback) {
175
+ let type = file.name.substring(file.name.lastIndexOf(".") + 1).toLowerCase();
176
+ let remoteName = `${this.randomTimeStampFn()}.${type}`;
177
+ let officeFileDefaultType = "";
178
+ if (!file.type) {
179
+ switch (type) {
180
+ case "xls":
181
+ officeFileDefaultType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
182
+ break;
183
+ case "xlsx":
184
+ officeFileDefaultType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
185
+ break;
186
+ case "doc":
187
+ officeFileDefaultType = "application/msword";
188
+ break;
189
+ case "docx":
190
+ officeFileDefaultType = "application/msword";
191
+ break;
192
+ case "ppt":
193
+ officeFileDefaultType = "application/vnd.ms-powerpoint";
194
+ break;
195
+ case "pptx":
196
+ officeFileDefaultType = "application/vnd.ms-powerpoint";
197
+ break;
198
+ default:
199
+ officeFileDefaultType = "";
200
+ }
201
+ }
202
+ const minioClient = new minio.Client({
203
+ endPoint: res.ossConfig.endPoint,
204
+ port: res.ossConfig.port,
205
+ useSSL: res.ossConfig.useSSL,
206
+ accessKey: window.config.minioAccessKey,
207
+ secretKey: window.config.minioSecretKey
208
+ });
209
+ // 获取文件类型及大小
210
+ const fileSize = file.size;
211
+ // 将文件转换为minio可接收的格式
212
+ const reader = new FileReader();
213
+ reader.readAsDataURL(file);
214
+ reader.onloadend = e => {
215
+ const dataurl = e.target.result;
216
+ // base64转blob
217
+ const blob = this.toBlob(dataurl);
218
+ // blob转arrayBuffer
219
+ const reader2 = new FileReader();
220
+ reader2.readAsArrayBuffer(blob);
221
+ // 参数
222
+ let metadata = {
223
+ "content-type": file.type || officeFileDefaultType,
224
+ "content-length": fileSize
225
+ };
226
+ reader2.onload = ex => {
227
+ // 定义流
228
+ const bufferStream = new stream.PassThrough();
229
+ // 将buffer写入
230
+ bufferStream.end(Buffer.from(ex.target.result));
231
+ // 上传
232
+ minioClient.putObject(res.ossConfig.bucket, remoteName, bufferStream, fileSize, metadata, (err, etag) => {
233
+ if (err == null) {
234
+ // if (file.type.startsWith("image")) {
235
+ // let img = new Image();
236
+ // // 改变图片的src
237
+ // img.src = url;
238
+ // // 加载完成执行
239
+ // img.onload = function () {
240
+ // // 打印
241
+ // alert("width:" + img.width + ",height:" + img.height);
242
+ // };
243
+ // }
244
+ let callbackBody = {
245
+ name: file.name,
246
+ mimetype: file.type || officeFileDefaultType,
247
+ size: fileSize,
248
+ path: remoteName,
249
+ bucket: res.ossConfig.bucket,
250
+ filetoken: res.filetoken,
251
+ groupKey: this.computedGroupKey,
252
+ archiveKey: this.archiveKey[this.archiveKey.length - 1]
253
+ };
254
+ axios.post(res.ossHost + res.confirmPath, {...callbackBody}).then(response => {
255
+ this.handleSuccess && this.handleSuccess(null, response, null);
256
+ });
257
+ }
258
+ });
259
+ };
260
+ };
261
+ },
262
+ putUpload (file, res, callback) {
263
+ let type = "jpg";
264
+ let remoteName = `${this.randomTimeStampFn()}.${type}`;
265
+
266
+ // 上传成功的回调参数
267
+ let callbackBody = {
268
+ name: remoteName,
269
+ mimetype: "image/jpeg",
270
+ size: file.length,
271
+ path: remoteName,
272
+ bucket: res.ossConfig.bucket,
273
+ filetoken: res.filetoken,
274
+ groupKey: this.computedGroupKey,
275
+ archiveKey: this.archiveKey[this.archiveKey.length - 1]
276
+ };
277
+
278
+ let ossCallback = {
279
+ callbackUrl: res.ossHost + res.confirmPath,
280
+ callbackBodyType: "application/json",
281
+ callbackBody: this.transferCallBody(callbackBody)
282
+ };
283
+
284
+ new this.$aliOss(res.ossConfig).put(remoteName, file, {
285
+ progress: (percentage) => {
286
+ this.inProgress(Number((percentage * 100).toFixed(0)));
287
+ this.handleProgress && this.handleProgress(percentage, file);
288
+ },
289
+ headers: {
290
+ "x-oss-callback": this.base64Encode(JSON.stringify(ossCallback)),
291
+ "Content-Disposition": type === "pdf" ? `inline;filename=${encodeURI(file.name)}` : `attachment;filename=${encodeURI(file.name)}`
292
+ }
293
+ }).then(response => {
294
+ this.handleSuccess && this.handleSuccess(response, response.data, file);
295
+ callback && callback(response.data);
296
+ }).catch((err, response) => {
297
+ this.handleError && this.handleError(err, response, file);
298
+ callback && callback(err);
299
+ });
300
+
301
+ },
302
+ inProgress (percent) {
303
+ this.percent = percent;
304
+ if (percent >= 100) {
305
+ this.percent = 100;
306
+ setTimeout(() => {
307
+ this.percent = 0;
308
+ }, 500);
309
+ }
310
+ },
311
+ // 以下为数据转换方法
312
+ randomTimeStampFn () {
313
+ let randomTimeStamp = new Date().getTime() + "" + Math.floor(Math.random() * 10000);
314
+ return this.$md5(randomTimeStamp);
315
+ },
316
+ transferCallBody (obj) {
317
+ let newObj = {};
318
+ for (let attr in obj) {
319
+ newObj[attr] = obj[attr];
320
+ }
321
+ return JSON.stringify(newObj);
322
+ },
323
+ // base64转换
324
+ base64Encode (input) {
325
+ let _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
326
+
327
+ let output = "";
328
+ let chr1, chr2, chr3, enc1, enc2, enc3, enc4;
329
+ let i = 0;
330
+ input = this.utf8Encode(input);
331
+ while (i < input.length) {
332
+ chr1 = input.charCodeAt(i++);
333
+ chr2 = input.charCodeAt(i++);
334
+ chr3 = input.charCodeAt(i++);
335
+ enc1 = chr1 >> 2;
336
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
337
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
338
+ enc4 = chr3 & 63;
339
+ if (isNaN(chr2)) {
340
+ enc3 = enc4 = 64;
341
+ } else if (isNaN(chr3)) {
342
+ enc4 = 64;
343
+ }
344
+ output = output +
345
+ _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
346
+ _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
347
+ }
348
+ return output;
349
+ },
350
+ utf8Encode (str) {
351
+ str = str.replace(/\r\n/g, "\n");
352
+ let utftext = "";
353
+ for (let n = 0; n < str.length; n++) {
354
+ let c = str.charCodeAt(n);
355
+ if (c < 128) {
356
+ utftext += String.fromCharCode(c);
357
+ } else if ((c > 127) && (c < 2048)) {
358
+ utftext += String.fromCharCode((c >> 6) | 192);
359
+ utftext += String.fromCharCode((c & 63) | 128);
360
+ } else {
361
+ utftext += String.fromCharCode((c >> 12) | 224);
362
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
363
+ utftext += String.fromCharCode((c & 63) | 128);
364
+ }
365
+
366
+ }
367
+ return utftext;
368
+ },
369
+ // base64转blob
370
+ toBlob (base64Data) {
371
+ let byteString = base64Data;
372
+ if (base64Data.split(",")[0].indexOf("base64") >= 0) {
373
+ byteString = atob(base64Data.split(",")[1]); // base64 解码
374
+ } else {
375
+ byteString = unescape(base64Data.split(",")[1]);
376
+ }
377
+ // 获取文件类型
378
+ const mimeString = base64Data.split(";")[0].split(":")[1]; // mime类型
379
+
380
+ // ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区
381
+ // let arrayBuffer = new ArrayBuffer(byteString.length) // 创建缓冲数组
382
+ // let uintArr = new Uint8Array(arrayBuffer) // 创建视图
383
+
384
+ const uintArr = new Uint8Array(byteString.length); // 创建视图
385
+
386
+ for (let i = 0; i < byteString.length; i += 1) {
387
+ uintArr[i] = byteString.charCodeAt(i);
388
+ }
389
+ // 生成blob
390
+ const blob = new Blob([uintArr], {
391
+ type: mimeString
392
+ });
393
+ // 使用 Blob 创建一个指向类型化数组的URL, URL.createObjectURL是new Blob文件的方法,可以生成一个普通的url,可以直接使用,比如用在img.src上
394
+ return blob;
395
+ }
396
+ }
397
+ };
@@ -0,0 +1,110 @@
1
+ export default {
2
+ data () {
3
+ return {
4
+ initListData: [],
5
+ showTipTpl: false,
6
+ showTipModal: false,
7
+ dynamicContent: ""
8
+ };
9
+ },
10
+ computed: {
11
+ modalTipContent () {
12
+ return this.propsObj._tipContent || this.dynamicContent || "暂无信息";
13
+ }
14
+ },
15
+ created () {
16
+ this.getTipData();
17
+ },
18
+ methods: {
19
+ getTipData () {
20
+ if (
21
+ (this.propsObj._key !== "_default") &&
22
+ this.finalCanEdit &&
23
+ this.propsObj._openTip
24
+ ) {
25
+ let tipObj = {
26
+ _key: "openTip",
27
+ _name: this.propsObj._tipName || "其他",
28
+ __isTip__: true,
29
+ _disabled: true,
30
+ color: "#6991cc",
31
+ class: `Dsh${this.propsObj._type}-tip`
32
+ };
33
+ this.initListData.push(tipObj);
34
+ }
35
+ },
36
+ // 是否打开tip弹窗
37
+ clickOpenTip (item) {
38
+ if (item.__isTip__) {
39
+ if (this.propsObj._tipKind === "dynamic" && !this.propsObj._tipContent) {
40
+ this.getTipUrl();
41
+ } else {
42
+ this.showTipTpl = true;
43
+ this.showTipModal = true;
44
+ }
45
+ }
46
+ },
47
+ getTipUrl () {
48
+ if (this.propsObj._tipUrl) {
49
+ this.$https({
50
+ url: {
51
+ module: "customPath",
52
+ name: this.propsObj._tipUrl
53
+ },
54
+ params: {
55
+ formData: this.value,
56
+ propsObj: this.propsObj
57
+ },
58
+ callback: res => {
59
+ this.dynamicContent = res;
60
+ this.showTipTpl = true;
61
+ this.showTipModal = true;
62
+ }
63
+ });
64
+ } else {
65
+ this.$Message.info("请配置接口路径!");
66
+ }
67
+ },
68
+ tipModalRender (h) {
69
+ return this.showTipTpl
70
+ ? h("dsh-modal", {
71
+ props: {
72
+ value: this.showTipModal,
73
+ mode: "custom",
74
+ propsObj: {
75
+ title: "温馨提示",
76
+ maskClosable: true,
77
+ class: "DshSelect-modal"
78
+ }
79
+ },
80
+ on: {
81
+ input: bool => {
82
+ this.showTipModal = bool;
83
+ }
84
+ }
85
+ }, [
86
+ h("div", {
87
+ class: "DshSelect-modal-content",
88
+ domProps: {
89
+ innerHTML: this.modalTipContent
90
+ }
91
+ }),
92
+ h("div", {
93
+ class: "DshSelect-modal-footer"
94
+ }, [
95
+ h("Button", {
96
+ props: {
97
+ type: "primary"
98
+ },
99
+ on: {
100
+ click: () => {
101
+ this.showTipModal = false;
102
+ }
103
+ }
104
+ }, "我知道了")
105
+ ])
106
+ ])
107
+ : undefined;
108
+ }
109
+ }
110
+ };
@@ -0,0 +1,94 @@
1
+ <template>
2
+ <div class="DshTextMultiple ycFormItem">
3
+ <Input
4
+ class="DshTextMultiple-control"
5
+ v-model="text"
6
+ :placeholder="$showPlaceholder(canEdit, propsObj) ? `请输入${propsObj._name}` : ''"
7
+ :type="'text'"
8
+ :readonly="!canEdit"
9
+ :disabled="propsObj.canEdit === false"
10
+ :clearable="true"
11
+ :size="propsObj._size"
12
+ />
13
+ <dsh-buttons
14
+ class="DshTextMultiple-create"
15
+ :list="$getOperationList(['createTag'])"
16
+ @click="$dispatchEvent($event)"
17
+ ></dsh-buttons>
18
+
19
+ <!-- 标签列表 -->
20
+ <dsh-tags
21
+ class="dsh-margin-top5"
22
+ :list="value[propsObj._key]"
23
+ @delete="$dispatchEvent(operationMap.deleteTag, arguments)"
24
+ ></dsh-tags>
25
+ </div>
26
+ </template>
27
+
28
+ <script>
29
+ import controlMixin from "../../controlMixin.js";
30
+
31
+ export default {
32
+ name: "DshTextMultiple",
33
+ mixins: [controlMixin],
34
+ props: {},
35
+ data () {
36
+ return {
37
+ text: "",
38
+
39
+ operationMap: {
40
+ createTag: {
41
+ name: "添加",
42
+ type: "createTag",
43
+ size: "default",
44
+ event: "createTag"
45
+ },
46
+ deleteTag: {
47
+ name: "删除",
48
+ type: "deleteTag",
49
+ event: "deleteTag"
50
+ }
51
+ }
52
+ };
53
+ },
54
+ computed: {},
55
+ created () {},
56
+ methods: {
57
+ createTag () {
58
+ if (this.text && this.text.trim()) {
59
+ if (this.value[this.propsObj._key].some(item => item === this.text.trim())) {
60
+ this.$Message.error({
61
+ content: `搜索文字 "${this.text.trim()}" 已存在!`,
62
+ duration: 5
63
+ });
64
+ } else {
65
+ this.value[this.propsObj._key].push(this.text.trim());
66
+ this.change();
67
+ }
68
+
69
+ }
70
+ this.text = "";
71
+ },
72
+ // 删除
73
+ deleteTag (operationItem, params) {
74
+ this.change();
75
+ }
76
+ }
77
+ };
78
+ </script>
79
+
80
+ <style lang="less">
81
+ .DshTextMultiple {
82
+ width: 100%;
83
+
84
+ &-control {
85
+ display: inline-block;
86
+ width: calc(100% - 65px);
87
+ }
88
+
89
+ &-create {
90
+ display: inline-block;
91
+ width: 60px;
92
+ }
93
+ }
94
+ </style>