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