xs-common-plugins 1.2.3 → 1.2.5

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 (188) hide show
  1. package/README.md +298 -298
  2. package/common.js +110 -110
  3. package/index.js +1 -1
  4. package/package.json +16 -16
  5. package/src/App.vue +12 -12
  6. package/src/common/common.js +551 -549
  7. package/src/common/createMenuId.js +7 -7
  8. package/src/common/uploadImgToBase64.js +12 -12
  9. package/src/common/utils.js +95 -95
  10. package/src/components/Breadcrumb/index.vue +81 -81
  11. package/src/components/CheckBox_Cmp/index.vue +62 -62
  12. package/src/components/Col_TableCell/data.js +4 -4
  13. package/src/components/Col_TableCell/index.scss +77 -77
  14. package/src/components/Col_TableCell/index.vue +43 -43
  15. package/src/components/Col_TableCell/methods.js +19 -19
  16. package/src/components/FormItem/index.vue +92 -92
  17. package/src/components/Hamburger/index.vue +44 -44
  18. package/src/components/ReportCmp/data.js +3 -3
  19. package/src/components/ReportCmp/index.scss +29 -29
  20. package/src/components/ReportCmp/index.vue +76 -76
  21. package/src/components/ReportCmp/methods.js +30 -30
  22. package/src/components/Search/cascader/data.js +3 -3
  23. package/src/components/Search/cascader/index.scss +17 -17
  24. package/src/components/Search/cascader/index.vue +96 -96
  25. package/src/components/Search/cascader/methods.js +41 -41
  26. package/src/components/Search/data.js +5 -5
  27. package/src/components/Search/hk_cascader/index.vue +104 -104
  28. package/src/components/Search/hk_cascader_qudao/index.vue +94 -94
  29. package/src/components/Search/index.scss +219 -219
  30. package/src/components/Search/index.vue +410 -410
  31. package/src/components/Search/methods.js +86 -86
  32. package/src/components/Search/product_option/data.js +3 -3
  33. package/src/components/Search/product_option/index.scss +68 -68
  34. package/src/components/Search/product_option/index.vue +412 -412
  35. package/src/components/Search/product_option/methods.js +58 -58
  36. package/src/components/Search/select/data.js +3 -3
  37. package/src/components/Search/select/index.scss +2 -2
  38. package/src/components/Search/select/index.vue +114 -114
  39. package/src/components/Search/select/methods.js +51 -51
  40. package/src/components/Search_filter/data.js +5 -5
  41. package/src/components/Search_filter/index.scss +104 -104
  42. package/src/components/Search_filter/index.vue +88 -88
  43. package/src/components/Search_filter/methods.js +43 -43
  44. package/src/components/TableCmp/data.js +3 -3
  45. package/src/components/TableCmp/index.scss +22 -22
  46. package/src/components/TableCmp/index.vue +98 -98
  47. package/src/components/TableCmp/methods.js +35 -35
  48. package/src/components/TableItem/TableItem.vue +55 -55
  49. package/src/components/TextOVer/index.vue +55 -55
  50. package/src/components/UploadImg/index.vue +177 -177
  51. package/src/components/home/BarChart.vue +118 -118
  52. package/src/components/home/LineChart.vue +146 -146
  53. package/src/components/home/Panel.vue +135 -135
  54. package/src/components/home/PanelGroup.vue +146 -146
  55. package/src/components/home/PieChart.vue +81 -81
  56. package/src/components/home/RaddarChart.vue +119 -119
  57. package/src/components/home/TabLayout.vue +88 -88
  58. package/src/components/home/TableList.vue +158 -158
  59. package/src/components/home/Teng.vue +248 -248
  60. package/src/components/home/TransactionTable.vue +49 -49
  61. package/src/components/home/mixins/resize.js +55 -55
  62. package/src/components/im/index.vue +155 -155
  63. package/src/components/im/methods.js +25 -25
  64. package/src/components/im/pages/chatList/index.vue +45 -45
  65. package/src/components/im/pages/chatRoom/index.vue +159 -159
  66. package/src/components/image-singleUpload/data.js +3 -3
  67. package/src/components/image-singleUpload/index.scss +26 -26
  68. package/src/components/image-singleUpload/index.vue +56 -56
  69. package/src/components/image-singleUpload/methods.js +30 -30
  70. package/src/components/image-upload/data.js +7 -7
  71. package/src/components/image-upload/index.vue +41 -41
  72. package/src/components/image-upload/methods.js +80 -80
  73. package/src/components/multiple-image-upload/data.js +11 -11
  74. package/src/components/multiple-image-upload/index.scss +8 -8
  75. package/src/components/multiple-image-upload/index.vue +63 -63
  76. package/src/components/multiple-image-upload/methods.js +45 -45
  77. package/src/components/pro-upload/data.js +3 -3
  78. package/src/components/pro-upload/index.scss +4 -4
  79. package/src/components/pro-upload/index.vue +89 -89
  80. package/src/components/pro-upload/methods.js +86 -86
  81. package/src/components/report_set/index.scss +44 -44
  82. package/src/components/report_set/index.vue +153 -153
  83. package/src/components/search-page/src/index.scss +5 -5
  84. package/src/components/search-page/src/index.vue +76 -76
  85. package/src/components/search-page/src/methods.js +36 -36
  86. package/src/components/xsSelect/index.vue +125 -125
  87. package/src/mixin/dialog.js +31 -31
  88. package/src/mixin/dlg.js +46 -46
  89. package/src/mixin/keepAlive.js +53 -52
  90. package/src/mixin/newDialog.js +19 -19
  91. package/src/mixin/report.js +82 -82
  92. package/src/mixin/table.js +93 -93
  93. package/src/mixin/tableCell/colTableCell_analysis.js +103 -103
  94. package/src/mixin/upload.js +22 -22
  95. package/src/mixin/vmodel.js +26 -26
  96. package/src/plugins/im/components/chat/index.scss +163 -163
  97. package/src/plugins/im/components/chat/index.vue +144 -144
  98. package/src/plugins/im/components/chat/methods.js +149 -149
  99. package/src/plugins/im/components/conversation-list/index.css +91 -91
  100. package/src/plugins/im/components/conversation-list/index.json +3 -3
  101. package/src/plugins/im/components/conversation-list/index.vue +89 -89
  102. package/src/plugins/im/components/loading/loading.css +69 -69
  103. package/src/plugins/im/components/loading/loading.json +3 -3
  104. package/src/plugins/im/components/loading/loading.vue +14 -14
  105. package/src/plugins/im/components/msg-image/index.json +3 -3
  106. package/src/plugins/im/components/msg-image/index.vue +40 -40
  107. package/src/plugins/im/components/msg-text/index.json +3 -3
  108. package/src/plugins/im/components/msg-text/index.vue +24 -24
  109. package/src/plugins/im/components/send-msg/index.scss +164 -164
  110. package/src/plugins/im/components/send-msg/index.vue +107 -107
  111. package/src/plugins/im/components/send-msg/methods.js +125 -125
  112. package/src/plugins/im/components/template-message/index.vue +76 -76
  113. package/src/plugins/im/components/without.vue +19 -19
  114. package/src/plugins/im/im-plug-in/Protobuf-2.3.7.min.js +1 -1
  115. package/src/plugins/im/im-plug-in/RongCallLib-3.1.5.min.js +74 -74
  116. package/src/plugins/im/im-plug-in/RongIMLib-4.1.0.js +17420 -17420
  117. package/src/plugins/im/im-plug-in/init.js +216 -216
  118. package/src/plugins/im/im-plug-in/qiniu.js +266 -266
  119. package/src/plugins/im/im-plug-in/send-data.js +431 -431
  120. package/src/plugins/im/im-plug-in/upload.js +232 -232
  121. package/src/plugins/im/index.js +31 -31
  122. package/src/plugins/im/lib/RongIMEmoji-2.2.6.js +332 -332
  123. package/src/plugins/im/lib/RongIMLib-3.0.7.2-dev.js +11635 -11635
  124. package/src/plugins/im/lib/RongIMLib-3.0.7.2-dev.min.js +6 -6
  125. package/src/plugins/im/utils/services.js +625 -625
  126. package/src/plugins/im/utils/underscore-1.8.3.js +1531 -1531
  127. package/src/plugins/im/utils/utils.js +149 -149
  128. package/src/plugins/index.js +60 -60
  129. package/src/plugins/row-col-cmp/colCmp/data.js +3 -3
  130. package/src/plugins/row-col-cmp/colCmp/index.scss +50 -50
  131. package/src/plugins/row-col-cmp/colCmp/index.vue +53 -53
  132. package/src/plugins/row-col-cmp/colCmp/methods.js +25 -25
  133. package/src/plugins/row-col-cmp/index.js +20 -20
  134. package/src/plugins/row-col-cmp/rowCmp/data.js +3 -3
  135. package/src/plugins/row-col-cmp/rowCmp/index.scss +3 -3
  136. package/src/plugins/row-col-cmp/rowCmp/index.vue +43 -43
  137. package/src/plugins/row-col-cmp/rowCmp/methods.js +29 -29
  138. package/src/router/index.js +58 -58
  139. package/src/router/permission.js +126 -126
  140. package/src/store/getters.js +13 -13
  141. package/src/store/index.js +60 -60
  142. package/src/store/modules/app.js +55 -55
  143. package/src/store/modules/dic.js +74 -74
  144. package/src/store/modules/oss.js +40 -40
  145. package/src/store/modules/settings.js +28 -28
  146. package/src/store/modules/tagsView.js +160 -160
  147. package/src/store/modules/user.js +94 -94
  148. package/src/store/modules/widgetdata.js +42 -42
  149. package/src/styles/element-ui.scss +49 -49
  150. package/src/styles/index.scss +91 -91
  151. package/src/styles/mixin.scss +28 -28
  152. package/src/styles/sidebar.scss +210 -210
  153. package/src/styles/table.scss +90 -90
  154. package/src/styles/transition.scss +48 -48
  155. package/src/styles/variables.scss +25 -25
  156. package/src/utils/api.js +54 -54
  157. package/src/utils/auth.js +38 -38
  158. package/src/utils/concat_batch_btns.js +88 -88
  159. package/src/utils/enum.js +150 -150
  160. package/src/utils/filter.js +5 -5
  161. package/src/utils/filterRules.js +55 -55
  162. package/src/utils/get-page-title.js +10 -10
  163. package/src/utils/getMenu.js +82 -82
  164. package/src/utils/global-config.js +15 -15
  165. package/src/utils/global_directive.js +10 -10
  166. package/src/utils/index.js +332 -332
  167. package/src/utils/localStorage.js +21 -21
  168. package/src/utils/ossService.js +55 -55
  169. package/src/utils/prototype.js +46 -46
  170. package/src/utils/search.js +33 -33
  171. package/src/utils/signalR.js +24 -24
  172. package/src/utils/validate.js +20 -20
  173. package/src/views/callback/index.vue +35 -35
  174. package/src/views/home/index.vue +25 -25
  175. package/src/views/layout/components/AllSearch/index.vue +44 -44
  176. package/src/views/layout/components/AppMain.vue +66 -66
  177. package/src/views/layout/components/Sidebar/FixiOSBug.js +26 -26
  178. package/src/views/layout/components/Sidebar/Item.vue +28 -28
  179. package/src/views/layout/components/Sidebar/Link.vue +34 -34
  180. package/src/views/layout/components/Sidebar/Logo.vue +79 -79
  181. package/src/views/layout/components/Sidebar/SidebarItem.vue +67 -67
  182. package/src/views/layout/components/Sidebar/index.vue +114 -114
  183. package/src/views/layout/components/TagsView/ScrollPane.vue +94 -94
  184. package/src/views/layout/components/TagsView/index.vue +330 -330
  185. package/src/views/layout/components/index.js +3 -3
  186. package/src/views/layout/index.vue +107 -107
  187. package/src/views/redirect/index.vue +12 -12
  188. package/src/views/slienceAuth/index.vue +42 -42
