oxy-uni-ui 2.1.1 → 2.1.2

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 (183) hide show
  1. package/attributes.json +1 -1
  2. package/components/common/abstracts/variable.scss +13 -2
  3. package/components/oxy-checkbox/index.scss +37 -2
  4. package/components/oxy-sort-button/index.scss +3 -4
  5. package/components/oxy-tag/index.scss +157 -17
  6. package/components/oxy-tag/oxy-tag.vue +14 -2
  7. package/components/oxy-tag/types.ts +9 -0
  8. package/dev-tools.ts +2 -0
  9. package/devTools/components/DevToolsOverlay.vue +56 -0
  10. package/devTools/components/DevToolsUiHost.vue +589 -0
  11. package/devTools/config.js +55 -0
  12. package/devTools/core/components/mpDevBubble.vue +174 -0
  13. package/devTools/core/libs/createH5Bubble.js +156 -0
  14. package/devTools/core/libs/devCache.js +151 -0
  15. package/devTools/core/libs/devOptions.js +163 -0
  16. package/devTools/core/libs/devUi.js +219 -0
  17. package/devTools/core/libs/drawView.js +140 -0
  18. package/devTools/core/libs/errorReport.js +64 -0
  19. package/devTools/core/libs/jsonCompress.js +334 -0
  20. package/devTools/core/libs/logReport.js +59 -0
  21. package/devTools/core/libs/pageLinkList.js +125 -0
  22. package/devTools/core/libs/timeFormat.js +94 -0
  23. package/devTools/core/proxy/console.js +430 -0
  24. package/devTools/core/proxy/index.js +36 -0
  25. package/devTools/core/proxy/request.js +495 -0
  26. package/devTools/core/proxy/storage.js +113 -0
  27. package/devTools/core/proxy/uniBus.js +153 -0
  28. package/devTools/core/proxy/uniListen.js +192 -0
  29. package/devTools/core/proxy/vueMixin.js +120 -0
  30. package/devTools/index.js +168 -0
  31. package/devTools/page/components/bottomTools.vue +1046 -0
  32. package/devTools/page/components/dialog/addStorage.vue +204 -0
  33. package/devTools/page/components/dialog/createDir.vue +366 -0
  34. package/devTools/page/components/dialog/editDialog.vue +192 -0
  35. package/devTools/page/components/dialog/routeDialog.vue +184 -0
  36. package/devTools/page/components/dialog/sendRequest.vue +603 -0
  37. package/devTools/page/components/dialog/textFileEditDialog.vue +391 -0
  38. package/devTools/page/components/libs/appDelDir.js +86 -0
  39. package/devTools/page/components/libs/dirReader.js +248 -0
  40. package/devTools/page/components/libs/fileSize.js +15 -0
  41. package/devTools/page/components/libs/getRuntimeInfo.js +134 -0
  42. package/devTools/page/components/listItem/consoleItem.vue +314 -0
  43. package/devTools/page/components/listItem/errorItem.vue +292 -0
  44. package/devTools/page/components/listItem/fileSysItem.vue +533 -0
  45. package/devTools/page/components/listItem/infoList.vue +100 -0
  46. package/devTools/page/components/listItem/jsRunnerItem.vue +255 -0
  47. package/devTools/page/components/listItem/logItem.vue +193 -0
  48. package/devTools/page/components/listItem/networkItem.vue +398 -0
  49. package/devTools/page/components/listItem/objectAnalysis.vue +651 -0
  50. package/devTools/page/components/listItem/pages.vue +319 -0
  51. package/devTools/page/components/listItem/routeItem.vue +153 -0
  52. package/devTools/page/components/listItem/setting.vue +734 -0
  53. package/devTools/page/components/listItem/storageList.vue +681 -0
  54. package/devTools/page/components/listItem/tools.vue +315 -0
  55. package/devTools/page/components/listItem/vuexList.vue +599 -0
  56. package/devTools/page/components/main.vue +1867 -0
  57. package/devTools/page/components/mixins/animationControl.js +91 -0
  58. package/devTools/page/components/mixins/mp.js +83 -0
  59. package/devTools/page/components/ui/btnTabs.vue +90 -0
  60. package/devTools/page/components/ui/codeHisPicker.vue +172 -0
  61. package/devTools/page/components/ui/h5Cell.vue +13 -0
  62. package/devTools/page/components/ui/menuBtn.vue +94 -0
  63. package/devTools/page/components/ui/mobileSwiperScroll.vue +74 -0
  64. package/devTools/page/components/ui/requestSpeedLimit.vue +52 -0
  65. package/devTools/page/components/ui/requestTimeoutMock.vue +55 -0
  66. package/devTools/page/components/ui/subTitleBar.vue +101 -0
  67. package/devTools/page/static/copy.png +0 -0
  68. package/devTools/page/static/delete.png +0 -0
  69. package/devTools/page/static/fileSys/AI.png +0 -0
  70. package/devTools/page/static/fileSys/DWG.png +0 -0
  71. package/devTools/page/static/fileSys/EXE.png +0 -0
  72. package/devTools/page/static/fileSys/GIF.png +0 -0
  73. package/devTools/page/static/fileSys/HTML.png +0 -0
  74. package/devTools/page/static/fileSys/PSD.png +0 -0
  75. package/devTools/page/static/fileSys/RVT.png +0 -0
  76. package/devTools/page/static/fileSys/SKP.png +0 -0
  77. package/devTools/page/static/fileSys/SVG.png +0 -0
  78. package/devTools/page/static/fileSys/excel.png +0 -0
  79. package/devTools/page/static/fileSys/pdf.png +0 -0
  80. package/devTools/page/static/fileSys/pptl.png +0 -0
  81. package/devTools/page/static/fileSys/shipin.png +0 -0
  82. package/devTools/page/static/fileSys/tupian.png +0 -0
  83. package/devTools/page/static/fileSys/txt.png +0 -0
  84. package/devTools/page/static/fileSys/weizhiwenjian.png +0 -0
  85. package/devTools/page/static/fileSys/wenjianjia.png +0 -0
  86. package/devTools/page/static/fileSys/word.png +0 -0
  87. package/devTools/page/static/fileSys/yasuo.png +0 -0
  88. package/devTools/page/static/fileSys/yinpin.png +0 -0
  89. package/devTools/page/static/fold.png +0 -0
  90. package/devTools/page/static/menu.png +0 -0
  91. package/devTools/page/static/refresh.png +0 -0
  92. package/devTools/page/static/unfold.png +0 -0
  93. package/devTools/tools.vue +25 -0
  94. package/devTools/type/devTools.d.ts +406 -0
  95. package/oxy-dev-tools/components/DevToolsUiHost.vue +555 -0
  96. package/oxy-dev-tools/config.js +61 -0
  97. package/oxy-dev-tools/core/components/mpDevBubble.vue +176 -0
  98. package/oxy-dev-tools/core/libs/createH5Bubble.js +156 -0
  99. package/oxy-dev-tools/core/libs/devCache.js +149 -0
  100. package/oxy-dev-tools/core/libs/devOptions.js +160 -0
  101. package/oxy-dev-tools/core/libs/devUi.js +219 -0
  102. package/oxy-dev-tools/core/libs/drawView.js +144 -0
  103. package/oxy-dev-tools/core/libs/errorReport.js +60 -0
  104. package/oxy-dev-tools/core/libs/jsonCompress.js +328 -0
  105. package/oxy-dev-tools/core/libs/logReport.js +55 -0
  106. package/oxy-dev-tools/core/libs/pageLinkList.js +121 -0
  107. package/oxy-dev-tools/core/libs/timeFormat.js +93 -0
  108. package/oxy-dev-tools/core/proxy/console.js +398 -0
  109. package/oxy-dev-tools/core/proxy/index.js +33 -0
  110. package/oxy-dev-tools/core/proxy/request.js +473 -0
  111. package/oxy-dev-tools/core/proxy/storage.js +96 -0
  112. package/oxy-dev-tools/core/proxy/uniBus.js +148 -0
  113. package/oxy-dev-tools/core/proxy/uniListen.js +190 -0
  114. package/oxy-dev-tools/core/proxy/vueMixin.js +115 -0
  115. package/oxy-dev-tools/index.ts +183 -0
  116. package/oxy-dev-tools/oxy-dev-tools.vue +62 -0
  117. package/oxy-dev-tools/page/components/bottomTools.vue +933 -0
  118. package/oxy-dev-tools/page/components/dialog/addStorage.vue +184 -0
  119. package/oxy-dev-tools/page/components/dialog/createDir.vue +352 -0
  120. package/oxy-dev-tools/page/components/dialog/editDialog.vue +178 -0
  121. package/oxy-dev-tools/page/components/dialog/routeDialog.vue +170 -0
  122. package/oxy-dev-tools/page/components/dialog/sendRequest.vue +530 -0
  123. package/oxy-dev-tools/page/components/dialog/textFileEditDialog.vue +379 -0
  124. package/oxy-dev-tools/page/components/libs/appDelDir.js +77 -0
  125. package/oxy-dev-tools/page/components/libs/dirReader.js +239 -0
  126. package/oxy-dev-tools/page/components/libs/fileSize.js +15 -0
  127. package/oxy-dev-tools/page/components/libs/getRuntimeInfo.js +132 -0
  128. package/oxy-dev-tools/page/components/listItem/consoleItem.vue +292 -0
  129. package/oxy-dev-tools/page/components/listItem/errorItem.vue +268 -0
  130. package/oxy-dev-tools/page/components/listItem/fileSysItem.vue +511 -0
  131. package/oxy-dev-tools/page/components/listItem/infoList.vue +89 -0
  132. package/oxy-dev-tools/page/components/listItem/jsRunnerItem.vue +236 -0
  133. package/oxy-dev-tools/page/components/listItem/logItem.vue +185 -0
  134. package/oxy-dev-tools/page/components/listItem/networkItem.vue +362 -0
  135. package/oxy-dev-tools/page/components/listItem/objectAnalysis.vue +642 -0
  136. package/oxy-dev-tools/page/components/listItem/pages.vue +285 -0
  137. package/oxy-dev-tools/page/components/listItem/routeItem.vue +140 -0
  138. package/oxy-dev-tools/page/components/listItem/setting.vue +687 -0
  139. package/oxy-dev-tools/page/components/listItem/storageList.vue +623 -0
  140. package/oxy-dev-tools/page/components/listItem/tools.vue +273 -0
  141. package/oxy-dev-tools/page/components/listItem/vuexList.vue +559 -0
  142. package/oxy-dev-tools/page/components/main.vue +1824 -0
  143. package/oxy-dev-tools/page/components/mixins/animationControl.js +80 -0
  144. package/oxy-dev-tools/page/components/mixins/mp.js +76 -0
  145. package/oxy-dev-tools/page/components/ui/btnTabs.vue +77 -0
  146. package/oxy-dev-tools/page/components/ui/codeHisPicker.vue +161 -0
  147. package/oxy-dev-tools/page/components/ui/h5Cell.vue +13 -0
  148. package/oxy-dev-tools/page/components/ui/menuBtn.vue +87 -0
  149. package/oxy-dev-tools/page/components/ui/mobileSwiperScroll.vue +71 -0
  150. package/oxy-dev-tools/page/components/ui/requestSpeedLimit.vue +47 -0
  151. package/oxy-dev-tools/page/components/ui/requestTimeoutMock.vue +50 -0
  152. package/oxy-dev-tools/page/components/ui/subTitleBar.vue +87 -0
  153. package/oxy-dev-tools/page/static/copy.png +0 -0
  154. package/oxy-dev-tools/page/static/delete.png +0 -0
  155. package/oxy-dev-tools/page/static/fileSys/AI.png +0 -0
  156. package/oxy-dev-tools/page/static/fileSys/DWG.png +0 -0
  157. package/oxy-dev-tools/page/static/fileSys/EXE.png +0 -0
  158. package/oxy-dev-tools/page/static/fileSys/GIF.png +0 -0
  159. package/oxy-dev-tools/page/static/fileSys/HTML.png +0 -0
  160. package/oxy-dev-tools/page/static/fileSys/PSD.png +0 -0
  161. package/oxy-dev-tools/page/static/fileSys/RVT.png +0 -0
  162. package/oxy-dev-tools/page/static/fileSys/SKP.png +0 -0
  163. package/oxy-dev-tools/page/static/fileSys/SVG.png +0 -0
  164. package/oxy-dev-tools/page/static/fileSys/excel.png +0 -0
  165. package/oxy-dev-tools/page/static/fileSys/pdf.png +0 -0
  166. package/oxy-dev-tools/page/static/fileSys/pptl.png +0 -0
  167. package/oxy-dev-tools/page/static/fileSys/shipin.png +0 -0
  168. package/oxy-dev-tools/page/static/fileSys/tupian.png +0 -0
  169. package/oxy-dev-tools/page/static/fileSys/txt.png +0 -0
  170. package/oxy-dev-tools/page/static/fileSys/weizhiwenjian.png +0 -0
  171. package/oxy-dev-tools/page/static/fileSys/wenjianjia.png +0 -0
  172. package/oxy-dev-tools/page/static/fileSys/word.png +0 -0
  173. package/oxy-dev-tools/page/static/fileSys/yasuo.png +0 -0
  174. package/oxy-dev-tools/page/static/fileSys/yinpin.png +0 -0
  175. package/oxy-dev-tools/page/static/fold.png +0 -0
  176. package/oxy-dev-tools/page/static/menu.png +0 -0
  177. package/oxy-dev-tools/page/static/refresh.png +0 -0
  178. package/oxy-dev-tools/page/static/unfold.png +0 -0
  179. package/oxy-dev-tools/tools.vue +22 -0
  180. package/oxy-dev-tools/type/devTools.d.ts +406 -0
  181. package/package.json +1 -1
  182. package/tags.json +1 -1
  183. package/web-types.json +1 -1
