oxy-uni-ui 2.1.0 → 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 (269) hide show
  1. package/attributes.json +1 -1
  2. package/components/common/abstracts/variable.scss +145 -100
  3. package/components/common/util.ts +25 -0
  4. package/components/composables/useDynamicVirtualScroll.ts +80 -0
  5. package/components/oxy-action-sheet/index.scss +6 -6
  6. package/components/oxy-backtop/index.scss +1 -1
  7. package/components/oxy-badge/index.scss +2 -2
  8. package/components/oxy-button/index.scss +3 -6
  9. package/components/oxy-calendar/index.scss +2 -2
  10. package/components/oxy-calendar/oxy-calendar.vue +3 -3
  11. package/components/oxy-calendar-view/monthPanel/month-panel.vue +72 -37
  12. package/components/oxy-calendar-view/monthPanel/types.ts +43 -1
  13. package/components/oxy-calendar-view/types.ts +1 -1
  14. package/components/oxy-calendar-view/utils.ts +12 -1
  15. package/components/oxy-calendar-view/yearPanel/types.ts +36 -2
  16. package/components/oxy-calendar-view/yearPanel/year-panel.vue +64 -45
  17. package/components/oxy-card/index.scss +4 -4
  18. package/components/oxy-cell/index.scss +1 -1
  19. package/components/oxy-cell-group/index.scss +2 -2
  20. package/components/oxy-checkbox/index.scss +87 -197
  21. package/components/oxy-collapse/index.scss +1 -1
  22. package/components/oxy-collapse-item/index.scss +2 -2
  23. package/components/oxy-corner/index.scss +3 -3
  24. package/components/oxy-count-to/oxy-count-to.vue +3 -3
  25. package/components/oxy-count-to/types.ts +1 -1
  26. package/components/oxy-date-strip-item/index.scss +4 -4
  27. package/components/oxy-datetime-picker/types.ts +1 -1
  28. package/components/oxy-datetime-picker-view/types.ts +2 -2
  29. package/components/oxy-fab/index.scss +1 -5
  30. package/components/oxy-file-list/index.scss +2 -2
  31. package/components/oxy-footer/index.scss +2 -2
  32. package/components/oxy-footer/oxy-footer.vue +2 -3
  33. package/components/oxy-form-item/index.scss +0 -5
  34. package/components/oxy-grid/oxy-grid.vue +1 -1
  35. package/components/oxy-grid-item/index.scss +1 -1
  36. package/components/oxy-guidance/index.scss +2 -2
  37. package/components/oxy-img/index.scss +2 -2
  38. package/components/oxy-img-cropper/index.scss +0 -2
  39. package/components/oxy-img-lazy/index.scss +0 -1
  40. package/components/oxy-index-anchor/index.scss +3 -3
  41. package/components/oxy-input/index.scss +2 -2
  42. package/components/oxy-input-number/index.scss +21 -3
  43. package/components/oxy-input-number/oxy-input-number.vue +9 -1
  44. package/components/oxy-keyboard/index.scss +1 -1
  45. package/components/oxy-link/index.scss +11 -10
  46. package/components/oxy-loading/index.scss +1 -1
  47. package/components/oxy-loadmore/index.scss +1 -1
  48. package/components/oxy-message-box/index.scss +7 -7
  49. package/components/oxy-navbar/index.scss +1 -1
  50. package/components/oxy-navbar/oxy-navbar.vue +2 -3
  51. package/components/oxy-password-input/index.scss +4 -4
  52. package/components/oxy-picker/types.ts +1 -1
  53. package/components/oxy-picker-view/oxy-picker-view.vue +8 -5
  54. package/components/oxy-picker-view/types.ts +2 -2
  55. package/components/oxy-progress/index.scss +2 -2
  56. package/components/oxy-radio/index.scss +8 -4
  57. package/components/oxy-radio-group/index.scss +0 -1
  58. package/components/oxy-rich-text/index.scss +2 -6
  59. package/components/oxy-rich-text/mp-html/mp-html.d.ts +2 -0
  60. package/components/oxy-rich-text/mp-html/mp-html.vue +2 -1
  61. package/components/oxy-rich-text/mp-html/node/node.vue +23 -0
  62. package/components/oxy-rich-text/mp-html/parser.js +6 -6
  63. package/components/oxy-rich-text/oxy-rich-text.vue +23 -0
  64. package/components/oxy-search/index.scss +1 -1
  65. package/components/oxy-segmented/index.scss +4 -8
  66. package/components/oxy-select/index.scss +6 -6
  67. package/components/oxy-sidebar-item/index.scss +20 -11
  68. package/components/oxy-slider/index.scss +4 -5
  69. package/components/oxy-sort-button/index.scss +6 -9
  70. package/components/oxy-splitter-panel/index.scss +8 -8
  71. package/components/oxy-step/index.scss +9 -9
  72. package/components/oxy-swiper-nav/index.scss +2 -2
  73. package/components/oxy-switch/index.scss +3 -3
  74. package/components/oxy-tab/index.scss +8 -2
  75. package/components/oxy-tabbar/index.scss +3 -3
  76. package/components/oxy-tabbar/oxy-tabbar.vue +3 -3
  77. package/components/oxy-table/index.scss +0 -1
  78. package/components/oxy-table-col/index.scss +1 -2
  79. package/components/oxy-tabs/index.scss +3 -3
  80. package/components/oxy-tag/index.scss +160 -20
  81. package/components/oxy-tag/oxy-tag.vue +14 -2
  82. package/components/oxy-tag/types.ts +9 -0
  83. package/components/oxy-text/index.scss +1 -1
  84. package/components/oxy-textarea/index.scss +2 -6
  85. package/components/oxy-toast/index.scss +1 -1
  86. package/components/oxy-tree/index.scss +31 -11
  87. package/components/oxy-tree/oxy-tree.vue +113 -2
  88. package/components/oxy-tree/types.ts +1 -0
  89. package/components/oxy-upload/index.scss +3 -3
  90. package/components/oxy-video-preview/index.scss +3 -3
  91. package/components/oxy-virtual-scroll/index.scss +1 -1
  92. package/components/oxy-voice-player/index.scss +36 -36
  93. package/components/oxy-watermark/index.scss +1 -1
  94. package/dev-tools.ts +2 -0
  95. package/devTools/components/DevToolsOverlay.vue +56 -0
  96. package/devTools/components/DevToolsUiHost.vue +589 -0
  97. package/devTools/config.js +55 -0
  98. package/devTools/core/components/mpDevBubble.vue +174 -0
  99. package/devTools/core/libs/createH5Bubble.js +156 -0
  100. package/devTools/core/libs/devCache.js +151 -0
  101. package/devTools/core/libs/devOptions.js +163 -0
  102. package/devTools/core/libs/devUi.js +219 -0
  103. package/devTools/core/libs/drawView.js +140 -0
  104. package/devTools/core/libs/errorReport.js +64 -0
  105. package/devTools/core/libs/jsonCompress.js +334 -0
  106. package/devTools/core/libs/logReport.js +59 -0
  107. package/devTools/core/libs/pageLinkList.js +125 -0
  108. package/devTools/core/libs/timeFormat.js +94 -0
  109. package/devTools/core/proxy/console.js +430 -0
  110. package/devTools/core/proxy/index.js +36 -0
  111. package/devTools/core/proxy/request.js +495 -0
  112. package/devTools/core/proxy/storage.js +113 -0
  113. package/devTools/core/proxy/uniBus.js +153 -0
  114. package/devTools/core/proxy/uniListen.js +192 -0
  115. package/devTools/core/proxy/vueMixin.js +120 -0
  116. package/devTools/index.js +168 -0
  117. package/devTools/page/components/bottomTools.vue +1046 -0
  118. package/devTools/page/components/dialog/addStorage.vue +204 -0
  119. package/devTools/page/components/dialog/createDir.vue +366 -0
  120. package/devTools/page/components/dialog/editDialog.vue +192 -0
  121. package/devTools/page/components/dialog/routeDialog.vue +184 -0
  122. package/devTools/page/components/dialog/sendRequest.vue +603 -0
  123. package/devTools/page/components/dialog/textFileEditDialog.vue +391 -0
  124. package/devTools/page/components/libs/appDelDir.js +86 -0
  125. package/devTools/page/components/libs/dirReader.js +248 -0
  126. package/devTools/page/components/libs/fileSize.js +15 -0
  127. package/devTools/page/components/libs/getRuntimeInfo.js +134 -0
  128. package/devTools/page/components/listItem/consoleItem.vue +314 -0
  129. package/devTools/page/components/listItem/errorItem.vue +292 -0
  130. package/devTools/page/components/listItem/fileSysItem.vue +533 -0
  131. package/devTools/page/components/listItem/infoList.vue +100 -0
  132. package/devTools/page/components/listItem/jsRunnerItem.vue +255 -0
  133. package/devTools/page/components/listItem/logItem.vue +193 -0
  134. package/devTools/page/components/listItem/networkItem.vue +398 -0
  135. package/devTools/page/components/listItem/objectAnalysis.vue +651 -0
  136. package/devTools/page/components/listItem/pages.vue +319 -0
  137. package/devTools/page/components/listItem/routeItem.vue +153 -0
  138. package/devTools/page/components/listItem/setting.vue +734 -0
  139. package/devTools/page/components/listItem/storageList.vue +681 -0
  140. package/devTools/page/components/listItem/tools.vue +315 -0
  141. package/devTools/page/components/listItem/vuexList.vue +599 -0
  142. package/devTools/page/components/main.vue +1867 -0
  143. package/devTools/page/components/mixins/animationControl.js +91 -0
  144. package/devTools/page/components/mixins/mp.js +83 -0
  145. package/devTools/page/components/ui/btnTabs.vue +90 -0
  146. package/devTools/page/components/ui/codeHisPicker.vue +172 -0
  147. package/devTools/page/components/ui/h5Cell.vue +13 -0
  148. package/devTools/page/components/ui/menuBtn.vue +94 -0
  149. package/devTools/page/components/ui/mobileSwiperScroll.vue +74 -0
  150. package/devTools/page/components/ui/requestSpeedLimit.vue +52 -0
  151. package/devTools/page/components/ui/requestTimeoutMock.vue +55 -0
  152. package/devTools/page/components/ui/subTitleBar.vue +101 -0
  153. package/devTools/page/static/copy.png +0 -0
  154. package/devTools/page/static/delete.png +0 -0
  155. package/devTools/page/static/fileSys/AI.png +0 -0
  156. package/devTools/page/static/fileSys/DWG.png +0 -0
  157. package/devTools/page/static/fileSys/EXE.png +0 -0
  158. package/devTools/page/static/fileSys/GIF.png +0 -0
  159. package/devTools/page/static/fileSys/HTML.png +0 -0
  160. package/devTools/page/static/fileSys/PSD.png +0 -0
  161. package/devTools/page/static/fileSys/RVT.png +0 -0
  162. package/devTools/page/static/fileSys/SKP.png +0 -0
  163. package/devTools/page/static/fileSys/SVG.png +0 -0
  164. package/devTools/page/static/fileSys/excel.png +0 -0
  165. package/devTools/page/static/fileSys/pdf.png +0 -0
  166. package/devTools/page/static/fileSys/pptl.png +0 -0
  167. package/devTools/page/static/fileSys/shipin.png +0 -0
  168. package/devTools/page/static/fileSys/tupian.png +0 -0
  169. package/devTools/page/static/fileSys/txt.png +0 -0
  170. package/devTools/page/static/fileSys/weizhiwenjian.png +0 -0
  171. package/devTools/page/static/fileSys/wenjianjia.png +0 -0
  172. package/devTools/page/static/fileSys/word.png +0 -0
  173. package/devTools/page/static/fileSys/yasuo.png +0 -0
  174. package/devTools/page/static/fileSys/yinpin.png +0 -0
  175. package/devTools/page/static/fold.png +0 -0
  176. package/devTools/page/static/menu.png +0 -0
  177. package/devTools/page/static/refresh.png +0 -0
  178. package/devTools/page/static/unfold.png +0 -0
  179. package/devTools/tools.vue +25 -0
  180. package/devTools/type/devTools.d.ts +406 -0
  181. package/oxy-dev-tools/components/DevToolsUiHost.vue +555 -0
  182. package/oxy-dev-tools/config.js +61 -0
  183. package/oxy-dev-tools/core/components/mpDevBubble.vue +176 -0
  184. package/oxy-dev-tools/core/libs/createH5Bubble.js +156 -0
  185. package/oxy-dev-tools/core/libs/devCache.js +149 -0
  186. package/oxy-dev-tools/core/libs/devOptions.js +160 -0
  187. package/oxy-dev-tools/core/libs/devUi.js +219 -0
  188. package/oxy-dev-tools/core/libs/drawView.js +144 -0
  189. package/oxy-dev-tools/core/libs/errorReport.js +60 -0
  190. package/oxy-dev-tools/core/libs/jsonCompress.js +328 -0
  191. package/oxy-dev-tools/core/libs/logReport.js +55 -0
  192. package/oxy-dev-tools/core/libs/pageLinkList.js +121 -0
  193. package/oxy-dev-tools/core/libs/timeFormat.js +93 -0
  194. package/oxy-dev-tools/core/proxy/console.js +398 -0
  195. package/oxy-dev-tools/core/proxy/index.js +33 -0
  196. package/oxy-dev-tools/core/proxy/request.js +473 -0
  197. package/oxy-dev-tools/core/proxy/storage.js +96 -0
  198. package/oxy-dev-tools/core/proxy/uniBus.js +148 -0
  199. package/oxy-dev-tools/core/proxy/uniListen.js +190 -0
  200. package/oxy-dev-tools/core/proxy/vueMixin.js +115 -0
  201. package/oxy-dev-tools/index.ts +183 -0
  202. package/oxy-dev-tools/oxy-dev-tools.vue +62 -0
  203. package/oxy-dev-tools/page/components/bottomTools.vue +933 -0
  204. package/oxy-dev-tools/page/components/dialog/addStorage.vue +184 -0
  205. package/oxy-dev-tools/page/components/dialog/createDir.vue +352 -0
  206. package/oxy-dev-tools/page/components/dialog/editDialog.vue +178 -0
  207. package/oxy-dev-tools/page/components/dialog/routeDialog.vue +170 -0
  208. package/oxy-dev-tools/page/components/dialog/sendRequest.vue +530 -0
  209. package/oxy-dev-tools/page/components/dialog/textFileEditDialog.vue +379 -0
  210. package/oxy-dev-tools/page/components/libs/appDelDir.js +77 -0
  211. package/oxy-dev-tools/page/components/libs/dirReader.js +239 -0
  212. package/oxy-dev-tools/page/components/libs/fileSize.js +15 -0
  213. package/oxy-dev-tools/page/components/libs/getRuntimeInfo.js +132 -0
  214. package/oxy-dev-tools/page/components/listItem/consoleItem.vue +292 -0
  215. package/oxy-dev-tools/page/components/listItem/errorItem.vue +268 -0
  216. package/oxy-dev-tools/page/components/listItem/fileSysItem.vue +511 -0
  217. package/oxy-dev-tools/page/components/listItem/infoList.vue +89 -0
  218. package/oxy-dev-tools/page/components/listItem/jsRunnerItem.vue +236 -0
  219. package/oxy-dev-tools/page/components/listItem/logItem.vue +185 -0
  220. package/oxy-dev-tools/page/components/listItem/networkItem.vue +362 -0
  221. package/oxy-dev-tools/page/components/listItem/objectAnalysis.vue +642 -0
  222. package/oxy-dev-tools/page/components/listItem/pages.vue +285 -0
  223. package/oxy-dev-tools/page/components/listItem/routeItem.vue +140 -0
  224. package/oxy-dev-tools/page/components/listItem/setting.vue +687 -0
  225. package/oxy-dev-tools/page/components/listItem/storageList.vue +623 -0
  226. package/oxy-dev-tools/page/components/listItem/tools.vue +273 -0
  227. package/oxy-dev-tools/page/components/listItem/vuexList.vue +559 -0
  228. package/oxy-dev-tools/page/components/main.vue +1824 -0
  229. package/oxy-dev-tools/page/components/mixins/animationControl.js +80 -0
  230. package/oxy-dev-tools/page/components/mixins/mp.js +76 -0
  231. package/oxy-dev-tools/page/components/ui/btnTabs.vue +77 -0
  232. package/oxy-dev-tools/page/components/ui/codeHisPicker.vue +161 -0
  233. package/oxy-dev-tools/page/components/ui/h5Cell.vue +13 -0
  234. package/oxy-dev-tools/page/components/ui/menuBtn.vue +87 -0
  235. package/oxy-dev-tools/page/components/ui/mobileSwiperScroll.vue +71 -0
  236. package/oxy-dev-tools/page/components/ui/requestSpeedLimit.vue +47 -0
  237. package/oxy-dev-tools/page/components/ui/requestTimeoutMock.vue +50 -0
  238. package/oxy-dev-tools/page/components/ui/subTitleBar.vue +87 -0
  239. package/oxy-dev-tools/page/static/copy.png +0 -0
  240. package/oxy-dev-tools/page/static/delete.png +0 -0
  241. package/oxy-dev-tools/page/static/fileSys/AI.png +0 -0
  242. package/oxy-dev-tools/page/static/fileSys/DWG.png +0 -0
  243. package/oxy-dev-tools/page/static/fileSys/EXE.png +0 -0
  244. package/oxy-dev-tools/page/static/fileSys/GIF.png +0 -0
  245. package/oxy-dev-tools/page/static/fileSys/HTML.png +0 -0
  246. package/oxy-dev-tools/page/static/fileSys/PSD.png +0 -0
  247. package/oxy-dev-tools/page/static/fileSys/RVT.png +0 -0
  248. package/oxy-dev-tools/page/static/fileSys/SKP.png +0 -0
  249. package/oxy-dev-tools/page/static/fileSys/SVG.png +0 -0
  250. package/oxy-dev-tools/page/static/fileSys/excel.png +0 -0
  251. package/oxy-dev-tools/page/static/fileSys/pdf.png +0 -0
  252. package/oxy-dev-tools/page/static/fileSys/pptl.png +0 -0
  253. package/oxy-dev-tools/page/static/fileSys/shipin.png +0 -0
  254. package/oxy-dev-tools/page/static/fileSys/tupian.png +0 -0
  255. package/oxy-dev-tools/page/static/fileSys/txt.png +0 -0
  256. package/oxy-dev-tools/page/static/fileSys/weizhiwenjian.png +0 -0
  257. package/oxy-dev-tools/page/static/fileSys/wenjianjia.png +0 -0
  258. package/oxy-dev-tools/page/static/fileSys/word.png +0 -0
  259. package/oxy-dev-tools/page/static/fileSys/yasuo.png +0 -0
  260. package/oxy-dev-tools/page/static/fileSys/yinpin.png +0 -0
  261. package/oxy-dev-tools/page/static/fold.png +0 -0
  262. package/oxy-dev-tools/page/static/menu.png +0 -0
  263. package/oxy-dev-tools/page/static/refresh.png +0 -0
  264. package/oxy-dev-tools/page/static/unfold.png +0 -0
  265. package/oxy-dev-tools/tools.vue +22 -0
  266. package/oxy-dev-tools/type/devTools.d.ts +406 -0
  267. package/package.json +1 -1
  268. package/tags.json +1 -1
  269. 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
+ }