@@ -1,432 +1,432 @@
1
- (function (win) {
2
- const RongIMLib = require('./RongIMLib-4.1.0.js')
3
- var uploadFile, uploadOptions, isStreamUpload;
4
- var uploadOrderObject = {
5
- 'qiniu': uploadQiniu,
6
- 'baidu': uploadBos,
7
- 'aliyun': uploadAliyun
8
- };
9
- var uploadOrderList = [];
10
- var Conf = {
11
- BOS_CHUNCK_SIZE: 5 * 1024 * 1024 * 1024, // 上传超过5GB大小的文件
12
- }
13
- var PROTOCOL_HTTP = 'http://', PROTOCOL_HTTPS = 'https://';
14
- function forEach(m, callback) {
15
- for (var key in m) {
16
- callback(key, m[key]);
17
- }
18
- }
19
- function getProtocol() {
20
- var protocol = PROTOCOL_HTTPS;
21
- if (location.protocol == 'http:' || location.protocol == 'file:') {
22
- protocol = PROTOCOL_HTTP;
23
- }
24
- return protocol;
25
- }
26
- function buildUrl(url, items) {
27
- var query = '';
28
- forEach(items, function (name, value) {
29
- if (name != 'token') {
30
- query += (query ? '&' : '') + encodeURIComponent(name) + '=' + encodeURIComponent(value);
31
- }
32
- });
33
-
34
- if (query) {
35
- url += (url.indexOf('?') > 0 ? '&' : '?') + query;
36
- }
37
-
38
- return url;
39
- }
40
-
41
- function encode2UTF8(argString) {
42
- if (argString === null || typeof argString === 'undefined') {
43
- return '';
44
- }
45
- var string = (argString + ''); // .replace(/\r\n/g, '\n').replace(/\r/g, '\n');
46
- var utftext = '',
47
- start, end, stringl = 0;
48
- start = end = 0;
49
- stringl = string.length;
50
- for (var n = 0; n < stringl; n++) {
51
- var c1 = string.charCodeAt(n);
52
- var enc = null;
53
-
54
- if (c1 < 128) {
55
- end++;
56
- } else if (c1 > 127 && c1 < 2048) {
57
- enc = String.fromCharCode(
58
- (c1 >> 6) | 192, (c1 & 63) | 128
59
- );
60
- } else if (c1 & 0xF800 ^ 0xD800 > 0) {
61
- enc = String.fromCharCode(
62
- (c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128
63
- );
64
- } else { // surrogate pairs
65
- if (c1 & 0xFC00 ^ 0xD800 > 0) {
66
- throw new RangeError('Unmatched trail surrogate at ' + n);
67
- }
68
- var c2 = string.charCodeAt(++n);
69
- if (c2 & 0xFC00 ^ 0xDC00 > 0) {
70
- throw new RangeError('Unmatched lead surrogate at ' + (n - 1));
71
- }
72
- c1 = ((c1 & 0x3FF) << 10) + (c2 & 0x3FF) + 0x10000;
73
- enc = String.fromCharCode(
74
- (c1 >> 18) | 240, ((c1 >> 12) & 63) | 128, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128
75
- );
76
- }
77
- if (enc !== null) {
78
- if (end > start) {
79
- utftext += string.slice(start, end);
80
- }
81
- utftext += enc;
82
- start = end = n + 1;
83
- }
84
- }
85
-
86
- if (end > start) {
87
- utftext += string.slice(start, stringl);
88
- }
89
-
90
- return utftext;
91
- }
92
- // Copy 七牛 SDK 方法
93
- function encode2Base64(data) {
94
- var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
95
- var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
96
- ac = 0,
97
- enc = '',
98
- tmp_arr = [];
99
-
100
- if (!data) {
101
- return data;
102
- }
103
-
104
- data = encode2UTF8(data + '');
105
-
106
- do { // pack three octets into four hexets
107
- o1 = data.charCodeAt(i++);
108
- o2 = data.charCodeAt(i++);
109
- o3 = data.charCodeAt(i++);
110
-
111
- bits = o1 << 16 | o2 << 8 | o3;
112
-
113
- h1 = bits >> 18 & 0x3f;
114
- h2 = bits >> 12 & 0x3f;
115
- h3 = bits >> 6 & 0x3f;
116
- h4 = bits & 0x3f;
117
-
118
- // use hexets to index into b64, and append result to encoded string
119
- tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
120
- } while (i < data.length);
121
-
122
- enc = tmp_arr.join('');
123
-
124
- switch (data.length % 3) {
125
- case 1:
126
- enc = enc.slice(0, -2) + '==';
127
- break;
128
- case 2:
129
- enc = enc.slice(0, -1) + '=';
130
- break;
131
- }
132
- return enc;
133
- }
134
- // Copy 七牛 SDK 方法
135
- function URLSafeBase64Encode(v) {
136
- v = encode2Base64(v);
137
- return v.replace(/\//g, '_').replace(/\+/g, '-');
138
- }
139
-
140
- function chunkLastStep(data, opts, callback) {
141
- // 七牛 URL 规定
142
- var key = '/key/' + URLSafeBase64Encode(data.filename);
143
- var fname = '/fname/' + URLSafeBase64Encode(data.filename);
144
- var url = opts.domain + '/mkfile/' + data.size + key + fname;
145
- var options = {
146
- domain: url,
147
- method: 'POST',
148
- headers: {
149
- 'Content-Type': 'application/octet-stream'
150
- },
151
- multi_parmas: opts.multi_parmas,
152
- support_options: true,
153
- stream: true,
154
- uploadHost: opts.uploadHost
155
- };
156
- uploadQiniu(data.ctx, options, {
157
- onCompleted: function (res) {
158
- res.filename = data.filename;
159
- res.name = data.name;
160
- callback.onCompleted(res);
161
- },
162
- onError: function () {
163
- throw new Error('qiniu uploadChunk error');
164
- },
165
- onProgress: function (chunkLoaded, total) { },
166
- onOpen: function (xhr) {
167
- callback.onOpen(xhr);
168
- }
169
- }, uploadFile);
170
- }
171
-
172
- var offset = 0,
173
- ctxStore = {};
174
-
175
- function uploadNextChunk(blob, opts, callback) {
176
- var chunk = Math.ceil(offset / opts.chunk_size),
177
- chunks = Math.ceil(blob.size / opts.chunk_size),
178
- curChunkSize = Math.min(opts.chunk_size, blob.size - offset),
179
- chunkBlob = blob.slice(offset, offset + curChunkSize),
180
- chunkInfo = {
181
- chunk: chunk,
182
- chunks: chunks,
183
- name: blob.uniqueName
184
- };
185
- forEach(chunkInfo, function (key, value) {
186
- opts.multi_parmas[key] = value;
187
- });
188
- opts.filesize = blob.size;
189
- opts.headers = {
190
- 'Content-Type': 'application/octet-stream'
191
- };
192
- opts.isChunk = true;
193
- uploadQiniu(chunkBlob, opts, {
194
- onCompleted: function (chunkRes, isBosUploadSuccess) {
195
- if (isBosUploadSuccess) {
196
- callback.onCompleted(chunkRes);
197
- return;
198
- }
199
- offset += curChunkSize;
200
- // callback.onProgress(Math.floor((chunk + 1) / chunks * blob.size), blob.size);
201
- ctxStore[blob.uniqueName] = ctxStore[blob.uniqueName] || [];
202
- ctxStore[blob.uniqueName].push(chunkRes.ctx);
203
- if (offset < blob.size) {
204
- if (chunkRes.ctx) {
205
- uploadNextChunk(blob, opts, callback);
206
- } else {
207
- offset = 0;
208
- delete ctxStore[blob.uniqueName]
209
- }
210
- } else {
211
- offset = 0;
212
- delete opts.isChunk;
213
- delete opts.headers['Content-Type'];
214
- forEach(chunkInfo, function (key, value) {
215
- delete opts.multi_parmas[key];
216
- });
217
- var ctx = ctxStore[blob.uniqueName].join(',');
218
- var data = {
219
- ctx: ctx,
220
- name: blob.name,
221
- size: blob.size,
222
- filename: blob.uniqueName
223
- };
224
- chunkLastStep(data, opts, callback);
225
- }
226
- },
227
- onError: function () {
228
- throw new Error('qiniu uploadChunk error');
229
- },
230
- onProgress: function (chunkLoaded, total, isBosProcess) {
231
- var loaded = chunkLoaded + offset;
232
- callback.onProgress(loaded, opts.filesize, isBosProcess);
233
- },
234
- onOpen: function (xhr) {
235
- callback.onOpen(xhr);
236
- }
237
- }, uploadFile);
238
- }
239
-
240
- function uploadBos(data, options, callback, file) {
241
- console.log(file, options)
242
- if (file.size > Conf.BOS_CHUNCK_SIZE) {
243
- throw ('the file size is over 5GB!')
244
- }
245
- var params = options || {};
246
- var options = options || uploadOptions;
247
- var xhr = new XMLHttpRequest();
248
- var protocol = getProtocol();
249
- if (!params.uploadHost.bos && !params.bosUploadPath) {
250
- return
251
- }
252
- var url = protocol + uploadOrderList[0][1] + params.bosUploadPath;
253
- uploadOrderList.shift()
254
- var bosHeader = params.bosHeader || {};
255
- var resData = {
256
- filename: options.unique_value || file.uniqueName,
257
- name: file.name,
258
- downloadUrl: url,
259
- isBosRes: true
260
- };
261
- if (xhr.upload && options.support_options) {
262
- xhr.upload.onprogress = function (event) {
263
- callback.onProgress(event.loaded, event.total, true);
264
- };
265
- }
266
- xhr.onreadystatechange = function () {
267
- if (xhr.readyState == 4) {
268
- var result = xhr.responseText || "{}";
269
- result = JSON.parse(result);
270
- result.filename = options.unique_value;
271
- if (xhr.status === 200) {
272
- var isBosUploadSuccess = true;
273
- callback.onCompleted(resData, isBosUploadSuccess);
274
- } else if (uploadOrderList.length) {
275
- uploadOrderObject[uploadOrderList[0][0]](data, options, callback, file)
276
- } else {
277
- callback.onError('upload fail')
278
- }
279
- }
280
- };
281
- xhr.open(options.method, url, true);
282
- xhr.setRequestHeader('authorization', bosHeader.bosToken);
283
- xhr.setRequestHeader('x-bce-date', bosHeader.bosDate);
284
- xhr.send(file);
285
- }
286
-
287
- function uploadQiniu(data, options, callback, file) {
288
- var issuedQnUploadHost = PROTOCOL_HTTPS + options.uploadHost.qiniu;
289
- if (isStreamUpload) {
290
- var url = getProtocol() + options.domain
291
- } else {
292
- var url = getProtocol() + uploadOrderList[0][1] || issuedQnUploadHost;
293
- }
294
-
295
- if (!isStreamUpload) {
296
- uploadOrderList.shift()
297
- }
298
- var xhr = new XMLHttpRequest();
299
- if (xhr.upload && options.support_options) {
300
- xhr.upload.onprogress = function (event) {
301
- callback.onProgress(event.loaded, event.total);
302
- };
303
- }
304
-
305
- xhr.onreadystatechange = function () {
306
- if (xhr.readyState == 4) {
307
- var result = xhr.responseText || "{}";
308
- result = JSON.parse(result);
309
- result.filename = options.unique_value;
310
- result.uploadMethod = RongIMLib.UploadMethod ? RongIMLib.UploadMethod.QINIU : ''
311
- if (xhr.status === 200) {
312
- callback.onCompleted(result);
313
- } else if (uploadOrderList.length) {
314
- uploadOrderObject[uploadOrderList[0][0]](data, options, callback, file)
315
- } else {
316
- callback.onError('upload fail')
317
- }
318
- }
319
- };
320
-
321
- if (options.isChunk) {
322
- url += '/mkblk/' + data.size;
323
- url = buildUrl(url, options.multi_parmas);
324
- }
325
- xhr.open(options.method, url, true);
326
-
327
- callback.onOpen(xhr);
328
-
329
- if (options.stream) {
330
- xhr.setRequestHeader('authorization', 'UpToken ' + options.multi_parmas.token);
331
- }
332
-
333
- forEach(options.headers, function (key, value) {
334
- xhr.setRequestHeader(key, value);
335
- });
336
- xhr.send(data);
337
- }
338
-
339
- function uploadAliyun(data, options, callback, file) {
340
- if (file.size > Conf.BOS_CHUNCK_SIZE) {
341
- throw ('the file size is over 5GB!')
342
- }
343
- const cloneData = new FormData();
344
- cloneData.set('file', data.get('file'));
345
- cloneData.set('key', data.get('key'));
346
- cloneData.set('token', data.get('token'));
347
- const aliHost = uploadOrderList[0][1]
348
- uploadOrderList.shift()
349
- var options = options || {};
350
- var data = data || uploadFile;
351
- var options = options || uploadOptions;
352
- var xhr = new XMLHttpRequest();
353
- var protocol = getProtocol();
354
- var url = protocol + options.ossBucketName + '.' + aliHost;
355
- if (xhr.upload && options.support_options) {
356
- xhr.upload.onprogress = function (event) {
357
- callback.onProgress(event.loaded, event.total);
358
- };
359
- }
360
-
361
- xhr.onreadystatechange = function () {
362
- if (xhr.readyState == 4) {
363
- var result = xhr.responseText || "{}";
364
- result = JSON.parse(result);
365
- result.name = options.unique_value;
366
- result.filename = options.uploadFileName; // 上传文件名
367
- result.uploadMethod = RongIMLib.UploadMethod ? RongIMLib.UploadMethod.ALI : '';
368
- if (xhr.status === 200) {
369
- callback.onCompleted(result);
370
- } else if (uploadOrderList.length) {
371
- uploadOrderObject[uploadOrderList[0][0]](cloneData, options, callback, file)
372
- } else {
373
- callback.onError('upload fail')
374
- }
375
- }
376
- };
377
- xhr.open(options.method, url, true);
378
- var aliHeader = options.aliHeader || {};
379
- data.set('OSSAccessKeyId', aliHeader.osskeyId)
380
- data.set('policy', aliHeader.ossPolicy)
381
- data.set('Signature', aliHeader.ossSign)
382
- data.set('success_action_status', 200)
383
- data.delete('key')
384
- data.append('key', options.uploadFileName) // 阿里上传时传的文件名必须和获取认证时传的 key 一致
385
- data.delete('file');
386
- data.append('file', file);
387
- xhr.send(data);
388
- }
389
-
390
- function uploadData(file, opts, callback) {
391
- uploadFile = file, uploadOptions = opts;
392
- if (opts.ossConfig) { // 配置 oss,需按权重降级上传
393
- const ossConfig = JSON.parse(opts.ossConfig);
394
- let aliyunUrl = '';
395
- let tempArr = [];
396
- ossConfig.forEach((item) => {
397
- const index = Number(item.p) - 1;
398
- for (const key in item) {
399
- if (key === 'aliyun') {
400
- aliyunUrl = item[key];
401
- }
402
- if (key != 'p') {
403
- tempArr[index] = [key, item[key]]
404
- }
405
- }
406
- });
407
- tempArr.forEach(function (item) { // 过滤权重值不从 1 开始的情况
408
- item ? uploadOrderList.push(item) : '';
409
- })
410
-
411
- if (ossConfig.length != uploadOrderList.length) { // 权重无值或相同,无法比较的情况
412
- uploadOrderList = [['qiniu', opts.domain], ['baidu', opts.uploadHost.bos], ['aliyun', aliyunUrl]];
413
- }
414
- } else { // 走之前的逻辑,先七牛后百度
415
- uploadOrderList = [['qiniu', opts.domain], ['baidu', opts.uploadHost.bos]];
416
- }
417
-
418
- if (file.size && opts.chunk_size < file.size) {
419
- isStreamUpload = true;
420
- var uniqueName = opts['genUId'](file);
421
- var suffix = file.name.substr(file.name.lastIndexOf('.'));
422
- uniqueName = uniqueName + suffix;
423
- file.uniqueName = uniqueName;
424
- opts.stream = true;
425
- uploadNextChunk(file, opts, callback);
426
- } else {
427
- var data = opts['data'](file, opts); // 取 formData
428
- uploadOrderObject[uploadOrderList[0][0]](data, opts, callback, file)
429
- }
430
- }
431
- win.uploadProcess = uploadData;
1
+ (function (win) {
2
+ const RongIMLib = require('./RongIMLib-4.1.0.js')
3
+ var uploadFile, uploadOptions, isStreamUpload;
4
+ var uploadOrderObject = {
5
+ 'qiniu': uploadQiniu,
6
+ 'baidu': uploadBos,
7
+ 'aliyun': uploadAliyun
8
+ };
9
+ var uploadOrderList = [];
10
+ var Conf = {
11
+ BOS_CHUNCK_SIZE: 5 * 1024 * 1024 * 1024, // 上传超过5GB大小的文件
12
+ }
13
+ var PROTOCOL_HTTP = 'http://', PROTOCOL_HTTPS = 'https://';
14
+ function forEach(m, callback) {
15
+ for (var key in m) {
16
+ callback(key, m[key]);
17
+ }
18
+ }
19
+ function getProtocol() {
20
+ var protocol = PROTOCOL_HTTPS;
21
+ if (location.protocol == 'http:' || location.protocol == 'file:') {
22
+ protocol = PROTOCOL_HTTP;
23
+ }
24
+ return protocol;
25
+ }
26
+ function buildUrl(url, items) {
27
+ var query = '';
28
+ forEach(items, function (name, value) {
29
+ if (name != 'token') {
30
+ query += (query ? '&' : '') + encodeURIComponent(name) + '=' + encodeURIComponent(value);
31
+ }
32
+ });
33
+
34
+ if (query) {
35
+ url += (url.indexOf('?') > 0 ? '&' : '?') + query;
36
+ }
37
+
38
+ return url;
39
+ }
40
+
41
+ function encode2UTF8(argString) {
42
+ if (argString === null || typeof argString === 'undefined') {
43
+ return '';
44
+ }
45
+ var string = (argString + ''); // .replace(/\r\n/g, '\n').replace(/\r/g, '\n');
46
+ var utftext = '',
47
+ start, end, stringl = 0;
48
+ start = end = 0;
49
+ stringl = string.length;
50
+ for (var n = 0; n < stringl; n++) {
51
+ var c1 = string.charCodeAt(n);
52
+ var enc = null;
53
+
54
+ if (c1 < 128) {
55
+ end++;
56
+ } else if (c1 > 127 && c1 < 2048) {
57
+ enc = String.fromCharCode(
58
+ (c1 >> 6) | 192, (c1 & 63) | 128
59
+ );
60
+ } else if (c1 & 0xF800 ^ 0xD800 > 0) {
61
+ enc = String.fromCharCode(
62
+ (c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128
63
+ );
64
+ } else { // surrogate pairs
65
+ if (c1 & 0xFC00 ^ 0xD800 > 0) {
66
+ throw new RangeError('Unmatched trail surrogate at ' + n);
67
+ }
68
+ var c2 = string.charCodeAt(++n);
69
+ if (c2 & 0xFC00 ^ 0xDC00 > 0) {
70
+ throw new RangeError('Unmatched lead surrogate at ' + (n - 1));
71
+ }
72
+ c1 = ((c1 & 0x3FF) << 10) + (c2 & 0x3FF) + 0x10000;
73
+ enc = String.fromCharCode(
74
+ (c1 >> 18) | 240, ((c1 >> 12) & 63) | 128, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128
75
+ );
76
+ }
77
+ if (enc !== null) {
78
+ if (end > start) {
79
+ utftext += string.slice(start, end);
80
+ }
81
+ utftext += enc;
82
+ start = end = n + 1;
83
+ }
84
+ }
85
+
86
+ if (end > start) {
87
+ utftext += string.slice(start, stringl);
88
+ }
89
+
90
+ return utftext;
91
+ }
92
+ // Copy 七牛 SDK 方法
93
+ function encode2Base64(data) {
94
+ var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
95
+ var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
96
+ ac = 0,
97
+ enc = '',
98
+ tmp_arr = [];
99
+
100
+ if (!data) {
101
+ return data;
102
+ }
103
+
104
+ data = encode2UTF8(data + '');
105
+
106
+ do { // pack three octets into four hexets
107
+ o1 = data.charCodeAt(i++);
108
+ o2 = data.charCodeAt(i++);
109
+ o3 = data.charCodeAt(i++);
110
+
111
+ bits = o1 << 16 | o2 << 8 | o3;
112
+
113
+ h1 = bits >> 18 & 0x3f;
114
+ h2 = bits >> 12 & 0x3f;
115
+ h3 = bits >> 6 & 0x3f;
116
+ h4 = bits & 0x3f;
117
+
118
+ // use hexets to index into b64, and append result to encoded string
119
+ tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
120
+ } while (i < data.length);
121
+
122
+ enc = tmp_arr.join('');
123
+
124
+ switch (data.length % 3) {
125
+ case 1:
126
+ enc = enc.slice(0, -2) + '==';
127
+ break;
128
+ case 2:
129
+ enc = enc.slice(0, -1) + '=';
130
+ break;
131
+ }
132
+ return enc;
133
+ }
134
+ // Copy 七牛 SDK 方法
135
+ function URLSafeBase64Encode(v) {
136
+ v = encode2Base64(v);
137
+ return v.replace(/\//g, '_').replace(/\+/g, '-');
138
+ }
139
+
140
+ function chunkLastStep(data, opts, callback) {
141
+ // 七牛 URL 规定
142
+ var key = '/key/' + URLSafeBase64Encode(data.filename);
143
+ var fname = '/fname/' + URLSafeBase64Encode(data.filename);
144
+ var url = opts.domain + '/mkfile/' + data.size + key + fname;
145
+ var options = {
146
+ domain: url,
147
+ method: 'POST',
148
+ headers: {
149
+ 'Content-Type': 'application/octet-stream'
150
+ },
151
+ multi_parmas: opts.multi_parmas,
152
+ support_options: true,
153
+ stream: true,
154
+ uploadHost: opts.uploadHost
155
+ };
156
+ uploadQiniu(data.ctx, options, {
157
+ onCompleted: function (res) {
158
+ res.filename = data.filename;
159
+ res.name = data.name;
160
+ callback.onCompleted(res);
161
+ },
162
+ onError: function () {
163
+ throw new Error('qiniu uploadChunk error');
164
+ },
165
+ onProgress: function (chunkLoaded, total) { },
166
+ onOpen: function (xhr) {
167
+ callback.onOpen(xhr);
168
+ }
169
+ }, uploadFile);
170
+ }
171
+
172
+ var offset = 0,
173
+ ctxStore = {};
174
+
175
+ function uploadNextChunk(blob, opts, callback) {
176
+ var chunk = Math.ceil(offset / opts.chunk_size),
177
+ chunks = Math.ceil(blob.size / opts.chunk_size),
178
+ curChunkSize = Math.min(opts.chunk_size, blob.size - offset),
179
+ chunkBlob = blob.slice(offset, offset + curChunkSize),
180
+ chunkInfo = {
181
+ chunk: chunk,
182
+ chunks: chunks,
183
+ name: blob.uniqueName
184
+ };
185
+ forEach(chunkInfo, function (key, value) {
186
+ opts.multi_parmas[key] = value;
187
+ });
188
+ opts.filesize = blob.size;
189
+ opts.headers = {
190
+ 'Content-Type': 'application/octet-stream'
191
+ };
192
+ opts.isChunk = true;
193
+ uploadQiniu(chunkBlob, opts, {
194
+ onCompleted: function (chunkRes, isBosUploadSuccess) {
195
+ if (isBosUploadSuccess) {
196
+ callback.onCompleted(chunkRes);
197
+ return;
198
+ }
199
+ offset += curChunkSize;
200
+ // callback.onProgress(Math.floor((chunk + 1) / chunks * blob.size), blob.size);
201
+ ctxStore[blob.uniqueName] = ctxStore[blob.uniqueName] || [];
202
+ ctxStore[blob.uniqueName].push(chunkRes.ctx);
203
+ if (offset < blob.size) {
204
+ if (chunkRes.ctx) {
205
+ uploadNextChunk(blob, opts, callback);
206
+ } else {
207
+ offset = 0;
208
+ delete ctxStore[blob.uniqueName]
209
+ }
210
+ } else {
211
+ offset = 0;
212
+ delete opts.isChunk;
213
+ delete opts.headers['Content-Type'];
214
+ forEach(chunkInfo, function (key, value) {
215
+ delete opts.multi_parmas[key];
216
+ });
217
+ var ctx = ctxStore[blob.uniqueName].join(',');
218
+ var data = {
219
+ ctx: ctx,
220
+ name: blob.name,
221
+ size: blob.size,
222
+ filename: blob.uniqueName
223
+ };
224
+ chunkLastStep(data, opts, callback);
225
+ }
226
+ },
227
+ onError: function () {
228
+ throw new Error('qiniu uploadChunk error');
229
+ },
230
+ onProgress: function (chunkLoaded, total, isBosProcess) {
231
+ var loaded = chunkLoaded + offset;
232
+ callback.onProgress(loaded, opts.filesize, isBosProcess);
233
+ },
234
+ onOpen: function (xhr) {
235
+ callback.onOpen(xhr);
236
+ }
237
+ }, uploadFile);
238
+ }
239
+
240
+ function uploadBos(data, options, callback, file) {
241
+ console.log(file, options)
242
+ if (file.size > Conf.BOS_CHUNCK_SIZE) {
243
+ throw ('the file size is over 5GB!')
244
+ }
245
+ var params = options || {};
246
+ var options = options || uploadOptions;
247
+ var xhr = new XMLHttpRequest();
248
+ var protocol = getProtocol();
249
+ if (!params.uploadHost.bos && !params.bosUploadPath) {
250
+ return
251
+ }
252
+ var url = protocol + uploadOrderList[0][1] + params.bosUploadPath;
253
+ uploadOrderList.shift()
254
+ var bosHeader = params.bosHeader || {};
255
+ var resData = {
256
+ filename: options.unique_value || file.uniqueName,
257
+ name: file.name,
258
+ downloadUrl: url,
259
+ isBosRes: true
260
+ };
261
+ if (xhr.upload && options.support_options) {
262
+ xhr.upload.onprogress = function (event) {
263
+ callback.onProgress(event.loaded, event.total, true);
264
+ };
265
+ }
266
+ xhr.onreadystatechange = function () {
267
+ if (xhr.readyState == 4) {
268
+ var result = xhr.responseText || "{}";
269
+ result = JSON.parse(result);
270
+ result.filename = options.unique_value;
271
+ if (xhr.status === 200) {
272
+ var isBosUploadSuccess = true;
273
+ callback.onCompleted(resData, isBosUploadSuccess);
274
+ } else if (uploadOrderList.length) {
275
+ uploadOrderObject[uploadOrderList[0][0]](data, options, callback, file)
276
+ } else {
277
+ callback.onError('upload fail')
278
+ }
279
+ }
280
+ };
281
+ xhr.open(options.method, url, true);
282
+ xhr.setRequestHeader('authorization', bosHeader.bosToken);
283
+ xhr.setRequestHeader('x-bce-date', bosHeader.bosDate);
284
+ xhr.send(file);
285
+ }
286
+
287
+ function uploadQiniu(data, options, callback, file) {
288
+ var issuedQnUploadHost = PROTOCOL_HTTPS + options.uploadHost.qiniu;
289
+ if (isStreamUpload) {
290
+ var url = getProtocol() + options.domain
291
+ } else {
292
+ var url = getProtocol() + uploadOrderList[0][1] || issuedQnUploadHost;
293
+ }
294
+
295
+ if (!isStreamUpload) {
296
+ uploadOrderList.shift()
297
+ }
298
+ var xhr = new XMLHttpRequest();
299
+ if (xhr.upload && options.support_options) {
300
+ xhr.upload.onprogress = function (event) {
301
+ callback.onProgress(event.loaded, event.total);
302
+ };
303
+ }
304
+
305
+ xhr.onreadystatechange = function () {
306
+ if (xhr.readyState == 4) {
307
+ var result = xhr.responseText || "{}";
308
+ result = JSON.parse(result);
309
+ result.filename = options.unique_value;
310
+ result.uploadMethod = RongIMLib.UploadMethod ? RongIMLib.UploadMethod.QINIU : ''
311
+ if (xhr.status === 200) {
312
+ callback.onCompleted(result);
313
+ } else if (uploadOrderList.length) {
314
+ uploadOrderObject[uploadOrderList[0][0]](data, options, callback, file)
315
+ } else {
316
+ callback.onError('upload fail')
317
+ }
318
+ }
319
+ };
320
+
321
+ if (options.isChunk) {
322
+ url += '/mkblk/' + data.size;
323
+ url = buildUrl(url, options.multi_parmas);
324
+ }
325
+ xhr.open(options.method, url, true);
326
+
327
+ callback.onOpen(xhr);
328
+
329
+ if (options.stream) {
330
+ xhr.setRequestHeader('authorization', 'UpToken ' + options.multi_parmas.token);
331
+ }
332
+
333
+ forEach(options.headers, function (key, value) {
334
+ xhr.setRequestHeader(key, value);
335
+ });
336
+ xhr.send(data);
337
+ }
338
+
339
+ function uploadAliyun(data, options, callback, file) {
340
+ if (file.size > Conf.BOS_CHUNCK_SIZE) {
341
+ throw ('the file size is over 5GB!')
342
+ }
343
+ const cloneData = new FormData();
344
+ cloneData.set('file', data.get('file'));
345
+ cloneData.set('key', data.get('key'));
346
+ cloneData.set('token', data.get('token'));
347
+ const aliHost = uploadOrderList[0][1]
348
+ uploadOrderList.shift()
349
+ var options = options || {};
350
+ var data = data || uploadFile;
351
+ var options = options || uploadOptions;
352
+ var xhr = new XMLHttpRequest();
353
+ var protocol = getProtocol();
354
+ var url = protocol + options.ossBucketName + '.' + aliHost;
355
+ if (xhr.upload && options.support_options) {
356
+ xhr.upload.onprogress = function (event) {
357
+ callback.onProgress(event.loaded, event.total);
358
+ };
359
+ }
360
+
361
+ xhr.onreadystatechange = function () {
362
+ if (xhr.readyState == 4) {
363
+ var result = xhr.responseText || "{}";
364
+ result = JSON.parse(result);
365
+ result.name = options.unique_value;
366
+ result.filename = options.uploadFileName; // 上传文件名
367
+ result.uploadMethod = RongIMLib.UploadMethod ? RongIMLib.UploadMethod.ALI : '';
368
+ if (xhr.status === 200) {
369
+ callback.onCompleted(result);
370
+ } else if (uploadOrderList.length) {
371
+ uploadOrderObject[uploadOrderList[0][0]](cloneData, options, callback, file)
372
+ } else {
373
+ callback.onError('upload fail')
374
+ }
375
+ }
376
+ };
377
+ xhr.open(options.method, url, true);
378
+ var aliHeader = options.aliHeader || {};
379
+ data.set('OSSAccessKeyId', aliHeader.osskeyId)
380
+ data.set('policy', aliHeader.ossPolicy)
381
+ data.set('Signature', aliHeader.ossSign)
382
+ data.set('success_action_status', 200)
383
+ data.delete('key')
384
+ data.append('key', options.uploadFileName) // 阿里上传时传的文件名必须和获取认证时传的 key 一致
385
+ data.delete('file');
386
+ data.append('file', file);
387
+ xhr.send(data);
388
+ }
389
+
390
+ function uploadData(file, opts, callback) {
391
+ uploadFile = file, uploadOptions = opts;
392
+ if (opts.ossConfig) { // 配置 oss,需按权重降级上传
393
+ const ossConfig = JSON.parse(opts.ossConfig);
394
+ let aliyunUrl = '';
395
+ let tempArr = [];
396
+ ossConfig.forEach((item) => {
397
+ const index = Number(item.p) - 1;
398
+ for (const key in item) {
399
+ if (key === 'aliyun') {
400
+ aliyunUrl = item[key];
401
+ }
402
+ if (key != 'p') {
403
+ tempArr[index] = [key, item[key]]
404
+ }
405
+ }
406
+ });
407
+ tempArr.forEach(function (item) { // 过滤权重值不从 1 开始的情况
408
+ item ? uploadOrderList.push(item) : '';
409
+ })
410
+
411
+ if (ossConfig.length != uploadOrderList.length) { // 权重无值或相同,无法比较的情况
412
+ uploadOrderList = [['qiniu', opts.domain], ['baidu', opts.uploadHost.bos], ['aliyun', aliyunUrl]];
413
+ }
414
+ } else { // 走之前的逻辑,先七牛后百度
415
+ uploadOrderList = [['qiniu', opts.domain], ['baidu', opts.uploadHost.bos]];
416
+ }
417
+
418
+ if (file.size && opts.chunk_size < file.size) {
419
+ isStreamUpload = true;
420
+ var uniqueName = opts['genUId'](file);
421
+ var suffix = file.name.substr(file.name.lastIndexOf('.'));
422
+ uniqueName = uniqueName + suffix;
423
+ file.uniqueName = uniqueName;
424
+ opts.stream = true;
425
+ uploadNextChunk(file, opts, callback);
426
+ } else {
427
+ var data = opts['data'](file, opts); // 取 formData
428
+ uploadOrderObject[uploadOrderList[0][0]](data, opts, callback, file)
429
+ }
430
+ }
431
+ win.uploadProcess = uploadData;
432
432
  })(window);