@@ -0,0 +1,495 @@
1
+ import devCache from "../libs/devCache";
2
+ import devOptions from "../libs/devOptions";
3
+ import jsonCompress from "../libs/jsonCompress";
4
+
5
+ export default {
6
+ /**
7
+ * 请求日志示例
8
+ */
9
+ ajaxLogData: {
10
+ id: 0, //请求id
11
+ type: 0, // 0发起请求中 1请求成功 2请求失败
12
+ sendTime: 0, //发送请求的时间
13
+ responseTime: 0, //响应时间
14
+ useTime: 0, //请求总耗时
15
+
16
+ url: "", //请求地址
17
+ header: "", //请求头
18
+ method: "get", //请求方式
19
+ data: "", //请求参数
20
+
21
+ responseBody: "", //响应主体
22
+ responseHeader: "", //响应头
23
+ responseStatus: "", //响应编码
24
+ responseMsg: "", //响应报错信息
25
+ },
26
+ options: null,
27
+ /**
28
+ * 请求的数据列表
29
+ */
30
+ ajaxData: [],
31
+ /**
32
+ * 挂载请求拦截器
33
+ */
34
+ install() {
35
+ let that = this;
36
+
37
+ try {
38
+ this.options = devOptions.getOptions()
39
+ if (!this.options.network.status) return;
40
+
41
+ this.ajaxData = devCache.get("request");
42
+ if (!this.ajaxData) this.ajaxData = [];
43
+ this.syncReqData(); //同步缓存
44
+
45
+ uni.addInterceptor('request', {
46
+ /**
47
+ * 入参
48
+ */
49
+ invoke(args) {
50
+
51
+ try {
52
+ args._id_ = new Date().getTime() + '_' + Number(Math.random().toString().replace("0.", ""));
53
+
54
+ let copyData = JSON.parse(JSON.stringify(that.ajaxLogData))
55
+ copyData.id = args._id_;
56
+ copyData.sendTime = new Date().getTime();
57
+ copyData.url = that.dataCopy(args.url);
58
+ copyData.header = that.dataCopy(args.header);
59
+ if (!args.method) {
60
+ copyData.method = "get"
61
+ } else {
62
+ copyData.method = that.dataCopy(args.method);
63
+ }
64
+
65
+ let cSize = jsonCompress.calculateStringByteSize(copyData)
66
+ if (cSize > that.options.network.cache.rowSize) {
67
+
68
+ copyData = jsonCompress.compressObject(copyData, that.options.network.cache.rowSize)
69
+
70
+ } else {
71
+
72
+ let data = jsonCompress.compressObject(args.data, that.options.network.cache.rowSize - cSize)
73
+ try {
74
+ data = JSON.parse(data)
75
+ } catch (error) { }
76
+ copyData.data = data;
77
+
78
+ }
79
+ that.ajaxData.unshift(copyData)
80
+
81
+ } catch (error) {
82
+ console.error("request拦截器invoke出错", error)
83
+ }
84
+
85
+ },
86
+ success(response, request) {
87
+ return new Promise(async (yes, err) => {
88
+
89
+ //! 延迟请求返回,模拟弱网环境
90
+ let speedLimit = uni.getStorageSync("devtools_uniResLimitType");
91
+ if (speedLimit) {
92
+ let delayDuration = {
93
+ "2g": [30, 60],
94
+ "3g-": [10, 30],
95
+ "3g": [3, 10],
96
+ "4g": [0.5, 3],
97
+ }
98
+ let sleepParam = delayDuration[speedLimit];
99
+ if (sleepParam) {
100
+ let sleepTime = rNum(sleepParam[0], sleepParam[1]);
101
+ await sleep(sleepTime * 1000)
102
+ response.errMsg = response.errMsg + ` | [devtools模拟弱网延迟:${sleepTime}s]`
103
+ }
104
+ }
105
+
106
+ // ! 随机响应失败概率
107
+ let resTimeout = uni.getStorageSync("devtools_uniResTimeout");
108
+ let isFail = false
109
+ if (resTimeout && resTimeout > 1) {
110
+ let targetPro = Number(resTimeout);
111
+ let randPro = rNum(0, 100);
112
+ if (randPro < targetPro) {
113
+ // 命中失败
114
+ response.statusCode = rNum(400, 600); //生成随机400 ~ 600之间的状态码
115
+ response.errMsg = response.errMsg + ` | [devtools随机超时报错,当前命中的概率阶层为:${targetPro}%,生成的随机数为:${randPro}]`
116
+ response.data = "[devTools]模拟请求失败结果!"
117
+ isFail = true
118
+ }
119
+ }
120
+
121
+
122
+ // ! 记录响应内容
123
+ try {
124
+ let item = that.ajaxData.find(x => x.id == request._id_);
125
+ if (!item) return;
126
+
127
+ item.responseBodySize = jsonCompress.calculateStringByteSize(response.data);
128
+ item.responseMsg = response.errMsg;
129
+ item.responseStatus = response.statusCode;
130
+ item.responseHeader = response.header;
131
+ item.type = 1;
132
+ item.responseTime = new Date().getTime();
133
+ item.useTime = ((item.responseTime - item.sendTime) / 1000).toFixed(3);
134
+
135
+ let size = jsonCompress.calculateStringByteSize(item)
136
+ if (size > that.options.network.cache.rowSize) {
137
+
138
+ item.responseBody = "[内容太长已截断多余部分]"
139
+ let data = jsonCompress.compressObject(item, that.options.network.cache.rowSize)
140
+ that.ajaxData[that.ajaxData.findIndex(x => x.id == request._id_)] = data;
141
+
142
+ } else {
143
+
144
+ let json = response.data;
145
+ try {
146
+ json = JSON.parse(JSON.stringify(json))
147
+ } catch (error) { }
148
+ item.responseBody = jsonCompress.compressObject(json, that.options.network.cache.rowSize - size)
149
+
150
+ }
151
+
152
+ } catch (error) {
153
+ console.error("request拦截器success出错", error)
154
+ }
155
+
156
+ if (isFail) {
157
+ err(response.data)
158
+ } else {
159
+ yes(response)
160
+ }
161
+
162
+ })
163
+ },
164
+ fail(err, request) {
165
+ try {
166
+ let item = that.ajaxData.find(x => x.id == request._id_);
167
+ if (!item) return;
168
+
169
+ item.type = 2;
170
+ item.responseTime = new Date().getTime();
171
+ item.useTime = ((item.responseTime - item.sendTime) / 1000).toFixed(3);
172
+
173
+ item.responseMsg = err.errMsg;
174
+ } catch (error) {
175
+ console.error("request拦截器fail出错", error)
176
+ }
177
+ },
178
+ complete(res) {
179
+
180
+ }
181
+ })
182
+
183
+ uni.addInterceptor("uploadFile", {
184
+ invoke(args) {
185
+ try {
186
+ args._id_ = new Date().getTime() + '_' + Number(Math.random().toString().replace("0.", ""));
187
+
188
+ let copyData = JSON.parse(JSON.stringify(that.ajaxLogData))
189
+ copyData.id = args._id_;
190
+ copyData.sendTime = new Date().getTime();
191
+ copyData.url = that.dataCopy(args.url);
192
+ copyData.header = that.dataCopy(args.header);
193
+ copyData.method = "UPLOAD";
194
+
195
+ // 处理上传文件特有的参数
196
+ let uploadData = {
197
+ filePath: args.filePath,
198
+ name: args.name,
199
+ formData: args.formData
200
+ };
201
+
202
+ let cSize = jsonCompress.calculateStringByteSize(copyData)
203
+ if (cSize > that.options.network.cache.rowSize) {
204
+ copyData = jsonCompress.compressObject(copyData, that.options.network.cache.rowSize)
205
+ } else {
206
+ let data = jsonCompress.compressObject(uploadData, that.options.network.cache.rowSize - cSize)
207
+ try {
208
+ data = JSON.parse(data)
209
+ } catch (error) { }
210
+ copyData.data = data;
211
+ }
212
+ that.ajaxData.unshift(copyData)
213
+ } catch (error) {
214
+ console.error("uploadFile拦截器invoke出错", error)
215
+ }
216
+ },
217
+ success(response, request) {
218
+ return new Promise(async (yes, err) => {
219
+ //! 延迟请求返回,模拟弱网环境
220
+ let speedLimit = uni.getStorageSync("devtools_uniResLimitType");
221
+ if (speedLimit) {
222
+ let delayDuration = {
223
+ "2g": [30, 60],
224
+ "3g-": [10, 30],
225
+ "3g": [3, 10],
226
+ "4g": [0.5, 3],
227
+ }
228
+ let sleepParam = delayDuration[speedLimit];
229
+ if (sleepParam) {
230
+ let sleepTime = rNum(sleepParam[0], sleepParam[1]);
231
+ await sleep(sleepTime * 1000)
232
+ response.errMsg = response.errMsg + ` | [devtools模拟弱网延迟:${sleepTime}s]`
233
+ }
234
+ }
235
+
236
+ // ! 随机响应失败概率
237
+ let resTimeout = uni.getStorageSync("devtools_uniResTimeout");
238
+ let isFail = false
239
+ if (resTimeout && resTimeout > 1) {
240
+ let targetPro = Number(resTimeout);
241
+ let randPro = rNum(0, 100);
242
+ if (randPro < targetPro) {
243
+ response.statusCode = rNum(400, 600);
244
+ response.errMsg = response.errMsg + ` | [devtools随机超时报错,当前命中的概率阶层为:${targetPro}%,生成的随机数为:${randPro}]`
245
+ response.data = "[devTools]模拟上传失败结果!"
246
+ isFail = true
247
+ }
248
+ }
249
+
250
+ // ! 记录响应内容
251
+ try {
252
+ let item = that.ajaxData.find(x => x.id == request._id_);
253
+ if (!item) return;
254
+
255
+ item.responseBodySize = jsonCompress.calculateStringByteSize(response.data);
256
+ item.responseMsg = response.errMsg;
257
+ item.responseStatus = response.statusCode;
258
+ item.responseHeader = response.header;
259
+ item.type = 1;
260
+ item.responseTime = new Date().getTime();
261
+ item.useTime = ((item.responseTime - item.sendTime) / 1000).toFixed(3);
262
+
263
+ let size = jsonCompress.calculateStringByteSize(item)
264
+ if (size > that.options.network.cache.rowSize) {
265
+ item.responseBody = "[内容太长已截断多余部分]"
266
+ let data = jsonCompress.compressObject(item, that.options.network.cache.rowSize)
267
+ that.ajaxData[that.ajaxData.findIndex(x => x.id == request._id_)] = data;
268
+ } else {
269
+ let json = response.data;
270
+ try {
271
+ json = JSON.parse(JSON.stringify(json))
272
+ } catch (error) { }
273
+ item.responseBody = jsonCompress.compressObject(json, that.options.network.cache.rowSize - size)
274
+ }
275
+ } catch (error) {
276
+ console.error("uploadFile拦截器success出错", error)
277
+ }
278
+
279
+ if (isFail) {
280
+ err(response.data)
281
+ } else {
282
+ yes(response)
283
+ }
284
+ })
285
+ },
286
+ fail(err, request) {
287
+ try {
288
+ let item = that.ajaxData.find(x => x.id == request._id_);
289
+ if (!item) return;
290
+
291
+ item.type = 2;
292
+ item.responseTime = new Date().getTime();
293
+ item.useTime = ((item.responseTime - item.sendTime) / 1000).toFixed(3);
294
+ item.responseMsg = err.errMsg;
295
+ } catch (error) {
296
+ console.error("uploadFile拦截器fail出错", error)
297
+ }
298
+ }
299
+ })
300
+
301
+ uni.addInterceptor("downloadFile", {
302
+ invoke(args) {
303
+ try {
304
+ args._id_ = new Date().getTime() + '_' + Number(Math.random().toString().replace("0.", ""));
305
+
306
+ let copyData = JSON.parse(JSON.stringify(that.ajaxLogData))
307
+ copyData.id = args._id_;
308
+ copyData.sendTime = new Date().getTime();
309
+ copyData.url = that.dataCopy(args.url);
310
+ copyData.header = that.dataCopy(args.header);
311
+ copyData.method = "DOWN";
312
+
313
+ // 处理下载文件特有的参数
314
+ let downloadData = {
315
+ filePath: args.filePath
316
+ };
317
+
318
+ let cSize = jsonCompress.calculateStringByteSize(copyData)
319
+ if (cSize > that.options.network.cache.rowSize) {
320
+ copyData = jsonCompress.compressObject(copyData, that.options.network.cache.rowSize)
321
+ } else {
322
+ let data = jsonCompress.compressObject(downloadData, that.options.network.cache.rowSize - cSize)
323
+ try {
324
+ data = JSON.parse(data)
325
+ } catch (error) { }
326
+ copyData.data = data;
327
+ }
328
+ that.ajaxData.unshift(copyData)
329
+ } catch (error) {
330
+ console.error("downloadFile拦截器invoke出错", error)
331
+ }
332
+ },
333
+ success(response, request) {
334
+ return new Promise(async (yes, err) => {
335
+ //! 延迟请求返回,模拟弱网环境
336
+ let speedLimit = uni.getStorageSync("devtools_uniResLimitType");
337
+ if (speedLimit) {
338
+ let delayDuration = {
339
+ "2g": [30, 60],
340
+ "3g-": [10, 30],
341
+ "3g": [3, 10],
342
+ "4g": [0.5, 3],
343
+ }
344
+ let sleepParam = delayDuration[speedLimit];
345
+ if (sleepParam) {
346
+ let sleepTime = rNum(sleepParam[0], sleepParam[1]);
347
+ await sleep(sleepTime * 1000)
348
+ response.errMsg = response.errMsg + ` | [devtools模拟弱网延迟:${sleepTime}s]`
349
+ }
350
+ }
351
+
352
+ // ! 随机响应失败概率
353
+ let resTimeout = uni.getStorageSync("devtools_uniResTimeout");
354
+ let isFail = false
355
+ if (resTimeout && resTimeout > 1) {
356
+ let targetPro = Number(resTimeout);
357
+ let randPro = rNum(0, 100);
358
+ if (randPro < targetPro) {
359
+ response.statusCode = rNum(400, 600);
360
+ response.errMsg = response.errMsg + ` | [devtools随机超时报错,当前命中的概率阶层为:${targetPro}%,生成的随机数为:${randPro}]`
361
+ response.tempFilePath = ""
362
+ isFail = true
363
+ }
364
+ }
365
+
366
+ // ! 记录响应内容
367
+ try {
368
+ let item = that.ajaxData.find(x => x.id == request._id_);
369
+ if (!item) return;
370
+
371
+ // 下载文件不记录文件内容,只记录文件路径等信息
372
+ let responseData = {
373
+ tempFilePath: response.tempFilePath,
374
+ statusCode: response.statusCode
375
+ };
376
+
377
+ item.responseBodySize = jsonCompress.calculateStringByteSize(responseData);
378
+ item.responseMsg = response.errMsg;
379
+ item.responseStatus = response.statusCode;
380
+ item.responseHeader = response.header;
381
+ item.type = 1;
382
+ item.responseTime = new Date().getTime();
383
+ item.useTime = ((item.responseTime - item.sendTime) / 1000).toFixed(3);
384
+
385
+ let size = jsonCompress.calculateStringByteSize(item)
386
+ if (size > that.options.network.cache.rowSize) {
387
+ item.responseBody = "[内容太长已截断多余部分]"
388
+ let data = jsonCompress.compressObject(item, that.options.network.cache.rowSize)
389
+ that.ajaxData[that.ajaxData.findIndex(x => x.id == request._id_)] = data;
390
+ } else {
391
+ item.responseBody = jsonCompress.compressObject(responseData, that.options.network.cache.rowSize - size)
392
+ }
393
+ } catch (error) {
394
+ console.error("downloadFile拦截器success出错", error)
395
+ }
396
+
397
+ if (isFail) {
398
+ err(response)
399
+ } else {
400
+ yes(response)
401
+ }
402
+ })
403
+ },
404
+ fail(err, request) {
405
+ try {
406
+ let item = that.ajaxData.find(x => x.id == request._id_);
407
+ if (!item) return;
408
+
409
+ item.type = 2;
410
+ item.responseTime = new Date().getTime();
411
+ item.useTime = ((item.responseTime - item.sendTime) / 1000).toFixed(3);
412
+ item.responseMsg = err.errMsg;
413
+ } catch (error) {
414
+ console.error("downloadFile拦截器fail出错", error)
415
+ }
416
+ }
417
+ })
418
+
419
+ // ! 删除指定请求记录
420
+ uni.$on("devTools_delNetworkItemById", (id) => {
421
+ let i = this.ajaxData.findIndex(x => x.id == id)
422
+ if (i != -1) {
423
+ this.ajaxData.splice(i, 1)
424
+ }
425
+ this.saveData()
426
+ })
427
+
428
+ // ! 清空请求记录
429
+ uni.$on("devTools_delNetworkAll", () => {
430
+ this.ajaxData = []
431
+ devCache.clearItem("request")
432
+ })
433
+ } catch (error) {
434
+ console.log("request.install error", error);
435
+ }
436
+
437
+ },
438
+ /**
439
+ * 同步请求信息到缓存数据中
440
+ */
441
+ syncReqData() {
442
+ let that = this;
443
+ setTimeout(() => {
444
+ try {
445
+ that.saveData()
446
+ } catch (error) {
447
+ console.log("request.syncReqData", error);
448
+ }
449
+ that.syncReqData()
450
+ }, 4000);
451
+ },
452
+ /**
453
+ * 保存数据到缓存中
454
+ */
455
+ saveData() {
456
+ let that = this;
457
+ that.ajaxData = jsonCompress.compressArray(that.ajaxData, that.options.network.cache.size)
458
+ devCache.set("request", that.ajaxData)
459
+ },
460
+ /**
461
+ * 复制对象
462
+ */
463
+ dataCopy(data) {
464
+ try {
465
+ if (typeof data == "object") {
466
+ return JSON.parse(JSON.stringify([data]))[0]
467
+ } else {
468
+ return data;
469
+ }
470
+ } catch (error) {
471
+ console.log("request.dataCopy", error);
472
+ return ""
473
+ }
474
+ }
475
+ }
476
+
477
+
478
+
479
+
480
+
481
+ /**
482
+ * 随机生成n~m的数,支持两位小数
483
+ */
484
+ function rNum(n, m) {
485
+ return Number((Math.random() * (m - n) + n).toFixed(2));
486
+ }
487
+
488
+ /**
489
+ * 休眠指定时长
490
+ */
491
+ function sleep(t) {
492
+ return new Promise((y) => {
493
+ setTimeout(y, t);
494
+ })
495
+ }
@@ -0,0 +1,113 @@
1
+ import devCache from "../libs/devCache";
2
+
3
+
4
+ export default {
5
+ /**
6
+ * 挂载缓存监听
7
+ */
8
+ install() {
9
+ try {
10
+ // #ifdef MP
11
+ let that = this;
12
+
13
+ let _setStorage = uni.setStorage;
14
+ uni.setStorage = setStorage;
15
+ function setStorage() {
16
+ try {
17
+ if (
18
+ arguments[0]
19
+ && arguments[0].key
20
+ && arguments[0].key.indexOf("devTools_") != 0
21
+ ) {
22
+ that.addCacheKey(arguments[0].key)
23
+ }
24
+ } catch (error) { }
25
+ return _setStorage(...arguments)
26
+ }
27
+
28
+ let _setStorageSync = uni.setStorageSync;
29
+ uni.setStorageSync = setStorageSync;
30
+ function setStorageSync() {
31
+ try {
32
+ if (
33
+ arguments[0]
34
+ && arguments[0].indexOf("devTools_") != 0
35
+ ) {
36
+ that.addCacheKey(arguments[0])
37
+ }
38
+ } catch (error) { }
39
+ return _setStorageSync(...arguments)
40
+ }
41
+
42
+ let _removeStorage = uni.removeStorage;
43
+ uni.removeStorage = removeStorage;
44
+ function removeStorage() {
45
+ try {
46
+ if (
47
+ arguments[0]
48
+ && arguments[0].key
49
+ && arguments[0].key.indexOf("devTools_") != 0
50
+ ) {
51
+ that.delCacheKey(arguments[0].key)
52
+ }
53
+ } catch (error) { }
54
+ return _removeStorage(...arguments)
55
+ }
56
+
57
+ let _removeStorageSync = uni.removeStorageSync;
58
+ uni.removeStorageSync = removeStorageSync;
59
+ function removeStorageSync() {
60
+ try {
61
+ if (
62
+ arguments[0]
63
+ && arguments[0].indexOf("devTools_") != 0
64
+ ) {
65
+ that.delCacheKey(arguments[0])
66
+ }
67
+ } catch (error) { }
68
+ return _removeStorageSync(...arguments)
69
+ }
70
+
71
+ // #endif
72
+ } catch (error) {
73
+ console.log("devTools storage.install error", error);
74
+ }
75
+ },
76
+ /**
77
+ * 添加缓存key
78
+ */
79
+ addCacheKey(key) {
80
+ try {
81
+ if (key && typeof key == "string") {
82
+
83
+ let storageList = devCache.get("storage")
84
+ if (!storageList) storageList = [];
85
+ if (storageList.indexOf(key) == -1) {
86
+ storageList.push(key)
87
+ devCache.set("storage", storageList)
88
+ }
89
+
90
+ }
91
+ } catch (error) {
92
+ console.log("devTools storage.addCacheKey error", error);
93
+ }
94
+ },
95
+ /**
96
+ * 删除指定缓存key
97
+ */
98
+ delCacheKey(key) {
99
+ try {
100
+ if (key && typeof key == "string") {
101
+ let storageList = devCache.get("storage")
102
+ if (!storageList) storageList = [];
103
+ let index = storageList.indexOf(key);
104
+ if (index > -1) {
105
+ storageList.splice(index, 1)
106
+ devCache.set("storage", storageList)
107
+ }
108
+ }
109
+ } catch (error) {
110
+ console.log("devTools storage.delCacheKey error", error);
111
+ }
112
+ },
113
+ }